]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
i2c: core: Provide generic definitions for bus frequencies
authorAndy Shevchenko <andriy.shevchenko@linux.intel.com>
Tue, 24 Mar 2020 12:32:11 +0000 (14:32 +0200)
committerWolfram Sang <wsa@the-dreams.de>
Tue, 24 Mar 2020 20:58:51 +0000 (21:58 +0100)
There are few maximum bus frequencies being used in the I²C core code.
Provide generic definitions for bus frequencies and use them in the core.

The drivers may use predefined constants where it is appropriate.
Some of them are already using these under slightly different names.
We will convert them later to use newly introduced defines.

Note, the name of modes are chosen to follow well established naming
scheme [1].

These definitions will also help to avoid typos in the numbers that
may lead to subtle errors.

[1]: https://en.wikipedia.org/wiki/I%C2%B2C#Differences_between_modes

Acked-by: Mika Westerberg <mika.westerberg@linux.intel.com>
Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Signed-off-by: Wolfram Sang <wsa@the-dreams.de>
drivers/i2c/i2c-core-acpi.c
drivers/i2c/i2c-core-base.c
include/linux/i2c.h

index 8f3dbc97a0571e3de740677e680ec25ef4348775..7665685e3ca85a61c1cf2141c53650fcfb84664a 100644 (file)
@@ -318,7 +318,7 @@ static acpi_status i2c_acpi_lookup_speed(acpi_handle handle, u32 level,
                lookup->min_speed = lookup->speed;
 
        if (acpi_match_device_ids(adev, i2c_acpi_force_400khz_device_ids) == 0)
-               lookup->force_speed = 400000;
+               lookup->force_speed = I2C_MAX_FAST_MODE_FREQ;
 
        return AE_OK;
 }
index cefad08819420adcb59ca8078fb3c8a41677ca99..9b2972c7faa243367fa084ef9df148f664d7350e 100644 (file)
@@ -1612,13 +1612,13 @@ void i2c_parse_fw_timings(struct device *dev, struct i2c_timings *t, bool use_de
 
        ret = device_property_read_u32(dev, "clock-frequency", &t->bus_freq_hz);
        if (ret && use_defaults)
-               t->bus_freq_hz = 100000;
+               t->bus_freq_hz = I2C_MAX_STANDARD_MODE_FREQ;
 
        ret = device_property_read_u32(dev, "i2c-scl-rising-time-ns", &t->scl_rise_ns);
        if (ret && use_defaults) {
-               if (t->bus_freq_hz <= 100000)
+               if (t->bus_freq_hz <= I2C_MAX_STANDARD_MODE_FREQ)
                        t->scl_rise_ns = 1000;
-               else if (t->bus_freq_hz <= 400000)
+               else if (t->bus_freq_hz <= I2C_MAX_FAST_MODE_FREQ)
                        t->scl_rise_ns = 300;
                else
                        t->scl_rise_ns = 120;
@@ -1626,7 +1626,7 @@ void i2c_parse_fw_timings(struct device *dev, struct i2c_timings *t, bool use_de
 
        ret = device_property_read_u32(dev, "i2c-scl-falling-time-ns", &t->scl_fall_ns);
        if (ret && use_defaults) {
-               if (t->bus_freq_hz <= 400000)
+               if (t->bus_freq_hz <= I2C_MAX_FAST_MODE_FREQ)
                        t->scl_fall_ns = 300;
                else
                        t->scl_fall_ns = 120;
index f834687989f713fca317f679389117129d9aa345..72e759328cee4824085376e8bcfaa5f8440a556d 100644 (file)
@@ -39,6 +39,14 @@ enum i2c_slave_event;
 typedef int (*i2c_slave_cb_t)(struct i2c_client *client,
                              enum i2c_slave_event event, u8 *val);
 
+/* I2C Frequency Modes */
+#define I2C_MAX_STANDARD_MODE_FREQ     100000
+#define I2C_MAX_FAST_MODE_FREQ         400000
+#define I2C_MAX_FAST_MODE_PLUS_FREQ    1000000
+#define I2C_MAX_TURBO_MODE_FREQ                1400000
+#define I2C_MAX_HIGH_SPEED_MODE_FREQ   3400000
+#define I2C_MAX_ULTRA_FAST_MODE_FREQ   5000000
+
 struct module;
 struct property_entry;