diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2011-03-24 12:33:14 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2011-03-24 12:33:14 -0400 |
commit | 6e50e9f9f4a8277b4d76de417ca77cf3921bd524 (patch) | |
tree | 44604d8eaf87d9283a1aa2715d131790e8b50128 /arch/arm/mach-tegra | |
parent | e264ac8cad5a3f2e717ac68eb300766eef61f568 (diff) | |
parent | 84abf6084704673ae80a2105bf63ece5eee3edd5 (diff) |
Merge branch 'for-linus' of git://android.git.kernel.org/kernel/tegra
* 'for-linus' of git://android.git.kernel.org/kernel/tegra:
ARM: tegra: harmony: initialize the TPS65862 PMIC
ARM: tegra: update defconfig
ARM: tegra: harmony: update PCI-e initialization sequence
ARM: tegra: trimslice: enable MMC/SD slots
ARM: tegra: enable new drivers in defconfig
ARM: tegra: Add Toshiba AC100 support
ARM: tegra: harmony: Set WM8903 gpio_base
ARM: tegra: harmony: I2C-related portions of audio support
ARM: tegra: harmony: register i2c devices
ARM: tegra: seaboard: register i2c devices
ARM: tegra: harmony: Beginnings of audio support
ARM: tegra: create defines for SD-related GPIO names
ARM: tegra: add devices.c entries for audio
Diffstat (limited to 'arch/arm/mach-tegra')
-rw-r--r-- | arch/arm/mach-tegra/Kconfig | 5 | ||||
-rw-r--r-- | arch/arm/mach-tegra/Makefile | 4 | ||||
-rw-r--r-- | arch/arm/mach-tegra/board-harmony-pcie.c | 24 | ||||
-rw-r--r-- | arch/arm/mach-tegra/board-harmony-pinmux.c | 28 | ||||
-rw-r--r-- | arch/arm/mach-tegra/board-harmony-power.c | 117 | ||||
-rw-r--r-- | arch/arm/mach-tegra/board-harmony.c | 95 | ||||
-rw-r--r-- | arch/arm/mach-tegra/board-harmony.h | 15 | ||||
-rw-r--r-- | arch/arm/mach-tegra/board-paz00-pinmux.c | 157 | ||||
-rw-r--r-- | arch/arm/mach-tegra/board-paz00.c | 128 | ||||
-rw-r--r-- | arch/arm/mach-tegra/board-paz00.h | 29 | ||||
-rw-r--r-- | arch/arm/mach-tegra/board-seaboard-pinmux.c | 11 | ||||
-rw-r--r-- | arch/arm/mach-tegra/board-seaboard.c | 68 | ||||
-rw-r--r-- | arch/arm/mach-tegra/board-seaboard.h | 3 | ||||
-rw-r--r-- | arch/arm/mach-tegra/board-trimslice-pinmux.c | 9 | ||||
-rw-r--r-- | arch/arm/mach-tegra/board-trimslice.c | 19 | ||||
-rw-r--r-- | arch/arm/mach-tegra/board-trimslice.h | 3 | ||||
-rw-r--r-- | arch/arm/mach-tegra/devices.c | 70 | ||||
-rw-r--r-- | arch/arm/mach-tegra/devices.h | 4 | ||||
-rw-r--r-- | arch/arm/mach-tegra/include/mach/iomap.h | 3 |
19 files changed, 761 insertions, 31 deletions
diff --git a/arch/arm/mach-tegra/Kconfig b/arch/arm/mach-tegra/Kconfig index 622a9ec1ff08..3cdeffc97b44 100644 --- a/arch/arm/mach-tegra/Kconfig +++ b/arch/arm/mach-tegra/Kconfig | |||
@@ -36,6 +36,11 @@ config MACH_KAEN | |||
36 | help | 36 | help |
37 | Support for the Kaen version of Seaboard | 37 | Support for the Kaen version of Seaboard |
38 | 38 | ||
39 | config MACH_PAZ00 | ||
40 | bool "Paz00 board" | ||
41 | help | ||
42 | Support for the Toshiba AC100/Dynabook AZ netbook | ||
43 | |||
39 | config MACH_SEABOARD | 44 | config MACH_SEABOARD |
40 | bool "Seaboard board" | 45 | bool "Seaboard board" |
41 | help | 46 | help |
diff --git a/arch/arm/mach-tegra/Makefile b/arch/arm/mach-tegra/Makefile index 9f7a7e1e0c38..1afe05038c27 100644 --- a/arch/arm/mach-tegra/Makefile +++ b/arch/arm/mach-tegra/Makefile | |||
@@ -22,6 +22,10 @@ obj-$(CONFIG_USB_SUPPORT) += usb_phy.o | |||
22 | obj-${CONFIG_MACH_HARMONY} += board-harmony.o | 22 | obj-${CONFIG_MACH_HARMONY} += board-harmony.o |
23 | obj-${CONFIG_MACH_HARMONY} += board-harmony-pinmux.o | 23 | obj-${CONFIG_MACH_HARMONY} += board-harmony-pinmux.o |
24 | obj-${CONFIG_MACH_HARMONY} += board-harmony-pcie.o | 24 | obj-${CONFIG_MACH_HARMONY} += board-harmony-pcie.o |
25 | obj-${CONFIG_MACH_HARMONY} += board-harmony-power.o | ||
26 | |||
27 | obj-${CONFIG_MACH_PAZ00} += board-paz00.o | ||
28 | obj-${CONFIG_MACH_PAZ00} += board-paz00-pinmux.o | ||
25 | 29 | ||
26 | obj-${CONFIG_MACH_SEABOARD} += board-seaboard.o | 30 | obj-${CONFIG_MACH_SEABOARD} += board-seaboard.o |
27 | obj-${CONFIG_MACH_SEABOARD} += board-seaboard-pinmux.o | 31 | obj-${CONFIG_MACH_SEABOARD} += board-seaboard-pinmux.o |
diff --git a/arch/arm/mach-tegra/board-harmony-pcie.c b/arch/arm/mach-tegra/board-harmony-pcie.c index f7e7d4514b6a..9c27b95b8d86 100644 --- a/arch/arm/mach-tegra/board-harmony-pcie.c +++ b/arch/arm/mach-tegra/board-harmony-pcie.c | |||
@@ -27,13 +27,29 @@ | |||
27 | 27 | ||
28 | #ifdef CONFIG_TEGRA_PCI | 28 | #ifdef CONFIG_TEGRA_PCI |
29 | 29 | ||
30 | /* GPIO 3 of the PMIC */ | ||
31 | #define EN_VDD_1V05_GPIO (TEGRA_NR_GPIOS + 2) | ||
32 | |||
30 | static int __init harmony_pcie_init(void) | 33 | static int __init harmony_pcie_init(void) |
31 | { | 34 | { |
35 | struct regulator *regulator = NULL; | ||
32 | int err; | 36 | int err; |
33 | 37 | ||
34 | if (!machine_is_harmony()) | 38 | if (!machine_is_harmony()) |
35 | return 0; | 39 | return 0; |
36 | 40 | ||
41 | err = gpio_request(EN_VDD_1V05_GPIO, "EN_VDD_1V05"); | ||
42 | if (err) | ||
43 | return err; | ||
44 | |||
45 | gpio_direction_output(EN_VDD_1V05_GPIO, 1); | ||
46 | |||
47 | regulator = regulator_get(NULL, "pex_clk"); | ||
48 | if (IS_ERR_OR_NULL(regulator)) | ||
49 | goto err_reg; | ||
50 | |||
51 | regulator_enable(regulator); | ||
52 | |||
37 | tegra_pinmux_set_tristate(TEGRA_PINGROUP_GPV, TEGRA_TRI_NORMAL); | 53 | tegra_pinmux_set_tristate(TEGRA_PINGROUP_GPV, TEGRA_TRI_NORMAL); |
38 | tegra_pinmux_set_tristate(TEGRA_PINGROUP_SLXA, TEGRA_TRI_NORMAL); | 54 | tegra_pinmux_set_tristate(TEGRA_PINGROUP_SLXA, TEGRA_TRI_NORMAL); |
39 | tegra_pinmux_set_tristate(TEGRA_PINGROUP_SLXK, TEGRA_TRI_NORMAL); | 55 | tegra_pinmux_set_tristate(TEGRA_PINGROUP_SLXK, TEGRA_TRI_NORMAL); |
@@ -49,9 +65,15 @@ err_pcie: | |||
49 | tegra_pinmux_set_tristate(TEGRA_PINGROUP_SLXA, TEGRA_TRI_TRISTATE); | 65 | tegra_pinmux_set_tristate(TEGRA_PINGROUP_SLXA, TEGRA_TRI_TRISTATE); |
50 | tegra_pinmux_set_tristate(TEGRA_PINGROUP_SLXK, TEGRA_TRI_TRISTATE); | 66 | tegra_pinmux_set_tristate(TEGRA_PINGROUP_SLXK, TEGRA_TRI_TRISTATE); |
51 | 67 | ||
68 | regulator_disable(regulator); | ||
69 | regulator_put(regulator); | ||
70 | err_reg: | ||
71 | gpio_free(EN_VDD_1V05_GPIO); | ||
72 | |||
52 | return err; | 73 | return err; |
53 | } | 74 | } |
54 | 75 | ||
55 | subsys_initcall(harmony_pcie_init); | 76 | /* PCI should be initialized after I2C, mfd and regulators */ |
77 | subsys_initcall_sync(harmony_pcie_init); | ||
56 | 78 | ||
57 | #endif | 79 | #endif |
diff --git a/arch/arm/mach-tegra/board-harmony-pinmux.c b/arch/arm/mach-tegra/board-harmony-pinmux.c index 98368d947be3..4d63e2e97a8d 100644 --- a/arch/arm/mach-tegra/board-harmony-pinmux.c +++ b/arch/arm/mach-tegra/board-harmony-pinmux.c | |||
@@ -27,11 +27,11 @@ static struct tegra_pingroup_config harmony_pinmux[] = { | |||
27 | {TEGRA_PINGROUP_ATC, TEGRA_MUX_NAND, TEGRA_PUPD_NORMAL, TEGRA_TRI_NORMAL}, | 27 | {TEGRA_PINGROUP_ATC, TEGRA_MUX_NAND, TEGRA_PUPD_NORMAL, TEGRA_TRI_NORMAL}, |
28 | {TEGRA_PINGROUP_ATD, TEGRA_MUX_GMI, TEGRA_PUPD_NORMAL, TEGRA_TRI_NORMAL}, | 28 | {TEGRA_PINGROUP_ATD, TEGRA_MUX_GMI, TEGRA_PUPD_NORMAL, TEGRA_TRI_NORMAL}, |
29 | {TEGRA_PINGROUP_ATE, TEGRA_MUX_GMI, TEGRA_PUPD_NORMAL, TEGRA_TRI_NORMAL}, | 29 | {TEGRA_PINGROUP_ATE, TEGRA_MUX_GMI, TEGRA_PUPD_NORMAL, TEGRA_TRI_NORMAL}, |
30 | {TEGRA_PINGROUP_CDEV1, TEGRA_MUX_OSC, TEGRA_PUPD_PULL_DOWN, TEGRA_TRI_TRISTATE}, | 30 | {TEGRA_PINGROUP_CDEV1, TEGRA_MUX_PLLA_OUT, TEGRA_PUPD_NORMAL, TEGRA_TRI_NORMAL}, |
31 | {TEGRA_PINGROUP_CDEV2, TEGRA_MUX_PLLP_OUT4, TEGRA_PUPD_PULL_DOWN, TEGRA_TRI_TRISTATE}, | 31 | {TEGRA_PINGROUP_CDEV2, TEGRA_MUX_PLLP_OUT4, TEGRA_PUPD_PULL_DOWN, TEGRA_TRI_TRISTATE}, |
32 | {TEGRA_PINGROUP_CRTP, TEGRA_MUX_CRT, TEGRA_PUPD_NORMAL, TEGRA_TRI_TRISTATE}, | 32 | {TEGRA_PINGROUP_CRTP, TEGRA_MUX_CRT, TEGRA_PUPD_NORMAL, TEGRA_TRI_TRISTATE}, |
33 | {TEGRA_PINGROUP_CSUS, TEGRA_MUX_VI_SENSOR_CLK, TEGRA_PUPD_PULL_DOWN, TEGRA_TRI_TRISTATE}, | 33 | {TEGRA_PINGROUP_CSUS, TEGRA_MUX_VI_SENSOR_CLK, TEGRA_PUPD_PULL_DOWN, TEGRA_TRI_TRISTATE}, |
34 | {TEGRA_PINGROUP_DAP1, TEGRA_MUX_DAP1, TEGRA_PUPD_NORMAL, TEGRA_TRI_TRISTATE}, | 34 | {TEGRA_PINGROUP_DAP1, TEGRA_MUX_DAP1, TEGRA_PUPD_NORMAL, TEGRA_TRI_NORMAL}, |
35 | {TEGRA_PINGROUP_DAP2, TEGRA_MUX_DAP2, TEGRA_PUPD_NORMAL, TEGRA_TRI_TRISTATE}, | 35 | {TEGRA_PINGROUP_DAP2, TEGRA_MUX_DAP2, TEGRA_PUPD_NORMAL, TEGRA_TRI_TRISTATE}, |
36 | {TEGRA_PINGROUP_DAP3, TEGRA_MUX_DAP3, TEGRA_PUPD_NORMAL, TEGRA_TRI_TRISTATE}, | 36 | {TEGRA_PINGROUP_DAP3, TEGRA_MUX_DAP3, TEGRA_PUPD_NORMAL, TEGRA_TRI_TRISTATE}, |
37 | {TEGRA_PINGROUP_DAP4, TEGRA_MUX_DAP4, TEGRA_PUPD_NORMAL, TEGRA_TRI_TRISTATE}, | 37 | {TEGRA_PINGROUP_DAP4, TEGRA_MUX_DAP4, TEGRA_PUPD_NORMAL, TEGRA_TRI_TRISTATE}, |
@@ -114,13 +114,13 @@ static struct tegra_pingroup_config harmony_pinmux[] = { | |||
114 | {TEGRA_PINGROUP_SLXK, TEGRA_MUX_PCIE, TEGRA_PUPD_NORMAL, TEGRA_TRI_TRISTATE}, | 114 | {TEGRA_PINGROUP_SLXK, TEGRA_MUX_PCIE, TEGRA_PUPD_NORMAL, TEGRA_TRI_TRISTATE}, |
115 | {TEGRA_PINGROUP_SPDI, TEGRA_MUX_RSVD2, TEGRA_PUPD_NORMAL, TEGRA_TRI_TRISTATE}, | 115 | {TEGRA_PINGROUP_SPDI, TEGRA_MUX_RSVD2, TEGRA_PUPD_NORMAL, TEGRA_TRI_TRISTATE}, |
116 | {TEGRA_PINGROUP_SPDO, TEGRA_MUX_RSVD2, TEGRA_PUPD_NORMAL, TEGRA_TRI_TRISTATE}, | 116 | {TEGRA_PINGROUP_SPDO, TEGRA_MUX_RSVD2, TEGRA_PUPD_NORMAL, TEGRA_TRI_TRISTATE}, |
117 | {TEGRA_PINGROUP_SPIA, TEGRA_MUX_GMI, TEGRA_PUPD_PULL_DOWN, TEGRA_TRI_TRISTATE}, | 117 | {TEGRA_PINGROUP_SPIA, TEGRA_MUX_GMI, TEGRA_PUPD_NORMAL, TEGRA_TRI_NORMAL}, |
118 | {TEGRA_PINGROUP_SPIB, TEGRA_MUX_GMI, TEGRA_PUPD_PULL_DOWN, TEGRA_TRI_TRISTATE}, | 118 | {TEGRA_PINGROUP_SPIB, TEGRA_MUX_GMI, TEGRA_PUPD_NORMAL, TEGRA_TRI_NORMAL}, |
119 | {TEGRA_PINGROUP_SPIC, TEGRA_MUX_GMI, TEGRA_PUPD_PULL_UP, TEGRA_TRI_NORMAL}, | 119 | {TEGRA_PINGROUP_SPIC, TEGRA_MUX_GMI, TEGRA_PUPD_PULL_UP, TEGRA_TRI_TRISTATE}, |
120 | {TEGRA_PINGROUP_SPID, TEGRA_MUX_SPI1, TEGRA_PUPD_PULL_DOWN, TEGRA_TRI_TRISTATE}, | 120 | {TEGRA_PINGROUP_SPID, TEGRA_MUX_SPI1, TEGRA_PUPD_PULL_DOWN, TEGRA_TRI_TRISTATE}, |
121 | {TEGRA_PINGROUP_SPIE, TEGRA_MUX_SPI1, TEGRA_PUPD_PULL_UP, TEGRA_TRI_TRISTATE}, | 121 | {TEGRA_PINGROUP_SPIE, TEGRA_MUX_SPI1, TEGRA_PUPD_PULL_UP, TEGRA_TRI_TRISTATE}, |
122 | {TEGRA_PINGROUP_SPIF, TEGRA_MUX_SPI1, TEGRA_PUPD_PULL_DOWN, TEGRA_TRI_TRISTATE}, | 122 | {TEGRA_PINGROUP_SPIF, TEGRA_MUX_SPI1, TEGRA_PUPD_PULL_DOWN, TEGRA_TRI_TRISTATE}, |
123 | {TEGRA_PINGROUP_SPIG, TEGRA_MUX_SPI2_ALT, TEGRA_PUPD_PULL_UP, TEGRA_TRI_TRISTATE}, | 123 | {TEGRA_PINGROUP_SPIG, TEGRA_MUX_SPI2_ALT, TEGRA_PUPD_NORMAL, TEGRA_TRI_TRISTATE}, |
124 | {TEGRA_PINGROUP_SPIH, TEGRA_MUX_SPI2_ALT, TEGRA_PUPD_PULL_UP, TEGRA_TRI_TRISTATE}, | 124 | {TEGRA_PINGROUP_SPIH, TEGRA_MUX_SPI2_ALT, TEGRA_PUPD_PULL_UP, TEGRA_TRI_TRISTATE}, |
125 | {TEGRA_PINGROUP_UAA, TEGRA_MUX_ULPI, TEGRA_PUPD_PULL_UP, TEGRA_TRI_TRISTATE}, | 125 | {TEGRA_PINGROUP_UAA, TEGRA_MUX_ULPI, TEGRA_PUPD_PULL_UP, TEGRA_TRI_TRISTATE}, |
126 | {TEGRA_PINGROUP_UAB, TEGRA_MUX_ULPI, TEGRA_PUPD_PULL_UP, TEGRA_TRI_TRISTATE}, | 126 | {TEGRA_PINGROUP_UAB, TEGRA_MUX_ULPI, TEGRA_PUPD_PULL_UP, TEGRA_TRI_TRISTATE}, |
@@ -141,12 +141,16 @@ static struct tegra_pingroup_config harmony_pinmux[] = { | |||
141 | }; | 141 | }; |
142 | 142 | ||
143 | static struct tegra_gpio_table gpio_table[] = { | 143 | static struct tegra_gpio_table gpio_table[] = { |
144 | { .gpio = TEGRA_GPIO_PI5, .enable = true }, /* mmc2 cd */ | 144 | { .gpio = TEGRA_GPIO_SD2_CD, .enable = true }, |
145 | { .gpio = TEGRA_GPIO_PH1, .enable = true }, /* mmc2 wp */ | 145 | { .gpio = TEGRA_GPIO_SD2_WP, .enable = true }, |
146 | { .gpio = TEGRA_GPIO_PT3, .enable = true }, /* mmc2 pwr */ | 146 | { .gpio = TEGRA_GPIO_SD2_POWER, .enable = true }, |
147 | { .gpio = TEGRA_GPIO_PH2, .enable = true }, /* mmc4 cd */ | 147 | { .gpio = TEGRA_GPIO_SD4_CD, .enable = true }, |
148 | { .gpio = TEGRA_GPIO_PH3, .enable = true }, /* mmc4 wp */ | 148 | { .gpio = TEGRA_GPIO_SD4_WP, .enable = true }, |
149 | { .gpio = TEGRA_GPIO_PI6, .enable = true }, /* mmc4 pwr */ | 149 | { .gpio = TEGRA_GPIO_SD4_POWER, .enable = true }, |
150 | { .gpio = TEGRA_GPIO_CDC_IRQ, .enable = true }, | ||
151 | { .gpio = TEGRA_GPIO_HP_DET, .enable = true }, | ||
152 | { .gpio = TEGRA_GPIO_INT_MIC_EN, .enable = true }, | ||
153 | { .gpio = TEGRA_GPIO_EXT_MIC_EN, .enable = true }, | ||
150 | }; | 154 | }; |
151 | 155 | ||
152 | void harmony_pinmux_init(void) | 156 | void harmony_pinmux_init(void) |
diff --git a/arch/arm/mach-tegra/board-harmony-power.c b/arch/arm/mach-tegra/board-harmony-power.c new file mode 100644 index 000000000000..c84442cabe07 --- /dev/null +++ b/arch/arm/mach-tegra/board-harmony-power.c | |||
@@ -0,0 +1,117 @@ | |||
1 | /* | ||
2 | * Copyright (C) 2010 NVIDIA, Inc. | ||
3 | * | ||
4 | * This program is free software; you can redistribute it and/or modify | ||
5 | * it under the terms of the GNU General Public License version 2 as | ||
6 | * published by the Free Software Foundation. | ||
7 | * | ||
8 | * This program is distributed in the hope that it will be useful, | ||
9 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
10 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
11 | * GNU General Public License for more details. | ||
12 | * | ||
13 | * You should have received a copy of the GNU General Public License | ||
14 | * along with this program; if not, write to the Free Software | ||
15 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA | ||
16 | * 02111-1307, USA | ||
17 | */ | ||
18 | #include <linux/i2c.h> | ||
19 | #include <linux/platform_device.h> | ||
20 | #include <linux/gpio.h> | ||
21 | |||
22 | #include <linux/regulator/machine.h> | ||
23 | #include <linux/mfd/tps6586x.h> | ||
24 | |||
25 | #include <mach/irqs.h> | ||
26 | |||
27 | #define PMC_CTRL 0x0 | ||
28 | #define PMC_CTRL_INTR_LOW (1 << 17) | ||
29 | |||
30 | static struct regulator_consumer_supply tps658621_ldo0_supply[] = { | ||
31 | REGULATOR_SUPPLY("pex_clk", NULL), | ||
32 | }; | ||
33 | |||
34 | static struct regulator_init_data ldo0_data = { | ||
35 | .constraints = { | ||
36 | .min_uV = 1250 * 1000, | ||
37 | .max_uV = 3300 * 1000, | ||
38 | .valid_modes_mask = (REGULATOR_MODE_NORMAL | | ||
39 | REGULATOR_MODE_STANDBY), | ||
40 | .valid_ops_mask = (REGULATOR_CHANGE_MODE | | ||
41 | REGULATOR_CHANGE_STATUS | | ||
42 | REGULATOR_CHANGE_VOLTAGE), | ||
43 | }, | ||
44 | .num_consumer_supplies = ARRAY_SIZE(tps658621_ldo0_supply), | ||
45 | .consumer_supplies = tps658621_ldo0_supply, | ||
46 | }; | ||
47 | |||
48 | #define HARMONY_REGULATOR_INIT(_id, _minmv, _maxmv) \ | ||
49 | static struct regulator_init_data _id##_data = { \ | ||
50 | .constraints = { \ | ||
51 | .min_uV = (_minmv)*1000, \ | ||
52 | .max_uV = (_maxmv)*1000, \ | ||
53 | .valid_modes_mask = (REGULATOR_MODE_NORMAL | \ | ||
54 | REGULATOR_MODE_STANDBY), \ | ||
55 | .valid_ops_mask = (REGULATOR_CHANGE_MODE | \ | ||
56 | REGULATOR_CHANGE_STATUS | \ | ||
57 | REGULATOR_CHANGE_VOLTAGE), \ | ||
58 | }, \ | ||
59 | } | ||
60 | |||
61 | HARMONY_REGULATOR_INIT(sm0, 725, 1500); | ||
62 | HARMONY_REGULATOR_INIT(sm1, 725, 1500); | ||
63 | HARMONY_REGULATOR_INIT(sm2, 3000, 4550); | ||
64 | HARMONY_REGULATOR_INIT(ldo1, 725, 1500); | ||
65 | HARMONY_REGULATOR_INIT(ldo2, 725, 1500); | ||
66 | HARMONY_REGULATOR_INIT(ldo3, 1250, 3300); | ||
67 | HARMONY_REGULATOR_INIT(ldo4, 1700, 2475); | ||
68 | HARMONY_REGULATOR_INIT(ldo5, 1250, 3300); | ||
69 | HARMONY_REGULATOR_INIT(ldo6, 1250, 3300); | ||
70 | HARMONY_REGULATOR_INIT(ldo7, 1250, 3300); | ||
71 | HARMONY_REGULATOR_INIT(ldo8, 1250, 3300); | ||
72 | HARMONY_REGULATOR_INIT(ldo9, 1250, 3300); | ||
73 | |||
74 | #define TPS_REG(_id, _data) \ | ||
75 | { \ | ||
76 | .id = TPS6586X_ID_##_id, \ | ||
77 | .name = "tps6586x-regulator", \ | ||
78 | .platform_data = _data, \ | ||
79 | } | ||
80 | |||
81 | static struct tps6586x_subdev_info tps_devs[] = { | ||
82 | TPS_REG(SM_0, &sm0_data), | ||
83 | TPS_REG(SM_1, &sm1_data), | ||
84 | TPS_REG(SM_2, &sm2_data), | ||
85 | TPS_REG(LDO_0, &ldo0_data), | ||
86 | TPS_REG(LDO_1, &ldo1_data), | ||
87 | TPS_REG(LDO_2, &ldo2_data), | ||
88 | TPS_REG(LDO_3, &ldo3_data), | ||
89 | TPS_REG(LDO_4, &ldo4_data), | ||
90 | TPS_REG(LDO_5, &ldo5_data), | ||
91 | TPS_REG(LDO_6, &ldo6_data), | ||
92 | TPS_REG(LDO_7, &ldo7_data), | ||
93 | TPS_REG(LDO_8, &ldo8_data), | ||
94 | TPS_REG(LDO_9, &ldo9_data), | ||
95 | }; | ||
96 | |||
97 | static struct tps6586x_platform_data tps_platform = { | ||
98 | .irq_base = TEGRA_NR_IRQS, | ||
99 | .num_subdevs = ARRAY_SIZE(tps_devs), | ||
100 | .subdevs = tps_devs, | ||
101 | .gpio_base = TEGRA_NR_GPIOS, | ||
102 | }; | ||
103 | |||
104 | static struct i2c_board_info __initdata harmony_regulators[] = { | ||
105 | { | ||
106 | I2C_BOARD_INFO("tps6586x", 0x34), | ||
107 | .irq = INT_EXTERNAL_PMU, | ||
108 | .platform_data = &tps_platform, | ||
109 | }, | ||
110 | }; | ||
111 | |||
112 | int __init harmony_regulator_init(void) | ||
113 | { | ||
114 | i2c_register_board_info(3, harmony_regulators, 1); | ||
115 | |||
116 | return 0; | ||
117 | } | ||
diff --git a/arch/arm/mach-tegra/board-harmony.c b/arch/arm/mach-tegra/board-harmony.c index 49224e936eb4..75c918a86a31 100644 --- a/arch/arm/mach-tegra/board-harmony.c +++ b/arch/arm/mach-tegra/board-harmony.c | |||
@@ -2,6 +2,7 @@ | |||
2 | * arch/arm/mach-tegra/board-harmony.c | 2 | * arch/arm/mach-tegra/board-harmony.c |
3 | * | 3 | * |
4 | * Copyright (C) 2010 Google, Inc. | 4 | * Copyright (C) 2010 Google, Inc. |
5 | * Copyright (C) 2011 NVIDIA, Inc. | ||
5 | * | 6 | * |
6 | * This software is licensed under the terms of the GNU General Public | 7 | * This software is licensed under the terms of the GNU General Public |
7 | * License version 2, as published by the Free Software Foundation, and | 8 | * License version 2, as published by the Free Software Foundation, and |
@@ -22,12 +23,18 @@ | |||
22 | #include <linux/dma-mapping.h> | 23 | #include <linux/dma-mapping.h> |
23 | #include <linux/pda_power.h> | 24 | #include <linux/pda_power.h> |
24 | #include <linux/io.h> | 25 | #include <linux/io.h> |
26 | #include <linux/gpio.h> | ||
27 | #include <linux/i2c.h> | ||
28 | #include <linux/i2c-tegra.h> | ||
29 | |||
30 | #include <sound/wm8903.h> | ||
25 | 31 | ||
26 | #include <asm/mach-types.h> | 32 | #include <asm/mach-types.h> |
27 | #include <asm/mach/arch.h> | 33 | #include <asm/mach/arch.h> |
28 | #include <asm/mach/time.h> | 34 | #include <asm/mach/time.h> |
29 | #include <asm/setup.h> | 35 | #include <asm/setup.h> |
30 | 36 | ||
37 | #include <mach/harmony_audio.h> | ||
31 | #include <mach/iomap.h> | 38 | #include <mach/iomap.h> |
32 | #include <mach/irqs.h> | 39 | #include <mach/irqs.h> |
33 | #include <mach/sdhci.h> | 40 | #include <mach/sdhci.h> |
@@ -60,11 +67,81 @@ static struct platform_device debug_uart = { | |||
60 | }, | 67 | }, |
61 | }; | 68 | }; |
62 | 69 | ||
70 | static struct harmony_audio_platform_data harmony_audio_pdata = { | ||
71 | .gpio_spkr_en = TEGRA_GPIO_SPKR_EN, | ||
72 | .gpio_hp_det = TEGRA_GPIO_HP_DET, | ||
73 | .gpio_int_mic_en = TEGRA_GPIO_INT_MIC_EN, | ||
74 | .gpio_ext_mic_en = TEGRA_GPIO_EXT_MIC_EN, | ||
75 | }; | ||
76 | |||
77 | static struct platform_device harmony_audio_device = { | ||
78 | .name = "tegra-snd-harmony", | ||
79 | .id = 0, | ||
80 | .dev = { | ||
81 | .platform_data = &harmony_audio_pdata, | ||
82 | }, | ||
83 | }; | ||
84 | |||
85 | static struct tegra_i2c_platform_data harmony_i2c1_platform_data = { | ||
86 | .bus_clk_rate = 400000, | ||
87 | }; | ||
88 | |||
89 | static struct tegra_i2c_platform_data harmony_i2c2_platform_data = { | ||
90 | .bus_clk_rate = 400000, | ||
91 | }; | ||
92 | |||
93 | static struct tegra_i2c_platform_data harmony_i2c3_platform_data = { | ||
94 | .bus_clk_rate = 400000, | ||
95 | }; | ||
96 | |||
97 | static struct tegra_i2c_platform_data harmony_dvc_platform_data = { | ||
98 | .bus_clk_rate = 400000, | ||
99 | }; | ||
100 | |||
101 | static struct wm8903_platform_data harmony_wm8903_pdata = { | ||
102 | .irq_active_low = 0, | ||
103 | .micdet_cfg = 0, | ||
104 | .micdet_delay = 100, | ||
105 | .gpio_base = HARMONY_GPIO_WM8903(0), | ||
106 | .gpio_cfg = { | ||
107 | WM8903_GPIO_NO_CONFIG, | ||
108 | WM8903_GPIO_NO_CONFIG, | ||
109 | 0, | ||
110 | WM8903_GPIO_NO_CONFIG, | ||
111 | WM8903_GPIO_NO_CONFIG, | ||
112 | }, | ||
113 | }; | ||
114 | |||
115 | static struct i2c_board_info __initdata wm8903_board_info = { | ||
116 | I2C_BOARD_INFO("wm8903", 0x1a), | ||
117 | .platform_data = &harmony_wm8903_pdata, | ||
118 | .irq = TEGRA_GPIO_TO_IRQ(TEGRA_GPIO_CDC_IRQ), | ||
119 | }; | ||
120 | |||
121 | static void __init harmony_i2c_init(void) | ||
122 | { | ||
123 | tegra_i2c_device1.dev.platform_data = &harmony_i2c1_platform_data; | ||
124 | tegra_i2c_device2.dev.platform_data = &harmony_i2c2_platform_data; | ||
125 | tegra_i2c_device3.dev.platform_data = &harmony_i2c3_platform_data; | ||
126 | tegra_i2c_device4.dev.platform_data = &harmony_dvc_platform_data; | ||
127 | |||
128 | platform_device_register(&tegra_i2c_device1); | ||
129 | platform_device_register(&tegra_i2c_device2); | ||
130 | platform_device_register(&tegra_i2c_device3); | ||
131 | platform_device_register(&tegra_i2c_device4); | ||
132 | |||
133 | i2c_register_board_info(0, &wm8903_board_info, 1); | ||
134 | } | ||
135 | |||
63 | static struct platform_device *harmony_devices[] __initdata = { | 136 | static struct platform_device *harmony_devices[] __initdata = { |
64 | &debug_uart, | 137 | &debug_uart, |
65 | &tegra_sdhci_device1, | 138 | &tegra_sdhci_device1, |
66 | &tegra_sdhci_device2, | 139 | &tegra_sdhci_device2, |
67 | &tegra_sdhci_device4, | 140 | &tegra_sdhci_device4, |
141 | &tegra_i2s_device1, | ||
142 | &tegra_das_device, | ||
143 | &tegra_pcm_device, | ||
144 | &harmony_audio_device, | ||
68 | }; | 145 | }; |
69 | 146 | ||
70 | static void __init tegra_harmony_fixup(struct machine_desc *desc, | 147 | static void __init tegra_harmony_fixup(struct machine_desc *desc, |
@@ -80,6 +157,10 @@ static void __init tegra_harmony_fixup(struct machine_desc *desc, | |||
80 | static __initdata struct tegra_clk_init_table harmony_clk_init_table[] = { | 157 | static __initdata struct tegra_clk_init_table harmony_clk_init_table[] = { |
81 | /* name parent rate enabled */ | 158 | /* name parent rate enabled */ |
82 | { "uartd", "pll_p", 216000000, true }, | 159 | { "uartd", "pll_p", 216000000, true }, |
160 | { "pll_a", "pll_p_out1", 56448000, true }, | ||
161 | { "pll_a_out0", "pll_a", 11289600, true }, | ||
162 | { "cdev1", NULL, 0, true }, | ||
163 | { "i2s1", "pll_a_out0", 11289600, false}, | ||
83 | { NULL, NULL, 0, 0}, | 164 | { NULL, NULL, 0, 0}, |
84 | }; | 165 | }; |
85 | 166 | ||
@@ -91,15 +172,15 @@ static struct tegra_sdhci_platform_data sdhci_pdata1 = { | |||
91 | }; | 172 | }; |
92 | 173 | ||
93 | static struct tegra_sdhci_platform_data sdhci_pdata2 = { | 174 | static struct tegra_sdhci_platform_data sdhci_pdata2 = { |
94 | .cd_gpio = TEGRA_GPIO_PI5, | 175 | .cd_gpio = TEGRA_GPIO_SD2_CD, |
95 | .wp_gpio = TEGRA_GPIO_PH1, | 176 | .wp_gpio = TEGRA_GPIO_SD2_WP, |
96 | .power_gpio = TEGRA_GPIO_PT3, | 177 | .power_gpio = TEGRA_GPIO_SD2_POWER, |
97 | }; | 178 | }; |
98 | 179 | ||
99 | static struct tegra_sdhci_platform_data sdhci_pdata4 = { | 180 | static struct tegra_sdhci_platform_data sdhci_pdata4 = { |
100 | .cd_gpio = TEGRA_GPIO_PH2, | 181 | .cd_gpio = TEGRA_GPIO_SD4_CD, |
101 | .wp_gpio = TEGRA_GPIO_PH3, | 182 | .wp_gpio = TEGRA_GPIO_SD4_WP, |
102 | .power_gpio = TEGRA_GPIO_PI6, | 183 | .power_gpio = TEGRA_GPIO_SD4_POWER, |
103 | .is_8bit = 1, | 184 | .is_8bit = 1, |
104 | }; | 185 | }; |
105 | 186 | ||
@@ -114,6 +195,8 @@ static void __init tegra_harmony_init(void) | |||
114 | tegra_sdhci_device4.dev.platform_data = &sdhci_pdata4; | 195 | tegra_sdhci_device4.dev.platform_data = &sdhci_pdata4; |
115 | 196 | ||
116 | platform_add_devices(harmony_devices, ARRAY_SIZE(harmony_devices)); | 197 | platform_add_devices(harmony_devices, ARRAY_SIZE(harmony_devices)); |
198 | harmony_i2c_init(); | ||
199 | harmony_regulator_init(); | ||
117 | } | 200 | } |
118 | 201 | ||
119 | MACHINE_START(HARMONY, "harmony") | 202 | MACHINE_START(HARMONY, "harmony") |
diff --git a/arch/arm/mach-tegra/board-harmony.h b/arch/arm/mach-tegra/board-harmony.h index 09ca7755dd55..1e57b071f52d 100644 --- a/arch/arm/mach-tegra/board-harmony.h +++ b/arch/arm/mach-tegra/board-harmony.h | |||
@@ -17,6 +17,21 @@ | |||
17 | #ifndef _MACH_TEGRA_BOARD_HARMONY_H | 17 | #ifndef _MACH_TEGRA_BOARD_HARMONY_H |
18 | #define _MACH_TEGRA_BOARD_HARMONY_H | 18 | #define _MACH_TEGRA_BOARD_HARMONY_H |
19 | 19 | ||
20 | #define HARMONY_GPIO_WM8903(_x_) (TEGRA_NR_GPIOS + (_x_)) | ||
21 | |||
22 | #define TEGRA_GPIO_SD2_CD TEGRA_GPIO_PI5 | ||
23 | #define TEGRA_GPIO_SD2_WP TEGRA_GPIO_PH1 | ||
24 | #define TEGRA_GPIO_SD2_POWER TEGRA_GPIO_PT3 | ||
25 | #define TEGRA_GPIO_SD4_CD TEGRA_GPIO_PH2 | ||
26 | #define TEGRA_GPIO_SD4_WP TEGRA_GPIO_PH3 | ||
27 | #define TEGRA_GPIO_SD4_POWER TEGRA_GPIO_PI6 | ||
28 | #define TEGRA_GPIO_CDC_IRQ TEGRA_GPIO_PX3 | ||
29 | #define TEGRA_GPIO_SPKR_EN HARMONY_GPIO_WM8903(2) | ||
30 | #define TEGRA_GPIO_HP_DET TEGRA_GPIO_PW2 | ||
31 | #define TEGRA_GPIO_INT_MIC_EN TEGRA_GPIO_PX0 | ||
32 | #define TEGRA_GPIO_EXT_MIC_EN TEGRA_GPIO_PX1 | ||
33 | |||
20 | void harmony_pinmux_init(void); | 34 | void harmony_pinmux_init(void); |
35 | int harmony_regulator_init(void); | ||
21 | 36 | ||
22 | #endif | 37 | #endif |
diff --git a/arch/arm/mach-tegra/board-paz00-pinmux.c b/arch/arm/mach-tegra/board-paz00-pinmux.c new file mode 100644 index 000000000000..2643d1bd568b --- /dev/null +++ b/arch/arm/mach-tegra/board-paz00-pinmux.c | |||
@@ -0,0 +1,157 @@ | |||
1 | /* | ||
2 | * arch/arm/mach-tegra/board-paz00-pinmux.c | ||
3 | * | ||
4 | * Copyright (C) 2010 Marc Dietrich <marvin24@gmx.de> | ||
5 | * | ||
6 | * This software is licensed under the terms of the GNU General Public | ||
7 | * License version 2, as published by the Free Software Foundation, and | ||
8 | * may be copied, distributed, and modified under those terms. | ||
9 | * | ||
10 | * This program is distributed in the hope that it will be useful, | ||
11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
13 | * GNU General Public License for more details. | ||
14 | * | ||
15 | */ | ||
16 | |||
17 | #include <linux/kernel.h> | ||
18 | #include <linux/gpio.h> | ||
19 | #include <mach/pinmux.h> | ||
20 | |||
21 | #include "gpio-names.h" | ||
22 | #include "board-paz00.h" | ||
23 | |||
24 | static struct tegra_pingroup_config paz00_pinmux[] = { | ||
25 | {TEGRA_PINGROUP_ATA, TEGRA_MUX_GMI, TEGRA_PUPD_NORMAL, TEGRA_TRI_NORMAL}, | ||
26 | {TEGRA_PINGROUP_ATB, TEGRA_MUX_SDIO4, TEGRA_PUPD_NORMAL, TEGRA_TRI_NORMAL}, | ||
27 | {TEGRA_PINGROUP_ATC, TEGRA_MUX_GMI, TEGRA_PUPD_NORMAL, TEGRA_TRI_NORMAL}, | ||
28 | {TEGRA_PINGROUP_ATD, TEGRA_MUX_GMI, TEGRA_PUPD_NORMAL, TEGRA_TRI_NORMAL}, | ||
29 | {TEGRA_PINGROUP_ATE, TEGRA_MUX_GMI, TEGRA_PUPD_NORMAL, TEGRA_TRI_NORMAL}, | ||
30 | {TEGRA_PINGROUP_CDEV1, TEGRA_MUX_PLLA_OUT, TEGRA_PUPD_PULL_DOWN, TEGRA_TRI_TRISTATE}, | ||
31 | {TEGRA_PINGROUP_CDEV2, TEGRA_MUX_PLLP_OUT4, TEGRA_PUPD_PULL_DOWN, TEGRA_TRI_NORMAL}, | ||
32 | {TEGRA_PINGROUP_CRTP, TEGRA_MUX_CRT, TEGRA_PUPD_NORMAL, TEGRA_TRI_TRISTATE}, | ||
33 | {TEGRA_PINGROUP_CSUS, TEGRA_MUX_PLLC_OUT1, TEGRA_PUPD_PULL_DOWN, TEGRA_TRI_TRISTATE}, | ||
34 | {TEGRA_PINGROUP_DAP1, TEGRA_MUX_DAP1, TEGRA_PUPD_NORMAL, TEGRA_TRI_NORMAL}, | ||
35 | {TEGRA_PINGROUP_DAP2, TEGRA_MUX_GMI, TEGRA_PUPD_NORMAL, TEGRA_TRI_NORMAL}, | ||
36 | {TEGRA_PINGROUP_DAP3, TEGRA_MUX_DAP3, TEGRA_PUPD_NORMAL, TEGRA_TRI_TRISTATE}, | ||
37 | {TEGRA_PINGROUP_DAP4, TEGRA_MUX_DAP4, TEGRA_PUPD_NORMAL, TEGRA_TRI_TRISTATE}, | ||
38 | {TEGRA_PINGROUP_DDC, TEGRA_MUX_I2C2, TEGRA_PUPD_PULL_UP, TEGRA_TRI_NORMAL}, | ||
39 | {TEGRA_PINGROUP_DTA, TEGRA_MUX_RSVD1, TEGRA_PUPD_PULL_UP, TEGRA_TRI_TRISTATE}, | ||
40 | {TEGRA_PINGROUP_DTB, TEGRA_MUX_RSVD1, TEGRA_PUPD_NORMAL, TEGRA_TRI_TRISTATE}, | ||
41 | {TEGRA_PINGROUP_DTC, TEGRA_MUX_RSVD1, TEGRA_PUPD_NORMAL, TEGRA_TRI_TRISTATE}, | ||
42 | {TEGRA_PINGROUP_DTD, TEGRA_MUX_RSVD1, TEGRA_PUPD_PULL_UP, TEGRA_TRI_TRISTATE}, | ||
43 | {TEGRA_PINGROUP_DTE, TEGRA_MUX_RSVD1, TEGRA_PUPD_NORMAL, TEGRA_TRI_TRISTATE}, | ||
44 | {TEGRA_PINGROUP_DTF, TEGRA_MUX_I2C3, TEGRA_PUPD_NORMAL, TEGRA_TRI_NORMAL}, | ||
45 | {TEGRA_PINGROUP_GMA, TEGRA_MUX_SDIO4, TEGRA_PUPD_NORMAL, TEGRA_TRI_NORMAL}, | ||
46 | {TEGRA_PINGROUP_GMB, TEGRA_MUX_GMI, TEGRA_PUPD_NORMAL, TEGRA_TRI_NORMAL}, | ||
47 | {TEGRA_PINGROUP_GMC, TEGRA_MUX_GMI, TEGRA_PUPD_NORMAL, TEGRA_TRI_NORMAL}, | ||
48 | {TEGRA_PINGROUP_GMD, TEGRA_MUX_GMI, TEGRA_PUPD_NORMAL, TEGRA_TRI_NORMAL}, | ||
49 | {TEGRA_PINGROUP_GME, TEGRA_MUX_SDIO4, TEGRA_PUPD_NORMAL, TEGRA_TRI_NORMAL}, | ||
50 | {TEGRA_PINGROUP_GPU, TEGRA_MUX_PWM, TEGRA_PUPD_NORMAL, TEGRA_TRI_NORMAL}, | ||
51 | {TEGRA_PINGROUP_GPU7, TEGRA_MUX_RTCK, TEGRA_PUPD_NORMAL, TEGRA_TRI_NORMAL}, | ||
52 | {TEGRA_PINGROUP_GPV, TEGRA_MUX_PCIE, TEGRA_PUPD_NORMAL, TEGRA_TRI_NORMAL}, | ||
53 | {TEGRA_PINGROUP_HDINT, TEGRA_MUX_HDMI, TEGRA_PUPD_PULL_UP, TEGRA_TRI_NORMAL}, | ||
54 | {TEGRA_PINGROUP_I2CP, TEGRA_MUX_I2C, TEGRA_PUPD_NORMAL, TEGRA_TRI_NORMAL}, | ||
55 | {TEGRA_PINGROUP_IRRX, TEGRA_MUX_UARTA, TEGRA_PUPD_PULL_UP, TEGRA_TRI_NORMAL}, | ||
56 | {TEGRA_PINGROUP_IRTX, TEGRA_MUX_UARTA, TEGRA_PUPD_PULL_UP, TEGRA_TRI_NORMAL}, | ||
57 | {TEGRA_PINGROUP_KBCA, TEGRA_MUX_KBC, TEGRA_PUPD_PULL_UP, TEGRA_TRI_NORMAL}, | ||
58 | {TEGRA_PINGROUP_KBCB, TEGRA_MUX_SDIO2, TEGRA_PUPD_PULL_UP, TEGRA_TRI_NORMAL}, | ||
59 | {TEGRA_PINGROUP_KBCC, TEGRA_MUX_KBC, TEGRA_PUPD_PULL_UP, TEGRA_TRI_NORMAL}, | ||
60 | {TEGRA_PINGROUP_KBCD, TEGRA_MUX_SDIO2, TEGRA_PUPD_PULL_UP, TEGRA_TRI_NORMAL}, | ||
61 | {TEGRA_PINGROUP_KBCE, TEGRA_MUX_KBC, TEGRA_PUPD_PULL_UP, TEGRA_TRI_NORMAL}, | ||
62 | {TEGRA_PINGROUP_KBCF, TEGRA_MUX_KBC, TEGRA_PUPD_PULL_UP, TEGRA_TRI_NORMAL}, | ||
63 | {TEGRA_PINGROUP_LCSN, TEGRA_MUX_DISPLAYA, TEGRA_PUPD_PULL_UP, TEGRA_TRI_TRISTATE}, | ||
64 | {TEGRA_PINGROUP_LD0, TEGRA_MUX_DISPLAYA, TEGRA_PUPD_PULL_DOWN, TEGRA_TRI_NORMAL}, | ||
65 | {TEGRA_PINGROUP_LD1, TEGRA_MUX_DISPLAYA, TEGRA_PUPD_PULL_DOWN, TEGRA_TRI_NORMAL}, | ||
66 | {TEGRA_PINGROUP_LD10, TEGRA_MUX_DISPLAYA, TEGRA_PUPD_PULL_DOWN, TEGRA_TRI_NORMAL}, | ||
67 | {TEGRA_PINGROUP_LD11, TEGRA_MUX_DISPLAYA, TEGRA_PUPD_PULL_DOWN, TEGRA_TRI_NORMAL}, | ||
68 | {TEGRA_PINGROUP_LD12, TEGRA_MUX_DISPLAYA, TEGRA_PUPD_PULL_DOWN, TEGRA_TRI_NORMAL}, | ||
69 | {TEGRA_PINGROUP_LD13, TEGRA_MUX_DISPLAYA, TEGRA_PUPD_PULL_DOWN, TEGRA_TRI_NORMAL}, | ||
70 | {TEGRA_PINGROUP_LD14, TEGRA_MUX_DISPLAYA, TEGRA_PUPD_PULL_DOWN, TEGRA_TRI_NORMAL}, | ||
71 | {TEGRA_PINGROUP_LD15, TEGRA_MUX_DISPLAYA, TEGRA_PUPD_PULL_DOWN, TEGRA_TRI_NORMAL}, | ||
72 | {TEGRA_PINGROUP_LD16, TEGRA_MUX_DISPLAYA, TEGRA_PUPD_PULL_DOWN, TEGRA_TRI_NORMAL}, | ||
73 | {TEGRA_PINGROUP_LD17, TEGRA_MUX_DISPLAYA, TEGRA_PUPD_PULL_DOWN, TEGRA_TRI_NORMAL}, | ||
74 | {TEGRA_PINGROUP_LD2, TEGRA_MUX_DISPLAYA, TEGRA_PUPD_PULL_DOWN, TEGRA_TRI_NORMAL}, | ||
75 | {TEGRA_PINGROUP_LD3, TEGRA_MUX_DISPLAYA, TEGRA_PUPD_PULL_DOWN, TEGRA_TRI_NORMAL}, | ||
76 | {TEGRA_PINGROUP_LD4, TEGRA_MUX_DISPLAYA, TEGRA_PUPD_PULL_DOWN, TEGRA_TRI_NORMAL}, | ||
77 | {TEGRA_PINGROUP_LD5, TEGRA_MUX_DISPLAYA, TEGRA_PUPD_PULL_DOWN, TEGRA_TRI_NORMAL}, | ||
78 | {TEGRA_PINGROUP_LD6, TEGRA_MUX_DISPLAYA, TEGRA_PUPD_PULL_DOWN, TEGRA_TRI_NORMAL}, | ||
79 | {TEGRA_PINGROUP_LD7, TEGRA_MUX_DISPLAYA, TEGRA_PUPD_PULL_DOWN, TEGRA_TRI_NORMAL}, | ||
80 | {TEGRA_PINGROUP_LD8, TEGRA_MUX_DISPLAYA, TEGRA_PUPD_PULL_DOWN, TEGRA_TRI_NORMAL}, | ||
81 | {TEGRA_PINGROUP_LD9, TEGRA_MUX_DISPLAYA, TEGRA_PUPD_PULL_DOWN, TEGRA_TRI_NORMAL}, | ||
82 | {TEGRA_PINGROUP_LDC, TEGRA_MUX_DISPLAYA, TEGRA_PUPD_PULL_UP, TEGRA_TRI_NORMAL}, | ||
83 | {TEGRA_PINGROUP_LDI, TEGRA_MUX_DISPLAYA, TEGRA_PUPD_PULL_DOWN, TEGRA_TRI_NORMAL}, | ||
84 | {TEGRA_PINGROUP_LHP0, TEGRA_MUX_DISPLAYA, TEGRA_PUPD_PULL_DOWN, TEGRA_TRI_TRISTATE}, | ||
85 | {TEGRA_PINGROUP_LHP1, TEGRA_MUX_DISPLAYA, TEGRA_PUPD_PULL_DOWN, TEGRA_TRI_TRISTATE}, | ||
86 | {TEGRA_PINGROUP_LHP2, TEGRA_MUX_DISPLAYA, TEGRA_PUPD_PULL_DOWN, TEGRA_TRI_TRISTATE}, | ||
87 | {TEGRA_PINGROUP_LHS, TEGRA_MUX_DISPLAYA, TEGRA_PUPD_PULL_UP, TEGRA_TRI_NORMAL}, | ||
88 | {TEGRA_PINGROUP_LM0, TEGRA_MUX_DISPLAYA, TEGRA_PUPD_PULL_UP, TEGRA_TRI_TRISTATE}, | ||
89 | {TEGRA_PINGROUP_LM1, TEGRA_MUX_DISPLAYA, TEGRA_PUPD_PULL_UP, TEGRA_TRI_TRISTATE}, | ||
90 | {TEGRA_PINGROUP_LPP, TEGRA_MUX_DISPLAYA, TEGRA_PUPD_PULL_DOWN, TEGRA_TRI_TRISTATE}, | ||
91 | {TEGRA_PINGROUP_LPW0, TEGRA_MUX_DISPLAYA, TEGRA_PUPD_PULL_UP, TEGRA_TRI_TRISTATE}, | ||
92 | {TEGRA_PINGROUP_LPW1, TEGRA_MUX_DISPLAYA, TEGRA_PUPD_PULL_UP, TEGRA_TRI_TRISTATE}, | ||
93 | {TEGRA_PINGROUP_LPW2, TEGRA_MUX_DISPLAYA, TEGRA_PUPD_PULL_UP, TEGRA_TRI_TRISTATE}, | ||
94 | {TEGRA_PINGROUP_LSC0, TEGRA_MUX_DISPLAYA, TEGRA_PUPD_PULL_UP, TEGRA_TRI_NORMAL}, | ||
95 | {TEGRA_PINGROUP_LSC1, TEGRA_MUX_DISPLAYA, TEGRA_PUPD_PULL_UP, TEGRA_TRI_TRISTATE}, | ||
96 | {TEGRA_PINGROUP_LSCK, TEGRA_MUX_DISPLAYA, TEGRA_PUPD_PULL_UP, TEGRA_TRI_TRISTATE}, | ||
97 | {TEGRA_PINGROUP_LSDA, TEGRA_MUX_DISPLAYA, TEGRA_PUPD_PULL_UP, TEGRA_TRI_TRISTATE}, | ||
98 | {TEGRA_PINGROUP_LSDI, TEGRA_MUX_DISPLAYA, TEGRA_PUPD_PULL_UP, TEGRA_TRI_TRISTATE}, | ||
99 | {TEGRA_PINGROUP_LSPI, TEGRA_MUX_DISPLAYA, TEGRA_PUPD_PULL_UP, TEGRA_TRI_NORMAL}, | ||
100 | {TEGRA_PINGROUP_LVP0, TEGRA_MUX_DISPLAYA, TEGRA_PUPD_PULL_UP, TEGRA_TRI_TRISTATE}, | ||
101 | {TEGRA_PINGROUP_LVP1, TEGRA_MUX_DISPLAYA, TEGRA_PUPD_PULL_DOWN, TEGRA_TRI_TRISTATE}, | ||
102 | {TEGRA_PINGROUP_LVS, TEGRA_MUX_DISPLAYA, TEGRA_PUPD_PULL_UP, TEGRA_TRI_NORMAL}, | ||
103 | {TEGRA_PINGROUP_OWC, TEGRA_MUX_OWR, TEGRA_PUPD_PULL_UP, TEGRA_TRI_TRISTATE}, | ||
104 | {TEGRA_PINGROUP_PMC, TEGRA_MUX_PWR_ON, TEGRA_PUPD_NORMAL, TEGRA_TRI_NORMAL}, | ||
105 | {TEGRA_PINGROUP_PTA, TEGRA_MUX_HDMI, TEGRA_PUPD_NORMAL, TEGRA_TRI_NORMAL}, | ||
106 | {TEGRA_PINGROUP_RM, TEGRA_MUX_I2C, TEGRA_PUPD_NORMAL, TEGRA_TRI_NORMAL}, | ||
107 | {TEGRA_PINGROUP_SDB, TEGRA_MUX_PWM, TEGRA_PUPD_NORMAL, TEGRA_TRI_TRISTATE}, | ||
108 | {TEGRA_PINGROUP_SDC, TEGRA_MUX_TWC, TEGRA_PUPD_PULL_UP, TEGRA_TRI_TRISTATE}, | ||
109 | {TEGRA_PINGROUP_SDD, TEGRA_MUX_PWM, TEGRA_PUPD_PULL_UP, TEGRA_TRI_TRISTATE}, | ||
110 | {TEGRA_PINGROUP_SDIO1, TEGRA_MUX_SDIO1, TEGRA_PUPD_NORMAL, TEGRA_TRI_NORMAL}, | ||
111 | {TEGRA_PINGROUP_SLXA, TEGRA_MUX_PCIE, TEGRA_PUPD_NORMAL, TEGRA_TRI_TRISTATE}, | ||
112 | {TEGRA_PINGROUP_SLXC, TEGRA_MUX_SPI4, TEGRA_PUPD_NORMAL, TEGRA_TRI_TRISTATE}, | ||
113 | {TEGRA_PINGROUP_SLXD, TEGRA_MUX_SPI4, TEGRA_PUPD_NORMAL, TEGRA_TRI_TRISTATE}, | ||
114 | {TEGRA_PINGROUP_SLXK, TEGRA_MUX_PCIE, TEGRA_PUPD_NORMAL, TEGRA_TRI_NORMAL}, | ||
115 | {TEGRA_PINGROUP_SPDI, TEGRA_MUX_RSVD2, TEGRA_PUPD_NORMAL, TEGRA_TRI_TRISTATE}, | ||
116 | {TEGRA_PINGROUP_SPDO, TEGRA_MUX_RSVD2, TEGRA_PUPD_NORMAL, TEGRA_TRI_NORMAL}, | ||
117 | {TEGRA_PINGROUP_SPIA, TEGRA_MUX_GMI, TEGRA_PUPD_PULL_DOWN, TEGRA_TRI_TRISTATE}, | ||
118 | {TEGRA_PINGROUP_SPIB, TEGRA_MUX_GMI, TEGRA_PUPD_PULL_DOWN, TEGRA_TRI_TRISTATE}, | ||
119 | {TEGRA_PINGROUP_SPIC, TEGRA_MUX_GMI, TEGRA_PUPD_PULL_UP, TEGRA_TRI_NORMAL}, | ||
120 | {TEGRA_PINGROUP_SPID, TEGRA_MUX_GMI, TEGRA_PUPD_PULL_DOWN, TEGRA_TRI_TRISTATE}, | ||
121 | {TEGRA_PINGROUP_SPIE, TEGRA_MUX_GMI, TEGRA_PUPD_PULL_UP, TEGRA_TRI_TRISTATE}, | ||
122 | {TEGRA_PINGROUP_SPIF, TEGRA_MUX_RSVD4, TEGRA_PUPD_PULL_DOWN, TEGRA_TRI_TRISTATE}, | ||
123 | {TEGRA_PINGROUP_SPIG, TEGRA_MUX_SPI2_ALT, TEGRA_PUPD_PULL_UP, TEGRA_TRI_NORMAL}, | ||
124 | {TEGRA_PINGROUP_SPIH, TEGRA_MUX_SPI2_ALT, TEGRA_PUPD_PULL_UP, TEGRA_TRI_TRISTATE}, | ||
125 | {TEGRA_PINGROUP_UAA, TEGRA_MUX_ULPI, TEGRA_PUPD_PULL_UP, TEGRA_TRI_NORMAL}, | ||
126 | {TEGRA_PINGROUP_UAB, TEGRA_MUX_ULPI, TEGRA_PUPD_PULL_UP, TEGRA_TRI_NORMAL}, | ||
127 | {TEGRA_PINGROUP_UAC, TEGRA_MUX_RSVD4, TEGRA_PUPD_NORMAL, TEGRA_TRI_NORMAL}, | ||
128 | {TEGRA_PINGROUP_UAD, TEGRA_MUX_SPDIF, TEGRA_PUPD_PULL_UP, TEGRA_TRI_TRISTATE}, | ||
129 | {TEGRA_PINGROUP_UCA, TEGRA_MUX_UARTC, TEGRA_PUPD_PULL_UP, TEGRA_TRI_TRISTATE}, | ||
130 | {TEGRA_PINGROUP_UCB, TEGRA_MUX_UARTC, TEGRA_PUPD_PULL_UP, TEGRA_TRI_TRISTATE}, | ||
131 | {TEGRA_PINGROUP_UDA, TEGRA_MUX_ULPI, TEGRA_PUPD_NORMAL, TEGRA_TRI_NORMAL}, | ||
132 | {TEGRA_PINGROUP_CK32, TEGRA_MUX_NONE, TEGRA_PUPD_NORMAL, TEGRA_TRI_NORMAL}, | ||
133 | {TEGRA_PINGROUP_DDRC, TEGRA_MUX_NONE, TEGRA_PUPD_NORMAL, TEGRA_TRI_NORMAL}, | ||
134 | {TEGRA_PINGROUP_PMCA, TEGRA_MUX_NONE, TEGRA_PUPD_NORMAL, TEGRA_TRI_NORMAL}, | ||
135 | {TEGRA_PINGROUP_PMCB, TEGRA_MUX_NONE, TEGRA_PUPD_NORMAL, TEGRA_TRI_NORMAL}, | ||
136 | {TEGRA_PINGROUP_PMCC, TEGRA_MUX_NONE, TEGRA_PUPD_NORMAL, TEGRA_TRI_NORMAL}, | ||
137 | {TEGRA_PINGROUP_PMCD, TEGRA_MUX_NONE, TEGRA_PUPD_NORMAL, TEGRA_TRI_NORMAL}, | ||
138 | {TEGRA_PINGROUP_PMCE, TEGRA_MUX_NONE, TEGRA_PUPD_NORMAL, TEGRA_TRI_NORMAL}, | ||
139 | {TEGRA_PINGROUP_XM2C, TEGRA_MUX_NONE, TEGRA_PUPD_NORMAL, TEGRA_TRI_NORMAL}, | ||
140 | {TEGRA_PINGROUP_XM2D, TEGRA_MUX_NONE, TEGRA_PUPD_NORMAL, TEGRA_TRI_NORMAL}, | ||
141 | }; | ||
142 | |||
143 | static struct tegra_gpio_table gpio_table[] = { | ||
144 | { .gpio = TEGRA_GPIO_SD1_CD, .enable = true }, | ||
145 | { .gpio = TEGRA_GPIO_SD1_WP, .enable = true }, | ||
146 | { .gpio = TEGRA_GPIO_SD1_POWER, .enable = true }, | ||
147 | { .gpio = TEGRA_GPIO_SD4_CD, .enable = true }, | ||
148 | { .gpio = TEGRA_GPIO_SD4_WP, .enable = true }, | ||
149 | { .gpio = TEGRA_GPIO_SD4_POWER, .enable = true }, | ||
150 | }; | ||
151 | |||
152 | void paz00_pinmux_init(void) | ||
153 | { | ||
154 | tegra_pinmux_config_table(paz00_pinmux, ARRAY_SIZE(paz00_pinmux)); | ||
155 | |||
156 | tegra_gpio_config(gpio_table, ARRAY_SIZE(gpio_table)); | ||
157 | } | ||
diff --git a/arch/arm/mach-tegra/board-paz00.c b/arch/arm/mach-tegra/board-paz00.c new file mode 100644 index 000000000000..57e50a823eec --- /dev/null +++ b/arch/arm/mach-tegra/board-paz00.c | |||
@@ -0,0 +1,128 @@ | |||
1 | /* | ||
2 | * arch/arm/mach-tegra/board-paz00.c | ||
3 | * | ||
4 | * Copyright (C) 2011 Marc Dietrich <marvin24@gmx.de> | ||
5 | * | ||
6 | * Based on board-harmony.c | ||
7 | * Copyright (C) 2010 Google, Inc. | ||
8 | * | ||
9 | * This software is licensed under the terms of the GNU General Public | ||
10 | * License version 2, as published by the Free Software Foundation, and | ||
11 | * may be copied, distributed, and modified under those terms. | ||
12 | * | ||
13 | * This program is distributed in the hope that it will be useful, | ||
14 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
15 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
16 | * GNU General Public License for more details. | ||
17 | * | ||
18 | */ | ||
19 | |||
20 | #include <linux/kernel.h> | ||
21 | #include <linux/init.h> | ||
22 | #include <linux/platform_device.h> | ||
23 | #include <linux/serial_8250.h> | ||
24 | #include <linux/clk.h> | ||
25 | #include <linux/dma-mapping.h> | ||
26 | #include <linux/pda_power.h> | ||
27 | #include <linux/io.h> | ||
28 | |||
29 | #include <asm/mach-types.h> | ||
30 | #include <asm/mach/arch.h> | ||
31 | #include <asm/mach/time.h> | ||
32 | #include <asm/setup.h> | ||
33 | |||
34 | #include <mach/iomap.h> | ||
35 | #include <mach/irqs.h> | ||
36 | #include <mach/sdhci.h> | ||
37 | |||
38 | #include "board.h" | ||
39 | #include "board-paz00.h" | ||
40 | #include "clock.h" | ||
41 | #include "devices.h" | ||
42 | #include "gpio-names.h" | ||
43 | |||
44 | static struct plat_serial8250_port debug_uart_platform_data[] = { | ||
45 | { | ||
46 | .membase = IO_ADDRESS(TEGRA_UARTD_BASE), | ||
47 | .mapbase = TEGRA_UARTD_BASE, | ||
48 | .irq = INT_UARTD, | ||
49 | .flags = UPF_BOOT_AUTOCONF, | ||
50 | .iotype = UPIO_MEM, | ||
51 | .regshift = 2, | ||
52 | .uartclk = 216000000, | ||
53 | }, { | ||
54 | .flags = 0 | ||
55 | } | ||
56 | }; | ||
57 | |||
58 | static struct platform_device debug_uart = { | ||
59 | .name = "serial8250", | ||
60 | .id = PLAT8250_DEV_PLATFORM, | ||
61 | .dev = { | ||
62 | .platform_data = debug_uart_platform_data, | ||
63 | }, | ||
64 | }; | ||
65 | |||
66 | static struct platform_device *paz00_devices[] __initdata = { | ||
67 | &debug_uart, | ||
68 | &tegra_sdhci_device1, | ||
69 | &tegra_sdhci_device2, | ||
70 | &tegra_sdhci_device4, | ||
71 | }; | ||
72 | |||
73 | static void __init tegra_paz00_fixup(struct machine_desc *desc, | ||
74 | struct tag *tags, char **cmdline, struct meminfo *mi) | ||
75 | { | ||
76 | mi->nr_banks = 1; | ||
77 | mi->bank[0].start = PHYS_OFFSET; | ||
78 | mi->bank[0].size = 448 * SZ_1M; | ||
79 | } | ||
80 | |||
81 | static __initdata struct tegra_clk_init_table paz00_clk_init_table[] = { | ||
82 | /* name parent rate enabled */ | ||
83 | { "uartd", "pll_p", 216000000, true }, | ||
84 | { NULL, NULL, 0, 0}, | ||
85 | }; | ||
86 | |||
87 | |||
88 | static struct tegra_sdhci_platform_data sdhci_pdata1 = { | ||
89 | .cd_gpio = TEGRA_GPIO_SD1_CD, | ||
90 | .wp_gpio = TEGRA_GPIO_SD1_WP, | ||
91 | .power_gpio = TEGRA_GPIO_SD1_POWER, | ||
92 | }; | ||
93 | |||
94 | static struct tegra_sdhci_platform_data sdhci_pdata2 = { | ||
95 | .cd_gpio = -1, | ||
96 | .wp_gpio = -1, | ||
97 | .power_gpio = -1, | ||
98 | }; | ||
99 | |||
100 | static struct tegra_sdhci_platform_data sdhci_pdata4 = { | ||
101 | .cd_gpio = TEGRA_GPIO_SD4_CD, | ||
102 | .wp_gpio = TEGRA_GPIO_SD4_WP, | ||
103 | .power_gpio = TEGRA_GPIO_SD4_POWER, | ||
104 | .is_8bit = 1, | ||
105 | }; | ||
106 | |||
107 | static void __init tegra_paz00_init(void) | ||
108 | { | ||
109 | tegra_clk_init_from_table(paz00_clk_init_table); | ||
110 | |||
111 | paz00_pinmux_init(); | ||
112 | |||
113 | tegra_sdhci_device1.dev.platform_data = &sdhci_pdata1; | ||
114 | tegra_sdhci_device2.dev.platform_data = &sdhci_pdata2; | ||
115 | tegra_sdhci_device4.dev.platform_data = &sdhci_pdata4; | ||
116 | |||
117 | platform_add_devices(paz00_devices, ARRAY_SIZE(paz00_devices)); | ||
118 | } | ||
119 | |||
120 | MACHINE_START(PAZ00, "paz00") | ||
121 | .boot_params = 0x00000100, | ||
122 | .fixup = tegra_paz00_fixup, | ||
123 | .map_io = tegra_map_common_io, | ||
124 | .init_early = tegra_init_early, | ||
125 | .init_irq = tegra_init_irq, | ||
126 | .timer = &tegra_timer, | ||
127 | .init_machine = tegra_paz00_init, | ||
128 | MACHINE_END | ||
diff --git a/arch/arm/mach-tegra/board-paz00.h b/arch/arm/mach-tegra/board-paz00.h new file mode 100644 index 000000000000..da193ca76d3b --- /dev/null +++ b/arch/arm/mach-tegra/board-paz00.h | |||
@@ -0,0 +1,29 @@ | |||
1 | /* | ||
2 | * arch/arm/mach-tegra/board-paz00.h | ||
3 | * | ||
4 | * Copyright (C) 2010 Marc Dietrich <marvin24@gmx.de> | ||
5 | * | ||
6 | * This software is licensed under the terms of the GNU General Public | ||
7 | * License version 2, as published by the Free Software Foundation, and | ||
8 | * may be copied, distributed, and modified under those terms. | ||
9 | * | ||
10 | * This program is distributed in the hope that it will be useful, | ||
11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
13 | * GNU General Public License for more details. | ||
14 | * | ||
15 | */ | ||
16 | |||
17 | #ifndef _MACH_TEGRA_BOARD_PAZ00_H | ||
18 | #define _MACH_TEGRA_BOARD_PAZ00_H | ||
19 | |||
20 | #define TEGRA_GPIO_SD1_CD TEGRA_GPIO_PV5 | ||
21 | #define TEGRA_GPIO_SD1_WP TEGRA_GPIO_PH1 | ||
22 | #define TEGRA_GPIO_SD1_POWER TEGRA_GPIO_PT3 | ||
23 | #define TEGRA_GPIO_SD4_CD TEGRA_GPIO_PH2 | ||
24 | #define TEGRA_GPIO_SD4_WP TEGRA_GPIO_PH3 | ||
25 | #define TEGRA_GPIO_SD4_POWER TEGRA_GPIO_PI6 | ||
26 | |||
27 | void paz00_pinmux_init(void); | ||
28 | |||
29 | #endif | ||
diff --git a/arch/arm/mach-tegra/board-seaboard-pinmux.c b/arch/arm/mach-tegra/board-seaboard-pinmux.c index 2d6ad83ed4b2..0bda495e9742 100644 --- a/arch/arm/mach-tegra/board-seaboard-pinmux.c +++ b/arch/arm/mach-tegra/board-seaboard-pinmux.c | |||
@@ -161,11 +161,12 @@ static __initdata struct tegra_pingroup_config seaboard_pinmux[] = { | |||
161 | 161 | ||
162 | 162 | ||
163 | static struct tegra_gpio_table gpio_table[] = { | 163 | static struct tegra_gpio_table gpio_table[] = { |
164 | { .gpio = TEGRA_GPIO_PI5, .enable = true }, /* mmc2 cd */ | 164 | { .gpio = TEGRA_GPIO_SD2_CD, .enable = true }, |
165 | { .gpio = TEGRA_GPIO_PH1, .enable = true }, /* mmc2 wp */ | 165 | { .gpio = TEGRA_GPIO_SD2_WP, .enable = true }, |
166 | { .gpio = TEGRA_GPIO_PI6, .enable = true }, /* mmc2 pwr */ | 166 | { .gpio = TEGRA_GPIO_SD2_POWER, .enable = true }, |
167 | { .gpio = TEGRA_GPIO_LIDSWITCH, .enable = true }, /* lid switch */ | 167 | { .gpio = TEGRA_GPIO_LIDSWITCH, .enable = true }, |
168 | { .gpio = TEGRA_GPIO_POWERKEY, .enable = true }, /* power key */ | 168 | { .gpio = TEGRA_GPIO_POWERKEY, .enable = true }, |
169 | { .gpio = TEGRA_GPIO_ISL29018_IRQ, .enable = true }, | ||
169 | }; | 170 | }; |
170 | 171 | ||
171 | void __init seaboard_pinmux_init(void) | 172 | void __init seaboard_pinmux_init(void) |
diff --git a/arch/arm/mach-tegra/board-seaboard.c b/arch/arm/mach-tegra/board-seaboard.c index 6ca9e61f6cd0..a8d7ace9f958 100644 --- a/arch/arm/mach-tegra/board-seaboard.c +++ b/arch/arm/mach-tegra/board-seaboard.c | |||
@@ -18,9 +18,12 @@ | |||
18 | #include <linux/init.h> | 18 | #include <linux/init.h> |
19 | #include <linux/platform_device.h> | 19 | #include <linux/platform_device.h> |
20 | #include <linux/serial_8250.h> | 20 | #include <linux/serial_8250.h> |
21 | #include <linux/i2c.h> | ||
22 | #include <linux/i2c-tegra.h> | ||
21 | #include <linux/delay.h> | 23 | #include <linux/delay.h> |
22 | #include <linux/input.h> | 24 | #include <linux/input.h> |
23 | #include <linux/io.h> | 25 | #include <linux/io.h> |
26 | #include <linux/gpio.h> | ||
24 | #include <linux/gpio_keys.h> | 27 | #include <linux/gpio_keys.h> |
25 | 28 | ||
26 | #include <mach/iomap.h> | 29 | #include <mach/iomap.h> |
@@ -63,6 +66,22 @@ static __initdata struct tegra_clk_init_table seaboard_clk_init_table[] = { | |||
63 | { NULL, NULL, 0, 0}, | 66 | { NULL, NULL, 0, 0}, |
64 | }; | 67 | }; |
65 | 68 | ||
69 | static struct tegra_i2c_platform_data seaboard_i2c1_platform_data = { | ||
70 | .bus_clk_rate = 400000. | ||
71 | }; | ||
72 | |||
73 | static struct tegra_i2c_platform_data seaboard_i2c2_platform_data = { | ||
74 | .bus_clk_rate = 400000, | ||
75 | }; | ||
76 | |||
77 | static struct tegra_i2c_platform_data seaboard_i2c3_platform_data = { | ||
78 | .bus_clk_rate = 400000, | ||
79 | }; | ||
80 | |||
81 | static struct tegra_i2c_platform_data seaboard_dvc_platform_data = { | ||
82 | .bus_clk_rate = 400000, | ||
83 | }; | ||
84 | |||
66 | static struct gpio_keys_button seaboard_gpio_keys_buttons[] = { | 85 | static struct gpio_keys_button seaboard_gpio_keys_buttons[] = { |
67 | { | 86 | { |
68 | .code = SW_LID, | 87 | .code = SW_LID, |
@@ -103,9 +122,9 @@ static struct tegra_sdhci_platform_data sdhci_pdata1 = { | |||
103 | }; | 122 | }; |
104 | 123 | ||
105 | static struct tegra_sdhci_platform_data sdhci_pdata3 = { | 124 | static struct tegra_sdhci_platform_data sdhci_pdata3 = { |
106 | .cd_gpio = TEGRA_GPIO_PI5, | 125 | .cd_gpio = TEGRA_GPIO_SD2_CD, |
107 | .wp_gpio = TEGRA_GPIO_PH1, | 126 | .wp_gpio = TEGRA_GPIO_SD2_WP, |
108 | .power_gpio = TEGRA_GPIO_PI6, | 127 | .power_gpio = TEGRA_GPIO_SD2_POWER, |
109 | }; | 128 | }; |
110 | 129 | ||
111 | static struct tegra_sdhci_platform_data sdhci_pdata4 = { | 130 | static struct tegra_sdhci_platform_data sdhci_pdata4 = { |
@@ -124,7 +143,36 @@ static struct platform_device *seaboard_devices[] __initdata = { | |||
124 | &seaboard_gpio_keys_device, | 143 | &seaboard_gpio_keys_device, |
125 | }; | 144 | }; |
126 | 145 | ||
127 | static void __init __tegra_seaboard_init(void) | 146 | static struct i2c_board_info __initdata isl29018_device = { |
147 | I2C_BOARD_INFO("isl29018", 0x44), | ||
148 | .irq = TEGRA_GPIO_TO_IRQ(TEGRA_GPIO_ISL29018_IRQ), | ||
149 | }; | ||
150 | |||
151 | static struct i2c_board_info __initdata adt7461_device = { | ||
152 | I2C_BOARD_INFO("adt7461", 0x4c), | ||
153 | }; | ||
154 | |||
155 | static void __init seaboard_i2c_init(void) | ||
156 | { | ||
157 | gpio_request(TEGRA_GPIO_ISL29018_IRQ, "isl29018"); | ||
158 | gpio_direction_input(TEGRA_GPIO_ISL29018_IRQ); | ||
159 | |||
160 | i2c_register_board_info(0, &isl29018_device, 1); | ||
161 | |||
162 | i2c_register_board_info(4, &adt7461_device, 1); | ||
163 | |||
164 | tegra_i2c_device1.dev.platform_data = &seaboard_i2c1_platform_data; | ||
165 | tegra_i2c_device2.dev.platform_data = &seaboard_i2c2_platform_data; | ||
166 | tegra_i2c_device3.dev.platform_data = &seaboard_i2c3_platform_data; | ||
167 | tegra_i2c_device4.dev.platform_data = &seaboard_dvc_platform_data; | ||
168 | |||
169 | platform_device_register(&tegra_i2c_device1); | ||
170 | platform_device_register(&tegra_i2c_device2); | ||
171 | platform_device_register(&tegra_i2c_device3); | ||
172 | platform_device_register(&tegra_i2c_device4); | ||
173 | } | ||
174 | |||
175 | static void __init seaboard_common_init(void) | ||
128 | { | 176 | { |
129 | seaboard_pinmux_init(); | 177 | seaboard_pinmux_init(); |
130 | 178 | ||
@@ -144,7 +192,9 @@ static void __init tegra_seaboard_init(void) | |||
144 | debug_uart_platform_data[0].mapbase = TEGRA_UARTD_BASE; | 192 | debug_uart_platform_data[0].mapbase = TEGRA_UARTD_BASE; |
145 | debug_uart_platform_data[0].irq = INT_UARTD; | 193 | debug_uart_platform_data[0].irq = INT_UARTD; |
146 | 194 | ||
147 | __tegra_seaboard_init(); | 195 | seaboard_common_init(); |
196 | |||
197 | seaboard_i2c_init(); | ||
148 | } | 198 | } |
149 | 199 | ||
150 | static void __init tegra_kaen_init(void) | 200 | static void __init tegra_kaen_init(void) |
@@ -154,7 +204,9 @@ static void __init tegra_kaen_init(void) | |||
154 | debug_uart_platform_data[0].mapbase = TEGRA_UARTB_BASE; | 204 | debug_uart_platform_data[0].mapbase = TEGRA_UARTB_BASE; |
155 | debug_uart_platform_data[0].irq = INT_UARTB; | 205 | debug_uart_platform_data[0].irq = INT_UARTB; |
156 | 206 | ||
157 | __tegra_seaboard_init(); | 207 | seaboard_common_init(); |
208 | |||
209 | seaboard_i2c_init(); | ||
158 | } | 210 | } |
159 | 211 | ||
160 | static void __init tegra_wario_init(void) | 212 | static void __init tegra_wario_init(void) |
@@ -164,7 +216,9 @@ static void __init tegra_wario_init(void) | |||
164 | debug_uart_platform_data[0].mapbase = TEGRA_UARTB_BASE; | 216 | debug_uart_platform_data[0].mapbase = TEGRA_UARTB_BASE; |
165 | debug_uart_platform_data[0].irq = INT_UARTB; | 217 | debug_uart_platform_data[0].irq = INT_UARTB; |
166 | 218 | ||
167 | __tegra_seaboard_init(); | 219 | seaboard_common_init(); |
220 | |||
221 | seaboard_i2c_init(); | ||
168 | } | 222 | } |
169 | 223 | ||
170 | 224 | ||
diff --git a/arch/arm/mach-tegra/board-seaboard.h b/arch/arm/mach-tegra/board-seaboard.h index a098e3599731..d8415e1a8434 100644 --- a/arch/arm/mach-tegra/board-seaboard.h +++ b/arch/arm/mach-tegra/board-seaboard.h | |||
@@ -17,6 +17,9 @@ | |||
17 | #ifndef _MACH_TEGRA_BOARD_SEABOARD_H | 17 | #ifndef _MACH_TEGRA_BOARD_SEABOARD_H |
18 | #define _MACH_TEGRA_BOARD_SEABOARD_H | 18 | #define _MACH_TEGRA_BOARD_SEABOARD_H |
19 | 19 | ||
20 | #define TEGRA_GPIO_SD2_CD TEGRA_GPIO_PI5 | ||
21 | #define TEGRA_GPIO_SD2_WP TEGRA_GPIO_PH1 | ||
22 | #define TEGRA_GPIO_SD2_POWER TEGRA_GPIO_PI6 | ||
20 | #define TEGRA_GPIO_LIDSWITCH TEGRA_GPIO_PC7 | 23 | #define TEGRA_GPIO_LIDSWITCH TEGRA_GPIO_PC7 |
21 | #define TEGRA_GPIO_USB1 TEGRA_GPIO_PD0 | 24 | #define TEGRA_GPIO_USB1 TEGRA_GPIO_PD0 |
22 | #define TEGRA_GPIO_POWERKEY TEGRA_GPIO_PV2 | 25 | #define TEGRA_GPIO_POWERKEY TEGRA_GPIO_PV2 |
diff --git a/arch/arm/mach-tegra/board-trimslice-pinmux.c b/arch/arm/mach-tegra/board-trimslice-pinmux.c index 6d4fc9f7f1fb..13534fa08abf 100644 --- a/arch/arm/mach-tegra/board-trimslice-pinmux.c +++ b/arch/arm/mach-tegra/board-trimslice-pinmux.c | |||
@@ -16,8 +16,11 @@ | |||
16 | 16 | ||
17 | #include <linux/kernel.h> | 17 | #include <linux/kernel.h> |
18 | #include <linux/init.h> | 18 | #include <linux/init.h> |
19 | |||
19 | #include <mach/pinmux.h> | 20 | #include <mach/pinmux.h> |
21 | #include <mach/gpio.h> | ||
20 | 22 | ||
23 | #include "gpio-names.h" | ||
21 | #include "board-trimslice.h" | 24 | #include "board-trimslice.h" |
22 | 25 | ||
23 | static __initdata struct tegra_pingroup_config trimslice_pinmux[] = { | 26 | static __initdata struct tegra_pingroup_config trimslice_pinmux[] = { |
@@ -139,7 +142,13 @@ static __initdata struct tegra_pingroup_config trimslice_pinmux[] = { | |||
139 | {TEGRA_PINGROUP_XM2D, TEGRA_MUX_NONE, TEGRA_PUPD_NORMAL, TEGRA_TRI_NORMAL}, | 142 | {TEGRA_PINGROUP_XM2D, TEGRA_MUX_NONE, TEGRA_PUPD_NORMAL, TEGRA_TRI_NORMAL}, |
140 | }; | 143 | }; |
141 | 144 | ||
145 | static struct tegra_gpio_table gpio_table[] = { | ||
146 | { .gpio = TRIMSLICE_GPIO_SD4_CD, .enable = true }, /* mmc4 cd */ | ||
147 | { .gpio = TRIMSLICE_GPIO_SD4_WP, .enable = true }, /* mmc4 wp */ | ||
148 | }; | ||
149 | |||
142 | void __init trimslice_pinmux_init(void) | 150 | void __init trimslice_pinmux_init(void) |
143 | { | 151 | { |
144 | tegra_pinmux_config_table(trimslice_pinmux, ARRAY_SIZE(trimslice_pinmux)); | 152 | tegra_pinmux_config_table(trimslice_pinmux, ARRAY_SIZE(trimslice_pinmux)); |
153 | tegra_gpio_config(gpio_table, ARRAY_SIZE(gpio_table)); | ||
145 | } | 154 | } |
diff --git a/arch/arm/mach-tegra/board-trimslice.c b/arch/arm/mach-tegra/board-trimslice.c index 7be7d4acd02f..cda4cfd78e84 100644 --- a/arch/arm/mach-tegra/board-trimslice.c +++ b/arch/arm/mach-tegra/board-trimslice.c | |||
@@ -29,9 +29,12 @@ | |||
29 | #include <asm/setup.h> | 29 | #include <asm/setup.h> |
30 | 30 | ||
31 | #include <mach/iomap.h> | 31 | #include <mach/iomap.h> |
32 | #include <mach/sdhci.h> | ||
32 | 33 | ||
33 | #include "board.h" | 34 | #include "board.h" |
34 | #include "clock.h" | 35 | #include "clock.h" |
36 | #include "devices.h" | ||
37 | #include "gpio-names.h" | ||
35 | 38 | ||
36 | #include "board-trimslice.h" | 39 | #include "board-trimslice.h" |
37 | 40 | ||
@@ -56,9 +59,22 @@ static struct platform_device debug_uart = { | |||
56 | .platform_data = debug_uart_platform_data, | 59 | .platform_data = debug_uart_platform_data, |
57 | }, | 60 | }, |
58 | }; | 61 | }; |
62 | static struct tegra_sdhci_platform_data sdhci_pdata1 = { | ||
63 | .cd_gpio = -1, | ||
64 | .wp_gpio = -1, | ||
65 | .power_gpio = -1, | ||
66 | }; | ||
67 | |||
68 | static struct tegra_sdhci_platform_data sdhci_pdata4 = { | ||
69 | .cd_gpio = TRIMSLICE_GPIO_SD4_CD, | ||
70 | .wp_gpio = TRIMSLICE_GPIO_SD4_WP, | ||
71 | .power_gpio = -1, | ||
72 | }; | ||
59 | 73 | ||
60 | static struct platform_device *trimslice_devices[] __initdata = { | 74 | static struct platform_device *trimslice_devices[] __initdata = { |
61 | &debug_uart, | 75 | &debug_uart, |
76 | &tegra_sdhci_device1, | ||
77 | &tegra_sdhci_device4, | ||
62 | }; | 78 | }; |
63 | 79 | ||
64 | static void __init tegra_trimslice_fixup(struct machine_desc *desc, | 80 | static void __init tegra_trimslice_fixup(struct machine_desc *desc, |
@@ -92,6 +108,9 @@ static void __init tegra_trimslice_init(void) | |||
92 | 108 | ||
93 | trimslice_pinmux_init(); | 109 | trimslice_pinmux_init(); |
94 | 110 | ||
111 | tegra_sdhci_device1.dev.platform_data = &sdhci_pdata1; | ||
112 | tegra_sdhci_device4.dev.platform_data = &sdhci_pdata4; | ||
113 | |||
95 | platform_add_devices(trimslice_devices, ARRAY_SIZE(trimslice_devices)); | 114 | platform_add_devices(trimslice_devices, ARRAY_SIZE(trimslice_devices)); |
96 | } | 115 | } |
97 | 116 | ||
diff --git a/arch/arm/mach-tegra/board-trimslice.h b/arch/arm/mach-tegra/board-trimslice.h index 16ec0f0d3bb1..e8ef6291c6f1 100644 --- a/arch/arm/mach-tegra/board-trimslice.h +++ b/arch/arm/mach-tegra/board-trimslice.h | |||
@@ -17,6 +17,9 @@ | |||
17 | #ifndef _MACH_TEGRA_BOARD_TRIMSLICE_H | 17 | #ifndef _MACH_TEGRA_BOARD_TRIMSLICE_H |
18 | #define _MACH_TEGRA_BOARD_TRIMSLICE_H | 18 | #define _MACH_TEGRA_BOARD_TRIMSLICE_H |
19 | 19 | ||
20 | #define TRIMSLICE_GPIO_SD4_CD TEGRA_GPIO_PP1 /* mmc4 cd */ | ||
21 | #define TRIMSLICE_GPIO_SD4_WP TEGRA_GPIO_PP2 /* mmc4 wp */ | ||
22 | |||
20 | void trimslice_pinmux_init(void); | 23 | void trimslice_pinmux_init(void); |
21 | 24 | ||
22 | #endif | 25 | #endif |
diff --git a/arch/arm/mach-tegra/devices.c b/arch/arm/mach-tegra/devices.c index 682e6d33108c..1528f9daef1f 100644 --- a/arch/arm/mach-tegra/devices.c +++ b/arch/arm/mach-tegra/devices.c | |||
@@ -503,3 +503,73 @@ struct platform_device tegra_uarte_device = { | |||
503 | .coherent_dma_mask = DMA_BIT_MASK(32), | 503 | .coherent_dma_mask = DMA_BIT_MASK(32), |
504 | }, | 504 | }, |
505 | }; | 505 | }; |
506 | |||
507 | static struct resource i2s_resource1[] = { | ||
508 | [0] = { | ||
509 | .start = INT_I2S1, | ||
510 | .end = INT_I2S1, | ||
511 | .flags = IORESOURCE_IRQ | ||
512 | }, | ||
513 | [1] = { | ||
514 | .start = TEGRA_DMA_REQ_SEL_I2S_1, | ||
515 | .end = TEGRA_DMA_REQ_SEL_I2S_1, | ||
516 | .flags = IORESOURCE_DMA | ||
517 | }, | ||
518 | [2] = { | ||
519 | .start = TEGRA_I2S1_BASE, | ||
520 | .end = TEGRA_I2S1_BASE + TEGRA_I2S1_SIZE - 1, | ||
521 | .flags = IORESOURCE_MEM | ||
522 | } | ||
523 | }; | ||
524 | |||
525 | static struct resource i2s_resource2[] = { | ||
526 | [0] = { | ||
527 | .start = INT_I2S2, | ||
528 | .end = INT_I2S2, | ||
529 | .flags = IORESOURCE_IRQ | ||
530 | }, | ||
531 | [1] = { | ||
532 | .start = TEGRA_DMA_REQ_SEL_I2S2_1, | ||
533 | .end = TEGRA_DMA_REQ_SEL_I2S2_1, | ||
534 | .flags = IORESOURCE_DMA | ||
535 | }, | ||
536 | [2] = { | ||
537 | .start = TEGRA_I2S2_BASE, | ||
538 | .end = TEGRA_I2S2_BASE + TEGRA_I2S2_SIZE - 1, | ||
539 | .flags = IORESOURCE_MEM | ||
540 | } | ||
541 | }; | ||
542 | |||
543 | struct platform_device tegra_i2s_device1 = { | ||
544 | .name = "tegra-i2s", | ||
545 | .id = 0, | ||
546 | .resource = i2s_resource1, | ||
547 | .num_resources = ARRAY_SIZE(i2s_resource1), | ||
548 | }; | ||
549 | |||
550 | struct platform_device tegra_i2s_device2 = { | ||
551 | .name = "tegra-i2s", | ||
552 | .id = 1, | ||
553 | .resource = i2s_resource2, | ||
554 | .num_resources = ARRAY_SIZE(i2s_resource2), | ||
555 | }; | ||
556 | |||
557 | static struct resource tegra_das_resources[] = { | ||
558 | [0] = { | ||
559 | .start = TEGRA_APB_MISC_DAS_BASE, | ||
560 | .end = TEGRA_APB_MISC_DAS_BASE + TEGRA_APB_MISC_DAS_SIZE - 1, | ||
561 | .flags = IORESOURCE_MEM, | ||
562 | }, | ||
563 | }; | ||
564 | |||
565 | struct platform_device tegra_das_device = { | ||
566 | .name = "tegra-das", | ||
567 | .id = -1, | ||
568 | .num_resources = ARRAY_SIZE(tegra_das_resources), | ||
569 | .resource = tegra_das_resources, | ||
570 | }; | ||
571 | |||
572 | struct platform_device tegra_pcm_device = { | ||
573 | .name = "tegra-pcm-audio", | ||
574 | .id = -1, | ||
575 | }; | ||
diff --git a/arch/arm/mach-tegra/devices.h b/arch/arm/mach-tegra/devices.h index 888810c37ee9..4a7dc0a097d6 100644 --- a/arch/arm/mach-tegra/devices.h +++ b/arch/arm/mach-tegra/devices.h | |||
@@ -42,5 +42,9 @@ extern struct platform_device tegra_uartc_device; | |||
42 | extern struct platform_device tegra_uartd_device; | 42 | extern struct platform_device tegra_uartd_device; |
43 | extern struct platform_device tegra_uarte_device; | 43 | extern struct platform_device tegra_uarte_device; |
44 | extern struct platform_device tegra_pmu_device; | 44 | extern struct platform_device tegra_pmu_device; |
45 | extern struct platform_device tegra_i2s_device1; | ||
46 | extern struct platform_device tegra_i2s_device2; | ||
47 | extern struct platform_device tegra_das_device; | ||
48 | extern struct platform_device tegra_pcm_device; | ||
45 | 49 | ||
46 | #endif | 50 | #endif |
diff --git a/arch/arm/mach-tegra/include/mach/iomap.h b/arch/arm/mach-tegra/include/mach/iomap.h index 691cdabd69cf..19dec3ac0854 100644 --- a/arch/arm/mach-tegra/include/mach/iomap.h +++ b/arch/arm/mach-tegra/include/mach/iomap.h | |||
@@ -122,6 +122,9 @@ | |||
122 | #define TEGRA_APB_MISC_BASE 0x70000000 | 122 | #define TEGRA_APB_MISC_BASE 0x70000000 |
123 | #define TEGRA_APB_MISC_SIZE SZ_4K | 123 | #define TEGRA_APB_MISC_SIZE SZ_4K |
124 | 124 | ||
125 | #define TEGRA_APB_MISC_DAS_BASE 0x70000c00 | ||
126 | #define TEGRA_APB_MISC_DAS_SIZE SZ_128 | ||
127 | |||
125 | #define TEGRA_AC97_BASE 0x70002000 | 128 | #define TEGRA_AC97_BASE 0x70002000 |
126 | #define TEGRA_AC97_SIZE SZ_512 | 129 | #define TEGRA_AC97_SIZE SZ_512 |
127 | 130 | ||