/** * gpiod_get_direction - return the current direction of a GPIO * @desc: GPIO to get the direction of * * Return GPIOF_DIR_IN or GPIOF_DIR_OUT, or an error code in case of error. * * This function may sleep if gpiod_cansleep() is true. */ int gpiod_get_direction(struct gpio_desc *desc) { struct gpio_chip *chip; unsigned offset; int status = -EINVAL;
chip = gpiod_to_chip(desc); offset = gpio_chip_hwgpio(desc);
if (!chip->get_direction) return status;
status = chip->get_direction(chip, offset); if (status > 0) { /* GPIOF_DIR_IN, or other positive */ status = 1; clear_bit(FLAG_IS_OUT, &desc->flags); } if (status == 0) { /* GPIOF_DIR_OUT */ set_bit(FLAG_IS_OUT, &desc->flags); } return status; }