Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

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

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
Loading
Loading
Loading
Loading
+10 −0
Original line number Diff line number Diff line
@@ -4948,6 +4948,16 @@ F: Documentation/input/multi-touch-protocol.txt
F:	drivers/input/input-mt.c
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
M:	Intel SCU Linux support <intel-linux-scu@intel.com>
M:	Artur Paszkiewicz <artur.paszkiewicz@intel.com>
+2 −2
Original line number Diff line number Diff line
@@ -89,7 +89,7 @@ config SND_SOC_INTEL_BROADWELL_MACH

config SND_SOC_INTEL_BYTCR_RT5640_MACH
	tristate "ASoC Audio DSP Support for MID BYT Platform"
	depends on X86
	depends on X86 && I2C
	select SND_SOC_RT5640
	select SND_SST_MFLD_PLATFORM
	select SND_SST_IPC_ACPI
@@ -101,7 +101,7 @@ config SND_SOC_INTEL_BYTCR_RT5640_MACH

config SND_SOC_INTEL_CHT_BSW_RT5672_MACH
        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_SST_MFLD_PLATFORM
        select SND_SST_IPC_ACPI
+1 −1
Original line number Diff line number Diff line
@@ -226,4 +226,4 @@ module_platform_driver(snd_byt_mc_driver);
MODULE_DESCRIPTION("ASoC Intel(R) Baytrail CR Machine driver");
MODULE_AUTHOR("Subhransu S. Prusty <subhransu.s.prusty@intel.com>");
MODULE_LICENSE("GPL v2");
MODULE_ALIAS("platform:bytrt5640-audio");
MODULE_ALIAS("platform:bytt100_rt5640");
+10 −5
Original line number Diff line number Diff line
@@ -707,6 +707,7 @@ static int block_alloc_fixed(struct sst_dsp *dsp, struct sst_block_allocator *ba
	struct list_head *block_list)
{
	struct sst_mem_block *block, *tmp;
	struct sst_block_allocator ba_tmp = *ba;
	u32 end = ba->offset + ba->size, block_end;
	int err;

@@ -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) {

			/* align ba to block boundary */
			ba->size -= block_end - ba->offset;
			ba->offset = block_end;
			err = block_alloc_contiguous(dsp, ba, block_list);
			ba_tmp.size -= block_end - ba->offset;
			ba_tmp.offset = block_end;
			err = block_alloc_contiguous(dsp, &ba_tmp, block_list);
			if (err < 0)
				return -ENOMEM;

@@ -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 */
		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 */
			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)
				return -ENOMEM;

+32 −2
Original line number Diff line number Diff line
@@ -652,11 +652,11 @@ static void hsw_notification_work(struct work_struct *work)
	}

	/* 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);

	/* 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)
@@ -1230,6 +1230,11 @@ int sst_hsw_stream_free(struct sst_hsw *hsw, struct sst_hsw_stream *stream)
	struct sst_dsp *sst = hsw->dsp;
	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 */
	if (!stream->commited)
		goto out;
@@ -1417,6 +1422,16 @@ int sst_hsw_stream_commit(struct sst_hsw *hsw, struct sst_hsw_stream *stream)
	u32 header;
	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);

	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,
{
	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);

	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,
{
	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);

	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)
{
	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 */
	if (!stream->commited)
		return 0;