Commit 312e0bce authored by Mark Brown's avatar Mark Brown

Merge remote-tracking branches 'asoc/fix/davinci', 'asoc/fix/doc',...

Merge remote-tracking branches 'asoc/fix/davinci', 'asoc/fix/doc', 'asoc/fix/fsl-card', 'asoc/fix/fsl-ssi', 'asoc/fix/intel' and 'asoc/fix/maintainers' into asoc-linus
...@@ -11239,7 +11239,6 @@ VOLTAGE AND CURRENT REGULATOR FRAMEWORK ...@@ -11239,7 +11239,6 @@ VOLTAGE AND CURRENT REGULATOR FRAMEWORK
M: Liam Girdwood <lgirdwood@gmail.com> M: Liam Girdwood <lgirdwood@gmail.com>
M: Mark Brown <broonie@kernel.org> M: Mark Brown <broonie@kernel.org>
L: linux-kernel@vger.kernel.org L: linux-kernel@vger.kernel.org
W: http://opensource.wolfsonmicro.com/node/15
W: http://www.slimlogic.co.uk/?p=48 W: http://www.slimlogic.co.uk/?p=48
T: git git://git.kernel.org/pub/scm/linux/kernel/git/broonie/regulator.git T: git git://git.kernel.org/pub/scm/linux/kernel/git/broonie/regulator.git
S: Supported S: Supported
...@@ -11368,17 +11367,15 @@ WM97XX TOUCHSCREEN DRIVERS ...@@ -11368,17 +11367,15 @@ WM97XX TOUCHSCREEN DRIVERS
M: Mark Brown <broonie@kernel.org> M: Mark Brown <broonie@kernel.org>
M: Liam Girdwood <lrg@slimlogic.co.uk> M: Liam Girdwood <lrg@slimlogic.co.uk>
L: linux-input@vger.kernel.org L: linux-input@vger.kernel.org
T: git git://opensource.wolfsonmicro.com/linux-2.6-touch W: https://github.com/CirrusLogic/linux-drivers/wiki
W: http://opensource.wolfsonmicro.com/node/7
S: Supported S: Supported
F: drivers/input/touchscreen/*wm97* F: drivers/input/touchscreen/*wm97*
F: include/linux/wm97xx.h F: include/linux/wm97xx.h
WOLFSON MICROELECTRONICS DRIVERS WOLFSON MICROELECTRONICS DRIVERS
L: patches@opensource.wolfsonmicro.com L: patches@opensource.wolfsonmicro.com
T: git git://opensource.wolfsonmicro.com/linux-2.6-asoc T: git https://github.com/CirrusLogic/linux-drivers.git
T: git git://opensource.wolfsonmicro.com/linux-2.6-audioplus W: https://github.com/CirrusLogic/linux-drivers/wiki
W: http://opensource.wolfsonmicro.com/content/linux-drivers-wolfson-devices
S: Supported S: Supported
F: Documentation/hwmon/wm83?? F: Documentation/hwmon/wm83??
F: arch/arm/mach-s3c64xx/mach-crag6410* F: arch/arm/mach-s3c64xx/mach-crag6410*
......
...@@ -663,7 +663,7 @@ static int mcasp_common_hw_param(struct davinci_mcasp *mcasp, int stream, ...@@ -663,7 +663,7 @@ static int mcasp_common_hw_param(struct davinci_mcasp *mcasp, int stream,
u8 rx_ser = 0; u8 rx_ser = 0;
u8 slots = mcasp->tdm_slots; u8 slots = mcasp->tdm_slots;
u8 max_active_serializers = (channels + slots - 1) / slots; u8 max_active_serializers = (channels + slots - 1) / slots;
int active_serializers, numevt, n; int active_serializers, numevt;
u32 reg; u32 reg;
/* Default configuration */ /* Default configuration */
if (mcasp->version < MCASP_VERSION_3) if (mcasp->version < MCASP_VERSION_3)
...@@ -745,9 +745,8 @@ static int mcasp_common_hw_param(struct davinci_mcasp *mcasp, int stream, ...@@ -745,9 +745,8 @@ static int mcasp_common_hw_param(struct davinci_mcasp *mcasp, int stream,
* The number of words for numevt need to be in steps of active * The number of words for numevt need to be in steps of active
* serializers. * serializers.
*/ */
n = numevt % active_serializers; numevt = (numevt / active_serializers) * active_serializers;
if (n)
numevt += (active_serializers - n);
while (period_words % numevt && numevt > 0) while (period_words % numevt && numevt > 0)
numevt -= active_serializers; numevt -= active_serializers;
if (numevt <= 0) if (numevt <= 0)
...@@ -1299,6 +1298,7 @@ static struct snd_soc_dai_driver davinci_mcasp_dai[] = { ...@@ -1299,6 +1298,7 @@ static struct snd_soc_dai_driver davinci_mcasp_dai[] = {
.ops = &davinci_mcasp_dai_ops, .ops = &davinci_mcasp_dai_ops,
.symmetric_samplebits = 1, .symmetric_samplebits = 1,
.symmetric_rates = 1,
}, },
{ {
.name = "davinci-mcasp.1", .name = "davinci-mcasp.1",
...@@ -1685,7 +1685,7 @@ static int davinci_mcasp_probe(struct platform_device *pdev) ...@@ -1685,7 +1685,7 @@ static int davinci_mcasp_probe(struct platform_device *pdev)
irq = platform_get_irq_byname(pdev, "common"); irq = platform_get_irq_byname(pdev, "common");
if (irq >= 0) { if (irq >= 0) {
irq_name = devm_kasprintf(&pdev->dev, GFP_KERNEL, "%s_common\n", irq_name = devm_kasprintf(&pdev->dev, GFP_KERNEL, "%s_common",
dev_name(&pdev->dev)); dev_name(&pdev->dev));
ret = devm_request_threaded_irq(&pdev->dev, irq, NULL, ret = devm_request_threaded_irq(&pdev->dev, irq, NULL,
davinci_mcasp_common_irq_handler, davinci_mcasp_common_irq_handler,
...@@ -1702,7 +1702,7 @@ static int davinci_mcasp_probe(struct platform_device *pdev) ...@@ -1702,7 +1702,7 @@ static int davinci_mcasp_probe(struct platform_device *pdev)
irq = platform_get_irq_byname(pdev, "rx"); irq = platform_get_irq_byname(pdev, "rx");
if (irq >= 0) { if (irq >= 0) {
irq_name = devm_kasprintf(&pdev->dev, GFP_KERNEL, "%s_rx\n", irq_name = devm_kasprintf(&pdev->dev, GFP_KERNEL, "%s_rx",
dev_name(&pdev->dev)); dev_name(&pdev->dev));
ret = devm_request_threaded_irq(&pdev->dev, irq, NULL, ret = devm_request_threaded_irq(&pdev->dev, irq, NULL,
davinci_mcasp_rx_irq_handler, davinci_mcasp_rx_irq_handler,
...@@ -1717,7 +1717,7 @@ static int davinci_mcasp_probe(struct platform_device *pdev) ...@@ -1717,7 +1717,7 @@ static int davinci_mcasp_probe(struct platform_device *pdev)
irq = platform_get_irq_byname(pdev, "tx"); irq = platform_get_irq_byname(pdev, "tx");
if (irq >= 0) { if (irq >= 0) {
irq_name = devm_kasprintf(&pdev->dev, GFP_KERNEL, "%s_tx\n", irq_name = devm_kasprintf(&pdev->dev, GFP_KERNEL, "%s_tx",
dev_name(&pdev->dev)); dev_name(&pdev->dev));
ret = devm_request_threaded_irq(&pdev->dev, irq, NULL, ret = devm_request_threaded_irq(&pdev->dev, irq, NULL,
davinci_mcasp_tx_irq_handler, davinci_mcasp_tx_irq_handler,
......
...@@ -488,7 +488,8 @@ static int fsl_asoc_card_probe(struct platform_device *pdev) ...@@ -488,7 +488,8 @@ static int fsl_asoc_card_probe(struct platform_device *pdev)
priv->dai_fmt |= SND_SOC_DAIFMT_CBM_CFM; priv->dai_fmt |= SND_SOC_DAIFMT_CBM_CFM;
} else { } else {
dev_err(&pdev->dev, "unknown Device Tree compatible\n"); dev_err(&pdev->dev, "unknown Device Tree compatible\n");
return -EINVAL; ret = -EINVAL;
goto asrc_fail;
} }
/* Common settings for corresponding Freescale CPU DAI driver */ /* Common settings for corresponding Freescale CPU DAI driver */
......
...@@ -249,7 +249,8 @@ MODULE_DEVICE_TABLE(of, fsl_ssi_ids); ...@@ -249,7 +249,8 @@ MODULE_DEVICE_TABLE(of, fsl_ssi_ids);
static bool fsl_ssi_is_ac97(struct fsl_ssi_private *ssi_private) static bool fsl_ssi_is_ac97(struct fsl_ssi_private *ssi_private)
{ {
return !!(ssi_private->dai_fmt & SND_SOC_DAIFMT_AC97); return (ssi_private->dai_fmt & SND_SOC_DAIFMT_FORMAT_MASK) ==
SND_SOC_DAIFMT_AC97;
} }
static bool fsl_ssi_is_i2s_master(struct fsl_ssi_private *ssi_private) static bool fsl_ssi_is_i2s_master(struct fsl_ssi_private *ssi_private)
...@@ -947,7 +948,7 @@ static int _fsl_ssi_set_dai_fmt(struct device *dev, ...@@ -947,7 +948,7 @@ static int _fsl_ssi_set_dai_fmt(struct device *dev,
CCSR_SSI_SCR_TCH_EN); CCSR_SSI_SCR_TCH_EN);
} }
if (fmt & SND_SOC_DAIFMT_AC97) if ((fmt & SND_SOC_DAIFMT_FORMAT_MASK) == SND_SOC_DAIFMT_AC97)
fsl_ssi_setup_ac97(ssi_private); fsl_ssi_setup_ac97(ssi_private);
return 0; return 0;
......
...@@ -302,6 +302,10 @@ struct sst_hsw { ...@@ -302,6 +302,10 @@ struct sst_hsw {
struct sst_hsw_ipc_dx_reply dx; struct sst_hsw_ipc_dx_reply dx;
void *dx_context; void *dx_context;
dma_addr_t dx_context_paddr; dma_addr_t dx_context_paddr;
enum sst_hsw_device_id dx_dev;
enum sst_hsw_device_mclk dx_mclk;
enum sst_hsw_device_mode dx_mode;
u32 dx_clock_divider;
/* boot */ /* boot */
wait_queue_head_t boot_wait; wait_queue_head_t boot_wait;
...@@ -1400,10 +1404,10 @@ int sst_hsw_device_set_config(struct sst_hsw *hsw, ...@@ -1400,10 +1404,10 @@ int sst_hsw_device_set_config(struct sst_hsw *hsw,
trace_ipc_request("set device config", dev); trace_ipc_request("set device config", dev);
config.ssp_interface = dev; hsw->dx_dev = config.ssp_interface = dev;
config.clock_frequency = mclk; hsw->dx_mclk = config.clock_frequency = mclk;
config.mode = mode; hsw->dx_mode = config.mode = mode;
config.clock_divider = clock_divider; hsw->dx_clock_divider = config.clock_divider = clock_divider;
if (mode == SST_HSW_DEVICE_TDM_CLOCK_MASTER) if (mode == SST_HSW_DEVICE_TDM_CLOCK_MASTER)
config.channels = 4; config.channels = 4;
else else
...@@ -1704,10 +1708,10 @@ int sst_hsw_dsp_runtime_resume(struct sst_hsw *hsw) ...@@ -1704,10 +1708,10 @@ int sst_hsw_dsp_runtime_resume(struct sst_hsw *hsw)
return -EIO; return -EIO;
} }
/* Set ADSP SSP port settings */ /* Set ADSP SSP port settings - sadly the FW does not store SSP port
ret = sst_hsw_device_set_config(hsw, SST_HSW_DEVICE_SSP_0, settings as part of the PM context. */
SST_HSW_DEVICE_MCLK_FREQ_24_MHZ, ret = sst_hsw_device_set_config(hsw, hsw->dx_dev, hsw->dx_mclk,
SST_HSW_DEVICE_CLOCK_MASTER, 9); hsw->dx_mode, hsw->dx_clock_divider);
if (ret < 0) if (ret < 0)
dev_err(dev, "error: SSP re-initialization failed\n"); dev_err(dev, "error: SSP re-initialization failed\n");
......
...@@ -101,6 +101,15 @@ static struct snd_soc_codec_driver dummy_codec; ...@@ -101,6 +101,15 @@ static struct snd_soc_codec_driver dummy_codec;
SNDRV_PCM_FMTBIT_S32_LE | \ SNDRV_PCM_FMTBIT_S32_LE | \
SNDRV_PCM_FMTBIT_U32_LE | \ SNDRV_PCM_FMTBIT_U32_LE | \
SNDRV_PCM_FMTBIT_IEC958_SUBFRAME_LE) SNDRV_PCM_FMTBIT_IEC958_SUBFRAME_LE)
/*
* The dummy CODEC is only meant to be used in situations where there is no
* actual hardware.
*
* If there is actual hardware even if it does not have a control bus
* the hardware will still have constraints like supported samplerates, etc.
* which should be modelled. And the data flow graph also should be modelled
* using DAPM.
*/
static struct snd_soc_dai_driver dummy_dai = { static struct snd_soc_dai_driver dummy_dai = {
.name = "snd-soc-dummy-dai", .name = "snd-soc-dummy-dai",
.playback = { .playback = {
......
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