Commit 75b9fcb5 authored by Linus Torvalds's avatar Linus Torvalds

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

Pull backlight updates from Lee Jones:
 "Core Framework:
   - Change maintainer email address

  Fix-ups:
   - Obtain OCP level from Device Tree; rt4831-backlight
   - DT fix-ups/conversions; richtek,rt4831-backlight
   - Remove unused code / functionatlity; platform_lcd
   - Switch to atomic PWM API; lp855x_bl

* tag 'backlight-next-5.20' of git://git.kernel.org/pub/scm/linux/kernel/git/lee/backlight:
  MAINTAINERS: Use Lee Jones' kernel.org address for Backlight submissions
  backlight: lp855x: Switch to atomic PWM API
  dt-bindings: backlight: Update Lee Jones' email address
  Revert "drivers/video/backlight/platform_lcd.c: add support for device tree based probe"
  backlight: rt4831: Apply ocp level from devicetree
  dt-bindings: backlight: rt4831: Add the new ocp level property
parents 613b2a82 fe201f6f
......@@ -7,7 +7,7 @@ $schema: http://devicetree.org/meta-schemas/core.yaml#
title: Common backlight properties
maintainers:
- Lee Jones <lee.jones@linaro.org>
- Lee Jones <lee@kernel.org>
- Daniel Thompson <daniel.thompson@linaro.org>
- Jingoo Han <jingoohan1@gmail.com>
......
......@@ -7,7 +7,7 @@ $schema: http://devicetree.org/meta-schemas/core.yaml#
title: gpio-backlight bindings
maintainers:
- Lee Jones <lee.jones@linaro.org>
- Lee Jones <lee@kernel.org>
- Daniel Thompson <daniel.thompson@linaro.org>
- Jingoo Han <jingoohan1@gmail.com>
......
......@@ -7,7 +7,7 @@ $schema: http://devicetree.org/meta-schemas/core.yaml#
title: led-backlight bindings
maintainers:
- Lee Jones <lee.jones@linaro.org>
- Lee Jones <lee@kernel.org>
- Daniel Thompson <daniel.thompson@linaro.org>
- Jingoo Han <jingoohan1@gmail.com>
......
......@@ -7,7 +7,7 @@ $schema: http://devicetree.org/meta-schemas/core.yaml#
title: TI LM3630A High-Efficiency Dual-String White LED
maintainers:
- Lee Jones <lee.jones@linaro.org>
- Lee Jones <lee@kernel.org>
- Daniel Thompson <daniel.thompson@linaro.org>
- Jingoo Han <jingoohan1@gmail.com>
......
......@@ -7,7 +7,7 @@ $schema: http://devicetree.org/meta-schemas/core.yaml#
title: pwm-backlight bindings
maintainers:
- Lee Jones <lee.jones@linaro.org>
- Lee Jones <lee@kernel.org>
- Daniel Thompson <daniel.thompson@linaro.org>
- Jingoo Han <jingoohan1@gmail.com>
......
......@@ -47,6 +47,11 @@ properties:
minimum: 0
maximum: 3
richtek,bled-ocp-microamp:
description: |
Backlight over current protection level.
enum: [900000, 1200000, 1500000, 1800000]
richtek,channel-use:
description: |
Backlight LED channel to be used.
......
......@@ -3501,7 +3501,7 @@ W: https://wireless.wiki.kernel.org/en/users/Drivers/b43
F: drivers/net/wireless/broadcom/b43legacy/
BACKLIGHT CLASS/SUBSYSTEM
M: Lee Jones <lee.jones@linaro.org>
M: Lee Jones <lee@kernel.org>
M: Daniel Thompson <daniel.thompson@linaro.org>
M: Jingoo Han <jingoohan1@gmail.com>
L: dri-devel@lists.freedesktop.org
......
......@@ -218,9 +218,8 @@ static int lp855x_configure(struct lp855x *lp)
static void lp855x_pwm_ctrl(struct lp855x *lp, int br, int max_br)
{
unsigned int period = lp->pdata->period_ns;
unsigned int duty = br * period / max_br;
struct pwm_device *pwm;
struct pwm_state state;
/* request pwm device with the consumer name */
if (!lp->pwm) {
......@@ -230,18 +229,16 @@ static void lp855x_pwm_ctrl(struct lp855x *lp, int br, int max_br)
lp->pwm = pwm;
/*
* FIXME: pwm_apply_args() should be removed when switching to
* the atomic PWM API.
*/
pwm_apply_args(pwm);
pwm_init_state(lp->pwm, &state);
} else {
pwm_get_state(lp->pwm, &state);
}
pwm_config(lp->pwm, duty, period);
if (duty)
pwm_enable(lp->pwm);
else
pwm_disable(lp->pwm);
state.period = lp->pdata->period_ns;
state.duty_cycle = div_u64(br * state.period, max_br);
state.enabled = state.duty_cycle;
pwm_apply_state(lp->pwm, &state);
}
static int lp855x_bl_update_status(struct backlight_device *bl)
......
......@@ -12,7 +12,6 @@
#include <linux/fb.h>
#include <linux/backlight.h>
#include <linux/lcd.h>
#include <linux/of.h>
#include <linux/slab.h>
#include <video/platform_lcd.h>
......@@ -133,19 +132,10 @@ static int platform_lcd_resume(struct device *dev)
static SIMPLE_DEV_PM_OPS(platform_lcd_pm_ops, platform_lcd_suspend,
platform_lcd_resume);
#ifdef CONFIG_OF
static const struct of_device_id platform_lcd_of_match[] = {
{ .compatible = "platform-lcd" },
{},
};
MODULE_DEVICE_TABLE(of, platform_lcd_of_match);
#endif
static struct platform_driver platform_lcd_driver = {
.driver = {
.name = "platform-lcd",
.pm = &platform_lcd_pm_ops,
.of_match_table = of_match_ptr(platform_lcd_of_match),
},
.probe = platform_lcd_probe,
};
......
......@@ -12,6 +12,7 @@
#define RT4831_REG_BLCFG 0x02
#define RT4831_REG_BLDIML 0x04
#define RT4831_REG_ENABLE 0x08
#define RT4831_REG_BLOPT2 0x11
#define RT4831_BLMAX_BRIGHTNESS 2048
......@@ -23,6 +24,11 @@
#define RT4831_BLDIML_MASK GENMASK(2, 0)
#define RT4831_BLDIMH_MASK GENMASK(10, 3)
#define RT4831_BLDIMH_SHIFT 3
#define RT4831_BLOCP_MASK GENMASK(1, 0)
#define RT4831_BLOCP_MINUA 900000
#define RT4831_BLOCP_MAXUA 1800000
#define RT4831_BLOCP_STEPUA 300000
struct rt4831_priv {
struct device *dev;
......@@ -85,7 +91,7 @@ static int rt4831_parse_backlight_properties(struct rt4831_priv *priv,
{
struct device *dev = priv->dev;
u8 propval;
u32 brightness;
u32 brightness, ocp_uA;
unsigned int val = 0;
int ret;
......@@ -120,6 +126,31 @@ static int rt4831_parse_backlight_properties(struct rt4831_priv *priv,
if (ret)
return ret;
/*
* This OCP level is used to protect and limit the inductor current.
* If inductor peak current reach the level, low-side MOSFET will be
* turned off. Meanwhile, the output channel current may be limited.
* To match the configured channel current, the inductor chosen must
* be higher than the OCP level.
*
* Not like the OVP level, the default 21V can be used in the most
* application. But if the chosen OCP level is smaller than needed,
* it will also affect the backlight channel output current to be
* smaller than the register setting.
*/
ret = device_property_read_u32(dev, "richtek,bled-ocp-microamp",
&ocp_uA);
if (!ret) {
ocp_uA = clamp_val(ocp_uA, RT4831_BLOCP_MINUA,
RT4831_BLOCP_MAXUA);
val = DIV_ROUND_UP(ocp_uA - RT4831_BLOCP_MINUA,
RT4831_BLOCP_STEPUA);
ret = regmap_update_bits(priv->regmap, RT4831_REG_BLOPT2,
RT4831_BLOCP_MASK, val);
if (ret)
return ret;
}
ret = device_property_read_u8(dev, "richtek,channel-use", &propval);
if (ret) {
dev_err(dev, "richtek,channel-use DT property missing\n");
......
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