On Tue, Jun 18, 2013 at 1:36 PM, Russell King - ARM Linux <linux@xxxxxxxxxxxxxxxx> wrote: > Maybe what we need is something like this: > > static DEFINE_SPINLOCK(io_lock); > static void modifyl(u32 new, u32 mask, void __iomem *reg) > { > unsigned long flags; > u32 val; > > spin_lock_irqsave(&io_lock, flags); > val = readl(reg) & ~mask; > val |= new | mask; > writel(val, reg); > spin_unlock_irqrestore(&io_lock, flags); > } > > in order to provide arbitrated access to these kinds of multifunction > registers in a safe, platform agnostic way. Nowadays I would do the above with regmap_update_bits(). Mutual exclusion for read-modify-write of individual bits in a register is one of those cases where doing a regmap over a memory-mapped register range makes a lot of sense. (drivers/mfd/syscon.c being a nice example) Yours, Linus Walleij -- To unsubscribe from this list: send the line "unsubscribe linux-doc" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html