Messages in this thread | | | Subject | Re: [PATCH] ASoC: atmel_ssc_dai: distinguish the different SSC | From | "Wu, Songjun" <> | Date | Tue, 16 Feb 2016 10:54:21 +0800 |
| |
Any comments on this patch?
On 1/13/2016 23:08, Nicolas Ferre wrote: > Le 13/01/2016 07:35, Songjun Wu a écrit : >> Cpu_dai id always equals 0, can't distinguish the >> different SSC. Use platform_device id to record >> and distinguish the different SSC. >> >> Signed-off-by: Songjun Wu <songjun.wu@atmel.com> > > It seems okay: > Acked-by: Nicolas Ferre <nicolas.ferre@atmel.com> > >> --- >> >> drivers/misc/atmel-ssc.c | 1 + >> sound/soc/atmel/atmel_ssc_dai.c | 27 ++++++++++++++++++--------- >> 2 files changed, 19 insertions(+), 9 deletions(-) >> >> diff --git a/drivers/misc/atmel-ssc.c b/drivers/misc/atmel-ssc.c >> index e11a0bd..0516ecd 100644 >> --- a/drivers/misc/atmel-ssc.c >> +++ b/drivers/misc/atmel-ssc.c >> @@ -34,6 +34,7 @@ struct ssc_device *ssc_request(unsigned int ssc_num) >> if (ssc->pdev->dev.of_node) { >> if (of_alias_get_id(ssc->pdev->dev.of_node, "ssc") >> == ssc_num) { >> + ssc->pdev->id = ssc_num; >> ssc_valid = 1; >> break; >> } >> diff --git a/sound/soc/atmel/atmel_ssc_dai.c b/sound/soc/atmel/atmel_ssc_dai.c >> index ba8def5..2768970 100644 >> --- a/sound/soc/atmel/atmel_ssc_dai.c >> +++ b/sound/soc/atmel/atmel_ssc_dai.c >> @@ -285,7 +285,8 @@ static int atmel_ssc_hw_rule_rate(struct snd_pcm_hw_params *params, >> static int atmel_ssc_startup(struct snd_pcm_substream *substream, >> struct snd_soc_dai *dai) >> { >> - struct atmel_ssc_info *ssc_p = &ssc_info[dai->id]; >> + struct platform_device *pdev = to_platform_device(dai->dev); >> + struct atmel_ssc_info *ssc_p = &ssc_info[pdev->id]; >> struct atmel_pcm_dma_params *dma_params; >> int dir, dir_mask; >> int ret; >> @@ -346,7 +347,8 @@ static int atmel_ssc_startup(struct snd_pcm_substream *substream, >> static void atmel_ssc_shutdown(struct snd_pcm_substream *substream, >> struct snd_soc_dai *dai) >> { >> - struct atmel_ssc_info *ssc_p = &ssc_info[dai->id]; >> + struct platform_device *pdev = to_platform_device(dai->dev); >> + struct atmel_ssc_info *ssc_p = &ssc_info[pdev->id]; >> struct atmel_pcm_dma_params *dma_params; >> int dir, dir_mask; >> >> @@ -392,7 +394,8 @@ static void atmel_ssc_shutdown(struct snd_pcm_substream *substream, >> static int atmel_ssc_set_dai_fmt(struct snd_soc_dai *cpu_dai, >> unsigned int fmt) >> { >> - struct atmel_ssc_info *ssc_p = &ssc_info[cpu_dai->id]; >> + struct platform_device *pdev = to_platform_device(cpu_dai->dev); >> + struct atmel_ssc_info *ssc_p = &ssc_info[pdev->id]; >> >> ssc_p->daifmt = fmt; >> return 0; >> @@ -404,7 +407,8 @@ static int atmel_ssc_set_dai_fmt(struct snd_soc_dai *cpu_dai, >> static int atmel_ssc_set_dai_clkdiv(struct snd_soc_dai *cpu_dai, >> int div_id, int div) >> { >> - struct atmel_ssc_info *ssc_p = &ssc_info[cpu_dai->id]; >> + struct platform_device *pdev = to_platform_device(cpu_dai->dev); >> + struct atmel_ssc_info *ssc_p = &ssc_info[pdev->id]; >> >> switch (div_id) { >> case ATMEL_SSC_CMR_DIV: >> @@ -445,7 +449,8 @@ static int atmel_ssc_hw_params(struct snd_pcm_substream *substream, >> struct snd_pcm_hw_params *params, >> struct snd_soc_dai *dai) >> { >> - int id = dai->id; >> + struct platform_device *pdev = to_platform_device(dai->dev); >> + int id = pdev->id; >> struct atmel_ssc_info *ssc_p = &ssc_info[id]; >> struct ssc_device *ssc = ssc_p->ssc; >> struct atmel_pcm_dma_params *dma_params; >> @@ -772,7 +777,8 @@ static int atmel_ssc_hw_params(struct snd_pcm_substream *substream, >> static int atmel_ssc_prepare(struct snd_pcm_substream *substream, >> struct snd_soc_dai *dai) >> { >> - struct atmel_ssc_info *ssc_p = &ssc_info[dai->id]; >> + struct platform_device *pdev = to_platform_device(dai->dev); >> + struct atmel_ssc_info *ssc_p = &ssc_info[pdev->id]; >> struct atmel_pcm_dma_params *dma_params; >> int dir; >> >> @@ -795,7 +801,8 @@ static int atmel_ssc_prepare(struct snd_pcm_substream *substream, >> static int atmel_ssc_trigger(struct snd_pcm_substream *substream, >> int cmd, struct snd_soc_dai *dai) >> { >> - struct atmel_ssc_info *ssc_p = &ssc_info[dai->id]; >> + struct platform_device *pdev = to_platform_device(dai->dev); >> + struct atmel_ssc_info *ssc_p = &ssc_info[pdev->id]; >> struct atmel_pcm_dma_params *dma_params; >> int dir; >> >> @@ -824,11 +831,12 @@ static int atmel_ssc_trigger(struct snd_pcm_substream *substream, >> static int atmel_ssc_suspend(struct snd_soc_dai *cpu_dai) >> { >> struct atmel_ssc_info *ssc_p; >> + struct platform_device *pdev = to_platform_device(cpu_dai->dev); >> >> if (!cpu_dai->active) >> return 0; >> >> - ssc_p = &ssc_info[cpu_dai->id]; >> + ssc_p = &ssc_info[pdev->id]; >> >> /* Save the status register before disabling transmit and receive */ >> ssc_p->ssc_state.ssc_sr = ssc_readl(ssc_p->ssc->regs, SR); >> @@ -852,12 +860,13 @@ static int atmel_ssc_suspend(struct snd_soc_dai *cpu_dai) >> static int atmel_ssc_resume(struct snd_soc_dai *cpu_dai) >> { >> struct atmel_ssc_info *ssc_p; >> + struct platform_device *pdev = to_platform_device(cpu_dai->dev); >> u32 cr; >> >> if (!cpu_dai->active) >> return 0; >> >> - ssc_p = &ssc_info[cpu_dai->id]; >> + ssc_p = &ssc_info[pdev->id]; >> >> /* restore SSC register settings */ >> ssc_writel(ssc_p->ssc->regs, TFMR, ssc_p->ssc_state.ssc_tfmr); >> > >
| |