• Zahari Petkov's avatar
    leds: pca963x: Fix open-drain initialization · 69752909
    Zahari Petkov authored
    Before commit bb29b9cc ("leds: pca963x: Add bindings to invert
    polarity") Mode register 2 was initialized directly with either 0x01
    or 0x05 for open-drain or totem pole (push-pull) configuration.
    
    Afterwards, MODE2 initialization started using bitwise operations on
    top of the default MODE2 register value (0x05). Using bitwise OR for
    setting OUTDRV with 0x01 and 0x05 does not produce correct results.
    When open-drain is used, instead of setting OUTDRV to 0, the driver
    keeps it as 1:
    
    Open-drain: 0x05 | 0x01 -> 0x05 (0b101 - incorrect)
    Totem pole: 0x05 | 0x05 -> 0x05 (0b101 - correct but still wrong)
    
    Now OUTDRV setting uses correct bitwise operations for initialization:
    
    Open-drain: 0x05 & ~0x04 -> 0x01 (0b001 - correct)
    Totem pole: 0x05 | 0x04 -> 0x05 (0b101 - correct)
    
    Additional MODE2 register definitions are introduced now as well.
    
    Fixes: bb29b9cc ("leds: pca963x: Add bindings to invert polarity")
    Signed-off-by: default avatarZahari Petkov <zahari@balena.io>
    Signed-off-by: default avatarPavel Machek <pavel@ucw.cz>
    69752909
leds-pca963x.c 12.8 KB