diff mbox

[1/2] ARM: Tegra: Seaboard board updates for audio

Message ID 1310594272-8229-1-git-send-email-swarren@nvidia.com (mailing list archive)
State New, archived
Headers show

Commit Message

Stephen Warren July 13, 2011, 9:57 p.m. UTC
* 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(-)

Comments

Olof Johansson July 13, 2011, 11:17 p.m. UTC | #1
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
Stephen Warren July 21, 2011, 3:37 p.m. UTC | #2
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.
Colin Cross July 21, 2011, 6:48 p.m. UTC | #3
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.
Stephen Warren July 21, 2011, 7:57 p.m. UTC | #4
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!
Olof Johansson July 21, 2011, 8:07 p.m. UTC | #5
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 mbox

Patch

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);