summaryrefslogtreecommitdiff
path: root/arch
diff options
context:
space:
mode:
authorLaxman Dewangan <ldewangan@nvidia.com>2011-10-04 18:28:57 +0530
committerSimone Willett <swillett@nvidia.com>2011-10-11 16:18:50 -0700
commit21cd39dad9ad2faac024c3cc51b4427f42327e98 (patch)
tree3b1594b864d714be3e68a4709a12e34ceb5e08e6 /arch
parentbfbf2766d11a5f85781532ddce3a87b7ae762ba3 (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.c84
-rw-r--r--arch/arm/mach-tegra/include/mach/gpio.h8
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