diff options
| -rw-r--r-- | drivers/mfd/twl4030-audio.c | 34 |
1 files changed, 16 insertions, 18 deletions
diff --git a/drivers/mfd/twl4030-audio.c b/drivers/mfd/twl4030-audio.c index efa2d424b416..ca2d6693c1f7 100644 --- a/drivers/mfd/twl4030-audio.c +++ b/drivers/mfd/twl4030-audio.c | |||
| @@ -169,35 +169,30 @@ static int __devinit twl4030_audio_probe(struct platform_device *pdev) | |||
| 169 | return -EINVAL; | 169 | return -EINVAL; |
| 170 | } | 170 | } |
| 171 | 171 | ||
| 172 | audio = devm_kzalloc(&pdev->dev, sizeof(struct twl4030_audio), | ||
| 173 | GFP_KERNEL); | ||
| 174 | if (!audio) | ||
| 175 | return -ENOMEM; | ||
| 176 | |||
| 177 | mutex_init(&audio->mutex); | ||
| 178 | audio->audio_mclk = pdata->audio_mclk; | ||
| 179 | |||
| 172 | /* Configure APLL_INFREQ and disable APLL if enabled */ | 180 | /* Configure APLL_INFREQ and disable APLL if enabled */ |
| 173 | val = 0; | 181 | switch (audio->audio_mclk) { |
| 174 | switch (pdata->audio_mclk) { | ||
| 175 | case 19200000: | 182 | case 19200000: |
| 176 | val |= TWL4030_APLL_INFREQ_19200KHZ; | 183 | val = TWL4030_APLL_INFREQ_19200KHZ; |
| 177 | break; | 184 | break; |
| 178 | case 26000000: | 185 | case 26000000: |
| 179 | val |= TWL4030_APLL_INFREQ_26000KHZ; | 186 | val = TWL4030_APLL_INFREQ_26000KHZ; |
| 180 | break; | 187 | break; |
| 181 | case 38400000: | 188 | case 38400000: |
| 182 | val |= TWL4030_APLL_INFREQ_38400KHZ; | 189 | val = TWL4030_APLL_INFREQ_38400KHZ; |
| 183 | break; | 190 | break; |
| 184 | default: | 191 | default: |
| 185 | dev_err(&pdev->dev, "Invalid audio_mclk\n"); | 192 | dev_err(&pdev->dev, "Invalid audio_mclk\n"); |
| 186 | return -EINVAL; | 193 | return -EINVAL; |
| 187 | } | 194 | } |
| 188 | twl_i2c_write_u8(TWL4030_MODULE_AUDIO_VOICE, | 195 | twl_i2c_write_u8(TWL4030_MODULE_AUDIO_VOICE, val, TWL4030_REG_APLL_CTL); |
| 189 | val, TWL4030_REG_APLL_CTL); | ||
| 190 | |||
| 191 | audio = devm_kzalloc(&pdev->dev, sizeof(struct twl4030_audio), | ||
| 192 | GFP_KERNEL); | ||
| 193 | if (!audio) | ||
| 194 | return -ENOMEM; | ||
| 195 | |||
| 196 | platform_set_drvdata(pdev, audio); | ||
| 197 | |||
| 198 | twl4030_audio_dev = pdev; | ||
| 199 | mutex_init(&audio->mutex); | ||
| 200 | audio->audio_mclk = pdata->audio_mclk; | ||
| 201 | 196 | ||
| 202 | /* Codec power */ | 197 | /* Codec power */ |
| 203 | audio->resource[TWL4030_AUDIO_RES_POWER].reg = TWL4030_REG_CODEC_MODE; | 198 | audio->resource[TWL4030_AUDIO_RES_POWER].reg = TWL4030_REG_CODEC_MODE; |
| @@ -222,6 +217,9 @@ static int __devinit twl4030_audio_probe(struct platform_device *pdev) | |||
| 222 | childs++; | 217 | childs++; |
| 223 | } | 218 | } |
| 224 | 219 | ||
| 220 | platform_set_drvdata(pdev, audio); | ||
| 221 | twl4030_audio_dev = pdev; | ||
| 222 | |||
| 225 | if (childs) | 223 | if (childs) |
| 226 | ret = mfd_add_devices(&pdev->dev, pdev->id, audio->cells, | 224 | ret = mfd_add_devices(&pdev->dev, pdev->id, audio->cells, |
| 227 | childs, NULL, 0); | 225 | childs, NULL, 0); |
