Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit a25f9ecc authored by Linux Build Service Account's avatar Linux Build Service Account Committed by Gerrit - the friendly Code Review server
Browse files

Merge "ASoC: wcd934x: Set micbias curr to higher value when micb is enabled"

parents 274bedc5 78607e49
Loading
Loading
Loading
Loading
+37 −1
Original line number Diff line number Diff line
@@ -68,6 +68,9 @@

#define WCD934X_FORMATS_S16_LE (SNDRV_PCM_FMTBIT_S16_LE)

#define MICB_LOAD_PROP "qcom,vreg-micb"
#define MICB_LOAD_DEFAULT 30400

/* Macros for packing register writes into a U32 */
#define WCD934X_PACKED_REG_SIZE sizeof(u32)
#define WCD934X_CODEC_UNPACK_ENTRY(packed, reg, mask, val) \
@@ -637,6 +640,9 @@ struct tavil_priv {
	struct platform_device *pdev_child_devices
		[WCD934X_CHILD_DEVICES_MAX];
	int child_count;
	struct regulator *micb_load;
	int micb_load_low;
	int micb_load_high;
};

static const struct tavil_reg_mask_val tavil_spkr_default[] = {
@@ -4888,6 +4894,9 @@ int tavil_micbias_control(struct snd_soc_codec *codec,
	case MICB_ENABLE:
		tavil->micb_ref[micb_index]++;
		if (tavil->micb_ref[micb_index] == 1) {
			if (tavil->micb_load)
				regulator_set_load(tavil->micb_load,
						   tavil->micb_load_high);
			snd_soc_update_bits(codec, micb_reg, 0xC0, 0x40);
			if (post_on_event && tavil->mbhc)
				blocking_notifier_call_chain(
@@ -4918,6 +4927,9 @@ int tavil_micbias_control(struct snd_soc_codec *codec,
						&tavil->mbhc->notifier,
						post_off_event,
						&tavil->mbhc->wcd_mbhc);
			if (tavil->micb_load)
				regulator_set_load(tavil->micb_load,
						   tavil->micb_load_low);
		}
		if (is_dapm && post_dapm_off && tavil->mbhc)
			blocking_notifier_call_chain(&tavil->mbhc->notifier,
@@ -10953,11 +10965,12 @@ static const struct snd_event_ops wcd934x_ssr_ops = {

static int tavil_probe(struct platform_device *pdev)
{
	int ret = 0;
	int ret = 0, len = 0;
	struct tavil_priv *tavil;
	struct clk *wcd_ext_clk;
	struct wcd9xxx_resmgr_v2 *resmgr;
	struct wcd9xxx_power_region *cdc_pwr;
	const __be32 *micb_prop;

	tavil = devm_kzalloc(&pdev->dev, sizeof(struct tavil_priv),
			    GFP_KERNEL);
@@ -11084,6 +11097,26 @@ static int tavil_probe(struct platform_device *pdev)
		ret = 0;
	}

	tavil->micb_load = NULL;

	if (of_get_property(tavil->wcd9xxx->dev->of_node,
			    "qcom,vreg-micb-supply", NULL)) {
		micb_prop = of_get_property(tavil->wcd9xxx->dev->of_node,
					    "qcom,cdc-vdd-mic-bias-current",
					    &len);
		if (!micb_prop || (len != (2 * sizeof(__be32)))) {
			tavil->micb_load_low = MICB_LOAD_DEFAULT;
			tavil->micb_load_high = MICB_LOAD_DEFAULT;
		} else {
			tavil->micb_load_low = be32_to_cpup(&micb_prop[0]);
			tavil->micb_load_high = be32_to_cpup(&micb_prop[1]);
		}
		tavil->micb_load = regulator_get(&pdev->dev, MICB_LOAD_PROP);
		if (IS_ERR(tavil->micb_load))
			dev_dbg(tavil->dev, "%s micb load get failed\n",
				__func__);
	}

	return ret;

err_cdc_reg:
@@ -11125,6 +11158,9 @@ static int tavil_remove(struct platform_device *pdev)
				count < WCD934X_CHILD_DEVICES_MAX; count++)
		platform_device_unregister(tavil->pdev_child_devices[count]);

	if (tavil->micb_load)
		regulator_put(tavil->micb_load);

	mutex_destroy(&tavil->micb_lock);
	mutex_destroy(&tavil->svs_mutex);
	mutex_destroy(&tavil->codec_mutex);