summaryrefslogtreecommitdiff
path: root/arch/arm
diff options
context:
space:
mode:
authorLaxman Dewangan <ldewangan@nvidia.com>2011-02-05 17:02:09 +0530
committerDan Willemsen <dwillemsen@nvidia.com>2011-11-30 21:45:35 -0800
commit39b4ede5d99e5f80f742d5a5a66c85d8396d50b5 (patch)
tree5a412a7045027ef87ef578cfa135c74ac09ba7fd /arch/arm
parent2b47f9cb12b723bf32d67d01faafbdc8632679cc (diff)
arm: tegra: cardhu: support for PCA6416 gpio expander
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
Diffstat (limited to 'arch/arm')
-rw-r--r--arch/arm/mach-tegra/board-cardhu-kbc.c7
-rw-r--r--arch/arm/mach-tegra/board-cardhu-sensors.c36
-rw-r--r--arch/arm/mach-tegra/board-cardhu.h28
3 files changed, 65 insertions, 6 deletions
diff --git a/arch/arm/mach-tegra/board-cardhu-kbc.c b/arch/arm/mach-tegra/board-cardhu-kbc.c
index 85db24080726..9b077b3ec377 100644
--- a/arch/arm/mach-tegra/board-cardhu-kbc.c
+++ b/arch/arm/mach-tegra/board-cardhu-kbc.c
@@ -32,15 +32,10 @@
#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
diff --git a/arch/arm/mach-tegra/board-cardhu-sensors.c b/arch/arm/mach-tegra/board-cardhu-sensors.c
index 7f08da3c895b..9e86568a40db 100644
--- a/arch/arm/mach-tegra/board-cardhu-sensors.c
+++ b/arch/arm/mach-tegra/board-cardhu-sensors.c
@@ -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;
}
diff --git a/arch/arm/mach-tegra/board-cardhu.h b/arch/arm/mach-tegra/board-cardhu.h
index d1c752d7a1db..c732345aa837 100644
--- a/arch/arm/mach-tegra/board-cardhu.h
+++ b/arch/arm/mach-tegra/board-cardhu.h
@@ -23,6 +23,13 @@
#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)
@@ -33,6 +40,27 @@
#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