lkml.org 
[lkml]   [2012]   [Dec]   [17]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: [PATCH RESEND 0/6 v10] gpio: Add block GPIO
    On 12/17/2012 02:51 PM, Roland Stigge wrote:
    > Hi Wolfgang,
    >
    > On 12/17/2012 02:32 PM, Roland Stigge wrote:
    >> And I guess Russell is right: If possible, we should write outputs
    >> simultaneously via ODSR (plus OWER/OWDR/OWSR) instead of separate set/clear.
    >>
    >> I wonder if we need to save/restore the state of OWSR at every write
    >> operation or if we need/can cache it. Assuming that block GPIO are the
    >> only code in the kernel that manipulates ODSR.
    >
    > Can you please test the following:
    >
    > +static void at91_gpiolib_set_block(struct gpio_chip *chip, unsigned long mask, unsigned long val)
    > +{
    > + struct at91_gpio_chip *at91_gpio = to_at91_gpio_chip(chip);
    > + void __iomem *pio = at91_gpio->regbase;
    > +
    > + __raw_writel(~mask, pio + PIO_OWDR);

    This would also disable normal GPIOs configured for output! From the
    manual I understand that if the pin is configured for output, we could
    either use PIO_SODR/PIO_CODR to set/clear the bits individually or
    PIO_ODSR for synchronous data output. But than we need to care about the
    non-block GPIO outputs as well... requiring a read-modify-write cycle :(.

    Wolfgang.




    \
     
     \ /
      Last update: 2012-12-17 18:01    [W:5.937 / U:0.016 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site