Commit 3a73e73a authored by Linus Torvalds's avatar Linus Torvalds

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

Pull backlight updates from Lee Jones:
 "Fix-ups:
   - Use new of_node_name_eq() API call

  Bug Fixes:
   - Internally track 'enabled' state in pwm_bl
   - Fix auto-generated pwm_bl brightness tables parsed by DT

* tag 'backlight-next-4.21' of git://git.kernel.org/pub/scm/linux/kernel/git/lee/backlight:
  backlight: 88pm860x_bl: Use of_node_name_eq for node name comparisons
  backlight: pwm_bl: Fix devicetree parsing with auto-generated brightness tables
  backlight: pwm_bl: Re-add driver internal enabled tracking
parents 1c7fc5cb 3cee7a7d
...@@ -174,7 +174,7 @@ static int pm860x_backlight_dt_init(struct platform_device *pdev, ...@@ -174,7 +174,7 @@ static int pm860x_backlight_dt_init(struct platform_device *pdev,
return -ENODEV; return -ENODEV;
} }
for_each_child_of_node(nproot, np) { for_each_child_of_node(nproot, np) {
if (!of_node_cmp(np->name, name)) { if (of_node_name_eq(np, name)) {
of_property_read_u32(np, "marvell,88pm860x-iset", of_property_read_u32(np, "marvell,88pm860x-iset",
&iset); &iset);
data->iset = PM8606_WLED_CURRENT(iset); data->iset = PM8606_WLED_CURRENT(iset);
......
...@@ -30,6 +30,7 @@ struct pwm_bl_data { ...@@ -30,6 +30,7 @@ struct pwm_bl_data {
struct device *dev; struct device *dev;
unsigned int lth_brightness; unsigned int lth_brightness;
unsigned int *levels; unsigned int *levels;
bool enabled;
struct regulator *power_supply; struct regulator *power_supply;
struct gpio_desc *enable_gpio; struct gpio_desc *enable_gpio;
unsigned int scale; unsigned int scale;
...@@ -50,7 +51,7 @@ static void pwm_backlight_power_on(struct pwm_bl_data *pb) ...@@ -50,7 +51,7 @@ static void pwm_backlight_power_on(struct pwm_bl_data *pb)
int err; int err;
pwm_get_state(pb->pwm, &state); pwm_get_state(pb->pwm, &state);
if (state.enabled) if (pb->enabled)
return; return;
err = regulator_enable(pb->power_supply); err = regulator_enable(pb->power_supply);
...@@ -65,6 +66,8 @@ static void pwm_backlight_power_on(struct pwm_bl_data *pb) ...@@ -65,6 +66,8 @@ static void pwm_backlight_power_on(struct pwm_bl_data *pb)
if (pb->enable_gpio) if (pb->enable_gpio)
gpiod_set_value_cansleep(pb->enable_gpio, 1); gpiod_set_value_cansleep(pb->enable_gpio, 1);
pb->enabled = true;
} }
static void pwm_backlight_power_off(struct pwm_bl_data *pb) static void pwm_backlight_power_off(struct pwm_bl_data *pb)
...@@ -72,7 +75,7 @@ static void pwm_backlight_power_off(struct pwm_bl_data *pb) ...@@ -72,7 +75,7 @@ static void pwm_backlight_power_off(struct pwm_bl_data *pb)
struct pwm_state state; struct pwm_state state;
pwm_get_state(pb->pwm, &state); pwm_get_state(pb->pwm, &state);
if (!state.enabled) if (!pb->enabled)
return; return;
if (pb->enable_gpio) if (pb->enable_gpio)
...@@ -86,6 +89,7 @@ static void pwm_backlight_power_off(struct pwm_bl_data *pb) ...@@ -86,6 +89,7 @@ static void pwm_backlight_power_off(struct pwm_bl_data *pb)
pwm_apply_state(pb->pwm, &state); pwm_apply_state(pb->pwm, &state);
regulator_disable(pb->power_supply); regulator_disable(pb->power_supply);
pb->enabled = false;
} }
static int compute_duty_cycle(struct pwm_bl_data *pb, int brightness) static int compute_duty_cycle(struct pwm_bl_data *pb, int brightness)
...@@ -268,6 +272,16 @@ static int pwm_backlight_parse_dt(struct device *dev, ...@@ -268,6 +272,16 @@ static int pwm_backlight_parse_dt(struct device *dev,
memset(data, 0, sizeof(*data)); memset(data, 0, sizeof(*data));
/*
* These values are optional and set as 0 by default, the out values
* are modified only if a valid u32 value can be decoded.
*/
of_property_read_u32(node, "post-pwm-on-delay-ms",
&data->post_pwm_on_delay);
of_property_read_u32(node, "pwm-off-delay-ms", &data->pwm_off_delay);
data->enable_gpio = -EINVAL;
/* /*
* Determine the number of brightness levels, if this property is not * Determine the number of brightness levels, if this property is not
* set a default table of brightness levels will be used. * set a default table of brightness levels will be used.
...@@ -380,15 +394,6 @@ static int pwm_backlight_parse_dt(struct device *dev, ...@@ -380,15 +394,6 @@ static int pwm_backlight_parse_dt(struct device *dev,
data->max_brightness--; data->max_brightness--;
} }
/*
* These values are optional and set as 0 by default, the out values
* are modified only if a valid u32 value can be decoded.
*/
of_property_read_u32(node, "post-pwm-on-delay-ms",
&data->post_pwm_on_delay);
of_property_read_u32(node, "pwm-off-delay-ms", &data->pwm_off_delay);
data->enable_gpio = -EINVAL;
return 0; return 0;
} }
...@@ -483,6 +488,7 @@ static int pwm_backlight_probe(struct platform_device *pdev) ...@@ -483,6 +488,7 @@ static int pwm_backlight_probe(struct platform_device *pdev)
pb->check_fb = data->check_fb; pb->check_fb = data->check_fb;
pb->exit = data->exit; pb->exit = data->exit;
pb->dev = &pdev->dev; pb->dev = &pdev->dev;
pb->enabled = false;
pb->post_pwm_on_delay = data->post_pwm_on_delay; pb->post_pwm_on_delay = data->post_pwm_on_delay;
pb->pwm_off_delay = data->pwm_off_delay; pb->pwm_off_delay = data->pwm_off_delay;
......
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