aboutsummaryrefslogtreecommitdiffstats
path: root/arch/arm/mach-omap2/board-omap4panda.c
diff options
context:
space:
mode:
authorPeter Ujfalusi <peter.ujfalusi@ti.com>2011-12-08 04:15:45 -0500
committerPeter Ujfalusi <peter.ujfalusi@ti.com>2012-01-26 08:40:55 -0500
commit3c90c98a1ebbb08d95700ce8a3b7bce6286607bd (patch)
tree33a75cee342ef60254115cad8f23833439a619e1 /arch/arm/mach-omap2/board-omap4panda.c
parent62ba98ce4a74ef606e6a7f6c8541fc5e3127f944 (diff)
OMAP4: omap4panda: Enable audio support
PandaBoard has twl6040 codec for audio. Register the omap4-abe-twl6040 platform device. Add platform data to enable the twl6040 codec. Since there is a difference in audio between PandaBoard 4430 and PandaBoard ES (4460): Use different name for the sound card: "PandaBoard" for PandaBoard 4430 "PandaBoardES" for PandaBoard ES Signed-off-by: Peter Ujfalusi <peter.ujfalusi@ti.com> CC: Santosh Shilimkar <santosh.shilimkar@ti.com> CC: David Anders <x0132446@ti.com> Acked-by: Tony Lindgren <tony@atomide.com> Acked-by: Santosh Shilimkar <santosh.shilimkar@ti.com>
Diffstat (limited to 'arch/arm/mach-omap2/board-omap4panda.c')
-rw-r--r--arch/arm/mach-omap2/board-omap4panda.c60
1 files changed, 59 insertions, 1 deletions
diff --git a/arch/arm/mach-omap2/board-omap4panda.c b/arch/arm/mach-omap2/board-omap4panda.c
index 30ad40db2cf3..eada955014af 100644
--- a/arch/arm/mach-omap2/board-omap4panda.c
+++ b/arch/arm/mach-omap2/board-omap4panda.c
@@ -28,6 +28,7 @@
28#include <linux/regulator/machine.h> 28#include <linux/regulator/machine.h>
29#include <linux/regulator/fixed.h> 29#include <linux/regulator/fixed.h>
30#include <linux/wl12xx.h> 30#include <linux/wl12xx.h>
31#include <linux/platform_data/omap-abe-twl6040.h>
31 32
32#include <mach/hardware.h> 33#include <mach/hardware.h>
33#include <asm/hardware/gic.h> 34#include <asm/hardware/gic.h>
@@ -90,9 +91,34 @@ static struct platform_device leds_gpio = {
90 }, 91 },
91}; 92};
92 93
94static struct omap_abe_twl6040_data panda_abe_audio_data = {
95 /* Audio out */
96 .has_hs = ABE_TWL6040_LEFT | ABE_TWL6040_RIGHT,
97 /* HandsFree through expasion connector */
98 .has_hf = ABE_TWL6040_LEFT | ABE_TWL6040_RIGHT,
99 /* PandaBoard: FM TX, PandaBoardES: can be connected to audio out */
100 .has_aux = ABE_TWL6040_LEFT | ABE_TWL6040_RIGHT,
101 /* PandaBoard: FM RX, PandaBoardES: audio in */
102 .has_afm = ABE_TWL6040_LEFT | ABE_TWL6040_RIGHT,
103 /* No jack detection. */
104 .jack_detection = 0,
105 /* MCLK input is 38.4MHz */
106 .mclk_freq = 38400000,
107
108};
109
110static struct platform_device panda_abe_audio = {
111 .name = "omap-abe-twl6040",
112 .id = -1,
113 .dev = {
114 .platform_data = &panda_abe_audio_data,
115 },
116};
117
93static struct platform_device *panda_devices[] __initdata = { 118static struct platform_device *panda_devices[] __initdata = {
94 &leds_gpio, 119 &leds_gpio,
95 &wl1271_device, 120 &wl1271_device,
121 &panda_abe_audio,
96}; 122};
97 123
98static const struct usbhs_omap_board_data usbhs_bdata __initconst = { 124static const struct usbhs_omap_board_data usbhs_bdata __initconst = {
@@ -251,8 +277,25 @@ static int __init omap4_twl6030_hsmmc_init(struct omap2_hsmmc_info *controllers)
251 return 0; 277 return 0;
252} 278}
253 279
280static struct twl4030_codec_data twl6040_codec = {
281 /* single-step ramp for headset and handsfree */
282 .hs_left_step = 0x0f,
283 .hs_right_step = 0x0f,
284 .hf_left_step = 0x1d,
285 .hf_right_step = 0x1d,
286};
287
288static struct twl4030_audio_data twl6040_audio = {
289 .codec = &twl6040_codec,
290 .audpwron_gpio = 127,
291 .naudint_irq = OMAP44XX_IRQ_SYS_2N,
292 .irq_base = TWL6040_CODEC_IRQ_BASE,
293};
294
254/* Panda board uses the common PMIC configuration */ 295/* Panda board uses the common PMIC configuration */
255static struct twl4030_platform_data omap4_panda_twldata; 296static struct twl4030_platform_data omap4_panda_twldata = {
297 .audio = &twl6040_audio,
298};
256 299
257/* 300/*
258 * Display monitor features are burnt in their EEPROM as EDID data. The EEPROM 301 * Display monitor features are burnt in their EEPROM as EDID data. The EEPROM
@@ -475,6 +518,20 @@ void omap4_panda_display_init(void)
475 omap_hdmi_init(0); 518 omap_hdmi_init(0);
476} 519}
477 520
521static void omap4_panda_init_rev(void)
522{
523 if (cpu_is_omap4430()) {
524 /* PandaBoard 4430 */
525 /* ASoC audio configuration */
526 panda_abe_audio_data.card_name = "PandaBoard";
527 panda_abe_audio_data.has_hsmic = 1;
528 } else {
529 /* PandaBoard ES */
530 /* ASoC audio configuration */
531 panda_abe_audio_data.card_name = "PandaBoardES";
532 }
533}
534
478static void __init omap4_panda_init(void) 535static void __init omap4_panda_init(void)
479{ 536{
480 int package = OMAP_PACKAGE_CBS; 537 int package = OMAP_PACKAGE_CBS;
@@ -486,6 +543,7 @@ static void __init omap4_panda_init(void)
486 if (wl12xx_set_platform_data(&omap_panda_wlan_data)) 543 if (wl12xx_set_platform_data(&omap_panda_wlan_data))
487 pr_err("error setting wl12xx data\n"); 544 pr_err("error setting wl12xx data\n");
488 545
546 omap4_panda_init_rev();
489 omap4_panda_i2c_init(); 547 omap4_panda_i2c_init();
490 platform_add_devices(panda_devices, ARRAY_SIZE(panda_devices)); 548 platform_add_devices(panda_devices, ARRAY_SIZE(panda_devices));
491 platform_device_register(&omap_vwlan_device); 549 platform_device_register(&omap_vwlan_device);