Lines Matching +full:spk +full:- +full:fmt
1 // SPDX-License-Identifier: GPL-2.0
3 // rk3228_codec.c -- rk3228 ALSA Soc Audio driver
22 * 0: -39dB
58 regmap_write(rk3228->regmap, CODEC_RESET, 0); in rk3228_codec_reset()
60 regmap_write(rk3228->regmap, CODEC_RESET, 0x03); in rk3228_codec_reset()
66 unsigned int fmt) in rk3228_set_dai_fmt() argument
68 struct snd_soc_component *component = dai->component; in rk3228_set_dai_fmt()
72 switch (fmt & SND_SOC_DAIFMT_MASTER_MASK) { in rk3228_set_dai_fmt()
80 return -EINVAL; in rk3228_set_dai_fmt()
83 regmap_update_bits(rk3228->regmap, DAC_INIT_CTRL1, in rk3228_set_dai_fmt()
87 switch (fmt & SND_SOC_DAIFMT_FORMAT_MASK) { in rk3228_set_dai_fmt()
102 return -EINVAL; in rk3228_set_dai_fmt()
105 regmap_update_bits(rk3228->regmap, DAC_INIT_CTRL2, in rk3228_set_dai_fmt()
112 if (rk3228->spk_en_gpio) in rk3228_analog_output()
113 gpiod_set_value(rk3228->spk_en_gpio, mute); in rk3228_analog_output()
118 struct snd_soc_component *component = dai->component; in rk3228_digital_mute()
127 regmap_update_bits(rk3228->regmap, HPOUT_CTRL, in rk3228_digital_mute()
136 regmap_update_bits(rk3228->regmap, DAC_PRECHARGE_CTRL, in rk3228_codec_power_on()
139 regmap_update_bits(rk3228->regmap, DAC_PRECHARGE_CTRL, in rk3228_codec_power_on()
152 regmap_update_bits(rk3228->regmap, DAC_PRECHARGE_CTRL, in rk3228_codec_power_off()
155 regmap_update_bits(rk3228->regmap, DAC_PRECHARGE_CTRL, in rk3228_codec_power_off()
200 regmap_update_bits(rk3228->regmap, DAC_PRECHARGE_CTRL, in rk3228_codec_open_playback()
205 regmap_update_bits(rk3228->regmap, in rk3228_codec_open_playback()
212 msleep(rk3228->spk_depop_time); in rk3228_codec_open_playback()
215 regmap_update_bits(rk3228->regmap, HPOUTL_GAIN_CTRL, in rk3228_codec_open_playback()
217 regmap_update_bits(rk3228->regmap, HPOUTR_GAIN_CTRL, in rk3228_codec_open_playback()
258 regmap_update_bits(rk3228->regmap, HPOUTL_GAIN_CTRL, in rk3228_codec_close_playback()
260 regmap_update_bits(rk3228->regmap, HPOUTR_GAIN_CTRL, in rk3228_codec_close_playback()
264 regmap_update_bits(rk3228->regmap, in rk3228_codec_close_playback()
271 regmap_update_bits(rk3228->regmap, DAC_PRECHARGE_CTRL, in rk3228_codec_close_playback()
281 struct snd_soc_component *component = dai->component; in rk3228_hw_params()
299 return -EINVAL; in rk3228_hw_params()
302 regmap_update_bits(rk3228->regmap, DAC_INIT_CTRL2, DAC_VDL_MASK, val); in rk3228_hw_params()
304 regmap_update_bits(rk3228->regmap, DAC_INIT_CTRL3, in rk3228_hw_params()
313 struct snd_soc_component *component = dai->component; in rk3228_pcm_startup()
321 struct snd_soc_component *component = dai->component; in rk3228_pcm_shutdown()
337 .name = "rk3228-hifi",
429 { .compatible = "rockchip,rk3228-codec", },
437 struct device_node *rk3228_np = pdev->dev.of_node; in rk3228_platform_probe()
443 rk3228 = devm_kzalloc(&pdev->dev, sizeof(*rk3228), GFP_KERNEL); in rk3228_platform_probe()
445 return -ENOMEM; in rk3228_platform_probe()
447 rk3228->mclk = devm_clk_get(&pdev->dev, "mclk"); in rk3228_platform_probe()
448 if (PTR_ERR(rk3228->mclk) == -EPROBE_DEFER) in rk3228_platform_probe()
449 return -EPROBE_DEFER; in rk3228_platform_probe()
451 rk3228->pclk = devm_clk_get(&pdev->dev, "pclk"); in rk3228_platform_probe()
452 if (IS_ERR(rk3228->pclk)) in rk3228_platform_probe()
453 return PTR_ERR(rk3228->pclk); in rk3228_platform_probe()
455 rk3228->sclk = devm_clk_get(&pdev->dev, "sclk"); in rk3228_platform_probe()
456 if (IS_ERR(rk3228->sclk)) in rk3228_platform_probe()
457 return PTR_ERR(rk3228->sclk); in rk3228_platform_probe()
459 rk3228->spk_en_gpio = devm_gpiod_get_optional(&pdev->dev, in rk3228_platform_probe()
460 "spk-en", in rk3228_platform_probe()
462 if (IS_ERR(rk3228->spk_en_gpio)) in rk3228_platform_probe()
463 return PTR_ERR(rk3228->spk_en_gpio); in rk3228_platform_probe()
465 ret = of_property_read_u32(rk3228_np, "spk-depop-time-ms", in rk3228_platform_probe()
466 &rk3228->spk_depop_time); in rk3228_platform_probe()
468 dev_info(&pdev->dev, "spk_depop_time use default value.\n"); in rk3228_platform_probe()
469 rk3228->spk_depop_time = 100; in rk3228_platform_probe()
473 base = devm_ioremap_resource(&pdev->dev, res); in rk3228_platform_probe()
477 ret = clk_prepare_enable(rk3228->mclk); in rk3228_platform_probe()
481 ret = clk_prepare_enable(rk3228->pclk); in rk3228_platform_probe()
485 ret = clk_prepare_enable(rk3228->sclk); in rk3228_platform_probe()
489 clk_set_rate(rk3228->sclk, INITIAL_FREQ); in rk3228_platform_probe()
491 rk3228->regmap = devm_regmap_init_mmio(&pdev->dev, base, in rk3228_platform_probe()
493 if (IS_ERR(rk3228->regmap)) { in rk3228_platform_probe()
494 ret = PTR_ERR(rk3228->regmap); in rk3228_platform_probe()
500 ret = devm_snd_soc_register_component(&pdev->dev, &soc_codec_dev_rk3228, in rk3228_platform_probe()
506 clk_disable_unprepare(rk3228->sclk); in rk3228_platform_probe()
508 clk_disable_unprepare(rk3228->pclk); in rk3228_platform_probe()
510 clk_disable_unprepare(rk3228->mclk); in rk3228_platform_probe()
519 if (!IS_ERR(rk3228->mclk)) in rk3228_platform_remove()
520 clk_disable_unprepare(rk3228->mclk); in rk3228_platform_remove()
522 if (!IS_ERR(rk3228->pclk)) in rk3228_platform_remove()
523 clk_disable_unprepare(rk3228->pclk); in rk3228_platform_remove()
525 if (!IS_ERR(rk3228->sclk)) in rk3228_platform_remove()
526 clk_disable_unprepare(rk3228->sclk); in rk3228_platform_remove()
533 .name = "rk3228-codec",
541 MODULE_AUTHOR("Sugar Zhang <sugar.zhang@rock-chips.com>");