From patchwork Thu Jan 19 13:00:42 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Hans de Goede X-Patchwork-Id: 13107908 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id BDF1AC004D4 for ; Thu, 19 Jan 2023 13:02:48 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230475AbjASNCq (ORCPT ); Thu, 19 Jan 2023 08:02:46 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:43212 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230256AbjASNCQ (ORCPT ); Thu, 19 Jan 2023 08:02:16 -0500 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id DF7957A520 for ; Thu, 19 Jan 2023 05:01:12 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1674133272; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding; bh=YS5Ir38Elhb6HV9SyUQSGtU4MyH6j2g+acIl2GVuLWI=; b=hPGhiKGhCtZi6LPIVZ86WiZKfcT4+EPnoIzoi4cp7CaDzuKLsiu6vqvL5GeW2PZiax8eA5 7f0EKNiMsVTpe3S/0TO7L6Epjud4BE99o3pwxDRw2iKWVJueEgQ75MLo5GnBi4v2+ikpjW fFBSgfrQJ5DUQk0Hahd6HP2fqW/kNOg= Received: from mimecast-mx02.redhat.com (mimecast-mx02.redhat.com [66.187.233.88]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-433-reto4L9cPiO4Yu3jlFyVfw-1; Thu, 19 Jan 2023 08:01:06 -0500 X-MC-Unique: reto4L9cPiO4Yu3jlFyVfw-1 Received: from smtp.corp.redhat.com (int-mx07.intmail.prod.int.rdu2.redhat.com [10.11.54.7]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 579F88A0112; Thu, 19 Jan 2023 13:01:05 +0000 (UTC) Received: from localhost.localdomain (unknown [10.39.194.158]) by smtp.corp.redhat.com (Postfix) with ESMTP id E01C71415108; Thu, 19 Jan 2023 13:01:01 +0000 (UTC) From: Hans de Goede To: Mark Gross , Andy Shevchenko , Pavel Machek , Lee Jones , Linus Walleij , Daniel Scally , Laurent Pinchart , Mauro Carvalho Chehab , Sakari Ailus Cc: Hans de Goede , platform-driver-x86@vger.kernel.org, linux-leds@vger.kernel.org, linux-gpio@vger.kernel.org, Kate Hsuan , Mark Pearson , Andy Yeh , Hao Yao , linux-media@vger.kernel.org Subject: [PATCH v4 00/11] leds: lookup-table support + int3472/media privacy LED support Date: Thu, 19 Jan 2023 14:00:42 +0100 Message-Id: <20230119130053.111344-1-hdegoede@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.1 on 10.11.54.7 Precedence: bulk List-ID: X-Mailing-List: platform-driver-x86@vger.kernel.org Hi All, Here is my version 4 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 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). Patches 1-5 are LED subsystem patches for this. 1 is a bug fix, 2-4 add the new [devm_]led_get() functions. Patch 5 is the RFC patch adding dt support to led_get() and is not intended for merging. Patch 6 + 7 add 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 8-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. Assuming at least the LED maintainers are happy with the approach suggested here, the first step to merging this would be to merge patches 1-4 and then provide an immutable branch with those to merge for the other subsystems since the other changes depend on these. If you are one of the folks who requested the new LED lookup table + led_get() approach I would appreciate a Reviewed-by or Acked-by for patches 1-4. 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_module_get() helper leds: led-class: Add __devm_led_get() helper leds: led-class: Add generic [devm_]led_get() [RFC] leds: led-class: Add devicetree support to led_get() media: v4l2-core: Built async and fwnode code into videodev.ko 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/leds/led-class.c | 173 +++++++++++++++--- drivers/media/v4l2-core/Kconfig | 4 +- drivers/media/v4l2-core/Makefile | 4 +- drivers/media/v4l2-core/v4l2-async.c | 15 +- drivers/media/v4l2-core/v4l2-dev.c | 7 + drivers/media/v4l2-core/v4l2-fwnode.c | 21 ++- drivers/media/v4l2-core/v4l2-subdev.c | 18 ++ 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 | 100 +++++----- drivers/platform/x86/intel/int3472/led.c | 75 ++++++++ include/linux/leds.h | 18 ++ include/media/v4l2-async.h | 4 + include/media/v4l2-subdev.h | 3 + 15 files changed, 380 insertions(+), 117 deletions(-) create mode 100644 drivers/platform/x86/intel/int3472/led.c Acked-by: Linus Walleij