mirror of
				https://github.com/Ysurac/openmptcprouter.git
				synced 2025-03-09 15:40:20 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			37 lines
		
	
	
	
		
			1.6 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
			
		
		
	
	
			37 lines
		
	
	
	
		
			1.6 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
| From 963dce3a295ba89718b20134cb7a9d4ef810cb18 Mon Sep 17 00:00:00 2001
 | |
| From: Nick Hollinghurst <nick.hollinghurst@raspberrypi.org>
 | |
| Date: Wed, 1 Dec 2021 19:43:08 +0000
 | |
| Subject: [PATCH] drm/panel/raspberrypi-touchscreen: Insert more delays.
 | |
| 
 | |
| This avoids failures in cases where the panel is enabled
 | |
| or re-probed very soon after being disabled or probed.
 | |
| These can occur because the Atmel device can mis-behave
 | |
| over I2C for a few ms after any write to the POWERON register.
 | |
| ---
 | |
|  drivers/gpu/drm/panel/panel-raspberrypi-touchscreen.c | 8 ++++++++
 | |
|  1 file changed, 8 insertions(+)
 | |
| 
 | |
| --- a/drivers/gpu/drm/panel/panel-raspberrypi-touchscreen.c
 | |
| +++ b/drivers/gpu/drm/panel/panel-raspberrypi-touchscreen.c
 | |
| @@ -299,6 +299,13 @@ static int rpi_touchscreen_prepare(struc
 | |
|  	struct rpi_touchscreen *ts = panel_to_ts(panel);
 | |
|  	int i, data;
 | |
|  
 | |
| +	/*
 | |
| +	 * Power up the Toshiba bridge. The Atmel device can misbehave
 | |
| +	 * over I2C for a few ms after writes to REG_POWERON (including the
 | |
| +	 * write in rpi_touchscreen_disable()), so sleep before and after.
 | |
| +	 * Also to ensure that the bridge has been off for at least 100ms.
 | |
| +	 */
 | |
| +	msleep(100);
 | |
|  	rpi_touchscreen_i2c_write(ts, REG_POWERON, 1);
 | |
|  	usleep_range(20000, 25000);
 | |
|  	/* Wait for nPWRDWN to go low to indicate poweron is done. */
 | |
| @@ -431,6 +438,7 @@ static int rpi_touchscreen_probe(struct
 | |
|  
 | |
|  	/* Turn off at boot, so we can cleanly sequence powering on. */
 | |
|  	rpi_touchscreen_i2c_write(ts, REG_POWERON, 0);
 | |
| +	usleep_range(20000, 25000);
 | |
|  
 | |
|  	/* Look up the DSI host.  It needs to probe before we do. */
 | |
|  	endpoint = of_graph_get_next_endpoint(dev->of_node, NULL);
 |