mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-07 12:25:00 -04:00
fsa4480: Resolve euro usb analog headset detect issue after PDR
Euro headset is sometimes detected as headphone post PDR. This is due to race condition between powering up of PGA and cross connection detection due to which cross conn detection is not successful resulting in usb analog headset being detected as headphone post PDR. Save switch_control value before PDR and apply same value during fsa reg notifier after PDR so that euro side does not detect as cross conn post PDR to resolve issue. Change-Id: I4af17d83a8e4a55185421b370162d8e7a5d5b91f Signed-off-by: Vatsal Bucha <vbucha@codeaurora.org>
This commit is contained in:
parent
58329ca148
commit
1ca159a38c
1 changed files with 9 additions and 7 deletions
|
|
@ -40,6 +40,7 @@ struct fsa4480_priv {
|
|||
struct blocking_notifier_head fsa4480_notifier;
|
||||
struct mutex notification_lock;
|
||||
u32 use_powersupply;
|
||||
int switch_control;
|
||||
};
|
||||
|
||||
struct fsa4480_reg_val {
|
||||
|
|
@ -310,7 +311,8 @@ int fsa4480_reg_notifier(struct notifier_block *nb,
|
|||
dev_dbg(fsa_priv->dev, "%s: verify if USB adapter is already inserted\n",
|
||||
__func__);
|
||||
rc = fsa4480_usbc_analog_setup_switches(fsa_priv);
|
||||
|
||||
fsa4480_usbc_update_settings(fsa_priv, fsa_priv->switch_control,
|
||||
0x9F);
|
||||
return rc;
|
||||
}
|
||||
EXPORT_SYMBOL(fsa4480_reg_notifier);
|
||||
|
|
@ -373,7 +375,6 @@ static int fsa4480_validate_display_port_settings(struct fsa4480_priv *fsa_priv)
|
|||
int fsa4480_switch_event(struct device_node *node,
|
||||
enum fsa_function event)
|
||||
{
|
||||
int switch_control = 0;
|
||||
struct i2c_client *client = of_find_i2c_device_by_node(node);
|
||||
struct fsa4480_priv *fsa_priv;
|
||||
|
||||
|
|
@ -389,12 +390,13 @@ int fsa4480_switch_event(struct device_node *node,
|
|||
switch (event) {
|
||||
case FSA_MIC_GND_SWAP:
|
||||
regmap_read(fsa_priv->regmap, FSA4480_SWITCH_CONTROL,
|
||||
&switch_control);
|
||||
if ((switch_control & 0x07) == 0x07)
|
||||
switch_control = 0x0;
|
||||
&fsa_priv->switch_control);
|
||||
if ((fsa_priv->switch_control & 0x07) == 0x07)
|
||||
fsa_priv->switch_control = 0x0;
|
||||
else
|
||||
switch_control = 0x7;
|
||||
fsa4480_usbc_update_settings(fsa_priv, switch_control, 0x9F);
|
||||
fsa_priv->switch_control = 0x7;
|
||||
fsa4480_usbc_update_settings(fsa_priv, fsa_priv->switch_control,
|
||||
0x9F);
|
||||
break;
|
||||
case FSA_USBC_ORIENTATION_CC1:
|
||||
fsa4480_usbc_update_settings(fsa_priv, 0x18, 0xF8);
|
||||
|
|
|
|||
Loading…
Reference in a new issue