diff --git a/drivers/video/display/jbt6k74.c b/drivers/video/display/jbt6k74.c
index a1d48dd..2ca1bd4 100644
--- a/drivers/video/display/jbt6k74.c
+++ b/drivers/video/display/jbt6k74.c
@@ -443,8 +443,17 @@ int jbt6k74_enter_state(struct jbt_info *jbt, enum jbt_state new_state)
 		break;
 	}
 	
-	if (rc == 0)
+	if (rc == 0) {
+		switch (new_state) {
+		case JBT_STATE_NORMAL:
+		case JBT_STATE_QVGA_NORMAL:
+			jbt->last_state = new_state;
+			break;
+		default:
+			break;
+		}
 		jbt->state = new_state;
+	}
 
 	return rc;
 }
@@ -595,7 +604,14 @@ static int fb_notifier_callback(struct notifier_block *self,
 	switch (fb_blank) {
 	case FB_BLANK_UNBLANK:
 		dev_info(&jbt->spi_dev->dev, "**** jbt6k74 unblank\n");
-		jbt6k74_enter_state(jbt, JBT_STATE_NORMAL);
+		switch (jbt->last_state) {
+		case JBT_STATE_QVGA_NORMAL:
+			jbt6k74_enter_state(jbt, JBT_STATE_QVGA_NORMAL);
+			break;
+		default:
+			jbt6k74_enter_state(jbt, JBT_STATE_NORMAL);
+			break;
+		}
 		break;
 	case FB_BLANK_NORMAL:
 		dev_info(&jbt->spi_dev->dev, "**** jbt6k74 normal\n");
@@ -720,8 +736,6 @@ static int jbt_suspend(struct spi_device *spi, pm_message_t state)
 {
 	struct jbt_info *jbt = dev_get_drvdata(&spi->dev);
 
-	/* Save mode for resume */
-	jbt->last_state = jbt->state;
 	/* FIXME: deep standby causes WSOD on certain devices. We use
 	 * sleep as workaround */
 	jbt6k74_enter_state(jbt, JBT_STATE_SLEEP);
