aboutsummaryrefslogtreecommitdiffstats
path: root/sound/soc/codecs/twl4030.c
diff options
context:
space:
mode:
authorPeter Ujfalusi <peter.ujfalusi@nokia.com>2009-05-22 03:13:15 -0400
committerMark Brown <broonie@opensource.wolfsonmicro.com>2009-05-22 05:23:22 -0400
commit9da28c7b38170882b1c43d7d133ddce34e25f161 (patch)
treedd9becd919b9fe743d6cebfbd4e212922bf338f0 /sound/soc/codecs/twl4030.c
parent5c82f56736e4c3a9eaf53c94366b056c8622d79e (diff)
ASoC: TWL4030: Add support for platform dependent configuration
twl4030_setup_data structure can be passed from platform drivers to the codec via the snd_soc_device->codec_data pointer. Currently the setup data has support for the Headset pop-removal related configuration, which differs from board to board. Signed-off-by: Peter Ujfalusi <peter.ujfalusi@nokia.com> Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
Diffstat (limited to 'sound/soc/codecs/twl4030.c')
-rw-r--r--sound/soc/codecs/twl4030.c22
1 files changed, 19 insertions, 3 deletions
diff --git a/sound/soc/codecs/twl4030.c b/sound/soc/codecs/twl4030.c
index f554672f67c..584507f71ef 100644
--- a/sound/soc/codecs/twl4030.c
+++ b/sound/soc/codecs/twl4030.c
@@ -1997,6 +1997,8 @@ static int twl4030_resume(struct platform_device *pdev)
1997static int twl4030_init(struct snd_soc_device *socdev) 1997static int twl4030_init(struct snd_soc_device *socdev)
1998{ 1998{
1999 struct snd_soc_codec *codec = socdev->card->codec; 1999 struct snd_soc_codec *codec = socdev->card->codec;
2000 struct twl4030_setup_data *setup = socdev->codec_data;
2001 struct twl4030_priv *twl4030 = codec->private_data;
2000 int ret = 0; 2002 int ret = 0;
2001 2003
2002 printk(KERN_INFO "TWL4030 Audio Codec init \n"); 2004 printk(KERN_INFO "TWL4030 Audio Codec init \n");
@@ -2014,6 +2016,23 @@ static int twl4030_init(struct snd_soc_device *socdev)
2014 if (codec->reg_cache == NULL) 2016 if (codec->reg_cache == NULL)
2015 return -ENOMEM; 2017 return -ENOMEM;
2016 2018
2019 /* Configuration for headset ramp delay from setup data */
2020 if (setup) {
2021 unsigned char hs_pop;
2022
2023 if (setup->sysclk)
2024 twl4030->sysclk = setup->sysclk;
2025 else
2026 twl4030->sysclk = 26000;
2027
2028 hs_pop = twl4030_read_reg_cache(codec, TWL4030_REG_HS_POPN_SET);
2029 hs_pop &= ~TWL4030_RAMP_DELAY;
2030 hs_pop |= (setup->ramp_delay_value << 2);
2031 twl4030_write_reg_cache(codec, TWL4030_REG_HS_POPN_SET, hs_pop);
2032 } else {
2033 twl4030->sysclk = 26000;
2034 }
2035
2017 /* register pcms */ 2036 /* register pcms */
2018 ret = snd_soc_new_pcms(socdev, SNDRV_DEFAULT_IDX1, SNDRV_DEFAULT_STR1); 2037 ret = snd_soc_new_pcms(socdev, SNDRV_DEFAULT_IDX1, SNDRV_DEFAULT_STR1);
2019 if (ret < 0) { 2038 if (ret < 0) {
@@ -2063,9 +2082,6 @@ static int twl4030_probe(struct platform_device *pdev)
2063 kfree(codec); 2082 kfree(codec);
2064 return -ENOMEM; 2083 return -ENOMEM;
2065 } 2084 }
2066 /* Set default sysclk (used by the headsetl/rpga_event callback for
2067 * pop-attenuation) */
2068 twl4030->sysclk = 26000;
2069 2085
2070 codec->private_data = twl4030; 2086 codec->private_data = twl4030;
2071 socdev->card->codec = codec; 2087 socdev->card->codec = codec;