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

Commit 84a4cb84 authored by liuhaituo's avatar liuhaituo Committed by hecaiqiang
Browse files

Optimize the analog headphones issue

Change-Id: I829cee12964c67d17aa1fe85e58b25b3cdbb9500
(cherry picked from commit 042b3dd17604dfdf6178548f78d8a354241e1157)
parent 070d776e
Loading
Loading
Loading
Loading
+34 −3
Original line number Diff line number Diff line
@@ -70,16 +70,47 @@ static const struct fsa4480_reg_val fsa_reg_i2c_defaults[] = {
static void fsa4480_usbc_update_settings(struct fsa4480_priv *fsa_priv,
		u32 switch_control, u32 switch_enable)
{
	int ret = 0;
	int retry = 3;
	int i = 0;

	if (!fsa_priv->regmap) {
		dev_err(fsa_priv->dev, "%s: regmap invalid\n", __func__);
		return;
	}

	regmap_write(fsa_priv->regmap, FSA4480_SWITCH_SETTINGS, 0x80);
	regmap_write(fsa_priv->regmap, FSA4480_SWITCH_CONTROL, switch_control);
	for (i = 0; i < retry; i++) {
		ret = regmap_write(fsa_priv->regmap, FSA4480_SWITCH_SETTINGS,
				0x80);
		if (!ret)
			break;
		pr_info("%s: ret = %d, retry %d write FSA4480_SWITCH_SETTINGS1\n",
					__func__, ret, i);
		usleep_range(3000, 3100);
	}

	for (i = 0; i < retry; i++) {
		ret = regmap_write(fsa_priv->regmap, FSA4480_SWITCH_CONTROL,
				switch_control);
		if (!ret)
			break;
		pr_info("%s: ret = %d, retry %d write FSA4480_SWITCH_CONTROL\n",
					__func__, ret, i);
		usleep_range(3000, 3100);
	}

	/* FSA4480 chip hardware requirement */
	usleep_range(50, 55);
	regmap_write(fsa_priv->regmap, FSA4480_SWITCH_SETTINGS, switch_enable);
	for (i = 0; i < retry; i++) {
		ret = regmap_write(fsa_priv->regmap, FSA4480_SWITCH_SETTINGS,
				switch_enable);
		if (!ret)
			break;
		pr_info("%s: ret = %d, retry %d write FSA4480_SWITCH_SETTINGS2\n",
					__func__, ret, i);
		usleep_range(3000, 3100);
	}

}

static int fsa4480_usbc_event_changed(struct notifier_block *nb,