summaryrefslogtreecommitdiffstats
path: root/sound
diff options
context:
space:
mode:
authorKuninori Morimoto <kuninori.morimoto.gx@renesas.com>2015-06-15 02:27:13 -0400
committerMark Brown <broonie@kernel.org>2015-06-16 07:34:04 -0400
commit88c61cff4dab7c23a101b12041c99da61df305dd (patch)
treee9c0a5e23ce6f4373102a9e90f139bf67ed2c929 /sound
parentbfc0cfe6b7acb1d0c318f9bc41fcb895a941f83d (diff)
ASoC: rsnd: don't use rsnd_mod_to_io() on rsnd_src_xxx()
Each Renesas sound mod (= SSI/SRC/DVC) might be called from many paths if it supports MIXer. In such case, mod <-> io is no longer 1:1 relationship. This patch removes rsnd_mod_to_io() from rsnd_src_xxx() and related function. Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com> Tested-by: Keita Kobayashi <keita.kobayashi.ym@renesas.com> Signed-off-by: Mark Brown <broonie@kernel.org>
Diffstat (limited to 'sound')
-rw-r--r--sound/soc/sh/rcar/src.c57
1 files changed, 32 insertions, 25 deletions
diff --git a/sound/soc/sh/rcar/src.c b/sound/soc/sh/rcar/src.c
index 62216196af9c..bc122ede3254 100644
--- a/sound/soc/sh/rcar/src.c
+++ b/sound/soc/sh/rcar/src.c
@@ -236,10 +236,9 @@ int rsnd_src_ssi_irq_disable(struct rsnd_mod *ssi_mod)
236 return 0; 236 return 0;
237} 237}
238 238
239static u32 rsnd_src_convert_rate(struct rsnd_src *src) 239static u32 rsnd_src_convert_rate(struct rsnd_dai_stream *io,
240 struct rsnd_src *src)
240{ 241{
241 struct rsnd_mod *mod = &src->mod;
242 struct rsnd_dai_stream *io = rsnd_mod_to_io(mod);
243 struct snd_pcm_runtime *runtime = rsnd_io_to_runtime(io); 242 struct snd_pcm_runtime *runtime = rsnd_io_to_runtime(io);
244 u32 convert_rate; 243 u32 convert_rate;
245 244
@@ -275,7 +274,7 @@ unsigned int rsnd_src_get_ssi_rate(struct rsnd_priv *priv,
275 * return convert rate if SRC is used, 274 * return convert rate if SRC is used,
276 * otherwise, return runtime->rate as usual 275 * otherwise, return runtime->rate as usual
277 */ 276 */
278 rate = rsnd_src_convert_rate(src); 277 rate = rsnd_src_convert_rate(io, src);
279 } 278 }
280 279
281 if (!rate) 280 if (!rate)
@@ -289,7 +288,7 @@ static int rsnd_src_set_convert_rate(struct rsnd_mod *mod,
289{ 288{
290 struct snd_pcm_runtime *runtime = rsnd_io_to_runtime(io); 289 struct snd_pcm_runtime *runtime = rsnd_io_to_runtime(io);
291 struct rsnd_src *src = rsnd_mod_to_src(mod); 290 struct rsnd_src *src = rsnd_mod_to_src(mod);
292 u32 convert_rate = rsnd_src_convert_rate(src); 291 u32 convert_rate = rsnd_src_convert_rate(io, src);
293 u32 fsrate = 0; 292 u32 fsrate = 0;
294 293
295 if (convert_rate) 294 if (convert_rate)
@@ -414,9 +413,9 @@ static int rsnd_src_stop(struct rsnd_mod *mod)
414/* 413/*
415 * Gen1 functions 414 * Gen1 functions
416 */ 415 */
417static int rsnd_src_set_route_gen1(struct rsnd_mod *mod) 416static int rsnd_src_set_route_gen1(struct rsnd_dai_stream *io,
417 struct rsnd_mod *mod)
418{ 418{
419 struct rsnd_dai_stream *io = rsnd_mod_to_io(mod);
420 struct src_route_config { 419 struct src_route_config {
421 u32 mask; 420 u32 mask;
422 int shift; 421 int shift;
@@ -451,13 +450,13 @@ static int rsnd_src_set_route_gen1(struct rsnd_mod *mod)
451 return 0; 450 return 0;
452} 451}
453 452
454static int rsnd_src_set_convert_timing_gen1(struct rsnd_mod *mod) 453static int rsnd_src_set_convert_timing_gen1(struct rsnd_dai_stream *io,
454 struct rsnd_mod *mod)
455{ 455{
456 struct rsnd_dai_stream *io = rsnd_mod_to_io(mod);
457 struct rsnd_priv *priv = rsnd_mod_to_priv(mod); 456 struct rsnd_priv *priv = rsnd_mod_to_priv(mod);
458 struct rsnd_src *src = rsnd_mod_to_src(mod); 457 struct rsnd_src *src = rsnd_mod_to_src(mod);
459 struct snd_pcm_runtime *runtime = rsnd_io_to_runtime(io); 458 struct snd_pcm_runtime *runtime = rsnd_io_to_runtime(io);
460 u32 convert_rate = rsnd_src_convert_rate(src); 459 u32 convert_rate = rsnd_src_convert_rate(io, src);
461 u32 mask; 460 u32 mask;
462 u32 val; 461 u32 val;
463 int shift; 462 int shift;
@@ -527,7 +526,7 @@ static int rsnd_src_set_convert_rate_gen1(struct rsnd_mod *mod,
527 rsnd_mod_read(mod, SRC_IFSVR) / 100 * 98); 526 rsnd_mod_read(mod, SRC_IFSVR) / 100 * 98);
528 527
529 /* Gen1/Gen2 are not compatible */ 528 /* Gen1/Gen2 are not compatible */
530 if (rsnd_src_convert_rate(src)) 529 if (rsnd_src_convert_rate(io, src))
531 rsnd_mod_write(mod, SRC_ROUTE_MODE0, 1); 530 rsnd_mod_write(mod, SRC_ROUTE_MODE0, 1);
532 531
533 /* no SRC_BFSSR settings, since SRC_SRCCR::BUFMD is 0 */ 532 /* no SRC_BFSSR settings, since SRC_SRCCR::BUFMD is 0 */
@@ -545,7 +544,7 @@ static int rsnd_src_init_gen1(struct rsnd_mod *mod,
545 if (ret < 0) 544 if (ret < 0)
546 return ret; 545 return ret;
547 546
548 ret = rsnd_src_set_route_gen1(mod); 547 ret = rsnd_src_set_route_gen1(io, mod);
549 if (ret < 0) 548 if (ret < 0)
550 return ret; 549 return ret;
551 550
@@ -553,7 +552,7 @@ static int rsnd_src_init_gen1(struct rsnd_mod *mod,
553 if (ret < 0) 552 if (ret < 0)
554 return ret; 553 return ret;
555 554
556 ret = rsnd_src_set_convert_timing_gen1(mod); 555 ret = rsnd_src_set_convert_timing_gen1(io, mod);
557 if (ret < 0) 556 if (ret < 0)
558 return ret; 557 return ret;
559 558
@@ -650,9 +649,9 @@ static bool rsnd_src_error_record_gen2(struct rsnd_mod *mod)
650 return ret; 649 return ret;
651} 650}
652 651
653static int _rsnd_src_start_gen2(struct rsnd_mod *mod) 652static int _rsnd_src_start_gen2(struct rsnd_mod *mod,
653 struct rsnd_dai_stream *io)
654{ 654{
655 struct rsnd_dai_stream *io = rsnd_mod_to_io(mod);
656 u32 val = rsnd_io_to_mod_dvc(io) ? 0x01 : 0x11; 655 u32 val = rsnd_io_to_mod_dvc(io) ? 0x01 : 0x11;
657 656
658 rsnd_mod_write(mod, SRC_CTRL, val); 657 rsnd_mod_write(mod, SRC_CTRL, val);
@@ -677,9 +676,9 @@ static int _rsnd_src_stop_gen2(struct rsnd_mod *mod)
677 return rsnd_src_stop(mod); 676 return rsnd_src_stop(mod);
678} 677}
679 678
680static irqreturn_t rsnd_src_interrupt_gen2(int irq, void *data) 679static void __rsnd_src_interrupt_gen2(struct rsnd_mod *mod,
680 struct rsnd_dai_stream *io)
681{ 681{
682 struct rsnd_mod *mod = data;
683 struct rsnd_priv *priv = rsnd_mod_to_priv(mod); 682 struct rsnd_priv *priv = rsnd_mod_to_priv(mod);
684 683
685 spin_lock(&priv->lock); 684 spin_lock(&priv->lock);
@@ -698,12 +697,20 @@ static irqreturn_t rsnd_src_interrupt_gen2(int irq, void *data)
698 697
699 _rsnd_src_stop_gen2(mod); 698 _rsnd_src_stop_gen2(mod);
700 if (src->err < 1024) 699 if (src->err < 1024)
701 _rsnd_src_start_gen2(mod); 700 _rsnd_src_start_gen2(mod, io);
702 else 701 else
703 dev_warn(dev, "no more SRC restart\n"); 702 dev_warn(dev, "no more SRC restart\n");
704 } 703 }
704
705rsnd_src_interrupt_gen2_out: 705rsnd_src_interrupt_gen2_out:
706 spin_unlock(&priv->lock); 706 spin_unlock(&priv->lock);
707}
708
709static irqreturn_t rsnd_src_interrupt_gen2(int irq, void *data)
710{
711 struct rsnd_mod *mod = data;
712
713 rsnd_mod_interrupt(mod, __rsnd_src_interrupt_gen2);
707 714
708 return IRQ_HANDLED; 715 return IRQ_HANDLED;
709} 716}
@@ -715,7 +722,7 @@ static int rsnd_src_set_convert_rate_gen2(struct rsnd_mod *mod,
715 struct device *dev = rsnd_priv_to_dev(priv); 722 struct device *dev = rsnd_priv_to_dev(priv);
716 struct snd_pcm_runtime *runtime = rsnd_io_to_runtime(io); 723 struct snd_pcm_runtime *runtime = rsnd_io_to_runtime(io);
717 struct rsnd_src *src = rsnd_mod_to_src(mod); 724 struct rsnd_src *src = rsnd_mod_to_src(mod);
718 u32 convert_rate = rsnd_src_convert_rate(src); 725 u32 convert_rate = rsnd_src_convert_rate(io, src);
719 u32 cr, route; 726 u32 cr, route;
720 uint ratio; 727 uint ratio;
721 int ret; 728 int ret;
@@ -769,12 +776,12 @@ static int rsnd_src_set_convert_rate_gen2(struct rsnd_mod *mod,
769 return 0; 776 return 0;
770} 777}
771 778
772static int rsnd_src_set_convert_timing_gen2(struct rsnd_mod *mod) 779static int rsnd_src_set_convert_timing_gen2(struct rsnd_dai_stream *io,
780 struct rsnd_mod *mod)
773{ 781{
774 struct rsnd_dai_stream *io = rsnd_mod_to_io(mod);
775 struct snd_pcm_runtime *runtime = rsnd_io_to_runtime(io); 782 struct snd_pcm_runtime *runtime = rsnd_io_to_runtime(io);
776 struct rsnd_src *src = rsnd_mod_to_src(mod); 783 struct rsnd_src *src = rsnd_mod_to_src(mod);
777 u32 convert_rate = rsnd_src_convert_rate(src); 784 u32 convert_rate = rsnd_src_convert_rate(io, src);
778 int ret; 785 int ret;
779 786
780 if (convert_rate) 787 if (convert_rate)
@@ -840,7 +847,7 @@ static int rsnd_src_init_gen2(struct rsnd_mod *mod,
840 if (ret < 0) 847 if (ret < 0)
841 return ret; 848 return ret;
842 849
843 ret = rsnd_src_set_convert_timing_gen2(mod); 850 ret = rsnd_src_set_convert_timing_gen2(io, mod);
844 if (ret < 0) 851 if (ret < 0)
845 return ret; 852 return ret;
846 853
@@ -853,7 +860,7 @@ static int rsnd_src_start_gen2(struct rsnd_mod *mod,
853{ 860{
854 rsnd_dma_start(io, rsnd_mod_to_dma(mod)); 861 rsnd_dma_start(io, rsnd_mod_to_dma(mod));
855 862
856 return _rsnd_src_start_gen2(mod); 863 return _rsnd_src_start_gen2(mod, io);
857} 864}
858 865
859static int rsnd_src_stop_gen2(struct rsnd_mod *mod, 866static int rsnd_src_stop_gen2(struct rsnd_mod *mod,
@@ -874,7 +881,7 @@ static void rsnd_src_reconvert_update(struct rsnd_mod *mod)
874 struct rsnd_dai_stream *io = rsnd_mod_to_io(mod); 881 struct rsnd_dai_stream *io = rsnd_mod_to_io(mod);
875 struct snd_pcm_runtime *runtime = rsnd_io_to_runtime(io); 882 struct snd_pcm_runtime *runtime = rsnd_io_to_runtime(io);
876 struct rsnd_src *src = rsnd_mod_to_src(mod); 883 struct rsnd_src *src = rsnd_mod_to_src(mod);
877 u32 convert_rate = rsnd_src_convert_rate(src); 884 u32 convert_rate = rsnd_src_convert_rate(io, src);
878 u32 fsrate; 885 u32 fsrate;
879 886
880 if (!runtime) 887 if (!runtime)