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

Commit dacdd369 authored by Mark Brown's avatar Mark Brown
Browse files

Merge remote-tracking branches 'asoc/topic/intel' and 'asoc/topic/max98090' into asoc-next

Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -27,7 +27,7 @@
#include "max98090.h"

/* Allows for sparsely populated register maps */
static struct reg_default max98090_reg[] = {
static const struct reg_default max98090_reg[] = {
	{ 0x00, 0x00 }, /* 00 Software Reset */
	{ 0x03, 0x04 }, /* 03 Interrupt Masks */
	{ 0x04, 0x00 }, /* 04 System Clock Quick */
@@ -2704,7 +2704,7 @@ static const struct of_device_id max98090_of_match[] = {
MODULE_DEVICE_TABLE(of, max98090_of_match);

#ifdef CONFIG_ACPI
static struct acpi_device_id max98090_acpi_match[] = {
static const struct acpi_device_id max98090_acpi_match[] = {
	{ "193C9890", MAX98090 },
	{ }
};
+2 −2
Original line number Diff line number Diff line
@@ -112,7 +112,7 @@ config SND_SOC_INTEL_CHT_BSW_RT5672_MACH

config SND_SOC_INTEL_CHT_BSW_RT5645_MACH
	tristate "ASoC Audio driver for Intel Cherrytrail & Braswell with RT5645/5650 codec"
	depends on X86_INTEL_LPSS
	depends on X86_INTEL_LPSS && I2C
	select SND_SOC_RT5645
	select SND_SST_MFLD_PLATFORM
	select SND_SST_IPC_ACPI
@@ -123,7 +123,7 @@ config SND_SOC_INTEL_CHT_BSW_RT5645_MACH

config SND_SOC_INTEL_CHT_BSW_MAX98090_TI_MACH
	tristate "ASoC Audio driver for Intel Cherrytrail & Braswell with MAX98090 & TI codec"
	depends on X86_INTEL_LPSS
	depends on X86_INTEL_LPSS && I2C
	select SND_SOC_MAX98090
	select SND_SOC_TS3A227E
	select SND_SST_MFLD_PLATFORM
+8 −12
Original line number Diff line number Diff line
@@ -1401,36 +1401,32 @@ static int sst_fill_widget_module_info(struct snd_soc_dapm_widget *w,
	down_read(&card->controls_rwsem);

	list_for_each_entry(kctl, &card->controls, list) {
		idx = strstr(kctl->id.name, " ");
		idx = strchr(kctl->id.name, ' ');
		if (idx == NULL)
			continue;
		index  = strlen(kctl->id.name) - strlen(idx);
		index = idx - (char*)kctl->id.name;
		if (strncmp(kctl->id.name, w->name, index))
			continue;

		if (strstr(kctl->id.name, "Volume") &&
		    !strncmp(kctl->id.name, w->name, index))
		if (strstr(kctl->id.name, "Volume"))
			ret = sst_fill_module_list(kctl, w, SST_MODULE_GAIN);

		else if (strstr(kctl->id.name, "params") &&
			 !strncmp(kctl->id.name, w->name, index))
		else if (strstr(kctl->id.name, "params"))
			ret = sst_fill_module_list(kctl, w, SST_MODULE_ALGO);

		else if (strstr(kctl->id.name, "Switch") &&
			 !strncmp(kctl->id.name, w->name, index) &&
			 strstr(kctl->id.name, "Gain")) {
			struct sst_gain_mixer_control *mc =
						(void *)kctl->private_value;

			mc->w = w;

		} else if (strstr(kctl->id.name, "interleaver") &&
			 !strncmp(kctl->id.name, w->name, index)) {
		} else if (strstr(kctl->id.name, "interleaver")) {
			struct sst_enum *e = (void *)kctl->private_value;

			e->w = w;

		} else if (strstr(kctl->id.name, "deinterleaver") &&
			 !strncmp(kctl->id.name, w->name, index)) {

		} else if (strstr(kctl->id.name, "deinterleaver")) {
			struct sst_enum *e = (void *)kctl->private_value;

			e->w = w;
+2 −2
Original line number Diff line number Diff line
@@ -368,8 +368,8 @@ static inline void sst_restore_shim64(struct intel_sst_drv *ctx,
	 * initialize by FW or driver when firmware is loaded
	 */
	spin_lock_irqsave(&ctx->ipc_spin_lock, irq_flags);
	sst_shim_write64(shim, SST_IMRX, shim_regs->imrx),
	sst_shim_write64(shim, SST_CSR, shim_regs->csr),
	sst_shim_write64(shim, SST_IMRX, shim_regs->imrx);
	sst_shim_write64(shim, SST_CSR, shim_regs->csr);
	spin_unlock_irqrestore(&ctx->ipc_spin_lock, irq_flags);
}

+30 −0
Original line number Diff line number Diff line
@@ -101,6 +101,33 @@ static int cht_aif1_hw_params(struct snd_pcm_substream *substream,
	return 0;
}

static int cht_ti_jack_event(struct notifier_block *nb,
		unsigned long event, void *data)
{

	struct snd_soc_jack *jack = (struct snd_soc_jack *)data;
	struct snd_soc_dai *codec_dai = jack->card->rtd->codec_dai;
	struct snd_soc_codec *codec = codec_dai->codec;

	if (event & SND_JACK_MICROPHONE) {

		snd_soc_dapm_force_enable_pin(&codec->dapm, "SHDN");
		snd_soc_dapm_force_enable_pin(&codec->dapm, "MICBIAS");
		snd_soc_dapm_sync(&codec->dapm);
	} else {

		snd_soc_dapm_disable_pin(&codec->dapm, "MICBIAS");
		snd_soc_dapm_disable_pin(&codec->dapm, "SHDN");
		snd_soc_dapm_sync(&codec->dapm);
	}

	return 0;
}

static struct notifier_block cht_jack_nb = {
	.notifier_call = cht_ti_jack_event,
};

static int cht_codec_init(struct snd_soc_pcm_runtime *runtime)
{
	int ret;
@@ -130,6 +157,9 @@ static int cht_codec_init(struct snd_soc_pcm_runtime *runtime)
		return ret;
	}

	if (ctx->ts3a227e_present)
		snd_soc_jack_notifier_register(jack, &cht_jack_nb);

	return ret;
}

Loading