arm: tegra: cardhu: Support cap sensor for E1291-A04
Laxman Dewangan [Wed, 30 Nov 2011 13:20:44 +0000 (18:20 +0530)]
Supporting the cap sensor based key board which is used in
cardhu - A04.

bug 895616

Change-Id: I433610de6945a5d9fe6e282d80e8e5e9fa6ac5b3

Signed-off-by: Laxman Dewangan <ldewangan@nvidia.com>
Change-Id: I47d857f34a18a72c7aad44ae26921404b091dd14
Reviewed-on: http://git-master/r/67426
Reviewed-by: Venkat Moganty <vmoganty@nvidia.com>

Rebase-Id: R87d922f5c936b28a1662667db0a1ae10b1498392

arch/arm/mach-tegra/board-cardhu-kbc.c
arch/arm/mach-tegra/board-cardhu-pinmux.c

index 5837884..0fffa15 100644 (file)
@@ -152,6 +152,15 @@ static struct gpio_keys_button cardhu_keys_e1291[] = {
        [5] = GPIO_KEY(KEY_VOLUMEDOWN, PQ1, 0),
 };
 
+static struct gpio_keys_button cardhu_keys_e1291_a04[] = {
+       [0] = GPIO_KEY(KEY_MENU, PR0, 0),
+       [1] = GPIO_KEY(KEY_BACK, PR1, 0),
+       [2] = GPIO_KEY(KEY_HOME, PQ2, 0),
+       [3] = GPIO_KEY(KEY_SEARCH, PQ3, 0),
+       [4] = GPIO_KEY(KEY_VOLUMEUP, PQ0, 0),
+       [5] = GPIO_KEY(KEY_VOLUMEDOWN, PQ1, 0),
+};
+
 static struct gpio_keys_platform_data cardhu_keys_e1291_platform_data = {
        .buttons        = cardhu_keys_e1291,
        .nbuttons       = ARRAY_SIZE(cardhu_keys_e1291),
@@ -219,9 +228,17 @@ int __init cardhu_keys_init(void)
        pr_info("Registering gpio keys\n");
 
        if (board_info.board_id == BOARD_E1291) {
+               if (board_info.fab >= BOARD_FAB_A04) {
+                       cardhu_keys_e1291_platform_data.buttons =
+                                       cardhu_keys_e1291_a04;
+                       cardhu_keys_e1291_platform_data.nbuttons =
+                                       ARRAY_SIZE(cardhu_keys_e1291_a04);
+               }
+
                /* Enable gpio mode for other pins */
-               for (i = 0; i < ARRAY_SIZE(cardhu_keys_e1291); i++)
-                       tegra_gpio_enable(cardhu_keys_e1291[i].gpio);
+               for (i = 0; i < cardhu_keys_e1291_platform_data.nbuttons; i++)
+                       tegra_gpio_enable(cardhu_keys_e1291_platform_data.
+                                               buttons[i].gpio);
 
                platform_device_register(&cardhu_keys_e1291_device);
        } else if (board_info.board_id == BOARD_E1198) {
index a07bd01..1b736a4 100644 (file)
@@ -555,12 +555,19 @@ static struct gpio_init_pin_info init_gpio_mode_e1291_a02[] = {
        GPIO_INIT_PIN_MODE(TEGRA_GPIO_PI4, false, 0),
 };
 
-/* E1198-A02/E1291 specific  fab >= A03 */
+/* E1198-A02/E1291 specific  fab = A03 */
 static struct gpio_init_pin_info init_gpio_mode_e1291_a03[] = {
        GPIO_INIT_PIN_MODE(TEGRA_GPIO_PDD6, false, 0),
        GPIO_INIT_PIN_MODE(TEGRA_GPIO_PDD4, false, 0),
 };
 
+/* E1198-A02/E1291 specific  fab >= A04 */
+static struct gpio_init_pin_info init_gpio_mode_e1291_a04[] = {
+       GPIO_INIT_PIN_MODE(TEGRA_GPIO_PDD6, false, 0),
+       GPIO_INIT_PIN_MODE(TEGRA_GPIO_PDD4, false, 0),
+       GPIO_INIT_PIN_MODE(TEGRA_GPIO_PR2, false, 0),
+};
+
 static void __init cardhu_gpio_init_configure(void)
 {
        struct board_info board_info;
@@ -584,9 +591,12 @@ static void __init cardhu_gpio_init_configure(void)
                if (board_info.fab < BOARD_FAB_A03) {
                        len = ARRAY_SIZE(init_gpio_mode_e1291_a02);
                        pins_info = init_gpio_mode_e1291_a02;
-               } else {
+               } else if (board_info.fab == BOARD_FAB_A03) {
                        len = ARRAY_SIZE(init_gpio_mode_e1291_a03);
                        pins_info = init_gpio_mode_e1291_a03;
+               } else {
+                       len = ARRAY_SIZE(init_gpio_mode_e1291_a04);
+                       pins_info = init_gpio_mode_e1291_a04;
                }
                break;
        default: