static int dwapb_gpio_direction_input(struct udevice *dev, unsigned pin) { struct gpio_dwapb_platdata *plat = dev_get_platdata(dev); clrbits_le32(plat->base + GPIO_SWPORT_DDR(plat->bank), 1 << pin); return 0; }
static int dwapb_gpio_get_function(struct udevice *dev, unsigned offset) { struct gpio_dwapb_platdata *plat = dev_get_platdata(dev); u32 gpio; gpio = readl(plat->base + GPIO_SWPORT_DDR(plat->bank)); if (gpio & BIT(offset)) return GPIOF_OUTPUT; else return GPIOF_INPUT; }
static int dwapb_gpio_direction_output(struct udevice *dev, unsigned pin, int val) { struct gpio_dwapb_platdata *plat = dev_get_platdata(dev); setbits_le32(plat->base + GPIO_SWPORT_DDR(plat->bank), 1 << pin); if (val) setbits_le32(plat->base + GPIO_SWPORT_DR(plat->bank), 1 << pin); else clrbits_le32(plat->base + GPIO_SWPORT_DR(plat->bank), 1 << pin); return 0; }