Commit 3dfd2b68 authored by Mark Brown's avatar Mark Brown

Merge remote-tracking branches 'asoc/fix/rt5663', 'asoc/fix/samsung',...

Merge remote-tracking branches 'asoc/fix/rt5663', 'asoc/fix/samsung', 'asoc/fix/sti', 'asoc/fix/sti-codec', 'asoc/fix/sunxi' and 'asoc/fix/tas571x' into asoc-linus
...@@ -1547,11 +1547,11 @@ static int rt5663_jack_detect(struct snd_soc_codec *codec, int jack_insert) ...@@ -1547,11 +1547,11 @@ static int rt5663_jack_detect(struct snd_soc_codec *codec, int jack_insert)
msleep(sleep_time[i]); msleep(sleep_time[i]);
val = snd_soc_read(codec, RT5663_EM_JACK_TYPE_2) & val = snd_soc_read(codec, RT5663_EM_JACK_TYPE_2) &
0x0003; 0x0003;
dev_dbg(codec->dev, "%s: MX-00e7 val=%x sleep %d\n",
__func__, val, sleep_time[i]);
i++; i++;
if (val == 0x1 || val == 0x2 || val == 0x3) if (val == 0x1 || val == 0x2 || val == 0x3)
break; break;
dev_dbg(codec->dev, "%s: MX-00e7 val=%x sleep %d\n",
__func__, val, sleep_time[i]);
} }
dev_dbg(codec->dev, "%s val = %d\n", __func__, val); dev_dbg(codec->dev, "%s val = %d\n", __func__, val);
switch (val) { switch (val) {
......
...@@ -424,7 +424,7 @@ static const struct snd_soc_dai_ops stih407_dac_ops = { ...@@ -424,7 +424,7 @@ static const struct snd_soc_dai_ops stih407_dac_ops = {
static const struct regmap_config stih407_sas_regmap = { static const struct regmap_config stih407_sas_regmap = {
.reg_bits = 32, .reg_bits = 32,
.val_bits = 32, .val_bits = 32,
.fast_io = true,
.max_register = STIH407_AUDIO_DAC_CTRL, .max_register = STIH407_AUDIO_DAC_CTRL,
.reg_defaults = stih407_sas_reg_defaults, .reg_defaults = stih407_sas_reg_defaults,
.num_reg_defaults = ARRAY_SIZE(stih407_sas_reg_defaults), .num_reg_defaults = ARRAY_SIZE(stih407_sas_reg_defaults),
......
...@@ -341,20 +341,9 @@ static int tas571x_set_bias_level(struct snd_soc_codec *codec, ...@@ -341,20 +341,9 @@ static int tas571x_set_bias_level(struct snd_soc_codec *codec,
return ret; return ret;
} }
} }
gpiod_set_value(priv->pdn_gpio, 0);
usleep_range(5000, 6000);
regcache_cache_only(priv->regmap, false);
ret = regcache_sync(priv->regmap);
if (ret)
return ret;
} }
break; break;
case SND_SOC_BIAS_OFF: case SND_SOC_BIAS_OFF:
regcache_cache_only(priv->regmap, true);
gpiod_set_value(priv->pdn_gpio, 1);
if (!IS_ERR(priv->mclk)) if (!IS_ERR(priv->mclk))
clk_disable_unprepare(priv->mclk); clk_disable_unprepare(priv->mclk);
break; break;
...@@ -401,16 +390,6 @@ static const struct snd_kcontrol_new tas5711_controls[] = { ...@@ -401,16 +390,6 @@ static const struct snd_kcontrol_new tas5711_controls[] = {
TAS571X_SOFT_MUTE_REG, TAS571X_SOFT_MUTE_REG,
TAS571X_SOFT_MUTE_CH1_SHIFT, TAS571X_SOFT_MUTE_CH2_SHIFT, TAS571X_SOFT_MUTE_CH1_SHIFT, TAS571X_SOFT_MUTE_CH2_SHIFT,
1, 1), 1, 1),
SOC_DOUBLE_R_RANGE("CH1 Mixer Volume",
TAS5717_CH1_LEFT_CH_MIX_REG,
TAS5717_CH1_RIGHT_CH_MIX_REG,
16, 0, 0x80, 0),
SOC_DOUBLE_R_RANGE("CH2 Mixer Volume",
TAS5717_CH2_LEFT_CH_MIX_REG,
TAS5717_CH2_RIGHT_CH_MIX_REG,
16, 0, 0x80, 0),
}; };
static const struct regmap_range tas571x_readonly_regs_range[] = { static const struct regmap_range tas571x_readonly_regs_range[] = {
...@@ -488,6 +467,16 @@ static const struct snd_kcontrol_new tas5717_controls[] = { ...@@ -488,6 +467,16 @@ static const struct snd_kcontrol_new tas5717_controls[] = {
TAS571X_SOFT_MUTE_CH1_SHIFT, TAS571X_SOFT_MUTE_CH2_SHIFT, TAS571X_SOFT_MUTE_CH1_SHIFT, TAS571X_SOFT_MUTE_CH2_SHIFT,
1, 1), 1, 1),
SOC_DOUBLE_R_RANGE("CH1 Mixer Volume",
TAS5717_CH1_LEFT_CH_MIX_REG,
TAS5717_CH1_RIGHT_CH_MIX_REG,
16, 0, 0x80, 0),
SOC_DOUBLE_R_RANGE("CH2 Mixer Volume",
TAS5717_CH2_LEFT_CH_MIX_REG,
TAS5717_CH2_RIGHT_CH_MIX_REG,
16, 0, 0x80, 0),
/* /*
* The biquads are named according to the register names. * The biquads are named according to the register names.
* Please note that TI's TAS57xx Graphical Development Environment * Please note that TI's TAS57xx Graphical Development Environment
...@@ -747,13 +736,14 @@ static int tas571x_i2c_probe(struct i2c_client *client, ...@@ -747,13 +736,14 @@ static int tas571x_i2c_probe(struct i2c_client *client,
/* pulse the active low reset line for ~100us */ /* pulse the active low reset line for ~100us */
usleep_range(100, 200); usleep_range(100, 200);
gpiod_set_value(priv->reset_gpio, 0); gpiod_set_value(priv->reset_gpio, 0);
usleep_range(12000, 20000); usleep_range(13500, 20000);
} }
ret = regmap_write(priv->regmap, TAS571X_OSC_TRIM_REG, 0); ret = regmap_write(priv->regmap, TAS571X_OSC_TRIM_REG, 0);
if (ret) if (ret)
return ret; return ret;
usleep_range(50000, 60000);
memcpy(&priv->codec_driver, &tas571x_codec, sizeof(priv->codec_driver)); memcpy(&priv->codec_driver, &tas571x_codec, sizeof(priv->codec_driver));
priv->codec_driver.component_driver.controls = priv->chip->controls; priv->codec_driver.component_driver.controls = priv->chip->controls;
...@@ -770,9 +760,6 @@ static int tas571x_i2c_probe(struct i2c_client *client, ...@@ -770,9 +760,6 @@ static int tas571x_i2c_probe(struct i2c_client *client,
return ret; return ret;
} }
regcache_cache_only(priv->regmap, true);
gpiod_set_value(priv->pdn_gpio, 1);
return snd_soc_register_codec(&client->dev, &priv->codec_driver, return snd_soc_register_codec(&client->dev, &priv->codec_driver,
&tas571x_dai, 1); &tas571x_dai, 1);
} }
......
...@@ -383,11 +383,6 @@ static int s3c_ac97_probe(struct platform_device *pdev) ...@@ -383,11 +383,6 @@ static int s3c_ac97_probe(struct platform_device *pdev)
goto err4; goto err4;
} }
ret = devm_snd_soc_register_component(&pdev->dev, &s3c_ac97_component,
s3c_ac97_dai, ARRAY_SIZE(s3c_ac97_dai));
if (ret)
goto err5;
ret = samsung_asoc_dma_platform_register(&pdev->dev, ret = samsung_asoc_dma_platform_register(&pdev->dev,
ac97_pdata->dma_filter, ac97_pdata->dma_filter,
NULL, NULL); NULL, NULL);
...@@ -396,6 +391,11 @@ static int s3c_ac97_probe(struct platform_device *pdev) ...@@ -396,6 +391,11 @@ static int s3c_ac97_probe(struct platform_device *pdev)
goto err5; goto err5;
} }
ret = devm_snd_soc_register_component(&pdev->dev, &s3c_ac97_component,
s3c_ac97_dai, ARRAY_SIZE(s3c_ac97_dai));
if (ret)
goto err5;
return 0; return 0;
err5: err5:
free_irq(irq_res->start, NULL); free_irq(irq_res->start, NULL);
......
...@@ -1237,14 +1237,14 @@ static int samsung_i2s_probe(struct platform_device *pdev) ...@@ -1237,14 +1237,14 @@ static int samsung_i2s_probe(struct platform_device *pdev)
dev_err(&pdev->dev, "Unable to get drvdata\n"); dev_err(&pdev->dev, "Unable to get drvdata\n");
return -EFAULT; return -EFAULT;
} }
ret = devm_snd_soc_register_component(&sec_dai->pdev->dev, ret = samsung_asoc_dma_platform_register(&pdev->dev,
&samsung_i2s_component, sec_dai->filter, "tx-sec", NULL);
&sec_dai->i2s_dai_drv, 1);
if (ret != 0) if (ret != 0)
return ret; return ret;
return samsung_asoc_dma_platform_register(&pdev->dev, return devm_snd_soc_register_component(&sec_dai->pdev->dev,
sec_dai->filter, "tx-sec", NULL); &samsung_i2s_component,
&sec_dai->i2s_dai_drv, 1);
} }
pri_dai = i2s_alloc_dai(pdev, false); pri_dai = i2s_alloc_dai(pdev, false);
...@@ -1314,6 +1314,11 @@ static int samsung_i2s_probe(struct platform_device *pdev) ...@@ -1314,6 +1314,11 @@ static int samsung_i2s_probe(struct platform_device *pdev)
if (quirks & QUIRK_PRI_6CHAN) if (quirks & QUIRK_PRI_6CHAN)
pri_dai->i2s_dai_drv.playback.channels_max = 6; pri_dai->i2s_dai_drv.playback.channels_max = 6;
ret = samsung_asoc_dma_platform_register(&pdev->dev, pri_dai->filter,
NULL, NULL);
if (ret < 0)
goto err_disable_clk;
if (quirks & QUIRK_SEC_DAI) { if (quirks & QUIRK_SEC_DAI) {
sec_dai = i2s_alloc_dai(pdev, true); sec_dai = i2s_alloc_dai(pdev, true);
if (!sec_dai) { if (!sec_dai) {
...@@ -1353,10 +1358,6 @@ static int samsung_i2s_probe(struct platform_device *pdev) ...@@ -1353,10 +1358,6 @@ static int samsung_i2s_probe(struct platform_device *pdev)
if (ret < 0) if (ret < 0)
goto err_free_dai; goto err_free_dai;
ret = samsung_asoc_dma_platform_register(&pdev->dev, pri_dai->filter,
NULL, NULL);
if (ret < 0)
goto err_free_dai;
pm_runtime_enable(&pdev->dev); pm_runtime_enable(&pdev->dev);
......
...@@ -565,24 +565,25 @@ static int s3c_pcm_dev_probe(struct platform_device *pdev) ...@@ -565,24 +565,25 @@ static int s3c_pcm_dev_probe(struct platform_device *pdev)
pcm->dma_capture = &s3c_pcm_stereo_in[pdev->id]; pcm->dma_capture = &s3c_pcm_stereo_in[pdev->id];
pcm->dma_playback = &s3c_pcm_stereo_out[pdev->id]; pcm->dma_playback = &s3c_pcm_stereo_out[pdev->id];
ret = samsung_asoc_dma_platform_register(&pdev->dev, filter,
NULL, NULL);
if (ret) {
dev_err(&pdev->dev, "failed to get register DMA: %d\n", ret);
goto err5;
}
pm_runtime_enable(&pdev->dev); pm_runtime_enable(&pdev->dev);
ret = devm_snd_soc_register_component(&pdev->dev, &s3c_pcm_component, ret = devm_snd_soc_register_component(&pdev->dev, &s3c_pcm_component,
&s3c_pcm_dai[pdev->id], 1); &s3c_pcm_dai[pdev->id], 1);
if (ret != 0) { if (ret != 0) {
dev_err(&pdev->dev, "failed to get register DAI: %d\n", ret); dev_err(&pdev->dev, "failed to get register DAI: %d\n", ret);
goto err5; goto err6;
}
ret = samsung_asoc_dma_platform_register(&pdev->dev, filter,
NULL, NULL);
if (ret) {
dev_err(&pdev->dev, "failed to get register DMA: %d\n", ret);
goto err5;
} }
return 0; return 0;
err6:
pm_runtime_disable(&pdev->dev);
err5: err5:
clk_disable_unprepare(pcm->pclk); clk_disable_unprepare(pcm->pclk);
err4: err4:
......
...@@ -168,19 +168,19 @@ static int s3c2412_iis_dev_probe(struct platform_device *pdev) ...@@ -168,19 +168,19 @@ static int s3c2412_iis_dev_probe(struct platform_device *pdev)
s3c2412_i2s_pcm_stereo_in.addr = res->start + S3C2412_IISRXD; s3c2412_i2s_pcm_stereo_in.addr = res->start + S3C2412_IISRXD;
s3c2412_i2s_pcm_stereo_in.filter_data = pdata->dma_capture; s3c2412_i2s_pcm_stereo_in.filter_data = pdata->dma_capture;
ret = s3c_i2sv2_register_component(&pdev->dev, -1, ret = samsung_asoc_dma_platform_register(&pdev->dev,
&s3c2412_i2s_component, pdata->dma_filter,
&s3c2412_i2s_dai); NULL, NULL);
if (ret) { if (ret) {
pr_err("failed to register the dai\n"); pr_err("failed to register the DMA: %d\n", ret);
return ret; return ret;
} }
ret = samsung_asoc_dma_platform_register(&pdev->dev, ret = s3c_i2sv2_register_component(&pdev->dev, -1,
pdata->dma_filter, &s3c2412_i2s_component,
NULL, NULL); &s3c2412_i2s_dai);
if (ret) if (ret)
pr_err("failed to register the DMA: %d\n", ret); pr_err("failed to register the dai\n");
return ret; return ret;
} }
......
...@@ -474,18 +474,18 @@ static int s3c24xx_iis_dev_probe(struct platform_device *pdev) ...@@ -474,18 +474,18 @@ static int s3c24xx_iis_dev_probe(struct platform_device *pdev)
s3c24xx_i2s_pcm_stereo_in.addr = res->start + S3C2410_IISFIFO; s3c24xx_i2s_pcm_stereo_in.addr = res->start + S3C2410_IISFIFO;
s3c24xx_i2s_pcm_stereo_in.filter_data = pdata->dma_capture; s3c24xx_i2s_pcm_stereo_in.filter_data = pdata->dma_capture;
ret = devm_snd_soc_register_component(&pdev->dev, ret = samsung_asoc_dma_platform_register(&pdev->dev,
&s3c24xx_i2s_component, &s3c24xx_i2s_dai, 1); pdata->dma_filter,
NULL, NULL);
if (ret) { if (ret) {
pr_err("failed to register the dai\n"); pr_err("failed to register the dma: %d\n", ret);
return ret; return ret;
} }
ret = samsung_asoc_dma_platform_register(&pdev->dev, ret = devm_snd_soc_register_component(&pdev->dev,
pdata->dma_filter, &s3c24xx_i2s_component, &s3c24xx_i2s_dai, 1);
NULL, NULL);
if (ret) if (ret)
pr_err("failed to register the dma: %d\n", ret); pr_err("failed to register the dai\n");
return ret; return ret;
} }
......
...@@ -416,15 +416,6 @@ static int spdif_probe(struct platform_device *pdev) ...@@ -416,15 +416,6 @@ static int spdif_probe(struct platform_device *pdev)
goto err3; goto err3;
} }
dev_set_drvdata(&pdev->dev, spdif);
ret = devm_snd_soc_register_component(&pdev->dev,
&samsung_spdif_component, &samsung_spdif_dai, 1);
if (ret != 0) {
dev_err(&pdev->dev, "fail to register dai\n");
goto err4;
}
spdif_stereo_out.addr_width = 2; spdif_stereo_out.addr_width = 2;
spdif_stereo_out.addr = mem_res->start + DATA_OUTBUF; spdif_stereo_out.addr = mem_res->start + DATA_OUTBUF;
filter = NULL; filter = NULL;
...@@ -432,7 +423,6 @@ static int spdif_probe(struct platform_device *pdev) ...@@ -432,7 +423,6 @@ static int spdif_probe(struct platform_device *pdev)
spdif_stereo_out.filter_data = spdif_pdata->dma_playback; spdif_stereo_out.filter_data = spdif_pdata->dma_playback;
filter = spdif_pdata->dma_filter; filter = spdif_pdata->dma_filter;
} }
spdif->dma_playback = &spdif_stereo_out; spdif->dma_playback = &spdif_stereo_out;
ret = samsung_asoc_dma_platform_register(&pdev->dev, filter, ret = samsung_asoc_dma_platform_register(&pdev->dev, filter,
...@@ -442,6 +432,15 @@ static int spdif_probe(struct platform_device *pdev) ...@@ -442,6 +432,15 @@ static int spdif_probe(struct platform_device *pdev)
goto err4; goto err4;
} }
dev_set_drvdata(&pdev->dev, spdif);
ret = devm_snd_soc_register_component(&pdev->dev,
&samsung_spdif_component, &samsung_spdif_dai, 1);
if (ret != 0) {
dev_err(&pdev->dev, "fail to register dai\n");
goto err4;
}
return 0; return 0;
err4: err4:
iounmap(spdif->regs); iounmap(spdif->regs);
......
...@@ -614,7 +614,11 @@ static int uni_player_ctl_iec958_put(struct snd_kcontrol *kcontrol, ...@@ -614,7 +614,11 @@ static int uni_player_ctl_iec958_put(struct snd_kcontrol *kcontrol,
iec958->status[3] = ucontrol->value.iec958.status[3]; iec958->status[3] = ucontrol->value.iec958.status[3];
mutex_unlock(&player->ctrl_lock); mutex_unlock(&player->ctrl_lock);
uni_player_set_channel_status(player, NULL); if (player->substream && player->substream->runtime)
uni_player_set_channel_status(player,
player->substream->runtime);
else
uni_player_set_channel_status(player, NULL);
return 0; return 0;
} }
......
...@@ -765,11 +765,11 @@ static struct snd_soc_card *sun4i_codec_create_card(struct device *dev) ...@@ -765,11 +765,11 @@ static struct snd_soc_card *sun4i_codec_create_card(struct device *dev)
card = devm_kzalloc(dev, sizeof(*card), GFP_KERNEL); card = devm_kzalloc(dev, sizeof(*card), GFP_KERNEL);
if (!card) if (!card)
return NULL; return ERR_PTR(-ENOMEM);
card->dai_link = sun4i_codec_create_link(dev, &card->num_links); card->dai_link = sun4i_codec_create_link(dev, &card->num_links);
if (!card->dai_link) if (!card->dai_link)
return NULL; return ERR_PTR(-ENOMEM);
card->dev = dev; card->dev = dev;
card->name = "sun4i-codec"; card->name = "sun4i-codec";
...@@ -829,12 +829,6 @@ static int sun4i_codec_probe(struct platform_device *pdev) ...@@ -829,12 +829,6 @@ static int sun4i_codec_probe(struct platform_device *pdev)
return PTR_ERR(scodec->clk_module); return PTR_ERR(scodec->clk_module);
} }
/* Enable the bus clock */
if (clk_prepare_enable(scodec->clk_apb)) {
dev_err(&pdev->dev, "Failed to enable the APB clock\n");
return -EINVAL;
}
scodec->gpio_pa = devm_gpiod_get_optional(&pdev->dev, "allwinner,pa", scodec->gpio_pa = devm_gpiod_get_optional(&pdev->dev, "allwinner,pa",
GPIOD_OUT_LOW); GPIOD_OUT_LOW);
if (IS_ERR(scodec->gpio_pa)) { if (IS_ERR(scodec->gpio_pa)) {
...@@ -844,6 +838,12 @@ static int sun4i_codec_probe(struct platform_device *pdev) ...@@ -844,6 +838,12 @@ static int sun4i_codec_probe(struct platform_device *pdev)
return ret; return ret;
} }
/* Enable the bus clock */
if (clk_prepare_enable(scodec->clk_apb)) {
dev_err(&pdev->dev, "Failed to enable the APB clock\n");
return -EINVAL;
}
/* DMA configuration for TX FIFO */ /* DMA configuration for TX FIFO */
scodec->playback_dma_data.addr = res->start + SUN4I_CODEC_DAC_TXDATA; scodec->playback_dma_data.addr = res->start + SUN4I_CODEC_DAC_TXDATA;
scodec->playback_dma_data.maxburst = 4; scodec->playback_dma_data.maxburst = 4;
...@@ -876,7 +876,8 @@ static int sun4i_codec_probe(struct platform_device *pdev) ...@@ -876,7 +876,8 @@ static int sun4i_codec_probe(struct platform_device *pdev)
} }
card = sun4i_codec_create_card(&pdev->dev); card = sun4i_codec_create_card(&pdev->dev);
if (!card) { if (IS_ERR(card)) {
ret = PTR_ERR(card);
dev_err(&pdev->dev, "Failed to create our card\n"); dev_err(&pdev->dev, "Failed to create our card\n");
goto err_unregister_codec; goto err_unregister_codec;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment