Commit 38984d78 authored by Linus Torvalds's avatar Linus Torvalds
Browse files
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
Loading
Loading
Loading
Loading
+17 −0
Original line number Diff line number Diff line
@@ -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
+4 −15
Original line number Diff line number Diff line
@@ -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:
  - |
+73 −0
Original line number Diff line number Diff line
# 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>;
        };
    };
+4 −16
Original line number Diff line number Diff line
@@ -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:
  - |
+22 −0
Original line number Diff line number Diff line
@@ -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);