aboutsummaryrefslogtreecommitdiffstats
path: root/sound/soc/omap/omap-mcbsp.c
diff options
context:
space:
mode:
authorMark Brown <broonie@opensource.wolfsonmicro.com>2012-08-25 16:31:39 -0400
committerMark Brown <broonie@opensource.wolfsonmicro.com>2012-08-25 16:31:39 -0400
commitb10be23b88566c0f14889dd981ebfca1ef427b8b (patch)
tree941596a65c88750e64d00b28dfa02ad9edd66992 /sound/soc/omap/omap-mcbsp.c
parent32c50a31aad77e8faf2718d149da13f2136c1b46 (diff)
parentdb61550931957ee6c7dba751662919424b4344f3 (diff)
Merge branch 'asoc-omap' into for-3.7
Diffstat (limited to 'sound/soc/omap/omap-mcbsp.c')
-rw-r--r--sound/soc/omap/omap-mcbsp.c64
1 files changed, 27 insertions, 37 deletions
diff --git a/sound/soc/omap/omap-mcbsp.c b/sound/soc/omap/omap-mcbsp.c
index d6de066ad7ea..2e91a86b6114 100644
--- a/sound/soc/omap/omap-mcbsp.c
+++ b/sound/soc/omap/omap-mcbsp.c
@@ -619,9 +619,9 @@ static int omap_mcbsp_st_info_volsw(struct snd_kcontrol *kcontrol,
619 return 0; 619 return 0;
620} 620}
621 621
622#define OMAP_MCBSP_ST_SET_CHANNEL_VOLUME(channel) \ 622#define OMAP_MCBSP_ST_CHANNEL_VOLUME(channel) \
623static int \ 623static int \
624omap_mcbsp_set_st_ch##channel##_volume(struct snd_kcontrol *kc, \ 624omap_mcbsp_set_st_ch##channel##_volume(struct snd_kcontrol *kc, \
625 struct snd_ctl_elem_value *uc) \ 625 struct snd_ctl_elem_value *uc) \
626{ \ 626{ \
627 struct snd_soc_dai *cpu_dai = snd_kcontrol_chip(kc); \ 627 struct snd_soc_dai *cpu_dai = snd_kcontrol_chip(kc); \
@@ -637,11 +637,10 @@ omap_mcbsp_set_st_ch##channel##_volume(struct snd_kcontrol *kc, \
637 \ 637 \
638 /* OMAP McBSP implementation uses index values 0..4 */ \ 638 /* OMAP McBSP implementation uses index values 0..4 */ \
639 return omap_st_set_chgain(mcbsp, channel, val); \ 639 return omap_st_set_chgain(mcbsp, channel, val); \
640} 640} \
641 641 \
642#define OMAP_MCBSP_ST_GET_CHANNEL_VOLUME(channel) \
643static int \ 642static int \
644omap_mcbsp_get_st_ch##channel##_volume(struct snd_kcontrol *kc, \ 643omap_mcbsp_get_st_ch##channel##_volume(struct snd_kcontrol *kc, \
645 struct snd_ctl_elem_value *uc) \ 644 struct snd_ctl_elem_value *uc) \
646{ \ 645{ \
647 struct snd_soc_dai *cpu_dai = snd_kcontrol_chip(kc); \ 646 struct snd_soc_dai *cpu_dai = snd_kcontrol_chip(kc); \
@@ -655,10 +654,8 @@ omap_mcbsp_get_st_ch##channel##_volume(struct snd_kcontrol *kc, \
655 return 0; \ 654 return 0; \
656} 655}
657 656
658OMAP_MCBSP_ST_SET_CHANNEL_VOLUME(0) 657OMAP_MCBSP_ST_CHANNEL_VOLUME(0)
659OMAP_MCBSP_ST_SET_CHANNEL_VOLUME(1) 658OMAP_MCBSP_ST_CHANNEL_VOLUME(1)
660OMAP_MCBSP_ST_GET_CHANNEL_VOLUME(0)
661OMAP_MCBSP_ST_GET_CHANNEL_VOLUME(1)
662 659
663static int omap_mcbsp_st_put_mode(struct snd_kcontrol *kcontrol, 660static int omap_mcbsp_st_put_mode(struct snd_kcontrol *kcontrol,
664 struct snd_ctl_elem_value *ucontrol) 661 struct snd_ctl_elem_value *ucontrol)
@@ -688,41 +685,34 @@ static int omap_mcbsp_st_get_mode(struct snd_kcontrol *kcontrol,
688 return 0; 685 return 0;
689} 686}
690 687
691static const struct snd_kcontrol_new omap_mcbsp2_st_controls[] = { 688#define OMAP_MCBSP_ST_CONTROLS(port) \
692 SOC_SINGLE_EXT("McBSP2 Sidetone Switch", 1, 0, 1, 0, 689static const struct snd_kcontrol_new omap_mcbsp##port##_st_controls[] = { \
693 omap_mcbsp_st_get_mode, omap_mcbsp_st_put_mode), 690SOC_SINGLE_EXT("McBSP" #port " Sidetone Switch", 1, 0, 1, 0, \
694 OMAP_MCBSP_SOC_SINGLE_S16_EXT("McBSP2 Sidetone Channel 0 Volume", 691 omap_mcbsp_st_get_mode, omap_mcbsp_st_put_mode), \
695 -32768, 32767, 692OMAP_MCBSP_SOC_SINGLE_S16_EXT("McBSP" #port " Sidetone Channel 0 Volume", \
696 omap_mcbsp_get_st_ch0_volume, 693 -32768, 32767, \
697 omap_mcbsp_set_st_ch0_volume), 694 omap_mcbsp_get_st_ch0_volume, \
698 OMAP_MCBSP_SOC_SINGLE_S16_EXT("McBSP2 Sidetone Channel 1 Volume", 695 omap_mcbsp_set_st_ch0_volume), \
699 -32768, 32767, 696OMAP_MCBSP_SOC_SINGLE_S16_EXT("McBSP" #port " Sidetone Channel 1 Volume", \
700 omap_mcbsp_get_st_ch1_volume, 697 -32768, 32767, \
701 omap_mcbsp_set_st_ch1_volume), 698 omap_mcbsp_get_st_ch1_volume, \
702}; 699 omap_mcbsp_set_st_ch1_volume), \
700}
703 701
704static const struct snd_kcontrol_new omap_mcbsp3_st_controls[] = { 702OMAP_MCBSP_ST_CONTROLS(2);
705 SOC_SINGLE_EXT("McBSP3 Sidetone Switch", 2, 0, 1, 0, 703OMAP_MCBSP_ST_CONTROLS(3);
706 omap_mcbsp_st_get_mode, omap_mcbsp_st_put_mode),
707 OMAP_MCBSP_SOC_SINGLE_S16_EXT("McBSP3 Sidetone Channel 0 Volume",
708 -32768, 32767,
709 omap_mcbsp_get_st_ch0_volume,
710 omap_mcbsp_set_st_ch0_volume),
711 OMAP_MCBSP_SOC_SINGLE_S16_EXT("McBSP3 Sidetone Channel 1 Volume",
712 -32768, 32767,
713 omap_mcbsp_get_st_ch1_volume,
714 omap_mcbsp_set_st_ch1_volume),
715};
716 704
717int omap_mcbsp_st_add_controls(struct snd_soc_pcm_runtime *rtd) 705int omap_mcbsp_st_add_controls(struct snd_soc_pcm_runtime *rtd)
718{ 706{
719 struct snd_soc_dai *cpu_dai = rtd->cpu_dai; 707 struct snd_soc_dai *cpu_dai = rtd->cpu_dai;
720 struct omap_mcbsp *mcbsp = snd_soc_dai_get_drvdata(cpu_dai); 708 struct omap_mcbsp *mcbsp = snd_soc_dai_get_drvdata(cpu_dai);
721 709
722 if (!mcbsp->st_data) 710 if (!mcbsp->st_data) {
723 return -ENODEV; 711 dev_warn(mcbsp->dev, "No sidetone data for port\n");
712 return 0;
713 }
724 714
725 switch (cpu_dai->id) { 715 switch (mcbsp->id) {
726 case 2: /* McBSP 2 */ 716 case 2: /* McBSP 2 */
727 return snd_soc_add_dai_controls(cpu_dai, 717 return snd_soc_add_dai_controls(cpu_dai,
728 omap_mcbsp2_st_controls, 718 omap_mcbsp2_st_controls,