diff options
author | Mark Brown <broonie@kernel.org> | 2015-01-27 18:50:47 -0500 |
---|---|---|
committer | Mark Brown <broonie@kernel.org> | 2015-01-27 18:52:44 -0500 |
commit | 60d66c9a24907c8c965be4c7d15f67bd9d54b553 (patch) | |
tree | 5659fef17432154f2d4e34fdac3d619eeb5f8126 | |
parent | 8d23dd9c66456686d85805100204c0a4db584425 (diff) | |
parent | e1ae5fba3fae34537492758a21eef90a182620de (diff) |
Merge branch 'topic/arizona' of git://git.kernel.org/pub/scm/linux/kernel/git/broonie/sound into asoc-w-codec
-rw-r--r-- | sound/soc/codecs/arizona.c | 60 | ||||
-rw-r--r-- | sound/soc/codecs/arizona.h | 5 | ||||
-rw-r--r-- | sound/soc/codecs/wm5102.c | 21 | ||||
-rw-r--r-- | sound/soc/codecs/wm5110.c | 18 | ||||
-rw-r--r-- | sound/soc/codecs/wm8997.c | 9 |
5 files changed, 95 insertions, 18 deletions
diff --git a/sound/soc/codecs/arizona.c b/sound/soc/codecs/arizona.c index 65977bc0db19..29202610dd0d 100644 --- a/sound/soc/codecs/arizona.c +++ b/sound/soc/codecs/arizona.c | |||
@@ -735,7 +735,25 @@ int arizona_out_ev(struct snd_soc_dapm_widget *w, | |||
735 | struct snd_kcontrol *kcontrol, | 735 | struct snd_kcontrol *kcontrol, |
736 | int event) | 736 | int event) |
737 | { | 737 | { |
738 | struct snd_soc_codec *codec = snd_soc_dapm_to_codec(w->dapm); | ||
739 | struct arizona_priv *priv = snd_soc_codec_get_drvdata(codec); | ||
740 | |||
738 | switch (event) { | 741 | switch (event) { |
742 | case SND_SOC_DAPM_PRE_PMU: | ||
743 | switch (w->shift) { | ||
744 | case ARIZONA_OUT1L_ENA_SHIFT: | ||
745 | case ARIZONA_OUT1R_ENA_SHIFT: | ||
746 | case ARIZONA_OUT2L_ENA_SHIFT: | ||
747 | case ARIZONA_OUT2R_ENA_SHIFT: | ||
748 | case ARIZONA_OUT3L_ENA_SHIFT: | ||
749 | case ARIZONA_OUT3R_ENA_SHIFT: | ||
750 | priv->out_up_pending++; | ||
751 | priv->out_up_delay += 17; | ||
752 | break; | ||
753 | default: | ||
754 | break; | ||
755 | } | ||
756 | break; | ||
739 | case SND_SOC_DAPM_POST_PMU: | 757 | case SND_SOC_DAPM_POST_PMU: |
740 | switch (w->shift) { | 758 | switch (w->shift) { |
741 | case ARIZONA_OUT1L_ENA_SHIFT: | 759 | case ARIZONA_OUT1L_ENA_SHIFT: |
@@ -744,13 +762,50 @@ int arizona_out_ev(struct snd_soc_dapm_widget *w, | |||
744 | case ARIZONA_OUT2R_ENA_SHIFT: | 762 | case ARIZONA_OUT2R_ENA_SHIFT: |
745 | case ARIZONA_OUT3L_ENA_SHIFT: | 763 | case ARIZONA_OUT3L_ENA_SHIFT: |
746 | case ARIZONA_OUT3R_ENA_SHIFT: | 764 | case ARIZONA_OUT3R_ENA_SHIFT: |
747 | msleep(17); | 765 | priv->out_up_pending--; |
766 | if (!priv->out_up_pending) { | ||
767 | msleep(priv->out_up_delay); | ||
768 | priv->out_up_delay = 0; | ||
769 | } | ||
748 | break; | 770 | break; |
749 | 771 | ||
750 | default: | 772 | default: |
751 | break; | 773 | break; |
752 | } | 774 | } |
753 | break; | 775 | break; |
776 | case SND_SOC_DAPM_PRE_PMD: | ||
777 | switch (w->shift) { | ||
778 | case ARIZONA_OUT1L_ENA_SHIFT: | ||
779 | case ARIZONA_OUT1R_ENA_SHIFT: | ||
780 | case ARIZONA_OUT2L_ENA_SHIFT: | ||
781 | case ARIZONA_OUT2R_ENA_SHIFT: | ||
782 | case ARIZONA_OUT3L_ENA_SHIFT: | ||
783 | case ARIZONA_OUT3R_ENA_SHIFT: | ||
784 | priv->out_down_pending++; | ||
785 | priv->out_down_delay++; | ||
786 | break; | ||
787 | default: | ||
788 | break; | ||
789 | } | ||
790 | break; | ||
791 | case SND_SOC_DAPM_POST_PMD: | ||
792 | switch (w->shift) { | ||
793 | case ARIZONA_OUT1L_ENA_SHIFT: | ||
794 | case ARIZONA_OUT1R_ENA_SHIFT: | ||
795 | case ARIZONA_OUT2L_ENA_SHIFT: | ||
796 | case ARIZONA_OUT2R_ENA_SHIFT: | ||
797 | case ARIZONA_OUT3L_ENA_SHIFT: | ||
798 | case ARIZONA_OUT3R_ENA_SHIFT: | ||
799 | priv->out_down_pending--; | ||
800 | if (!priv->out_down_pending) { | ||
801 | msleep(priv->out_down_delay); | ||
802 | priv->out_down_delay = 0; | ||
803 | } | ||
804 | break; | ||
805 | default: | ||
806 | break; | ||
807 | } | ||
808 | break; | ||
754 | } | 809 | } |
755 | 810 | ||
756 | return 0; | 811 | return 0; |
@@ -774,6 +829,9 @@ int arizona_hp_ev(struct snd_soc_dapm_widget *w, | |||
774 | case SND_SOC_DAPM_PRE_PMD: | 829 | case SND_SOC_DAPM_PRE_PMD: |
775 | val = 0; | 830 | val = 0; |
776 | break; | 831 | break; |
832 | case SND_SOC_DAPM_PRE_PMU: | ||
833 | case SND_SOC_DAPM_POST_PMD: | ||
834 | return arizona_out_ev(w, kcontrol, event); | ||
777 | default: | 835 | default: |
778 | return -EINVAL; | 836 | return -EINVAL; |
779 | } | 837 | } |
diff --git a/sound/soc/codecs/arizona.h b/sound/soc/codecs/arizona.h index 942cfb197b6d..11ff899b0272 100644 --- a/sound/soc/codecs/arizona.h +++ b/sound/soc/codecs/arizona.h | |||
@@ -77,6 +77,11 @@ struct arizona_priv { | |||
77 | int num_inputs; | 77 | int num_inputs; |
78 | unsigned int in_pending; | 78 | unsigned int in_pending; |
79 | 79 | ||
80 | unsigned int out_up_pending; | ||
81 | unsigned int out_up_delay; | ||
82 | unsigned int out_down_pending; | ||
83 | unsigned int out_down_delay; | ||
84 | |||
80 | unsigned int spk_ena:2; | 85 | unsigned int spk_ena:2; |
81 | unsigned int spk_ena_pending:1; | 86 | unsigned int spk_ena_pending:1; |
82 | }; | 87 | }; |
diff --git a/sound/soc/codecs/wm5102.c b/sound/soc/codecs/wm5102.c index f57235be8b0a..6d0fe0ac95a3 100644 --- a/sound/soc/codecs/wm5102.c +++ b/sound/soc/codecs/wm5102.c | |||
@@ -28,6 +28,7 @@ | |||
28 | 28 | ||
29 | #include <linux/mfd/arizona/core.h> | 29 | #include <linux/mfd/arizona/core.h> |
30 | #include <linux/mfd/arizona/registers.h> | 30 | #include <linux/mfd/arizona/registers.h> |
31 | #include <asm/unaligned.h> | ||
31 | 32 | ||
32 | #include "arizona.h" | 33 | #include "arizona.h" |
33 | #include "wm5102.h" | 34 | #include "wm5102.h" |
@@ -617,11 +618,10 @@ static int wm5102_out_comp_coeff_get(struct snd_kcontrol *kcontrol, | |||
617 | { | 618 | { |
618 | struct snd_soc_codec *codec = snd_soc_kcontrol_codec(kcontrol); | 619 | struct snd_soc_codec *codec = snd_soc_kcontrol_codec(kcontrol); |
619 | struct arizona *arizona = dev_get_drvdata(codec->dev->parent); | 620 | struct arizona *arizona = dev_get_drvdata(codec->dev->parent); |
620 | uint16_t data; | ||
621 | 621 | ||
622 | mutex_lock(&arizona->dac_comp_lock); | 622 | mutex_lock(&arizona->dac_comp_lock); |
623 | data = cpu_to_be16(arizona->dac_comp_coeff); | 623 | put_unaligned_be16(arizona->dac_comp_coeff, |
624 | memcpy(ucontrol->value.bytes.data, &data, sizeof(data)); | 624 | ucontrol->value.bytes.data); |
625 | mutex_unlock(&arizona->dac_comp_lock); | 625 | mutex_unlock(&arizona->dac_comp_lock); |
626 | 626 | ||
627 | return 0; | 627 | return 0; |
@@ -1272,19 +1272,24 @@ SND_SOC_DAPM_MUX("AEC Loopback", ARIZONA_DAC_AEC_CONTROL_1, | |||
1272 | 1272 | ||
1273 | SND_SOC_DAPM_PGA_E("OUT1L", SND_SOC_NOPM, | 1273 | SND_SOC_DAPM_PGA_E("OUT1L", SND_SOC_NOPM, |
1274 | ARIZONA_OUT1L_ENA_SHIFT, 0, NULL, 0, arizona_hp_ev, | 1274 | ARIZONA_OUT1L_ENA_SHIFT, 0, NULL, 0, arizona_hp_ev, |
1275 | SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMU), | 1275 | SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMD | |
1276 | SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMU), | ||
1276 | SND_SOC_DAPM_PGA_E("OUT1R", SND_SOC_NOPM, | 1277 | SND_SOC_DAPM_PGA_E("OUT1R", SND_SOC_NOPM, |
1277 | ARIZONA_OUT1R_ENA_SHIFT, 0, NULL, 0, arizona_hp_ev, | 1278 | ARIZONA_OUT1R_ENA_SHIFT, 0, NULL, 0, arizona_hp_ev, |
1278 | SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMU), | 1279 | SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMD | |
1280 | SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMU), | ||
1279 | SND_SOC_DAPM_PGA_E("OUT2L", ARIZONA_OUTPUT_ENABLES_1, | 1281 | SND_SOC_DAPM_PGA_E("OUT2L", ARIZONA_OUTPUT_ENABLES_1, |
1280 | ARIZONA_OUT2L_ENA_SHIFT, 0, NULL, 0, arizona_out_ev, | 1282 | ARIZONA_OUT2L_ENA_SHIFT, 0, NULL, 0, arizona_out_ev, |
1281 | SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMU), | 1283 | SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMD | |
1284 | SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMU), | ||
1282 | SND_SOC_DAPM_PGA_E("OUT2R", ARIZONA_OUTPUT_ENABLES_1, | 1285 | SND_SOC_DAPM_PGA_E("OUT2R", ARIZONA_OUTPUT_ENABLES_1, |
1283 | ARIZONA_OUT2R_ENA_SHIFT, 0, NULL, 0, arizona_out_ev, | 1286 | ARIZONA_OUT2R_ENA_SHIFT, 0, NULL, 0, arizona_out_ev, |
1284 | SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMU), | 1287 | SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMD | |
1288 | SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMU), | ||
1285 | SND_SOC_DAPM_PGA_E("OUT3L", ARIZONA_OUTPUT_ENABLES_1, | 1289 | SND_SOC_DAPM_PGA_E("OUT3L", ARIZONA_OUTPUT_ENABLES_1, |
1286 | ARIZONA_OUT3L_ENA_SHIFT, 0, NULL, 0, arizona_out_ev, | 1290 | ARIZONA_OUT3L_ENA_SHIFT, 0, NULL, 0, arizona_out_ev, |
1287 | SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMU), | 1291 | SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMD | |
1292 | SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMU), | ||
1288 | SND_SOC_DAPM_PGA_E("OUT5L", ARIZONA_OUTPUT_ENABLES_1, | 1293 | SND_SOC_DAPM_PGA_E("OUT5L", ARIZONA_OUTPUT_ENABLES_1, |
1289 | ARIZONA_OUT5L_ENA_SHIFT, 0, NULL, 0, arizona_out_ev, | 1294 | ARIZONA_OUT5L_ENA_SHIFT, 0, NULL, 0, arizona_out_ev, |
1290 | SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMU), | 1295 | SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMU), |
diff --git a/sound/soc/codecs/wm5110.c b/sound/soc/codecs/wm5110.c index 7cb02e9d3b53..fbaeddb3e903 100644 --- a/sound/soc/codecs/wm5110.c +++ b/sound/soc/codecs/wm5110.c | |||
@@ -905,22 +905,28 @@ SND_SOC_DAPM_AIF_IN("AIF3RX2", NULL, 0, | |||
905 | 905 | ||
906 | SND_SOC_DAPM_PGA_E("OUT1L", SND_SOC_NOPM, | 906 | SND_SOC_DAPM_PGA_E("OUT1L", SND_SOC_NOPM, |
907 | ARIZONA_OUT1L_ENA_SHIFT, 0, NULL, 0, arizona_hp_ev, | 907 | ARIZONA_OUT1L_ENA_SHIFT, 0, NULL, 0, arizona_hp_ev, |
908 | SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMU), | 908 | SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMD | |
909 | SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMU), | ||
909 | SND_SOC_DAPM_PGA_E("OUT1R", SND_SOC_NOPM, | 910 | SND_SOC_DAPM_PGA_E("OUT1R", SND_SOC_NOPM, |
910 | ARIZONA_OUT1R_ENA_SHIFT, 0, NULL, 0, arizona_hp_ev, | 911 | ARIZONA_OUT1R_ENA_SHIFT, 0, NULL, 0, arizona_hp_ev, |
911 | SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMU), | 912 | SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMD | |
913 | SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMU), | ||
912 | SND_SOC_DAPM_PGA_E("OUT2L", ARIZONA_OUTPUT_ENABLES_1, | 914 | SND_SOC_DAPM_PGA_E("OUT2L", ARIZONA_OUTPUT_ENABLES_1, |
913 | ARIZONA_OUT2L_ENA_SHIFT, 0, NULL, 0, arizona_out_ev, | 915 | ARIZONA_OUT2L_ENA_SHIFT, 0, NULL, 0, arizona_out_ev, |
914 | SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMU), | 916 | SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMD | |
917 | SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMU), | ||
915 | SND_SOC_DAPM_PGA_E("OUT2R", ARIZONA_OUTPUT_ENABLES_1, | 918 | SND_SOC_DAPM_PGA_E("OUT2R", ARIZONA_OUTPUT_ENABLES_1, |
916 | ARIZONA_OUT2R_ENA_SHIFT, 0, NULL, 0, arizona_out_ev, | 919 | ARIZONA_OUT2R_ENA_SHIFT, 0, NULL, 0, arizona_out_ev, |
917 | SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMU), | 920 | SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMD | |
921 | SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMU), | ||
918 | SND_SOC_DAPM_PGA_E("OUT3L", ARIZONA_OUTPUT_ENABLES_1, | 922 | SND_SOC_DAPM_PGA_E("OUT3L", ARIZONA_OUTPUT_ENABLES_1, |
919 | ARIZONA_OUT3L_ENA_SHIFT, 0, NULL, 0, arizona_out_ev, | 923 | ARIZONA_OUT3L_ENA_SHIFT, 0, NULL, 0, arizona_out_ev, |
920 | SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMU), | 924 | SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMD | |
925 | SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMU), | ||
921 | SND_SOC_DAPM_PGA_E("OUT3R", ARIZONA_OUTPUT_ENABLES_1, | 926 | SND_SOC_DAPM_PGA_E("OUT3R", ARIZONA_OUTPUT_ENABLES_1, |
922 | ARIZONA_OUT3R_ENA_SHIFT, 0, NULL, 0, arizona_out_ev, | 927 | ARIZONA_OUT3R_ENA_SHIFT, 0, NULL, 0, arizona_out_ev, |
923 | SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMU), | 928 | SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMD | |
929 | SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMU), | ||
924 | SND_SOC_DAPM_PGA_E("OUT5L", ARIZONA_OUTPUT_ENABLES_1, | 930 | SND_SOC_DAPM_PGA_E("OUT5L", ARIZONA_OUTPUT_ENABLES_1, |
925 | ARIZONA_OUT5L_ENA_SHIFT, 0, NULL, 0, arizona_out_ev, | 931 | ARIZONA_OUT5L_ENA_SHIFT, 0, NULL, 0, arizona_out_ev, |
926 | SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMU), | 932 | SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMU), |
diff --git a/sound/soc/codecs/wm8997.c b/sound/soc/codecs/wm8997.c index 0760ede0a6e5..a4d11770630c 100644 --- a/sound/soc/codecs/wm8997.c +++ b/sound/soc/codecs/wm8997.c | |||
@@ -610,13 +610,16 @@ SND_SOC_DAPM_MUX("AEC Loopback", ARIZONA_DAC_AEC_CONTROL_1, | |||
610 | 610 | ||
611 | SND_SOC_DAPM_PGA_E("OUT1L", SND_SOC_NOPM, | 611 | SND_SOC_DAPM_PGA_E("OUT1L", SND_SOC_NOPM, |
612 | ARIZONA_OUT1L_ENA_SHIFT, 0, NULL, 0, arizona_hp_ev, | 612 | ARIZONA_OUT1L_ENA_SHIFT, 0, NULL, 0, arizona_hp_ev, |
613 | SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMU), | 613 | SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMD | |
614 | SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMU), | ||
614 | SND_SOC_DAPM_PGA_E("OUT1R", SND_SOC_NOPM, | 615 | SND_SOC_DAPM_PGA_E("OUT1R", SND_SOC_NOPM, |
615 | ARIZONA_OUT1R_ENA_SHIFT, 0, NULL, 0, arizona_hp_ev, | 616 | ARIZONA_OUT1R_ENA_SHIFT, 0, NULL, 0, arizona_hp_ev, |
616 | SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMU), | 617 | SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMD | |
618 | SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMU), | ||
617 | SND_SOC_DAPM_PGA_E("OUT3L", ARIZONA_OUTPUT_ENABLES_1, | 619 | SND_SOC_DAPM_PGA_E("OUT3L", ARIZONA_OUTPUT_ENABLES_1, |
618 | ARIZONA_OUT3L_ENA_SHIFT, 0, NULL, 0, arizona_out_ev, | 620 | ARIZONA_OUT3L_ENA_SHIFT, 0, NULL, 0, arizona_out_ev, |
619 | SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMU), | 621 | SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMD | |
622 | SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMU), | ||
620 | SND_SOC_DAPM_PGA_E("OUT5L", ARIZONA_OUTPUT_ENABLES_1, | 623 | SND_SOC_DAPM_PGA_E("OUT5L", ARIZONA_OUTPUT_ENABLES_1, |
621 | ARIZONA_OUT5L_ENA_SHIFT, 0, NULL, 0, arizona_out_ev, | 624 | ARIZONA_OUT5L_ENA_SHIFT, 0, NULL, 0, arizona_out_ev, |
622 | SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMU), | 625 | SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMU), |