Messages in this thread | | | Date | Wed, 20 Jul 2022 13:04:00 +0100 | From | Paul Cercueil <> | 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 <aidanmacdonald.0x0@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@gmail.com>
Reviewed-by: Paul Cercueil <paul@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 >
| |