Hi All, Here is my 3th attempt at adjusting the INT3472 code's handling of the privacy LED on x86 laptops with MIPI camera(s) so that it will also work on devices which have a privacy-LED GPIO but not a clk-enable GPIO (so that we cannot just tie the LED state to the clk-enable state). Due to popular request by multiple people this new version now models the privacy LED as a LED class device. This requires being able to "tie" the LED class device to a specific camera sensor (some devices have multiple sensors + privacy-LEDs). Patches 1-5 are LED subsystem patches for this. 1 is a bug fix, 2-4 is a bit of refactoring in preparation for patch 5 which adds generic (non devicetree specific) led_get() and devm_led_get() function (which will also work with devicetree) and lookup table support to allow platform code to add LED class-device <-> consumer-dev,function lookups for non devicetree platforms. Patch 6 adds generic privacy-LED support to the v4l2-core/v4l2-subdev.c code automatically enabling the privacy-LED when s_stream(subdev, 1) is called. So that we don't need to privacy-LED code to all the camera sensor drivers separately (as requested by Sakari). These are all new patches in version 3. Patches 7-11 are patches to the platform specific INT3472 code to register privacy-LED class devices + lookup table entries for privacy-LEDs described in the special INT3472 ACPI nodes found on x86 devices with MIPI cameras (+ prep work + some other INT3472 fixes). Assuming the LED and media maintainers are happy with the approach suggested here (if you are please give your Ack / Reviewed-by) we need to talk about how to merge this since patches 6 and 7-11 depend on the LED subsystem changes. I think it would be best if the LED subsystem can provide an immutable branch with patches 1-5 (on top of 6.2-rc1 once it is out) and then the media folks and I can merge that branch and then apply the other patches on top. This series has been tested on: - Lenovo ThinkPad X1 Yoga gen 7, IPU6, front: ov2740 with privacy LED - Dell Latitude 9420, IPU 6, front: ov01a1s with privacy LED - Mirosoft Surface Go, IPU3, front: ov5693 with privacy LED back: ov8865 with privacy LED (pled not yet supported) Regards, Hans Hans de Goede (11): leds: led-class: Add missing put_device() to led_put() leds: led-class: Add __led_get() helper function leds: led-class: Add __of_led_get() helper leds: led-class: Add __devm_led_get() helper leds: led-class: Add generic [devm_]led_get() v4l: subdev: Make the v4l2-subdev core code enable/disable the privacy LED if present platform/x86: int3472/discrete: Refactor GPIO to sensor mapping platform/x86: int3472/discrete: Create a LED class device for the privacy LED platform/x86: int3472/discrete: Move GPIO request to skl_int3472_register_clock() platform/x86: int3472/discrete: Ensure the clk/power enable pins are in output mode platform/x86: int3472/discrete: Get the polarity from the _DSM entry drivers/leds/led-class.c | 174 +++++++++++++++--- drivers/media/v4l2-core/v4l2-subdev.c | 40 ++++ drivers/platform/x86/intel/int3472/Makefile | 2 +- .../x86/intel/int3472/clk_and_regulator.c | 35 +++- drivers/platform/x86/intel/int3472/common.h | 18 +- drivers/platform/x86/intel/int3472/discrete.c | 96 +++++----- drivers/platform/x86/intel/int3472/led.c | 75 ++++++++ include/linux/leds.h | 18 ++ include/media/v4l2-subdev.h | 3 + 9 files changed, 371 insertions(+), 90 deletions(-) create mode 100644 drivers/platform/x86/intel/int3472/led.c -- 2.38.1