diff options
Diffstat (limited to 'drivers/gpu/drm/bridge/ti-sn65dsi86.c')
| -rw-r--r-- | drivers/gpu/drm/bridge/ti-sn65dsi86.c | 21 | 
1 files changed, 20 insertions, 1 deletions
diff --git a/drivers/gpu/drm/bridge/ti-sn65dsi86.c b/drivers/gpu/drm/bridge/ti-sn65dsi86.c index 4676cf2900df..c499a14d0b98 100644 --- a/drivers/gpu/drm/bridge/ti-sn65dsi86.c +++ b/drivers/gpu/drm/bridge/ti-sn65dsi86.c @@ -622,6 +622,24 @@ exit:  	return len;  } +static int ti_sn_aux_wait_hpd_asserted(struct drm_dp_aux *aux, unsigned long wait_us) +{ +	/* +	 * The HPD in this chip is a bit useless (See comment in +	 * ti_sn65dsi86_enable_comms) so if our driver is expected to wait +	 * for HPD, we just assume it's asserted after the wait_us delay. +	 * +	 * In case we are asked to wait forever (wait_us=0) take conservative +	 * 500ms delay. +	 */ +	if (wait_us == 0) +		wait_us = 500000; + +	usleep_range(wait_us, wait_us + 1000); + +	return 0; +} +  static int ti_sn_aux_probe(struct auxiliary_device *adev,  			   const struct auxiliary_device_id *id)  { @@ -631,6 +649,7 @@ static int ti_sn_aux_probe(struct auxiliary_device *adev,  	pdata->aux.name = "ti-sn65dsi86-aux";  	pdata->aux.dev = &adev->dev;  	pdata->aux.transfer = ti_sn_aux_transfer; +	pdata->aux.wait_hpd_asserted = ti_sn_aux_wait_hpd_asserted;  	drm_dp_aux_init(&pdata->aux);  	ret = devm_of_dp_aux_populate_ep_devices(&pdata->aux); @@ -1955,7 +1974,7 @@ static struct i2c_driver ti_sn65dsi86_driver = {  		.of_match_table = ti_sn65dsi86_match_table,  		.pm = &ti_sn65dsi86_pm_ops,  	}, -	.probe_new = ti_sn65dsi86_probe, +	.probe = ti_sn65dsi86_probe,  	.id_table = ti_sn65dsi86_id,  };  |