]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
i2c: designware: Replace magic numbers with named constants
authorArtem Shimko <a.shimko.dev@gmail.com>
Thu, 11 Dec 2025 12:29:47 +0000 (15:29 +0300)
committerAndi Shyti <andi.shyti@kernel.org>
Fri, 16 Jan 2026 09:01:06 +0000 (10:01 +0100)
Replace various magic numbers with properly named constants to improve
code readability and maintainability. This includes constants for
register access, timing adjustments, timeouts, FIFO parameters,
and default values.

This makes the code more self-documenting without altering any
functionality.

Signed-off-by: Artem Shimko <a.shimko.dev@gmail.com>
Acked-by: Mika Westerberg <mika.westerberg@linux.intel.com>
Signed-off-by: Andi Shyti <andi.shyti@kernel.org>
Link: https://lore.kernel.org/r/20251211122947.1469666-1-a.shimko.dev@gmail.com
drivers/i2c/busses/i2c-designware-common.c
drivers/i2c/busses/i2c-designware-core.h

index 5b1e8f74c4acf4ca875beb1fdc736a89e4a357b9..6671e98691eeeb41664cb6a76fd10f0750ae7c12 100644 (file)
@@ -12,6 +12,7 @@
 #define DEFAULT_SYMBOL_NAMESPACE       "I2C_DW_COMMON"
 
 #include <linux/acpi.h>
+#include <linux/bitfield.h>
 #include <linux/clk.h>
 #include <linux/delay.h>
 #include <linux/device.h>
 
 #include "i2c-designware-core.h"
 
+#define DW_IC_DEFAULT_BUS_CAPACITANCE_pF       100
+#define DW_IC_ABORT_TIMEOUT_US                 10
+#define DW_IC_BUSY_POLL_TIMEOUT_US             (1 * USEC_PER_MSEC)
+
 static const char *const abort_sources[] = {
        [ABRT_7B_ADDR_NOACK] =
                "slave address not acknowledged (7bit mode)",
@@ -106,7 +111,7 @@ static int dw_reg_read_word(void *context, unsigned int reg, unsigned int *val)
        struct dw_i2c_dev *dev = context;
 
        *val = readw(dev->base + reg) |
-               (readw(dev->base + reg + 2) << 16);
+               (readw(dev->base + reg + DW_IC_REG_STEP_BYTES) << DW_IC_REG_WORD_SHIFT);
 
        return 0;
 }
@@ -116,7 +121,7 @@ static int dw_reg_write_word(void *context, unsigned int reg, unsigned int val)
        struct dw_i2c_dev *dev = context;
 
        writew(val, dev->base + reg);
-       writew(val >> 16, dev->base + reg + 2);
+       writew(val >> DW_IC_REG_WORD_SHIFT, dev->base + reg + DW_IC_REG_STEP_BYTES);
 
        return 0;
 }
@@ -165,7 +170,7 @@ int i2c_dw_init_regmap(struct dw_i2c_dev *dev)
        if (reg == swab32(DW_IC_COMP_TYPE_VALUE)) {
                map_cfg.reg_read = dw_reg_read_swab;
                map_cfg.reg_write = dw_reg_write_swab;
-       } else if (reg == (DW_IC_COMP_TYPE_VALUE & 0x0000ffff)) {
+       } else if (reg == lower_16_bits(DW_IC_COMP_TYPE_VALUE)) {
                map_cfg.reg_read = dw_reg_read_word;
                map_cfg.reg_write = dw_reg_write_word;
        } else if (reg != DW_IC_COMP_TYPE_VALUE) {
@@ -384,7 +389,7 @@ int i2c_dw_fw_parse_and_configure(struct dw_i2c_dev *dev)
        i2c_parse_fw_timings(device, t, false);
 
        if (device_property_read_u32(device, "snps,bus-capacitance-pf", &dev->bus_capacitance_pF))
-               dev->bus_capacitance_pF = 100;
+               dev->bus_capacitance_pF = DW_IC_DEFAULT_BUS_CAPACITANCE_pF;
 
        dev->clk_freq_optimized = device_property_read_bool(device, "snps,clk-freq-optimized");
 
@@ -539,8 +544,9 @@ void __i2c_dw_disable(struct dw_i2c_dev *dev)
 
                regmap_write(dev->map, DW_IC_ENABLE, enable | DW_IC_ENABLE_ABORT);
                ret = regmap_read_poll_timeout(dev->map, DW_IC_ENABLE, enable,
-                                              !(enable & DW_IC_ENABLE_ABORT), 10,
-                                              100);
+                                              !(enable & DW_IC_ENABLE_ABORT),
+                                              DW_IC_ABORT_TIMEOUT_US,
+                                              10 * DW_IC_ABORT_TIMEOUT_US);
                if (ret)
                        dev_err(dev->dev, "timeout while trying to abort current transfer\n");
        }
@@ -552,7 +558,7 @@ void __i2c_dw_disable(struct dw_i2c_dev *dev)
                 * in that case this test reads zero and exits the loop.
                 */
                regmap_read(dev->map, DW_IC_ENABLE_STATUS, &status);
-               if ((status & 1) == 0)
+               if (!(status & 1))
                        return;
 
                /*
@@ -635,7 +641,8 @@ int i2c_dw_wait_bus_not_busy(struct dw_i2c_dev *dev)
 
        ret = regmap_read_poll_timeout(dev->map, DW_IC_STATUS, status,
                                       !(status & DW_IC_STATUS_ACTIVITY),
-                                      1100, 20000);
+                                      DW_IC_BUSY_POLL_TIMEOUT_US,
+                                      20 * DW_IC_BUSY_POLL_TIMEOUT_US);
        if (ret) {
                dev_warn(dev->dev, "timeout waiting for bus ready\n");
 
@@ -699,12 +706,12 @@ int i2c_dw_set_fifo_size(struct dw_i2c_dev *dev)
        if (ret)
                return ret;
 
-       tx_fifo_depth = ((param >> 16) & 0xff) + 1;
-       rx_fifo_depth = ((param >> 8)  & 0xff) + 1;
+       tx_fifo_depth = FIELD_GET(DW_IC_FIFO_TX_FIELD, param) + 1;
+       rx_fifo_depth = FIELD_GET(DW_IC_FIFO_RX_FIELD, param) + 1;
        if (!dev->tx_fifo_depth) {
                dev->tx_fifo_depth = tx_fifo_depth;
                dev->rx_fifo_depth = rx_fifo_depth;
-       } else if (tx_fifo_depth >= 2) {
+       } else if (tx_fifo_depth >= DW_IC_FIFO_MIN_DEPTH) {
                dev->tx_fifo_depth = min_t(u32, dev->tx_fifo_depth,
                                tx_fifo_depth);
                dev->rx_fifo_depth = min_t(u32, dev->rx_fifo_depth,
index cf0364079b5558ff6274bc088b5ba054673c225d..ba7e307f079132fb0e29d2c575b54d6f62687d1b 100644 (file)
 #define DW_IC_DATA_CMD_DAT                     GENMASK(7, 0)
 #define DW_IC_DATA_CMD_FIRST_DATA_BYTE         BIT(11)
 
+/*
+ * Register access parameters
+ */
+#define DW_IC_REG_STEP_BYTES                   2
+#define DW_IC_REG_WORD_SHIFT                   16
+
+/*
+ * FIFO depth configuration
+ */
+#define DW_IC_FIFO_TX_FIELD                    GENMASK(23, 16)
+#define DW_IC_FIFO_RX_FIELD                    GENMASK(15, 8)
+#define DW_IC_FIFO_MIN_DEPTH                   2
+
 /*
  * Registers offset
  */