- New Functionality

- Add new Device Tree binding for Monolithic Power (MPS) MP3309C step-up converter
    - Document brightness-levels in bindings for; generic, LED and PWM
 
  - Bug Fixes
    - Ensure PWMs are disabled on; .shutdown(), .suspend() and .remove()
 -----BEGIN PGP SIGNATURE-----
 
 iQIzBAABCgAdFiEEdrbJNaO+IJqU8IdIUa+KL4f8d2EFAmVDsVMACgkQUa+KL4f8
 d2GsxA//WWkGqltN3lcsG29nANUMsBE2QqCSp8sW/iH8frqkk2tnZ+UIEReNMhKt
 Q03DnB5HQ/gyydsg0XAvW9bkvh0salIpMdMXXLPeI+Rdl/D3bkuPiutyNQIbjPvC
 o7debl9rE+eVcJCZBieO/VfY9HFVP6lfBstjjR+Y2PpnxcCTDmXa1KJiiDsUHQ3b
 /u+PYYdLnwvX1AgbjrqJk4n1qs39a023zOhVfB0JDKO0XXJ8WAkFvEa9FfUQYLAB
 zZmERCIx1fsSTyfdAXxuRG4CX99abMK92wKWWQjDAv7gbkF6041uQ6CyqgLZMI/T
 ++xt3kDUhvm4UtOo4O6gkTOu3siTWLoI4D8tX0gYY3Ks9LykQ9r+wjfSikXpor+a
 Wdg83r/wAyp3vU7ti3Wz/+2b6NwZKCY5WtcN413gjl1tY48+JcaHnUxyjQOZOKkJ
 ZfmzAhJkbEdeyu0LT6MOGEnPY8ToWzPu2bKsviy8sl6hCxXIP/8PG2Mz3sVz+W6F
 cXwmtbFnALLI2cuYimWeHgseBf4qUVqFB5/spLm2UI0a3glM7G8zhRzAn5jEpVfS
 MmFPDzdlU3jKOwC69RrRye2aLtD3Aq101vYbNOTdbQgiab02ARojprDfc7CnDtnt
 +TOHN6tNzBf/w319mz9yS8KbdZ4So8zO/ifHcEpbgYdtR846jA4=
 =djoj
 -----END PGP SIGNATURE-----

Merge tag 'backlight-next-6.7' of git://git.kernel.org/pub/scm/linux/kernel/git/lee/backlight

Pull backlight updates from Lee Jones:
 "New Functionality:

   - Add new Device Tree binding for Monolithic Power (MPS) MP3309C
     step-up converter

   - Document brightness-levels in bindings for; generic, LED and PWM

  Bug Fixes:

   - Ensure PWMs are disabled on .shutdown(), .suspend() and .remove()"

* tag 'backlight-next-6.7' of git://git.kernel.org/pub/scm/linux/kernel/git/lee/backlight:
  dt-bindings: backlight: Add brightness-levels related common properties
  backlight: pwm_bl: Disable PWM on shutdown, suspend and remove
  dt-bindings: backlight: Add MPS MP3309C
This commit is contained in:
Linus Torvalds 2023-11-02 14:46:31 -10:00
commit 38984d7872
5 changed files with 120 additions and 31 deletions

View File

@ -33,4 +33,21 @@ properties:
due to restrictions in a specific system, such as mounting conditions. due to restrictions in a specific system, such as mounting conditions.
$ref: /schemas/types.yaml#/definitions/uint32 $ref: /schemas/types.yaml#/definitions/uint32
brightness-levels:
description:
Array of distinct brightness levels. The levels must be in the range
accepted by the underlying LED device. Typically these are in the range
from 0 to 255, but any range starting at 0 will do, as long as they are
accepted by the LED.
The 0 value means a 0% of brightness (darkest/off), while the last value
in the array represents a full 100% brightness (brightest).
If this array is not provided, the driver default mapping is used.
$ref: /schemas/types.yaml#/definitions/uint32-array
default-brightness-level:
description:
The default brightness level (index into the array defined by the
"brightness-levels" property).
$ref: /schemas/types.yaml#/definitions/uint32
additionalProperties: true additionalProperties: true

View File

@ -16,6 +16,9 @@ description:
can also be used to describe a backlight device controlled by the output of can also be used to describe a backlight device controlled by the output of
a LED driver. a LED driver.
allOf:
- $ref: common.yaml#
properties: properties:
compatible: compatible:
const: led-backlight const: led-backlight
@ -26,25 +29,11 @@ properties:
items: items:
maxItems: 1 maxItems: 1
brightness-levels:
description:
Array of distinct brightness levels. The levels must be in the range
accepted by the underlying LED devices. This is used to translate a
backlight brightness level into a LED brightness level. If it is not
provided, the identity mapping is used.
$ref: /schemas/types.yaml#/definitions/uint32-array
default-brightness-level:
description:
The default brightness level (index into the array defined by the
"brightness-levels" property).
$ref: /schemas/types.yaml#/definitions/uint32
required: required:
- compatible - compatible
- leds - leds
additionalProperties: false unevaluatedProperties: false
examples: examples:
- | - |

View File

@ -0,0 +1,73 @@
# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause)
%YAML 1.2
---
$id: http://devicetree.org/schemas/leds/backlight/mps,mp3309c.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#
title: MPS MP3309C backlight
maintainers:
- Flavio Suligoi <f.suligoi@asem.it>
description: |
The Monolithic Power (MPS) MP3309C is a WLED step-up converter, featuring a
programmable switching frequency to optimize efficiency.
It supports two different dimming modes:
- analog mode, via I2C commands (default)
- PWM controlled mode.
The datasheet is available at:
https://www.monolithicpower.com/en/mp3309c.html
allOf:
- $ref: common.yaml#
properties:
compatible:
const: mps,mp3309c
reg:
maxItems: 1
pwms:
description: if present, the backlight is controlled in PWM mode.
maxItems: 1
enable-gpios:
description: GPIO used to enable the backlight in "analog-i2c" dimming mode.
maxItems: 1
mps,overvoltage-protection-microvolt:
description: Overvoltage protection (13.5V, 24V or 35.5V).
enum: [ 13500000, 24000000, 35500000 ]
default: 35500000
mps,no-sync-mode:
description: disable synchronous rectification mode
type: boolean
required:
- compatible
- reg
- max-brightness
- default-brightness
unevaluatedProperties: false
examples:
- |
i2c {
#address-cells = <1>;
#size-cells = <0>;
/* Backlight with PWM control */
backlight_pwm: backlight@17 {
compatible = "mps,mp3309c";
reg = <0x17>;
pwms = <&pwm1 0 3333333 0>; /* 300 Hz --> (1/f) * 1*10^9 */
max-brightness = <100>;
default-brightness = <80>;
mps,overvoltage-protection-microvolt = <24000000>;
};
};

View File

@ -11,6 +11,9 @@ maintainers:
- Daniel Thompson <daniel.thompson@linaro.org> - Daniel Thompson <daniel.thompson@linaro.org>
- Jingoo Han <jingoohan1@gmail.com> - Jingoo Han <jingoohan1@gmail.com>
allOf:
- $ref: common.yaml#
properties: properties:
compatible: compatible:
const: pwm-backlight const: pwm-backlight
@ -39,21 +42,6 @@ properties:
Delay in ms between disabling the backlight using GPIO and setting PWM Delay in ms between disabling the backlight using GPIO and setting PWM
value to 0. value to 0.
brightness-levels:
description:
Array of distinct brightness levels. Typically these are in the range
from 0 to 255, but any range starting at 0 will do. The actual brightness
level (PWM duty cycle) will be interpolated from these values. 0 means a
0% duty cycle (darkest/off), while the last value in the array represents
a 100% duty cycle (brightest).
$ref: /schemas/types.yaml#/definitions/uint32-array
default-brightness-level:
description:
The default brightness level (index into the array defined by the
"brightness-levels" property).
$ref: /schemas/types.yaml#/definitions/uint32
num-interpolated-steps: num-interpolated-steps:
description: description:
Number of interpolated steps between each value of brightness-levels Number of interpolated steps between each value of brightness-levels
@ -69,7 +57,7 @@ required:
- compatible - compatible
- pwms - pwms
additionalProperties: false unevaluatedProperties: false
examples: examples:
- | - |

View File

@ -626,9 +626,14 @@ static void pwm_backlight_remove(struct platform_device *pdev)
{ {
struct backlight_device *bl = platform_get_drvdata(pdev); struct backlight_device *bl = platform_get_drvdata(pdev);
struct pwm_bl_data *pb = bl_get_data(bl); struct pwm_bl_data *pb = bl_get_data(bl);
struct pwm_state state;
backlight_device_unregister(bl); backlight_device_unregister(bl);
pwm_backlight_power_off(pb); pwm_backlight_power_off(pb);
pwm_get_state(pb->pwm, &state);
state.duty_cycle = 0;
state.enabled = false;
pwm_apply_state(pb->pwm, &state);
if (pb->exit) if (pb->exit)
pb->exit(&pdev->dev); pb->exit(&pdev->dev);
@ -638,8 +643,13 @@ static void pwm_backlight_shutdown(struct platform_device *pdev)
{ {
struct backlight_device *bl = platform_get_drvdata(pdev); struct backlight_device *bl = platform_get_drvdata(pdev);
struct pwm_bl_data *pb = bl_get_data(bl); struct pwm_bl_data *pb = bl_get_data(bl);
struct pwm_state state;
pwm_backlight_power_off(pb); pwm_backlight_power_off(pb);
pwm_get_state(pb->pwm, &state);
state.duty_cycle = 0;
state.enabled = false;
pwm_apply_state(pb->pwm, &state);
} }
#ifdef CONFIG_PM_SLEEP #ifdef CONFIG_PM_SLEEP
@ -647,12 +657,24 @@ static int pwm_backlight_suspend(struct device *dev)
{ {
struct backlight_device *bl = dev_get_drvdata(dev); struct backlight_device *bl = dev_get_drvdata(dev);
struct pwm_bl_data *pb = bl_get_data(bl); struct pwm_bl_data *pb = bl_get_data(bl);
struct pwm_state state;
if (pb->notify) if (pb->notify)
pb->notify(pb->dev, 0); pb->notify(pb->dev, 0);
pwm_backlight_power_off(pb); pwm_backlight_power_off(pb);
/*
* Note that disabling the PWM doesn't guarantee that the output stays
* at its inactive state. However without the PWM disabled, the PWM
* driver refuses to suspend. So disable here even though this might
* enable the backlight on poorly designed boards.
*/
pwm_get_state(pb->pwm, &state);
state.duty_cycle = 0;
state.enabled = false;
pwm_apply_state(pb->pwm, &state);
if (pb->notify_after) if (pb->notify_after)
pb->notify_after(pb->dev, 0); pb->notify_after(pb->dev, 0);