i2c: designware: Move i2c_dw_validate_speed() helper to a common code
authorAndy Shevchenko <andriy.shevchenko@linux.intel.com>
Tue, 19 May 2020 12:50:39 +0000 (15:50 +0300)
committerWolfram Sang <wsa@kernel.org>
Fri, 22 May 2020 14:50:27 +0000 (16:50 +0200)
In order to export array supported speed for wider use, move it
to a header along with i2c_dw_validate_speed() helper moved to
a common code.

No functional changes intended.

Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Acked-by: Jarkko Nikula <jarkko.nikula@linux.intel.com>
Signed-off-by: Wolfram Sang <wsa@kernel.org>
drivers/i2c/busses/i2c-designware-common.c
drivers/i2c/busses/i2c-designware-core.h
drivers/i2c/busses/i2c-designware-platdrv.c

index c70c6fc09ee3b8ef8154e9a8c8bd05803e23d8e0..9f06567be54ab0a128a812451042ae87a1db838c 100644 (file)
@@ -116,6 +116,30 @@ int i2c_dw_set_reg_access(struct dw_i2c_dev *dev)
        return 0;
 }
 
+int i2c_dw_validate_speed(struct dw_i2c_dev *dev)
+{
+       struct i2c_timings *t = &dev->timings;
+       unsigned int i;
+
+       /*
+        * Only standard mode at 100kHz, fast mode at 400kHz,
+        * fast mode plus at 1MHz and high speed mode at 3.4MHz are supported.
+        */
+       for (i = 0; i < ARRAY_SIZE(i2c_dw_supported_speeds); i++) {
+               if (t->bus_freq_hz == i2c_dw_supported_speeds[i])
+                       break;
+       }
+       if (i == ARRAY_SIZE(i2c_dw_supported_speeds)) {
+               dev_err(dev->dev,
+                       "%d Hz is unsupported, only 100kHz, 400kHz, 1MHz and 3.4MHz are supported\n",
+                       t->bus_freq_hz);
+               return -EINVAL;
+       }
+
+       return 0;
+}
+EXPORT_SYMBOL_GPL(i2c_dw_validate_speed);
+
 u32 i2c_dw_scl_hcnt(u32 ic_clk, u32 tSYMBOL, u32 tf, int cond, int offset)
 {
        /*
index 94d9ad15133aef7ac2a3ae1835f757d282fbb386..77c8aa422268c539faf18aaa87319323e7f3e132 100644 (file)
@@ -359,3 +359,12 @@ extern int i2c_dw_probe_lock_support(struct dw_i2c_dev *dev);
 #else
 static inline int i2c_dw_probe_lock_support(struct dw_i2c_dev *dev) { return 0; }
 #endif
+
+static __maybe_unused const u32 i2c_dw_supported_speeds[] = {
+       I2C_MAX_HIGH_SPEED_MODE_FREQ,
+       I2C_MAX_FAST_MODE_PLUS_FREQ,
+       I2C_MAX_FAST_MODE_FREQ,
+       I2C_MAX_STANDARD_MODE_FREQ,
+};
+
+int i2c_dw_validate_speed(struct dw_i2c_dev *dev);
index 01db634461b60ee9d715f33653a306e1430a8451..d6c03d7179c7afdda326d5336495d4781a065f47 100644 (file)
@@ -192,13 +192,6 @@ static void dw_i2c_plat_pm_cleanup(struct dw_i2c_dev *dev)
                pm_runtime_put_noidle(dev->dev);
 }
 
-static const u32 supported_speeds[] = {
-       I2C_MAX_HIGH_SPEED_MODE_FREQ,
-       I2C_MAX_FAST_MODE_PLUS_FREQ,
-       I2C_MAX_FAST_MODE_FREQ,
-       I2C_MAX_STANDARD_MODE_FREQ,
-};
-
 static int dw_i2c_plat_probe(struct platform_device *pdev)
 {
        struct dw_i2c_platform_data *pdata = dev_get_platdata(&pdev->dev);
@@ -241,11 +234,11 @@ static int dw_i2c_plat_probe(struct platform_device *pdev)
         * Some DSTDs use a non standard speed, round down to the lowest
         * standard speed.
         */
-       for (i = 0; i < ARRAY_SIZE(supported_speeds); i++) {
-               if (acpi_speed >= supported_speeds[i])
+       for (i = 0; i < ARRAY_SIZE(i2c_dw_supported_speeds); i++) {
+               if (acpi_speed >= i2c_dw_supported_speeds[i])
                        break;
        }
-       acpi_speed = i < ARRAY_SIZE(supported_speeds) ? supported_speeds[i] : 0;
+       acpi_speed = i < ARRAY_SIZE(i2c_dw_supported_speeds) ? i2c_dw_supported_speeds[i] : 0;
 
        /*
         * Find bus speed from the "clock-frequency" device property, ACPI
@@ -266,21 +259,9 @@ static int dw_i2c_plat_probe(struct platform_device *pdev)
        if (has_acpi_companion(&pdev->dev))
                dw_i2c_acpi_configure(pdev);
 
-       /*
-        * Only standard mode at 100kHz, fast mode at 400kHz,
-        * fast mode plus at 1MHz and high speed mode at 3.4MHz are supported.
-        */
-       for (i = 0; i < ARRAY_SIZE(supported_speeds); i++) {
-               if (t->bus_freq_hz == supported_speeds[i])
-                       break;
-       }
-       if (i == ARRAY_SIZE(supported_speeds)) {
-               dev_err(&pdev->dev,
-                       "%d Hz is unsupported, only 100kHz, 400kHz, 1MHz and 3.4MHz are supported\n",
-                       t->bus_freq_hz);
-               ret = -EINVAL;
+       ret = i2c_dw_validate_speed(dev);
+       if (ret)
                goto exit_reset;
-       }
 
        ret = i2c_dw_probe_lock_support(dev);
        if (ret)