Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

ASoC: atmel_ssc_dai: distinguish the different SSC

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>
Signed-off-by: Nicolas Ferre <nicolas.ferre@atmel.com>
Signed-off-by: Mark Brown <broonie@kernel.org>

authored by

Songjun Wu and committed by
Mark Brown
c706f2e5 92e963f5

+19 -9
+1
drivers/misc/atmel-ssc.c
··· 34 34 if (ssc->pdev->dev.of_node) { 35 35 if (of_alias_get_id(ssc->pdev->dev.of_node, "ssc") 36 36 == ssc_num) { 37 + ssc->pdev->id = ssc_num; 37 38 ssc_valid = 1; 38 39 break; 39 40 }
+18 -9
sound/soc/atmel/atmel_ssc_dai.c
··· 285 285 static int atmel_ssc_startup(struct snd_pcm_substream *substream, 286 286 struct snd_soc_dai *dai) 287 287 { 288 - struct atmel_ssc_info *ssc_p = &ssc_info[dai->id]; 288 + struct platform_device *pdev = to_platform_device(dai->dev); 289 + struct atmel_ssc_info *ssc_p = &ssc_info[pdev->id]; 289 290 struct atmel_pcm_dma_params *dma_params; 290 291 int dir, dir_mask; 291 292 int ret; ··· 347 346 static void atmel_ssc_shutdown(struct snd_pcm_substream *substream, 348 347 struct snd_soc_dai *dai) 349 348 { 350 - struct atmel_ssc_info *ssc_p = &ssc_info[dai->id]; 349 + struct platform_device *pdev = to_platform_device(dai->dev); 350 + struct atmel_ssc_info *ssc_p = &ssc_info[pdev->id]; 351 351 struct atmel_pcm_dma_params *dma_params; 352 352 int dir, dir_mask; 353 353 ··· 394 392 static int atmel_ssc_set_dai_fmt(struct snd_soc_dai *cpu_dai, 395 393 unsigned int fmt) 396 394 { 397 - struct atmel_ssc_info *ssc_p = &ssc_info[cpu_dai->id]; 395 + struct platform_device *pdev = to_platform_device(cpu_dai->dev); 396 + struct atmel_ssc_info *ssc_p = &ssc_info[pdev->id]; 398 397 399 398 ssc_p->daifmt = fmt; 400 399 return 0; ··· 407 404 static int atmel_ssc_set_dai_clkdiv(struct snd_soc_dai *cpu_dai, 408 405 int div_id, int div) 409 406 { 410 - struct atmel_ssc_info *ssc_p = &ssc_info[cpu_dai->id]; 407 + struct platform_device *pdev = to_platform_device(cpu_dai->dev); 408 + struct atmel_ssc_info *ssc_p = &ssc_info[pdev->id]; 411 409 412 410 switch (div_id) { 413 411 case ATMEL_SSC_CMR_DIV: ··· 449 445 struct snd_pcm_hw_params *params, 450 446 struct snd_soc_dai *dai) 451 447 { 452 - int id = dai->id; 448 + struct platform_device *pdev = to_platform_device(dai->dev); 449 + int id = pdev->id; 453 450 struct atmel_ssc_info *ssc_p = &ssc_info[id]; 454 451 struct ssc_device *ssc = ssc_p->ssc; 455 452 struct atmel_pcm_dma_params *dma_params; ··· 777 772 static int atmel_ssc_prepare(struct snd_pcm_substream *substream, 778 773 struct snd_soc_dai *dai) 779 774 { 780 - struct atmel_ssc_info *ssc_p = &ssc_info[dai->id]; 775 + struct platform_device *pdev = to_platform_device(dai->dev); 776 + struct atmel_ssc_info *ssc_p = &ssc_info[pdev->id]; 781 777 struct atmel_pcm_dma_params *dma_params; 782 778 int dir; 783 779 ··· 801 795 static int atmel_ssc_trigger(struct snd_pcm_substream *substream, 802 796 int cmd, struct snd_soc_dai *dai) 803 797 { 804 - struct atmel_ssc_info *ssc_p = &ssc_info[dai->id]; 798 + struct platform_device *pdev = to_platform_device(dai->dev); 799 + struct atmel_ssc_info *ssc_p = &ssc_info[pdev->id]; 805 800 struct atmel_pcm_dma_params *dma_params; 806 801 int dir; 807 802 ··· 831 824 static int atmel_ssc_suspend(struct snd_soc_dai *cpu_dai) 832 825 { 833 826 struct atmel_ssc_info *ssc_p; 827 + struct platform_device *pdev = to_platform_device(cpu_dai->dev); 834 828 835 829 if (!cpu_dai->active) 836 830 return 0; 837 831 838 - ssc_p = &ssc_info[cpu_dai->id]; 832 + ssc_p = &ssc_info[pdev->id]; 839 833 840 834 /* Save the status register before disabling transmit and receive */ 841 835 ssc_p->ssc_state.ssc_sr = ssc_readl(ssc_p->ssc->regs, SR); ··· 860 852 static int atmel_ssc_resume(struct snd_soc_dai *cpu_dai) 861 853 { 862 854 struct atmel_ssc_info *ssc_p; 855 + struct platform_device *pdev = to_platform_device(cpu_dai->dev); 863 856 u32 cr; 864 857 865 858 if (!cpu_dai->active) 866 859 return 0; 867 860 868 - ssc_p = &ssc_info[cpu_dai->id]; 861 + ssc_p = &ssc_info[pdev->id]; 869 862 870 863 /* restore SSC register settings */ 871 864 ssc_writel(ssc_p->ssc->regs, TFMR, ssc_p->ssc_state.ssc_tfmr);