Lines Matching refs:pb
39 static void pwm_backlight_power_on(struct pwm_bl_data *pb)
43 if (pb->enabled)
46 if (pb->power_supply) {
47 err = regulator_enable(pb->power_supply);
49 dev_err(pb->dev, "failed to enable power supply\n");
52 if (pb->post_pwm_on_delay)
53 msleep(pb->post_pwm_on_delay);
55 gpiod_set_value_cansleep(pb->enable_gpio, 1);
57 pb->enabled = true;
60 static void pwm_backlight_power_off(struct pwm_bl_data *pb)
62 if (!pb->enabled)
65 gpiod_set_value_cansleep(pb->enable_gpio, 0);
67 if (pb->pwm_off_delay)
68 msleep(pb->pwm_off_delay);
70 if (pb->power_supply)
71 regulator_disable(pb->power_supply);
72 pb->enabled = false;
75 static int compute_duty_cycle(struct pwm_bl_data *pb, int brightness, struct pwm_state *state)
77 unsigned int lth = pb->lth_brightness;
80 if (pb->levels)
81 duty_cycle = pb->levels[brightness];
86 do_div(duty_cycle, pb->scale);
93 struct pwm_bl_data *pb = bl_get_data(bl);
97 if (pb->notify)
98 brightness = pb->notify(pb->dev, brightness);
101 pwm_get_state(pb->pwm, &state);
102 state.duty_cycle = compute_duty_cycle(pb, brightness, &state);
104 pwm_apply_might_sleep(pb->pwm, &state);
106 pwm_backlight_power_on(pb);
108 pwm_backlight_power_off(pb);
110 pwm_get_state(pb->pwm, &state);
120 state.enabled = !pb->power_supply && !pb->enable_gpio;
121 pwm_apply_might_sleep(pb->pwm, &state);
124 if (pb->notify_after)
125 pb->notify_after(pb->dev, brightness);
397 static int pwm_backlight_initial_power_state(const struct pwm_bl_data *pb)
399 struct device_node *node = pb->dev->of_node;
406 if (pb->enable_gpio && gpiod_get_value_cansleep(pb->enable_gpio) == 0)
409 if (pb->power_supply && !regulator_is_enabled(pb->power_supply))
412 if (!pwm_is_enabled(pb->pwm))
419 gpiod_direction_output(pb->enable_gpio, active);
422 * Do not change pb->enabled here! pb->enabled essentially
446 struct pwm_bl_data *pb;
466 pb = devm_kzalloc(&pdev->dev, sizeof(*pb), GFP_KERNEL);
467 if (!pb) {
472 pb->notify = data->notify;
473 pb->notify_after = data->notify_after;
474 pb->exit = data->exit;
475 pb->dev = &pdev->dev;
476 pb->enabled = false;
477 pb->post_pwm_on_delay = data->post_pwm_on_delay;
478 pb->pwm_off_delay = data->pwm_off_delay;
480 pb->enable_gpio = devm_gpiod_get_optional(&pdev->dev, "enable",
482 if (IS_ERR(pb->enable_gpio)) {
483 ret = dev_err_probe(&pdev->dev, PTR_ERR(pb->enable_gpio),
488 pb->power_supply = devm_regulator_get_optional(&pdev->dev, "power");
489 if (IS_ERR(pb->power_supply)) {
490 ret = PTR_ERR(pb->power_supply);
492 pb->power_supply = NULL;
500 pb->pwm = devm_pwm_get(&pdev->dev, NULL);
501 if (IS_ERR(pb->pwm)) {
502 ret = dev_err_probe(&pdev->dev, PTR_ERR(pb->pwm),
510 pwm_init_state(pb->pwm, &state);
521 ret = pwm_apply_might_sleep(pb->pwm, &state);
531 pb->levels = data->levels;
539 if (data->levels[i] > pb->scale)
540 pb->scale = data->levels[i];
556 pwm_get_state(pb->pwm, &state);
567 if (data->levels[i] > pb->scale)
568 pb->scale = data->levels[i];
570 pb->levels = data->levels;
579 pb->scale = data->max_brightness;
582 pb->lth_brightness = data->lth_brightness * (div_u64(state.period,
583 pb->scale));
587 bl = backlight_device_register(dev_name(&pdev->dev), &pdev->dev, pb,
603 bl->props.power = pwm_backlight_initial_power_state(pb);
618 struct pwm_bl_data *pb = bl_get_data(bl);
622 pwm_backlight_power_off(pb);
623 pwm_get_state(pb->pwm, &state);
626 pwm_apply_might_sleep(pb->pwm, &state);
628 if (pb->exit)
629 pb->exit(&pdev->dev);
635 struct pwm_bl_data *pb = bl_get_data(bl);
638 pwm_backlight_power_off(pb);
639 pwm_get_state(pb->pwm, &state);
642 pwm_apply_might_sleep(pb->pwm, &state);
649 struct pwm_bl_data *pb = bl_get_data(bl);
652 if (pb->notify)
653 pb->notify(pb->dev, 0);
655 pwm_backlight_power_off(pb);
663 pwm_get_state(pb->pwm, &state);
666 pwm_apply_might_sleep(pb->pwm, &state);
668 if (pb->notify_after)
669 pb->notify_after(pb->dev, 0);