aboutsummaryrefslogtreecommitdiffstats
path: root/sound/soc/s3c24xx/s3c-i2s-v2.c
diff options
context:
space:
mode:
Diffstat (limited to 'sound/soc/s3c24xx/s3c-i2s-v2.c')
-rw-r--r--sound/soc/s3c24xx/s3c-i2s-v2.c50
1 files changed, 15 insertions, 35 deletions
diff --git a/sound/soc/s3c24xx/s3c-i2s-v2.c b/sound/soc/s3c24xx/s3c-i2s-v2.c
index 64376b2aac73..f4fbc0e61733 100644
--- a/sound/soc/s3c24xx/s3c-i2s-v2.c
+++ b/sound/soc/s3c24xx/s3c-i2s-v2.c
@@ -49,7 +49,7 @@
49 49
50static inline struct s3c_i2sv2_info *to_info(struct snd_soc_dai *cpu_dai) 50static inline struct s3c_i2sv2_info *to_info(struct snd_soc_dai *cpu_dai)
51{ 51{
52 return cpu_dai->private_data; 52 return snd_soc_dai_get_drvdata(cpu_dai);
53} 53}
54 54
55#define bit_set(v, b) (((v) & (b)) ? 1 : 0) 55#define bit_set(v, b) (((v) & (b)) ? 1 : 0)
@@ -307,11 +307,9 @@ static int s3c2412_i2s_set_fmt(struct snd_soc_dai *cpu_dai,
307 307
308static int s3c_i2sv2_hw_params(struct snd_pcm_substream *substream, 308static int s3c_i2sv2_hw_params(struct snd_pcm_substream *substream,
309 struct snd_pcm_hw_params *params, 309 struct snd_pcm_hw_params *params,
310 struct snd_soc_dai *socdai) 310 struct snd_soc_dai *dai)
311{ 311{
312 struct snd_soc_pcm_runtime *rtd = substream->private_data; 312 struct s3c_i2sv2_info *i2s = to_info(dai);
313 struct snd_soc_dai_link *dai = rtd->dai;
314 struct s3c_i2sv2_info *i2s = to_info(dai->cpu_dai);
315 struct s3c_dma_params *dma_data; 313 struct s3c_dma_params *dma_data;
316 u32 iismod; 314 u32 iismod;
317 315
@@ -322,7 +320,7 @@ static int s3c_i2sv2_hw_params(struct snd_pcm_substream *substream,
322 else 320 else
323 dma_data = i2s->dma_capture; 321 dma_data = i2s->dma_capture;
324 322
325 snd_soc_dai_set_dma_data(dai->cpu_dai, substream, dma_data); 323 snd_soc_dai_set_dma_data(dai, substream, dma_data);
326 324
327 /* Working copies of register */ 325 /* Working copies of register */
328 iismod = readl(i2s->regs + S3C2412_IISMOD); 326 iismod = readl(i2s->regs + S3C2412_IISMOD);
@@ -396,12 +394,12 @@ static int s3c2412_i2s_trigger(struct snd_pcm_substream *substream, int cmd,
396 struct snd_soc_dai *dai) 394 struct snd_soc_dai *dai)
397{ 395{
398 struct snd_soc_pcm_runtime *rtd = substream->private_data; 396 struct snd_soc_pcm_runtime *rtd = substream->private_data;
399 struct s3c_i2sv2_info *i2s = to_info(rtd->dai->cpu_dai); 397 struct s3c_i2sv2_info *i2s = to_info(rtd->cpu_dai);
400 int capture = (substream->stream == SNDRV_PCM_STREAM_CAPTURE); 398 int capture = (substream->stream == SNDRV_PCM_STREAM_CAPTURE);
401 unsigned long irqs; 399 unsigned long irqs;
402 int ret = 0; 400 int ret = 0;
403 struct s3c_dma_params *dma_data = 401 struct s3c_dma_params *dma_data =
404 snd_soc_dai_get_dma_data(rtd->dai->cpu_dai, substream); 402 snd_soc_dai_get_dma_data(rtd->cpu_dai, substream);
405 403
406 pr_debug("Entered %s\n", __func__); 404 pr_debug("Entered %s\n", __func__);
407 405
@@ -640,36 +638,17 @@ int s3c_i2sv2_iis_calc_rate(struct s3c_i2sv2_rate_calc *info,
640} 638}
641EXPORT_SYMBOL_GPL(s3c_i2sv2_iis_calc_rate); 639EXPORT_SYMBOL_GPL(s3c_i2sv2_iis_calc_rate);
642 640
643int s3c_i2sv2_probe(struct platform_device *pdev, 641int s3c_i2sv2_probe(struct snd_soc_dai *dai,
644 struct snd_soc_dai *dai,
645 struct s3c_i2sv2_info *i2s, 642 struct s3c_i2sv2_info *i2s,
646 unsigned long base) 643 unsigned long base)
647{ 644{
648 struct device *dev = &pdev->dev; 645 struct device *dev = dai->dev;
649 unsigned int iismod; 646 unsigned int iismod;
650 647
651 i2s->dev = dev; 648 i2s->dev = dev;
652 649
653 /* record our i2s structure for later use in the callbacks */ 650 /* record our i2s structure for later use in the callbacks */
654 dai->private_data = i2s; 651 snd_soc_dai_set_drvdata(dai, i2s);
655
656 if (!base) {
657 struct resource *res = platform_get_resource(pdev,
658 IORESOURCE_MEM,
659 0);
660 if (!res) {
661 dev_err(dev, "Unable to get register resource\n");
662 return -ENXIO;
663 }
664
665 if (!request_mem_region(res->start, resource_size(res),
666 "s3c64xx-i2s-v4")) {
667 dev_err(dev, "Unable to request register region\n");
668 return -EBUSY;
669 }
670
671 base = res->start;
672 }
673 652
674 i2s->regs = ioremap(base, 0x100); 653 i2s->regs = ioremap(base, 0x100);
675 if (i2s->regs == NULL) { 654 if (i2s->regs == NULL) {
@@ -752,9 +731,10 @@ static int s3c2412_i2s_resume(struct snd_soc_dai *dai)
752#define s3c2412_i2s_resume NULL 731#define s3c2412_i2s_resume NULL
753#endif 732#endif
754 733
755int s3c_i2sv2_register_dai(struct snd_soc_dai *dai) 734int s3c_i2sv2_register_dai(struct device *dev, int id,
735 struct snd_soc_dai_driver *drv)
756{ 736{
757 struct snd_soc_dai_ops *ops = dai->ops; 737 struct snd_soc_dai_ops *ops = drv->ops;
758 738
759 ops->trigger = s3c2412_i2s_trigger; 739 ops->trigger = s3c2412_i2s_trigger;
760 if (!ops->hw_params) 740 if (!ops->hw_params)
@@ -767,10 +747,10 @@ int s3c_i2sv2_register_dai(struct snd_soc_dai *dai)
767 if (!ops->delay) 747 if (!ops->delay)
768 ops->delay = s3c2412_i2s_delay; 748 ops->delay = s3c2412_i2s_delay;
769 749
770 dai->suspend = s3c2412_i2s_suspend; 750 drv->suspend = s3c2412_i2s_suspend;
771 dai->resume = s3c2412_i2s_resume; 751 drv->resume = s3c2412_i2s_resume;
772 752
773 return snd_soc_register_dai(dai); 753 return snd_soc_register_dai(dev, id, drv);
774} 754}
775EXPORT_SYMBOL_GPL(s3c_i2sv2_register_dai); 755EXPORT_SYMBOL_GPL(s3c_i2sv2_register_dai);
776 756