arm: tegra: cardhu: support for PCA6416 gpio expander
Laxman Dewangan [Sat, 5 Feb 2011 11:32:09 +0000 (16:32 +0530)]
Supporting PCA6416 i2c-bus gpio expander placed on PMU module
of E1187/E1186 board.

Original-Change-Id: I9462aefb8c370e8853253c6f9b36d7c1b1ae8c10
Reviewed-on: http://git-master/r/18151
Tested-by: Laxman Dewangan <ldewangan@nvidia.com>
Reviewed-by: Animesh Kishore <ankishore@nvidia.com>
Tested-by: Animesh Kishore <ankishore@nvidia.com>
Reviewed-by: Laxman Dewangan <ldewangan@nvidia.com>
Original-Change-Id: I3a703eed03a92ea25f710c16cf6fae6d3716575e

Rebase-Id: R505657674196d14a7445b3d0d44c27093d91bebe

arch/arm/mach-tegra/board-cardhu-kbc.c
arch/arm/mach-tegra/board-cardhu-sensors.c
arch/arm/mach-tegra/board-cardhu.h

index 85db240..9b077b3 100644 (file)
 #include <mach/iomap.h>
 #include <mach/kbc.h>
 #include "board.h"
+#include "board-cardhu.h"
 
 #include "gpio-names.h"
 
-#define BOARD_E1187   0x0B57
-#define BOARD_E1186   0x0B56
-#define BOARD_E1198   0x0B62
-#define BOARD_E1291   0x0C5B
-
-
 #ifdef CONFIG_KEYBOARD_TEGRA
 #ifdef CONFIG_INPUT_ALPS_GPIO_SCROLLWHEEL
 #define CARDHU_ROW_COUNT       3
index 7f08da3..9e86568 100644 (file)
@@ -20,7 +20,9 @@
 
 #include <linux/i2c.h>
 #include <linux/i2c/pca954x.h>
+#include <linux/i2c/pca953x.h>
 
+#include "board.h"
 #include "board-cardhu.h"
 
 #ifdef CONFIG_I2C_MUX_PCA954x
@@ -47,11 +49,45 @@ static const struct i2c_board_info cardhu_i2c3_board_info[] = {
 #endif
 };
 
+#if defined(CONFIG_GPIO_PCA953X)
+static struct pca953x_platform_data cardhu_pmu_tca6416_data = {
+       .gpio_base      = PMU_TCA6416_GPIO_BASE,
+};
+
+static const struct i2c_board_info cardhu_i2c4_board_info_tca6416[] = {
+       {
+               I2C_BOARD_INFO("tca6416", 0x20),
+               .platform_data = &cardhu_pmu_tca6416_data,
+       },
+};
+
+static int __init pmu_tca6416_init(void)
+{
+       struct board_info board_info;
+       tegra_get_board_info(&board_info);
+       if ((board_info.board_id == BOARD_E1198) ||
+                       (board_info.board_id == BOARD_E1291))
+               return 0;
+
+       pr_info("Registering pmu pca6416\n");
+       i2c_register_board_info(4, cardhu_i2c4_board_info_tca6416,
+               ARRAY_SIZE(cardhu_i2c4_board_info_tca6416));
+       return 0;
+}
+#else
+static int __init pmu_tca6416_init(void)
+{
+       return 0;
+}
+#endif
+
 int __init cardhu_sensors_init(void)
 {
+
        if (ARRAY_SIZE(cardhu_i2c3_board_info))
                i2c_register_board_info(3, cardhu_i2c3_board_info,
                        ARRAY_SIZE(cardhu_i2c3_board_info));
 
+       pmu_tca6416_init();
        return 0;
 }
index d1c752d..c732345 100644 (file)
 
 #include <mach/gpio.h>
 
+#define BOARD_E1187   0x0B57
+#define BOARD_E1186   0x0B56
+#define BOARD_E1198   0x0B62
+#define BOARD_E1291   0x0C5B
+
+/* External peripheral act as gpio */
+/* TPS6591x GPIOs */
 #define TPS6591X_GPIO_BASE     TEGRA_NR_GPIOS
 #define TPS6591X_GPIO_GP0      (TPS6591X_GPIO_BASE + 0)
 #define TPS6591X_GPIO_GP1      (TPS6591X_GPIO_BASE + 1)
 #define TPS6591X_GPIO_GP6      (TPS6591X_GPIO_BASE + 6)
 #define TPS6591X_GPIO_GP7      (TPS6591X_GPIO_BASE + 7)
 #define TPS6591X_GPIO_GP8      (TPS6591X_GPIO_BASE + 8)
+#define TPS6591X_GPIO_END      (TPS6591X_GPIO_GP8 + 1)
+
+/* PMU_TCA6416 GPIOs */
+#define PMU_TCA6416_GPIO_BASE  (TPS6591X_GPIO_END)
+#define PMU_TCA6416_GPIO_PORT00        (PMU_TCA6416_GPIO_BASE + 0)
+#define PMU_TCA6416_GPIO_PORT01        (PMU_TCA6416_GPIO_BASE + 1)
+#define PMU_TCA6416_GPIO_PORT02        (PMU_TCA6416_GPIO_BASE + 2)
+#define PMU_TCA6416_GPIO_PORT03        (PMU_TCA6416_GPIO_BASE + 3)
+#define PMU_TCA6416_GPIO_PORT04        (PMU_TCA6416_GPIO_BASE + 4)
+#define PMU_TCA6416_GPIO_PORT05        (PMU_TCA6416_GPIO_BASE + 5)
+#define PMU_TCA6416_GPIO_PORT06        (PMU_TCA6416_GPIO_BASE + 6)
+#define PMU_TCA6416_GPIO_PORT07        (PMU_TCA6416_GPIO_BASE + 7)
+#define PMU_TCA6416_GPIO_PORT10        (PMU_TCA6416_GPIO_BASE + 8)
+#define PMU_TCA6416_GPIO_PORT11        (PMU_TCA6416_GPIO_BASE + 9)
+#define PMU_TCA6416_GPIO_PORT12        (PMU_TCA6416_GPIO_BASE + 10)
+#define PMU_TCA6416_GPIO_PORT13        (PMU_TCA6416_GPIO_BASE + 11)
+#define PMU_TCA6416_GPIO_PORT14        (PMU_TCA6416_GPIO_BASE + 12)
+#define PMU_TCA6416_GPIO_PORT15        (PMU_TCA6416_GPIO_BASE + 13)
+#define PMU_TCA6416_GPIO_PORT16        (PMU_TCA6416_GPIO_BASE + 14)
+#define PMU_TCA6416_GPIO_PORT17        (PMU_TCA6416_GPIO_BASE + 15)
+#define PMU_TCA6416_GPIO_END   (PMU_TCA6416_GPIO_BASE + 16)
 
 /* PCA954x I2C bus expander bus addresses */
 #define PCA954x_I2C_BUS_BASE   6