Commit d672e98b authored by Mark Brown's avatar Mark Brown

Merge tag 'asoc-fix-v4.4-rc8' into asoc-linus

ASoC: Last minute fixes for v4.4

A few final fixes for v4.4, the main one being the two patches to the
new Sky Lake drivers which fix a previous incorrect fix that went in
during an earlier -rc.

# gpg: Signature made Wed 06 Jan 2016 17:12:57 GMT using RSA key ID 5D5487D0
# gpg: Good signature from "Mark Brown <broonie@sirena.org.uk>"
# gpg:                 aka "Mark Brown <broonie@debian.org>"
# gpg:                 aka "Mark Brown <broonie@kernel.org>"
# gpg:                 aka "Mark Brown <broonie@tardis.ed.ac.uk>"
# gpg:                 aka "Mark Brown <broonie@linaro.org>"
# gpg:                 aka "Mark Brown <Mark.Brown@linaro.org>"
# gpg: WARNING: This key is not certified with a trusted signature!
# gpg:          There is no indication that the signature belongs to the owner.
# Primary key fingerprint: 3F25 68AA C269 98F9 E813  A1C5 C3F4 36CA 30F5 D8EB
#      Subkey fingerprint: ADE6 68AA 6757 18B5 9FE2  9FEA 24D6 8B72 5D54 87D0
parents 16830985 bc42f363
...@@ -1655,7 +1655,7 @@ extern const struct dev_pm_ops snd_soc_pm_ops; ...@@ -1655,7 +1655,7 @@ extern const struct dev_pm_ops snd_soc_pm_ops;
/* Helper functions */ /* Helper functions */
static inline void snd_soc_dapm_mutex_lock(struct snd_soc_dapm_context *dapm) static inline void snd_soc_dapm_mutex_lock(struct snd_soc_dapm_context *dapm)
{ {
mutex_lock(&dapm->card->dapm_mutex); mutex_lock_nested(&dapm->card->dapm_mutex, SND_SOC_DAPM_CLASS_RUNTIME);
} }
static inline void snd_soc_dapm_mutex_unlock(struct snd_soc_dapm_context *dapm) static inline void snd_soc_dapm_mutex_unlock(struct snd_soc_dapm_context *dapm)
......
...@@ -1537,7 +1537,7 @@ static int arizona_hw_params(struct snd_pcm_substream *substream, ...@@ -1537,7 +1537,7 @@ static int arizona_hw_params(struct snd_pcm_substream *substream,
bool reconfig; bool reconfig;
unsigned int aif_tx_state, aif_rx_state; unsigned int aif_tx_state, aif_rx_state;
if (params_rate(params) % 8000) if (params_rate(params) % 4000)
rates = &arizona_44k1_bclk_rates[0]; rates = &arizona_44k1_bclk_rates[0];
else else
rates = &arizona_48k_bclk_rates[0]; rates = &arizona_48k_bclk_rates[0];
......
...@@ -1667,9 +1667,13 @@ static int rt5645_spk_event(struct snd_soc_dapm_widget *w, ...@@ -1667,9 +1667,13 @@ static int rt5645_spk_event(struct snd_soc_dapm_widget *w,
RT5645_PWR_CLS_D_L, RT5645_PWR_CLS_D_L,
RT5645_PWR_CLS_D | RT5645_PWR_CLS_D_R | RT5645_PWR_CLS_D | RT5645_PWR_CLS_D_R |
RT5645_PWR_CLS_D_L); RT5645_PWR_CLS_D_L);
snd_soc_update_bits(codec, RT5645_GEN_CTRL3,
RT5645_DET_CLK_MASK, RT5645_DET_CLK_MODE1);
break; break;
case SND_SOC_DAPM_PRE_PMD: case SND_SOC_DAPM_PRE_PMD:
snd_soc_update_bits(codec, RT5645_GEN_CTRL3,
RT5645_DET_CLK_MASK, RT5645_DET_CLK_DIS);
snd_soc_write(codec, RT5645_EQ_CTRL2, 0); snd_soc_write(codec, RT5645_EQ_CTRL2, 0);
snd_soc_update_bits(codec, RT5645_PWR_DIG1, snd_soc_update_bits(codec, RT5645_PWR_DIG1,
RT5645_PWR_CLS_D | RT5645_PWR_CLS_D_R | RT5645_PWR_CLS_D | RT5645_PWR_CLS_D_R |
......
...@@ -2122,6 +2122,10 @@ enum { ...@@ -2122,6 +2122,10 @@ enum {
/* General Control3 (0xfc) */ /* General Control3 (0xfc) */
#define RT5645_JD_PSV_MODE (0x1 << 12) #define RT5645_JD_PSV_MODE (0x1 << 12)
#define RT5645_IRQ_CLK_GATE_CTRL (0x1 << 11) #define RT5645_IRQ_CLK_GATE_CTRL (0x1 << 11)
#define RT5645_DET_CLK_MASK (0x3 << 9)
#define RT5645_DET_CLK_DIS (0x0 << 9)
#define RT5645_DET_CLK_MODE1 (0x1 << 9)
#define RT5645_DET_CLK_MODE2 (0x2 << 9)
#define RT5645_MICINDET_MANU (0x1 << 7) #define RT5645_MICINDET_MANU (0x1 << 7)
#define RT5645_RING2_SLEEVE_GND (0x1 << 5) #define RT5645_RING2_SLEEVE_GND (0x1 << 5)
......
...@@ -1240,7 +1240,6 @@ int skl_tplg_init(struct snd_soc_platform *platform, struct hdac_ext_bus *ebus) ...@@ -1240,7 +1240,6 @@ int skl_tplg_init(struct snd_soc_platform *platform, struct hdac_ext_bus *ebus)
*/ */
ret = snd_soc_tplg_component_load(&platform->component, ret = snd_soc_tplg_component_load(&platform->component,
&skl_tplg_ops, fw, 0); &skl_tplg_ops, fw, 0);
release_firmware(fw);
if (ret < 0) { if (ret < 0) {
dev_err(bus->dev, "tplg component load failed%d\n", ret); dev_err(bus->dev, "tplg component load failed%d\n", ret);
return -EINVAL; return -EINVAL;
...@@ -1249,5 +1248,7 @@ int skl_tplg_init(struct snd_soc_platform *platform, struct hdac_ext_bus *ebus) ...@@ -1249,5 +1248,7 @@ int skl_tplg_init(struct snd_soc_platform *platform, struct hdac_ext_bus *ebus)
skl->resource.max_mcps = SKL_MAX_MCPS; skl->resource.max_mcps = SKL_MAX_MCPS;
skl->resource.max_mem = SKL_FW_MAX_MEM; skl->resource.max_mem = SKL_FW_MAX_MEM;
skl->tplg = fw;
return 0; return 0;
} }
...@@ -25,6 +25,7 @@ ...@@ -25,6 +25,7 @@
#include <linux/pci.h> #include <linux/pci.h>
#include <linux/pm_runtime.h> #include <linux/pm_runtime.h>
#include <linux/platform_device.h> #include <linux/platform_device.h>
#include <linux/firmware.h>
#include <sound/pcm.h> #include <sound/pcm.h>
#include "skl.h" #include "skl.h"
...@@ -520,6 +521,9 @@ static void skl_remove(struct pci_dev *pci) ...@@ -520,6 +521,9 @@ static void skl_remove(struct pci_dev *pci)
struct hdac_ext_bus *ebus = pci_get_drvdata(pci); struct hdac_ext_bus *ebus = pci_get_drvdata(pci);
struct skl *skl = ebus_to_skl(ebus); struct skl *skl = ebus_to_skl(ebus);
if (skl->tplg)
release_firmware(skl->tplg);
if (pci_dev_run_wake(pci)) if (pci_dev_run_wake(pci))
pm_runtime_get_noresume(&pci->dev); pm_runtime_get_noresume(&pci->dev);
pci_dev_put(pci); pci_dev_put(pci);
......
...@@ -68,6 +68,8 @@ struct skl { ...@@ -68,6 +68,8 @@ struct skl {
struct skl_dsp_resource resource; struct skl_dsp_resource resource;
struct list_head ppl_list; struct list_head ppl_list;
struct list_head dapm_path_list; struct list_head dapm_path_list;
const struct firmware *tplg;
}; };
#define skl_to_ebus(s) (&(s)->ebus) #define skl_to_ebus(s) (&(s)->ebus)
......
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