@ -567,12 +567,13 @@ static const struct snd_kcontrol_new twl4030_dapm_dbypassv_control =
static int pin_name # # pga_event ( struct snd_soc_dapm_widget * w , \
struct snd_kcontrol * kcontrol , int event ) \
{ \
struct twl4030_priv * twl4030 = snd_soc_codec_get_drvdata ( w - > codec ) ; \
struct snd_soc_codec * codec = snd_soc_dapm_to_codec ( w - > dapm ) ; \
struct twl4030_priv * twl4030 = snd_soc_codec_get_drvdata ( codec ) ; \
\
switch ( event ) { \
case SND_SOC_DAPM_POST_PMU : \
twl4030 - > pin_name # # _enabled = 1 ; \
twl4030_write ( w - > codec , reg , twl4030_read ( w - > codec , reg ) ) ; \
twl4030_write ( codec , reg , twl4030_read ( codec , reg ) ) ; \
break ; \
case SND_SOC_DAPM_POST_PMD : \
twl4030 - > pin_name # # _enabled = 0 ; \
@ -621,12 +622,14 @@ static void handsfree_ramp(struct snd_soc_codec *codec, int reg, int ramp)
static int handsfreelpga_event ( struct snd_soc_dapm_widget * w ,
struct snd_kcontrol * kcontrol , int event )
{
struct snd_soc_codec * codec = snd_soc_dapm_to_codec ( w - > dapm ) ;
switch ( event ) {
case SND_SOC_DAPM_POST_PMU :
handsfree_ramp ( w - > codec , TWL4030_REG_HFL_CTL , 1 ) ;
handsfree_ramp ( codec , TWL4030_REG_HFL_CTL , 1 ) ;
break ;
case SND_SOC_DAPM_POST_PMD :
handsfree_ramp ( w - > codec , TWL4030_REG_HFL_CTL , 0 ) ;
handsfree_ramp ( codec , TWL4030_REG_HFL_CTL , 0 ) ;
break ;
}
return 0 ;
@ -635,12 +638,14 @@ static int handsfreelpga_event(struct snd_soc_dapm_widget *w,
static int handsfreerpga_event ( struct snd_soc_dapm_widget * w ,
struct snd_kcontrol * kcontrol , int event )
{
struct snd_soc_codec * codec = snd_soc_dapm_to_codec ( w - > dapm ) ;
switch ( event ) {
case SND_SOC_DAPM_POST_PMU :
handsfree_ramp ( w - > codec , TWL4030_REG_HFR_CTL , 1 ) ;
handsfree_ramp ( codec , TWL4030_REG_HFR_CTL , 1 ) ;
break ;
case SND_SOC_DAPM_POST_PMD :
handsfree_ramp ( w - > codec , TWL4030_REG_HFR_CTL , 0 ) ;
handsfree_ramp ( codec , TWL4030_REG_HFR_CTL , 0 ) ;
break ;
}
return 0 ;
@ -649,19 +654,23 @@ static int handsfreerpga_event(struct snd_soc_dapm_widget *w,
static int vibramux_event ( struct snd_soc_dapm_widget * w ,
struct snd_kcontrol * kcontrol , int event )
{
twl4030_write ( w - > codec , TWL4030_REG_VIBRA_SET , 0xff ) ;
struct snd_soc_codec * codec = snd_soc_dapm_to_codec ( w - > dapm ) ;
twl4030_write ( codec , TWL4030_REG_VIBRA_SET , 0xff ) ;
return 0 ;
}
static int apll_event ( struct snd_soc_dapm_widget * w ,
struct snd_kcontrol * kcontrol , int event )
{
struct snd_soc_codec * codec = snd_soc_dapm_to_codec ( w - > dapm ) ;
switch ( event ) {
case SND_SOC_DAPM_PRE_PMU :
twl4030_apll_enable ( w - > codec , 1 ) ;
twl4030_apll_enable ( codec , 1 ) ;
break ;
case SND_SOC_DAPM_POST_PMD :
twl4030_apll_enable ( w - > codec , 0 ) ;
twl4030_apll_enable ( codec , 0 ) ;
break ;
}
return 0 ;
@ -670,23 +679,24 @@ static int apll_event(struct snd_soc_dapm_widget *w,
static int aif_event ( struct snd_soc_dapm_widget * w ,
struct snd_kcontrol * kcontrol , int event )
{
struct snd_soc_codec * codec = snd_soc_dapm_to_codec ( w - > dapm ) ;
u8 audio_if ;
audio_if = twl4030_read ( w - > codec , TWL4030_REG_AUDIO_IF ) ;
audio_if = twl4030_read ( codec , TWL4030_REG_AUDIO_IF ) ;
switch ( event ) {
case SND_SOC_DAPM_PRE_PMU :
/* Enable AIF */
/* enable the PLL before we use it to clock the DAI */
twl4030_apll_enable ( w - > codec , 1 ) ;
twl4030_apll_enable ( codec , 1 ) ;
twl4030_write ( w - > codec , TWL4030_REG_AUDIO_IF ,
twl4030_write ( codec , TWL4030_REG_AUDIO_IF ,
audio_if | TWL4030_AIF_EN ) ;
break ;
case SND_SOC_DAPM_POST_PMD :
/* disable the DAI before we stop it's source PLL */
twl4030_write ( w - > codec , TWL4030_REG_AUDIO_IF ,
twl4030_write ( codec , TWL4030_REG_AUDIO_IF ,
audio_if & ~ TWL4030_AIF_EN ) ;
twl4030_apll_enable ( w - > codec , 0 ) ;
twl4030_apll_enable ( codec , 0 ) ;
break ;
}
return 0 ;
@ -758,20 +768,21 @@ static void headset_ramp(struct snd_soc_codec *codec, int ramp)
static int headsetlpga_event ( struct snd_soc_dapm_widget * w ,
struct snd_kcontrol * kcontrol , int event )
{
struct twl4030_priv * twl4030 = snd_soc_codec_get_drvdata ( w - > codec ) ;
struct snd_soc_codec * codec = snd_soc_dapm_to_codec ( w - > dapm ) ;
struct twl4030_priv * twl4030 = snd_soc_codec_get_drvdata ( codec ) ;
switch ( event ) {
case SND_SOC_DAPM_POST_PMU :
/* Do the ramp-up only once */
if ( ! twl4030 - > hsr_enabled )
headset_ramp ( w - > codec , 1 ) ;
headset_ramp ( codec , 1 ) ;
twl4030 - > hsl_enabled = 1 ;
break ;
case SND_SOC_DAPM_POST_PMD :
/* Do the ramp-down only if both headsetL/R is disabled */
if ( ! twl4030 - > hsr_enabled )
headset_ramp ( w - > codec , 0 ) ;
headset_ramp ( codec , 0 ) ;
twl4030 - > hsl_enabled = 0 ;
break ;
@ -782,20 +793,21 @@ static int headsetlpga_event(struct snd_soc_dapm_widget *w,
static int headsetrpga_event ( struct snd_soc_dapm_widget * w ,
struct snd_kcontrol * kcontrol , int event )
{
struct twl4030_priv * twl4030 = snd_soc_codec_get_drvdata ( w - > codec ) ;
struct snd_soc_codec * codec = snd_soc_dapm_to_codec ( w - > dapm ) ;
struct twl4030_priv * twl4030 = snd_soc_codec_get_drvdata ( codec ) ;
switch ( event ) {
case SND_SOC_DAPM_POST_PMU :
/* Do the ramp-up only once */
if ( ! twl4030 - > hsl_enabled )
headset_ramp ( w - > codec , 1 ) ;
headset_ramp ( codec , 1 ) ;
twl4030 - > hsr_enabled = 1 ;
break ;
case SND_SOC_DAPM_POST_PMD :
/* Do the ramp-down only if both headsetL/R is disabled */
if ( ! twl4030 - > hsl_enabled )
headset_ramp ( w - > codec , 0 ) ;
headset_ramp ( codec , 0 ) ;
twl4030 - > hsr_enabled = 0 ;
break ;
@ -806,7 +818,8 @@ static int headsetrpga_event(struct snd_soc_dapm_widget *w,
static int digimic_event ( struct snd_soc_dapm_widget * w ,
struct snd_kcontrol * kcontrol , int event )
{
struct twl4030_priv * twl4030 = snd_soc_codec_get_drvdata ( w - > codec ) ;
struct snd_soc_codec * codec = snd_soc_dapm_to_codec ( w - > dapm ) ;
struct twl4030_priv * twl4030 = snd_soc_codec_get_drvdata ( codec ) ;
struct twl4030_codec_data * pdata = twl4030 - > pdata ;
if ( pdata & & pdata - > digimic_delay )