Commit 8a6dcddf authored by Mark Brown's avatar Mark Brown

Merge remote-tracking branches 'asoc/fix/adi', 'asoc/fix/compress',...

Merge remote-tracking branches 'asoc/fix/adi', 'asoc/fix/compress', 'asoc/fix/fsl-ssi', 'asoc/fix/imx', 'asoc/fix/intel', 'asoc/fix/omap', 'asoc/fix/rockchip' and 'asoc/fix/rt286' into asoc-linus
...@@ -240,6 +240,8 @@ static int axi_i2s_probe(struct platform_device *pdev) ...@@ -240,6 +240,8 @@ static int axi_i2s_probe(struct platform_device *pdev)
if (ret) if (ret)
goto err_clk_disable; goto err_clk_disable;
return 0;
err_clk_disable: err_clk_disable:
clk_disable_unprepare(i2s->clk); clk_disable_unprepare(i2s->clk);
return ret; return ret;
......
...@@ -861,10 +861,8 @@ static int rt286_hw_params(struct snd_pcm_substream *substream, ...@@ -861,10 +861,8 @@ static int rt286_hw_params(struct snd_pcm_substream *substream,
RT286_I2S_CTRL1, 0x0018, d_len_code << 3); RT286_I2S_CTRL1, 0x0018, d_len_code << 3);
dev_dbg(codec->dev, "format val = 0x%x\n", val); dev_dbg(codec->dev, "format val = 0x%x\n", val);
if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) snd_soc_update_bits(codec, RT286_DAC_FORMAT, 0x407f, val);
snd_soc_update_bits(codec, RT286_DAC_FORMAT, 0x407f, val); snd_soc_update_bits(codec, RT286_ADC_FORMAT, 0x407f, val);
else
snd_soc_update_bits(codec, RT286_ADC_FORMAT, 0x407f, val);
return 0; return 0;
} }
......
...@@ -1362,9 +1362,9 @@ static int fsl_ssi_probe(struct platform_device *pdev) ...@@ -1362,9 +1362,9 @@ static int fsl_ssi_probe(struct platform_device *pdev)
} }
ssi_private->irq = platform_get_irq(pdev, 0); ssi_private->irq = platform_get_irq(pdev, 0);
if (!ssi_private->irq) { if (ssi_private->irq < 0) {
dev_err(&pdev->dev, "no irq for node %s\n", np->full_name); dev_err(&pdev->dev, "no irq for node %s\n", np->full_name);
return -ENXIO; return ssi_private->irq;
} }
/* Are the RX and the TX clocks locked? */ /* Are the RX and the TX clocks locked? */
......
...@@ -257,6 +257,7 @@ static int imx_wm8962_probe(struct platform_device *pdev) ...@@ -257,6 +257,7 @@ static int imx_wm8962_probe(struct platform_device *pdev)
if (ret) if (ret)
goto clk_fail; goto clk_fail;
data->card.num_links = 1; data->card.num_links = 1;
data->card.owner = THIS_MODULE;
data->card.dai_link = &data->dai; data->card.dai_link = &data->dai;
data->card.dapm_widgets = imx_wm8962_dapm_widgets; data->card.dapm_widgets = imx_wm8962_dapm_widgets;
data->card.num_dapm_widgets = ARRAY_SIZE(imx_wm8962_dapm_widgets); data->card.num_dapm_widgets = ARRAY_SIZE(imx_wm8962_dapm_widgets);
......
...@@ -706,6 +706,7 @@ static int block_alloc_fixed(struct sst_dsp *dsp, struct sst_block_allocator *ba ...@@ -706,6 +706,7 @@ static int block_alloc_fixed(struct sst_dsp *dsp, struct sst_block_allocator *ba
struct list_head *block_list) struct list_head *block_list)
{ {
struct sst_mem_block *block, *tmp; struct sst_mem_block *block, *tmp;
struct sst_block_allocator ba_tmp = *ba;
u32 end = ba->offset + ba->size, block_end; u32 end = ba->offset + ba->size, block_end;
int err; int err;
...@@ -730,9 +731,9 @@ static int block_alloc_fixed(struct sst_dsp *dsp, struct sst_block_allocator *ba ...@@ -730,9 +731,9 @@ static int block_alloc_fixed(struct sst_dsp *dsp, struct sst_block_allocator *ba
if (ba->offset >= block->offset && ba->offset < block_end) { if (ba->offset >= block->offset && ba->offset < block_end) {
/* align ba to block boundary */ /* align ba to block boundary */
ba->size -= block_end - ba->offset; ba_tmp.size -= block_end - ba->offset;
ba->offset = block_end; ba_tmp.offset = block_end;
err = block_alloc_contiguous(dsp, ba, block_list); err = block_alloc_contiguous(dsp, &ba_tmp, block_list);
if (err < 0) if (err < 0)
return -ENOMEM; return -ENOMEM;
...@@ -767,10 +768,10 @@ static int block_alloc_fixed(struct sst_dsp *dsp, struct sst_block_allocator *ba ...@@ -767,10 +768,10 @@ static int block_alloc_fixed(struct sst_dsp *dsp, struct sst_block_allocator *ba
list_move(&block->list, &dsp->used_block_list); list_move(&block->list, &dsp->used_block_list);
list_add(&block->module_list, block_list); list_add(&block->module_list, block_list);
/* align ba to block boundary */ /* align ba to block boundary */
ba->size -= block_end - ba->offset; ba_tmp.size -= block_end - ba->offset;
ba->offset = block_end; ba_tmp.offset = block_end;
err = block_alloc_contiguous(dsp, ba, block_list); err = block_alloc_contiguous(dsp, &ba_tmp, block_list);
if (err < 0) if (err < 0)
return -ENOMEM; return -ENOMEM;
......
...@@ -1228,6 +1228,11 @@ int sst_hsw_stream_free(struct sst_hsw *hsw, struct sst_hsw_stream *stream) ...@@ -1228,6 +1228,11 @@ int sst_hsw_stream_free(struct sst_hsw *hsw, struct sst_hsw_stream *stream)
struct sst_dsp *sst = hsw->dsp; struct sst_dsp *sst = hsw->dsp;
unsigned long flags; unsigned long flags;
if (!stream) {
dev_warn(hsw->dev, "warning: stream is NULL, no stream to free, ignore it.\n");
return 0;
}
/* dont free DSP streams that are not commited */ /* dont free DSP streams that are not commited */
if (!stream->commited) if (!stream->commited)
goto out; goto out;
...@@ -1415,6 +1420,16 @@ int sst_hsw_stream_commit(struct sst_hsw *hsw, struct sst_hsw_stream *stream) ...@@ -1415,6 +1420,16 @@ int sst_hsw_stream_commit(struct sst_hsw *hsw, struct sst_hsw_stream *stream)
u32 header; u32 header;
int ret; int ret;
if (!stream) {
dev_warn(hsw->dev, "warning: stream is NULL, no stream to commit, ignore it.\n");
return 0;
}
if (stream->commited) {
dev_warn(hsw->dev, "warning: stream is already committed, ignore it.\n");
return 0;
}
trace_ipc_request("stream alloc", stream->host_id); trace_ipc_request("stream alloc", stream->host_id);
header = IPC_GLB_TYPE(IPC_GLB_ALLOCATE_STREAM); header = IPC_GLB_TYPE(IPC_GLB_ALLOCATE_STREAM);
...@@ -1519,6 +1534,11 @@ int sst_hsw_stream_pause(struct sst_hsw *hsw, struct sst_hsw_stream *stream, ...@@ -1519,6 +1534,11 @@ int sst_hsw_stream_pause(struct sst_hsw *hsw, struct sst_hsw_stream *stream,
{ {
int ret; int ret;
if (!stream) {
dev_warn(hsw->dev, "warning: stream is NULL, no stream to pause, ignore it.\n");
return 0;
}
trace_ipc_request("stream pause", stream->reply.stream_hw_id); trace_ipc_request("stream pause", stream->reply.stream_hw_id);
ret = sst_hsw_stream_operations(hsw, IPC_STR_PAUSE, ret = sst_hsw_stream_operations(hsw, IPC_STR_PAUSE,
...@@ -1535,6 +1555,11 @@ int sst_hsw_stream_resume(struct sst_hsw *hsw, struct sst_hsw_stream *stream, ...@@ -1535,6 +1555,11 @@ int sst_hsw_stream_resume(struct sst_hsw *hsw, struct sst_hsw_stream *stream,
{ {
int ret; int ret;
if (!stream) {
dev_warn(hsw->dev, "warning: stream is NULL, no stream to resume, ignore it.\n");
return 0;
}
trace_ipc_request("stream resume", stream->reply.stream_hw_id); trace_ipc_request("stream resume", stream->reply.stream_hw_id);
ret = sst_hsw_stream_operations(hsw, IPC_STR_RESUME, ret = sst_hsw_stream_operations(hsw, IPC_STR_RESUME,
...@@ -1550,6 +1575,11 @@ int sst_hsw_stream_reset(struct sst_hsw *hsw, struct sst_hsw_stream *stream) ...@@ -1550,6 +1575,11 @@ int sst_hsw_stream_reset(struct sst_hsw *hsw, struct sst_hsw_stream *stream)
{ {
int ret, tries = 10; int ret, tries = 10;
if (!stream) {
dev_warn(hsw->dev, "warning: stream is NULL, no stream to reset, ignore it.\n");
return 0;
}
/* dont reset streams that are not commited */ /* dont reset streams that are not commited */
if (!stream->commited) if (!stream->commited)
return 0; return 0;
......
...@@ -434,7 +434,7 @@ static int omap_mcbsp_dai_set_dai_fmt(struct snd_soc_dai *cpu_dai, ...@@ -434,7 +434,7 @@ static int omap_mcbsp_dai_set_dai_fmt(struct snd_soc_dai *cpu_dai,
case SND_SOC_DAIFMT_CBM_CFS: case SND_SOC_DAIFMT_CBM_CFS:
/* McBSP slave. FS clock as output */ /* McBSP slave. FS clock as output */
regs->srgr2 |= FSGM; regs->srgr2 |= FSGM;
regs->pcr0 |= FSXM; regs->pcr0 |= FSXM | FSRM;
break; break;
case SND_SOC_DAIFMT_CBM_CFM: case SND_SOC_DAIFMT_CBM_CFM:
/* McBSP slave */ /* McBSP slave */
......
...@@ -335,6 +335,7 @@ static struct snd_soc_dai_driver rockchip_i2s_dai = { ...@@ -335,6 +335,7 @@ static struct snd_soc_dai_driver rockchip_i2s_dai = {
SNDRV_PCM_FMTBIT_S24_LE), SNDRV_PCM_FMTBIT_S24_LE),
}, },
.ops = &rockchip_i2s_dai_ops, .ops = &rockchip_i2s_dai_ops,
.symmetric_rates = 1,
}; };
static const struct snd_soc_component_driver rockchip_i2s_component = { static const struct snd_soc_component_driver rockchip_i2s_component = {
......
...@@ -659,7 +659,8 @@ int soc_new_compress(struct snd_soc_pcm_runtime *rtd, int num) ...@@ -659,7 +659,8 @@ int soc_new_compress(struct snd_soc_pcm_runtime *rtd, int num)
rtd->dai_link->stream_name); rtd->dai_link->stream_name);
ret = snd_pcm_new_internal(rtd->card->snd_card, new_name, num, ret = snd_pcm_new_internal(rtd->card->snd_card, new_name, num,
1, 0, &be_pcm); rtd->dai_link->dpcm_playback,
rtd->dai_link->dpcm_capture, &be_pcm);
if (ret < 0) { if (ret < 0) {
dev_err(rtd->card->dev, "ASoC: can't create compressed for %s\n", dev_err(rtd->card->dev, "ASoC: can't create compressed for %s\n",
rtd->dai_link->name); rtd->dai_link->name);
...@@ -668,8 +669,10 @@ int soc_new_compress(struct snd_soc_pcm_runtime *rtd, int num) ...@@ -668,8 +669,10 @@ int soc_new_compress(struct snd_soc_pcm_runtime *rtd, int num)
rtd->pcm = be_pcm; rtd->pcm = be_pcm;
rtd->fe_compr = 1; rtd->fe_compr = 1;
be_pcm->streams[SNDRV_PCM_STREAM_PLAYBACK].substream->private_data = rtd; if (rtd->dai_link->dpcm_playback)
be_pcm->streams[SNDRV_PCM_STREAM_CAPTURE].substream->private_data = rtd; be_pcm->streams[SNDRV_PCM_STREAM_PLAYBACK].substream->private_data = rtd;
else if (rtd->dai_link->dpcm_capture)
be_pcm->streams[SNDRV_PCM_STREAM_CAPTURE].substream->private_data = rtd;
memcpy(compr->ops, &soc_compr_dyn_ops, sizeof(soc_compr_dyn_ops)); memcpy(compr->ops, &soc_compr_dyn_ops, sizeof(soc_compr_dyn_ops));
} else } else
memcpy(compr->ops, &soc_compr_ops, sizeof(soc_compr_ops)); memcpy(compr->ops, &soc_compr_ops, sizeof(soc_compr_ops));
......
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