[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <YheSvtwqaL5mDmre@orome>
Date: Thu, 24 Feb 2022 15:14:22 +0100
From: Thierry Reding <thierry.reding@...il.com>
To: Bjorn Andersson <bjorn.andersson@...aro.org>
Cc: Pavel Machek <pavel@....cz>,
Uwe Kleine-König
<u.kleine-koenig@...gutronix.de>, Lee Jones <lee.jones@...aro.org>,
Rob Herring <robh+dt@...nel.org>,
Jonathan Corbet <corbet@....net>, linux-leds@...r.kernel.org,
devicetree@...r.kernel.org, linux-kernel@...r.kernel.org,
linux-doc@...r.kernel.org, linux-pwm@...r.kernel.org,
linux-arm-msm@...r.kernel.org, Luca Weiss <luca@...tu.xyz>,
Doug Anderson <dianders@...omium.org>
Subject: Re: [PATCH v13 2/2] leds: Add driver for Qualcomm LPG
On Fri, Feb 18, 2022 at 10:31:16AM -0800, Bjorn Andersson wrote:
> The Light Pulse Generator (LPG) is a PWM-block found in a wide range of
> PMICs from Qualcomm. These PMICs typically comes with 1-8 LPG instances,
> with their output being routed to various other components, such as
> current sinks or GPIOs.
>
> Each LPG instance can operate on fixed parameters or based on a shared
> lookup-table, altering the duty cycle over time. This provides the means
> for hardware assisted transitions of LED brightness.
>
> A typical use case for the fixed parameter mode is to drive a PWM
> backlight control signal, the driver therefor allows each LPG instance
> to be exposed to the kernel either through the LED framework or the PWM
> framework.
>
> A typical use case for the LED configuration is to drive RGB LEDs in
> smartphones etc, for which the driver supports multiple channels to be
> ganged up to a MULTICOLOR LED. In this configuration the pattern
> generators will be synchronized, to allow for multi-color patterns.
>
> The idea of modelling this as a LED driver ontop of a PWM driver was
> considered, but setting the properties related to patterns does not fit
> in the PWM API. Similarly the idea of just duplicating the lower bits in
> a PWM and LED driver separately was considered, but this would not allow
> the PWM channels and LEDs to be configured on a per-board basis. The
> driver implements the more complex LED interface, and provides a PWM
> interface on the side of that, in the same driver.
>
> Tested-by: Luca Weiss <luca@...tu.xyz>
> Tested-by: Doug Anderson <dianders@...omium.org>
> Signed-off-by: Bjorn Andersson <bjorn.andersson@...aro.org>
> ---
> Changes since v12:
> - Initialize ret in lpg_pwm_apply()
>
> Changes since v11:
> - Extended commit message to cover decision to put pwm_chip in the LED driver
> - Added Documentation, in particular for the hw_pattern format
> - Added a lock to synchronize requests from LED and PWM frameworks
> - Turned out that the 9bit selector differs per channel in some PMICs, so
> replaced bitmask in lpg_data with lookup based on QPNP SUBTYPE
> - Fixed kerneldoc for the struct device pointer in struct lpg
> - Rewrote conditional in lut_free() to make it easier to read
> - Corrected and deduplicated max_period expression in lpg_calc_freq()
> - Extended nom/dom to numerator/denominator in lpg_calc_freq()
> - Replaced 1 << 9 with LPG_RESOLUTION in one more place in lpg_calc_freq()
> - Use FIELD_PREP() in lpg_apply_freq() as masks was introduced for reading the
> same in get_state()
> - Cleaned up the pattern format, to allow specifying both low and high pause
> with and without pingpong mode.
> - Only update frequency and pwm_value if PWM channel is enabled in lpg_pwm_apply
> - Make lpg_pwm_get_state() read the hardware state, in order to pick up e.g.
> bootloader backlight configuration
> - Use devm_bitmap_zalloc() to allocate the lut_bitmap
> - Use dev_err_probe() in lpg_probe()
> - Extended Kconfig help text to mention module name and satisfy checkpatch
>
> Documentation/leds/leds-qcom-lpg.rst | 76 ++
> drivers/leds/Kconfig | 3 +
> drivers/leds/Makefile | 3 +
> drivers/leds/rgb/Kconfig | 18 +
> drivers/leds/rgb/Makefile | 3 +
> drivers/leds/rgb/leds-qcom-lpg.c | 1401 ++++++++++++++++++++++++++
> 6 files changed, 1504 insertions(+)
> create mode 100644 Documentation/leds/leds-qcom-lpg.rst
> create mode 100644 drivers/leds/rgb/Kconfig
> create mode 100644 drivers/leds/rgb/Makefile
> create mode 100644 drivers/leds/rgb/leds-qcom-lpg.c
Looks good to me from a PWM point of view:
Acked-by: Thierry Reding <thierry.reding@...il.com>
Download attachment "signature.asc" of type "application/pgp-signature" (834 bytes)
Powered by blists - more mailing lists