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);
}
Exemple #2
0
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);
	}
}