aboutsummaryrefslogtreecommitdiff
path: root/drivers/mfd/tqmx86.c
diff options
context:
space:
mode:
authorGravatar Matthias Schiffer <matthias.schiffer@ew.tq-group.com> 2023-02-20 12:25:44 +0100
committerGravatar Lee Jones <lee@kernel.org> 2023-04-26 11:40:28 +0100
commit1be1b23696b3d4b0231c694f5e0767b4471d33a9 (patch)
treed79c2f89ad552f35f3a69adc77b1bf43d9947655 /drivers/mfd/tqmx86.c
parentdt-bindings: mfd: syscon: Add StarFive JH7100 sysmain compatible (diff)
downloadlinux-1be1b23696b3d4b0231c694f5e0767b4471d33a9.tar.gz
linux-1be1b23696b3d4b0231c694f5e0767b4471d33a9.tar.bz2
linux-1be1b23696b3d4b0231c694f5e0767b4471d33a9.zip
mfd: tqmx86: Do not access I2C_DETECT register through io_base
The I2C_DETECT register is at IO port 0x1a7, which is outside the range passed to devm_ioport_map() for io_base, and was only working because there aren't actually any bounds checks for IO port accesses. Extending the range does not seem like a good solution here, as it would then conflict with the IO resource assigned to the I2C controller. As this is just a one-off access during probe, use a simple inb() instead. While we're at it, drop the unused define TQMX86_REG_I2C_INT_EN. Fixes: 2f17dd34ffed ("mfd: tqmx86: IO controller with I2C, Wachdog and GPIO") Signed-off-by: Matthias Schiffer <matthias.schiffer@ew.tq-group.com> Reviewed-by: Andrew Lunn <andrew@lunn.ch> Signed-off-by: Lee Jones <lee@kernel.org> Link: https://lore.kernel.org/r/e8300a30f0791afb67d79db8089fb6004855f378.1676892223.git.matthias.schiffer@ew.tq-group.com
Diffstat (limited to 'drivers/mfd/tqmx86.c')
-rw-r--r--drivers/mfd/tqmx86.c10
1 files changed, 7 insertions, 3 deletions
diff --git a/drivers/mfd/tqmx86.c b/drivers/mfd/tqmx86.c
index 7ae906ff8e35..31d0efb5aacf 100644
--- a/drivers/mfd/tqmx86.c
+++ b/drivers/mfd/tqmx86.c
@@ -49,9 +49,8 @@
#define TQMX86_REG_IO_EXT_INT_MASK 0x3
#define TQMX86_REG_IO_EXT_INT_GPIO_SHIFT 4
-#define TQMX86_REG_I2C_DETECT 0x47
+#define TQMX86_REG_I2C_DETECT 0x1a7
#define TQMX86_REG_I2C_DETECT_SOFT 0xa5
-#define TQMX86_REG_I2C_INT_EN 0x49
static uint gpio_irq;
module_param(gpio_irq, uint, 0);
@@ -213,7 +212,12 @@ static int tqmx86_probe(struct platform_device *pdev)
"Found %s - Board ID %d, PCB Revision %d, PLD Revision %d\n",
board_name, board_id, rev >> 4, rev & 0xf);
- i2c_det = ioread8(io_base + TQMX86_REG_I2C_DETECT);
+ /*
+ * The I2C_DETECT register is in the range assigned to the I2C driver
+ * later, so we don't extend TQMX86_IOSIZE. Use inb() for this one-off
+ * access instead of ioport_map + unmap.
+ */
+ i2c_det = inb(TQMX86_REG_I2C_DETECT);
if (gpio_irq_cfg) {
io_ext_int_val =