Skip to content

Commit 8076c58

Browse files
Paweł Anikielbroonie
authored andcommitted
ASoC: ssm2602: Add support for CLKDIV2
The SSM260x chips have an internal MCLK /2 divider (bit D7 in register R8). Add logic that allows for more MCLK values using this divider. Signed-off-by: Paweł Anikiel <pan@semihalf.com> Link: https://lore.kernel.org/r/20230414140203.707729-7-pan@semihalf.com Signed-off-by: Mark Brown <broonie@kernel.org>
1 parent fc0b096 commit 8076c58

1 file changed

Lines changed: 12 additions & 3 deletions

File tree

sound/soc/codecs/ssm2602.c

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -280,9 +280,12 @@ static inline int ssm2602_get_coeff(int mclk, int rate)
280280
int i;
281281

282282
for (i = 0; i < ARRAY_SIZE(ssm2602_coeff_table); i++) {
283-
if (ssm2602_coeff_table[i].rate == rate &&
284-
ssm2602_coeff_table[i].mclk == mclk)
285-
return ssm2602_coeff_table[i].srate;
283+
if (ssm2602_coeff_table[i].rate == rate) {
284+
if (ssm2602_coeff_table[i].mclk == mclk)
285+
return ssm2602_coeff_table[i].srate;
286+
if (ssm2602_coeff_table[i].mclk == mclk / 2)
287+
return ssm2602_coeff_table[i].srate | SRATE_CORECLK_DIV2;
288+
}
286289
}
287290
return -EINVAL;
288291
}
@@ -365,18 +368,24 @@ static int ssm2602_set_dai_sysclk(struct snd_soc_dai *codec_dai,
365368
switch (freq) {
366369
case 12288000:
367370
case 18432000:
371+
case 24576000:
372+
case 36864000:
368373
ssm2602->sysclk_constraints = &ssm2602_constraints_12288000;
369374
break;
370375
case 11289600:
371376
case 16934400:
377+
case 22579200:
378+
case 33868800:
372379
ssm2602->sysclk_constraints = &ssm2602_constraints_11289600;
373380
break;
374381
case 12000000:
382+
case 24000000:
375383
ssm2602->sysclk_constraints = NULL;
376384
break;
377385
default:
378386
return -EINVAL;
379387
}
388+
380389
ssm2602->sysclk = freq;
381390
} else {
382391
unsigned int mask;

0 commit comments

Comments
 (0)