Commit 8b0bce05 authored by ChiYuan Huang's avatar ChiYuan Huang Committed by Lee Jones

backlight: rt4831: Apply ocp level from devicetree

Add 'richtek,bled-ocp-microamp' property parsing in
device_property_init function.

This value may configure prior to the kernel driver. If it's not specified in
devicetree, keep the original setting. Else, use clamp to align the
value in min/max range and also roundup to choose the best selector.
Reported-by: default avatarLucas Tsai <lucas_tsai@richtek.com>
Signed-off-by: default avatarChiYuan Huang <cy_huang@richtek.com>
Reviewed-by: default avatarDaniel Thompson <daniel.thompson@linaro.org>
Signed-off-by: default avatarLee Jones <lee.jones@linaro.org>
Link: https://lore.kernel.org/r/1655807788-24511-3-git-send-email-u0084500@gmail.com
parent 27e5c654
...@@ -12,6 +12,7 @@ ...@@ -12,6 +12,7 @@
#define RT4831_REG_BLCFG 0x02 #define RT4831_REG_BLCFG 0x02
#define RT4831_REG_BLDIML 0x04 #define RT4831_REG_BLDIML 0x04
#define RT4831_REG_ENABLE 0x08 #define RT4831_REG_ENABLE 0x08
#define RT4831_REG_BLOPT2 0x11
#define RT4831_BLMAX_BRIGHTNESS 2048 #define RT4831_BLMAX_BRIGHTNESS 2048
...@@ -23,6 +24,11 @@ ...@@ -23,6 +24,11 @@
#define RT4831_BLDIML_MASK GENMASK(2, 0) #define RT4831_BLDIML_MASK GENMASK(2, 0)
#define RT4831_BLDIMH_MASK GENMASK(10, 3) #define RT4831_BLDIMH_MASK GENMASK(10, 3)
#define RT4831_BLDIMH_SHIFT 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 rt4831_priv {
struct device *dev; struct device *dev;
...@@ -85,7 +91,7 @@ static int rt4831_parse_backlight_properties(struct rt4831_priv *priv, ...@@ -85,7 +91,7 @@ static int rt4831_parse_backlight_properties(struct rt4831_priv *priv,
{ {
struct device *dev = priv->dev; struct device *dev = priv->dev;
u8 propval; u8 propval;
u32 brightness; u32 brightness, ocp_uA;
unsigned int val = 0; unsigned int val = 0;
int ret; int ret;
...@@ -120,6 +126,31 @@ static int rt4831_parse_backlight_properties(struct rt4831_priv *priv, ...@@ -120,6 +126,31 @@ static int rt4831_parse_backlight_properties(struct rt4831_priv *priv,
if (ret) if (ret)
return 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); ret = device_property_read_u8(dev, "richtek,channel-use", &propval);
if (ret) { if (ret) {
dev_err(dev, "richtek,channel-use DT property missing\n"); 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