diff options
author | Stephen Warren <swarren@nvidia.com> | 2011-08-08 16:35:14 -0400 |
---|---|---|
committer | Olof Johansson <olof@lixom.net> | 2011-08-09 15:07:32 -0400 |
commit | a697e694aeb82f2643825c45dc0214666172c540 (patch) | |
tree | 77af9b22d7e0ab638690a8624ef340b045d9f30e /arch/arm/mach-tegra | |
parent | dd58bdbceb087238bead08e05226c0cef20aab4d (diff) |
ARM: Tegra: Seaboard board updates for audio
* Initialize clock tree for audio
* Add GPIO base definitions
* Add audio GPIO definitions
* Define platform data for WM8903 and ASoC machine driver
* Add special case for Kaen to handle HP_MUTE GPIO
* Register platform devices for audio
* Update pinmux to cater for new GPIOs used for audio
Signed-off-by: Stephen Warren <swarren@nvidia.com>
Signed-off-by: Olof Johansson <olof@lixom.net>
Diffstat (limited to 'arch/arm/mach-tegra')
-rw-r--r-- | arch/arm/mach-tegra/board-seaboard-pinmux.c | 5 | ||||
-rw-r--r-- | arch/arm/mach-tegra/board-seaboard.c | 51 | ||||
-rw-r--r-- | arch/arm/mach-tegra/board-seaboard.h | 12 |
3 files changed, 62 insertions, 6 deletions
diff --git a/arch/arm/mach-tegra/board-seaboard-pinmux.c b/arch/arm/mach-tegra/board-seaboard-pinmux.c index 0bda495e9742..78797507e301 100644 --- a/arch/arm/mach-tegra/board-seaboard-pinmux.c +++ b/arch/arm/mach-tegra/board-seaboard-pinmux.c | |||
@@ -49,7 +49,7 @@ static __initdata struct tegra_pingroup_config seaboard_pinmux[] = { | |||
49 | {TEGRA_PINGROUP_CRTP, TEGRA_MUX_CRT, TEGRA_PUPD_PULL_UP, TEGRA_TRI_TRISTATE}, | 49 | {TEGRA_PINGROUP_CRTP, TEGRA_MUX_CRT, TEGRA_PUPD_PULL_UP, TEGRA_TRI_TRISTATE}, |
50 | {TEGRA_PINGROUP_CSUS, TEGRA_MUX_VI_SENSOR_CLK, TEGRA_PUPD_NORMAL, TEGRA_TRI_TRISTATE}, | 50 | {TEGRA_PINGROUP_CSUS, TEGRA_MUX_VI_SENSOR_CLK, TEGRA_PUPD_NORMAL, TEGRA_TRI_TRISTATE}, |
51 | {TEGRA_PINGROUP_DAP1, TEGRA_MUX_DAP1, TEGRA_PUPD_NORMAL, TEGRA_TRI_NORMAL}, | 51 | {TEGRA_PINGROUP_DAP1, TEGRA_MUX_DAP1, TEGRA_PUPD_NORMAL, TEGRA_TRI_NORMAL}, |
52 | {TEGRA_PINGROUP_DAP2, TEGRA_MUX_DAP2, TEGRA_PUPD_NORMAL, TEGRA_TRI_TRISTATE}, | 52 | {TEGRA_PINGROUP_DAP2, TEGRA_MUX_DAP2, TEGRA_PUPD_NORMAL, TEGRA_TRI_NORMAL}, |
53 | {TEGRA_PINGROUP_DAP3, TEGRA_MUX_DAP3, TEGRA_PUPD_NORMAL, TEGRA_TRI_TRISTATE}, | 53 | {TEGRA_PINGROUP_DAP3, TEGRA_MUX_DAP3, TEGRA_PUPD_NORMAL, TEGRA_TRI_TRISTATE}, |
54 | {TEGRA_PINGROUP_DAP4, TEGRA_MUX_DAP4, TEGRA_PUPD_NORMAL, TEGRA_TRI_NORMAL}, | 54 | {TEGRA_PINGROUP_DAP4, TEGRA_MUX_DAP4, TEGRA_PUPD_NORMAL, TEGRA_TRI_NORMAL}, |
55 | {TEGRA_PINGROUP_DDC, TEGRA_MUX_RSVD2, TEGRA_PUPD_NORMAL, TEGRA_TRI_TRISTATE}, | 55 | {TEGRA_PINGROUP_DDC, TEGRA_MUX_RSVD2, TEGRA_PUPD_NORMAL, TEGRA_TRI_TRISTATE}, |
@@ -133,7 +133,7 @@ static __initdata struct tegra_pingroup_config seaboard_pinmux[] = { | |||
133 | {TEGRA_PINGROUP_SPDO, TEGRA_MUX_RSVD2, TEGRA_PUPD_NORMAL, TEGRA_TRI_NORMAL}, | 133 | {TEGRA_PINGROUP_SPDO, TEGRA_MUX_RSVD2, TEGRA_PUPD_NORMAL, TEGRA_TRI_NORMAL}, |
134 | {TEGRA_PINGROUP_SPIA, TEGRA_MUX_GMI, TEGRA_PUPD_PULL_UP, TEGRA_TRI_TRISTATE}, | 134 | {TEGRA_PINGROUP_SPIA, TEGRA_MUX_GMI, TEGRA_PUPD_PULL_UP, TEGRA_TRI_TRISTATE}, |
135 | {TEGRA_PINGROUP_SPIB, TEGRA_MUX_GMI, TEGRA_PUPD_NORMAL, TEGRA_TRI_TRISTATE}, | 135 | {TEGRA_PINGROUP_SPIB, TEGRA_MUX_GMI, TEGRA_PUPD_NORMAL, TEGRA_TRI_TRISTATE}, |
136 | {TEGRA_PINGROUP_SPIC, TEGRA_MUX_GMI, TEGRA_PUPD_NORMAL, TEGRA_TRI_TRISTATE}, | 136 | {TEGRA_PINGROUP_SPIC, TEGRA_MUX_GMI, TEGRA_PUPD_PULL_UP, TEGRA_TRI_NORMAL}, |
137 | {TEGRA_PINGROUP_SPID, TEGRA_MUX_SPI1, TEGRA_PUPD_NORMAL, TEGRA_TRI_TRISTATE}, | 137 | {TEGRA_PINGROUP_SPID, TEGRA_MUX_SPI1, TEGRA_PUPD_NORMAL, TEGRA_TRI_TRISTATE}, |
138 | {TEGRA_PINGROUP_SPIE, TEGRA_MUX_SPI1, TEGRA_PUPD_NORMAL, TEGRA_TRI_TRISTATE}, | 138 | {TEGRA_PINGROUP_SPIE, TEGRA_MUX_SPI1, TEGRA_PUPD_NORMAL, TEGRA_TRI_TRISTATE}, |
139 | {TEGRA_PINGROUP_SPIF, TEGRA_MUX_SPI1, TEGRA_PUPD_PULL_DOWN, TEGRA_TRI_TRISTATE}, | 139 | {TEGRA_PINGROUP_SPIF, TEGRA_MUX_SPI1, TEGRA_PUPD_PULL_DOWN, TEGRA_TRI_TRISTATE}, |
@@ -167,6 +167,7 @@ static struct tegra_gpio_table gpio_table[] = { | |||
167 | { .gpio = TEGRA_GPIO_LIDSWITCH, .enable = true }, | 167 | { .gpio = TEGRA_GPIO_LIDSWITCH, .enable = true }, |
168 | { .gpio = TEGRA_GPIO_POWERKEY, .enable = true }, | 168 | { .gpio = TEGRA_GPIO_POWERKEY, .enable = true }, |
169 | { .gpio = TEGRA_GPIO_ISL29018_IRQ, .enable = true }, | 169 | { .gpio = TEGRA_GPIO_ISL29018_IRQ, .enable = true }, |
170 | { .gpio = TEGRA_GPIO_CDC_IRQ, .enable = true }, | ||
170 | }; | 171 | }; |
171 | 172 | ||
172 | void __init seaboard_pinmux_init(void) | 173 | 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 56cbabf6aa68..07cd8e4885c9 100644 --- a/arch/arm/mach-tegra/board-seaboard.c +++ b/arch/arm/mach-tegra/board-seaboard.c | |||
@@ -25,9 +25,12 @@ | |||
25 | #include <linux/gpio.h> | 25 | #include <linux/gpio.h> |
26 | #include <linux/gpio_keys.h> | 26 | #include <linux/gpio_keys.h> |
27 | 27 | ||
28 | #include <sound/wm8903.h> | ||
29 | |||
28 | #include <mach/iomap.h> | 30 | #include <mach/iomap.h> |
29 | #include <mach/irqs.h> | 31 | #include <mach/irqs.h> |
30 | #include <mach/sdhci.h> | 32 | #include <mach/sdhci.h> |
33 | #include <mach/tegra_wm8903_pdata.h> | ||
31 | 34 | ||
32 | #include <asm/mach-types.h> | 35 | #include <asm/mach-types.h> |
33 | #include <asm/mach/arch.h> | 36 | #include <asm/mach/arch.h> |
@@ -62,6 +65,10 @@ static __initdata struct tegra_clk_init_table seaboard_clk_init_table[] = { | |||
62 | /* name parent rate enabled */ | 65 | /* name parent rate enabled */ |
63 | { "uartb", "pll_p", 216000000, true}, | 66 | { "uartb", "pll_p", 216000000, true}, |
64 | { "uartd", "pll_p", 216000000, true}, | 67 | { "uartd", "pll_p", 216000000, true}, |
68 | { "pll_a", "pll_p_out1", 56448000, true }, | ||
69 | { "pll_a_out0", "pll_a", 11289600, true }, | ||
70 | { "cdev1", NULL, 0, true }, | ||
71 | { "i2s1", "pll_a_out0", 11289600, false}, | ||
65 | { NULL, NULL, 0, 0}, | 72 | { NULL, NULL, 0, 0}, |
66 | }; | 73 | }; |
67 | 74 | ||
@@ -117,6 +124,22 @@ static struct tegra_sdhci_platform_data sdhci_pdata4 = { | |||
117 | .is_8bit = 1, | 124 | .is_8bit = 1, |
118 | }; | 125 | }; |
119 | 126 | ||
127 | static struct tegra_wm8903_platform_data seaboard_audio_pdata = { | ||
128 | .gpio_spkr_en = TEGRA_GPIO_SPKR_EN, | ||
129 | .gpio_hp_det = TEGRA_GPIO_HP_DET, | ||
130 | .gpio_hp_mute = -1, | ||
131 | .gpio_int_mic_en = -1, | ||
132 | .gpio_ext_mic_en = -1, | ||
133 | }; | ||
134 | |||
135 | static struct platform_device seaboard_audio_device = { | ||
136 | .name = "tegra-snd-wm8903", | ||
137 | .id = 0, | ||
138 | .dev = { | ||
139 | .platform_data = &seaboard_audio_pdata, | ||
140 | }, | ||
141 | }; | ||
142 | |||
120 | static struct platform_device *seaboard_devices[] __initdata = { | 143 | static struct platform_device *seaboard_devices[] __initdata = { |
121 | &debug_uart, | 144 | &debug_uart, |
122 | &tegra_pmu_device, | 145 | &tegra_pmu_device, |
@@ -124,6 +147,10 @@ static struct platform_device *seaboard_devices[] __initdata = { | |||
124 | &tegra_sdhci_device3, | 147 | &tegra_sdhci_device3, |
125 | &tegra_sdhci_device1, | 148 | &tegra_sdhci_device1, |
126 | &seaboard_gpio_keys_device, | 149 | &seaboard_gpio_keys_device, |
150 | &tegra_i2s_device1, | ||
151 | &tegra_das_device, | ||
152 | &tegra_pcm_device, | ||
153 | &seaboard_audio_device, | ||
127 | }; | 154 | }; |
128 | 155 | ||
129 | static struct i2c_board_info __initdata isl29018_device = { | 156 | static struct i2c_board_info __initdata isl29018_device = { |
@@ -135,12 +162,33 @@ static struct i2c_board_info __initdata adt7461_device = { | |||
135 | I2C_BOARD_INFO("adt7461", 0x4c), | 162 | I2C_BOARD_INFO("adt7461", 0x4c), |
136 | }; | 163 | }; |
137 | 164 | ||
165 | static struct wm8903_platform_data wm8903_pdata = { | ||
166 | .irq_active_low = 0, | ||
167 | .micdet_cfg = 0, | ||
168 | .micdet_delay = 100, | ||
169 | .gpio_base = SEABOARD_GPIO_WM8903(0), | ||
170 | .gpio_cfg = { | ||
171 | WM8903_GPIO_NO_CONFIG, | ||
172 | WM8903_GPIO_NO_CONFIG, | ||
173 | 0, | ||
174 | WM8903_GPIO_NO_CONFIG, | ||
175 | WM8903_GPIO_NO_CONFIG, | ||
176 | }, | ||
177 | }; | ||
178 | |||
179 | static struct i2c_board_info __initdata wm8903_device = { | ||
180 | I2C_BOARD_INFO("wm8903", 0x1a), | ||
181 | .platform_data = &wm8903_pdata, | ||
182 | .irq = TEGRA_GPIO_TO_IRQ(TEGRA_GPIO_CDC_IRQ), | ||
183 | }; | ||
184 | |||
138 | static void __init seaboard_i2c_init(void) | 185 | static void __init seaboard_i2c_init(void) |
139 | { | 186 | { |
140 | gpio_request(TEGRA_GPIO_ISL29018_IRQ, "isl29018"); | 187 | gpio_request(TEGRA_GPIO_ISL29018_IRQ, "isl29018"); |
141 | gpio_direction_input(TEGRA_GPIO_ISL29018_IRQ); | 188 | gpio_direction_input(TEGRA_GPIO_ISL29018_IRQ); |
142 | 189 | ||
143 | i2c_register_board_info(0, &isl29018_device, 1); | 190 | i2c_register_board_info(0, &isl29018_device, 1); |
191 | i2c_register_board_info(0, &wm8903_device, 1); | ||
144 | 192 | ||
145 | i2c_register_board_info(3, &adt7461_device, 1); | 193 | i2c_register_board_info(3, &adt7461_device, 1); |
146 | 194 | ||
@@ -182,6 +230,9 @@ static void __init tegra_kaen_init(void) | |||
182 | debug_uart_platform_data[0].mapbase = TEGRA_UARTB_BASE; | 230 | debug_uart_platform_data[0].mapbase = TEGRA_UARTB_BASE; |
183 | debug_uart_platform_data[0].irq = INT_UARTB; | 231 | debug_uart_platform_data[0].irq = INT_UARTB; |
184 | 232 | ||
233 | seaboard_audio_pdata.gpio_hp_mute = TEGRA_GPIO_KAEN_HP_MUTE; | ||
234 | tegra_gpio_enable(TEGRA_GPIO_KAEN_HP_MUTE); | ||
235 | |||
185 | seaboard_common_init(); | 236 | seaboard_common_init(); |
186 | 237 | ||
187 | seaboard_i2c_init(); | 238 | seaboard_i2c_init(); |
diff --git a/arch/arm/mach-tegra/board-seaboard.h b/arch/arm/mach-tegra/board-seaboard.h index d8415e1a8434..d06c3342e2c4 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 SEABOARD_GPIO_TPS6586X(_x_) (TEGRA_NR_GPIOS + (_x_)) | ||
21 | #define SEABOARD_GPIO_WM8903(_x_) (SEABOARD_GPIO_TPS6586X(4) + (_x_)) | ||
22 | |||
20 | #define TEGRA_GPIO_SD2_CD TEGRA_GPIO_PI5 | 23 | #define TEGRA_GPIO_SD2_CD TEGRA_GPIO_PI5 |
21 | #define TEGRA_GPIO_SD2_WP TEGRA_GPIO_PH1 | 24 | #define TEGRA_GPIO_SD2_WP TEGRA_GPIO_PH1 |
22 | #define TEGRA_GPIO_SD2_POWER TEGRA_GPIO_PI6 | 25 | #define TEGRA_GPIO_SD2_POWER TEGRA_GPIO_PI6 |
@@ -31,10 +34,11 @@ | |||
31 | #define TEGRA_GPIO_MAGNETOMETER TEGRA_GPIO_PN5 | 34 | #define TEGRA_GPIO_MAGNETOMETER TEGRA_GPIO_PN5 |
32 | #define TEGRA_GPIO_ISL29018_IRQ TEGRA_GPIO_PZ2 | 35 | #define TEGRA_GPIO_ISL29018_IRQ TEGRA_GPIO_PZ2 |
33 | #define TEGRA_GPIO_AC_ONLINE TEGRA_GPIO_PV3 | 36 | #define TEGRA_GPIO_AC_ONLINE TEGRA_GPIO_PV3 |
34 | 37 | #define TEGRA_GPIO_WWAN_PWR SEABOARD_GPIO_TPS6586X(2) | |
35 | #define TPS_GPIO_BASE TEGRA_NR_GPIOS | 38 | #define TEGRA_GPIO_CDC_IRQ TEGRA_GPIO_PX3 |
36 | 39 | #define TEGRA_GPIO_SPKR_EN SEABOARD_GPIO_WM8903(2) | |
37 | #define TPS_GPIO_WWAN_PWR (TPS_GPIO_BASE + 2) | 40 | #define TEGRA_GPIO_HP_DET TEGRA_GPIO_PX1 |
41 | #define TEGRA_GPIO_KAEN_HP_MUTE TEGRA_GPIO_PA5 | ||
38 | 42 | ||
39 | void seaboard_pinmux_init(void); | 43 | void seaboard_pinmux_init(void); |
40 | 44 | ||