On Tue, Apr 26, 2022 at 12:34:13PM +0000, Daniels Umanovskis wrote: > According to the datasheet, the hub should be operational 500us after > the reset has been deasserted. Some individual circuits have been > observed not to reset within the specified 500us and require a longer > wait for subsequent configuration to succeed. > > Signed-off-by: Daniels Umanovskis <du@xxxxxxxxxx> LGTM. Reviewed-by: Richard Leitner <richard.leitner@xxxxxxxxxxx> > --- > drivers/usb/misc/usb251xb.c | 6 +++++- > 1 file changed, 5 insertions(+), 1 deletion(-) > > diff --git a/drivers/usb/misc/usb251xb.c b/drivers/usb/misc/usb251xb.c > index 04c4e3fed094..e287e241ef96 100644 > --- a/drivers/usb/misc/usb251xb.c > +++ b/drivers/usb/misc/usb251xb.c > @@ -115,6 +115,7 @@ struct usb251xb { > struct regulator *vdd; > u8 skip_config; > struct gpio_desc *gpio_reset; > + u32 reset_delay_us; > u16 vendor_id; > u16 product_id; > u16 device_id; > @@ -278,7 +279,7 @@ static void usb251xb_reset(struct usb251xb *hub) > gpiod_set_value_cansleep(hub->gpio_reset, 0); > > /* wait for hub recovery/stabilization */ > - usleep_range(500, 750); /* >=500us after RESET_N deasserted */ > + fsleep(hub->reset_delay_us); > > i2c_unlock_bus(hub->i2c->adapter, I2C_LOCK_SEGMENT); > } > @@ -424,6 +425,9 @@ static int usb251xb_get_ofdata(struct usb251xb *hub, > return err; > } > > + if (of_property_read_u32(np, "reset-delay-us", &hub->reset_delay_us)) > + hub->reset_delay_us = 500; > + > if (of_property_read_u16_array(np, "vendor-id", &hub->vendor_id, 1)) > hub->vendor_id = USB251XB_DEF_VENDOR_ID; > > -- > 2.30.2 >