diff options
author | Mark Brown <broonie@opensource.wolfsonmicro.com> | 2009-09-30 09:16:11 -0400 |
---|---|---|
committer | Mark Brown <broonie@opensource.wolfsonmicro.com> | 2009-09-30 10:51:37 -0400 |
commit | aa983d9d63c38f596fb87754205da9b7a8d2f6fd (patch) | |
tree | f5641b0aa475d3bc3b54ed144ea8c1582f08f075 | |
parent | 4c0bccbe66ffe34f7bc88d29c345f9a7888656eb (diff) |
ASoC: Factor out analogue platform data from WM8993
This is also shared with newer CODECs.
Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
-rw-r--r-- | sound/soc/codecs/wm8993.c | 36 | ||||
-rw-r--r-- | sound/soc/codecs/wm_hubs.c | 35 | ||||
-rw-r--r-- | sound/soc/codecs/wm_hubs.h | 5 |
3 files changed, 49 insertions, 27 deletions
diff --git a/sound/soc/codecs/wm8993.c b/sound/soc/codecs/wm8993.c index 6b32a2852603..dac397712147 100644 --- a/sound/soc/codecs/wm8993.c +++ b/sound/soc/codecs/wm8993.c | |||
@@ -1572,33 +1572,15 @@ static int wm8993_i2c_probe(struct i2c_client *i2c, | |||
1572 | /* Use automatic clock configuration */ | 1572 | /* Use automatic clock configuration */ |
1573 | snd_soc_update_bits(codec, WM8993_CLOCKING_4, WM8993_SR_MODE, 0); | 1573 | snd_soc_update_bits(codec, WM8993_CLOCKING_4, WM8993_SR_MODE, 0); |
1574 | 1574 | ||
1575 | if (!wm8993->pdata.lineout1_diff) | 1575 | wm_hubs_handle_analogue_pdata(codec, wm8993->pdata.lineout1_diff, |
1576 | snd_soc_update_bits(codec, WM8993_LINE_MIXER1, | 1576 | wm8993->pdata.lineout2_diff, |
1577 | WM8993_LINEOUT1_MODE, | 1577 | wm8993->pdata.lineout1fb, |
1578 | WM8993_LINEOUT1_MODE); | 1578 | wm8993->pdata.lineout2fb, |
1579 | if (!wm8993->pdata.lineout2_diff) | 1579 | wm8993->pdata.jd_scthr, |
1580 | snd_soc_update_bits(codec, WM8993_LINE_MIXER2, | 1580 | wm8993->pdata.jd_thr, |
1581 | WM8993_LINEOUT2_MODE, | 1581 | wm8993->pdata.micbias1_lvl, |
1582 | WM8993_LINEOUT2_MODE); | 1582 | wm8993->pdata.micbias2_lvl); |
1583 | 1583 | ||
1584 | if (wm8993->pdata.lineout1fb) | ||
1585 | snd_soc_update_bits(codec, WM8993_ADDITIONAL_CONTROL, | ||
1586 | WM8993_LINEOUT1_FB, WM8993_LINEOUT1_FB); | ||
1587 | |||
1588 | if (wm8993->pdata.lineout2fb) | ||
1589 | snd_soc_update_bits(codec, WM8993_ADDITIONAL_CONTROL, | ||
1590 | WM8993_LINEOUT2_FB, WM8993_LINEOUT2_FB); | ||
1591 | |||
1592 | /* Apply the microphone bias/detection configuration - the | ||
1593 | * platform data is directly applicable to the register. */ | ||
1594 | snd_soc_update_bits(codec, WM8993_MICBIAS, | ||
1595 | WM8993_JD_SCTHR_MASK | WM8993_JD_THR_MASK | | ||
1596 | WM8993_MICB1_LVL | WM8993_MICB2_LVL, | ||
1597 | wm8993->pdata.jd_scthr << WM8993_JD_SCTHR_SHIFT | | ||
1598 | wm8993->pdata.jd_thr << WM8993_JD_THR_SHIFT | | ||
1599 | wm8993->pdata.micbias1_lvl | | ||
1600 | wm8993->pdata.micbias1_lvl << 1); | ||
1601 | |||
1602 | ret = wm8993_set_bias_level(codec, SND_SOC_BIAS_STANDBY); | 1584 | ret = wm8993_set_bias_level(codec, SND_SOC_BIAS_STANDBY); |
1603 | if (ret != 0) | 1585 | if (ret != 0) |
1604 | goto err; | 1586 | goto err; |
diff --git a/sound/soc/codecs/wm_hubs.c b/sound/soc/codecs/wm_hubs.c index e542027eea89..810a563d0ebf 100644 --- a/sound/soc/codecs/wm_hubs.c +++ b/sound/soc/codecs/wm_hubs.c | |||
@@ -738,6 +738,41 @@ int wm_hubs_add_analogue_routes(struct snd_soc_codec *codec, | |||
738 | } | 738 | } |
739 | EXPORT_SYMBOL_GPL(wm_hubs_add_analogue_routes); | 739 | EXPORT_SYMBOL_GPL(wm_hubs_add_analogue_routes); |
740 | 740 | ||
741 | int wm_hubs_handle_analogue_pdata(struct snd_soc_codec *codec, | ||
742 | int lineout1_diff, int lineout2_diff, | ||
743 | int lineout1fb, int lineout2fb, | ||
744 | int jd_scthr, int jd_thr, int micbias1_lvl, | ||
745 | int micbias2_lvl) | ||
746 | { | ||
747 | if (!lineout1_diff) | ||
748 | snd_soc_update_bits(codec, WM8993_LINE_MIXER1, | ||
749 | WM8993_LINEOUT1_MODE, | ||
750 | WM8993_LINEOUT1_MODE); | ||
751 | if (!lineout2_diff) | ||
752 | snd_soc_update_bits(codec, WM8993_LINE_MIXER2, | ||
753 | WM8993_LINEOUT2_MODE, | ||
754 | WM8993_LINEOUT2_MODE); | ||
755 | |||
756 | if (lineout1fb) | ||
757 | snd_soc_update_bits(codec, WM8993_ADDITIONAL_CONTROL, | ||
758 | WM8993_LINEOUT1_FB, WM8993_LINEOUT1_FB); | ||
759 | |||
760 | if (lineout2fb) | ||
761 | snd_soc_update_bits(codec, WM8993_ADDITIONAL_CONTROL, | ||
762 | WM8993_LINEOUT2_FB, WM8993_LINEOUT2_FB); | ||
763 | |||
764 | snd_soc_update_bits(codec, WM8993_MICBIAS, | ||
765 | WM8993_JD_SCTHR_MASK | WM8993_JD_THR_MASK | | ||
766 | WM8993_MICB1_LVL | WM8993_MICB2_LVL, | ||
767 | jd_scthr << WM8993_JD_SCTHR_SHIFT | | ||
768 | jd_thr << WM8993_JD_THR_SHIFT | | ||
769 | micbias1_lvl | | ||
770 | micbias2_lvl << WM8993_MICB2_LVL_SHIFT); | ||
771 | |||
772 | return 0; | ||
773 | } | ||
774 | EXPORT_SYMBOL_GPL(wm_hubs_handle_analogue_pdata); | ||
775 | |||
741 | MODULE_DESCRIPTION("Shared support for Wolfson hubs products"); | 776 | MODULE_DESCRIPTION("Shared support for Wolfson hubs products"); |
742 | MODULE_AUTHOR("Mark Brown <broonie@opensource.wolfsonmicro.com>"); | 777 | MODULE_AUTHOR("Mark Brown <broonie@opensource.wolfsonmicro.com>"); |
743 | MODULE_LICENSE("GPL"); | 778 | MODULE_LICENSE("GPL"); |
diff --git a/sound/soc/codecs/wm_hubs.h b/sound/soc/codecs/wm_hubs.h index ec09cb6a2939..36d3fba1de8b 100644 --- a/sound/soc/codecs/wm_hubs.h +++ b/sound/soc/codecs/wm_hubs.h | |||
@@ -20,5 +20,10 @@ extern const unsigned int wm_hubs_spkmix_tlv[]; | |||
20 | 20 | ||
21 | extern int wm_hubs_add_analogue_controls(struct snd_soc_codec *); | 21 | extern int wm_hubs_add_analogue_controls(struct snd_soc_codec *); |
22 | extern int wm_hubs_add_analogue_routes(struct snd_soc_codec *, int, int); | 22 | extern int wm_hubs_add_analogue_routes(struct snd_soc_codec *, int, int); |
23 | extern int wm_hubs_handle_analogue_pdata(struct snd_soc_codec *, | ||
24 | int lineout1_diff, int lineout2_diff, | ||
25 | int lineout1fb, int lineout2fb, | ||
26 | int jd_scthr, int jd_thr, | ||
27 | int micbias1_lvl, int micbias2_lvl); | ||
23 | 28 | ||
24 | #endif | 29 | #endif |