diff options
Diffstat (limited to 'recipes/linux/linux-openmoko-2.6.32/0010-Simplify-the-JBT6k74-driver.patch')
-rw-r--r-- | recipes/linux/linux-openmoko-2.6.32/0010-Simplify-the-JBT6k74-driver.patch | 667 |
1 files changed, 0 insertions, 667 deletions
diff --git a/recipes/linux/linux-openmoko-2.6.32/0010-Simplify-the-JBT6k74-driver.patch b/recipes/linux/linux-openmoko-2.6.32/0010-Simplify-the-JBT6k74-driver.patch deleted file mode 100644 index ca0c2af15b..0000000000 --- a/recipes/linux/linux-openmoko-2.6.32/0010-Simplify-the-JBT6k74-driver.patch +++ /dev/null @@ -1,667 +0,0 @@ -From cb84d543b9465a8ea48b504b1dfb745c6682a50e Mon Sep 17 00:00:00 2001 -From: Thomas White <taw@bitwiz.org.uk> -Date: Sun, 28 Feb 2010 15:20:57 +0100 -Subject: [PATCH 1/2] Simplify the JBT6k74 driver - -Simplify the JBT6k74 driver - -We don't need all the native sleep states - they just complicate things. Instead, just -use the LDO "power switch" to send it firmly to sleep and wake it up in a virgin state -each time. - -Signed-off-by: Thomas White <taw@bitwiz.org.uk> ---- - drivers/mfd/glamo/glamo-display.c | 116 ++++++++++++------------ - drivers/mfd/glamo/glamo-display.h | 2 + - drivers/mfd/glamo/glamo-drm-private.h | 10 ++ - drivers/mfd/glamo/glamo-kms-fb.c | 54 ++---------- - drivers/video/backlight/jbt6k74.c | 160 ++++++++------------------------- - include/linux/jbt6k74.h | 1 - - 6 files changed, 115 insertions(+), 228 deletions(-) - -diff --git a/drivers/mfd/glamo/glamo-display.c b/drivers/mfd/glamo/glamo-display.c -index 34a665a..a384c8b 100644 ---- a/drivers/mfd/glamo/glamo-display.c -+++ b/drivers/mfd/glamo/glamo-display.c -@@ -239,14 +239,6 @@ static int glamo_run_lcd_script(struct glamodrm_handle *gdrm, - } - - --extern void jbt6k74_action(int val); -- --/* Power on/off */ --static void glamo_crtc_dpms(struct drm_crtc *crtc, int mode) --{ --} -- -- - static bool glamo_crtc_mode_fixup(struct drm_crtc *crtc, - struct drm_display_mode *mode, - struct drm_display_mode *adjusted_mode) -@@ -275,6 +267,12 @@ static int glamo_crtc_mode_set_base(struct drm_crtc *crtc, int x, int y, - gcrtc = to_glamo_crtc(crtc); - gdrm = gcrtc->gdrm; /* Here it is! */ - -+ if ( !gcrtc->pixel_clock_on ) { -+ printk(KERN_WARNING "[glamo-drm] Refusing to set base while " -+ "pixel clock is off.\n"); -+ return -EBUSY; -+ } -+ - gfb = to_glamo_framebuffer(crtc->fb); - obj = gfb->obj; - gobj = obj->driver_private; -@@ -306,6 +304,12 @@ static int glamo_crtc_mode_set(struct drm_crtc *crtc, - gcrtc = to_glamo_crtc(crtc); - gdrm = gcrtc->gdrm; /* Here it is! */ - -+ if ( !gcrtc->pixel_clock_on ) { -+ printk(KERN_WARNING "[glamo-drm] Refusing to set mode while " -+ "pixel clock is off.\n"); -+ return -EBUSY; -+ } -+ - glamo_lcd_cmd_mode(gdrm, 1); - - glamo_engine_reclock(gdrm->glamo_core, GLAMO_ENGINE_LCD, mode->clock); -@@ -354,10 +358,47 @@ static int glamo_crtc_mode_set(struct drm_crtc *crtc, - - glamo_crtc_mode_set_base(crtc, 0, 0, old_fb); - -+ gcrtc->current_mode = *mode; -+ gcrtc->current_mode_set = 1; -+ gcrtc->current_fb = old_fb; -+ - return 0; - } - - -+extern void jbt6k74_action(int val); -+ -+/* This is not the right place to switch power on/off, because the helper -+ * stuff ends up calling this before/after setting the mode. We can't -+ * set modes with the display off (although backlight off would be OK) */ -+static void glamo_crtc_dpms(struct drm_crtc *crtc, int mode) -+{ -+ /* do nothing */ -+} -+ -+ -+void glamo_lcd_power(struct glamodrm_handle *gdrm, int mode) -+{ -+ struct drm_crtc *crtc = gdrm->crtc; -+ struct glamo_crtc *gcrtc = to_glamo_crtc(crtc); -+ -+ if ( mode ) { -+ glamo_engine_enable(gdrm->glamo_core, GLAMO_ENGINE_LCD); -+ gcrtc->pixel_clock_on = 1; -+ jbt6k74_action(1); -+ if ( gcrtc->current_mode_set ) { -+ glamo_crtc_mode_set(crtc, &gcrtc->current_mode, -+ &gcrtc->current_mode, 0, 0, -+ gcrtc->current_fb); -+ } -+ } else { -+ jbt6k74_action(0); -+ glamo_engine_suspend(gdrm->glamo_core, GLAMO_ENGINE_LCD); -+ gcrtc->pixel_clock_on = 0; -+ } -+} -+ -+ - static void glamo_crtc_prepare(struct drm_crtc *crtc) - { - } -@@ -725,6 +766,8 @@ int glamo_display_init(struct drm_device *dev) - + sizeof(struct drm_connector *), GFP_KERNEL); - if (glamo_crtc == NULL) return 1; - glamo_crtc->gdrm = gdrm; -+ gdrm->crtc = (struct drm_crtc *)glamo_crtc; -+ glamo_crtc->pixel_clock_on = 1; - glamo_crtc->blank_mode = DRM_MODE_DPMS_OFF; - drm_crtc_init(dev, &glamo_crtc->base, &glamo_crtc_funcs); - drm_crtc_helper_add(&glamo_crtc->base, &glamo_crtc_helper_funcs); -@@ -808,62 +851,23 @@ int glamo_display_init(struct drm_device *dev) - - void glamo_display_suspend(struct glamodrm_handle *gdrm) - { -- gdrm->saved_width = reg_read_lcd(gdrm, GLAMO_REG_LCD_WIDTH); -- gdrm->saved_height = reg_read_lcd(gdrm, GLAMO_REG_LCD_HEIGHT); -- gdrm->saved_pitch = reg_read_lcd(gdrm, GLAMO_REG_LCD_PITCH); -- gdrm->saved_htotal = reg_read_lcd(gdrm, GLAMO_REG_LCD_HORIZ_TOTAL); -- gdrm->saved_hrtrst = reg_read_lcd(gdrm, GLAMO_REG_LCD_HORIZ_RETR_START); -- gdrm->saved_hrtren = reg_read_lcd(gdrm, GLAMO_REG_LCD_HORIZ_RETR_END); -- gdrm->saved_hdspst = reg_read_lcd(gdrm, GLAMO_REG_LCD_HORIZ_DISP_START); -- gdrm->saved_hdspen = reg_read_lcd(gdrm, GLAMO_REG_LCD_HORIZ_DISP_END); -- gdrm->saved_vtotal = reg_read_lcd(gdrm, GLAMO_REG_LCD_VERT_TOTAL); -- gdrm->saved_vrtrst = reg_read_lcd(gdrm, GLAMO_REG_LCD_VERT_RETR_START); -- gdrm->saved_vrtren = reg_read_lcd(gdrm, GLAMO_REG_LCD_VERT_RETR_END); -- gdrm->saved_vdspst = reg_read_lcd(gdrm, GLAMO_REG_LCD_VERT_DISP_START); -- gdrm->saved_vdspen = reg_read_lcd(gdrm, GLAMO_REG_LCD_VERT_DISP_END); -+ /* do nothing */ - } - - - void glamo_display_resume(struct glamodrm_handle *gdrm) - { -+ struct drm_crtc *crtc = gdrm->crtc; -+ struct glamo_crtc *gcrtc = to_glamo_crtc(crtc); -+ - glamo_engine_enable(gdrm->glamo_core, GLAMO_ENGINE_LCD); - glamo_engine_reset(gdrm->glamo_core, GLAMO_ENGINE_LCD); - glamo_run_lcd_script(gdrm, lcd_init_script, - ARRAY_SIZE(lcd_init_script)); - -- /* Restore timings */ -- glamo_lcd_cmd_mode(gdrm, 1); -- glamo_engine_reclock(gdrm->glamo_core, GLAMO_ENGINE_LCD, -- gdrm->saved_clock); -- reg_set_bit_mask_lcd(gdrm, GLAMO_REG_LCD_WIDTH, GLAMO_LCD_WIDTH_MASK, -- gdrm->saved_width); -- reg_set_bit_mask_lcd(gdrm, GLAMO_REG_LCD_HEIGHT, GLAMO_LCD_HEIGHT_MASK, -- gdrm->saved_height); -- reg_set_bit_mask_lcd(gdrm, GLAMO_REG_LCD_PITCH, GLAMO_LCD_PITCH_MASK, -- gdrm->saved_pitch); -- reg_set_bit_mask_lcd(gdrm, GLAMO_REG_LCD_HORIZ_TOTAL, -- GLAMO_LCD_HV_TOTAL_MASK, gdrm->saved_htotal); -- reg_set_bit_mask_lcd(gdrm, GLAMO_REG_LCD_HORIZ_RETR_START, -- GLAMO_LCD_HV_RETR_START_MASK, gdrm->saved_hrtrst); -- reg_set_bit_mask_lcd(gdrm, GLAMO_REG_LCD_HORIZ_RETR_END, -- GLAMO_LCD_HV_RETR_END_MASK, gdrm->saved_hrtren); -- reg_set_bit_mask_lcd(gdrm, GLAMO_REG_LCD_HORIZ_DISP_START, -- GLAMO_LCD_HV_RETR_DISP_START_MASK, -- gdrm->saved_hdspst); -- reg_set_bit_mask_lcd(gdrm, GLAMO_REG_LCD_HORIZ_DISP_END, -- GLAMO_LCD_HV_RETR_DISP_END_MASK, -- gdrm->saved_hdspen); -- reg_set_bit_mask_lcd(gdrm, GLAMO_REG_LCD_VERT_TOTAL, -- GLAMO_LCD_HV_TOTAL_MASK, gdrm->saved_vtotal); -- reg_set_bit_mask_lcd(gdrm, GLAMO_REG_LCD_VERT_RETR_START, -- GLAMO_LCD_HV_RETR_START_MASK, gdrm->saved_vrtrst); -- reg_set_bit_mask_lcd(gdrm, GLAMO_REG_LCD_VERT_RETR_END, -- GLAMO_LCD_HV_RETR_END_MASK, gdrm->saved_vrtren); -- reg_set_bit_mask_lcd(gdrm, GLAMO_REG_LCD_VERT_DISP_START, -- GLAMO_LCD_HV_RETR_DISP_START_MASK, -- gdrm->saved_vdspst); -- reg_set_bit_mask_lcd(gdrm, GLAMO_REG_LCD_VERT_DISP_END, -- GLAMO_LCD_HV_RETR_DISP_END_MASK, -- gdrm->saved_vdspen); -- glamo_lcd_cmd_mode(gdrm, 0); -+ if ( gcrtc->current_mode_set ) { -+ glamo_crtc_mode_set(crtc, &gcrtc->current_mode, -+ &gcrtc->current_mode, 0, 0, -+ gcrtc->current_fb); -+ } - } -diff --git a/drivers/mfd/glamo/glamo-display.h b/drivers/mfd/glamo/glamo-display.h -index d6f21bc..728bba5 100644 ---- a/drivers/mfd/glamo/glamo-display.h -+++ b/drivers/mfd/glamo/glamo-display.h -@@ -36,4 +36,6 @@ extern int glamo_framebuffer_create(struct drm_device *dev, - extern void glamo_display_suspend(struct glamodrm_handle *gdrm); - extern void glamo_display_resume(struct glamodrm_handle *gdrm); - -+extern void glamo_lcd_power(struct glamodrm_handle *gdrm, int mode); -+ - #endif /* __GLAMO_DISPLAY_H */ -diff --git a/drivers/mfd/glamo/glamo-drm-private.h b/drivers/mfd/glamo/glamo-drm-private.h -index 7949a2e..4e24019 100644 ---- a/drivers/mfd/glamo/glamo-drm-private.h -+++ b/drivers/mfd/glamo/glamo-drm-private.h -@@ -106,6 +106,9 @@ struct glamodrm_handle { - - /* A scratch block */ - struct drm_mm_node *scratch; -+ -+ /* We only have one */ -+ struct drm_crtc *crtc; - }; - - -@@ -118,11 +121,18 @@ struct drm_glamo_gem_object { - - - struct glamo_crtc { -+ - struct drm_crtc base; - struct glamodrm_handle *gdrm; - /* a mode_set for fbdev users on this crtc */ - struct drm_mode_set mode_set; - int blank_mode; -+ -+ int pixel_clock_on; -+ -+ int current_mode_set; -+ struct drm_display_mode current_mode; -+ struct drm_framebuffer *current_fb; - }; - - -diff --git a/drivers/mfd/glamo/glamo-kms-fb.c b/drivers/mfd/glamo/glamo-kms-fb.c -index 61cd605..57680ed 100644 ---- a/drivers/mfd/glamo/glamo-kms-fb.c -+++ b/drivers/mfd/glamo/glamo-kms-fb.c -@@ -253,64 +253,24 @@ static void glamofb_on(struct fb_info *info) - { - struct glamofb_par *par = info->par; - struct drm_device *dev = par->dev; -- struct drm_crtc *crtc; -- struct drm_encoder *encoder; -- int i; -+ struct glamodrm_handle *gdrm = dev->dev_private; - -- /* -- * For each CRTC in this fb, find all associated encoders -- * and turn them off, then turn off the CRTC. -- */ -- list_for_each_entry(crtc, &dev->mode_config.crtc_list, head) { -- struct drm_crtc_helper_funcs *crtc_funcs = crtc->helper_private; -+ printk(KERN_CRIT "Turning on display...\n"); - -- for (i = 0; i < par->crtc_count; i++) -- if (crtc->base.id == par->crtc_ids[i]) -- break; -- -- crtc_funcs->dpms(crtc, DRM_MODE_DPMS_ON); -+ gdrm = dev->dev_private; - -- /* Found a CRTC on this fb, now find encoders */ -- list_for_each_entry(encoder, &dev->mode_config.encoder_list, head) { -- if (encoder->crtc == crtc) { -- struct drm_encoder_helper_funcs *encoder_funcs; -- encoder_funcs = encoder->helper_private; -- encoder_funcs->dpms(encoder, DRM_MODE_DPMS_ON); -- } -- } -- } -+ glamo_lcd_power(gdrm, 1); - } - - static void glamofb_off(struct fb_info *info, int dpms_mode) - { - struct glamofb_par *par = info->par; - struct drm_device *dev = par->dev; -- struct drm_crtc *crtc; -- struct drm_encoder *encoder; -- int i; -+ struct glamodrm_handle *gdrm = dev->dev_private; - -- /* -- * For each CRTC in this fb, find all associated encoders -- * and turn them off, then turn off the CRTC. -- */ -- list_for_each_entry(crtc, &dev->mode_config.crtc_list, head) { -- struct drm_crtc_helper_funcs *crtc_funcs = crtc->helper_private; -- -- for (i = 0; i < par->crtc_count; i++) -- if (crtc->base.id == par->crtc_ids[i]) -- break; -+ printk(KERN_CRIT "Turning off display...\n"); - -- /* Found a CRTC on this fb, now find encoders */ -- list_for_each_entry(encoder, &dev->mode_config.encoder_list, head) { -- if (encoder->crtc == crtc) { -- struct drm_encoder_helper_funcs *encoder_funcs; -- encoder_funcs = encoder->helper_private; -- encoder_funcs->dpms(encoder, dpms_mode); -- } -- } -- if (dpms_mode == DRM_MODE_DPMS_OFF) -- crtc_funcs->dpms(crtc, dpms_mode); -- } -+ glamo_lcd_power(gdrm, 0); - } - - static int glamofb_blank(int blank, struct fb_info *info) -diff --git a/drivers/video/backlight/jbt6k74.c b/drivers/video/backlight/jbt6k74.c -index 95ca4cf..9554cb3 100644 ---- a/drivers/video/backlight/jbt6k74.c -+++ b/drivers/video/backlight/jbt6k74.c -@@ -107,14 +107,12 @@ enum jbt_resolution { - }; - - enum jbt_power_mode { -- JBT_POWER_MODE_DEEP_STANDBY, -- JBT_POWER_MODE_SLEEP, -+ JBT_POWER_MODE_OFF, - JBT_POWER_MODE_NORMAL, - }; - - static const char *jbt_power_mode_names[] = { -- [JBT_POWER_MODE_DEEP_STANDBY] = "deep-standby", -- [JBT_POWER_MODE_SLEEP] = "sleep", -+ [JBT_POWER_MODE_OFF] = "off", - [JBT_POWER_MODE_NORMAL] = "normal", - }; - -@@ -260,14 +258,18 @@ static int jbt_init_regs(struct jbt_info *jbt) - return ret ? -EIO : 0; - } - --static int jbt_standby_to_sleep(struct jbt_info *jbt) -+ -+static int jbt_off_to_normal(struct jbt_info *jbt) - { - int ret; -+ - struct jbt6k74_platform_data *pdata = jbt->spi->dev.platform_data; - - gpio_set_value_cansleep(pdata->gpio_reset, 1); - ret = regulator_bulk_enable(ARRAY_SIZE(jbt->supplies), jbt->supplies); - -+ mdelay(30); -+ - /* three times command zero */ - ret |= jbt_reg_write_nodata(jbt, 0x00); - mdelay(1); -@@ -279,18 +281,11 @@ static int jbt_standby_to_sleep(struct jbt_info *jbt) - /* deep standby out */ - ret |= jbt_reg_write(jbt, JBT_REG_POWER_ON_OFF, 0x11); - mdelay(1); -- ret = jbt_reg_write(jbt, JBT_REG_DISPLAY_MODE, 0x28); -+ ret |= jbt_reg_write(jbt, JBT_REG_DISPLAY_MODE, 0x28); - - /* (re)initialize register set */ - ret |= jbt_init_regs(jbt); - -- return ret ? -EIO : 0; --} -- --static int jbt_sleep_to_normal(struct jbt_info *jbt) --{ -- int ret; -- - /* Make sure we are 120 ms after SLEEP_OUT */ - if (time_before(jiffies, jbt->next_sleep)) - mdelay(jiffies_to_msecs(jbt->next_sleep - jiffies)); -@@ -320,53 +315,34 @@ static int jbt_sleep_to_normal(struct jbt_info *jbt) - - /* Sleep mode off */ - ret |= jbt_reg_write_nodata(jbt, JBT_REG_SLEEP_OUT); -- jbt->next_sleep = jiffies + msecs_to_jiffies(120); - -- /* Allow the booster and display controller to restart stably */ -- mdelay(5); -- -- return ret ? -EIO : 0; --} -- --static int jbt_normal_to_sleep(struct jbt_info *jbt) --{ -- int ret; -- -- /* Make sure we are 120 ms after SLEEP_OUT */ -- while (time_before(jiffies, jbt->next_sleep)) -- cpu_relax(); -- -- ret = jbt_reg_write_nodata(jbt, JBT_REG_DISPLAY_OFF); -- ret |= jbt_reg_write16(jbt, JBT_REG_OUTPUT_CONTROL, 0x8000 | 1 << 3); -- ret |= jbt_reg_write_nodata(jbt, JBT_REG_SLEEP_IN); - jbt->next_sleep = jiffies + msecs_to_jiffies(120); - -- /* Allow the internal circuits to stop automatically */ -+ /* Allow the booster and display controller to restart stably */ - mdelay(5); - - return ret ? -EIO : 0; - } - --static int jbt_sleep_to_standby(struct jbt_info *jbt) -+static int jbt_normal_to_off(struct jbt_info *jbt) - { - int ret; - struct jbt6k74_platform_data *pdata = jbt->spi->dev.platform_data; - -- ret = jbt_reg_write(jbt, JBT_REG_POWER_ON_OFF, 0x00); -- -- if (!ret) -- ret = regulator_bulk_disable(ARRAY_SIZE(jbt->supplies), jbt->supplies); -+ /* Pull the plug! */ -+ ret = regulator_bulk_disable(ARRAY_SIZE(jbt->supplies), -+ jbt->supplies); - - if (!ret) - gpio_set_value_cansleep(pdata->gpio_reset, 0); - -- return ret; -+ return ret ? -EIO : 0; - } - -+ - static int jbt6k74_enter_power_mode(struct jbt_info *jbt, - enum jbt_power_mode new_mode) - { -- struct jbt6k74_platform_data *pdata = jbt->spi->dev.platform_data; - int ret = -EINVAL; - - dev_dbg(&jbt->spi->dev, "entering (old_state=%s, new_state=%s)\n", -@@ -375,49 +351,14 @@ static int jbt6k74_enter_power_mode(struct jbt_info *jbt, - - mutex_lock(&jbt->lock); - -- if (jbt->suspended) { -- switch (new_mode) { -- case JBT_POWER_MODE_DEEP_STANDBY: -- case JBT_POWER_MODE_SLEEP: -- case JBT_POWER_MODE_NORMAL: -- ret = 0; -- jbt->suspend_mode = new_mode; -- break; -- default: -- break; -- } -- } else if (new_mode == JBT_POWER_MODE_NORMAL && -- pdata->enable_pixel_clock) { -- pdata->enable_pixel_clock(&jbt->spi->dev, 1); -- } -- - switch (jbt->power_mode) { -- case JBT_POWER_MODE_DEEP_STANDBY: -- switch (new_mode) { -- case JBT_POWER_MODE_DEEP_STANDBY: -- ret = 0; -- break; -- case JBT_POWER_MODE_SLEEP: -- ret = jbt_standby_to_sleep(jbt); -- break; -- case JBT_POWER_MODE_NORMAL: -- /* first transition into sleep */ -- ret = jbt_standby_to_sleep(jbt); -- /* then transition into normal */ -- ret |= jbt_sleep_to_normal(jbt); -- break; -- } -- break; -- case JBT_POWER_MODE_SLEEP: -+ case JBT_POWER_MODE_OFF: - switch (new_mode) { -- case JBT_POWER_MODE_SLEEP: -+ case JBT_POWER_MODE_OFF: - ret = 0; - break; -- case JBT_POWER_MODE_DEEP_STANDBY: -- ret = jbt_sleep_to_standby(jbt); -- break; - case JBT_POWER_MODE_NORMAL: -- ret = jbt_sleep_to_normal(jbt); -+ ret = jbt_off_to_normal(jbt); - break; - } - break; -@@ -426,25 +367,16 @@ static int jbt6k74_enter_power_mode(struct jbt_info *jbt, - case JBT_POWER_MODE_NORMAL: - ret = 0; - break; -- case JBT_POWER_MODE_DEEP_STANDBY: -- /* first transition into sleep */ -- ret = jbt_normal_to_sleep(jbt); -- /* then transition into deep standby */ -- ret |= jbt_sleep_to_standby(jbt); -- break; -- case JBT_POWER_MODE_SLEEP: -- ret = jbt_normal_to_sleep(jbt); -+ case JBT_POWER_MODE_OFF: -+ ret = jbt_normal_to_off(jbt); - break; - } - } - - if (ret == 0) { - jbt->power_mode = new_mode; -- if (new_mode != JBT_POWER_MODE_NORMAL && -- pdata->enable_pixel_clock) -- pdata->enable_pixel_clock(&jbt->spi->dev, 0); - } else { -- dev_err(&jbt->spi->dev, "Failed enter state '%s': %d\n", -+ dev_err(&jbt->spi->dev, "Failed to enter state '%s': %d\n", - jbt_power_mode_names[new_mode], ret); - } - -@@ -470,8 +402,8 @@ static int jbt6k74_set_resolution(struct jbt_info *jbt, - if (jbt->power_mode == JBT_POWER_MODE_NORMAL) { - - /* first transition into sleep */ -- ret = jbt_normal_to_sleep(jbt); -- ret |= jbt_sleep_to_normal(jbt); -+ ret = jbt_normal_to_off(jbt); -+ ret |= jbt_off_to_normal(jbt); - - if (ret) { - jbt->resolution = old_resolution; -@@ -589,7 +521,7 @@ static ssize_t reset_write(struct device *dev, struct device_attribute *attr, - - mutex_unlock(&jbt->lock); - -- jbt->power_mode = JBT_POWER_MODE_DEEP_STANDBY; -+ jbt->power_mode = JBT_POWER_MODE_OFF; - jbt6k74_enter_power_mode(jbt, old_power_mode); - - return count; -@@ -616,27 +548,6 @@ static struct attribute_group jbt_attr_group = { - .attrs = jbt_sysfs_entries, - }; - --/* FIXME: This in an ugly hack to delay display blanking. -- When the jbt is in sleep mode it displays an all white screen and thus one -- will a see a short flash. -- By delaying the blanking we will give the backlight a chance to turn off and -- thus avoid getting the flash */ --static void jbt_blank_worker(struct work_struct *work) --{ -- struct jbt_info *jbt = container_of(work, struct jbt_info, -- blank_work.work); -- -- switch (jbt->blank_mode) { -- case FB_BLANK_NORMAL: -- jbt6k74_enter_power_mode(jbt, JBT_POWER_MODE_SLEEP); -- break; -- case FB_BLANK_POWERDOWN: -- jbt6k74_enter_power_mode(jbt, JBT_POWER_MODE_DEEP_STANDBY); -- break; -- default: -- break; -- } --} - - static int jbt6k74_set_mode(struct lcd_device *ld, struct fb_videomode *m) - { -@@ -649,7 +560,7 @@ static int jbt6k74_set_mode(struct lcd_device *ld, struct fb_videomode *m) - ret = jbt6k74_set_resolution(jbt, JBT_RESOLUTION_VGA); - } else { - dev_err(&jbt->spi->dev, "Unknown resolution.\n"); -- jbt6k74_enter_power_mode(jbt, JBT_POWER_MODE_SLEEP); -+ jbt6k74_enter_power_mode(jbt, JBT_POWER_MODE_OFF); - } - - return ret; -@@ -671,11 +582,11 @@ static int jbt6k74_set_power(struct lcd_device *ld, int power) - break; - case FB_BLANK_NORMAL: - dev_dbg(&jbt->spi->dev, "blank\n"); -- ret = schedule_delayed_work(&jbt->blank_work, HZ); -+ ret = jbt6k74_enter_power_mode(jbt, JBT_POWER_MODE_OFF); - break; - case FB_BLANK_POWERDOWN: - dev_dbg(&jbt->spi->dev, "powerdown\n"); -- ret = schedule_delayed_work(&jbt->blank_work, HZ); -+ ret = jbt6k74_enter_power_mode(jbt, JBT_POWER_MODE_OFF); - break; - default: - break; -@@ -691,10 +602,10 @@ static int jbt6k74_get_power(struct lcd_device *ld) - switch (jbt->power_mode) { - case JBT_POWER_MODE_NORMAL: - return FB_BLANK_UNBLANK; -- case JBT_POWER_MODE_SLEEP: -+ case JBT_POWER_MODE_OFF: - return FB_BLANK_NORMAL; - default: -- return JBT_POWER_MODE_DEEP_STANDBY; -+ return JBT_POWER_MODE_OFF; - } - } - -@@ -707,7 +618,7 @@ void jbt6k74_action(int val) - return; - } - if ( val == 0 ) { -- jbt6k74_enter_power_mode(jbt_global, JBT_POWER_MODE_SLEEP); -+ jbt6k74_enter_power_mode(jbt_global, JBT_POWER_MODE_OFF); - } else { - jbt6k74_enter_power_mode(jbt_global, JBT_POWER_MODE_NORMAL); - } -@@ -756,11 +667,9 @@ static int __devinit jbt_probe(struct spi_device *spi) - goto err_free_drvdata; - } - -- INIT_DELAYED_WORK(&jbt->blank_work, jbt_blank_worker); -- - jbt->resolution = JBT_RESOLUTION_VGA; -- jbt->power_mode = JBT_POWER_MODE_DEEP_STANDBY; - jbt->next_sleep = jiffies + msecs_to_jiffies(120); -+ jbt->power_mode = JBT_POWER_MODE_OFF; - mutex_init(&jbt->lock); - - dev_set_drvdata(&spi->dev, jbt); -@@ -856,9 +765,10 @@ static int jbt_suspend(struct spi_device *spi, pm_message_t state) - - jbt->suspend_mode = jbt->power_mode; - -- jbt6k74_enter_power_mode(jbt, JBT_POWER_MODE_DEEP_STANDBY); -- jbt->suspended = 1; -+ printk(KERN_CRIT "[jbt] powering off for suspend\n"); -+ jbt6k74_enter_power_mode(jbt, JBT_POWER_MODE_OFF); - -+ printk(KERN_CRIT "[jbt] done\n"); - dev_info(&spi->dev, "suspended\n"); - - return 0; -@@ -869,11 +779,13 @@ int jbt6k74_resume(struct spi_device *spi) - struct jbt_info *jbt = dev_get_drvdata(&spi->dev); - dev_info(&spi->dev, "starting resume: %d\n", jbt->suspend_mode); - -+ printk(KERN_CRIT "[jbt] powering on for resume\n"); - mdelay(20); - - jbt->suspended = 0; - jbt6k74_enter_power_mode(jbt, jbt->suspend_mode); - -+ printk(KERN_CRIT "[jbt] done\n"); - dev_info(&spi->dev, "resumed: %d\n", jbt->suspend_mode); - - return 0; -diff --git a/include/linux/jbt6k74.h b/include/linux/jbt6k74.h -index 75488c4..4cf760c 100644 ---- a/include/linux/jbt6k74.h -+++ b/include/linux/jbt6k74.h -@@ -13,7 +13,6 @@ - */ - struct jbt6k74_platform_data { - void (*probe_completed)(struct device *dev); -- void (*enable_pixel_clock)(struct device *dev, int enable); - - int gpio_reset; - }; --- -1.7.0 - |