Fast-plus runs at 1MHz and is used by some devices. Add support for this.

Signed-off-by: Simon Glass <s...@chromium.org>
---

Changes in v3:
- Add new patch with support for fast-plus speed

Changes in v2: None

 drivers/i2c/designware_i2c.c | 12 ++++++++++--
 drivers/i2c/designware_i2c.h |  2 ++
 2 files changed, 12 insertions(+), 2 deletions(-)

diff --git a/drivers/i2c/designware_i2c.c b/drivers/i2c/designware_i2c.c
index 1f41e3eae0..d9e0d81ff0 100644
--- a/drivers/i2c/designware_i2c.c
+++ b/drivers/i2c/designware_i2c.c
@@ -116,6 +116,13 @@ static const struct i2c_mode_info info_for_mode[] = {
                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] = {
                I2C_SPEED_HIGH_RATE,
                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))
                i2c_spd = IC_SPEED_MODE_HIGH;
        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;
        else
                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_lcnt, &i2c_base->ic_hs_scl_lcnt);
                break;
-
        case IC_SPEED_MODE_STANDARD:
                cntl |= IC_CON_SPD_SS;
                writel(config.scl_hcnt, &i2c_base->ic_ss_scl_hcnt);
                writel(config.scl_lcnt, &i2c_base->ic_ss_scl_lcnt);
                break;
-
+       case IC_SPEED_MODE_FAST_PLUS:
        case IC_SPEED_MODE_FAST:
        default:
                cntl |= IC_CON_SPD_FS;
diff --git a/drivers/i2c/designware_i2c.h b/drivers/i2c/designware_i2c.h
index 5289ab0683..3db63b5f95 100644
--- a/drivers/i2c/designware_i2c.h
+++ b/drivers/i2c/designware_i2c.h
@@ -68,6 +68,8 @@ struct i2c_regs {
 #define MIN_SS_SCL_LOWTIME     4700
 #define MIN_FS_SCL_HIGHTIME    600
 #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_LOWTIME     160
 
-- 
2.25.0.341.g760bfbb309-goog

Reply via email to