static void ssb_gpio_extif_set_value(struct gpio_chip *chip, unsigned gpio, int value) { struct ssb_bus *bus = ssb_gpio_get_bus(chip); ssb_extif_gpio_out(&bus->extif, 1 << gpio, value ? 1 << gpio : 0); }
static int ssb_gpio_extif_direction_output(struct gpio_chip *chip, unsigned gpio, int value) { struct ssb_bus *bus = ssb_gpio_get_bus(chip); ssb_extif_gpio_outen(&bus->extif, 1 << gpio, 1 << gpio); ssb_extif_gpio_out(&bus->extif, 1 << gpio, value ? 1 << gpio : 0); return 0; }
u32 ssb_gpio_out(struct ssb_bus *bus, u32 mask, u32 value) { unsigned long flags; u32 res = 0; spin_lock_irqsave(&bus->gpio_lock, flags); if (ssb_chipco_available(&bus->chipco)) res = ssb_chipco_gpio_out(&bus->chipco, mask, value); else if (ssb_extif_available(&bus->extif)) res = ssb_extif_gpio_out(&bus->extif, mask, value); else SSB_WARN_ON(1); spin_unlock_irqrestore(&bus->gpio_lock, flags); return res; }