|
@@ -28,6 +28,7 @@
|
|
|
#include <linux/regulator/machine.h>
|
|
|
#include <linux/regulator/fixed.h>
|
|
|
#include <linux/wl12xx.h>
|
|
|
+#include <linux/platform_data/omap-abe-twl6040.h>
|
|
|
|
|
|
#include <mach/hardware.h>
|
|
|
#include <asm/hardware/gic.h>
|
|
@@ -90,9 +91,34 @@ static struct platform_device leds_gpio = {
|
|
|
},
|
|
|
};
|
|
|
|
|
|
+static struct omap_abe_twl6040_data panda_abe_audio_data = {
|
|
|
+ /* Audio out */
|
|
|
+ .has_hs = ABE_TWL6040_LEFT | ABE_TWL6040_RIGHT,
|
|
|
+ /* HandsFree through expasion connector */
|
|
|
+ .has_hf = ABE_TWL6040_LEFT | ABE_TWL6040_RIGHT,
|
|
|
+ /* PandaBoard: FM TX, PandaBoardES: can be connected to audio out */
|
|
|
+ .has_aux = ABE_TWL6040_LEFT | ABE_TWL6040_RIGHT,
|
|
|
+ /* PandaBoard: FM RX, PandaBoardES: audio in */
|
|
|
+ .has_afm = ABE_TWL6040_LEFT | ABE_TWL6040_RIGHT,
|
|
|
+ /* No jack detection. */
|
|
|
+ .jack_detection = 0,
|
|
|
+ /* MCLK input is 38.4MHz */
|
|
|
+ .mclk_freq = 38400000,
|
|
|
+
|
|
|
+};
|
|
|
+
|
|
|
+static struct platform_device panda_abe_audio = {
|
|
|
+ .name = "omap-abe-twl6040",
|
|
|
+ .id = -1,
|
|
|
+ .dev = {
|
|
|
+ .platform_data = &panda_abe_audio_data,
|
|
|
+ },
|
|
|
+};
|
|
|
+
|
|
|
static struct platform_device *panda_devices[] __initdata = {
|
|
|
&leds_gpio,
|
|
|
&wl1271_device,
|
|
|
+ &panda_abe_audio,
|
|
|
};
|
|
|
|
|
|
static 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)
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
+static struct twl4030_codec_data twl6040_codec = {
|
|
|
+ /* single-step ramp for headset and handsfree */
|
|
|
+ .hs_left_step = 0x0f,
|
|
|
+ .hs_right_step = 0x0f,
|
|
|
+ .hf_left_step = 0x1d,
|
|
|
+ .hf_right_step = 0x1d,
|
|
|
+};
|
|
|
+
|
|
|
+static struct twl4030_audio_data twl6040_audio = {
|
|
|
+ .codec = &twl6040_codec,
|
|
|
+ .audpwron_gpio = 127,
|
|
|
+ .naudint_irq = OMAP44XX_IRQ_SYS_2N,
|
|
|
+ .irq_base = TWL6040_CODEC_IRQ_BASE,
|
|
|
+};
|
|
|
+
|
|
|
/* Panda board uses the common PMIC configuration */
|
|
|
-static struct twl4030_platform_data omap4_panda_twldata;
|
|
|
+static struct twl4030_platform_data omap4_panda_twldata = {
|
|
|
+ .audio = &twl6040_audio,
|
|
|
+};
|
|
|
|
|
|
/*
|
|
|
* Display monitor features are burnt in their EEPROM as EDID data. The EEPROM
|
|
@@ -475,6 +518,20 @@ void omap4_panda_display_init(void)
|
|
|
omap_hdmi_init(0);
|
|
|
}
|
|
|
|
|
|
+static void omap4_panda_init_rev(void)
|
|
|
+{
|
|
|
+ if (cpu_is_omap4430()) {
|
|
|
+ /* PandaBoard 4430 */
|
|
|
+ /* ASoC audio configuration */
|
|
|
+ panda_abe_audio_data.card_name = "PandaBoard";
|
|
|
+ panda_abe_audio_data.has_hsmic = 1;
|
|
|
+ } else {
|
|
|
+ /* PandaBoard ES */
|
|
|
+ /* ASoC audio configuration */
|
|
|
+ panda_abe_audio_data.card_name = "PandaBoardES";
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
static void __init omap4_panda_init(void)
|
|
|
{
|
|
|
int package = OMAP_PACKAGE_CBS;
|
|
@@ -486,6 +543,7 @@ static void __init omap4_panda_init(void)
|
|
|
if (wl12xx_set_platform_data(&omap_panda_wlan_data))
|
|
|
pr_err("error setting wl12xx data\n");
|
|
|
|
|
|
+ omap4_panda_init_rev();
|
|
|
omap4_panda_i2c_init();
|
|
|
platform_add_devices(panda_devices, ARRAY_SIZE(panda_devices));
|
|
|
platform_device_register(&omap_vwlan_device);
|