static void lp855x_led_work(struct work_struct *work) { struct lp855x *lp = container_of(work, struct lp855x, work); enum lp855x_brightness_ctrl_mode mode; int br; mutex_lock(&lp->xfer_lock); br = lp->cdev.brightness; mode = lp->pdata->mode; if (!br && lp->stored_br) (void)lp855x_set_slope_filter(lp, false); else if (br && !lp->stored_br) (void)lp855x_set_slope_filter(lp, true); lp->stored_br = br; if (mode == PWM_BASED) { struct lp855x_pwm_data *pd = &lp->pdata->pwm_data; int max_br = lp->cdev.max_brightness; if (pd->pwm_set_intensity) pd->pwm_set_intensity(br, max_br); } else if (mode == REGISTER_BASED) lp855x_write_byte(lp, BRIGHTNESS_CTRL, br); mutex_unlock(&lp->xfer_lock); }
static int lp855x_bl_update_status(struct backlight_device *bl) { struct lp855x *lp = bl_get_data(bl); enum lp855x_brightness_ctrl_mode mode = lp->pdata->mode; int br; static int stored_br; mutex_lock(&lp->xfer_lock); if (bl->props.state & BL_CORE_SUSPENDED) bl->props.brightness = 0; br = bl->props.brightness; if (bl->props.state & BL_CORE_FBBLANK) br = 0; if (!br && stored_br) (void)lp855x_set_slope_filter(lp, false); else if (br && !stored_br) (void)lp855x_set_slope_filter(lp, true); stored_br = br; if (mode == PWM_BASED) { struct lp855x_pwm_data *pd = &lp->pdata->pwm_data; int max_br = bl->props.max_brightness; if (pd->pwm_set_intensity) pd->pwm_set_intensity(br, max_br); } else if (mode == REGISTER_BASED) lp855x_write_byte(lp, BRIGHTNESS_CTRL, br); mutex_unlock(&lp->xfer_lock); return br; }
static void lp855x_led_work(struct work_struct *work) { struct lp855x *lp = container_of(work, struct lp855x, work); enum lp855x_brightness_ctrl_mode mode; int br; br = lp->cdev.brightness; mode = lp->mode; if (!br && lp->stored_br) (void)lp855x_set_slope_filter(lp, false); else if (br && !lp->stored_br) (void)lp855x_set_slope_filter(lp, true); lp->stored_br = br; if (mode == PWM_BASED) { int max_br = lp->cdev.max_brightness; lp855x_pwm_ctrl(lp, br, max_br); } else if (mode == REGISTER_BASED) { lp855x_write_brightness(lp, lp->cfg->is_8bit_brightness, br); } }