diff options
author | Laxman Dewangan <ldewangan@nvidia.com> | 2011-02-05 17:02:09 +0530 |
---|---|---|
committer | Dan Willemsen <dwillemsen@nvidia.com> | 2011-11-30 21:45:35 -0800 |
commit | 39b4ede5d99e5f80f742d5a5a66c85d8396d50b5 (patch) | |
tree | 5a412a7045027ef87ef578cfa135c74ac09ba7fd | |
parent | 2b47f9cb12b723bf32d67d01faafbdc8632679cc (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
-rw-r--r-- | arch/arm/mach-tegra/board-cardhu-kbc.c | 7 | ||||
-rw-r--r-- | arch/arm/mach-tegra/board-cardhu-sensors.c | 36 | ||||
-rw-r--r-- | arch/arm/mach-tegra/board-cardhu.h | 28 |
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 |