• William Breathitt Gray's avatar
    gpio: pcie-idio-24: Migrate to the regmap API · 1a200a39
    William Breathitt Gray authored
    The regmap API supports IO port accessors so we can take advantage of
    regmap abstractions rather than handling access to the device registers
    directly in the driver.
    
    For the PCIe-IDIO-24 series of devices, the following BARs are
    available:
    
        BAR[0]: memory mapped PEX8311
        BAR[1]: I/O mapped PEX8311
        BAR[2]: I/O mapped card registers
    
    There are 24 FET Output lines, 24 Isolated Input lines, and 8 TTL/CMOS
    lines (which may be configured for either output or input). The GPIO
    lines are exposed by the following card registers:
    
        Base +0x0-0x2 (Read/Write): FET Outputs
        Base +0xB (Read/Write): TTL/CMOS
        Base +0x4-0x6 (Read): Isolated Inputs
        Base +0x7 (Read): TTL/CMOS
    
    In order for the device to support interrupts, the PLX PEX8311 internal
    PCI wire interrupt and local interrupt input must first be enabled.
    
    The following card registers for Change-Of-State may be used:
    
        Base +0x8-0xA (Read): COS Status Inputs
        Base +0x8-0xA (Write): COS Clear Inputs
        Base +0xB (Read): COS Status TTL/CMOS
        Base +0xB (Write): COS Clear TTL/CMOS
        Base +0xE (Read/Write): COS Enable
    
    The COS Enable register is used to enable/disable interrupts and
    configure the interrupt levels; each bit maps to a group of eight inputs
    as described below:
    
        Bit 0: IRQ EN Rising Edge IN0-7
        Bit 1: IRQ EN Rising Edge IN8-15
        Bit 2: IRQ EN Rising Edge IN16-23
        Bit 3: IRQ EN Rising Edge TTL0-7
        Bit 4: IRQ EN Falling Edge IN0-7
        Bit 5: IRQ EN Falling Edge IN8-15
        Bit 6: IRQ EN Falling Edge IN16-23
        Bit 7: IRQ EN Falling Edge TTL0-7
    
    An interrupt is asserted when a change-of-state matching the interrupt
    level configuration respective for a particular group of eight inputs
    with enabled COS is detected.
    
    The COS Status registers may be read to determine which inputs have
    changed; if interrupts were enabled, an IRQ will be generated for the
    set bits in these registers. Writing the value read from the COS Status
    register back to the respective COS Clear register will clear just those
    interrupts.
    Reviewed-by: default avatarMichael Walle <michael@walle.cc>
    Reviewed-by: default avatarLinus Walleij <linus.walleij@linaro.org>
    Link: https://lore.kernel.org/r/3091e387b1d2eac011a1d84e493663aa2acf982e.1680708357.git.william.gray@linaro.org/Signed-off-by: default avatarWilliam Breathitt Gray <william.gray@linaro.org>
    Reviewed-by: default avatarLinus Walleij <linus.walleij@linaro.org>
    Signed-off-by: default avatarBartosz Golaszewski <bartosz.golaszewski@linaro.org>
    1a200a39
Kconfig 52.4 KB