Skip to content
  • H. Nikolaus Schaller's avatar
    gpio: pca953x: hack to fix 24 bit gpio expanders · 3b00691c
    H. Nikolaus Schaller authored
    24 bit expanders use REG_ADDR_AI in combination with register addressing. This
    conflicts with regmap which takes this bit as part of the register number,
    i.e. a second cache entry is defined for accessed with REG_ADDR_AI being
    set although on the chip it is the same register as with REG_ADDR_AI being
    cleared.
    
    The problem was introduced by
    
    	commit b32cecb4 ("gpio: pca953x: Extract the register address mangling to single function")
    
    but only became visible by
    
    	commit 8b9f9d4d
    
     ("regmap: verify if register is writeable before writing operations")
    
    because before, the regmap size was effectively ignored and
    pca953x_writeable_register() did know to ignore REG_ADDR_AI. Still, there
    were two separate cache entries created.
    
    Since the use of REG_ADDR_AI seems to be static we can work around this
    issue by simply increasing the size of the regmap to cover the "virtual"
    registers with REG_ADDR_AI being set. This only means that half of the
    regmap buffer will be unused.
    
    Reported-by: default avatarH. Nikolaus Schaller <hns@goldelico.com>
    Suggested-by: default avatarLinus Walleij <linus.walleij@linaro.org>
    Signed-off-by: default avatarH. Nikolaus Schaller <hns@goldelico.com>
    Signed-off-by: default avatarLinus Walleij <linus.walleij@linaro.org>
    3b00691c