提交 dacdd369 编写于 作者: M Mark Brown

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

...@@ -27,7 +27,7 @@ ...@@ -27,7 +27,7 @@
#include "max98090.h" #include "max98090.h"
/* Allows for sparsely populated register maps */ /* Allows for sparsely populated register maps */
static struct reg_default max98090_reg[] = { static const struct reg_default max98090_reg[] = {
{ 0x00, 0x00 }, /* 00 Software Reset */ { 0x00, 0x00 }, /* 00 Software Reset */
{ 0x03, 0x04 }, /* 03 Interrupt Masks */ { 0x03, 0x04 }, /* 03 Interrupt Masks */
{ 0x04, 0x00 }, /* 04 System Clock Quick */ { 0x04, 0x00 }, /* 04 System Clock Quick */
...@@ -2704,7 +2704,7 @@ static const struct of_device_id max98090_of_match[] = { ...@@ -2704,7 +2704,7 @@ static const struct of_device_id max98090_of_match[] = {
MODULE_DEVICE_TABLE(of, max98090_of_match); MODULE_DEVICE_TABLE(of, max98090_of_match);
#ifdef CONFIG_ACPI #ifdef CONFIG_ACPI
static struct acpi_device_id max98090_acpi_match[] = { static const struct acpi_device_id max98090_acpi_match[] = {
{ "193C9890", MAX98090 }, { "193C9890", MAX98090 },
{ } { }
}; };
......
...@@ -112,7 +112,7 @@ config SND_SOC_INTEL_CHT_BSW_RT5672_MACH ...@@ -112,7 +112,7 @@ config SND_SOC_INTEL_CHT_BSW_RT5672_MACH
config SND_SOC_INTEL_CHT_BSW_RT5645_MACH config SND_SOC_INTEL_CHT_BSW_RT5645_MACH
tristate "ASoC Audio driver for Intel Cherrytrail & Braswell with RT5645/5650 codec" 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_SOC_RT5645
select SND_SST_MFLD_PLATFORM select SND_SST_MFLD_PLATFORM
select SND_SST_IPC_ACPI select SND_SST_IPC_ACPI
...@@ -123,7 +123,7 @@ config SND_SOC_INTEL_CHT_BSW_RT5645_MACH ...@@ -123,7 +123,7 @@ config SND_SOC_INTEL_CHT_BSW_RT5645_MACH
config SND_SOC_INTEL_CHT_BSW_MAX98090_TI_MACH config SND_SOC_INTEL_CHT_BSW_MAX98090_TI_MACH
tristate "ASoC Audio driver for Intel Cherrytrail & Braswell with MAX98090 & TI codec" 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_MAX98090
select SND_SOC_TS3A227E select SND_SOC_TS3A227E
select SND_SST_MFLD_PLATFORM select SND_SST_MFLD_PLATFORM
......
...@@ -1401,36 +1401,32 @@ static int sst_fill_widget_module_info(struct snd_soc_dapm_widget *w, ...@@ -1401,36 +1401,32 @@ static int sst_fill_widget_module_info(struct snd_soc_dapm_widget *w,
down_read(&card->controls_rwsem); down_read(&card->controls_rwsem);
list_for_each_entry(kctl, &card->controls, list) { list_for_each_entry(kctl, &card->controls, list) {
idx = strstr(kctl->id.name, " "); idx = strchr(kctl->id.name, ' ');
if (idx == NULL) if (idx == NULL)
continue; 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") && if (strstr(kctl->id.name, "Volume"))
!strncmp(kctl->id.name, w->name, index))
ret = sst_fill_module_list(kctl, w, SST_MODULE_GAIN); ret = sst_fill_module_list(kctl, w, SST_MODULE_GAIN);
else if (strstr(kctl->id.name, "params") && else if (strstr(kctl->id.name, "params"))
!strncmp(kctl->id.name, w->name, index))
ret = sst_fill_module_list(kctl, w, SST_MODULE_ALGO); ret = sst_fill_module_list(kctl, w, SST_MODULE_ALGO);
else if (strstr(kctl->id.name, "Switch") && else if (strstr(kctl->id.name, "Switch") &&
!strncmp(kctl->id.name, w->name, index) &&
strstr(kctl->id.name, "Gain")) { strstr(kctl->id.name, "Gain")) {
struct sst_gain_mixer_control *mc = struct sst_gain_mixer_control *mc =
(void *)kctl->private_value; (void *)kctl->private_value;
mc->w = w; mc->w = w;
} else if (strstr(kctl->id.name, "interleaver") && } else if (strstr(kctl->id.name, "interleaver")) {
!strncmp(kctl->id.name, w->name, index)) {
struct sst_enum *e = (void *)kctl->private_value; struct sst_enum *e = (void *)kctl->private_value;
e->w = w; e->w = w;
} else if (strstr(kctl->id.name, "deinterleaver") && } else if (strstr(kctl->id.name, "deinterleaver")) {
!strncmp(kctl->id.name, w->name, index)) {
struct sst_enum *e = (void *)kctl->private_value; struct sst_enum *e = (void *)kctl->private_value;
e->w = w; e->w = w;
......
...@@ -368,8 +368,8 @@ static inline void sst_restore_shim64(struct intel_sst_drv *ctx, ...@@ -368,8 +368,8 @@ static inline void sst_restore_shim64(struct intel_sst_drv *ctx,
* initialize by FW or driver when firmware is loaded * initialize by FW or driver when firmware is loaded
*/ */
spin_lock_irqsave(&ctx->ipc_spin_lock, irq_flags); spin_lock_irqsave(&ctx->ipc_spin_lock, irq_flags);
sst_shim_write64(shim, SST_IMRX, shim_regs->imrx), sst_shim_write64(shim, SST_IMRX, shim_regs->imrx);
sst_shim_write64(shim, SST_CSR, shim_regs->csr), sst_shim_write64(shim, SST_CSR, shim_regs->csr);
spin_unlock_irqrestore(&ctx->ipc_spin_lock, irq_flags); spin_unlock_irqrestore(&ctx->ipc_spin_lock, irq_flags);
} }
......
...@@ -101,6 +101,33 @@ static int cht_aif1_hw_params(struct snd_pcm_substream *substream, ...@@ -101,6 +101,33 @@ static int cht_aif1_hw_params(struct snd_pcm_substream *substream,
return 0; 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) static int cht_codec_init(struct snd_soc_pcm_runtime *runtime)
{ {
int ret; int ret;
...@@ -130,6 +157,9 @@ static int cht_codec_init(struct snd_soc_pcm_runtime *runtime) ...@@ -130,6 +157,9 @@ static int cht_codec_init(struct snd_soc_pcm_runtime *runtime)
return ret; return ret;
} }
if (ctx->ts3a227e_present)
snd_soc_jack_notifier_register(jack, &cht_jack_nb);
return ret; return ret;
} }
......
...@@ -263,7 +263,7 @@ static struct sst_acpi_desc sst_acpi_baytrail_desc = { ...@@ -263,7 +263,7 @@ static struct sst_acpi_desc sst_acpi_baytrail_desc = {
.resindex_dma_base = -1, .resindex_dma_base = -1,
}; };
static struct acpi_device_id sst_acpi_match[] = { static const struct acpi_device_id sst_acpi_match[] = {
{ "INT33C8", (unsigned long)&sst_acpi_haswell_desc }, { "INT33C8", (unsigned long)&sst_acpi_haswell_desc },
{ "INT3438", (unsigned long)&sst_acpi_broadwell_desc }, { "INT3438", (unsigned long)&sst_acpi_broadwell_desc },
{ "80860F28", (unsigned long)&sst_acpi_baytrail_desc }, { "80860F28", (unsigned long)&sst_acpi_baytrail_desc },
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册