Lines Matching full:cpcap
3 * ALSA SoC CPCAP codec driver
14 #include <linux/mfd/motorola-cpcap.h>
260 struct cpcap_audio *cpcap = snd_soc_component_get_drvdata(component); in cpcap_st_workaround() local
263 /* Only CPCAP from ST requires workaround */ in cpcap_st_workaround()
264 if (cpcap->vendor != CPCAP_VENDOR_ST) in cpcap_st_workaround()
269 err = regmap_write(cpcap->regmap, CPCAP_REG_TEST, in cpcap_st_workaround()
273 err = regmap_write(cpcap->regmap, CPCAP_REG_ST_TEST1, in cpcap_st_workaround()
279 err = regmap_write(cpcap->regmap, CPCAP_REG_ST_TEST1, in cpcap_st_workaround()
283 err = regmap_write(cpcap->regmap, CPCAP_REG_TEST, in cpcap_st_workaround()
361 struct cpcap_audio *cpcap = snd_soc_component_get_drvdata(component); in cpcap_output_mux_get_enum() local
367 err = regmap_read(cpcap->regmap, CPCAP_REG_RXCOA, ®_voice); in cpcap_output_mux_get_enum()
370 err = regmap_read(cpcap->regmap, CPCAP_REG_RXSDOA, ®_hifi); in cpcap_output_mux_get_enum()
373 err = regmap_read(cpcap->regmap, CPCAP_REG_RXEPOA, ®_ext); in cpcap_output_mux_get_enum()
404 struct cpcap_audio *cpcap = snd_soc_component_get_drvdata(component); in cpcap_output_mux_put_enum() local
427 err = regmap_update_bits(cpcap->regmap, CPCAP_REG_RXCOA, in cpcap_output_mux_put_enum()
431 err = regmap_update_bits(cpcap->regmap, CPCAP_REG_RXSDOA, in cpcap_output_mux_put_enum()
435 err = regmap_update_bits(cpcap->regmap, CPCAP_REG_RXEPOA, in cpcap_output_mux_put_enum()
449 struct cpcap_audio *cpcap = snd_soc_component_get_drvdata(component); in cpcap_input_right_mux_get_enum() local
453 err = regmap_read(cpcap->regmap, CPCAP_REG_TXI, ®val); in cpcap_input_right_mux_get_enum()
488 struct cpcap_audio *cpcap = snd_soc_component_get_drvdata(component); in cpcap_input_right_mux_put_enum() local
519 err = regmap_update_bits(cpcap->regmap, CPCAP_REG_TXI, in cpcap_input_right_mux_put_enum()
533 struct cpcap_audio *cpcap = snd_soc_component_get_drvdata(component); in cpcap_input_left_mux_get_enum() local
537 err = regmap_read(cpcap->regmap, CPCAP_REG_TXI, ®val); in cpcap_input_left_mux_get_enum()
564 struct cpcap_audio *cpcap = snd_soc_component_get_drvdata(component); in cpcap_input_left_mux_put_enum() local
587 err = regmap_update_bits(cpcap->regmap, CPCAP_REG_TXI, in cpcap_input_left_mux_put_enum()
949 static int cpcap_set_sysclk(struct cpcap_audio *cpcap, enum cpcap_dai dai, in cpcap_set_sysclk() argument
972 dev_err(cpcap->component->dev, "invalid DAI: %d", dai); in cpcap_set_sysclk()
978 dev_err(cpcap->component->dev, "invalid clk id %d", clk_id); in cpcap_set_sysclk()
981 err = regmap_update_bits(cpcap->regmap, clkidreg, BIT(clkidshift), in cpcap_set_sysclk()
990 err = regmap_update_bits(cpcap->regmap, CPCAP_REG_CDI, in cpcap_set_sysclk()
1018 dev_err(cpcap->component->dev, "unsupported freq %u", freq); in cpcap_set_sysclk()
1022 err = regmap_update_bits(cpcap->regmap, clkfreqreg, in cpcap_set_sysclk()
1028 cpcap->codec_clk_id = clk_id; in cpcap_set_sysclk()
1029 cpcap->codec_freq = freq; in cpcap_set_sysclk()
1035 static int cpcap_set_samprate(struct cpcap_audio *cpcap, enum cpcap_dai dai, in cpcap_set_samprate() argument
1038 struct snd_soc_component *component = cpcap->component; in cpcap_set_samprate()
1093 err = regmap_update_bits(cpcap->regmap, sampreg, in cpcap_set_samprate()
1101 err = regmap_read(cpcap->regmap, sampreg, &sampreadval); in cpcap_set_samprate()
1119 struct cpcap_audio *cpcap = snd_soc_component_get_drvdata(component); in cpcap_hifi_hw_params() local
1123 return cpcap_set_samprate(cpcap, CPCAP_DAI_HIFI, rate); in cpcap_hifi_hw_params()
1130 struct cpcap_audio *cpcap = snd_soc_component_get_drvdata(component); in cpcap_hifi_set_dai_sysclk() local
1134 return cpcap_set_sysclk(cpcap, CPCAP_DAI_HIFI, clk_id, freq); in cpcap_hifi_set_dai_sysclk()
1141 struct cpcap_audio *cpcap = snd_soc_component_get_drvdata(component); in cpcap_hifi_set_dai_fmt() local
1170 dev_err(dev, "HiFi dai fmt failed: CPCAP should be master"); in cpcap_hifi_set_dai_fmt()
1216 return regmap_update_bits(cpcap->regmap, reg, mask, val); in cpcap_hifi_set_dai_fmt()
1222 struct cpcap_audio *cpcap = snd_soc_component_get_drvdata(component); in cpcap_hifi_set_mute() local
1233 return regmap_update_bits(cpcap->regmap, reg, mask, val); in cpcap_hifi_set_mute()
1250 struct cpcap_audio *cpcap = snd_soc_component_get_drvdata(component); in cpcap_voice_hw_params() local
1261 err = cpcap_set_samprate(cpcap, CPCAP_DAI_VOICE, rate); in cpcap_voice_hw_params()
1276 err = regmap_update_bits(cpcap->regmap, reg_cdi, mask, val); in cpcap_voice_hw_params()
1288 struct cpcap_audio *cpcap = snd_soc_component_get_drvdata(component); in cpcap_voice_set_dai_sysclk() local
1292 return cpcap_set_sysclk(cpcap, CPCAP_DAI_VOICE, clk_id, freq); in cpcap_voice_set_dai_sysclk()
1299 struct cpcap_audio *cpcap = snd_soc_component_get_drvdata(component); in cpcap_voice_set_dai_fmt() local
1320 dev_err(component->dev, "Voice dai fmt failed: CPCAP should be the master"); in cpcap_voice_set_dai_fmt()
1366 err = regmap_update_bits(cpcap->regmap, CPCAP_REG_CDI, mask, val); in cpcap_voice_set_dai_fmt()
1370 cpcap->codec_format = val; in cpcap_voice_set_dai_fmt()
1378 struct cpcap_audio *cpcap = snd_soc_component_get_drvdata(component); in cpcap_voice_set_mute() local
1389 return regmap_update_bits(cpcap->regmap, reg, mask, val); in cpcap_voice_set_mute()
1403 .name = "cpcap-hifi",
1415 .name = "cpcap-voice",
1434 static int cpcap_dai_mux(struct cpcap_audio *cpcap, bool swap_dai_configuration) in cpcap_dai_mux() argument
1453 err = regmap_update_bits(cpcap->regmap, CPCAP_REG_CDI, in cpcap_dai_mux()
1458 err = regmap_update_bits(cpcap->regmap, CPCAP_REG_SDACDI, in cpcap_dai_mux()
1469 struct cpcap_audio *cpcap = snd_soc_component_get_drvdata(component); in cpcap_audio_reset() local
1475 err = regmap_update_bits(cpcap->regmap, in cpcap_audio_reset()
1484 err = cpcap_dai_mux(cpcap, swap_dai_configuration); in cpcap_audio_reset()
1488 err = cpcap_set_sysclk(cpcap, CPCAP_DAI_HIFI, 0, 26000000); in cpcap_audio_reset()
1491 err = cpcap_set_sysclk(cpcap, CPCAP_DAI_VOICE, 0, 26000000); in cpcap_audio_reset()
1495 err = cpcap_set_samprate(cpcap, CPCAP_DAI_HIFI, 48000); in cpcap_audio_reset()
1499 err = cpcap_set_samprate(cpcap, CPCAP_DAI_VOICE, 48000); in cpcap_audio_reset()
1508 struct cpcap_audio *cpcap; in cpcap_soc_probe() local
1511 cpcap = devm_kzalloc(component->dev, sizeof(*cpcap), GFP_KERNEL); in cpcap_soc_probe()
1512 if (!cpcap) in cpcap_soc_probe()
1514 snd_soc_component_set_drvdata(component, cpcap); in cpcap_soc_probe()
1515 cpcap->component = component; in cpcap_soc_probe()
1517 cpcap->regmap = dev_get_regmap(component->dev->parent, NULL); in cpcap_soc_probe()
1518 if (!cpcap->regmap) in cpcap_soc_probe()
1520 snd_soc_component_init_regmap(component, cpcap->regmap); in cpcap_soc_probe()
1522 err = cpcap_get_vendor(component->dev, cpcap->regmap, &cpcap->vendor); in cpcap_soc_probe()
1559 .name = "cpcap-codec",
1564 MODULE_ALIAS("platform:cpcap-codec");
1565 MODULE_DESCRIPTION("ASoC CPCAP codec driver");