Commit 38984d78 authored by Linus Torvalds's avatar Linus Torvalds

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
parents 27bc0782 d5272d39
......@@ -33,4 +33,21 @@ properties:
due to restrictions in a specific system, such as mounting conditions.
$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
......@@ -16,6 +16,9 @@ description:
can also be used to describe a backlight device controlled by the output of
a LED driver.
allOf:
- $ref: common.yaml#
properties:
compatible:
const: led-backlight
......@@ -26,25 +29,11 @@ properties:
items:
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:
- compatible
- leds
additionalProperties: false
unevaluatedProperties: false
examples:
- |
......
# 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>;
};
};
......@@ -11,6 +11,9 @@ maintainers:
- Daniel Thompson <daniel.thompson@linaro.org>
- Jingoo Han <jingoohan1@gmail.com>
allOf:
- $ref: common.yaml#
properties:
compatible:
const: pwm-backlight
......@@ -39,21 +42,6 @@ properties:
Delay in ms between disabling the backlight using GPIO and setting PWM
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:
description:
Number of interpolated steps between each value of brightness-levels
......@@ -69,7 +57,7 @@ required:
- compatible
- pwms
additionalProperties: false
unevaluatedProperties: false
examples:
- |
......
......@@ -626,9 +626,14 @@ static void pwm_backlight_remove(struct platform_device *pdev)
{
struct backlight_device *bl = platform_get_drvdata(pdev);
struct pwm_bl_data *pb = bl_get_data(bl);
struct pwm_state state;
backlight_device_unregister(bl);
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)
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 pwm_bl_data *pb = bl_get_data(bl);
struct pwm_state state;
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
......@@ -647,12 +657,24 @@ static int pwm_backlight_suspend(struct device *dev)
{
struct backlight_device *bl = dev_get_drvdata(dev);
struct pwm_bl_data *pb = bl_get_data(bl);
struct pwm_state state;
if (pb->notify)
pb->notify(pb->dev, 0);
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)
pb->notify_after(pb->dev, 0);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment