{
        struct tps65218_gpio *tps65218_gpio = gpiochip_get_data(gc);
        struct tps65218 *tps65218 = tps65218_gpio->tps65218;
-       unsigned long flags = gc->desc[offset].flags;
        int ret;
 
-       if (flags & FLAG_OPEN_SOURCE) {
+       if (gpiochip_line_is_open_source(gc, offset)) {
                dev_err(gc->parent, "can't work as open source\n");
                return -EINVAL;
        }
 
        switch (offset) {
        case 0:
-               if (!(flags & FLAG_OPEN_DRAIN)) {
+               if (!gpiochip_line_is_open_drain(gc, offset)) {
                        dev_err(gc->parent, "GPO1 works only as open drain\n");
                        return -EINVAL;
                }
                break;
        case 1:
                /* GP02 is push-pull by default, can be set as open drain. */
-               if (flags & FLAG_OPEN_DRAIN) {
+               if (gpiochip_line_is_open_drain(gc, offset)) {
                        ret = tps65218_clear_bits(tps65218,
                                                  TPS65218_REG_CONFIG1,
                                                  TPS65218_CONFIG1_GPO2_BUF,
                break;
 
        case 2:
-               if (!(flags & FLAG_OPEN_DRAIN)) {
+               if (!gpiochip_line_is_open_drain(gc, offset)) {
                        dev_err(gc->parent, "GPO3 works only as open drain\n");
                        return -EINVAL;
                }
 
 }
 EXPORT_SYMBOL_GPL(gpiochip_line_is_irq);
 
+bool gpiochip_line_is_open_drain(struct gpio_chip *chip, unsigned int offset)
+{
+       if (offset >= chip->ngpio)
+               return false;
+
+       return test_bit(FLAG_OPEN_DRAIN, &chip->gpiodev->descs[offset].flags);
+}
+EXPORT_SYMBOL_GPL(gpiochip_line_is_open_drain);
+
+bool gpiochip_line_is_open_source(struct gpio_chip *chip, unsigned int offset)
+{
+       if (offset >= chip->ngpio)
+               return false;
+
+       return test_bit(FLAG_OPEN_SOURCE, &chip->gpiodev->descs[offset].flags);
+}
+EXPORT_SYMBOL_GPL(gpiochip_line_is_open_source);
+
 /**
  * gpiod_get_raw_value_cansleep() - return a gpio's raw value
  * @desc: gpio whose value will be returned
 
 void gpiochip_unlock_as_irq(struct gpio_chip *chip, unsigned int offset);
 bool gpiochip_line_is_irq(struct gpio_chip *chip, unsigned int offset);
 
+/* Line status inquiry for drivers */
+bool gpiochip_line_is_open_drain(struct gpio_chip *chip, unsigned int offset);
+bool gpiochip_line_is_open_source(struct gpio_chip *chip, unsigned int offset);
+
 /* get driver data */
 void *gpiochip_get_data(struct gpio_chip *chip);