diff options
author | Laxman Dewangan <ldewangan@nvidia.com> | 2011-10-04 18:28:57 +0530 |
---|---|---|
committer | Varun Colbert <vcolbert@nvidia.com> | 2011-10-13 18:43:55 -0700 |
commit | 0ff8d8639ea85f86bc1c356d1c5b1cbe1a90aab3 (patch) | |
tree | 7f41133472553df86cc8d20f7d0e7aeb62be2860 | |
parent | 2564b8d75a4c4e6e3d3a4ddcf809ced48245d30e (diff) |
arm: tegra: cardhu: Initialize gpio pins mode
Initializing the pins which is used in gpio to their inital state.
bug 876305
Reviewed-on: http://git-master/r/57516
(cherry picked from commit 3f33cb777295669e71e291bb05651d3c6c4b37d5)
Change-Id: Ie05862e5184bb95c85cf7aa96ce2eca497c01c93
Reviewed-on: http://git-master/r/57817
Reviewed-by: Varun Colbert <vcolbert@nvidia.com>
Tested-by: Varun Colbert <vcolbert@nvidia.com>
-rw-r--r-- | arch/arm/mach-tegra/board-cardhu-pinmux.c | 79 | ||||
-rw-r--r-- | arch/arm/mach-tegra/include/mach/gpio.h | 8 |
2 files changed, 75 insertions, 12 deletions
diff --git a/arch/arm/mach-tegra/board-cardhu-pinmux.c b/arch/arm/mach-tegra/board-cardhu-pinmux.c index 9e39f2a11218..cb3344d4e002 100644 --- a/arch/arm/mach-tegra/board-cardhu-pinmux.c +++ b/arch/arm/mach-tegra/board-cardhu-pinmux.c @@ -517,9 +517,71 @@ static void __init cardhu_pinmux_audio_init(void) tegra_gpio_enable(TEGRA_GPIO_HP_DET); } +#define GPIO_INIT_PIN_MODE(_gpio, _is_input, _value) \ + { \ + .gpio_nr = _gpio, \ + .is_input = _is_input, \ + .value = _value, \ + } + + +/* E1198-A01/E1291 specific fab < A03 */ +static struct gpio_init_pin_info init_gpio_mode_e1291_a02[] = { + GPIO_INIT_PIN_MODE(TEGRA_GPIO_PH7, false, 0), + GPIO_INIT_PIN_MODE(TEGRA_GPIO_PI4, false, 0), +}; + +/* 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), +}; + +static void __init cardhu_gpio_init_configure(void) +{ + struct board_info board_info; + int len; + int i; + struct gpio_init_pin_info *pins_info; + + tegra_get_board_info(&board_info); + + switch (board_info.board_id) { + case BOARD_E1198: + if (board_info.fab < BOARD_FAB_A02) { + len = ARRAY_SIZE(init_gpio_mode_e1291_a02); + pins_info = init_gpio_mode_e1291_a02; + } else { + len = ARRAY_SIZE(init_gpio_mode_e1291_a03); + pins_info = init_gpio_mode_e1291_a03; + } + break; + case BOARD_E1291: + if (board_info.fab < BOARD_FAB_A03) { + len = ARRAY_SIZE(init_gpio_mode_e1291_a02); + pins_info = init_gpio_mode_e1291_a02; + } else { + len = ARRAY_SIZE(init_gpio_mode_e1291_a03); + pins_info = init_gpio_mode_e1291_a03; + } + break; + default: + return; + } + + for (i = 0; i < len; ++i) { + tegra_gpio_init_configure(pins_info->gpio_nr, + pins_info->is_input, pins_info->value); + pins_info++; + } +} + int __init cardhu_pinmux_init(void) { struct board_info board_info; + + cardhu_gpio_init_configure(); + tegra_pinmux_config_table(cardhu_pinmux_common, ARRAY_SIZE(cardhu_pinmux_common)); tegra_drive_pinmux_config_table(cardhu_drive_pinmux, ARRAY_SIZE(cardhu_drive_pinmux)); @@ -572,13 +634,6 @@ int __init cardhu_pinmux_init(void) return 0; } -struct pin_info_low_power_mode { - char name[16]; - int gpio_nr; - bool is_gpio; - bool is_input; - int value; /* Value if it is output*/ -}; #define PIN_GPIO_LPM(_name, _gpio, _is_input, _value) \ { \ .name = _name, \ @@ -588,7 +643,7 @@ struct pin_info_low_power_mode { .value = _value, \ } -struct pin_info_low_power_mode pin_lpm_cardhu_common[] = { +struct gpio_init_pin_info pin_lpm_cardhu_common[] = { PIN_GPIO_LPM("GMI_CS3_N", TEGRA_GPIO_PK4, 0, 0), PIN_GPIO_LPM("GMI_CS4_N", TEGRA_GPIO_PK2, 1, 0), PIN_GPIO_LPM("GMI_AD9", TEGRA_GPIO_PH1, 0, 0), @@ -599,7 +654,7 @@ struct pin_info_low_power_mode pin_lpm_cardhu_common[] = { PIN_GPIO_LPM("GMI_WP_N", TEGRA_GPIO_PC7, 1, 0), }; -struct pin_info_low_power_mode vddio_gmi_pins_pm269[] = { +struct gpio_init_pin_info vddio_gmi_pins_pm269[] = { PIN_GPIO_LPM("GMI_CS2", TEGRA_GPIO_PK3, 1, 0), PIN_GPIO_LPM("GMI_CS3_N", TEGRA_GPIO_PK4, 0, 0), PIN_GPIO_LPM("GMI_CS4_N", TEGRA_GPIO_PK2, 1, 0), @@ -614,15 +669,15 @@ struct pin_info_low_power_mode vddio_gmi_pins_pm269[] = { PIN_GPIO_LPM("GMI_A19", TEGRA_GPIO_PK7, 0, 0), }; -static void set_unused_pin_gpio(struct pin_info_low_power_mode *lpm_pin_info, +static void set_unused_pin_gpio(struct gpio_init_pin_info *lpm_pin_info, int list_count) { int i; - struct pin_info_low_power_mode *pin_info; + struct gpio_init_pin_info *pin_info; int ret; for (i = 0; i < list_count; ++i) { - pin_info = (struct pin_info_low_power_mode *)(lpm_pin_info + i); + pin_info = (struct gpio_init_pin_info *)(lpm_pin_info + i); if (!pin_info->is_gpio) continue; diff --git a/arch/arm/mach-tegra/include/mach/gpio.h b/arch/arm/mach-tegra/include/mach/gpio.h index 3ec5d94214e1..d083c912f9c3 100644 --- a/arch/arm/mach-tegra/include/mach/gpio.h +++ b/arch/arm/mach-tegra/include/mach/gpio.h @@ -28,6 +28,14 @@ #include <asm-generic/gpio.h> +struct gpio_init_pin_info { + char name[16]; + int gpio_nr; + bool is_gpio; + bool is_input; + int value; /* Value if it is output*/ +}; + #define gpio_get_value __gpio_get_value #define gpio_set_value __gpio_set_value #define gpio_cansleep __gpio_cansleep |