Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

ASoC: imx-card: add cs42888 codec support

Merge series from Shengjiu Wang <shengjiu.wang@nxp.com>:

Add cs42888 codec support

+52 -7
+52 -7
sound/soc/fsl/imx-card.c
··· 25 25 CODEC_AK4458, 26 26 CODEC_AK4497, 27 27 CODEC_AK5552, 28 + CODEC_CS42888, 28 29 }; 29 30 30 31 /* ··· 186 185 { .min = 512, .max = 512, .mul = 1024 }, 187 186 }; 188 187 188 + static struct imx_akcodec_fs_mul cs42888_fs_mul[] = { 189 + { .rmin = 8000, .rmax = 48000, .wmin = 256, .wmax = 1024, }, 190 + { .rmin = 64000, .rmax = 96000, .wmin = 128, .wmax = 512, }, 191 + { .rmin = 176400, .rmax = 192000, .wmin = 64, .wmax = 256, }, 192 + }; 193 + 194 + static struct imx_akcodec_tdm_fs_mul cs42888_tdm_fs_mul[] = { 195 + { .min = 256, .max = 256, .mul = 256 }, 196 + }; 197 + 189 198 static const u32 akcodec_rates[] = { 190 199 8000, 11025, 16000, 22050, 32000, 44100, 48000, 88200, 191 200 96000, 176400, 192000, 352800, 384000, 705600, 768000, ··· 218 207 }; 219 208 220 209 static const u32 ak5558_tdm_channels[] = { 210 + 1, 2, 3, 4, 5, 6, 7, 8, 211 + }; 212 + 213 + static const u32 cs42888_channels[] = { 214 + 1, 2, 4, 6, 8, 215 + }; 216 + 217 + static const u32 cs42888_tdm_channels[] = { 221 218 1, 2, 3, 4, 5, 6, 7, 8, 222 219 }; 223 220 ··· 260 241 case CODEC_AK4497: 261 242 case CODEC_AK5558: 262 243 case CODEC_AK5552: 244 + case CODEC_CS42888: 263 245 return true; 264 246 default: 265 247 break; ··· 360 340 return ret; 361 341 } 362 342 363 - ret = snd_soc_dai_set_tdm_slot(codec_dai, 364 - BIT(slots) - 1, 365 - BIT(slots) - 1, 366 - slots, slot_width); 367 - if (ret && ret != -ENOTSUPP) { 368 - dev_err(dev, "failed to set codec dai[%d] tdm slot: %d\n", i, ret); 369 - return ret; 343 + if (format_is_tdm(link_data)) { 344 + ret = snd_soc_dai_set_tdm_slot(codec_dai, 345 + BIT(slots) - 1, 346 + BIT(slots) - 1, 347 + slots, slot_width); 348 + if (ret && ret != -ENOTSUPP) { 349 + dev_err(dev, "failed to set codec dai[%d] tdm slot: %d\n", i, ret); 350 + return ret; 351 + } 370 352 } 371 353 } 372 354 ··· 390 368 SND_SOC_CLOCK_OUT); 391 369 if (ret && ret != -ENOTSUPP) { 392 370 dev_err(dev, "failed to set cpui dai mclk1 rate (%lu): %d\n", mclk_freq, ret); 371 + return ret; 372 + } 373 + ret = snd_soc_dai_set_sysclk(codec_dai, 0, mclk_freq, SND_SOC_CLOCK_IN); 374 + if (ret && ret != -ENOTSUPP) { 375 + dev_err(dev, "failed to set codec dai mclk rate (%lu): %d\n", mclk_freq, ret); 393 376 return ret; 394 377 } 395 378 ··· 631 604 plat_data->type = CODEC_AK5558; 632 605 else if (!strcmp(link->codecs->dai_name, "ak5552-aif")) 633 606 plat_data->type = CODEC_AK5552; 607 + else if (!strcmp(link->codecs->dai_name, "cs42888")) 608 + plat_data->type = CODEC_CS42888; 634 609 635 610 } else { 636 611 link->codecs = &snd_soc_dummy_dlc; ··· 790 761 data->dapm_routes[i].sink = "ASRC-Capture"; 791 762 data->dapm_routes[i].source = "CPU-Capture"; 792 763 break; 764 + case CODEC_CS42888: 765 + data->dapm_routes[0].sink = "Playback"; 766 + data->dapm_routes[0].source = "CPU-Playback"; 767 + data->dapm_routes[1].sink = "CPU-Capture"; 768 + data->dapm_routes[1].source = "Capture"; 769 + break; 793 770 default: 794 771 break; 795 772 } ··· 834 799 plat_data->num_channels = ARRAY_SIZE(ak5558_channels); 835 800 plat_data->support_tdm_channels = ak5558_tdm_channels; 836 801 plat_data->num_tdm_channels = ARRAY_SIZE(ak5558_tdm_channels); 802 + break; 803 + case CODEC_CS42888: 804 + plat_data->fs_mul = cs42888_fs_mul; 805 + plat_data->num_fs_mul = ARRAY_SIZE(cs42888_fs_mul); 806 + plat_data->tdm_fs_mul = cs42888_tdm_fs_mul; 807 + plat_data->num_tdm_fs_mul = ARRAY_SIZE(cs42888_tdm_fs_mul); 808 + plat_data->support_channels = cs42888_channels; 809 + plat_data->num_channels = ARRAY_SIZE(cs42888_channels); 810 + plat_data->support_tdm_channels = cs42888_tdm_channels; 811 + plat_data->num_tdm_channels = ARRAY_SIZE(cs42888_tdm_channels); 837 812 break; 838 813 default: 839 814 break;