On Tue, Jun 18, 2013 at 1:36 PM, Russell King - ARM Linux <li...@arm.linux.org.uk> 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 _______________________________________________ devicetree-discuss mailing list devicetree-discuss@lists.ozlabs.org https://lists.ozlabs.org/listinfo/devicetree-discuss