static void ssb_gpio_irq_extif_unmask(struct irq_data *d) { struct ssb_bus *bus = irq_data_get_irq_chip_data(d); int gpio = irqd_to_hwirq(d); u32 val = ssb_extif_gpio_in(&bus->extif, BIT(gpio)); ssb_extif_gpio_polarity(&bus->extif, BIT(gpio), val); ssb_extif_gpio_intmask(&bus->extif, BIT(gpio), BIT(gpio)); }
u32 ssb_gpio_in(struct ssb_bus *bus, u32 mask) { unsigned long flags; u32 res = 0; spin_lock_irqsave(&bus->gpio_lock, flags); if (ssb_chipco_available(&bus->chipco)) res = ssb_chipco_gpio_in(&bus->chipco, mask); else if (ssb_extif_available(&bus->extif)) res = ssb_extif_gpio_in(&bus->extif, mask); else SSB_WARN_ON(1); spin_unlock_irqrestore(&bus->gpio_lock, flags); return res; }
static int ssb_gpio_extif_get_value(struct gpio_chip *chip, unsigned gpio) { struct ssb_bus *bus = ssb_gpio_get_bus(chip); return !!ssb_extif_gpio_in(&bus->extif, 1 << gpio); }
int bcm47xx_gpio_get_value() { return ssb_extif_gpio_in(); }