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

Merge remote-tracking branches 'asoc/topic/codec-mutex', 'asoc/topic/compress'...

Merge remote-tracking branches 'asoc/topic/codec-mutex', 'asoc/topic/compress' and 'asoc/topic/cq93vc' into asoc-next
Loading
Loading
Loading
Loading
+1 −0
Original line number Original line Diff line number Diff line
@@ -141,6 +141,7 @@ struct arizona {


	uint16_t dac_comp_coeff;
	uint16_t dac_comp_coeff;
	uint8_t dac_comp_enabled;
	uint8_t dac_comp_enabled;
	struct mutex dac_comp_lock;
};
};


int arizona_clk32k_enable(struct arizona *arizona);
int arizona_clk32k_enable(struct arizona *arizona);
+0 −7
Original line number Original line Diff line number Diff line
@@ -99,12 +99,6 @@ struct davinci_vcif {
	dma_addr_t dma_rx_addr;
	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;


struct davinci_vc {
struct davinci_vc {
@@ -122,7 +116,6 @@ struct davinci_vc {


	/* Client devices */
	/* Client devices */
	struct davinci_vcif davinci_vcif;
	struct davinci_vcif davinci_vcif;
	struct cq93vc cq93vc;
};
};


#endif
#endif
+0 −1
Original line number Original line Diff line number Diff line
@@ -785,7 +785,6 @@ struct snd_soc_codec {
	struct device *dev;
	struct device *dev;
	const struct snd_soc_codec_driver *driver;
	const struct snd_soc_codec_driver *driver;


	struct mutex mutex;
	struct list_head list;
	struct list_head list;
	struct list_head card_list;
	struct list_head card_list;


+16 −16
Original line number Original line Diff line number Diff line
@@ -126,13 +126,13 @@ struct ab8500_codec_drvdata_dbg {
/* Private data for AB8500 device-driver */
/* Private data for AB8500 device-driver */
struct ab8500_codec_drvdata {
struct ab8500_codec_drvdata {
	struct regmap *regmap;
	struct regmap *regmap;
	struct mutex ctrl_lock;


	/* Sidetone */
	/* Sidetone */
	long *sid_fir_values;
	long *sid_fir_values;
	enum sid_state sid_status;
	enum sid_state sid_status;


	/* ANC */
	/* ANC */
	struct mutex anc_lock;
	long *anc_fir_values;
	long *anc_fir_values;
	long *anc_iir_values;
	long *anc_iir_values;
	enum anc_state anc_status;
	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 snd_soc_codec *codec = snd_soc_kcontrol_codec(kcontrol);
	struct ab8500_codec_drvdata *drvdata = dev_get_drvdata(codec->dev);
	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;
	ucontrol->value.integer.value[0] = drvdata->sid_status;
	mutex_unlock(&codec->mutex);
	mutex_unlock(&drvdata->ctrl_lock);


	return 0;
	return 0;
}
}
@@ -1154,7 +1154,7 @@ static int sid_status_control_put(struct snd_kcontrol *kcontrol,
		return -EIO;
		return -EIO;
	}
	}


	mutex_lock(&codec->mutex);
	mutex_lock(&drvdata->ctrl_lock);


	sidconf = snd_soc_read(codec, AB8500_SIDFIRCONF);
	sidconf = snd_soc_read(codec, AB8500_SIDFIRCONF);
	if (((sidconf & BIT(AB8500_SIDFIRCONF_FIRSIDBUSY)) != 0)) {
	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;
	drvdata->sid_status = SID_FIR_CONFIGURED;


out:
out:
	mutex_unlock(&codec->mutex);
	mutex_unlock(&drvdata->ctrl_lock);


	dev_dbg(codec->dev, "%s: Exit\n", __func__);
	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 snd_soc_codec *codec = snd_soc_kcontrol_codec(kcontrol);
	struct ab8500_codec_drvdata *drvdata = dev_get_drvdata(codec->dev);
	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;
	ucontrol->value.integer.value[0] = drvdata->anc_status;
	mutex_unlock(&codec->mutex);
	mutex_unlock(&drvdata->ctrl_lock);


	return 0;
	return 0;
}
}
@@ -1217,7 +1217,7 @@ static int anc_status_control_put(struct snd_kcontrol *kcontrol,


	dev_dbg(dev, "%s: Enter.\n", __func__);
	dev_dbg(dev, "%s: Enter.\n", __func__);


	mutex_lock(&drvdata->anc_lock);
	mutex_lock(&drvdata->ctrl_lock);


	req = ucontrol->value.integer.value[0];
	req = ucontrol->value.integer.value[0];
	if (req >= ARRAY_SIZE(enum_anc_state)) {
	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);
	snd_soc_dapm_sync(&codec->dapm);


	mutex_lock(&codec->mutex);
	anc_configure(codec, apply_fir, apply_iir);
	anc_configure(codec, apply_fir, apply_iir);
	mutex_unlock(&codec->mutex);


	if (apply_fir) {
	if (apply_fir) {
		if (drvdata->anc_status == ANC_IIR_CONFIGURED)
		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);
	snd_soc_dapm_sync(&codec->dapm);


cleanup:
cleanup:
	mutex_unlock(&drvdata->anc_lock);
	mutex_unlock(&drvdata->ctrl_lock);


	if (status < 0)
	if (status < 0)
		dev_err(dev, "%s: Unable to configure ANC! (status = %d)\n",
		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_ctl_elem_value *ucontrol)
{
{
	struct snd_soc_codec *codec = snd_soc_kcontrol_codec(kcontrol);
	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 *fc =
			(struct filter_control *)kcontrol->private_value;
			(struct filter_control *)kcontrol->private_value;
	unsigned int i;
	unsigned int i;


	mutex_lock(&codec->mutex);
	mutex_lock(&drvdata->ctrl_lock);
	for (i = 0; i < fc->count; i++)
	for (i = 0; i < fc->count; i++)
		ucontrol->value.integer.value[i] = fc->value[i];
		ucontrol->value.integer.value[i] = fc->value[i];
	mutex_unlock(&codec->mutex);
	mutex_unlock(&drvdata->ctrl_lock);


	return 0;
	return 0;
}
}
@@ -1310,14 +1309,15 @@ static int filter_control_put(struct snd_kcontrol *kcontrol,
		struct snd_ctl_elem_value *ucontrol)
		struct snd_ctl_elem_value *ucontrol)
{
{
	struct snd_soc_codec *codec = snd_soc_kcontrol_codec(kcontrol);
	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 *fc =
			(struct filter_control *)kcontrol->private_value;
			(struct filter_control *)kcontrol->private_value;
	unsigned int i;
	unsigned int i;


	mutex_lock(&codec->mutex);
	mutex_lock(&drvdata->ctrl_lock);
	for (i = 0; i < fc->count; i++)
	for (i = 0; i < fc->count; i++)
		fc->value[i] = ucontrol->value.integer.value[i];
		fc->value[i] = ucontrol->value.integer.value[i];
	mutex_unlock(&codec->mutex);
	mutex_unlock(&drvdata->ctrl_lock);


	return 0;
	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");
	(void)snd_soc_dapm_disable_pin(&codec->dapm, "ANC Configure Input");


	mutex_init(&drvdata->anc_lock);
	mutex_init(&drvdata->ctrl_lock);


	return status;
	return status;
}
}
+2 −2
Original line number Original line Diff line number Diff line
@@ -1185,13 +1185,13 @@ static void arizona_wm5102_set_dac_comp(struct snd_soc_codec *codec,
		{ 0x80, 0x0 },
		{ 0x80, 0x0 },
	};
	};


	mutex_lock(&codec->mutex);
	mutex_lock(&arizona->dac_comp_lock);


	dac_comp[1].def = arizona->dac_comp_coeff;
	dac_comp[1].def = arizona->dac_comp_coeff;
	if (rate >= 176400)
	if (rate >= 176400)
		dac_comp[2].def = arizona->dac_comp_enabled;
		dac_comp[2].def = arizona->dac_comp_enabled;


	mutex_unlock(&codec->mutex);
	mutex_unlock(&arizona->dac_comp_lock);


	regmap_multi_reg_write(arizona->regmap,
	regmap_multi_reg_write(arizona->regmap,
			       dac_comp,
			       dac_comp,
Loading