12 #include <linux/module.h>
22 static struct clk *xtal_clk;
25 static int spk_unmute;
34 static int speaker_gain_get(
struct snd_kcontrol *kcontrol,
37 ucontrol->
value.integer.value[0] = spk_gain;
45 static void speaker_gain_set(
int value)
63 static int speaker_gain_put(
struct snd_kcontrol *kcontrol,
71 speaker_gain_set(value);
78 speaker_gain_get, speaker_gain_put),
85 static void spk_unmute_state(
int to)
87 pr_debug(
"%s: to=%d\n", __func__, to);
94 speaker_gain_set(spk_gain);
104 static int speaker_unmute_get(
struct snd_kcontrol *kcontrol,
107 ucontrol->
value.integer.value[0] = spk_unmute;
119 static int speaker_unmute_put(
struct snd_kcontrol *kcontrol,
122 spk_unmute_state(ucontrol->
value.integer.value[0]);
132 speaker_unmute_get, speaker_unmute_put),
140 pr_debug(
"%s: adding amp routes\n", __func__);
147 pr_debug(
"%s: adding amp controls\n", __func__);
154 #define CODEC_CLOCK 12000000
177 pr_err(
"%s: failed set cpu dai format\n", __func__);
186 pr_err(
"%s: failed set codec dai format\n", __func__);
193 pr_err(
"%s: failed setting codec sysclk\n", __func__);
202 pr_err(
"%s: failed to set MPLLin as clksrc\n",
233 .hw_params = simtec_hw_params,
244 static int attach_gpio_amp(
struct device *
dev,
253 dev_err(dev,
"cannot get amp gpio gain0\n");
259 dev_err(dev,
"cannot get amp gpio gain1\n");
272 dev_err(dev,
"cannot get amp gpio %d (%d)\n",
304 static int simtec_audio_resume(
struct device *dev)
306 simtec_call_startup(pdata);
310 const struct dev_pm_ops simtec_audio_pmops = {
311 .
resume = simtec_audio_resume,
322 card->
dai_link->ops = &simtec_snd_ops;
324 pdata = pdev->
dev.platform_data;
326 dev_err(&pdev->
dev,
"no platform data supplied\n");
330 simtec_call_startup(pdata);
333 if (IS_ERR(xtal_clk)) {
334 dev_err(&pdev->
dev,
"could not get clkout0\n");
340 ret = attach_gpio_amp(&pdev->
dev, pdata);
346 dev_err(&pdev->
dev,
"failed to alloc soc-audio devicec\n");
351 platform_set_drvdata(snd_dev, card);
355 dev_err(&pdev->
dev,
"failed to add soc-audio dev\n");
359 platform_set_drvdata(pdev, snd_dev);
366 detach_gpio_amp(pdata);
380 detach_gpio_amp(pdata);