- 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:
commit
38984d7872
@ -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
|
||||||
|
@ -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:
|
||||||
- |
|
- |
|
||||||
|
@ -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>;
|
||||||
|
};
|
||||||
|
};
|
@ -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:
|
||||||
- |
|
- |
|
||||||
|
@ -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);
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user