@ -634,8 +634,8 @@ static const struct snd_soc_dapm_widget nau8824_dapm_widgets[] = {
SND_SOC_DAPM_ADC ( " ADCR " , NULL , NAU8824_REG_ANALOG_ADC_2 ,
NAU8824_ADCR_EN_SFT , 0 ) ,
SND_SOC_DAPM_AIF_OUT ( " AIFTX " , " HiFi Capture" , 0 , SND_SOC_NOPM , 0 , 0 ) ,
SND_SOC_DAPM_AIF_IN ( " AIFRX " , " HiFi Playback" , 0 , SND_SOC_NOPM , 0 , 0 ) ,
SND_SOC_DAPM_AIF_OUT ( " AIFTX " , " Capture " , 0 , SND_SOC_NOPM , 0 , 0 ) ,
SND_SOC_DAPM_AIF_IN ( " AIFRX " , " Playback " , 0 , SND_SOC_NOPM , 0 , 0 ) ,
SND_SOC_DAPM_DAC ( " DACL " , NULL , NAU8824_REG_RDAC ,
NAU8824_DACL_EN_SFT , 0 ) ,
@ -784,6 +784,36 @@ static void nau8824_int_status_clear_all(struct regmap *regmap)
}
}
static void nau8824_dapm_disable_pin ( struct nau8824 * nau8824 , const char * pin )
{
struct snd_soc_dapm_context * dapm = nau8824 - > dapm ;
const char * prefix = dapm - > component - > name_prefix ;
char prefixed_pin [ 80 ] ;
if ( prefix ) {
snprintf ( prefixed_pin , sizeof ( prefixed_pin ) , " %s %s " ,
prefix , pin ) ;
snd_soc_dapm_disable_pin ( dapm , prefixed_pin ) ;
} else {
snd_soc_dapm_disable_pin ( dapm , pin ) ;
}
}
static void nau8824_dapm_enable_pin ( struct nau8824 * nau8824 , const char * pin )
{
struct snd_soc_dapm_context * dapm = nau8824 - > dapm ;
const char * prefix = dapm - > component - > name_prefix ;
char prefixed_pin [ 80 ] ;
if ( prefix ) {
snprintf ( prefixed_pin , sizeof ( prefixed_pin ) , " %s %s " ,
prefix , pin ) ;
snd_soc_dapm_force_enable_pin ( dapm , prefixed_pin ) ;
} else {
snd_soc_dapm_force_enable_pin ( dapm , pin ) ;
}
}
static void nau8824_eject_jack ( struct nau8824 * nau8824 )
{
struct snd_soc_dapm_context * dapm = nau8824 - > dapm ;
@ -792,8 +822,8 @@ static void nau8824_eject_jack(struct nau8824 *nau8824)
/* Clear all interruption status */
nau8824_int_status_clear_all ( regmap ) ;
snd_soc_dapm_disable_pin ( dapm , " SAR " ) ;
snd_soc_dapm_disable_pin ( dapm , " MICBIAS " ) ;
nau8824_dapm_disable_pin ( nau8824 , " SAR " ) ;
nau8824_dapm_disable_pin ( nau8824 , " MICBIAS " ) ;
snd_soc_dapm_sync ( dapm ) ;
/* Enable the insertion interruption, disable the ejection
@ -822,8 +852,8 @@ static void nau8824_jdet_work(struct work_struct *work)
struct regmap * regmap = nau8824 - > regmap ;
int adc_value , event = 0 , event_mask = 0 ;
snd_soc_dapm_force_enable_pin ( dapm , " MICBIAS " ) ;
snd_soc_dapm_force_enable_pin ( dapm , " SAR " ) ;
nau8824_dapm_enable_pin ( nau8824 , " MICBIAS " ) ;
nau8824_dapm_enable_pin ( nau8824 , " SAR " ) ;
snd_soc_dapm_sync ( dapm ) ;
msleep ( 100 ) ;
@ -834,8 +864,8 @@ static void nau8824_jdet_work(struct work_struct *work)
if ( adc_value < HEADSET_SARADC_THD ) {
event | = SND_JACK_HEADPHONE ;
snd_soc_dapm_disable_pin ( dapm , " SAR " ) ;
snd_soc_dapm_disable_pin ( dapm , " MICBIAS " ) ;
nau8824_dapm_disable_pin ( nau8824 , " SAR " ) ;
nau8824_dapm_disable_pin ( nau8824 , " MICBIAS " ) ;
snd_soc_dapm_sync ( dapm ) ;
} else {
event | = SND_JACK_HEADSET ;