[PATCH 1/8] i2c: omap: Drop bit shift for I2C register addresses
From: Andrew Davis <hidden>
Date: 2026-09-04 13:13:16
Also in:
linux-i2c, linux-omap, lkml
Subsystem:
arm port, i2c subsystem, i2c subsystem host drivers, omap i2c driver, omap1 support, omap2+ support, the rest · Maintainers:
Russell King, Andi Shyti, Vignesh R, Aaro Koskinen, Janusz Krzysztofik, Andreas Kemnade, Kevin Hilman, Roger Quadros, Tony Lindgren, Linus Torvalds
No remaining board device uses a shift other than 2, and no DT supported platform ever did. We can drop this flag and use the pre-shifted register addresses. This simplifies the register access. Signed-off-by: Andrew Davis <redacted> --- arch/arm/mach-omap1/i2c.c | 4 --- drivers/i2c/busses/i2c-omap.c | 50 +++++++++++--------------- include/linux/platform_data/i2c-omap.h | 5 --- 3 files changed, 21 insertions(+), 38 deletions(-)
diff --git a/arch/arm/mach-omap1/i2c.c b/arch/arm/mach-omap1/i2c.c
index 94d3e7883e027..bc7828a858941 100644
--- a/arch/arm/mach-omap1/i2c.c
+++ b/arch/arm/mach-omap1/i2c.c@@ -61,10 +61,6 @@ int __init omap_i2c_add_bus(struct omap_i2c_bus_platform_data *pdata, OMAP_I2C_FLAG_16BIT_DATA_REG | OMAP_I2C_FLAG_ALWAYS_ARMXOR_CLK; - /* how the cpu bus is wired up differs for 7xx only */ - - pdata->flags |= OMAP_I2C_FLAG_BUS_SHIFT_2; - pdev->dev.platform_data = pdata; return platform_device_register(pdev);
diff --git a/drivers/i2c/busses/i2c-omap.c b/drivers/i2c/busses/i2c-omap.c
index f02d294db42a6..72f979eec7311 100644
--- a/drivers/i2c/busses/i2c-omap.c
+++ b/drivers/i2c/busses/i2c-omap.c@@ -180,7 +180,6 @@ struct omap_i2c_dev { struct device *dev; void __iomem *base; /* virtual */ int irq; - int reg_shift; /* bit shift for I2C register addresses */ struct completion cmd_complete; struct resource *ioarea; u32 latency; /* maximum mpu wkup latency */
@@ -217,23 +216,23 @@ struct omap_i2c_dev { static const u8 reg_map_ip_v1[] = { [OMAP_I2C_REV_REG] = 0x00, - [OMAP_I2C_IE_REG] = 0x01, - [OMAP_I2C_STAT_REG] = 0x02, - [OMAP_I2C_IV_REG] = 0x03, - [OMAP_I2C_WE_REG] = 0x03, - [OMAP_I2C_SYSS_REG] = 0x04, - [OMAP_I2C_BUF_REG] = 0x05, - [OMAP_I2C_CNT_REG] = 0x06, - [OMAP_I2C_DATA_REG] = 0x07, - [OMAP_I2C_SYSC_REG] = 0x08, - [OMAP_I2C_CON_REG] = 0x09, - [OMAP_I2C_OA_REG] = 0x0a, - [OMAP_I2C_SA_REG] = 0x0b, - [OMAP_I2C_PSC_REG] = 0x0c, - [OMAP_I2C_SCLL_REG] = 0x0d, - [OMAP_I2C_SCLH_REG] = 0x0e, - [OMAP_I2C_SYSTEST_REG] = 0x0f, - [OMAP_I2C_BUFSTAT_REG] = 0x10, + [OMAP_I2C_IE_REG] = 0x04, + [OMAP_I2C_STAT_REG] = 0x0c, + [OMAP_I2C_IV_REG] = 0x0c, + [OMAP_I2C_WE_REG] = 0x0c, + [OMAP_I2C_SYSS_REG] = 0x10, + [OMAP_I2C_BUF_REG] = 0x14, + [OMAP_I2C_CNT_REG] = 0x18, + [OMAP_I2C_DATA_REG] = 0x1c, + [OMAP_I2C_SYSC_REG] = 0x20, + [OMAP_I2C_CON_REG] = 0x24, + [OMAP_I2C_OA_REG] = 0x28, + [OMAP_I2C_SA_REG] = 0x2c, + [OMAP_I2C_PSC_REG] = 0x30, + [OMAP_I2C_SCLL_REG] = 0x34, + [OMAP_I2C_SCLH_REG] = 0x38, + [OMAP_I2C_SYSTEST_REG] = 0x3c, + [OMAP_I2C_BUFSTAT_REG] = 0x40, }; static const u8 reg_map_ip_v2[] = {
@@ -267,14 +266,12 @@ static int omap_i2c_xfer_data(struct omap_i2c_dev *omap); static inline void omap_i2c_write_reg(struct omap_i2c_dev *omap, int reg, u16 val) { - writew_relaxed(val, omap->base + - (omap->regs[reg] << omap->reg_shift)); + writew_relaxed(val, omap->base + omap->regs[reg]); } static inline u16 omap_i2c_read_reg(struct omap_i2c_dev *omap, int reg) { - return readw_relaxed(omap->base + - (omap->regs[reg] << omap->reg_shift)); + return readw_relaxed(omap->base + omap->regs[reg]); } static void __omap_i2c_init(struct omap_i2c_dev *omap)
@@ -1214,19 +1211,16 @@ static struct omap_i2c_bus_platform_data omap2420_pdata = { .rev = OMAP_I2C_IP_VERSION_1, .flags = OMAP_I2C_FLAG_NO_FIFO | OMAP_I2C_FLAG_SIMPLE_CLOCK | - OMAP_I2C_FLAG_16BIT_DATA_REG | - OMAP_I2C_FLAG_BUS_SHIFT_2, + OMAP_I2C_FLAG_16BIT_DATA_REG, }; static struct omap_i2c_bus_platform_data omap2430_pdata = { .rev = OMAP_I2C_IP_VERSION_1, - .flags = OMAP_I2C_FLAG_BUS_SHIFT_2 | - OMAP_I2C_FLAG_FORCE_19200_INT_CLK, + .flags = OMAP_I2C_FLAG_FORCE_19200_INT_CLK, }; static struct omap_i2c_bus_platform_data omap3_pdata = { .rev = OMAP_I2C_IP_VERSION_1, - .flags = OMAP_I2C_FLAG_BUS_SHIFT_2, }; static struct omap_i2c_bus_platform_data omap4_pdata = {
@@ -1384,8 +1378,6 @@ omap_i2c_probe(struct platform_device *pdev) platform_set_drvdata(pdev, omap); init_completion(&omap->cmd_complete); - omap->reg_shift = (omap->flags >> OMAP_I2C_FLAG_BUS_SHIFT__SHIFT) & 3; - pm_runtime_enable(omap->dev); pm_runtime_set_autosuspend_delay(omap->dev, OMAP_I2C_PM_TIMEOUT); pm_runtime_use_autosuspend(omap->dev);
diff --git a/include/linux/platform_data/i2c-omap.h b/include/linux/platform_data/i2c-omap.h
index 3444265ee8ee7..fe6753cd17bf5 100644
--- a/include/linux/platform_data/i2c-omap.h
+++ b/include/linux/platform_data/i2c-omap.h@@ -23,11 +23,6 @@ #define OMAP_I2C_FLAG_16BIT_DATA_REG BIT(2) #define OMAP_I2C_FLAG_ALWAYS_ARMXOR_CLK BIT(5) #define OMAP_I2C_FLAG_FORCE_19200_INT_CLK BIT(6) -/* how the CPU address bus must be translated for I2C unit access */ -#define OMAP_I2C_FLAG_BUS_SHIFT_NONE 0 -#define OMAP_I2C_FLAG_BUS_SHIFT_1 BIT(7) -#define OMAP_I2C_FLAG_BUS_SHIFT_2 BIT(8) -#define OMAP_I2C_FLAG_BUS_SHIFT__SHIFT 7 struct omap_i2c_bus_platform_data { u32 clkrate;
--
2.39.2