diff options
author | Dmitry Torokhov <dmitry.torokhov@gmail.com> | 2022-12-04 15:59:29 -0800 |
---|---|---|
committer | Arnd Bergmann <arnd@arndb.de> | 2022-12-05 18:19:34 +0100 |
commit | 66310b5a0fc1ccdce9a3a5e6c6a12c08e4e0b7b1 (patch) | |
tree | 7254b2bdc7937c3c56a8fd111530070e553fe155 /drivers/usb | |
parent | e348b4014c31041e13ff370669ba3348c4d385e3 (diff) | |
download | linux-66310b5a0fc1ccdce9a3a5e6c6a12c08e4e0b7b1.tar.gz linux-66310b5a0fc1ccdce9a3a5e6c6a12c08e4e0b7b1.tar.bz2 linux-66310b5a0fc1ccdce9a3a5e6c6a12c08e4e0b7b1.zip |
soc: fsl: qe: request pins non-exclusively
Commit 84582f9ed090 ("soc: fsl: qe: Avoid using gpio_to_desc()") changed
qe_pin_request() to request and hold GPIO corresponding to a given pin.
Unfortunately this does not work, as fhci-hcd requests these GPIOs
first, befor calling qe_pin_request() (see
drivers/usb/host/fhci-hcd.c::of_fhci_probe()).
To fix it change qe_pin_request() to request GPIOs non-exclusively, and
free them once the code determines GPIO controller and offset for each
GPIO/pin.
Also reaching deep into gpiolib implementation is not the best idea. We
should either export gpio_chip_hwgpio() or keep converting to the global
gpio numbers space until we fix the driver to implement proper pin
control.
Fixes: 84582f9ed090 ("soc: fsl: qe: Avoid using gpio_to_desc()")
Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
Reviewed-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Link: https://lore.kernel.org/r/Y400YXnWBdz1e/L5@google.com
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Diffstat (limited to 'drivers/usb')
-rw-r--r-- | drivers/usb/host/fhci-hcd.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/drivers/usb/host/fhci-hcd.c b/drivers/usb/host/fhci-hcd.c index 95a44462bed0..1f666804fa91 100644 --- a/drivers/usb/host/fhci-hcd.c +++ b/drivers/usb/host/fhci-hcd.c @@ -651,7 +651,7 @@ static int of_fhci_probe(struct platform_device *ofdev) } for (j = 0; j < NUM_PINS; j++) { - fhci->pins[j] = qe_pin_request(node, j); + fhci->pins[j] = qe_pin_request(dev, j); if (IS_ERR(fhci->pins[j])) { ret = PTR_ERR(fhci->pins[j]); dev_err(dev, "can't get pin %d: %d\n", j, ret); |