Commit b34510b7 authored by Mark Brown's avatar Mark Brown

Merge tag 'asoc-v3.19-rc2' into asoc-linus

ASoC: Updates for v3.20

Nothing too exciting here yet, a small optimization for DAPM from
Lars-Peter and a few small bits and pieces for drivers but nothing
that really stands out.

# gpg: Signature made Tue 30 Dec 2014 00:15:48 HKT using RSA key ID 5D5487D0
# gpg: Oops: keyid_from_fingerprint: no pubkey
# gpg: key AF88CD16: no public key for trusted key - skipped
# gpg: key AF88CD16 marked as ultimately trusted
# gpg: key 5621E907: no public key for trusted key - skipped
# gpg: key 5621E907 marked as ultimately trusted
# gpg: Good signature from "Mark Brown <broonie@sirena.org.uk>"
# gpg:                 aka "Mark Brown <broonie@debian.org>"
# gpg:                 aka "Mark Brown <broonie@kernel.org>"
# gpg:                 aka "Mark Brown <broonie@tardis.ed.ac.uk>"
# gpg:                 aka "Mark Brown <broonie@linaro.org>"
# gpg:                 aka "Mark Brown <Mark.Brown@linaro.org>"
parents e36f014e 1b9f1ae8
...@@ -5,7 +5,8 @@ on the board). ...@@ -5,7 +5,8 @@ on the board).
Required properties: Required properties:
- compatible : One of "ti,pcm5121" or "ti,pcm5122" - compatible : One of "ti,pcm5121", "ti,pcm5122", "ti,pcm5141" or
"ti,pcm5142"
- reg : the I2C address of the device for I2C, the chip select - reg : the I2C address of the device for I2C, the chip select
number for SPI. number for SPI.
......
...@@ -431,7 +431,6 @@ int snd_soc_dapm_force_enable_pin_unlocked(struct snd_soc_dapm_context *dapm, ...@@ -431,7 +431,6 @@ int snd_soc_dapm_force_enable_pin_unlocked(struct snd_soc_dapm_context *dapm,
const char *pin); const char *pin);
int snd_soc_dapm_ignore_suspend(struct snd_soc_dapm_context *dapm, int snd_soc_dapm_ignore_suspend(struct snd_soc_dapm_context *dapm,
const char *pin); const char *pin);
void snd_soc_dapm_auto_nc_pins(struct snd_soc_card *card);
unsigned int dapm_kcontrol_get_value(const struct snd_kcontrol *kcontrol); unsigned int dapm_kcontrol_get_value(const struct snd_kcontrol *kcontrol);
/* Mostly internal - should not normally be used */ /* Mostly internal - should not normally be used */
......
...@@ -46,6 +46,8 @@ static int pcm512x_i2c_remove(struct i2c_client *i2c) ...@@ -46,6 +46,8 @@ static int pcm512x_i2c_remove(struct i2c_client *i2c)
static const struct i2c_device_id pcm512x_i2c_id[] = { static const struct i2c_device_id pcm512x_i2c_id[] = {
{ "pcm5121", }, { "pcm5121", },
{ "pcm5122", }, { "pcm5122", },
{ "pcm5141", },
{ "pcm5142", },
{ } { }
}; };
MODULE_DEVICE_TABLE(i2c, pcm512x_i2c_id); MODULE_DEVICE_TABLE(i2c, pcm512x_i2c_id);
...@@ -53,6 +55,8 @@ MODULE_DEVICE_TABLE(i2c, pcm512x_i2c_id); ...@@ -53,6 +55,8 @@ MODULE_DEVICE_TABLE(i2c, pcm512x_i2c_id);
static const struct of_device_id pcm512x_of_match[] = { static const struct of_device_id pcm512x_of_match[] = {
{ .compatible = "ti,pcm5121", }, { .compatible = "ti,pcm5121", },
{ .compatible = "ti,pcm5122", }, { .compatible = "ti,pcm5122", },
{ .compatible = "ti,pcm5141", },
{ .compatible = "ti,pcm5142", },
{ } { }
}; };
MODULE_DEVICE_TABLE(of, pcm512x_of_match); MODULE_DEVICE_TABLE(of, pcm512x_of_match);
......
...@@ -43,6 +43,8 @@ static int pcm512x_spi_remove(struct spi_device *spi) ...@@ -43,6 +43,8 @@ static int pcm512x_spi_remove(struct spi_device *spi)
static const struct spi_device_id pcm512x_spi_id[] = { static const struct spi_device_id pcm512x_spi_id[] = {
{ "pcm5121", }, { "pcm5121", },
{ "pcm5122", }, { "pcm5122", },
{ "pcm5141", },
{ "pcm5142", },
{ }, { },
}; };
MODULE_DEVICE_TABLE(spi, pcm512x_spi_id); MODULE_DEVICE_TABLE(spi, pcm512x_spi_id);
...@@ -50,6 +52,8 @@ MODULE_DEVICE_TABLE(spi, pcm512x_spi_id); ...@@ -50,6 +52,8 @@ MODULE_DEVICE_TABLE(spi, pcm512x_spi_id);
static const struct of_device_id pcm512x_of_match[] = { static const struct of_device_id pcm512x_of_match[] = {
{ .compatible = "ti,pcm5121", }, { .compatible = "ti,pcm5121", },
{ .compatible = "ti,pcm5122", }, { .compatible = "ti,pcm5122", },
{ .compatible = "ti,pcm5141", },
{ .compatible = "ti,pcm5142", },
{ } { }
}; };
MODULE_DEVICE_TABLE(of, pcm512x_of_match); MODULE_DEVICE_TABLE(of, pcm512x_of_match);
......
...@@ -14,10 +14,12 @@ ...@@ -14,10 +14,12 @@
#include <linux/init.h> #include <linux/init.h>
#include <linux/delay.h> #include <linux/delay.h>
#include <linux/pm.h> #include <linux/pm.h>
#include <linux/pm_runtime.h>
#include <linux/i2c.h> #include <linux/i2c.h>
#include <linux/platform_device.h> #include <linux/platform_device.h>
#include <linux/acpi.h> #include <linux/acpi.h>
#include <linux/spi/spi.h> #include <linux/spi/spi.h>
#include <linux/dmi.h>
#include <sound/core.h> #include <sound/core.h>
#include <sound/pcm.h> #include <sound/pcm.h>
#include <sound/pcm_params.h> #include <sound/pcm_params.h>
...@@ -2188,6 +2190,13 @@ static int rt5670_set_dai_sysclk(struct snd_soc_dai *dai, ...@@ -2188,6 +2190,13 @@ static int rt5670_set_dai_sysclk(struct snd_soc_dai *dai,
if (freq == rt5670->sysclk && clk_id == rt5670->sysclk_src) if (freq == rt5670->sysclk && clk_id == rt5670->sysclk_src)
return 0; return 0;
if (rt5670->pdata.jd_mode) {
if (clk_id == RT5670_SCLK_S_PLL1)
snd_soc_dapm_force_enable_pin(&codec->dapm, "PLL1");
else
snd_soc_dapm_disable_pin(&codec->dapm, "PLL1");
snd_soc_dapm_sync(&codec->dapm);
}
switch (clk_id) { switch (clk_id) {
case RT5670_SCLK_S_MCLK: case RT5670_SCLK_S_MCLK:
reg_val |= RT5670_SCLK_SRC_MCLK; reg_val |= RT5670_SCLK_SRC_MCLK;
...@@ -2549,6 +2558,17 @@ static struct acpi_device_id rt5670_acpi_match[] = { ...@@ -2549,6 +2558,17 @@ static struct acpi_device_id rt5670_acpi_match[] = {
MODULE_DEVICE_TABLE(acpi, rt5670_acpi_match); MODULE_DEVICE_TABLE(acpi, rt5670_acpi_match);
#endif #endif
static const struct dmi_system_id dmi_platform_intel_braswell[] = {
{
.ident = "Intel Braswell",
.matches = {
DMI_MATCH(DMI_SYS_VENDOR, "Intel Corporation"),
DMI_MATCH(DMI_BOARD_NAME, "Braswell CRB"),
},
},
{}
};
static int rt5670_i2c_probe(struct i2c_client *i2c, static int rt5670_i2c_probe(struct i2c_client *i2c,
const struct i2c_device_id *id) const struct i2c_device_id *id)
{ {
...@@ -2568,6 +2588,12 @@ static int rt5670_i2c_probe(struct i2c_client *i2c, ...@@ -2568,6 +2588,12 @@ static int rt5670_i2c_probe(struct i2c_client *i2c,
if (pdata) if (pdata)
rt5670->pdata = *pdata; rt5670->pdata = *pdata;
if (dmi_check_system(dmi_platform_intel_braswell)) {
rt5670->pdata.dmic_en = true;
rt5670->pdata.dmic1_data_pin = RT5670_DMIC_DATA_IN2P;
rt5670->pdata.jd_mode = 1;
}
rt5670->regmap = devm_regmap_init_i2c(i2c, &rt5670_regmap); rt5670->regmap = devm_regmap_init_i2c(i2c, &rt5670_regmap);
if (IS_ERR(rt5670->regmap)) { if (IS_ERR(rt5670->regmap)) {
ret = PTR_ERR(rt5670->regmap); ret = PTR_ERR(rt5670->regmap);
...@@ -2609,6 +2635,10 @@ static int rt5670_i2c_probe(struct i2c_client *i2c, ...@@ -2609,6 +2635,10 @@ static int rt5670_i2c_probe(struct i2c_client *i2c,
} }
if (rt5670->pdata.jd_mode) { if (rt5670->pdata.jd_mode) {
regmap_update_bits(rt5670->regmap, RT5670_GLB_CLK,
RT5670_SCLK_SRC_MASK, RT5670_SCLK_SRC_RCCLK);
rt5670->sysclk = 0;
rt5670->sysclk_src = RT5670_SCLK_S_RCCLK;
regmap_update_bits(rt5670->regmap, RT5670_PWR_ANLG1, regmap_update_bits(rt5670->regmap, RT5670_PWR_ANLG1,
RT5670_PWR_MB, RT5670_PWR_MB); RT5670_PWR_MB, RT5670_PWR_MB);
regmap_update_bits(rt5670->regmap, RT5670_PWR_ANLG2, regmap_update_bits(rt5670->regmap, RT5670_PWR_ANLG2,
...@@ -2716,18 +2746,26 @@ static int rt5670_i2c_probe(struct i2c_client *i2c, ...@@ -2716,18 +2746,26 @@ static int rt5670_i2c_probe(struct i2c_client *i2c,
} }
pm_runtime_enable(&i2c->dev);
pm_request_idle(&i2c->dev);
ret = snd_soc_register_codec(&i2c->dev, &soc_codec_dev_rt5670, ret = snd_soc_register_codec(&i2c->dev, &soc_codec_dev_rt5670,
rt5670_dai, ARRAY_SIZE(rt5670_dai)); rt5670_dai, ARRAY_SIZE(rt5670_dai));
if (ret < 0) if (ret < 0)
goto err; goto err;
pm_runtime_put(&i2c->dev);
return 0; return 0;
err: err:
pm_runtime_disable(&i2c->dev);
return ret; return ret;
} }
static int rt5670_i2c_remove(struct i2c_client *i2c) static int rt5670_i2c_remove(struct i2c_client *i2c)
{ {
pm_runtime_disable(&i2c->dev);
snd_soc_unregister_codec(&i2c->dev); snd_soc_unregister_codec(&i2c->dev);
return 0; return 0;
......
This diff is collapsed.
...@@ -323,7 +323,7 @@ static const struct snd_soc_dapm_widget wm8750_dapm_widgets[] = { ...@@ -323,7 +323,7 @@ static const struct snd_soc_dapm_widget wm8750_dapm_widgets[] = {
SND_SOC_DAPM_OUTPUT("ROUT2"), SND_SOC_DAPM_OUTPUT("ROUT2"),
SND_SOC_DAPM_OUTPUT("MONO1"), SND_SOC_DAPM_OUTPUT("MONO1"),
SND_SOC_DAPM_OUTPUT("OUT3"), SND_SOC_DAPM_OUTPUT("OUT3"),
SND_SOC_DAPM_OUTPUT("VREF"), SND_SOC_DAPM_VMID("VREF"),
SND_SOC_DAPM_INPUT("LINPUT1"), SND_SOC_DAPM_INPUT("LINPUT1"),
SND_SOC_DAPM_INPUT("LINPUT2"), SND_SOC_DAPM_INPUT("LINPUT2"),
......
...@@ -335,13 +335,47 @@ static int dw_i2s_resume(struct snd_soc_dai *dai) ...@@ -335,13 +335,47 @@ static int dw_i2s_resume(struct snd_soc_dai *dai)
#define dw_i2s_resume NULL #define dw_i2s_resume NULL
#endif #endif
static void dw_configure_dai_by_pd(struct dw_i2s_dev *dev,
struct snd_soc_dai_driver *dw_i2s_dai,
struct resource *res,
const struct i2s_platform_data *pdata)
{
/* Set DMA slaves info */
dev->play_dma_data.data = pdata->play_dma_data;
dev->capture_dma_data.data = pdata->capture_dma_data;
dev->play_dma_data.addr = res->start + I2S_TXDMA;
dev->capture_dma_data.addr = res->start + I2S_RXDMA;
dev->play_dma_data.max_burst = 16;
dev->capture_dma_data.max_burst = 16;
dev->play_dma_data.addr_width = DMA_SLAVE_BUSWIDTH_2_BYTES;
dev->capture_dma_data.addr_width = DMA_SLAVE_BUSWIDTH_2_BYTES;
dev->play_dma_data.filter = pdata->filter;
dev->capture_dma_data.filter = pdata->filter;
if (pdata->cap & DWC_I2S_PLAY) {
dev_dbg(dev->dev, " designware: play supported\n");
dw_i2s_dai->playback.channels_min = MIN_CHANNEL_NUM;
dw_i2s_dai->playback.channels_max = pdata->channel;
dw_i2s_dai->playback.formats = pdata->snd_fmts;
dw_i2s_dai->playback.rates = pdata->snd_rates;
}
if (pdata->cap & DWC_I2S_RECORD) {
dev_dbg(dev->dev, "designware: record supported\n");
dw_i2s_dai->capture.channels_min = MIN_CHANNEL_NUM;
dw_i2s_dai->capture.channels_max = pdata->channel;
dw_i2s_dai->capture.formats = pdata->snd_fmts;
dw_i2s_dai->capture.rates = pdata->snd_rates;
}
}
static int dw_i2s_probe(struct platform_device *pdev) static int dw_i2s_probe(struct platform_device *pdev)
{ {
const struct i2s_platform_data *pdata = pdev->dev.platform_data; const struct i2s_platform_data *pdata = pdev->dev.platform_data;
struct dw_i2s_dev *dev; struct dw_i2s_dev *dev;
struct resource *res; struct resource *res;
int ret; int ret;
unsigned int cap;
struct snd_soc_dai_driver *dw_i2s_dai; struct snd_soc_dai_driver *dw_i2s_dai;
if (!pdata) { if (!pdata) {
...@@ -356,44 +390,23 @@ static int dw_i2s_probe(struct platform_device *pdev) ...@@ -356,44 +390,23 @@ static int dw_i2s_probe(struct platform_device *pdev)
} }
dw_i2s_dai = devm_kzalloc(&pdev->dev, sizeof(*dw_i2s_dai), GFP_KERNEL); dw_i2s_dai = devm_kzalloc(&pdev->dev, sizeof(*dw_i2s_dai), GFP_KERNEL);
if (!dw_i2s_dai) { if (!dw_i2s_dai)
dev_err(&pdev->dev, "mem allocation failed for dai driver\n");
return -ENOMEM; return -ENOMEM;
}
dw_i2s_dai->ops = &dw_i2s_dai_ops; dw_i2s_dai->ops = &dw_i2s_dai_ops;
dw_i2s_dai->suspend = dw_i2s_suspend; dw_i2s_dai->suspend = dw_i2s_suspend;
dw_i2s_dai->resume = dw_i2s_resume; dw_i2s_dai->resume = dw_i2s_resume;
res = platform_get_resource(pdev, IORESOURCE_MEM, 0); res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
if (!res) {
dev_err(&pdev->dev, "no i2s resource defined\n");
return -ENODEV;
}
dev->i2s_base = devm_ioremap_resource(&pdev->dev, res); dev->i2s_base = devm_ioremap_resource(&pdev->dev, res);
if (IS_ERR(dev->i2s_base)) { if (IS_ERR(dev->i2s_base))
dev_err(&pdev->dev, "ioremap fail for i2s_region\n");
return PTR_ERR(dev->i2s_base); return PTR_ERR(dev->i2s_base);
}
cap = pdata->cap;
dev->capability = cap;
dev->i2s_clk_cfg = pdata->i2s_clk_cfg;
/* Set DMA slaves info */
dev->play_dma_data.data = pdata->play_dma_data; dev->dev = &pdev->dev;
dev->capture_dma_data.data = pdata->capture_dma_data; dw_configure_dai_by_pd(dev, dw_i2s_dai, res, pdata);
dev->play_dma_data.addr = res->start + I2S_TXDMA;
dev->capture_dma_data.addr = res->start + I2S_RXDMA;
dev->play_dma_data.max_burst = 16;
dev->capture_dma_data.max_burst = 16;
dev->play_dma_data.addr_width = DMA_SLAVE_BUSWIDTH_2_BYTES;
dev->capture_dma_data.addr_width = DMA_SLAVE_BUSWIDTH_2_BYTES;
dev->play_dma_data.filter = pdata->filter;
dev->capture_dma_data.filter = pdata->filter;
dev->capability = pdata->cap;
dev->i2s_clk_cfg = pdata->i2s_clk_cfg;
dev->clk = clk_get(&pdev->dev, NULL); dev->clk = clk_get(&pdev->dev, NULL);
if (IS_ERR(dev->clk)) if (IS_ERR(dev->clk))
return PTR_ERR(dev->clk); return PTR_ERR(dev->clk);
...@@ -402,23 +415,6 @@ static int dw_i2s_probe(struct platform_device *pdev) ...@@ -402,23 +415,6 @@ static int dw_i2s_probe(struct platform_device *pdev)
if (ret < 0) if (ret < 0)
goto err_clk_put; goto err_clk_put;
if (cap & DWC_I2S_PLAY) {
dev_dbg(&pdev->dev, " designware: play supported\n");
dw_i2s_dai->playback.channels_min = MIN_CHANNEL_NUM;
dw_i2s_dai->playback.channels_max = pdata->channel;
dw_i2s_dai->playback.formats = pdata->snd_fmts;
dw_i2s_dai->playback.rates = pdata->snd_rates;
}
if (cap & DWC_I2S_RECORD) {
dev_dbg(&pdev->dev, "designware: record supported\n");
dw_i2s_dai->capture.channels_min = MIN_CHANNEL_NUM;
dw_i2s_dai->capture.channels_max = pdata->channel;
dw_i2s_dai->capture.formats = pdata->snd_fmts;
dw_i2s_dai->capture.rates = pdata->snd_rates;
}
dev->dev = &pdev->dev;
dev_set_drvdata(&pdev->dev, dev); dev_set_drvdata(&pdev->dev, dev);
ret = snd_soc_register_component(&pdev->dev, &dw_i2s_component, ret = snd_soc_register_component(&pdev->dev, &dw_i2s_component,
dw_i2s_dai, 1); dw_i2s_dai, 1);
......
...@@ -46,7 +46,7 @@ config SND_SOC_INTEL_BAYTRAIL ...@@ -46,7 +46,7 @@ config SND_SOC_INTEL_BAYTRAIL
config SND_SOC_INTEL_HASWELL_MACH config SND_SOC_INTEL_HASWELL_MACH
tristate "ASoC Audio DSP support for Intel Haswell Lynxpoint" tristate "ASoC Audio DSP support for Intel Haswell Lynxpoint"
depends on SND_SOC_INTEL_SST && X86_INTEL_LPSS && I2C && \\ depends on SND_SOC_INTEL_SST && X86_INTEL_LPSS && I2C && \
I2C_DESIGNWARE_PLATFORM I2C_DESIGNWARE_PLATFORM
select SND_SOC_INTEL_HASWELL select SND_SOC_INTEL_HASWELL
select SND_SOC_RT5640 select SND_SOC_RT5640
...@@ -76,7 +76,7 @@ config SND_SOC_INTEL_BYT_MAX98090_MACH ...@@ -76,7 +76,7 @@ config SND_SOC_INTEL_BYT_MAX98090_MACH
config SND_SOC_INTEL_BROADWELL_MACH config SND_SOC_INTEL_BROADWELL_MACH
tristate "ASoC Audio DSP support for Intel Broadwell Wildcatpoint" tristate "ASoC Audio DSP support for Intel Broadwell Wildcatpoint"
depends on SND_SOC_INTEL_SST && X86_INTEL_LPSS && DW_DMAC && \\ depends on SND_SOC_INTEL_SST && X86_INTEL_LPSS && DW_DMAC && \
I2C_DESIGNWARE_PLATFORM I2C_DESIGNWARE_PLATFORM
select SND_SOC_INTEL_HASWELL select SND_SOC_INTEL_HASWELL
select SND_COMPRESS_OFFLOAD select SND_COMPRESS_OFFLOAD
......
...@@ -215,7 +215,6 @@ static int snd_byt_mc_probe(struct platform_device *pdev) ...@@ -215,7 +215,6 @@ static int snd_byt_mc_probe(struct platform_device *pdev)
static struct platform_driver snd_byt_mc_driver = { static struct platform_driver snd_byt_mc_driver = {
.driver = { .driver = {
.owner = THIS_MODULE,
.name = "bytt100_rt5640", .name = "bytt100_rt5640",
.pm = &snd_soc_pm_ops, .pm = &snd_soc_pm_ops,
}, },
......
...@@ -270,7 +270,6 @@ static int snd_cht_mc_probe(struct platform_device *pdev) ...@@ -270,7 +270,6 @@ static int snd_cht_mc_probe(struct platform_device *pdev)
static struct platform_driver snd_cht_mc_driver = { static struct platform_driver snd_cht_mc_driver = {
.driver = { .driver = {
.owner = THIS_MODULE,
.name = "cht-bsw-rt5672", .name = "cht-bsw-rt5672",
.pm = &snd_soc_pm_ops, .pm = &snd_soc_pm_ops,
}, },
......
...@@ -497,6 +497,7 @@ struct sst_module *sst_module_new(struct sst_fw *sst_fw, ...@@ -497,6 +497,7 @@ struct sst_module *sst_module_new(struct sst_fw *sst_fw,
sst_module->sst_fw = sst_fw; sst_module->sst_fw = sst_fw;
sst_module->scratch_size = template->scratch_size; sst_module->scratch_size = template->scratch_size;
sst_module->persistent_size = template->persistent_size; sst_module->persistent_size = template->persistent_size;
sst_module->entry = template->entry;
INIT_LIST_HEAD(&sst_module->block_list); INIT_LIST_HEAD(&sst_module->block_list);
INIT_LIST_HEAD(&sst_module->runtime_list); INIT_LIST_HEAD(&sst_module->runtime_list);
......
...@@ -245,7 +245,7 @@ static struct sst_machines *sst_acpi_find_machine( ...@@ -245,7 +245,7 @@ static struct sst_machines *sst_acpi_find_machine(
return NULL; return NULL;
} }
int sst_acpi_probe(struct platform_device *pdev) static int sst_acpi_probe(struct platform_device *pdev)
{ {
struct device *dev = &pdev->dev; struct device *dev = &pdev->dev;
int ret = 0; int ret = 0;
...@@ -332,7 +332,7 @@ int sst_acpi_probe(struct platform_device *pdev) ...@@ -332,7 +332,7 @@ int sst_acpi_probe(struct platform_device *pdev)
* This function is called by OS when a device is unloaded * This function is called by OS when a device is unloaded
* This frees the interrupt etc * This frees the interrupt etc
*/ */
int sst_acpi_remove(struct platform_device *pdev) static int sst_acpi_remove(struct platform_device *pdev)
{ {
struct intel_sst_drv *ctx; struct intel_sst_drv *ctx;
...@@ -366,7 +366,6 @@ MODULE_DEVICE_TABLE(acpi, sst_acpi_ids); ...@@ -366,7 +366,6 @@ MODULE_DEVICE_TABLE(acpi, sst_acpi_ids);
static struct platform_driver sst_acpi_driver = { static struct platform_driver sst_acpi_driver = {
.driver = { .driver = {
.name = "intel_sst_acpi", .name = "intel_sst_acpi",
.owner = THIS_MODULE,
.acpi_match_table = ACPI_PTR(sst_acpi_ids), .acpi_match_table = ACPI_PTR(sst_acpi_ids),
.pm = &intel_sst_pm, .pm = &intel_sst_pm,
}, },
......
...@@ -393,7 +393,6 @@ static int omap_hdmi_audio_remove(struct platform_device *pdev) ...@@ -393,7 +393,6 @@ static int omap_hdmi_audio_remove(struct platform_device *pdev)
static struct platform_driver hdmi_audio_driver = { static struct platform_driver hdmi_audio_driver = {
.driver = { .driver = {
.name = DRV_NAME, .name = DRV_NAME,
.owner = THIS_MODULE,
}, },
.probe = omap_hdmi_audio_probe, .probe = omap_hdmi_audio_probe,
.remove = omap_hdmi_audio_remove, .remove = omap_hdmi_audio_remove,
......
...@@ -352,7 +352,6 @@ static int spitz_remove(struct platform_device *pdev) ...@@ -352,7 +352,6 @@ static int spitz_remove(struct platform_device *pdev)
static struct platform_driver spitz_driver = { static struct platform_driver spitz_driver = {
.driver = { .driver = {
.name = "spitz-audio", .name = "spitz-audio",
.owner = THIS_MODULE,
.pm = &snd_soc_pm_ops, .pm = &snd_soc_pm_ops,
}, },
.probe = spitz_probe, .probe = spitz_probe,
......
...@@ -247,6 +247,10 @@ static int rockchip_i2s_hw_params(struct snd_pcm_substream *substream, ...@@ -247,6 +247,10 @@ static int rockchip_i2s_hw_params(struct snd_pcm_substream *substream,
regmap_update_bits(i2s->regmap, I2S_TXCR, I2S_TXCR_VDW_MASK, val); regmap_update_bits(i2s->regmap, I2S_TXCR, I2S_TXCR_VDW_MASK, val);
regmap_update_bits(i2s->regmap, I2S_RXCR, I2S_RXCR_VDW_MASK, val); regmap_update_bits(i2s->regmap, I2S_RXCR, I2S_RXCR_VDW_MASK, val);
regmap_update_bits(i2s->regmap, I2S_DMACR, I2S_DMACR_TDL_MASK,
I2S_DMACR_TDL(16));
regmap_update_bits(i2s->regmap, I2S_DMACR, I2S_DMACR_RDL_MASK,
I2S_DMACR_RDL(16));
return 0; return 0;
} }
......
...@@ -135,7 +135,6 @@ MODULE_DEVICE_TABLE(of, samsung_arndale_rt5631_of_match); ...@@ -135,7 +135,6 @@ MODULE_DEVICE_TABLE(of, samsung_arndale_rt5631_of_match);
static struct platform_driver arndale_audio_driver = { static struct platform_driver arndale_audio_driver = {
.driver = { .driver = {
.name = "arndale-audio", .name = "arndale-audio",
.owner = THIS_MODULE,
.pm = &snd_soc_pm_ops, .pm = &snd_soc_pm_ops,
.of_match_table = of_match_ptr(samsung_arndale_rt5631_of_match), .of_match_table = of_match_ptr(samsung_arndale_rt5631_of_match),
}, },
......
...@@ -1626,9 +1626,6 @@ static int snd_soc_instantiate_card(struct snd_soc_card *card) ...@@ -1626,9 +1626,6 @@ static int snd_soc_instantiate_card(struct snd_soc_card *card)
} }
} }
if (card->fully_routed)
snd_soc_dapm_auto_nc_pins(card);
snd_soc_dapm_new_widgets(card); snd_soc_dapm_new_widgets(card);
ret = snd_card_register(card->snd_card); ret = snd_card_register(card->snd_card);
......
...@@ -2279,6 +2279,9 @@ static void dapm_update_widget_flags(struct snd_soc_dapm_widget *w) ...@@ -2279,6 +2279,9 @@ static void dapm_update_widget_flags(struct snd_soc_dapm_widget *w)
switch (w->id) { switch (w->id) {
case snd_soc_dapm_input: case snd_soc_dapm_input:
/* On a fully routed card a input is never a source */
if (w->dapm->card->fully_routed)
break;
w->is_source = 1; w->is_source = 1;
list_for_each_entry(p, &w->sources, list_sink) { list_for_each_entry(p, &w->sources, list_sink) {
if (p->source->id == snd_soc_dapm_micbias || if (p->source->id == snd_soc_dapm_micbias ||
...@@ -2291,6 +2294,9 @@ static void dapm_update_widget_flags(struct snd_soc_dapm_widget *w) ...@@ -2291,6 +2294,9 @@ static void dapm_update_widget_flags(struct snd_soc_dapm_widget *w)
} }
break; break;
case snd_soc_dapm_output: case snd_soc_dapm_output:
/* On a fully routed card a output is never a sink */
if (w->dapm->card->fully_routed)
break;
w->is_sink = 1; w->is_sink = 1;
list_for_each_entry(p, &w->sinks, list_source) { list_for_each_entry(p, &w->sinks, list_source) {
if (p->sink->id == snd_soc_dapm_spk || if (p->sink->id == snd_soc_dapm_spk ||
...@@ -3085,16 +3091,24 @@ snd_soc_dapm_new_control(struct snd_soc_dapm_context *dapm, ...@@ -3085,16 +3091,24 @@ snd_soc_dapm_new_control(struct snd_soc_dapm_context *dapm,
switch (w->id) { switch (w->id) {
case snd_soc_dapm_mic: case snd_soc_dapm_mic:
case snd_soc_dapm_input:
w->is_source = 1; w->is_source = 1;
w->power_check = dapm_generic_check_power; w->power_check = dapm_generic_check_power;
break; break;
case snd_soc_dapm_input:
if (!dapm->card->fully_routed)
w->is_source = 1;
w->power_check = dapm_generic_check_power;
break;
case snd_soc_dapm_spk: case snd_soc_dapm_spk:
case snd_soc_dapm_hp: case snd_soc_dapm_hp:
case snd_soc_dapm_output:
w->is_sink = 1; w->is_sink = 1;
w->power_check = dapm_generic_check_power; w->power_check = dapm_generic_check_power;
break; break;
case snd_soc_dapm_output:
if (!dapm->card->fully_routed)
w->is_sink = 1;
w->power_check = dapm_generic_check_power;
break;
case snd_soc_dapm_vmid: case snd_soc_dapm_vmid:
case snd_soc_dapm_siggen: case snd_soc_dapm_siggen:
w->is_source = 1; w->is_source = 1;
...@@ -3808,93 +3822,6 @@ int snd_soc_dapm_ignore_suspend(struct snd_soc_dapm_context *dapm, ...@@ -3808,93 +3822,6 @@ int snd_soc_dapm_ignore_suspend(struct snd_soc_dapm_context *dapm,
} }
EXPORT_SYMBOL_GPL(snd_soc_dapm_ignore_suspend); EXPORT_SYMBOL_GPL(snd_soc_dapm_ignore_suspend);
/**
* dapm_is_external_path() - Checks if a path is a external path
* @card: The card the path belongs to
* @path: The path to check
*
* Returns true if the path is either between two different DAPM contexts or
* between two external pins of the same DAPM context. Otherwise returns
* false.
*/
static bool dapm_is_external_path(struct snd_soc_card *card,
struct snd_soc_dapm_path *path)
{
dev_dbg(card->dev,
"... Path %s(id:%d dapm:%p) - %s(id:%d dapm:%p)\n",
path->source->name, path->source->id, path->source->dapm,
path->sink->name, path->sink->id, path->sink->dapm);
/* Connection between two different DAPM contexts */
if (path->source->dapm != path->sink->dapm)
return true;
/* Loopback connection from external pin to external pin */
if (path->sink->id == snd_soc_dapm_input) {
switch (path->source->id) {
case snd_soc_dapm_output:
case snd_soc_dapm_micbias:
return true;
default:
break;
}
}
return false;
}
static bool snd_soc_dapm_widget_in_card_paths(struct snd_soc_card *card,
struct snd_soc_dapm_widget *w)
{
struct snd_soc_dapm_path *p;
list_for_each_entry(p, &w->sources, list_sink) {
if (dapm_is_external_path(card, p))
return true;
}
list_for_each_entry(p, &w->sinks, list_source) {
if (dapm_is_external_path(card, p))
return true;
}
return false;
}
/**
* snd_soc_dapm_auto_nc_pins - call snd_soc_dapm_nc_pin for unused pins
* @card: The card whose pins should be processed
*
* Automatically call snd_soc_dapm_nc_pin() for any external pins in the card
* which are unused. Pins are used if they are connected externally to a
* component, whether that be to some other device, or a loop-back connection to
* the component itself.
*/
void snd_soc_dapm_auto_nc_pins(struct snd_soc_card *card)
{
struct snd_soc_dapm_widget *w;
dev_dbg(card->dev, "ASoC: Auto NC: DAPMs: card:%p\n", &card->dapm);
list_for_each_entry(w, &card->widgets, list) {
switch (w->id) {
case snd_soc_dapm_input:
case snd_soc_dapm_output:
case snd_soc_dapm_micbias:
dev_dbg(card->dev, "ASoC: Auto NC: Checking widget %s\n",
w->name);
if (!snd_soc_dapm_widget_in_card_paths(card, w)) {
dev_dbg(card->dev,
"... Not in map; disabling\n");
snd_soc_dapm_nc_pin(w->dapm, w->name);
}
break;
default:
break;
}
}
}
/** /**
* snd_soc_dapm_free - free dapm resources * snd_soc_dapm_free - free dapm resources
* @dapm: DAPM context * @dapm: DAPM context
......
...@@ -746,7 +746,8 @@ static int soc_pcm_prepare(struct snd_pcm_substream *substream) ...@@ -746,7 +746,8 @@ static int soc_pcm_prepare(struct snd_pcm_substream *substream)
codec_dai); codec_dai);
if (ret < 0) { if (ret < 0) {
dev_err(codec_dai->dev, dev_err(codec_dai->dev,
"ASoC: DAI prepare error: %d\n", ret); "ASoC: codec DAI prepare error: %d\n",
ret);
goto out; goto out;
} }
} }
...@@ -755,8 +756,8 @@ static int soc_pcm_prepare(struct snd_pcm_substream *substream) ...@@ -755,8 +756,8 @@ static int soc_pcm_prepare(struct snd_pcm_substream *substream)
if (cpu_dai->driver->ops && cpu_dai->driver->ops->prepare) { if (cpu_dai->driver->ops && cpu_dai->driver->ops->prepare) {
ret = cpu_dai->driver->ops->prepare(substream, cpu_dai); ret = cpu_dai->driver->ops->prepare(substream, cpu_dai);
if (ret < 0) { if (ret < 0) {
dev_err(cpu_dai->dev, "ASoC: DAI prepare error: %d\n", dev_err(cpu_dai->dev,
ret); "ASoC: cpu DAI prepare error: %d\n", ret);
goto out; goto out;
} }
} }
......
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