[PATCH v4 11/11] ASoC: jz4740-i2s: Refactor DAI probe/remove ops as component ops
Paul Cercueil
paul at crapouillou.net
Wed Jul 20 14:04:00 CEST 2022
Hi Aidan,
Le ven., juil. 8 2022 at 17:02:44 +0100, Aidan MacDonald
<aidanmacdonald.0x0 at gmail.com> a écrit :
> Move most of the DAI probe/remove logic into component ops.
> This makes things more consistent because the AIC clock is
> now managed solely from the component side. And it makes it
> easier to add codec switching support later on.
>
> Signed-off-by: Aidan MacDonald <aidanmacdonald.0x0 at gmail.com>
Reviewed-by: Paul Cercueil <paul at crapouillou.net>
Cheers,
-Paul
> ---
> sound/soc/jz4740/jz4740-i2s.c | 54
> +++++++++++++++++++----------------
> 1 file changed, 30 insertions(+), 24 deletions(-)
>
> diff --git a/sound/soc/jz4740/jz4740-i2s.c
> b/sound/soc/jz4740/jz4740-i2s.c
> index 5db73f12efcf..d99a19bc5166 100644
> --- a/sound/soc/jz4740/jz4740-i2s.c
> +++ b/sound/soc/jz4740/jz4740-i2s.c
> @@ -306,32 +306,10 @@ static int jz4740_i2s_set_sysclk(struct
> snd_soc_dai *dai, int clk_id,
> static int jz4740_i2s_dai_probe(struct snd_soc_dai *dai)
> {
> struct jz4740_i2s *i2s = snd_soc_dai_get_drvdata(dai);
> - int ret;
> -
> - ret = clk_prepare_enable(i2s->clk_aic);
> - if (ret)
> - return ret;
>
> snd_soc_dai_init_dma_data(dai, &i2s->playback_dma_data,
> &i2s->capture_dma_data);
>
> - regmap_write(i2s->regmap, JZ_REG_AIC_CONF, JZ_AIC_CONF_RESET);
> -
> - regmap_write(i2s->regmap, JZ_REG_AIC_CONF,
> - JZ_AIC_CONF_OVERFLOW_PLAY_LAST |
> - JZ_AIC_CONF_I2S | JZ_AIC_CONF_INTERNAL_CODEC);
> -
> - regmap_field_write(i2s->field_rx_fifo_thresh, 7);
> - regmap_field_write(i2s->field_tx_fifo_thresh, 8);
> -
> - return 0;
> -}
> -
> -static int jz4740_i2s_dai_remove(struct snd_soc_dai *dai)
> -{
> - struct jz4740_i2s *i2s = snd_soc_dai_get_drvdata(dai);
> -
> - clk_disable_unprepare(i2s->clk_aic);
> return 0;
> }
>
> @@ -351,7 +329,6 @@ static const struct snd_soc_dai_ops
> jz4740_i2s_dai_ops = {
>
> static struct snd_soc_dai_driver jz4740_i2s_dai = {
> .probe = jz4740_i2s_dai_probe,
> - .remove = jz4740_i2s_dai_remove,
> .playback = {
> .channels_min = 1,
> .channels_max = 2,
> @@ -389,7 +366,6 @@ static const struct i2s_soc_info
> jz4760_i2s_soc_info = {
>
> static struct snd_soc_dai_driver jz4770_i2s_dai = {
> .probe = jz4740_i2s_dai_probe,
> - .remove = jz4740_i2s_dai_remove,
> .playback = {
> .channels_min = 1,
> .channels_max = 2,
> @@ -459,8 +435,38 @@ static int jz4740_i2s_resume(struct
> snd_soc_component *component)
> return 0;
> }
>
> +static int jz4740_i2s_probe(struct snd_soc_component *component)
> +{
> + struct jz4740_i2s *i2s = snd_soc_component_get_drvdata(component);
> + int ret;
> +
> + ret = clk_prepare_enable(i2s->clk_aic);
> + if (ret)
> + return ret;
> +
> + regmap_write(i2s->regmap, JZ_REG_AIC_CONF, JZ_AIC_CONF_RESET);
> +
> + regmap_write(i2s->regmap, JZ_REG_AIC_CONF,
> + JZ_AIC_CONF_OVERFLOW_PLAY_LAST |
> + JZ_AIC_CONF_I2S | JZ_AIC_CONF_INTERNAL_CODEC);
> +
> + regmap_field_write(i2s->field_rx_fifo_thresh, 7);
> + regmap_field_write(i2s->field_tx_fifo_thresh, 8);
> +
> + return 0;
> +}
> +
> +static void jz4740_i2s_remove(struct snd_soc_component *component)
> +{
> + struct jz4740_i2s *i2s = snd_soc_component_get_drvdata(component);
> +
> + clk_disable_unprepare(i2s->clk_aic);
> +}
> +
> static const struct snd_soc_component_driver jz4740_i2s_component = {
> .name = "jz4740-i2s",
> + .probe = jz4740_i2s_probe,
> + .remove = jz4740_i2s_remove,
> .suspend = jz4740_i2s_suspend,
> .resume = jz4740_i2s_resume,
> .legacy_dai_naming = 1,
> --
> 2.35.1
>
More information about the Alsa-devel
mailing list