ARM: mmp/dkb: enable max7312 gpio expander
authorHaojian Zhuang <haojian.zhuang@marvell.com>
Fri, 1 Apr 2011 02:39:28 +0000 (10:39 +0800)
committerEric Miao <eric.y.miao@gmail.com>
Tue, 12 Jul 2011 11:50:38 +0000 (19:50 +0800)
Support max7312 gpio expander in TTC DKB.

Signed-off-by: Haojian Zhuang <haojian.zhuang@marvell.com>
Signed-off-by: Eric Miao <eric.y.miao@gmail.com>
arch/arm/mach-mmp/ttc_dkb.c

index e411039ea59e3f2911513ca4353c8b9ce87312ac..6bd37a27e5fca67ccfd876582fed715441f409a4 100644 (file)
@@ -15,6 +15,8 @@
 #include <linux/mtd/partitions.h>
 #include <linux/mtd/onenand.h>
 #include <linux/interrupt.h>
+#include <linux/i2c/pca953x.h>
+#include <linux/gpio.h>
 
 #include <asm/mach-types.h>
 #include <asm/mach/arch.h>
 
 #include "common.h"
 
-#define TTCDKB_NR_IRQS         (IRQ_BOARD_START + 24)
+#define TTCDKB_GPIO_EXT0(x)    (NR_BUILTIN_GPIO + ((x < 0) ? 0 :       \
+                               ((x < 16) ? x : 15)))
+#define TTCDKB_GPIO_EXT1(x)    (NR_BUILTIN_GPIO + 16 + ((x < 0) ? 0 :  \
+                               ((x < 16) ? x : 15)))
+
+/*
+ * 16 board interrupts -- MAX7312 GPIO expander
+ * 16 board interrupts -- PCA9575 GPIO expander
+ * 24 board interrupts -- 88PM860x PMIC
+ */
+#define TTCDKB_NR_IRQS         (IRQ_BOARD_START + 16 + 16 + 24)
 
 static unsigned long ttc_dkb_pin_config[] __initdata = {
        /* UART2 */
@@ -113,6 +125,22 @@ static struct platform_device *ttc_dkb_devices[] = {
        &ttc_dkb_device_onenand,
 };
 
+static struct pca953x_platform_data max7312_data[] = {
+       {
+               .gpio_base      = TTCDKB_GPIO_EXT0(0),
+               .irq_base       = IRQ_BOARD_START,
+       },
+};
+
+static struct i2c_board_info ttc_dkb_i2c_info[] = {
+       {
+               .type           = "max7312",
+               .addr           = 0x23,
+               .irq            = IRQ_GPIO(80),
+               .platform_data  = &max7312_data,
+       },
+};
+
 static void __init ttc_dkb_init(void)
 {
        mfp_config(ARRAY_AND_SIZE(ttc_dkb_pin_config));
@@ -121,6 +149,7 @@ static void __init ttc_dkb_init(void)
        pxa910_add_uart(1);
 
        /* off-chip devices */
+       pxa910_add_twsi(0, NULL, ARRAY_AND_SIZE(ttc_dkb_i2c_info));
        platform_add_devices(ARRAY_AND_SIZE(ttc_dkb_devices));
 }