Messages in this thread | | | Date | Tue, 18 Jun 2013 17:02:49 +0200 | Subject | Re: [PATCH v4 02/10] pinctrl: mvebu: dove pinctrl driver | From | Linus Walleij <> |
| |
On Tue, Jun 18, 2013 at 1:36 PM, Russell King - ARM Linux <linux@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
| |