| From 158e800e0fde91014812f5cdfb92ce812e3a33b4 Mon Sep 17 00:00:00 2001 |
| From: Annaliese McDermond <nh6z@nh6z.net> |
| Date: Mon, 29 Mar 2021 20:10:49 +0000 |
| Subject: sc16is7xx: Defer probe if device read fails |
| |
| From: Annaliese McDermond <nh6z@nh6z.net> |
| |
| commit 158e800e0fde91014812f5cdfb92ce812e3a33b4 upstream. |
| |
| A test was added to the probe function to ensure the device was |
| actually connected and working before successfully completing a |
| probe. If the device was actually there, but the I2C bus was not |
| ready yet for whatever reason, the probe fails permanently. |
| |
| Change the probe so that we defer the probe on a regmap read |
| failure so that we try the probe again when the dependent drivers |
| are potentially loaded. This should not affect the case where the |
| device truly isn't present because the probe will never successfully |
| complete. |
| |
| Fixes: 2aa916e67db3 ("sc16is7xx: Read the LSR register for basic device presence check") |
| Cc: stable@vger.kernel.org |
| Signed-off-by: Annaliese McDermond <nh6z@nh6z.net> |
| Link: https://lore.kernel.org/r/010101787f9c3fd8-c1815c00-2d6b-4c85-a96a-a13e68597fda-000000@us-west-2.amazonses.com |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| drivers/tty/serial/sc16is7xx.c | 2 +- |
| 1 file changed, 1 insertion(+), 1 deletion(-) |
| |
| --- a/drivers/tty/serial/sc16is7xx.c |
| +++ b/drivers/tty/serial/sc16is7xx.c |
| @@ -1196,7 +1196,7 @@ static int sc16is7xx_probe(struct device |
| ret = regmap_read(regmap, |
| SC16IS7XX_LSR_REG << SC16IS7XX_REG_SHIFT, &val); |
| if (ret < 0) |
| - return ret; |
| + return -EPROBE_DEFER; |
| |
| /* Alloc port structure */ |
| s = devm_kzalloc(dev, struct_size(s, p, devtype->nr_uart), GFP_KERNEL); |