9 Jun
2022
9 Jun
'22
3:33 p.m.
On Mon, Jun 06, 2022 at 09:19:10PM +0200, Martin Povišer wrote:
/*
* Primary FE
*
* The mclk/fs ratio at 64 for the primary frontend is important
* to ensure that the headphones codec's idea of left and right
* in a stereo stream over I2S fits in nicely with everyone else's.
* (This is until the headphones codec's driver supports
* set_tdm_slot.)
*
* The low mclk/fs ratio precludes transmitting more than two
* channels over I2S, but that's okay since there is the secondary
* FE for speaker arrays anyway.
*/
.mclk_fs = 64,
- },
This seems weird - it looks like it's confusing MCLK and the bit clock for the audio bus. These are two different clocks. Note that it's very common for devices to require a higher MCLK/fs ratio to deliver the best audio performance, 256fs is standard.
- {
/*
* Secondary FE
*
* Here we want frames plenty long to be able to drive all
* those fancy speaker arrays.
*/
.mclk_fs = 256,
- }
Same thing here - this is at least confusing MCLK and the bit clock.
+static bool macaudio_match_kctl_name(const char *pattern, const char *name) +{
- if (pattern[0] == '*') {
int namelen, patternlen;
pattern++;
if (pattern[0] == ' ')
pattern++;
namelen = strlen(name);
patternlen = strlen(pattern);
if (namelen > patternlen)
name += (namelen - patternlen);
- }
- return !strcmp(name, pattern);
+}
+static int macaudio_limit_volume(struct snd_soc_card *card,
const char *pattern, int max)
+{
- struct snd_kcontrol *kctl;
- struct soc_mixer_control *mc;
- int found = 0;
- list_for_each_entry(kctl, &card->snd_card->controls, list) {
if (!macaudio_match_kctl_name(pattern, kctl->id.name))
continue;
found++;
dev_dbg(card->dev, "limiting volume on '%s'\n", kctl->id.name);
/*
* TODO: This doesn't decrease the volume if it's already
* above the limit!
*/
mc = (struct soc_mixer_control *)kctl->private_value;
if (max <= mc->max)
mc->platform_max = max;
- }
- return found;
+}
This shouldn't be open coded in a driver, please factor it out into the core so we've got an API for "set limit X on control Y" then call that.