Message ID | 20210302170454.39679-8-tanureal@opensource.cirrus.com (mailing list archive) |
---|---|
State | Superseded |
Headers | show |
Series | Report jack and button detection + Capture Support | expand |
Hi Lucas, Thank you for the patch! Yet something to improve: [auto build test ERROR on asoc/for-next] [also build test ERROR on v5.12-rc1 next-20210302] [If your patch is applied to the wrong git tree, kindly drop us a note. And when submitting patch, we suggest to use '--base' as documented in https://git-scm.com/docs/git-format-patch] url: https://github.com/0day-ci/linux/commits/Lucas-Tanure/Report-jack-and-button-detection-Capture-Support/20210303-012348 base: https://git.kernel.org/pub/scm/linux/kernel/git/broonie/sound.git for-next config: arc-allyesconfig (attached as .config) compiler: arceb-elf-gcc (GCC) 9.3.0 reproduce (this is a W=1 build): wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross chmod +x ~/bin/make.cross # https://github.com/0day-ci/linux/commit/d004d17fc0cf6b114d467e0b352fe619c2d653a4 git remote add linux-review https://github.com/0day-ci/linux git fetch --no-tags linux-review Lucas-Tanure/Report-jack-and-button-detection-Capture-Support/20210303-012348 git checkout d004d17fc0cf6b114d467e0b352fe619c2d653a4 # save the attached .config to linux build tree COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-9.3.0 make.cross ARCH=arc If you fix the issue, kindly add following tag as appropriate Reported-by: kernel test robot <lkp@intel.com> Note: the linux-review/Lucas-Tanure/Report-jack-and-button-detection-Capture-Support/20210303-012348 HEAD 844324ce32306dc48f88e1a9fb44f51783b3942d builds fine. It only hurts bisectibility. All errors (new ones prefixed by >>): sound/soc/codecs/cs42l42.c: In function 'cs42l42_mute_stream': >> sound/soc/codecs/cs42l42.c:804:3: error: 'cs42l42' undeclared (first use in this function) 804 | cs42l42->stream_use &= ~(1 << stream); | ^~~~~~~ sound/soc/codecs/cs42l42.c:804:3: note: each undeclared identifier is reported only once for each function it appears in vim +/cs42l42 +804 sound/soc/codecs/cs42l42.c 788 789 static int cs42l42_mute_stream(struct snd_soc_dai *dai, int mute, int stream) 790 { 791 struct snd_soc_component *component = dai->component; 792 unsigned int regval; 793 u8 fullScaleVol; 794 795 if (mute) { 796 /* Mute the headphone */ 797 if (stream == SNDRV_PCM_STREAM_PLAYBACK) 798 snd_soc_component_update_bits(component, CS42L42_HP_CTL, 799 CS42L42_HP_ANA_AMUTE_MASK | 800 CS42L42_HP_ANA_BMUTE_MASK, 801 CS42L42_HP_ANA_AMUTE_MASK | 802 CS42L42_HP_ANA_BMUTE_MASK); 803 > 804 cs42l42->stream_use &= ~(1 << stream); 805 if(!cs42l42->stream_use) { 806 /* 807 * Switch to the internal oscillator. 808 * SCLK must remain running until after this clock switch. 809 * Without a source of clock the I2C bus doesn't work. 810 */ 811 snd_soc_component_update_bits(component, CS42L42_OSC_SWITCH, 812 CS42L42_SCLK_PRESENT_MASK, 0); 813 snd_soc_component_update_bits(component, CS42L42_PLL_CTL1, 814 CS42L42_PLL_START_MASK, 0); 815 } 816 } else { 817 if (!cs42l42->stream_use) { 818 /* SCLK must be running before codec unmute */ 819 snd_soc_component_update_bits(component, CS42L42_PLL_CTL1, 820 CS42L42_PLL_START_MASK, 1); 821 822 /* Mark SCLK as present, turn off internal oscillator */ 823 snd_soc_component_update_bits(component, CS42L42_OSC_SWITCH, 824 CS42L42_SCLK_PRESENT_MASK, 825 CS42L42_SCLK_PRESENT_MASK); 826 } 827 cs42l42->stream_use |= 1 << stream; 828 829 if (stream == SNDRV_PCM_STREAM_PLAYBACK) { 830 /* Read the headphone load */ 831 regval = snd_soc_component_read(component, CS42L42_LOAD_DET_RCSTAT); 832 if (((regval & CS42L42_RLA_STAT_MASK) >> CS42L42_RLA_STAT_SHIFT) == 833 CS42L42_RLA_STAT_15_OHM) { 834 fullScaleVol = CS42L42_HP_FULL_SCALE_VOL_MASK; 835 } else { 836 fullScaleVol = 0; 837 } 838 839 /* Un-mute the headphone, set the full scale volume flag */ 840 snd_soc_component_update_bits(component, CS42L42_HP_CTL, 841 CS42L42_HP_ANA_AMUTE_MASK | 842 CS42L42_HP_ANA_BMUTE_MASK | 843 CS42L42_HP_FULL_SCALE_VOL_MASK, fullScaleVol); 844 } 845 } 846 847 return 0; 848 } 849 --- 0-DAY CI Kernel Test Service, Intel Corporation https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org
diff --git a/sound/soc/codecs/cs42l42.c b/sound/soc/codecs/cs42l42.c index 663a6a8104171..670f28f09ae01 100644 --- a/sound/soc/codecs/cs42l42.c +++ b/sound/soc/codecs/cs42l42.c @@ -786,52 +786,62 @@ static int cs42l42_set_sysclk(struct snd_soc_dai *dai, return 0; } -static int cs42l42_mute(struct snd_soc_dai *dai, int mute, int direction) +static int cs42l42_mute_stream(struct snd_soc_dai *dai, int mute, int stream) { struct snd_soc_component *component = dai->component; unsigned int regval; u8 fullScaleVol; if (mute) { - /* Mark SCLK as not present to turn on the internal - * oscillator. - */ - snd_soc_component_update_bits(component, CS42L42_OSC_SWITCH, - CS42L42_SCLK_PRESENT_MASK, 0); - - snd_soc_component_update_bits(component, CS42L42_PLL_CTL1, - CS42L42_PLL_START_MASK, - 0 << CS42L42_PLL_START_SHIFT); - /* Mute the headphone */ - snd_soc_component_update_bits(component, CS42L42_HP_CTL, - CS42L42_HP_ANA_AMUTE_MASK | - CS42L42_HP_ANA_BMUTE_MASK, - CS42L42_HP_ANA_AMUTE_MASK | - CS42L42_HP_ANA_BMUTE_MASK); + if (stream == SNDRV_PCM_STREAM_PLAYBACK) + snd_soc_component_update_bits(component, CS42L42_HP_CTL, + CS42L42_HP_ANA_AMUTE_MASK | + CS42L42_HP_ANA_BMUTE_MASK, + CS42L42_HP_ANA_AMUTE_MASK | + CS42L42_HP_ANA_BMUTE_MASK); + + cs42l42->stream_use &= ~(1 << stream); + if(!cs42l42->stream_use) { + /* + * Switch to the internal oscillator. + * SCLK must remain running until after this clock switch. + * Without a source of clock the I2C bus doesn't work. + */ + snd_soc_component_update_bits(component, CS42L42_OSC_SWITCH, + CS42L42_SCLK_PRESENT_MASK, 0); + snd_soc_component_update_bits(component, CS42L42_PLL_CTL1, + CS42L42_PLL_START_MASK, 0); + } } else { - snd_soc_component_update_bits(component, CS42L42_PLL_CTL1, - CS42L42_PLL_START_MASK, - 1 << CS42L42_PLL_START_SHIFT); - /* Read the headphone load */ - regval = snd_soc_component_read(component, CS42L42_LOAD_DET_RCSTAT); - if (((regval & CS42L42_RLA_STAT_MASK) >> - CS42L42_RLA_STAT_SHIFT) == CS42L42_RLA_STAT_15_OHM) { - fullScaleVol = CS42L42_HP_FULL_SCALE_VOL_MASK; - } else { - fullScaleVol = 0; + if (!cs42l42->stream_use) { + /* SCLK must be running before codec unmute */ + snd_soc_component_update_bits(component, CS42L42_PLL_CTL1, + CS42L42_PLL_START_MASK, 1); + + /* Mark SCLK as present, turn off internal oscillator */ + snd_soc_component_update_bits(component, CS42L42_OSC_SWITCH, + CS42L42_SCLK_PRESENT_MASK, + CS42L42_SCLK_PRESENT_MASK); } + cs42l42->stream_use |= 1 << stream; + + if (stream == SNDRV_PCM_STREAM_PLAYBACK) { + /* Read the headphone load */ + regval = snd_soc_component_read(component, CS42L42_LOAD_DET_RCSTAT); + if (((regval & CS42L42_RLA_STAT_MASK) >> CS42L42_RLA_STAT_SHIFT) == + CS42L42_RLA_STAT_15_OHM) { + fullScaleVol = CS42L42_HP_FULL_SCALE_VOL_MASK; + } else { + fullScaleVol = 0; + } - /* Un-mute the headphone, set the full scale volume flag */ - snd_soc_component_update_bits(component, CS42L42_HP_CTL, - CS42L42_HP_ANA_AMUTE_MASK | - CS42L42_HP_ANA_BMUTE_MASK | - CS42L42_HP_FULL_SCALE_VOL_MASK, fullScaleVol); - - /* Mark SCLK as present, turn off internal oscillator */ - snd_soc_component_update_bits(component, CS42L42_OSC_SWITCH, - CS42L42_SCLK_PRESENT_MASK, - CS42L42_SCLK_PRESENT_MASK); + /* Un-mute the headphone, set the full scale volume flag */ + snd_soc_component_update_bits(component, CS42L42_HP_CTL, + CS42L42_HP_ANA_AMUTE_MASK | + CS42L42_HP_ANA_BMUTE_MASK | + CS42L42_HP_FULL_SCALE_VOL_MASK, fullScaleVol); + } } return 0; @@ -846,8 +856,7 @@ static const struct snd_soc_dai_ops cs42l42_ops = { .hw_params = cs42l42_pcm_hw_params, .set_fmt = cs42l42_set_dai_fmt, .set_sysclk = cs42l42_set_sysclk, - .mute_stream = cs42l42_mute, - .no_capture_mute = 1, + .mute_stream = cs42l42_mute_stream, }; static struct snd_soc_dai_driver cs42l42_dai = { diff --git a/sound/soc/codecs/cs42l42.h b/sound/soc/codecs/cs42l42.h index e17a0c0aeb4a0..59e6eccb8d731 100644 --- a/sound/soc/codecs/cs42l42.h +++ b/sound/soc/codecs/cs42l42.h @@ -769,6 +769,7 @@ struct cs42l42_private { u8 bias_thresholds[CS42L42_NUM_BIASES]; u8 hs_bias_ramp_rate; u8 hs_bias_ramp_time; + u8 stream_use; }; #endif /* __CS42L42_H__ */
Move the enable/disable of clocks to cs42l42_mute_stream so the record path also get clocks. Signed-off-by: Lucas Tanure <tanureal@opensource.cirrus.com> --- sound/soc/codecs/cs42l42.c | 85 +++++++++++++++++++++----------------- sound/soc/codecs/cs42l42.h | 1 + 2 files changed, 48 insertions(+), 38 deletions(-)