Merge remote-tracking branches 'asoc/topic/intel' and 'asoc/topic/max98090' into...
authorMark Brown <broonie@kernel.org>
Mon, 22 Jun 2015 09:24:30 +0000 (10:24 +0100)
committerMark Brown <broonie@kernel.org>
Mon, 22 Jun 2015 09:24:30 +0000 (10:24 +0100)
sound/soc/codecs/max98090.c
sound/soc/intel/Kconfig
sound/soc/intel/atom/sst-atom-controls.c
sound/soc/intel/atom/sst/sst.c
sound/soc/intel/boards/cht_bsw_max98090_ti.c
sound/soc/intel/common/sst-acpi.c

index 679f0a0f70394e51411d329c75362420ed890c70..78268f0514e95073e8b2006d4e2822a482fb6d3b 100644 (file)
@@ -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 },
        { }
 };
index 791953ffbc41404652f8ddec6c5acbd6f8322cdd..f3060a4ca040b5b9339221f9c701b47ced365afc 100644 (file)
@@ -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
index 61e24093545115d8653b9fe51249727df45315ca..31e9b9ecbb8a599100774ad6fdee346755d43b42 100644 (file)
@@ -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;
index 96c2e420cce61f57be72baa4031a29e3ee483c06..a4b458e770894f0ccb8935ba139aa8a0e5edb6a9 100644 (file)
@@ -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);
 }
 
index 1be079423d1e736600be03d8d254fe5b53f241fa..d604ee80eda4be715601db603181e0291cc98747 100644 (file)
@@ -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;
 }
 
index 42f293f9c6e2dcfbdf5da2f451a6cf196fc296dc..67b6d3d52f57f69f4dd6fed65cc8546b694996ee 100644 (file)
@@ -263,7 +263,7 @@ static struct sst_acpi_desc sst_acpi_baytrail_desc = {
        .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 },
        { "INT3438", (unsigned long)&sst_acpi_broadwell_desc },
        { "80860F28", (unsigned long)&sst_acpi_baytrail_desc },