linux-stable/drivers/leds
Zahari Petkov 44d748f2ab leds: pca963x: Fix open-drain initialization
[ Upstream commit 697529091a ]

Before commit bb29b9cccd ("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: bb29b9cccd ("leds: pca963x: Add bindings to invert polarity")
Signed-off-by: Zahari Petkov <zahari@balena.io>
Signed-off-by: Pavel Machek <pavel@ucw.cz>
Signed-off-by: Sasha Levin <sashal@kernel.org>
2020-02-24 08:34:35 +01:00
..
trigger leds: trigger: netdev: fix handling on interface rename 2019-12-17 20:35:54 +01:00
Kconfig leds: Modify PC Engines apu/apu2 driver to support apu3 2018-06-28 21:34:43 +02:00
led-class-flash.c
led-class.c leds: class: ensure workqueue is initialized before setting brightness 2018-05-24 22:08:26 +02:00
led-core.c leds: core: Fix regression caused by commit 2b83ff96f5 2018-01-07 13:27:07 +01:00
led-triggers.c led: triggers: Fix dereferencing of null pointer 2020-01-27 14:51:10 +01:00
leds-88pm860x.c
leds-aat1290.c LED updates for 4.14 2017-09-07 14:33:13 -07:00
leds-adp5520.c treewide: devm_kzalloc() -> devm_kcalloc() 2018-06-12 16:19:22 -07:00
leds-apu.c leds: Modify PC Engines apu/apu2 driver to support apu3 2018-06-28 21:34:43 +02:00
leds-as3645a.c leds: as3645a: Fix line over 80 characters 2018-01-08 21:28:11 +01:00
leds-asic3.c
leds-bcm6328.c leds: bcm6328: fix signal source assignment for leds 4 to 7 2017-06-13 20:36:56 +02:00
leds-bcm6358.c
leds-bd2802.c
leds-blinkm.c leds: blinkm: avoid uninitialized data use 2018-01-08 21:28:10 +01:00
leds-clevo-mail.c dmi: Mark all struct dmi_system_id instances const 2017-09-14 11:59:30 +02:00
leds-cobalt-qube.c
leds-cobalt-raq.c leds: leds-cobalt-raq: use builtin_platform_driver 2016-11-23 16:38:01 +01:00
leds-cpcap.c leds: cpcap: new driver 2017-03-29 21:02:27 +02:00
leds-cr0014114.c leds: Use struct_size() in allocation 2018-06-12 16:19:22 -07:00
leds-da903x.c
leds-da9052.c treewide: devm_kzalloc() -> devm_kcalloc() 2018-06-12 16:19:22 -07:00
leds-dac124s085.c
leds-fsg.c
leds-gpio-register.c
leds-gpio.c leds: gpio: Allow LED to retain state at shutdown 2017-08-29 21:10:40 +02:00
leds-hp6xx.c leds: convert IDE trigger to common disk trigger 2016-06-20 09:57:56 +02:00
leds-ipaq-micro.c
leds-is31fl32xx.c leds: Convert to using %pOF instead of full_name 2017-08-12 23:50:07 +02:00
leds-is31fl319x.c leds: is31fl319x: 1/3/6/9-channel light effect led driver 2016-08-15 14:02:31 +02:00
leds-ktd2692.c leds: ktd2692: avoid harmless maybe-uninitialized warning 2017-01-26 21:16:38 +01:00
leds-lm355x.c
leds-lm3530.c
leds-lm3533.c leds: lm3533: constify attribute_group structure 2017-08-29 21:10:37 +02:00
leds-lm3601x.c leds: lm3601x: Introduce the lm3601x LED driver 2018-05-23 21:44:47 +02:00
leds-lm3642.c
leds-lm3692x.c leds: lm3692x: Handle failure to probe the regulator 2020-01-04 19:12:43 +01:00
leds-locomo.c
leds-lp55xx-common.c leds: lp55xx: fix null deref on firmware load failure 2019-04-05 22:33:07 +02:00
leds-lp55xx-common.h
leds-lp3944.c
leds-lp3952.c leds: lp3952: Use 'if (ret)' pattern 2017-03-23 20:33:59 +01:00
leds-lp5521.c treewide: devm_kzalloc() -> devm_kcalloc() 2018-06-12 16:19:22 -07:00
leds-lp5523.c leds: lp5523: fix a missing check of return value of lp55xx_read 2019-02-27 10:08:57 +01:00
leds-lp5562.c leds: leds-lp5562 allow firmware files up to the maximum length 2019-10-05 13:09:34 +02:00
leds-lp8501.c treewide: devm_kzalloc() -> devm_kcalloc() 2018-06-12 16:19:22 -07:00
leds-lp8788.c
leds-lp8860.c leds: lp8860: Various fixes to align with LED framework 2018-01-08 21:28:12 +01:00
leds-lt3593.c leds: lt3593: update email address and switch to SPDX license header 2018-07-03 22:12:41 +02:00
leds-max8997.c leds: max8997: use mode when calling max8997_led_set_mode 2018-07-03 22:12:41 +02:00
leds-max77693.c media: v4l2-flash-led-class: Create separate sub-devices for indicators 2017-08-26 20:26:35 -04:00
leds-mc13783.c treewide: devm_kzalloc() -> devm_kcalloc() 2018-06-12 16:19:22 -07:00
leds-menf21bmc.c
leds-mlxcpld.c treewide: devm_kzalloc() -> devm_kcalloc() 2018-06-12 16:19:22 -07:00
leds-mlxreg.c leds: add driver for support Mellanox regmap LEDs for BMC and x86 platform 2018-02-19 21:09:20 +01:00
leds-mt6323.c leds: mt6323: Fix an off by one bug in probe 2017-03-23 20:23:57 +01:00
leds-net48xx.c
leds-netxbig.c treewide: devm_kzalloc() -> devm_kcalloc() 2018-06-12 16:19:22 -07:00
leds-nic78bx.c leds: Add user LED driver for NIC78bx device 2016-11-22 12:07:04 +01:00
leds-ns2.c leds: ns2: Change unsigned to unsigned int 2018-08-06 23:03:12 +02:00
leds-ot200.c
leds-pca955x.c treewide: devm_kzalloc() -> devm_kcalloc() 2018-06-12 16:19:22 -07:00
leds-pca963x.c leds: pca963x: Fix open-drain initialization 2020-02-24 08:34:35 +01:00
leds-pca9532.c leds: pca9532: fix a potential NULL pointer dereference 2019-05-04 09:20:22 +02:00
leds-pm8058.c leds: pm8058: Silence pointer to integer size warning 2017-12-01 08:57:42 +00:00
leds-powernv.c leds: powernv: Delete an error message for a failed memory allocation in powernv_led_create() 2017-08-29 21:10:39 +02:00
leds-pwm.c leds: pwm: silently error out on EPROBE_DEFER 2019-01-13 09:51:08 +01:00
leds-rb532.c
leds-regulator.c
leds-s3c24xx.c
leds-sc27xx-bltc.c leds: sc27xx: Fix return value check in sc27xx_led_probe() 2018-05-22 21:57:59 +02:00
leds-ss4200.c dmi: Mark all struct dmi_system_id instances const 2017-09-14 11:59:30 +02:00
leds-sunfire.c
leds-syscon.c
leds-tca6507.c treewide: devm_kzalloc() -> devm_kcalloc() 2018-06-12 16:19:22 -07:00
leds-tlc591xx.c leds: tlc591xx: add missing of_node_put 2017-07-16 18:45:43 +02:00
leds-wm831x-status.c leds: wm831x-status: Use sysfs_match_string() helper 2018-05-03 21:50:13 +02:00
leds-wm8350.c
leds-wrap.c
leds.h
Makefile leds: lm3601x: Introduce the lm3601x LED driver 2018-05-23 21:44:47 +02:00
uleds.c vfs: do bulk POLL* -> EPOLL* replacement 2018-02-11 14:34:03 -08:00