aboutsummaryrefslogtreecommitdiffstats
path: root/arch/arm/mach-tegra
diff options
context:
space:
mode:
authorStephen Warren <swarren@nvidia.com>2011-08-08 16:35:14 -0400
committerOlof Johansson <olof@lixom.net>2011-08-09 15:07:32 -0400
commita697e694aeb82f2643825c45dc0214666172c540 (patch)
tree77af9b22d7e0ab638690a8624ef340b045d9f30e /arch/arm/mach-tegra
parentdd58bdbceb087238bead08e05226c0cef20aab4d (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.c5
-rw-r--r--arch/arm/mach-tegra/board-seaboard.c51
-rw-r--r--arch/arm/mach-tegra/board-seaboard.h12
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
172void __init seaboard_pinmux_init(void) 173void __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
127static 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
135static 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
120static struct platform_device *seaboard_devices[] __initdata = { 143static 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
129static struct i2c_board_info __initdata isl29018_device = { 156static 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
165static 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
179static 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
138static void __init seaboard_i2c_init(void) 185static 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
39void seaboard_pinmux_init(void); 43void seaboard_pinmux_init(void);
40 44