diff options
author | Laxman Dewangan <ldewangan@nvidia.com> | 2011-10-04 18:28:57 +0530 |
---|---|---|
committer | Simone Willett <swillett@nvidia.com> | 2011-10-11 16:18:50 -0700 |
commit | 21cd39dad9ad2faac024c3cc51b4427f42327e98 (patch) | |
tree | 3b1594b864d714be3e68a4709a12e34ceb5e08e6 /arch | |
parent | bfbf2766d11a5f85781532ddce3a87b7ae762ba3 (diff) |
arm: tegra: cardhu: Initialize gpio pins mode
Initializing the pins which is used in gpio to their inital state.
bug 876305
Change-Id: Iaccc66eae900781abf3f0ea2dba27a1fdcbdb31b
Reviewed-on: http://git-master/r/54658
Tested-by: Alex Courbot <acourbot@nvidia.com>
Reviewed-by: Laxman Dewangan <ldewangan@nvidia.com>
Diffstat (limited to 'arch')
-rw-r--r-- | arch/arm/mach-tegra/board-cardhu-pinmux.c | 84 | ||||
-rw-r--r-- | arch/arm/mach-tegra/include/mach/gpio.h | 8 |
2 files changed, 78 insertions, 14 deletions
diff --git a/arch/arm/mach-tegra/board-cardhu-pinmux.c b/arch/arm/mach-tegra/board-cardhu-pinmux.c index d4bbf3a8829d..68f40d1f8421 100644 --- a/arch/arm/mach-tegra/board-cardhu-pinmux.c +++ b/arch/arm/mach-tegra/board-cardhu-pinmux.c @@ -530,9 +530,72 @@ static __initdata struct tegra_pingroup_config gmi_pins_269[] = { DEFAULT_PINMUX(GMI_WP_N, NAND, NORMAL, NORMAL, INPUT), }; + +#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)); @@ -582,13 +645,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, \ @@ -598,7 +654,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_CS7", TEGRA_GPIO_PI6, 1, 0), @@ -608,12 +664,12 @@ struct pin_info_low_power_mode pin_lpm_cardhu_common[] = { }; /* E1198 without PM313 display board */ -struct pin_info_low_power_mode pin_lpm_cardhu_common_wo_pm313[] = { +struct gpio_init_pin_info pin_lpm_cardhu_common_wo_pm313[] = { PIN_GPIO_LPM("GMI_AD9", TEGRA_GPIO_PH1, 0, 0), PIN_GPIO_LPM("GMI_AD11", TEGRA_GPIO_PH3, 0, 0), }; -struct pin_info_low_power_mode vddio_gmi_pins_pm269[] = { +struct gpio_init_pin_info vddio_gmi_pins_pm269[] = { 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_CS7", TEGRA_GPIO_PI6, 1, 0), @@ -627,20 +683,20 @@ struct pin_info_low_power_mode vddio_gmi_pins_pm269[] = { }; /* PM269 without PM313 display board */ -struct pin_info_low_power_mode vddio_gmi_pins_pm269_wo_pm313[] = { +struct gpio_init_pin_info vddio_gmi_pins_pm269_wo_pm313[] = { PIN_GPIO_LPM("GMI_CS2", TEGRA_GPIO_PK3, 1, 0), PIN_GPIO_LPM("GMI_AD9", TEGRA_GPIO_PH1, 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 96d146d4c885..166a7030bc10 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> #include "pinmux.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 |