]> git.baikalelectronics.ru Git - kernel.git/commit
leds: pca963x: Fix open-drain initialization
authorZahari Petkov <zahari@balena.io>
Mon, 18 Nov 2019 21:02:55 +0000 (23:02 +0200)
committerPavel <pavel@ucw.cz>
Sat, 21 Dec 2019 19:09:51 +0000 (20:09 +0100)
commit6b72ff3caf72fbdf24abe9e5d0f78924a4848390
tree20f800a6e25b36a5c9890f11c5e5f1ce5e041d4b
parente8a400140f5c3e0606c4c9556e9d2be4ac7d8768
leds: pca963x: Fix open-drain initialization

Before commit a8468304de1f ("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: a8468304de1f ("leds: pca963x: Add bindings to invert polarity")
Signed-off-by: Zahari Petkov <zahari@balena.io>
Signed-off-by: Pavel Machek <pavel@ucw.cz>
drivers/leds/leds-pca963x.c