@@ -624,6 +624,36 @@ static int system_clock_control(struct snd_soc_dapm_widget *w,
624
624
return 0 ;
625
625
}
626
626
627
+ static int nau8821_left_fepga_event (struct snd_soc_dapm_widget * w ,
628
+ struct snd_kcontrol * kcontrol , int event )
629
+ {
630
+ struct snd_soc_component * component = snd_soc_dapm_to_component (w -> dapm );
631
+ struct nau8821 * nau8821 = snd_soc_component_get_drvdata (component );
632
+
633
+ if (!nau8821 -> left_input_single_end )
634
+ return 0 ;
635
+
636
+ switch (event ) {
637
+ case SND_SOC_DAPM_POST_PMU :
638
+ regmap_update_bits (nau8821 -> regmap , NAU8821_R77_FEPGA ,
639
+ NAU8821_ACDC_CTRL_MASK | NAU8821_FEPGA_MODEL_MASK ,
640
+ NAU8821_ACDC_VREF_MICN | NAU8821_FEPGA_MODEL_AAF );
641
+ regmap_update_bits (nau8821 -> regmap , NAU8821_R76_BOOST ,
642
+ NAU8821_HP_BOOST_DISCHRG_EN , NAU8821_HP_BOOST_DISCHRG_EN );
643
+ break ;
644
+ case SND_SOC_DAPM_POST_PMD :
645
+ regmap_update_bits (nau8821 -> regmap , NAU8821_R77_FEPGA ,
646
+ NAU8821_ACDC_CTRL_MASK | NAU8821_FEPGA_MODEL_MASK , 0 );
647
+ regmap_update_bits (nau8821 -> regmap , NAU8821_R76_BOOST ,
648
+ NAU8821_HP_BOOST_DISCHRG_EN , 0 );
649
+ break ;
650
+ default :
651
+ break ;
652
+ }
653
+
654
+ return 0 ;
655
+ }
656
+
627
657
static const struct snd_soc_dapm_widget nau8821_dapm_widgets [] = {
628
658
SND_SOC_DAPM_SUPPLY ("System Clock" , SND_SOC_NOPM , 0 , 0 ,
629
659
system_clock_control , SND_SOC_DAPM_POST_PMD ),
@@ -635,8 +665,10 @@ static const struct snd_soc_dapm_widget nau8821_dapm_widgets[] = {
635
665
NAU8821_POWERUP_ADCL_SFT , 0 ),
636
666
SND_SOC_DAPM_ADC ("ADCR Power" , NULL , NAU8821_R72_ANALOG_ADC_2 ,
637
667
NAU8821_POWERUP_ADCR_SFT , 0 ),
668
+ /* single-ended design only on the left */
638
669
SND_SOC_DAPM_PGA_S ("Frontend PGA L" , 1 , NAU8821_R7F_POWER_UP_CONTROL ,
639
- NAU8821_PUP_PGA_L_SFT , 0 , NULL , 0 ),
670
+ NAU8821_PUP_PGA_L_SFT , 0 , nau8821_left_fepga_event ,
671
+ SND_SOC_DAPM_POST_PMU | SND_SOC_DAPM_POST_PMD ),
640
672
SND_SOC_DAPM_PGA_S ("Frontend PGA R" , 1 , NAU8821_R7F_POWER_UP_CONTROL ,
641
673
NAU8821_PUP_PGA_R_SFT , 0 , NULL , 0 ),
642
674
SND_SOC_DAPM_PGA_S ("ADCL Digital path" , 0 , NAU8821_R01_ENA_CTRL ,
@@ -1677,6 +1709,8 @@ static int nau8821_read_device_properties(struct device *dev,
1677
1709
"nuvoton,jkdet-pull-up" );
1678
1710
nau8821 -> key_enable = device_property_read_bool (dev ,
1679
1711
"nuvoton,key-enable" );
1712
+ nau8821 -> left_input_single_end = device_property_read_bool (dev ,
1713
+ "nuvoton,left-input-single-end" );
1680
1714
ret = device_property_read_u32 (dev , "nuvoton,jkdet-polarity" ,
1681
1715
& nau8821 -> jkdet_polarity );
1682
1716
if (ret )
@@ -1760,6 +1794,12 @@ static void nau8821_init_regs(struct nau8821 *nau8821)
1760
1794
NAU8821_ADC_SYNC_DOWN_MASK , NAU8821_ADC_SYNC_DOWN_64 );
1761
1795
regmap_update_bits (regmap , NAU8821_R2C_DAC_CTRL1 ,
1762
1796
NAU8821_DAC_OVERSAMPLE_MASK , NAU8821_DAC_OVERSAMPLE_64 );
1797
+ if (nau8821 -> left_input_single_end ) {
1798
+ regmap_update_bits (regmap , NAU8821_R6B_PGA_MUTE ,
1799
+ NAU8821_MUTE_MICNL_EN , NAU8821_MUTE_MICNL_EN );
1800
+ regmap_update_bits (regmap , NAU8821_R74_MIC_BIAS ,
1801
+ NAU8821_MICBIAS_LOWNOISE_EN , NAU8821_MICBIAS_LOWNOISE_EN );
1802
+ }
1763
1803
}
1764
1804
1765
1805
static int nau8821_setup_irq (struct nau8821 * nau8821 )
0 commit comments