if (of_flags & OF_GPIO_TRANSITORY)
                *flags |= GPIO_TRANSITORY;
 
+       if (of_flags & OF_GPIO_PULL_UP)
+               *flags |= GPIO_PULL_UP;
+       if (of_flags & OF_GPIO_PULL_DOWN)
+               *flags |= GPIO_PULL_DOWN;
+
        return desc;
 }
 
 
        if (status == 0)
                clear_bit(FLAG_IS_OUT, &desc->flags);
 
+       if (test_bit(FLAG_PULL_UP, &desc->flags))
+               gpio_set_config(chip, gpio_chip_hwgpio(desc),
+                               PIN_CONFIG_BIAS_PULL_UP);
+       else if (test_bit(FLAG_PULL_DOWN, &desc->flags))
+               gpio_set_config(chip, gpio_chip_hwgpio(desc),
+                               PIN_CONFIG_BIAS_PULL_DOWN);
+
        trace_gpio_direction(desc_to_gpio(desc), 1, status);
 
        return status;
        if (lflags & GPIO_OPEN_SOURCE)
                set_bit(FLAG_OPEN_SOURCE, &desc->flags);
 
+       if ((lflags & GPIO_PULL_UP) && (lflags & GPIO_PULL_DOWN)) {
+               gpiod_err(desc,
+                         "both pull-up and pull-down enabled, invalid configuration\n");
+               return -EINVAL;
+       }
+
+       if (lflags & GPIO_PULL_UP)
+               set_bit(FLAG_PULL_UP, &desc->flags);
+       else if (lflags & GPIO_PULL_DOWN)
+               set_bit(FLAG_PULL_DOWN, &desc->flags);
+
        status = gpiod_set_transitory(desc, (lflags & GPIO_TRANSITORY));
        if (status < 0)
                return status;
 
 #define FLAG_IRQ_IS_ENABLED 10 /* GPIO is connected to an enabled IRQ */
 #define FLAG_IS_HOGGED 11      /* GPIO is hogged */
 #define FLAG_TRANSITORY 12     /* GPIO may lose value in sleep or reset */
+#define FLAG_PULL_UP    13     /* GPIO has pull up enabled */
+#define FLAG_PULL_DOWN  14     /* GPIO has pull down enabled */
 
        /* Connection label */
        const char              *label;
 
        GPIO_OPEN_SOURCE = (1 << 2),
        GPIO_PERSISTENT = (0 << 3),
        GPIO_TRANSITORY = (1 << 3),
+       GPIO_PULL_UP = (1 << 4),
+       GPIO_PULL_DOWN = (1 << 5),
 };
 
 /**
 
        OF_GPIO_SINGLE_ENDED = 0x2,
        OF_GPIO_OPEN_DRAIN = 0x4,
        OF_GPIO_TRANSITORY = 0x8,
+       OF_GPIO_PULL_UP = 0x10,
+       OF_GPIO_PULL_DOWN = 0x20,
 };
 
 #ifdef CONFIG_OF_GPIO