mirror of
https://github.com/FEX-Emu/linux.git
synced 2024-12-23 01:40:30 +00:00
Merge remote-tracking branches 'asoc/topic/codec-mutex', 'asoc/topic/compress' and 'asoc/topic/cq93vc' into asoc-next
This commit is contained in:
commit
cfdf59b4a1
@ -141,6 +141,7 @@ struct arizona {
|
||||
|
||||
uint16_t dac_comp_coeff;
|
||||
uint8_t dac_comp_enabled;
|
||||
struct mutex dac_comp_lock;
|
||||
};
|
||||
|
||||
int arizona_clk32k_enable(struct arizona *arizona);
|
||||
|
@ -99,12 +99,6 @@ struct davinci_vcif {
|
||||
dma_addr_t dma_rx_addr;
|
||||
};
|
||||
|
||||
struct cq93vc {
|
||||
struct platform_device *pdev;
|
||||
struct snd_soc_codec *codec;
|
||||
u32 sysclk;
|
||||
};
|
||||
|
||||
struct davinci_vc;
|
||||
|
||||
struct davinci_vc {
|
||||
@ -122,7 +116,6 @@ struct davinci_vc {
|
||||
|
||||
/* Client devices */
|
||||
struct davinci_vcif davinci_vcif;
|
||||
struct cq93vc cq93vc;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
@ -785,7 +785,6 @@ struct snd_soc_codec {
|
||||
struct device *dev;
|
||||
const struct snd_soc_codec_driver *driver;
|
||||
|
||||
struct mutex mutex;
|
||||
struct list_head list;
|
||||
struct list_head card_list;
|
||||
|
||||
|
@ -126,13 +126,13 @@ struct ab8500_codec_drvdata_dbg {
|
||||
/* Private data for AB8500 device-driver */
|
||||
struct ab8500_codec_drvdata {
|
||||
struct regmap *regmap;
|
||||
struct mutex ctrl_lock;
|
||||
|
||||
/* Sidetone */
|
||||
long *sid_fir_values;
|
||||
enum sid_state sid_status;
|
||||
|
||||
/* ANC */
|
||||
struct mutex anc_lock;
|
||||
long *anc_fir_values;
|
||||
long *anc_iir_values;
|
||||
enum anc_state anc_status;
|
||||
@ -1129,9 +1129,9 @@ static int sid_status_control_get(struct snd_kcontrol *kcontrol,
|
||||
struct snd_soc_codec *codec = snd_soc_kcontrol_codec(kcontrol);
|
||||
struct ab8500_codec_drvdata *drvdata = dev_get_drvdata(codec->dev);
|
||||
|
||||
mutex_lock(&codec->mutex);
|
||||
mutex_lock(&drvdata->ctrl_lock);
|
||||
ucontrol->value.integer.value[0] = drvdata->sid_status;
|
||||
mutex_unlock(&codec->mutex);
|
||||
mutex_unlock(&drvdata->ctrl_lock);
|
||||
|
||||
return 0;
|
||||
}
|
||||
@ -1154,7 +1154,7 @@ static int sid_status_control_put(struct snd_kcontrol *kcontrol,
|
||||
return -EIO;
|
||||
}
|
||||
|
||||
mutex_lock(&codec->mutex);
|
||||
mutex_lock(&drvdata->ctrl_lock);
|
||||
|
||||
sidconf = snd_soc_read(codec, AB8500_SIDFIRCONF);
|
||||
if (((sidconf & BIT(AB8500_SIDFIRCONF_FIRSIDBUSY)) != 0)) {
|
||||
@ -1185,7 +1185,7 @@ static int sid_status_control_put(struct snd_kcontrol *kcontrol,
|
||||
drvdata->sid_status = SID_FIR_CONFIGURED;
|
||||
|
||||
out:
|
||||
mutex_unlock(&codec->mutex);
|
||||
mutex_unlock(&drvdata->ctrl_lock);
|
||||
|
||||
dev_dbg(codec->dev, "%s: Exit\n", __func__);
|
||||
|
||||
@ -1198,9 +1198,9 @@ static int anc_status_control_get(struct snd_kcontrol *kcontrol,
|
||||
struct snd_soc_codec *codec = snd_soc_kcontrol_codec(kcontrol);
|
||||
struct ab8500_codec_drvdata *drvdata = dev_get_drvdata(codec->dev);
|
||||
|
||||
mutex_lock(&codec->mutex);
|
||||
mutex_lock(&drvdata->ctrl_lock);
|
||||
ucontrol->value.integer.value[0] = drvdata->anc_status;
|
||||
mutex_unlock(&codec->mutex);
|
||||
mutex_unlock(&drvdata->ctrl_lock);
|
||||
|
||||
return 0;
|
||||
}
|
||||
@ -1217,7 +1217,7 @@ static int anc_status_control_put(struct snd_kcontrol *kcontrol,
|
||||
|
||||
dev_dbg(dev, "%s: Enter.\n", __func__);
|
||||
|
||||
mutex_lock(&drvdata->anc_lock);
|
||||
mutex_lock(&drvdata->ctrl_lock);
|
||||
|
||||
req = ucontrol->value.integer.value[0];
|
||||
if (req >= ARRAY_SIZE(enum_anc_state)) {
|
||||
@ -1244,9 +1244,7 @@ static int anc_status_control_put(struct snd_kcontrol *kcontrol,
|
||||
}
|
||||
snd_soc_dapm_sync(&codec->dapm);
|
||||
|
||||
mutex_lock(&codec->mutex);
|
||||
anc_configure(codec, apply_fir, apply_iir);
|
||||
mutex_unlock(&codec->mutex);
|
||||
|
||||
if (apply_fir) {
|
||||
if (drvdata->anc_status == ANC_IIR_CONFIGURED)
|
||||
@ -1265,7 +1263,7 @@ static int anc_status_control_put(struct snd_kcontrol *kcontrol,
|
||||
snd_soc_dapm_sync(&codec->dapm);
|
||||
|
||||
cleanup:
|
||||
mutex_unlock(&drvdata->anc_lock);
|
||||
mutex_unlock(&drvdata->ctrl_lock);
|
||||
|
||||
if (status < 0)
|
||||
dev_err(dev, "%s: Unable to configure ANC! (status = %d)\n",
|
||||
@ -1294,14 +1292,15 @@ static int filter_control_get(struct snd_kcontrol *kcontrol,
|
||||
struct snd_ctl_elem_value *ucontrol)
|
||||
{
|
||||
struct snd_soc_codec *codec = snd_soc_kcontrol_codec(kcontrol);
|
||||
struct ab8500_codec_drvdata *drvdata = snd_soc_codec_get_drvdata(codec);
|
||||
struct filter_control *fc =
|
||||
(struct filter_control *)kcontrol->private_value;
|
||||
unsigned int i;
|
||||
|
||||
mutex_lock(&codec->mutex);
|
||||
mutex_lock(&drvdata->ctrl_lock);
|
||||
for (i = 0; i < fc->count; i++)
|
||||
ucontrol->value.integer.value[i] = fc->value[i];
|
||||
mutex_unlock(&codec->mutex);
|
||||
mutex_unlock(&drvdata->ctrl_lock);
|
||||
|
||||
return 0;
|
||||
}
|
||||
@ -1310,14 +1309,15 @@ static int filter_control_put(struct snd_kcontrol *kcontrol,
|
||||
struct snd_ctl_elem_value *ucontrol)
|
||||
{
|
||||
struct snd_soc_codec *codec = snd_soc_kcontrol_codec(kcontrol);
|
||||
struct ab8500_codec_drvdata *drvdata = snd_soc_codec_get_drvdata(codec);
|
||||
struct filter_control *fc =
|
||||
(struct filter_control *)kcontrol->private_value;
|
||||
unsigned int i;
|
||||
|
||||
mutex_lock(&codec->mutex);
|
||||
mutex_lock(&drvdata->ctrl_lock);
|
||||
for (i = 0; i < fc->count; i++)
|
||||
fc->value[i] = ucontrol->value.integer.value[i];
|
||||
mutex_unlock(&codec->mutex);
|
||||
mutex_unlock(&drvdata->ctrl_lock);
|
||||
|
||||
return 0;
|
||||
}
|
||||
@ -2545,7 +2545,7 @@ static int ab8500_codec_probe(struct snd_soc_codec *codec)
|
||||
|
||||
(void)snd_soc_dapm_disable_pin(&codec->dapm, "ANC Configure Input");
|
||||
|
||||
mutex_init(&drvdata->anc_lock);
|
||||
mutex_init(&drvdata->ctrl_lock);
|
||||
|
||||
return status;
|
||||
}
|
||||
|
@ -1185,13 +1185,13 @@ static void arizona_wm5102_set_dac_comp(struct snd_soc_codec *codec,
|
||||
{ 0x80, 0x0 },
|
||||
};
|
||||
|
||||
mutex_lock(&codec->mutex);
|
||||
mutex_lock(&arizona->dac_comp_lock);
|
||||
|
||||
dac_comp[1].def = arizona->dac_comp_coeff;
|
||||
if (rate >= 176400)
|
||||
dac_comp[2].def = arizona->dac_comp_enabled;
|
||||
|
||||
mutex_unlock(&codec->mutex);
|
||||
mutex_unlock(&arizona->dac_comp_lock);
|
||||
|
||||
regmap_multi_reg_write(arizona->regmap,
|
||||
dac_comp,
|
||||
|
@ -62,14 +62,10 @@ static int cq93vc_mute(struct snd_soc_dai *dai, int mute)
|
||||
static int cq93vc_set_dai_sysclk(struct snd_soc_dai *codec_dai,
|
||||
int clk_id, unsigned int freq, int dir)
|
||||
{
|
||||
struct snd_soc_codec *codec = codec_dai->codec;
|
||||
struct davinci_vc *davinci_vc = codec->dev->platform_data;
|
||||
|
||||
switch (freq) {
|
||||
case 22579200:
|
||||
case 27000000:
|
||||
case 33868800:
|
||||
davinci_vc->cq93vc.sysclk = freq;
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -126,32 +122,6 @@ static struct snd_soc_dai_driver cq93vc_dai = {
|
||||
.ops = &cq93vc_dai_ops,
|
||||
};
|
||||
|
||||
static int cq93vc_resume(struct snd_soc_codec *codec)
|
||||
{
|
||||
cq93vc_set_bias_level(codec, SND_SOC_BIAS_STANDBY);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int cq93vc_probe(struct snd_soc_codec *codec)
|
||||
{
|
||||
struct davinci_vc *davinci_vc = codec->dev->platform_data;
|
||||
|
||||
davinci_vc->cq93vc.codec = codec;
|
||||
|
||||
/* Off, with power on */
|
||||
cq93vc_set_bias_level(codec, SND_SOC_BIAS_STANDBY);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int cq93vc_remove(struct snd_soc_codec *codec)
|
||||
{
|
||||
cq93vc_set_bias_level(codec, SND_SOC_BIAS_OFF);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static struct regmap *cq93vc_get_regmap(struct device *dev)
|
||||
{
|
||||
struct davinci_vc *davinci_vc = dev->platform_data;
|
||||
@ -161,9 +131,6 @@ static struct regmap *cq93vc_get_regmap(struct device *dev)
|
||||
|
||||
static struct snd_soc_codec_driver soc_codec_dev_cq93vc = {
|
||||
.set_bias_level = cq93vc_set_bias_level,
|
||||
.probe = cq93vc_probe,
|
||||
.remove = cq93vc_remove,
|
||||
.resume = cq93vc_resume,
|
||||
.get_regmap = cq93vc_get_regmap,
|
||||
.controls = cq93vc_snd_controls,
|
||||
.num_controls = ARRAY_SIZE(cq93vc_snd_controls),
|
||||
|
@ -16,6 +16,7 @@
|
||||
#include <linux/pm.h>
|
||||
#include <linux/i2c.h>
|
||||
#include <linux/clk.h>
|
||||
#include <linux/mutex.h>
|
||||
#include <sound/core.h>
|
||||
#include <sound/pcm.h>
|
||||
#include <sound/pcm_params.h>
|
||||
@ -57,6 +58,7 @@ struct max98095_priv {
|
||||
unsigned int mic2pre;
|
||||
struct snd_soc_jack *headphone_jack;
|
||||
struct snd_soc_jack *mic_jack;
|
||||
struct mutex lock;
|
||||
};
|
||||
|
||||
static const struct reg_default max98095_reg_def[] = {
|
||||
@ -1803,7 +1805,7 @@ static int max98095_put_eq_enum(struct snd_kcontrol *kcontrol,
|
||||
regsave = snd_soc_read(codec, M98095_088_CFG_LEVEL);
|
||||
snd_soc_update_bits(codec, M98095_088_CFG_LEVEL, regmask, 0);
|
||||
|
||||
mutex_lock(&codec->mutex);
|
||||
mutex_lock(&max98095->lock);
|
||||
snd_soc_update_bits(codec, M98095_00F_HOST_CFG, M98095_SEG, M98095_SEG);
|
||||
m98095_eq_band(codec, channel, 0, coef_set->band1);
|
||||
m98095_eq_band(codec, channel, 1, coef_set->band2);
|
||||
@ -1811,7 +1813,7 @@ static int max98095_put_eq_enum(struct snd_kcontrol *kcontrol,
|
||||
m98095_eq_band(codec, channel, 3, coef_set->band4);
|
||||
m98095_eq_band(codec, channel, 4, coef_set->band5);
|
||||
snd_soc_update_bits(codec, M98095_00F_HOST_CFG, M98095_SEG, 0);
|
||||
mutex_unlock(&codec->mutex);
|
||||
mutex_unlock(&max98095->lock);
|
||||
|
||||
/* Restore the original on/off state */
|
||||
snd_soc_update_bits(codec, M98095_088_CFG_LEVEL, regmask, regsave);
|
||||
@ -1957,12 +1959,12 @@ static int max98095_put_bq_enum(struct snd_kcontrol *kcontrol,
|
||||
regsave = snd_soc_read(codec, M98095_088_CFG_LEVEL);
|
||||
snd_soc_update_bits(codec, M98095_088_CFG_LEVEL, regmask, 0);
|
||||
|
||||
mutex_lock(&codec->mutex);
|
||||
mutex_lock(&max98095->lock);
|
||||
snd_soc_update_bits(codec, M98095_00F_HOST_CFG, M98095_SEG, M98095_SEG);
|
||||
m98095_biquad_band(codec, channel, 0, coef_set->band1);
|
||||
m98095_biquad_band(codec, channel, 1, coef_set->band2);
|
||||
snd_soc_update_bits(codec, M98095_00F_HOST_CFG, M98095_SEG, 0);
|
||||
mutex_unlock(&codec->mutex);
|
||||
mutex_unlock(&max98095->lock);
|
||||
|
||||
/* Restore the original on/off state */
|
||||
snd_soc_update_bits(codec, M98095_088_CFG_LEVEL, regmask, regsave);
|
||||
@ -2395,6 +2397,8 @@ static int max98095_i2c_probe(struct i2c_client *i2c,
|
||||
if (max98095 == NULL)
|
||||
return -ENOMEM;
|
||||
|
||||
mutex_init(&max98095->lock);
|
||||
|
||||
max98095->regmap = devm_regmap_init_i2c(i2c, &max98095_regmap);
|
||||
if (IS_ERR(max98095->regmap)) {
|
||||
ret = PTR_ERR(max98095->regmap);
|
||||
|
@ -619,10 +619,10 @@ static int wm5102_out_comp_coeff_get(struct snd_kcontrol *kcontrol,
|
||||
struct arizona *arizona = dev_get_drvdata(codec->dev->parent);
|
||||
uint16_t data;
|
||||
|
||||
mutex_lock(&codec->mutex);
|
||||
mutex_lock(&arizona->dac_comp_lock);
|
||||
data = cpu_to_be16(arizona->dac_comp_coeff);
|
||||
memcpy(ucontrol->value.bytes.data, &data, sizeof(data));
|
||||
mutex_unlock(&codec->mutex);
|
||||
mutex_unlock(&arizona->dac_comp_lock);
|
||||
|
||||
return 0;
|
||||
}
|
||||
@ -633,11 +633,11 @@ static int wm5102_out_comp_coeff_put(struct snd_kcontrol *kcontrol,
|
||||
struct snd_soc_codec *codec = snd_soc_kcontrol_codec(kcontrol);
|
||||
struct arizona *arizona = dev_get_drvdata(codec->dev->parent);
|
||||
|
||||
mutex_lock(&codec->mutex);
|
||||
mutex_lock(&arizona->dac_comp_lock);
|
||||
memcpy(&arizona->dac_comp_coeff, ucontrol->value.bytes.data,
|
||||
sizeof(arizona->dac_comp_coeff));
|
||||
arizona->dac_comp_coeff = be16_to_cpu(arizona->dac_comp_coeff);
|
||||
mutex_unlock(&codec->mutex);
|
||||
mutex_unlock(&arizona->dac_comp_lock);
|
||||
|
||||
return 0;
|
||||
}
|
||||
@ -648,9 +648,9 @@ static int wm5102_out_comp_switch_get(struct snd_kcontrol *kcontrol,
|
||||
struct snd_soc_codec *codec = snd_soc_kcontrol_codec(kcontrol);
|
||||
struct arizona *arizona = dev_get_drvdata(codec->dev->parent);
|
||||
|
||||
mutex_lock(&codec->mutex);
|
||||
mutex_lock(&arizona->dac_comp_lock);
|
||||
ucontrol->value.integer.value[0] = arizona->dac_comp_enabled;
|
||||
mutex_unlock(&codec->mutex);
|
||||
mutex_unlock(&arizona->dac_comp_lock);
|
||||
|
||||
return 0;
|
||||
}
|
||||
@ -661,9 +661,9 @@ static int wm5102_out_comp_switch_put(struct snd_kcontrol *kcontrol,
|
||||
struct snd_soc_codec *codec = snd_soc_kcontrol_codec(kcontrol);
|
||||
struct arizona *arizona = dev_get_drvdata(codec->dev->parent);
|
||||
|
||||
mutex_lock(&codec->mutex);
|
||||
mutex_lock(&arizona->dac_comp_lock);
|
||||
arizona->dac_comp_enabled = ucontrol->value.integer.value[0];
|
||||
mutex_unlock(&codec->mutex);
|
||||
mutex_unlock(&arizona->dac_comp_lock);
|
||||
|
||||
return 0;
|
||||
}
|
||||
@ -1900,6 +1900,8 @@ static int wm5102_probe(struct platform_device *pdev)
|
||||
return -ENOMEM;
|
||||
platform_set_drvdata(pdev, wm5102);
|
||||
|
||||
mutex_init(&arizona->dac_comp_lock);
|
||||
|
||||
wm5102->core.arizona = arizona;
|
||||
wm5102->core.num_inputs = 6;
|
||||
|
||||
|
@ -24,6 +24,7 @@
|
||||
#include <linux/regulator/consumer.h>
|
||||
#include <linux/spi/spi.h>
|
||||
#include <linux/of_device.h>
|
||||
#include <linux/mutex.h>
|
||||
#include <sound/core.h>
|
||||
#include <sound/pcm.h>
|
||||
#include <sound/pcm_params.h>
|
||||
@ -50,6 +51,8 @@ struct wm8731_priv {
|
||||
int sysclk_type;
|
||||
int playback_fs;
|
||||
bool deemph;
|
||||
|
||||
struct mutex lock;
|
||||
};
|
||||
|
||||
|
||||
@ -138,7 +141,7 @@ static int wm8731_put_deemph(struct snd_kcontrol *kcontrol,
|
||||
if (deemph > 1)
|
||||
return -EINVAL;
|
||||
|
||||
mutex_lock(&codec->mutex);
|
||||
mutex_lock(&wm8731->lock);
|
||||
if (wm8731->deemph != deemph) {
|
||||
wm8731->deemph = deemph;
|
||||
|
||||
@ -146,7 +149,7 @@ static int wm8731_put_deemph(struct snd_kcontrol *kcontrol,
|
||||
|
||||
ret = 1;
|
||||
}
|
||||
mutex_unlock(&codec->mutex);
|
||||
mutex_unlock(&wm8731->lock);
|
||||
|
||||
return ret;
|
||||
}
|
||||
@ -685,6 +688,8 @@ static int wm8731_spi_probe(struct spi_device *spi)
|
||||
if (wm8731 == NULL)
|
||||
return -ENOMEM;
|
||||
|
||||
mutex_init(&wm8731->lock);
|
||||
|
||||
wm8731->regmap = devm_regmap_init_spi(spi, &wm8731_regmap);
|
||||
if (IS_ERR(wm8731->regmap)) {
|
||||
ret = PTR_ERR(wm8731->regmap);
|
||||
|
@ -26,6 +26,7 @@
|
||||
#include <linux/regmap.h>
|
||||
#include <linux/slab.h>
|
||||
#include <linux/irq.h>
|
||||
#include <linux/mutex.h>
|
||||
#include <sound/core.h>
|
||||
#include <sound/jack.h>
|
||||
#include <sound/pcm.h>
|
||||
@ -123,6 +124,7 @@ struct wm8903_priv {
|
||||
int sysclk;
|
||||
int irq;
|
||||
|
||||
struct mutex lock;
|
||||
int fs;
|
||||
int deemph;
|
||||
|
||||
@ -457,7 +459,7 @@ static int wm8903_put_deemph(struct snd_kcontrol *kcontrol,
|
||||
if (deemph > 1)
|
||||
return -EINVAL;
|
||||
|
||||
mutex_lock(&codec->mutex);
|
||||
mutex_lock(&wm8903->lock);
|
||||
if (wm8903->deemph != deemph) {
|
||||
wm8903->deemph = deemph;
|
||||
|
||||
@ -465,7 +467,7 @@ static int wm8903_put_deemph(struct snd_kcontrol *kcontrol,
|
||||
|
||||
ret = 1;
|
||||
}
|
||||
mutex_unlock(&codec->mutex);
|
||||
mutex_unlock(&wm8903->lock);
|
||||
|
||||
return ret;
|
||||
}
|
||||
@ -2023,6 +2025,8 @@ static int wm8903_i2c_probe(struct i2c_client *i2c,
|
||||
GFP_KERNEL);
|
||||
if (wm8903 == NULL)
|
||||
return -ENOMEM;
|
||||
|
||||
mutex_init(&wm8903->lock);
|
||||
wm8903->dev = &i2c->dev;
|
||||
|
||||
wm8903->regmap = devm_regmap_init_i2c(i2c, &wm8903_regmap);
|
||||
|
@ -867,9 +867,9 @@ static void wm8958_enh_eq_loaded(const struct firmware *fw, void *context)
|
||||
struct wm8994_priv *wm8994 = snd_soc_codec_get_drvdata(codec);
|
||||
|
||||
if (fw && (wm8958_dsp2_fw(codec, "ENH_EQ", fw, true) == 0)) {
|
||||
mutex_lock(&codec->mutex);
|
||||
mutex_lock(&wm8994->fw_lock);
|
||||
wm8994->enh_eq = fw;
|
||||
mutex_unlock(&codec->mutex);
|
||||
mutex_unlock(&wm8994->fw_lock);
|
||||
}
|
||||
}
|
||||
|
||||
@ -879,9 +879,9 @@ static void wm8958_mbc_vss_loaded(const struct firmware *fw, void *context)
|
||||
struct wm8994_priv *wm8994 = snd_soc_codec_get_drvdata(codec);
|
||||
|
||||
if (fw && (wm8958_dsp2_fw(codec, "MBC+VSS", fw, true) == 0)) {
|
||||
mutex_lock(&codec->mutex);
|
||||
mutex_lock(&wm8994->fw_lock);
|
||||
wm8994->mbc_vss = fw;
|
||||
mutex_unlock(&codec->mutex);
|
||||
mutex_unlock(&wm8994->fw_lock);
|
||||
}
|
||||
}
|
||||
|
||||
@ -891,9 +891,9 @@ static void wm8958_mbc_loaded(const struct firmware *fw, void *context)
|
||||
struct wm8994_priv *wm8994 = snd_soc_codec_get_drvdata(codec);
|
||||
|
||||
if (fw && (wm8958_dsp2_fw(codec, "MBC", fw, true) == 0)) {
|
||||
mutex_lock(&codec->mutex);
|
||||
mutex_lock(&wm8994->fw_lock);
|
||||
wm8994->mbc = fw;
|
||||
mutex_unlock(&codec->mutex);
|
||||
mutex_unlock(&wm8994->fw_lock);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -26,6 +26,7 @@
|
||||
#include <linux/regulator/consumer.h>
|
||||
#include <linux/slab.h>
|
||||
#include <linux/workqueue.h>
|
||||
#include <linux/mutex.h>
|
||||
#include <sound/core.h>
|
||||
#include <sound/jack.h>
|
||||
#include <sound/pcm.h>
|
||||
@ -67,6 +68,7 @@ struct wm8962_priv {
|
||||
int fll_fref;
|
||||
int fll_fout;
|
||||
|
||||
struct mutex dsp2_ena_lock;
|
||||
u16 dsp2_ena;
|
||||
|
||||
struct delayed_work mic_work;
|
||||
@ -1570,7 +1572,7 @@ static int wm8962_dsp2_ena_put(struct snd_kcontrol *kcontrol,
|
||||
int dsp2_running = snd_soc_read(codec, WM8962_DSP2_POWER_MANAGEMENT) &
|
||||
WM8962_DSP2_ENA;
|
||||
|
||||
mutex_lock(&codec->mutex);
|
||||
mutex_lock(&wm8962->dsp2_ena_lock);
|
||||
|
||||
if (ucontrol->value.integer.value[0])
|
||||
wm8962->dsp2_ena |= 1 << shift;
|
||||
@ -1590,7 +1592,7 @@ static int wm8962_dsp2_ena_put(struct snd_kcontrol *kcontrol,
|
||||
}
|
||||
|
||||
out:
|
||||
mutex_unlock(&codec->mutex);
|
||||
mutex_unlock(&wm8962->dsp2_ena_lock);
|
||||
|
||||
return ret;
|
||||
}
|
||||
@ -3557,6 +3559,8 @@ static int wm8962_i2c_probe(struct i2c_client *i2c,
|
||||
if (wm8962 == NULL)
|
||||
return -ENOMEM;
|
||||
|
||||
mutex_init(&wm8962->dsp2_ena_lock);
|
||||
|
||||
i2c_set_clientdata(i2c, wm8962);
|
||||
|
||||
INIT_DELAYED_WORK(&wm8962->mic_work, wm8962_mic_work);
|
||||
|
@ -4457,6 +4457,8 @@ static int wm8994_probe(struct platform_device *pdev)
|
||||
return -ENOMEM;
|
||||
platform_set_drvdata(pdev, wm8994);
|
||||
|
||||
mutex_init(&wm8994->fw_lock);
|
||||
|
||||
wm8994->wm8994 = dev_get_drvdata(pdev->dev.parent);
|
||||
|
||||
pm_runtime_enable(&pdev->dev);
|
||||
|
@ -13,6 +13,7 @@
|
||||
#include <linux/firmware.h>
|
||||
#include <linux/completion.h>
|
||||
#include <linux/workqueue.h>
|
||||
#include <linux/mutex.h>
|
||||
|
||||
#include "wm_hubs.h"
|
||||
|
||||
@ -156,6 +157,7 @@ struct wm8994_priv {
|
||||
unsigned int aif1clk_disable:1;
|
||||
unsigned int aif2clk_disable:1;
|
||||
|
||||
struct mutex fw_lock;
|
||||
int dsp_active;
|
||||
const struct firmware *cur_fw;
|
||||
const struct firmware *mbc;
|
||||
|
@ -258,9 +258,6 @@ static int soc_compr_free_fe(struct snd_compr_stream *cstream)
|
||||
list_for_each_entry(dpcm, &fe->dpcm[stream].be_clients, list_be)
|
||||
dpcm->state = SND_SOC_DPCM_LINK_STATE_FREE;
|
||||
|
||||
if (stream == SNDRV_PCM_STREAM_PLAYBACK)
|
||||
dpcm_dapm_stream_event(fe, stream, SND_SOC_DAPM_STREAM_STOP);
|
||||
else
|
||||
dpcm_dapm_stream_event(fe, stream, SND_SOC_DAPM_STREAM_STOP);
|
||||
|
||||
fe->dpcm[stream].state = SND_SOC_DPCM_STATE_CLOSE;
|
||||
@ -456,11 +453,7 @@ static int soc_compr_set_params_fe(struct snd_compr_stream *cstream,
|
||||
if (ret < 0)
|
||||
goto out;
|
||||
|
||||
if (stream == SNDRV_PCM_STREAM_PLAYBACK)
|
||||
dpcm_dapm_stream_event(fe, stream, SND_SOC_DAPM_STREAM_START);
|
||||
else
|
||||
dpcm_dapm_stream_event(fe, stream, SND_SOC_DAPM_STREAM_START);
|
||||
|
||||
fe->dpcm[stream].state = SND_SOC_DPCM_STATE_PREPARE;
|
||||
|
||||
out:
|
||||
|
@ -3009,7 +3009,6 @@ int snd_soc_register_codec(struct device *dev,
|
||||
codec->dev = dev;
|
||||
codec->driver = codec_drv;
|
||||
codec->component.val_bytes = codec_drv->reg_word_size;
|
||||
mutex_init(&codec->mutex);
|
||||
|
||||
#ifdef CONFIG_DEBUG_FS
|
||||
codec->component.init_debugfs = soc_init_codec_debugfs;
|
||||
|
Loading…
Reference in New Issue
Block a user