mirror of
https://github.com/followmsi/android_kernel_google_msm.git
synced 2024-11-06 23:17:41 +00:00
slimport: anx7808: Improve the cable detection
The device might fall in abnormal state in slimport with power on. The slimport couldn't detect the cable correctly at that time. We make a sure that the slimport is in power off before turning it on to avoid that issue. Change-Id: I119f17e3767221582d1d4330fdfa913552b84503
This commit is contained in:
parent
11f42acd0f
commit
e29e266b40
1 changed files with 25 additions and 23 deletions
|
@ -119,11 +119,32 @@ int slimport_read_edid_block(int block, uint8_t *edid_buf)
|
|||
}
|
||||
EXPORT_SYMBOL(slimport_read_edid_block);
|
||||
|
||||
static void sp_tx_power_down_and_init(void)
|
||||
{
|
||||
sp_tx_vbus_powerdown();
|
||||
sp_tx_power_down(SP_TX_PWR_REG);
|
||||
sp_tx_power_down(SP_TX_PWR_TOTAL);
|
||||
sp_tx_hardware_powerdown();
|
||||
sp_tx_pd_mode = 1;
|
||||
sp_tx_link_config_done = 0;
|
||||
sp_tx_hw_lt_enable = 0;
|
||||
sp_tx_hw_lt_done = 0;
|
||||
sp_tx_rx_type = RX_NULL;
|
||||
sp_tx_rx_type_backup = RX_NULL;
|
||||
sp_tx_set_sys_state(STATE_CABLE_PLUG);
|
||||
}
|
||||
|
||||
static void slimport_cable_plug_proc(struct anx7808_data *anx7808)
|
||||
{
|
||||
struct anx7808_platform_data *pdata = anx7808->pdata;
|
||||
|
||||
if (gpio_get_value_cansleep(pdata->gpio_cbl_det)) {
|
||||
/* Previously, if sp tx is turned on, turn it off to
|
||||
* avoid the cable detection erorr.
|
||||
*/
|
||||
if (!sp_tx_pd_mode)
|
||||
sp_tx_power_down_and_init();
|
||||
/* debounce time for avoiding glitch */
|
||||
msleep(50);
|
||||
if (gpio_get_value_cansleep(pdata->gpio_cbl_det)) {
|
||||
if (sp_tx_pd_mode) {
|
||||
|
@ -137,17 +158,7 @@ static void slimport_cable_plug_proc(struct anx7808_data *anx7808)
|
|||
msleep(200);
|
||||
if (!sp_tx_get_cable_type()) {
|
||||
pr_err("%s:AUX ERR\n", __func__);
|
||||
sp_tx_vbus_powerdown();
|
||||
sp_tx_power_down(SP_TX_PWR_REG);
|
||||
sp_tx_power_down(SP_TX_PWR_TOTAL);
|
||||
sp_tx_hardware_powerdown();
|
||||
sp_tx_pd_mode = 1;
|
||||
sp_tx_link_config_done = 0;
|
||||
sp_tx_hw_lt_enable = 0;
|
||||
sp_tx_hw_lt_done = 0;
|
||||
sp_tx_rx_type = RX_NULL;
|
||||
sp_tx_rx_type_backup = RX_NULL;
|
||||
sp_tx_set_sys_state(STATE_CABLE_PLUG);
|
||||
sp_tx_power_down_and_init();
|
||||
return;
|
||||
}
|
||||
sp_tx_rx_type_backup = sp_tx_rx_type;
|
||||
|
@ -172,18 +183,9 @@ static void slimport_cable_plug_proc(struct anx7808_data *anx7808)
|
|||
break;
|
||||
}
|
||||
}
|
||||
} else if (sp_tx_pd_mode == 0) {
|
||||
sp_tx_vbus_powerdown();
|
||||
sp_tx_power_down(SP_TX_PWR_REG);
|
||||
sp_tx_power_down(SP_TX_PWR_TOTAL);
|
||||
sp_tx_hardware_powerdown();
|
||||
sp_tx_pd_mode = 1;
|
||||
sp_tx_link_config_done = 0;
|
||||
sp_tx_hw_lt_enable = 0;
|
||||
sp_tx_hw_lt_done = 0;
|
||||
sp_tx_rx_type = RX_NULL;
|
||||
sp_tx_rx_type_backup = RX_NULL;
|
||||
sp_tx_set_sys_state(STATE_CABLE_PLUG);
|
||||
} else { /* dettach cable */
|
||||
if (sp_tx_pd_mode == 0)
|
||||
sp_tx_power_down_and_init();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue