On Wed, Oct 9, 2013 at 12:58 AM, Mika Westerberg <mika.westerberg@xxxxxxxxxxxxxxx> wrote: > On Tue, Oct 08, 2013 at 09:24:50AM -0700, Alexandre Courbot wrote: >> On Tue, Oct 8, 2013 at 1:45 AM, Mika Westerberg >> <mika.westerberg@xxxxxxxxxxxxxxx> wrote: >> > On Mon, Oct 07, 2013 at 09:54:13PM -0700, Alexandre Courbot wrote: >> >> > +struct gpio_desc *acpi_get_gpiod(char *path, int pin) >> >> > { >> >> > struct gpio_chip *chip; >> >> > acpi_handle handle; >> >> > @@ -48,18 +49,15 @@ int acpi_get_gpio(char *path, int pin) >> >> > >> >> > status = acpi_get_handle(NULL, path, &handle); >> >> > if (ACPI_FAILURE(status)) >> >> > - return -ENODEV; >> >> > + return ERR_PTR(-ENODEV); >> >> > >> >> > chip = gpiochip_find(handle, acpi_gpiochip_find); >> >> > if (!chip) >> >> > - return -ENODEV; >> >> > + return ERR_PTR(-ENODEV); >> >> > >> >> > - if (!gpio_is_valid(chip->base + pin)) >> >> > - return -EINVAL; >> >> > - >> >> > - return chip->base + pin; >> >> > + return gpio_to_desc(chip->base + pin); >> >> >> >> I think you want to avoid using gpio_to_desc(). It is just a >> >> convenience function provided to ease the transition for consumers >> >> that still need to rely on GPIO numbers for some reason. The same >> >> applies to desc_to_gpio(), although the usage you are making of it >> >> (implemented fallbacks for the integer space) is the one that is >> >> intended. >> >> >> >> The last line could be changed to "return &chip->desc[pin];" after >> >> checking that 0 <= pin <= chip->ngpio. >> > >> > I tried that but it doesn't compile anymore :-( >> > >> > drivers/gpio/gpiolib-acpi.c: In function ‘acpi_get_gpiod’: >> > drivers/gpio/gpiolib-acpi.c:61:2: error: invalid use of undefined type ‘struct gpio_desc’ >> > drivers/gpio/gpiolib-acpi.c:61:20: error: dereferencing pointer to incomplete type >> >> Ah right, there is no way to know the size of a gpio_desc from here... >> Maybe I should make a gpiochip_get_desc(index) function accessible to >> drivers only that takes care of this. Another possibility would be to >> move this function into gpiolib.c but there are probably too many >> dependencies with ACPI for that. >> >> In the long term I would like to see gpio_to_desc()/desc_to_gpio() >> disappear from the consumer interface as they allow unsafe use of GPIO >> descriptors. >> >> > The DT version also uses gpio_to_desc(). >> >> That seems to speak in favor of that gpiochip_get_desc() function I >> talked about earlier. > > OK, I can convert the ACPI code to use that once such function exists. I > the meanwhile, can I use gpio_to_desc() in the next revision of the > patches? Sure, please do so - anyway that's the only way you have at the moment. I will add gpiochip_get_desc() to v2 of gpiod and we'll convert your code either before or after it is merged, depending on our timing. -- To unsubscribe from this list: send the line "unsubscribe linux-acpi" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html