diff options
author | Mark Brown <broonie@opensource.wolfsonmicro.com> | 2012-08-25 16:31:39 -0400 |
---|---|---|
committer | Mark Brown <broonie@opensource.wolfsonmicro.com> | 2012-08-25 16:31:39 -0400 |
commit | b10be23b88566c0f14889dd981ebfca1ef427b8b (patch) | |
tree | 941596a65c88750e64d00b28dfa02ad9edd66992 /sound/soc/omap/omap-mcbsp.c | |
parent | 32c50a31aad77e8faf2718d149da13f2136c1b46 (diff) | |
parent | db61550931957ee6c7dba751662919424b4344f3 (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.c | 64 |
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) \ |
623 | static int \ | 623 | static int \ |
624 | omap_mcbsp_set_st_ch##channel##_volume(struct snd_kcontrol *kc, \ | 624 | omap_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) \ | ||
643 | static int \ | 642 | static int \ |
644 | omap_mcbsp_get_st_ch##channel##_volume(struct snd_kcontrol *kc, \ | 643 | omap_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 | ||
658 | OMAP_MCBSP_ST_SET_CHANNEL_VOLUME(0) | 657 | OMAP_MCBSP_ST_CHANNEL_VOLUME(0) |
659 | OMAP_MCBSP_ST_SET_CHANNEL_VOLUME(1) | 658 | OMAP_MCBSP_ST_CHANNEL_VOLUME(1) |
660 | OMAP_MCBSP_ST_GET_CHANNEL_VOLUME(0) | ||
661 | OMAP_MCBSP_ST_GET_CHANNEL_VOLUME(1) | ||
662 | 659 | ||
663 | static int omap_mcbsp_st_put_mode(struct snd_kcontrol *kcontrol, | 660 | static 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 | ||
691 | static 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, | 689 | static const struct snd_kcontrol_new omap_mcbsp##port##_st_controls[] = { \ |
693 | omap_mcbsp_st_get_mode, omap_mcbsp_st_put_mode), | 690 | SOC_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, | 692 | OMAP_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, | 696 | OMAP_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 | ||
704 | static const struct snd_kcontrol_new omap_mcbsp3_st_controls[] = { | 702 | OMAP_MCBSP_ST_CONTROLS(2); |
705 | SOC_SINGLE_EXT("McBSP3 Sidetone Switch", 2, 0, 1, 0, | 703 | OMAP_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 | ||
717 | int omap_mcbsp_st_add_controls(struct snd_soc_pcm_runtime *rtd) | 705 | int 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, |