[PATCH 1/1][SRU][B][D][E][F] UBUNTU: SAUCE: platform/x86: dell-uart-backlight: add retry for get scalar status

AceLan Kao acelan.kao at canonical.com
Wed Jan 8 07:59:45 UTC 2020


BugLink: https://bugs.launchpad.net/bugs/1858761

Found on new platforms that UART require more than 1 second to respond
commands in the first 10 seconds after booted.
dell_uart_get_scalar_status() is the first command we send to scalar and
this command should be more reliable than other commands, and make sure
we got correct response from scalar. So, add retry and increase the read
timeout to 2 seconds.

Signed-off-by: AceLan Kao <acelan.kao at canonical.com>
---
 drivers/platform/x86/dell-uart-backlight.c | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

diff --git a/drivers/platform/x86/dell-uart-backlight.c b/drivers/platform/x86/dell-uart-backlight.c
index 90b28865896a..76e9a60a9388 100644
--- a/drivers/platform/x86/dell-uart-backlight.c
+++ b/drivers/platform/x86/dell-uart-backlight.c
@@ -318,7 +318,7 @@ static int dell_uart_get_scalar_status(struct dell_uart_backlight *dell_pdata)
 	struct dell_uart_bl_cmd *bl_cmd = &uart_cmd[DELL_UART_GET_SCALAR];
 	struct uart_8250_port *uart = serial8250_get_port(dell_pdata->line);
 	int rx_len;
-	int status = 0;
+	int status = 0, retry = 20;
 
 	dell_uart_dump_cmd(__func__, "tx: ", bl_cmd->cmd, bl_cmd->tx_len);
 
@@ -328,7 +328,11 @@ static int dell_uart_get_scalar_status(struct dell_uart_backlight *dell_pdata)
 	}
 
 	dell_uart_write(uart, bl_cmd->cmd, bl_cmd->tx_len);
-	rx_len = dell_uart_read(uart, bl_cmd->ret, bl_cmd->rx_len);
+	do {
+		rx_len = dell_uart_read(uart, bl_cmd->ret, bl_cmd->rx_len);
+		if (rx_len == 0)
+			msleep(100);
+	} while (rx_len == 0 && --retry);
 
 	mutex_unlock(&dell_pdata->brightness_mutex);
 
-- 
2.17.1




More information about the kernel-team mailing list