> > #define twl_has_mmc() false > > #endif > > > > +#if defined(CONFIG_SND_SOC_TWL6030) || defined(CONFIG_SND_SOC_TWL6030_MODULE) || defined(CONFIG_SND_SOC_TWL4030) || defined(CONFIG_SND_SOC_TWL4030_MODULE) > > +#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 > > TWL4030 codec is under ID2 address group. To pick the sub chip id from structure twl_mapping twl6030_map or twl4030_map at Runtime. > > > > > /* 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()) { > > + 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); > > + } after [PATCH v3 0/4] TWL6030 patch series Will now become something like + if (twl_has_codec() && twl_class_is_6030()) { + sub_chip_id = twl_map[TWL_MODULE_AUDIO_VOICE].sid; + child = add_child(sub_chip_id, "twl6030_codec", + pdata->codec, sizeof(*pdata->codec), false, + 0, 0); + if (IS_ERR(child)) + return PTR_ERR(child); + } And similarly for 4030 code + if (twl_has_codec() && twl_class_is_4030()) { + sub_chip_id = twl_map[TWL_MODULE_AUDIO_VOICE].sid; + child = add_child(sub_chip_id, "twl4030_codec", + pdata->codec, sizeof(*pdata->codec), false, + 0, 0); + if (IS_ERR(child)) + return PTR_ERR(child); + } > > We are going to have the twl4030 as child as well. > > > #endif > > > > if (twl_has_usb() && pdata->usb) { > > diff --git a/include/linux/i2c/twl.h b/include/linux/i2c/twl.h > > index b687a8b..e76ca9b 100644 > > --- a/include/linux/i2c/twl.h > > +++ b/include/linux/i2c/twl.h > > @@ -472,6 +472,12 @@ struct twl_usb_data { > > enum twl_usb_mode usb_mode; > > }; > > > > +struct twl_codec_data { 4030 and 6030 codec common fields can be added here > > + /* twl6030 */ > > + int audpwron_gpio; /* audio power-on gpio */ > > + int naudint_irq; /* audio interrupt */ Here twl4030 specific fields can be added > > +}; > CONFIG_TWL6030_CORE and CONFIG_TWL4030_CORE is merged to CONFIG_TWL_CORE As two different build config was not encouraged. Now switch twl_class_is_6030() will be used to decide at runtime time to support for 6030 related drivers, Similarly twl_class_is_4030() for 4030 drivers > These are not applicable for the twl4030 codec, should we have different > twl_codec_data for twl6030 and twl4030 series? > Should I merge here the things which will be used for the twl4030 codec? > At the moment, I only have audio_mclk in my codec_data, but most probably the > HS > ramp related things will be also merged here in the future. > > > + > > struct twl_platform_data { > > unsigned irq_base, irq_end; > > struct twl_bci_platform_data *bci; > > @@ -479,6 +485,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; > > > > -- > Péter _______________________________________________ Alsa-devel mailing list Alsa-devel@xxxxxxxxxxxxxxxx http://mailman.alsa-project.org/mailman/listinfo/alsa-devel