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

Merge branch 'fix/intel' of...

Merge branch 'fix/intel' of git://git.kernel.org/pub/scm/linux/kernel/git/broonie/sound into asoc-intel

Conflicts:
	sound/soc/intel/sst/sst_acpi.c
parents e948262a 5c2b0636
...@@ -4948,6 +4948,16 @@ F: Documentation/input/multi-touch-protocol.txt ...@@ -4948,6 +4948,16 @@ F: Documentation/input/multi-touch-protocol.txt
F: drivers/input/input-mt.c F: drivers/input/input-mt.c
K: \b(ABS|SYN)_MT_ K: \b(ABS|SYN)_MT_
INTEL ASoC BDW/HSW DRIVERS
M: Jie Yang <yang.jie@linux.intel.com>
L: alsa-devel@alsa-project.org
S: Supported
F: sound/soc/intel/sst-haswell*
F: sound/soc/intel/sst-dsp*
F: sound/soc/intel/sst-firmware.c
F: sound/soc/intel/broadwell.c
F: sound/soc/intel/haswell.c
INTEL C600 SERIES SAS CONTROLLER DRIVER INTEL C600 SERIES SAS CONTROLLER DRIVER
M: Intel SCU Linux support <intel-linux-scu@intel.com> M: Intel SCU Linux support <intel-linux-scu@intel.com>
M: Artur Paszkiewicz <artur.paszkiewicz@intel.com> M: Artur Paszkiewicz <artur.paszkiewicz@intel.com>
......
...@@ -89,7 +89,7 @@ config SND_SOC_INTEL_BROADWELL_MACH ...@@ -89,7 +89,7 @@ config SND_SOC_INTEL_BROADWELL_MACH
config SND_SOC_INTEL_BYTCR_RT5640_MACH config SND_SOC_INTEL_BYTCR_RT5640_MACH
tristate "ASoC Audio DSP Support for MID BYT Platform" tristate "ASoC Audio DSP Support for MID BYT Platform"
depends on X86 depends on X86 && I2C
select SND_SOC_RT5640 select SND_SOC_RT5640
select SND_SST_MFLD_PLATFORM select SND_SST_MFLD_PLATFORM
select SND_SST_IPC_ACPI select SND_SST_IPC_ACPI
...@@ -101,7 +101,7 @@ config SND_SOC_INTEL_BYTCR_RT5640_MACH ...@@ -101,7 +101,7 @@ config SND_SOC_INTEL_BYTCR_RT5640_MACH
config SND_SOC_INTEL_CHT_BSW_RT5672_MACH config SND_SOC_INTEL_CHT_BSW_RT5672_MACH
tristate "ASoC Audio driver for Intel Cherrytrail & Braswell with RT5672 codec" tristate "ASoC Audio driver for Intel Cherrytrail & Braswell with RT5672 codec"
depends on X86_INTEL_LPSS depends on X86_INTEL_LPSS && I2C
select SND_SOC_RT5670 select SND_SOC_RT5670
select SND_SST_MFLD_PLATFORM select SND_SST_MFLD_PLATFORM
select SND_SST_IPC_ACPI select SND_SST_IPC_ACPI
......
...@@ -226,4 +226,4 @@ module_platform_driver(snd_byt_mc_driver); ...@@ -226,4 +226,4 @@ module_platform_driver(snd_byt_mc_driver);
MODULE_DESCRIPTION("ASoC Intel(R) Baytrail CR Machine driver"); MODULE_DESCRIPTION("ASoC Intel(R) Baytrail CR Machine driver");
MODULE_AUTHOR("Subhransu S. Prusty <subhransu.s.prusty@intel.com>"); MODULE_AUTHOR("Subhransu S. Prusty <subhransu.s.prusty@intel.com>");
MODULE_LICENSE("GPL v2"); MODULE_LICENSE("GPL v2");
MODULE_ALIAS("platform:bytrt5640-audio"); MODULE_ALIAS("platform:bytt100_rt5640");
...@@ -707,6 +707,7 @@ static int block_alloc_fixed(struct sst_dsp *dsp, struct sst_block_allocator *ba ...@@ -707,6 +707,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;
...@@ -731,9 +732,9 @@ static int block_alloc_fixed(struct sst_dsp *dsp, struct sst_block_allocator *ba ...@@ -731,9 +732,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;
...@@ -764,10 +765,14 @@ static int block_alloc_fixed(struct sst_dsp *dsp, struct sst_block_allocator *ba ...@@ -764,10 +765,14 @@ static int block_alloc_fixed(struct sst_dsp *dsp, struct sst_block_allocator *ba
/* does block span more than 1 section */ /* does block span more than 1 section */
if (ba->offset >= block->offset && ba->offset < block_end) { if (ba->offset >= block->offset && ba->offset < block_end) {
/* add block */
list_move(&block->list, &dsp->used_block_list);
list_add(&block->module_list, block_list);
/* align ba to block boundary */ /* align ba to block boundary */
ba->offset = block->offset; ba_tmp.size -= block_end - ba->offset;
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;
......
...@@ -652,11 +652,11 @@ static void hsw_notification_work(struct work_struct *work) ...@@ -652,11 +652,11 @@ static void hsw_notification_work(struct work_struct *work)
} }
/* tell DSP that notification has been handled */ /* tell DSP that notification has been handled */
sst_dsp_shim_update_bits_unlocked(hsw->dsp, SST_IPCD, sst_dsp_shim_update_bits(hsw->dsp, SST_IPCD,
SST_IPCD_BUSY | SST_IPCD_DONE, SST_IPCD_DONE); SST_IPCD_BUSY | SST_IPCD_DONE, SST_IPCD_DONE);
/* unmask busy interrupt */ /* unmask busy interrupt */
sst_dsp_shim_update_bits_unlocked(hsw->dsp, SST_IMRX, SST_IMRX_BUSY, 0); sst_dsp_shim_update_bits(hsw->dsp, SST_IMRX, SST_IMRX_BUSY, 0);
} }
static struct ipc_message *reply_find_msg(struct sst_hsw *hsw, u32 header) static struct ipc_message *reply_find_msg(struct sst_hsw *hsw, u32 header)
...@@ -1230,6 +1230,11 @@ int sst_hsw_stream_free(struct sst_hsw *hsw, struct sst_hsw_stream *stream) ...@@ -1230,6 +1230,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;
...@@ -1417,6 +1422,16 @@ int sst_hsw_stream_commit(struct sst_hsw *hsw, struct sst_hsw_stream *stream) ...@@ -1417,6 +1422,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);
...@@ -1521,6 +1536,11 @@ int sst_hsw_stream_pause(struct sst_hsw *hsw, struct sst_hsw_stream *stream, ...@@ -1521,6 +1536,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,
...@@ -1537,6 +1557,11 @@ int sst_hsw_stream_resume(struct sst_hsw *hsw, struct sst_hsw_stream *stream, ...@@ -1537,6 +1557,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,
...@@ -1552,6 +1577,11 @@ int sst_hsw_stream_reset(struct sst_hsw *hsw, struct sst_hsw_stream *stream) ...@@ -1552,6 +1577,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;
......
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