static void bgpio_set_multiple_with_clear(struct gpio_chip *gc, unsigned long *mask, unsigned long *bits) { unsigned long set_mask, clear_mask; bgpio_multiple_get_masks(gc, mask, bits, &set_mask, &clear_mask); if (set_mask) gc->write_reg(gc->reg_set, set_mask); if (clear_mask) gc->write_reg(gc->reg_clr, clear_mask); }
static void bgpio_set_multiple_single_reg(struct bgpio_chip *bgc, unsigned long *mask, unsigned long *bits, void __iomem *reg) { unsigned long flags; unsigned long set_mask, clear_mask; spin_lock_irqsave(&bgc->lock, flags); bgpio_multiple_get_masks(bgc, mask, bits, &set_mask, &clear_mask); bgc->data |= set_mask; bgc->data &= ~clear_mask; bgc->write_reg(reg, bgc->data); spin_unlock_irqrestore(&bgc->lock, flags); }