RE: [PATCH v3 12/20] GPIO: OMAP: Use wkup_status for all SoCs

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Kevin,
[...]
> 
> >  		set_gpio_trigger(bank, gpio, trigger);
> >  	} else if (bank->regs->irqctrl) {
> >  		reg += bank->regs->irqctrl;
> > @@ -295,13 +296,7 @@ static int _set_gpio_triggering(struct gpio_bank
> *bank, int gpio, int trigger)
> >  		if (trigger & IRQ_TYPE_EDGE_FALLING)
> >  			l |= 1 << (gpio << 1);
> >
> > -		if (trigger)
> > -			/* Enable wake-up during idle for dynamic tick */
> > -			__raw_writel(1 << gpio, bank->base
> > -						+ bank->regs->wkup_set);
> > -		else
> > -			__raw_writel(1 << gpio, bank->base
> > -						+ bank->regs->wkup_clear);
> > +		MOD_REG_BIT(bank->regs->wkup_status, 1 << gpio, trigger != 0);
> 
> This isn't right, so I'm not sure how this is working. At this point:
> 
>      base = bank->base;
>      reg = bank->base + bank->regs->edgectrl[12];
Right so far...

> 
> but if you look at MOD_REG_BIT(), it does register access using 'base +
> reg', but here that will be 'bank->base + bank->base + reg offset',
> which will be doing a read/modify/write to who-knows-where.
My understanding was MOD_REG_BIT(bank->regs->wkup_status, ...) translate to:
bank->base + bank->regs->wkup_status, for the following reason:

In the following macro, reg is equivalent to bank->regs->wkup_status.
But this is not the case with base, which remains as bank->base.
Please correct me.

#define MOD_REG_BIT(reg, bit_mask, set) \
do {    \
        int l = __raw_readl(base + reg); \
        if (set) l |= bit_mask; \
        else l &= ~bit_mask; \
        __raw_writel(l, base + reg); \
} while(0)

> 
> >  		__raw_writel(l, reg);
> 
> Oh, now I see why it works: because you have an additional write here,
> which isn't right either because MOD_REG_BIT() already does the read
> *and* write.
This should be writing to following still.
reg = bank->base + bank->regs->edgectrl[12];
--
Tarun
> 
[...]
--
To unsubscribe from this list: send the line "unsubscribe linux-omap" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Linux Arm (vger)]     [ARM Kernel]     [ARM MSM]     [Linux Tegra]     [Linux WPAN Networking]     [Linux Wireless Networking]     [Maemo Users]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite Trails]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux