Felipe Balbi <ba...@ti.com> writes:

>>         nop->gpiod_reset = devm_gpiod_get_optional(dev, "reset");
>>         if (gpiod_is_active_low(nop->gpiod_reset))
>>             gpiod_direction_output(nop->gpiod_reset, GPIOD_OUT_LOW);
>>         else
>>             gpiod_direction_output(nop->gpiod_reset, GPIOD_OUT_HIGH);
>
> won't the descriptor itself handle that for us ? Linus ?
>
> I want to hear from Linus W first.

Yes, so do I.

Let's add a bit of context for Linus :
 1) In the past, the driver was doing a ;
    gpio_request_one()
      -> gpiod_direction_output_raw()
 2) After the conversion to gpio descriptors, it is doing :
    gpiod_get_optional(dev, "reset");
      -> ...
        -> __gpiod_get_index(dev, "reset", 0, 0)
          -> this of course doesn't call gpiod_direction()

The problem is that we cannot call:
  gpiod_get_optional(dev, "reset", GPIOD_OUT_LOW);
because we don't know before the call if the GPIO is active high or low. The
former gpio_request_one() was clever and did a gpio_direction_output_raw(..,
(flags & GPIOF_INIT_HIGH) ? 1 : 0).

So what is the right way out ? :
 - is it to call gpiod_direction_output(nop->gpiod, 0) just after
   gpiod_get_optional() in probe code ?
 - is it when the gpio is used to call gpiod_direction_output(gpiod, x) instead
   of gpiod_set_value() ?
 - is it something else ?

Cheers.

-- 
Robert
--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to