2022-07-08 16:18:06

by Aidan MacDonald

[permalink] [raw]
Subject: [PATCH v4 11/11] ASoC: jz4740-i2s: Refactor DAI probe/remove ops as component ops

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 <[email protected]>
---
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


2022-07-20 12:53:14

by Paul Cercueil

[permalink] [raw]
Subject: Re: [PATCH v4 11/11] ASoC: jz4740-i2s: Refactor DAI probe/remove ops as component ops

Hi Aidan,

Le ven., juil. 8 2022 at 17:02:44 +0100, Aidan MacDonald
<[email protected]> 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 <[email protected]>

Reviewed-by: Paul Cercueil <[email protected]>

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
>