/* * arch/arm/mach-tegra/board-p852-gpio.c * * Copyright (C) 2010-2011 NVIDIA Corporation. * * This software is licensed under the terms of the GNU General Public * License version 2, as published by the Free Software Foundation, and * may be copied, distributed, and modified under those terms. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * */ #include #include #include #include #include "board-p852.h" static struct gpio p852_sku23_gpios[] = { {TEGRA_GPIO_PW1, GPIOF_OUT_INIT_LOW, "usbpwr0_ena"}, {TEGRA_GPIO_PB2, GPIOF_OUT_INIT_LOW, "usbpwr1_ena"}, {TEGRA_GPIO_PA0, GPIOF_OUT_INIT_LOW, "a0"}, {TEGRA_GPIO_PV2, GPIOF_OUT_INIT_HIGH, "v2"}, {TEGRA_GPIO_PT4, GPIOF_OUT_INIT_LOW, "t4"}, {TEGRA_GPIO_PD6, GPIOF_OUT_INIT_HIGH, "d6"}, {TEGRA_GPIO_PI3, GPIOF_OUT_INIT_LOW, "i3"}, {TEGRA_GPIO_PV3, GPIOF_OUT_INIT_HIGH, "v3"}, {TEGRA_GPIO_PW4, GPIOF_IN, "w4"}, {TEGRA_GPIO_PW5, GPIOF_IN, "w5"}, {TEGRA_GPIO_PT1, GPIOF_OUT_INIT_LOW, "t1"}, {TEGRA_GPIO_PW3, GPIOF_OUT_INIT_HIGH, "w3"}, {TEGRA_GPIO_PD5, GPIOF_IN, "d5"}, {TEGRA_GPIO_PBB1, GPIOF_OUT_INIT_LOW, "bb1"}, }; static struct gpio p852_sku23_b00_gpios[] = { {TEGRA_GPIO_PW1, GPIOF_OUT_INIT_HIGH, "usbpwr0_ena"}, {TEGRA_GPIO_PB2, GPIOF_OUT_INIT_HIGH, "usbpwr1_ena"}, {TEGRA_GPIO_PA0, GPIOF_OUT_INIT_LOW, "a0"}, {TEGRA_GPIO_PV2, GPIOF_OUT_INIT_HIGH, "v2"}, {TEGRA_GPIO_PT4, GPIOF_OUT_INIT_LOW, "t4"}, {TEGRA_GPIO_PD6, GPIOF_OUT_INIT_HIGH, "d6"}, {TEGRA_GPIO_PI3, GPIOF_OUT_INIT_LOW, "i3"}, {TEGRA_GPIO_PV3, GPIOF_OUT_INIT_HIGH, "v3"}, {TEGRA_GPIO_PW4, GPIOF_IN, "w4"}, {TEGRA_GPIO_PW5, GPIOF_IN, "w5"}, {TEGRA_GPIO_PT1, GPIOF_OUT_INIT_LOW, "t1"}, {TEGRA_GPIO_PW3, GPIOF_OUT_INIT_HIGH, "w3"}, {TEGRA_GPIO_PD5, GPIOF_IN, "d5"}, {TEGRA_GPIO_PBB1, GPIOF_OUT_INIT_LOW, "bb1"}, }; static struct gpio p852_sku5_gpios[] = { {TEGRA_GPIO_PW1, GPIOF_OUT_INIT_HIGH, "usbpwr0_ena"}, {TEGRA_GPIO_PB2, GPIOF_OUT_INIT_HIGH, "usbpwr1_ena"}, {TEGRA_GPIO_PA0, GPIOF_OUT_INIT_LOW, "a0"}, {TEGRA_GPIO_PV2, GPIOF_OUT_INIT_HIGH, "v2"}, {TEGRA_GPIO_PT4, GPIOF_OUT_INIT_LOW, "t4"}, {TEGRA_GPIO_PD6, GPIOF_OUT_INIT_HIGH, "d6"}, {TEGRA_GPIO_PI3, GPIOF_OUT_INIT_LOW, "i3"}, {TEGRA_GPIO_PV3, GPIOF_OUT_INIT_HIGH, "v3"}, {TEGRA_GPIO_PW4, GPIOF_IN, "w4"}, {TEGRA_GPIO_PW5, GPIOF_IN, "w5"}, {TEGRA_GPIO_PT1, GPIOF_OUT_INIT_LOW, "t1"}, {TEGRA_GPIO_PW3, GPIOF_OUT_INIT_HIGH, "w3"}, {TEGRA_GPIO_PD5, GPIOF_IN, "d5"}, {TEGRA_GPIO_PBB1, GPIOF_OUT_INIT_LOW, "bb1"}, {TEGRA_GPIO_PS3, GPIOF_IN, "s3"}, }; static struct gpio p852_sku8_gpios[] = { {TEGRA_GPIO_PW1, GPIOF_OUT_INIT_HIGH, "w1"}, {TEGRA_GPIO_PB2, GPIOF_OUT_INIT_HIGH, "b2"}, }; static struct gpio p852_sku13_b00_gpios[] = { {TEGRA_GPIO_PW1, GPIOF_OUT_INIT_HIGH, "w1"}, {TEGRA_GPIO_PB2, GPIOF_OUT_INIT_HIGH, "b2"}, {TEGRA_GPIO_PW2, GPIOF_IN, "w2"}, {TEGRA_GPIO_PW3, GPIOF_IN, "w3"}, {TEGRA_GPIO_PD5, GPIOF_OUT_INIT_LOW, "d5"}, {TEGRA_GPIO_PBB1, GPIOF_OUT_INIT_LOW, "bb1"}, {TEGRA_GPIO_PN7, GPIOF_OUT_INIT_LOW, "n7"}, {TEGRA_GPIO_PA6, GPIOF_OUT_INIT_HIGH, "a6"}, {TEGRA_GPIO_PA7, GPIOF_OUT_INIT_HIGH, "a7"}, }; static struct gpio p852_gpios[] = { {TEGRA_GPIO_PW1, GPIOF_OUT_INIT_LOW, "w1"}, {TEGRA_GPIO_PB2, GPIOF_OUT_INIT_LOW, "b2"}, {TEGRA_GPIO_PW2, GPIOF_IN, "w2"}, {TEGRA_GPIO_PW3, GPIOF_IN, "w3"}, {TEGRA_GPIO_PD5, GPIOF_OUT_INIT_LOW, "d5"}, {TEGRA_GPIO_PBB1, GPIOF_OUT_INIT_LOW, "bb1"}, {TEGRA_GPIO_PN7, GPIOF_OUT_INIT_LOW, "n7"}, {TEGRA_GPIO_PA6, GPIOF_OUT_INIT_HIGH, "a6"}, {TEGRA_GPIO_PA7, GPIOF_OUT_INIT_HIGH, "a7"}, }; void __init p852_gpio_init(void) { int pin_count = 0; int i; struct gpio *gpios_info = NULL; switch (system_rev) { case P852_SKU23: { gpios_info = p852_sku23_gpios; pin_count = ARRAY_SIZE(p852_sku23_gpios); } break; case P852_SKU23_B00: case P852_SKU23_C01: { gpios_info = p852_sku23_b00_gpios; pin_count = ARRAY_SIZE(p852_sku23_b00_gpios); } break; case P852_SKU5_B00: case P852_SKU5_C01: { gpios_info = p852_sku5_gpios; pin_count = ARRAY_SIZE(p852_sku5_gpios); } break; case P852_SKU8_B00: case P852_SKU8_C01: case P852_SKU9_B00: case P852_SKU9_C01: { gpios_info = p852_sku8_gpios; pin_count = ARRAY_SIZE(p852_sku8_gpios); } break; case P852_SKU13_B00: { gpios_info = p852_sku13_b00_gpios; pin_count = ARRAY_SIZE(p852_sku13_b00_gpios); } break; default: { gpios_info = p852_gpios; pin_count = ARRAY_SIZE(p852_gpios); } } gpio_request_array(gpios_info, pin_count); for (i = 0; i < pin_count; i++) { tegra_gpio_enable(gpios_info[i].gpio); gpio_export(gpios_info[i].gpio, true); } }