aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPeter Ujfalusi <peter.ujfalusi@ti.com>2012-09-10 06:46:21 -0400
committerMark Brown <broonie@opensource.wolfsonmicro.com>2012-09-22 11:14:45 -0400
commitb5d5a034dec62c456a48d6977d926236ec605015 (patch)
tree54ebb7df1783aa43360e2410cb11d9ee13c2fe3a
parentbade699c67d40b785e00738b0593c7ed1dad78fc (diff)
mfd: twl4030-audio: Rearange and clean-up the probe function
To facilitate the device tree support the probe function need to be rearanged. Small cleanup in the APLL frequency selection part as well. Signed-off-by: Peter Ujfalusi <peter.ujfalusi@ti.com> Acked-by: Samuel Ortiz <sameo@linux.intel.com> Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
-rw-r--r--drivers/mfd/twl4030-audio.c34
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);