mbox series

[v6,0/5] int3472/media privacy LED support

Message ID 20230127203729.10205-1-hdegoede@redhat.com
Headers show
Series int3472/media privacy LED support | expand

Message

Hans de Goede Jan. 27, 2023, 8:37 p.m. UTC
Hi All,

Here is version 6 of my series to adjust 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).

Changes in v6:
- The LED lookup series has been merged, immutable branch pull-req here:
  https://lore.kernel.org/platform-driver-x86/Y9QGcA+9nlmOOy2d@google.com/
- Rework the media-core changes to correctly free the LED reference,
  this rework also allows dropping the patch to merge the async + fwnode
  code into videodev.ko
- Drop the patch merging the async + fwnode code into videodev.ko

Changes in v5:
- Rename lookup-table names to match those from the gpio and reset lookups:
  s/led_name/provider/
  s/consumer_dev_name/dev_id/
  s/consumer_function/con_id/
- Add static inline wrappers for the v4l2_async debugfs init/exit funcs,
  to fix build errors when CONFIG_V4L2_ASYNC is not enabled

Changes in v4:
- Rename new __led_get() helper to led_module_get()
- Drop of/devicetree support from "led-class: Add generic [devm_]led_get()"
- Add RFC patch to re-add of/devicetree support to show that the new
  led_get() can easily be extended with dt support when the need for this
  arises (proof-of-concept dt code, not intended for merging)
- New patch to built async and fwnode code into videodev.ko,
  to avoid issues with some of the new LED code getting builtin vs
  other parts possibly being in a module
- Move the led_get() call to v4l2_async_register_subdev_sensor()
- Move the led_disable_sysfs() call to be done at led_get() time
- Address some other minor review comments

Changes in v3:
- 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).

Patch 1 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 add privacy-LED code to all the
camera sensor drivers separately (as requested by Sakari).

Patches 2-5 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.

This depends on the just merged LED lookup code from:
https://lore.kernel.org/platform-driver-x86/Y9QGcA+9nlmOOy2d@google.com/

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 (5):
  media: v4l2-core: Make the v4l2-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: Get the polarity from the _DSM entry

 drivers/media/v4l2-core/v4l2-async.c          |   4 +
 drivers/media/v4l2-core/v4l2-fwnode.c         |   7 ++
 drivers/media/v4l2-core/v4l2-subdev-priv.h    |  14 +++
 drivers/media/v4l2-core/v4l2-subdev.c         |  44 ++++++++
 drivers/platform/x86/intel/int3472/Makefile   |   2 +-
 .../x86/intel/int3472/clk_and_regulator.c     |  34 ++++--
 drivers/platform/x86/intel/int3472/common.h   |  18 +++-
 drivers/platform/x86/intel/int3472/discrete.c | 100 ++++++++----------
 drivers/platform/x86/intel/int3472/led.c      |  74 +++++++++++++
 include/media/v4l2-subdev.h                   |   3 +
 10 files changed, 234 insertions(+), 66 deletions(-)
 create mode 100644 drivers/media/v4l2-core/v4l2-subdev-priv.h
 create mode 100644 drivers/platform/x86/intel/int3472/led.c