static struct clk *pwm_clk;
static struct backlight_device *rk29_bl;
static int suspend_flag = 0;
-#define BACKLIGHT_SEE_MINVALUE 52
static int rk29_bl_update_status(struct backlight_device *bl)
{
if (suspend_flag)
return 0;
+ if (bl->props.brightness < rk29_bl_info->min_brightness) /*avoid can't view screen when close backlight*/
+ bl->props.brightness = rk29_bl_info->min_brightness;
+
div_total = read_pwm_reg(id, PWM_REG_LRC);
if (ref) {
divh = div_total*(bl->props.brightness)/BL_STEP;
- DBG(">>>%s-->%d bl->props.brightness == %d, div_total == %d , divh == %d\n",__FUNCTION__,__LINE__,bl->props.brightness, div_total, divh);
} else {
- DBG(">>>%s-->%d bl->props.brightness == %d\n",__FUNCTION__,__LINE__,bl->props.brightness);
- if(bl->props.brightness < BACKLIGHT_SEE_MINVALUE) /*avoid can't view screen when close backlight*/
- bl->props.brightness = BACKLIGHT_SEE_MINVALUE;
divh = div_total*(BL_STEP-bl->props.brightness)/BL_STEP;
}
write_pwm_reg(id, PWM_REG_HRC, divh);
+
+ DBG(">>>%s-->%d brightness = %d, div_total = %d, divh = %d\n",__FUNCTION__,__LINE__,bl->props.brightness, div_total, divh);
return 0;
}
static void rk29_backlight_work_func(struct work_struct *work)
{
+ suspend_flag = 0;
rk29_bl_update_status(rk29_bl);
}
static DECLARE_DELAYED_WORK(rk29_backlight_work, rk29_backlight_work_func);
struct rk29_bl_info *rk29_bl_info = bl_get_data(rk29_bl);
int brightness = rk29_bl->props.brightness;
+ cancel_delayed_work_sync(&rk29_backlight_work);
+
if (rk29_bl->props.brightness) {
rk29_bl->props.brightness = 0;
rk29_bl_update_status(rk29_bl);
rk29_bl_info->pwm_resume();
clk_enable(pwm_clk);
- suspend_flag = 0;
- schedule_delayed_work(&rk29_backlight_work, msecs_to_jiffies(30));
+ schedule_delayed_work(&rk29_backlight_work, msecs_to_jiffies(rk29_bl_info->delay_ms));
}
static struct early_suspend bl_early_suspend = {
return -EEXIST;
}
+ if (!rk29_bl_info->delay_ms)
+ rk29_bl_info->delay_ms = 30;
+
+ if (rk29_bl_info->min_brightness < 0 || rk29_bl_info->min_brightness > BL_STEP)
+ rk29_bl_info->min_brightness = 52;
+
if (rk29_bl_info && rk29_bl_info->io_init) {
rk29_bl_info->io_init();
}
rk29_bl->props.max_brightness = BL_STEP;
rk29_bl->props.brightness = BL_STEP / 2;
- schedule_delayed_work(&rk29_backlight_work, msecs_to_jiffies(30));
+ schedule_delayed_work(&rk29_backlight_work, msecs_to_jiffies(rk29_bl_info->delay_ms));
register_early_suspend(&bl_early_suspend);
static void rk29_backlight_shutdown(struct platform_device *pdev)
{
+ struct rk29_bl_info *rk29_bl_info = pdev->dev.platform_data;
+
rk29_bl->props.brightness >>= 1;
rk29_bl_update_status(rk29_bl);
mdelay(100);
rk29_bl->props.brightness = 0;
rk29_bl_update_status(rk29_bl);
+
+ if (rk29_bl_info && rk29_bl_info->io_deinit)
+ rk29_bl_info->io_deinit();
}
static struct platform_driver rk29_backlight_driver = {