[alsa-devel] [PATCHv2 1/7] OMAP4: PMIC: Add support for twl6030 codec
In order to have TWL6030 CODEC driver as a platform driver, codec data should be passed through twl_platform_data structure.
For twl6030 audio codec, the following data is required:
- audpwron_gpio: gpio line used to power-up/down the codec. A low-to-high transition powers codec up. Setting audpwron_gpio to a negative value means that codec will use manual power sequence instead of automatic sequence - naudint_irq: irq line for audio interrupt. twl6030 drives NAUDINT line to low when an interrupt (codec ready, plug insertion/removal, etc) is detected
Signed-off-by: Misael Lopez Cruz x0052729@ti.com --- drivers/mfd/twl-core.c | 15 +++++++++++++++ include/linux/i2c/twl.h | 11 +++++++++++ 2 files changed, 26 insertions(+), 0 deletions(-)
diff --git a/drivers/mfd/twl-core.c b/drivers/mfd/twl-core.c index af4cf47..e9d1ff1 100644 --- a/drivers/mfd/twl-core.c +++ b/drivers/mfd/twl-core.c @@ -108,6 +108,12 @@ #define twl_has_mmc() false #endif
+#if defined(CONFIG_SND_SOC_TWL6030) +#define twl_has_codec() true +#else +#define twl_has_codec() false +#endif + #if defined(CONFIG_TWL4030_USB) || defined(CONFIG_TWL4030_USB_MODULE) #define twl_has_usb() true #else @@ -190,6 +196,7 @@ #define BCI_SUB_CHIP_ID SUB_CHIP_ID1 #define GPIO_SUB_CHIP_ID 0 /* NOT SUPPORTED IN TWL6030 */ #define KEYPAD_SUB_CHIP_ID 0 /* ADDED FOR COMPILATION ONLY */ +#define CODEC_SUB_CHIP_ID SUB_CHIP_ID3
/* subchip/slave 0 0x48 - POWER */ #define TWL6030_BASEADD_RTC 0x0000 @@ -632,6 +639,14 @@ add_children(struct twl_platform_data *pdata, unsigned long features) if (IS_ERR(child)) return PTR_ERR(child); } + + if (twl_has_codec() && pdata->codec) { + child = add_child(CODEC_SUB_CHIP_ID, "twl6030_codec", + pdata->codec, sizeof(*pdata->codec), false, + 0, 0); + if (IS_ERR(child)) + return PTR_ERR(child); + } #endif
if (twl_has_usb() && pdata->usb) { diff --git a/include/linux/i2c/twl.h b/include/linux/i2c/twl.h index b687a8b..d8a8823 100644 --- a/include/linux/i2c/twl.h +++ b/include/linux/i2c/twl.h @@ -472,6 +472,16 @@ struct twl_usb_data { enum twl_usb_mode usb_mode; };
+struct snd_soc_codec; + +struct twl_codec_data { + struct snd_soc_codec *codec; + + /* twl6030 */ + int audpwron_gpio; /* audio power-on gpio */ + int naudint_irq; /* audio interrupt */ +}; + struct twl_platform_data { unsigned irq_base, irq_end; struct twl_bci_platform_data *bci; @@ -479,6 +489,7 @@ struct twl_platform_data { struct twl_madc_platform_data *madc; struct twl_keypad_data *keypad; struct twl_usb_data *usb; + struct twl_codec_data *codec;
/* LDO regulators common to TWL4030/TWL6030 */ struct regulator_init_data *vdac;
On Fri, Sep 25, 2009 at 09:02:32PM -0500, Lopez Cruz, Misael wrote:
+#if defined(CONFIG_SND_SOC_TWL6030) +#define twl_has_codec() true +#else +#define twl_has_codec() false +#endif
This ifdef won't match if the CODEC driver is modular.
- if (twl_has_codec() && pdata->codec) {
child = add_child(CODEC_SUB_CHIP_ID, "twl6030_codec",
pdata->codec, sizeof(*pdata->codec), false,
0, 0);
if (IS_ERR(child))
return PTR_ERR(child);
- }
I'd be inclined to print a warning here if no platform data is supplied, or have the CODEC handle missing platform data to make it easier for people to diagnose any problems with instantiating the device.
participants (2)
-
Lopez Cruz, Misael
-
Mark Brown