On Thu, Nov 24, 2022 at 11:53 AM Hans de Goede <hdegoede@xxxxxxxxxx> wrote: > > On an Advantech MICA-071 tablet, with a builtin barcode scanner connected > to ttyS0, the following message is shown on suspend: > > serial 00:02: disabled > > And after suspend/resume trying to use the barcode scanner / ttyS0 shows: > > serial 00:02: LSR safety check engaged! > > Indicating that the UARTs io-ports are no longer reachable. > > This is caused by __pnp_bus_suspend() calling pnp_stop_dev() on the "00:02" > pnp device on suspend (this outputs the disabled message). > > The problem is that pnp_can_write() returns false for the "00:02" pnp > device, so after disabling it (disabling its decoding of IO addresses) > during suspend, it cannot be re-enabled. > > Add a pnp_can_write() check to the suspend path and only disable devices > which can actually be re-enabled on resume. > > This fixes the Advantech MICA-071's ttyS0 no longer working after > a suspend/resume. > > Signed-off-by: Hans de Goede <hdegoede@xxxxxxxxxx> > --- > drivers/pnp/driver.c | 3 ++- > 1 file changed, 2 insertions(+), 1 deletion(-) > > diff --git a/drivers/pnp/driver.c b/drivers/pnp/driver.c > index c02e7bf643a6..46c534f6b1c9 100644 > --- a/drivers/pnp/driver.c > +++ b/drivers/pnp/driver.c > @@ -182,7 +182,8 @@ static int __pnp_bus_suspend(struct device *dev, pm_message_t state) > return error; > } > > - if (pnp_can_disable(pnp_dev)) { > + /* can_write is necessary to be able to re-start the device on resume */ > + if (pnp_can_disable(pnp_dev) && pnp_can_write(pnp_dev)) { > error = pnp_stop_dev(pnp_dev); > if (error) > return error; > -- Applied as 6.2 material, thanks!