[ARM] pxa: add platform device ID table to pxa i2c driver
authorEric Miao <eric.miao@marvell.com>
Mon, 13 Apr 2009 06:43:25 +0000 (14:43 +0800)
committerEric Miao <eric.y.miao@gmail.com>
Fri, 5 Jun 2009 02:21:42 +0000 (10:21 +0800)
Signed-off-by: Eric Miao <eric.miao@marvell.com>
arch/arm/mach-pxa/devices.c
drivers/i2c/busses/i2c-pxa.c

index d245e59..899418e 100644 (file)
@@ -287,7 +287,7 @@ static struct resource pxa3xx_resources_i2c_power[] = {
 };
 
 struct platform_device pxa3xx_device_i2c_power = {
-       .name           = "pxa2xx-i2c",
+       .name           = "pxa3xx-pwri2c",
        .id             = 1,
        .resource       = pxa3xx_resources_i2c_power,
        .num_resources  = ARRAY_SIZE(pxa3xx_resources_i2c_power),
index acc7143..e4ee883 100644 (file)
 #include <linux/err.h>
 #include <linux/clk.h>
 
-#include <mach/hardware.h>
 #include <asm/irq.h>
 #include <asm/io.h>
 #include <mach/i2c.h>
 
 /*
+ * I2C register offsets will be shifted 0 or 1 bit left, depending on
+ * different SoCs
+ */
+#define REG_SHIFT_0    (0 << 0)
+#define REG_SHIFT_1    (1 << 0)
+#define REG_SHIFT(d)   ((d) & 0x1)
+
+static const struct platform_device_id i2c_pxa_id_table[] = {
+       { "pxa2xx-i2c",         REG_SHIFT_1 },
+       { "pxa3xx-pwri2c",      REG_SHIFT_0 },
+       { },
+};
+MODULE_DEVICE_TABLE(platform, i2c_pxa_id_table);
+
+/*
  * I2C registers and bit definitions
  */
 #define IBMR           (0x00)
@@ -985,6 +999,7 @@ static int i2c_pxa_probe(struct platform_device *dev)
        struct pxa_i2c *i2c;
        struct resource *res;
        struct i2c_pxa_platform_data *plat = dev->dev.platform_data;
+       struct platform_device_id *id = platform_get_device_id(dev);
        int ret;
        int irq;
 
@@ -1028,7 +1043,7 @@ static int i2c_pxa_probe(struct platform_device *dev)
                ret = -EIO;
                goto eremap;
        }
-       i2c->reg_shift = (cpu_is_pxa3xx() && (dev->id == 1)) ? 0 : 1;
+       i2c->reg_shift = REG_SHIFT(id->driver_data);
 
        i2c->iobase = res->start;
        i2c->iosize = res_len(res);
@@ -1150,6 +1165,7 @@ static struct platform_driver i2c_pxa_driver = {
                .name   = "pxa2xx-i2c",
                .owner  = THIS_MODULE,
        },
+       .id_table       = i2c_pxa_id_table,
 };
 
 static int __init i2c_adap_pxa_init(void)