Message ID | 1310594272-8229-1-git-send-email-swarren@nvidia.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On Wed, Jul 13, 2011 at 2:57 PM, Stephen Warren <swarren@nvidia.com> wrote: > * 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> Colin, sounds like you're collecting board patches this merge window, so: Acked-by: Olof Johansson <olof@lixom.net> -Olof
Olof Johansson wrote at Wednesday, July 13, 2011 5:17 PM: > On Wed, Jul 13, 2011 at 2:57 PM, Stephen Warren <swarren@nvidia.com> wrote: > > * 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> > > Colin, sounds like you're collecting board patches this merge window, so: > > Acked-by: Olof Johansson <olof@lixom.net> Colin, Do you want me to ask Arnd to pick these patches up directly, or do you want to apply them to the Tegra for-next tree, and have Arnd pull them? Thanks.
On Thu, Jul 21, 2011 at 8:37 AM, Stephen Warren <swarren@nvidia.com> wrote: > Olof Johansson wrote at Wednesday, July 13, 2011 5:17 PM: >> On Wed, Jul 13, 2011 at 2:57 PM, Stephen Warren <swarren@nvidia.com> wrote: >> > * 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> >> >> Colin, sounds like you're collecting board patches this merge window, so: >> >> Acked-by: Olof Johansson <olof@lixom.net> > > Colin, > > Do you want me to ask Arnd to pick these patches up directly, or do you > want to apply them to the Tegra for-next tree, and have Arnd pull them? Normally I would want them to go through me so I have a chance to deal with conflicts before it hits the arm-soc tree, but since Arnd has already taken some patches for this release cycle, they might as well go directly to him.
Colin Cross wrote at Thursday, July 21, 2011 12:48 PM: > On Thu, Jul 21, 2011 at 8:37 AM, Stephen Warren <swarren@nvidia.com> wrote: ... > > Colin, > > > > Do you want me to ask Arnd to pick these patches up directly, or do you > > want to apply them to the Tegra for-next tree, and have Arnd pull them? > > Normally I would want them to go through me so I have a chance to deal > with conflicts before it hits the arm-soc tree, but since Arnd has > already taken some patches for this release cycle, they might as well > go directly to him. Arnd, Per Colin's note above, can you please pick up the patches below into arm-soc.git. Let me know if you need me to repost them so you have a good copy. These are probably appropriate for your tegra/devel branch, although they're actually based on a merge of linux-next and Tegra's for-next from a week ago. Both Acked-by Olof already: [PATCH 1/2] ARM: Tegra: Seaboard board updates for audio http://www.spinics.net/lists/arm-kernel/msg133180.html [PATCH 2/2] ARM: Tegra: Seaboard: Add USB devices http://www.spinics.net/lists/arm-kernel/msg133181.html Not yet Acked-by anyone (Colin, Olof, could you please oblige; thanks): [PATCH 2/2] ARM: Tegra: Harmony: Add USB device http://www.spinics.net/lists/arm-kernel/msg133175.html (don't pick up patch 1 of this series; there's discussion on how to handle that better) Thanks very much!
On Thu, Jul 21, 2011 at 12:57 PM, Stephen Warren <swarren@nvidia.com> wrote: > Colin Cross wrote at Thursday, July 21, 2011 12:48 PM: >> On Thu, Jul 21, 2011 at 8:37 AM, Stephen Warren <swarren@nvidia.com> wrote: > ... >> > Colin, >> > >> > Do you want me to ask Arnd to pick these patches up directly, or do you >> > want to apply them to the Tegra for-next tree, and have Arnd pull them? >> >> Normally I would want them to go through me so I have a chance to deal >> with conflicts before it hits the arm-soc tree, but since Arnd has >> already taken some patches for this release cycle, they might as well >> go directly to him. > > Arnd, > > Per Colin's note above, can you please pick up the patches below into > arm-soc.git. Let me know if you need me to repost them so you have a > good copy. These are probably appropriate for your tegra/devel branch, > although they're actually based on a merge of linux-next and Tegra's > for-next from a week ago. > > Both Acked-by Olof already: > > [PATCH 1/2] ARM: Tegra: Seaboard board updates for audio > http://www.spinics.net/lists/arm-kernel/msg133180.html > > [PATCH 2/2] ARM: Tegra: Seaboard: Add USB devices > http://www.spinics.net/lists/arm-kernel/msg133181.html > > Not yet Acked-by anyone (Colin, Olof, could you please oblige; thanks): > > [PATCH 2/2] ARM: Tegra: Harmony: Add USB device > http://www.spinics.net/lists/arm-kernel/msg133175.html > (don't pick up patch 1 of this series; there's discussion on how to handle > that better) I didn't see a need to ack a patch that had my earlier S-o-B on, but feel free to add one, Arnd. -Olof
diff --git a/arch/arm/mach-tegra/board-seaboard-pinmux.c b/arch/arm/mach-tegra/board-seaboard-pinmux.c index 0bda495..e693246 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[] = { {TEGRA_PINGROUP_CRTP, TEGRA_MUX_CRT, TEGRA_PUPD_PULL_UP, TEGRA_TRI_TRISTATE}, {TEGRA_PINGROUP_CSUS, TEGRA_MUX_VI_SENSOR_CLK, TEGRA_PUPD_NORMAL, TEGRA_TRI_TRISTATE}, {TEGRA_PINGROUP_DAP1, TEGRA_MUX_DAP1, TEGRA_PUPD_NORMAL, TEGRA_TRI_NORMAL}, - {TEGRA_PINGROUP_DAP2, TEGRA_MUX_DAP2, TEGRA_PUPD_NORMAL, TEGRA_TRI_TRISTATE}, + {TEGRA_PINGROUP_DAP2, TEGRA_MUX_DAP2, TEGRA_PUPD_NORMAL, TEGRA_TRI_NORMAL}, {TEGRA_PINGROUP_DAP3, TEGRA_MUX_DAP3, TEGRA_PUPD_NORMAL, TEGRA_TRI_TRISTATE}, {TEGRA_PINGROUP_DAP4, TEGRA_MUX_DAP4, TEGRA_PUPD_NORMAL, TEGRA_TRI_NORMAL}, {TEGRA_PINGROUP_DDC, TEGRA_MUX_RSVD2, TEGRA_PUPD_NORMAL, TEGRA_TRI_TRISTATE}, @@ -133,7 +133,7 @@ static __initdata struct tegra_pingroup_config seaboard_pinmux[] = { {TEGRA_PINGROUP_SPDO, TEGRA_MUX_RSVD2, TEGRA_PUPD_NORMAL, TEGRA_TRI_NORMAL}, {TEGRA_PINGROUP_SPIA, TEGRA_MUX_GMI, TEGRA_PUPD_PULL_UP, TEGRA_TRI_TRISTATE}, {TEGRA_PINGROUP_SPIB, TEGRA_MUX_GMI, TEGRA_PUPD_NORMAL, TEGRA_TRI_TRISTATE}, - {TEGRA_PINGROUP_SPIC, TEGRA_MUX_GMI, TEGRA_PUPD_NORMAL, TEGRA_TRI_TRISTATE}, + {TEGRA_PINGROUP_SPIC, TEGRA_MUX_GMI, TEGRA_PUPD_PULL_UP, TEGRA_TRI_NORMAL}, {TEGRA_PINGROUP_SPID, TEGRA_MUX_SPI1, TEGRA_PUPD_NORMAL, TEGRA_TRI_TRISTATE}, {TEGRA_PINGROUP_SPIE, TEGRA_MUX_SPI1, TEGRA_PUPD_NORMAL, TEGRA_TRI_TRISTATE}, {TEGRA_PINGROUP_SPIF, TEGRA_MUX_SPI1, TEGRA_PUPD_PULL_DOWN, TEGRA_TRI_TRISTATE}, @@ -171,6 +171,23 @@ static struct tegra_gpio_table gpio_table[] = { void __init seaboard_pinmux_init(void) { + /* + * PINGROUP_SPIC contains two pins: + * + PX2, DISABLE_CHRGR (output) + * + PX3, WM8903 codec IRQ (input) + * + * The pinmux module can only configure TRISTATE vs. NORMAL on a + * per-group rather than per-pin basis. The group must be NORMAL + * since at least one pin is an output. However, we must ensure that + * the WM8903 IRQ is never driven, since the WM8903 itself is driving + * it, and we don't want multiple drivers. To ensure this, configure + * PX3 as a GPIO here, and set is as an input, before the pinmux table + * is written, which is when the pins will be un-tristated. + */ + tegra_gpio_enable(TEGRA_GPIO_CDC_IRQ); + gpio_request(TEGRA_GPIO_CDC_IRQ, "wm8903"); + gpio_direction_input(TEGRA_GPIO_CDC_IRQ); + tegra_pinmux_config_table(seaboard_pinmux, ARRAY_SIZE(seaboard_pinmux)); tegra_drive_pinmux_config_table(seaboard_drive_pinmux, diff --git a/arch/arm/mach-tegra/board-seaboard.c b/arch/arm/mach-tegra/board-seaboard.c index 56cbabf..07cd8e4 100644 --- a/arch/arm/mach-tegra/board-seaboard.c +++ b/arch/arm/mach-tegra/board-seaboard.c @@ -25,9 +25,12 @@ #include <linux/gpio.h> #include <linux/gpio_keys.h> +#include <sound/wm8903.h> + #include <mach/iomap.h> #include <mach/irqs.h> #include <mach/sdhci.h> +#include <mach/tegra_wm8903_pdata.h> #include <asm/mach-types.h> #include <asm/mach/arch.h> @@ -62,6 +65,10 @@ static __initdata struct tegra_clk_init_table seaboard_clk_init_table[] = { /* name parent rate enabled */ { "uartb", "pll_p", 216000000, true}, { "uartd", "pll_p", 216000000, true}, + { "pll_a", "pll_p_out1", 56448000, true }, + { "pll_a_out0", "pll_a", 11289600, true }, + { "cdev1", NULL, 0, true }, + { "i2s1", "pll_a_out0", 11289600, false}, { NULL, NULL, 0, 0}, }; @@ -117,6 +124,22 @@ static struct tegra_sdhci_platform_data sdhci_pdata4 = { .is_8bit = 1, }; +static struct tegra_wm8903_platform_data seaboard_audio_pdata = { + .gpio_spkr_en = TEGRA_GPIO_SPKR_EN, + .gpio_hp_det = TEGRA_GPIO_HP_DET, + .gpio_hp_mute = -1, + .gpio_int_mic_en = -1, + .gpio_ext_mic_en = -1, +}; + +static struct platform_device seaboard_audio_device = { + .name = "tegra-snd-wm8903", + .id = 0, + .dev = { + .platform_data = &seaboard_audio_pdata, + }, +}; + static struct platform_device *seaboard_devices[] __initdata = { &debug_uart, &tegra_pmu_device, @@ -124,6 +147,10 @@ static struct platform_device *seaboard_devices[] __initdata = { &tegra_sdhci_device3, &tegra_sdhci_device1, &seaboard_gpio_keys_device, + &tegra_i2s_device1, + &tegra_das_device, + &tegra_pcm_device, + &seaboard_audio_device, }; static struct i2c_board_info __initdata isl29018_device = { @@ -135,12 +162,33 @@ static struct i2c_board_info __initdata adt7461_device = { I2C_BOARD_INFO("adt7461", 0x4c), }; +static struct wm8903_platform_data wm8903_pdata = { + .irq_active_low = 0, + .micdet_cfg = 0, + .micdet_delay = 100, + .gpio_base = SEABOARD_GPIO_WM8903(0), + .gpio_cfg = { + WM8903_GPIO_NO_CONFIG, + WM8903_GPIO_NO_CONFIG, + 0, + WM8903_GPIO_NO_CONFIG, + WM8903_GPIO_NO_CONFIG, + }, +}; + +static struct i2c_board_info __initdata wm8903_device = { + I2C_BOARD_INFO("wm8903", 0x1a), + .platform_data = &wm8903_pdata, + .irq = TEGRA_GPIO_TO_IRQ(TEGRA_GPIO_CDC_IRQ), +}; + static void __init seaboard_i2c_init(void) { gpio_request(TEGRA_GPIO_ISL29018_IRQ, "isl29018"); gpio_direction_input(TEGRA_GPIO_ISL29018_IRQ); i2c_register_board_info(0, &isl29018_device, 1); + i2c_register_board_info(0, &wm8903_device, 1); i2c_register_board_info(3, &adt7461_device, 1); @@ -182,6 +230,9 @@ static void __init tegra_kaen_init(void) debug_uart_platform_data[0].mapbase = TEGRA_UARTB_BASE; debug_uart_platform_data[0].irq = INT_UARTB; + seaboard_audio_pdata.gpio_hp_mute = TEGRA_GPIO_KAEN_HP_MUTE; + tegra_gpio_enable(TEGRA_GPIO_KAEN_HP_MUTE); + seaboard_common_init(); seaboard_i2c_init(); diff --git a/arch/arm/mach-tegra/board-seaboard.h b/arch/arm/mach-tegra/board-seaboard.h index d8415e1..d06c334 100644 --- a/arch/arm/mach-tegra/board-seaboard.h +++ b/arch/arm/mach-tegra/board-seaboard.h @@ -17,6 +17,9 @@ #ifndef _MACH_TEGRA_BOARD_SEABOARD_H #define _MACH_TEGRA_BOARD_SEABOARD_H +#define SEABOARD_GPIO_TPS6586X(_x_) (TEGRA_NR_GPIOS + (_x_)) +#define SEABOARD_GPIO_WM8903(_x_) (SEABOARD_GPIO_TPS6586X(4) + (_x_)) + #define TEGRA_GPIO_SD2_CD TEGRA_GPIO_PI5 #define TEGRA_GPIO_SD2_WP TEGRA_GPIO_PH1 #define TEGRA_GPIO_SD2_POWER TEGRA_GPIO_PI6 @@ -31,10 +34,11 @@ #define TEGRA_GPIO_MAGNETOMETER TEGRA_GPIO_PN5 #define TEGRA_GPIO_ISL29018_IRQ TEGRA_GPIO_PZ2 #define TEGRA_GPIO_AC_ONLINE TEGRA_GPIO_PV3 - -#define TPS_GPIO_BASE TEGRA_NR_GPIOS - -#define TPS_GPIO_WWAN_PWR (TPS_GPIO_BASE + 2) +#define TEGRA_GPIO_WWAN_PWR SEABOARD_GPIO_TPS6586X(2) +#define TEGRA_GPIO_CDC_IRQ TEGRA_GPIO_PX3 +#define TEGRA_GPIO_SPKR_EN SEABOARD_GPIO_WM8903(2) +#define TEGRA_GPIO_HP_DET TEGRA_GPIO_PX1 +#define TEGRA_GPIO_KAEN_HP_MUTE TEGRA_GPIO_PA5 void seaboard_pinmux_init(void);
* 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> --- arch/arm/mach-tegra/board-seaboard-pinmux.c | 21 ++++++++++- arch/arm/mach-tegra/board-seaboard.c | 51 +++++++++++++++++++++++++++ arch/arm/mach-tegra/board-seaboard.h | 12 ++++-- 3 files changed, 78 insertions(+), 6 deletions(-)