Message ID | 20231001-pxa-gpio-v4-5-0f3b975e6ed5@skole.hr |
---|---|
State | Superseded |
Headers | show |
Series | None | expand |
On Sun, Oct 1, 2023 at 4:13 PM Duje Mihanović <duje.mihanovic@skole.hr> wrote: > > Gumstix still uses the legacy GPIO interface for resetting the Bluetooth > device. > > Convert it to use the GPIO descriptor interface. > > Reviewed-by: Linus Walleij <linus.walleij@linaro.org> > Signed-off-by: Duje Mihanović <duje.mihanovic@skole.hr> > --- > arch/arm/mach-pxa/gumstix.c | 24 +++++++++++++----------- > 1 file changed, 13 insertions(+), 11 deletions(-) > > diff --git a/arch/arm/mach-pxa/gumstix.c b/arch/arm/mach-pxa/gumstix.c > index c9f0f62187bd..14e1b9274d7a 100644 > --- a/arch/arm/mach-pxa/gumstix.c > +++ b/arch/arm/mach-pxa/gumstix.c > @@ -20,8 +20,8 @@ > #include <linux/delay.h> > #include <linux/mtd/mtd.h> > #include <linux/mtd/partitions.h> > +#include <linux/gpio/consumer.h> > #include <linux/gpio/machine.h> > -#include <linux/gpio.h> > #include <linux/err.h> > #include <linux/clk.h> > > @@ -129,6 +129,9 @@ static void gumstix_udc_init(void) > #endif > > #ifdef CONFIG_BT > +GPIO_LOOKUP_SINGLE(gumstix_bt_gpio_table, "pxa2xx-uart.1", "pxa-gpio", > + GPIO_GUMSTIX_BTRESET, "BTRST", GPIO_ACTIVE_LOW); > + > /* Normally, the bootloader would have enabled this 32kHz clock but many > ** boards still have u-boot 1.1.4 so we check if it has been turned on and > ** if not, we turn it on with a warning message. */ > @@ -153,24 +156,23 @@ static void gumstix_setup_bt_clock(void) > > static void __init gumstix_bluetooth_init(void) > { > - int err; > + struct gpio_desc *desc; > + > + gpiod_add_lookup_table(&gumstix_bt_gpio_table); > > gumstix_setup_bt_clock(); > > - err = gpio_request(GPIO_GUMSTIX_BTRESET, "BTRST"); > - if (err) { > + desc = gpiod_get(&pxa_device_btuart.dev, "BTRST", GPIOD_OUT_HIGH); > + if (IS_ERR(desc)) { > pr_err("gumstix: failed request gpio for bluetooth reset\n"); > return; > } > > - err = gpio_direction_output(GPIO_GUMSTIX_BTRESET, 1); > - if (err) { > - pr_err("gumstix: can't reset bluetooth\n"); > - return; > - } > - gpio_set_value(GPIO_GUMSTIX_BTRESET, 0); > + gpiod_set_value(desc, 0); > udelay(100); > - gpio_set_value(GPIO_GUMSTIX_BTRESET, 1); > + gpiod_set_value(desc, 1); > + > + gpiod_put(desc); This changes the way this code works. You release the descriptor here, it returns to the driver and can be re-requested by someone else. Its value is also not guaranteed to remain as "active". Is this what you want? Bart > } > #else > static void gumstix_bluetooth_init(void) > > -- > 2.42.0 > >
diff --git a/arch/arm/mach-pxa/gumstix.c b/arch/arm/mach-pxa/gumstix.c index c9f0f62187bd..14e1b9274d7a 100644 --- a/arch/arm/mach-pxa/gumstix.c +++ b/arch/arm/mach-pxa/gumstix.c @@ -20,8 +20,8 @@ #include <linux/delay.h> #include <linux/mtd/mtd.h> #include <linux/mtd/partitions.h> +#include <linux/gpio/consumer.h> #include <linux/gpio/machine.h> -#include <linux/gpio.h> #include <linux/err.h> #include <linux/clk.h> @@ -129,6 +129,9 @@ static void gumstix_udc_init(void) #endif #ifdef CONFIG_BT +GPIO_LOOKUP_SINGLE(gumstix_bt_gpio_table, "pxa2xx-uart.1", "pxa-gpio", + GPIO_GUMSTIX_BTRESET, "BTRST", GPIO_ACTIVE_LOW); + /* Normally, the bootloader would have enabled this 32kHz clock but many ** boards still have u-boot 1.1.4 so we check if it has been turned on and ** if not, we turn it on with a warning message. */ @@ -153,24 +156,23 @@ static void gumstix_setup_bt_clock(void) static void __init gumstix_bluetooth_init(void) { - int err; + struct gpio_desc *desc; + + gpiod_add_lookup_table(&gumstix_bt_gpio_table); gumstix_setup_bt_clock(); - err = gpio_request(GPIO_GUMSTIX_BTRESET, "BTRST"); - if (err) { + desc = gpiod_get(&pxa_device_btuart.dev, "BTRST", GPIOD_OUT_HIGH); + if (IS_ERR(desc)) { pr_err("gumstix: failed request gpio for bluetooth reset\n"); return; } - err = gpio_direction_output(GPIO_GUMSTIX_BTRESET, 1); - if (err) { - pr_err("gumstix: can't reset bluetooth\n"); - return; - } - gpio_set_value(GPIO_GUMSTIX_BTRESET, 0); + gpiod_set_value(desc, 0); udelay(100); - gpio_set_value(GPIO_GUMSTIX_BTRESET, 1); + gpiod_set_value(desc, 1); + + gpiod_put(desc); } #else static void gumstix_bluetooth_init(void)