Message ID | 20201201121606.235982-1-linus.walleij@linaro.org |
---|---|
State | New |
Headers | show |
Series | [v2] usb: ohci-omap: Fix descriptor conversion | expand |
Hi, On Tue, Dec 01, 2020 at 01:16:06PM +0100, Linus Walleij wrote: > There were a bunch of issues with the patch converting the > OMAP1 OSK board to use descriptors for controlling the USB > host: > > - The chip label was incorrect > - The GPIO offset was off-by-one > - The code should use sleeping accessors > > This patch tries to fix all issues at the same time. > > Cc: Aaro Koskinen <aaro.koskinen@iki.fi> > Reported-by: Aaro Koskinen <aaro.koskinen@iki.fi> > Fixes: 15d157e87443 ("usb: ohci-omap: Convert to use GPIO descriptors") > Signed-off-by: Linus Walleij <linus.walleij@linaro.org> Tested-by: Aaro Koskinen <aaro.koskinen@iki.fi> Thanks, A. > --- > ChangeLog v1->v2: > - Also free the GPIO in the boardfile bootstrap code so that > the driver can later on properly grab it. > --- > arch/arm/mach-omap1/board-osk.c | 4 +++- > drivers/usb/host/ohci-omap.c | 4 ++-- > 2 files changed, 5 insertions(+), 3 deletions(-) > > diff --git a/arch/arm/mach-omap1/board-osk.c b/arch/arm/mach-omap1/board-osk.c > index 144b9caa935c..0a4c9b0b13b0 100644 > --- a/arch/arm/mach-omap1/board-osk.c > +++ b/arch/arm/mach-omap1/board-osk.c > @@ -203,6 +203,8 @@ static int osk_tps_setup(struct i2c_client *client, void *context) > */ > gpio_request(OSK_TPS_GPIO_USB_PWR_EN, "n_vbus_en"); > gpio_direction_output(OSK_TPS_GPIO_USB_PWR_EN, 1); > + /* Free the GPIO again as the driver will request it */ > + gpio_free(OSK_TPS_GPIO_USB_PWR_EN); > > /* Set GPIO 2 high so LED D3 is off by default */ > tps65010_set_gpio_out_value(GPIO2, HIGH); > @@ -288,7 +290,7 @@ static struct gpiod_lookup_table osk_usb_gpio_table = { > .dev_id = "ohci", > .table = { > /* Power GPIO on the I2C-attached TPS65010 */ > - GPIO_LOOKUP("i2c-tps65010", 1, "power", GPIO_ACTIVE_HIGH), > + GPIO_LOOKUP("tps65010", 0, "power", GPIO_ACTIVE_HIGH), > GPIO_LOOKUP(OMAP_GPIO_LABEL, 9, "overcurrent", > GPIO_ACTIVE_HIGH), > }, > diff --git a/drivers/usb/host/ohci-omap.c b/drivers/usb/host/ohci-omap.c > index 9ccdf2c216b5..6374501ba139 100644 > --- a/drivers/usb/host/ohci-omap.c > +++ b/drivers/usb/host/ohci-omap.c > @@ -91,14 +91,14 @@ static int omap_ohci_transceiver_power(struct ohci_omap_priv *priv, int on) > | ((1 << 5/*usb1*/) | (1 << 3/*usb2*/)), > INNOVATOR_FPGA_CAM_USB_CONTROL); > else if (priv->power) > - gpiod_set_value(priv->power, 0); > + gpiod_set_value_cansleep(priv->power, 0); > } else { > if (machine_is_omap_innovator() && cpu_is_omap1510()) > __raw_writeb(__raw_readb(INNOVATOR_FPGA_CAM_USB_CONTROL) > & ~((1 << 5/*usb1*/) | (1 << 3/*usb2*/)), > INNOVATOR_FPGA_CAM_USB_CONTROL); > else if (priv->power) > - gpiod_set_value(priv->power, 1); > + gpiod_set_value_cansleep(priv->power, 1); > } > > return 0; > -- > 2.26.2 >
diff --git a/arch/arm/mach-omap1/board-osk.c b/arch/arm/mach-omap1/board-osk.c index 144b9caa935c..0a4c9b0b13b0 100644 --- a/arch/arm/mach-omap1/board-osk.c +++ b/arch/arm/mach-omap1/board-osk.c @@ -203,6 +203,8 @@ static int osk_tps_setup(struct i2c_client *client, void *context) */ gpio_request(OSK_TPS_GPIO_USB_PWR_EN, "n_vbus_en"); gpio_direction_output(OSK_TPS_GPIO_USB_PWR_EN, 1); + /* Free the GPIO again as the driver will request it */ + gpio_free(OSK_TPS_GPIO_USB_PWR_EN); /* Set GPIO 2 high so LED D3 is off by default */ tps65010_set_gpio_out_value(GPIO2, HIGH); @@ -288,7 +290,7 @@ static struct gpiod_lookup_table osk_usb_gpio_table = { .dev_id = "ohci", .table = { /* Power GPIO on the I2C-attached TPS65010 */ - GPIO_LOOKUP("i2c-tps65010", 1, "power", GPIO_ACTIVE_HIGH), + GPIO_LOOKUP("tps65010", 0, "power", GPIO_ACTIVE_HIGH), GPIO_LOOKUP(OMAP_GPIO_LABEL, 9, "overcurrent", GPIO_ACTIVE_HIGH), }, diff --git a/drivers/usb/host/ohci-omap.c b/drivers/usb/host/ohci-omap.c index 9ccdf2c216b5..6374501ba139 100644 --- a/drivers/usb/host/ohci-omap.c +++ b/drivers/usb/host/ohci-omap.c @@ -91,14 +91,14 @@ static int omap_ohci_transceiver_power(struct ohci_omap_priv *priv, int on) | ((1 << 5/*usb1*/) | (1 << 3/*usb2*/)), INNOVATOR_FPGA_CAM_USB_CONTROL); else if (priv->power) - gpiod_set_value(priv->power, 0); + gpiod_set_value_cansleep(priv->power, 0); } else { if (machine_is_omap_innovator() && cpu_is_omap1510()) __raw_writeb(__raw_readb(INNOVATOR_FPGA_CAM_USB_CONTROL) & ~((1 << 5/*usb1*/) | (1 << 3/*usb2*/)), INNOVATOR_FPGA_CAM_USB_CONTROL); else if (priv->power) - gpiod_set_value(priv->power, 1); + gpiod_set_value_cansleep(priv->power, 1); } return 0;
There were a bunch of issues with the patch converting the OMAP1 OSK board to use descriptors for controlling the USB host: - The chip label was incorrect - The GPIO offset was off-by-one - The code should use sleeping accessors This patch tries to fix all issues at the same time. Cc: Aaro Koskinen <aaro.koskinen@iki.fi> Reported-by: Aaro Koskinen <aaro.koskinen@iki.fi> Fixes: 15d157e87443 ("usb: ohci-omap: Convert to use GPIO descriptors") Signed-off-by: Linus Walleij <linus.walleij@linaro.org> --- ChangeLog v1->v2: - Also free the GPIO in the boardfile bootstrap code so that the driver can later on properly grab it. --- arch/arm/mach-omap1/board-osk.c | 4 +++- drivers/usb/host/ohci-omap.c | 4 ++-- 2 files changed, 5 insertions(+), 3 deletions(-) -- 2.26.2