[PATCH] ARM/pxa/mfd/power/sound: Switch Tosa to GPIO descriptors
Linus Walleij
linus.walleij at linaro.org
Mon Jan 24 16:27:43 PST 2022
Hi Lee,
On Fri, Jul 16, 2021 at 9:51 AM Lee Jones <lee.jones at linaro.org> wrote:
Sorry for taking halfyears to get back to patches... cleanup tends
to get low prio. :/
Fixed most review comments.
> > +#define TOSA_GPIO_TG_ON 0
> > +#define TOSA_GPIO_L_MUTE 1
> > +#define TOSA_GPIO_BL_C20MA 3
> > +#define TOSA_GPIO_CARD_VCC_ON 4
> > +#define TOSA_GPIO_CHARGE_OFF 6
> > +#define TOSA_GPIO_CHARGE_OFF_JC 7
> > +#define TOSA_GPIO_BAT0_V_ON 9
> > +#define TOSA_GPIO_BAT1_V_ON 10
> > +#define TOSA_GPIO_BU_CHRG_ON 11
> > +#define TOSA_GPIO_BAT_SW_ON 12
> > +#define TOSA_GPIO_BAT0_TH_ON 14
> > +#define TOSA_GPIO_BAT1_TH_ON 15
>
> Okay, I have to ask - what are 5, 8 and 13?
Apparently unused, just picked from:
arch/arm/mach-pxa/include/mach/tosa.h
Put there in commit 8459c159f7de832eaf888398d2abf466c388dfa6
"[ARM] 3088/1: PXA: Add machine support for the Sharp SL-6000x series of PDAs"
Dirk who authored the commit is on CC so maybe he can say.
I suppose he has access to the board documentation.
(I couldn't find any.)
> > +static struct gpiod_lookup_table tosa_audio_gpio_lookup = {
> > + .dev_id = "tosa-audio",
> > + .table = {
> > + GPIO_LOOKUP(TOSA_GC_NAME, TOSA_GPIO_L_MUTE, NULL, GPIO_ACTIVE_HIGH),
> > + { },
> > + },
> > +};
>
> Are these structures going to be peppered all over the kernel now?
Yeah well for legacy systems, for the reasons given in
drivers/gpio/TODO
It's not millions of occurences, just hundreds.
$ git grep GPIO_LOOKUP|wc -l
507
> Maybe a helper can be added to make these single line entries one line
> each?
Hmmm I will try to sketch something out for v2!
> > + GPIO_LOOKUP(TOSA_GC_NAME, TOSA_GPIO_CHARGE_OFF,
> > + "main charge off", GPIO_ACTIVE_HIGH),
> > + GPIO_LOOKUP(TOSA_GC_NAME, TOSA_GPIO_CHARGE_OFF_JC,
> > + "jacket charge off", GPIO_ACTIVE_HIGH),
> > + GPIO_LOOKUP(TOSA_GC_NAME, TOSA_GPIO_BAT0_V_ON,
> > + "main battery", GPIO_ACTIVE_HIGH),
> > + GPIO_LOOKUP(TOSA_GC_NAME, TOSA_GPIO_BAT1_V_ON,
> > + "jacket battery", GPIO_ACTIVE_HIGH),
> > + GPIO_LOOKUP(TOSA_GC_NAME, TOSA_GPIO_BU_CHRG_ON,
> > + "backup battery", GPIO_ACTIVE_HIGH),
> > + /* BAT1 and BAT0 thermistors appear to be swapped */
> > + GPIO_LOOKUP(TOSA_GC_NAME, TOSA_GPIO_BAT1_TH_ON,
> > + "main battery temp", GPIO_ACTIVE_HIGH),
> > + GPIO_LOOKUP(TOSA_GC_NAME, TOSA_GPIO_BAT0_TH_ON,
> > + "jacket battery temp", GPIO_ACTIVE_HIGH),
> > + GPIO_LOOKUP(TOSA_GC_NAME, TOSA_GPIO_BAT_SW_ON,
> > + "battery switch", GPIO_ACTIVE_HIGH),
>
> These are soooo close to being <100 chars.
>
> What does Checkpatch currently warn on? Is it 100 or 120?
100...
WARNING: line length of 104 exceeds 100 columns
#283: FILE: drivers/mfd/tc6393xb.c:532:
+ GPIO_LOOKUP("tc6393xb", TOSA_GPIO_CHARGE_OFF_JC, "jacket
charge off", GPIO_ACTIVE_HIGH),
WARNING: line length of 101 exceeds 100 columns
#288: FILE: drivers/mfd/tc6393xb.c:537:
+ GPIO_LOOKUP("tc6393xb", TOSA_GPIO_BAT1_TH_ON, "main battery
temp", GPIO_ACTIVE_HIGH),
(...)
If you want to, we can ignore it of course. Just tell me what to do.
> > + gc->ngpio = 16;
> > + gc->set = tc6393xb_gpio_set;
> > + gc->get = tc6393xb_gpio_get;
> > + gc->direction_input = tc6393xb_gpio_direction_input;
> > + gc->direction_output = tc6393xb_gpio_direction_output;
> > +
> > + ret = devm_gpiochip_add_data(dev, gc, tc6393xb);
> > + if (ret)
> > + return dev_err_probe(dev, ret, "failed to add GPIO chip\n");
> > +
> > + /* Register descriptor look-ups for consumers */
> > + gpiod_add_lookup_tables(tc6393xb_gpio_lookups, ARRAY_SIZE(tc6393xb_gpio_lookups));
> > +
> > + /* Request some of our own GPIOs */
> > + tc6393xb->vcc_on = gpiochip_request_own_desc(gc, TOSA_GPIO_CARD_VCC_ON, "VCC ON",
> > + GPIO_ACTIVE_HIGH, GPIOD_OUT_HIGH);
> > + if (IS_ERR(tc6393xb->vcc_on))
> > + return dev_err_probe(dev, PTR_ERR(tc6393xb->vcc_on),
> > + "failed to request VCC ON GPIO\n");
> > +
>
> So much more code to do the same thing?
Not quite the same thing.
The old code does not report any errors from gpiochip_add_data()
(hence all the dev_err_probe()).
The added gpiochip_request_own_desc() call moves the similar code out
of arch/arm
to here where the gpiochip is and is actually using fewer lines now.
(See higher up the patch.)
> > + tc6393xb->dev = &dev->dev;
>
> That confused me at first.
>
> Please consider changing the platform_device to pdev (separately).
OK I can follow up with that once this looks like we want it,
this problem is a bit all over the kernel actually, especially
in legacy code from the early 2000s.
Have a look at v2 and see what you think!
Yours,
Linus Walleij
More information about the linux-arm-kernel
mailing list