mirror of
https://github.com/AsahiLinux/u-boot
synced 2024-11-27 15:12:21 +00:00
i2c: designware_i2c: Add support for fast-plus speed
Fast-plus runs at 1MHz and is used by some devices. Add support for this. Signed-off-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
parent
f3d461521a
commit
d96440d1e3
2 changed files with 12 additions and 2 deletions
|
@ -116,6 +116,13 @@ static const struct i2c_mode_info info_for_mode[] = {
|
||||||
300,
|
300,
|
||||||
300,
|
300,
|
||||||
},
|
},
|
||||||
|
[IC_SPEED_MODE_FAST_PLUS] = {
|
||||||
|
I2C_SPEED_FAST_PLUS_RATE,
|
||||||
|
MIN_FP_SCL_HIGHTIME,
|
||||||
|
MIN_FP_SCL_LOWTIME,
|
||||||
|
260,
|
||||||
|
500,
|
||||||
|
},
|
||||||
[IC_SPEED_MODE_HIGH] = {
|
[IC_SPEED_MODE_HIGH] = {
|
||||||
I2C_SPEED_HIGH_RATE,
|
I2C_SPEED_HIGH_RATE,
|
||||||
MIN_HS_SCL_HIGHTIME,
|
MIN_HS_SCL_HIGHTIME,
|
||||||
|
@ -230,6 +237,8 @@ static unsigned int __dw_i2c_set_bus_speed(struct dw_i2c *priv,
|
||||||
(!scl_sda_cfg || scl_sda_cfg->has_high_speed))
|
(!scl_sda_cfg || scl_sda_cfg->has_high_speed))
|
||||||
i2c_spd = IC_SPEED_MODE_HIGH;
|
i2c_spd = IC_SPEED_MODE_HIGH;
|
||||||
else if (speed >= I2C_SPEED_FAST_RATE)
|
else if (speed >= I2C_SPEED_FAST_RATE)
|
||||||
|
i2c_spd = IC_SPEED_MODE_FAST_PLUS;
|
||||||
|
else if (speed >= I2C_SPEED_FAST_PLUS_RATE)
|
||||||
i2c_spd = IC_SPEED_MODE_FAST;
|
i2c_spd = IC_SPEED_MODE_FAST;
|
||||||
else
|
else
|
||||||
i2c_spd = IC_SPEED_MODE_STANDARD;
|
i2c_spd = IC_SPEED_MODE_STANDARD;
|
||||||
|
@ -271,13 +280,12 @@ static unsigned int __dw_i2c_set_bus_speed(struct dw_i2c *priv,
|
||||||
writel(config.scl_hcnt, &i2c_base->ic_hs_scl_hcnt);
|
writel(config.scl_hcnt, &i2c_base->ic_hs_scl_hcnt);
|
||||||
writel(config.scl_lcnt, &i2c_base->ic_hs_scl_lcnt);
|
writel(config.scl_lcnt, &i2c_base->ic_hs_scl_lcnt);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case IC_SPEED_MODE_STANDARD:
|
case IC_SPEED_MODE_STANDARD:
|
||||||
cntl |= IC_CON_SPD_SS;
|
cntl |= IC_CON_SPD_SS;
|
||||||
writel(config.scl_hcnt, &i2c_base->ic_ss_scl_hcnt);
|
writel(config.scl_hcnt, &i2c_base->ic_ss_scl_hcnt);
|
||||||
writel(config.scl_lcnt, &i2c_base->ic_ss_scl_lcnt);
|
writel(config.scl_lcnt, &i2c_base->ic_ss_scl_lcnt);
|
||||||
break;
|
break;
|
||||||
|
case IC_SPEED_MODE_FAST_PLUS:
|
||||||
case IC_SPEED_MODE_FAST:
|
case IC_SPEED_MODE_FAST:
|
||||||
default:
|
default:
|
||||||
cntl |= IC_CON_SPD_FS;
|
cntl |= IC_CON_SPD_FS;
|
||||||
|
|
|
@ -68,6 +68,8 @@ struct i2c_regs {
|
||||||
#define MIN_SS_SCL_LOWTIME 4700
|
#define MIN_SS_SCL_LOWTIME 4700
|
||||||
#define MIN_FS_SCL_HIGHTIME 600
|
#define MIN_FS_SCL_HIGHTIME 600
|
||||||
#define MIN_FS_SCL_LOWTIME 1300
|
#define MIN_FS_SCL_LOWTIME 1300
|
||||||
|
#define MIN_FP_SCL_HIGHTIME 260
|
||||||
|
#define MIN_FP_SCL_LOWTIME 500
|
||||||
#define MIN_HS_SCL_HIGHTIME 60
|
#define MIN_HS_SCL_HIGHTIME 60
|
||||||
#define MIN_HS_SCL_LOWTIME 160
|
#define MIN_HS_SCL_LOWTIME 160
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue