board-rk29-ddr3sdk: modify for touch screen standby
author蔡枫 <cf@rock-chips.com>
Thu, 21 Apr 2011 05:35:52 +0000 (13:35 +0800)
committer蔡枫 <cf@rock-chips.com>
Thu, 21 Apr 2011 05:35:52 +0000 (13:35 +0800)
arch/arm/mach-rk29/board-rk29-ddr3sdk.c
arch/arm/mach-rk29/include/mach/board.h
drivers/input/touchscreen/eeti_egalax_i2c.c

index 1bea74ce3f7170f9ecb96b371e771f034dbf1121..4b5aa982f011bf4b7b07a7351caaae8386a3f717 100755 (executable)
@@ -131,7 +131,7 @@ struct rk29_nand_platform_data rk29_nand_data = {
 *****************************************************************************************/
 #define FB_ID                       0
 #define FB_DISPLAY_ON_PIN           RK29_PIN6_PD0
-#define FB_LCD_STANDBY_PIN          RK29_PIN6_PD1
+#define FB_LCD_STANDBY_PIN          INVALID_GPIO
 #define FB_LCD_CABC_EN_PIN          RK29_PIN6_PD2
 #define FB_MCU_FMK_PIN              INVALID_GPIO
 
@@ -139,6 +139,13 @@ struct rk29_nand_platform_data rk29_nand_data = {
 #define FB_LCD_STANDBY_VALUE        GPIO_HIGH
 
 //#endif
+/*****************************************************************************************
+* touch screen devices
+* author: cf@rock-chips.com
+*****************************************************************************************/
+#define TOUCH_SCREEN_STANDBY_PIN          RK29_PIN6_PD1
+#define TOUCH_SCREEN_STANDBY_VALUE        GPIO_HIGH
+
 static int rk29_lcd_io_init(void)
 {
     int ret = 0;
@@ -183,14 +190,28 @@ static int rk29_fb_io_init(struct rk29_fb_setting_info *fb_setting)
         }
     }
 
-    if(fb_setting->disp_on_en && (FB_LCD_STANDBY_PIN != INVALID_GPIO))
+    if(fb_setting->disp_on_en)
     {
-        ret = gpio_request(FB_LCD_STANDBY_PIN, NULL);
-        if(ret != 0)
+        if(FB_LCD_STANDBY_PIN != INVALID_GPIO)
         {
-            gpio_free(FB_LCD_STANDBY_PIN);
-            printk(">>>>>> FB_LCD_STANDBY_PIN gpio_request err \n ");
+             ret = gpio_request(FB_LCD_STANDBY_PIN, NULL);
+             if(ret != 0)
+             {
+                 gpio_free(FB_LCD_STANDBY_PIN);
+                 printk(">>>>>> FB_LCD_STANDBY_PIN gpio_request err \n ");
+             }
         }
+        else
+        {
+             ret = gpio_request(TOUCH_SCREEN_STANDBY_PIN, NULL);
+             if(ret != 0)
+             {
+                 gpio_free(TOUCH_SCREEN_STANDBY_PIN);
+                 printk(">>>>>> TOUCH_SCREEN_STANDBY_PIN gpio_request err \n ");
+             }
+             gpio_direction_output(TOUCH_SCREEN_STANDBY_PIN, 0);
+             gpio_set_value(TOUCH_SCREEN_STANDBY_PIN, TOUCH_SCREEN_STANDBY_VALUE);
+         }
     }
 
     if(FB_LCD_CABC_EN_PIN != INVALID_GPIO)
@@ -387,7 +408,8 @@ static int EETI_EGALAX_init_platform_hw(void)
 static struct eeti_egalax_platform_data eeti_egalax_info = {
   .model= 1003,
   .init_platform_hw= EETI_EGALAX_init_platform_hw,
-
+  .standby_pin = TOUCH_SCREEN_STANDBY_PIN,
+  .standby_value = TOUCH_SCREEN_STANDBY_VALUE,
 };
 #endif
 /*MMA8452 gsensor*/
index 462c6bd13059233ac9b29201e131a5a209e38544..a9224244295adaabd5b528684f2c8979d9818fa8 100755 (executable)
@@ -152,6 +152,9 @@ struct eeti_egalax_platform_data{
     int     (*eeti_egalax_platform_sleep)(void);
     int     (*eeti_egalax_platform_wakeup)(void);
     void    (*exit_platform_hw)(void);
+    int     standby_pin;
+    int     standby_value;
 };
 
 /*sintex touch*/
index 6a02cb5f701c1ae5c82f0f5fe7e8a2361a79b39c..4d68f261c7c852580ef77690638c8965ed214b33 100644 (file)
@@ -496,6 +496,21 @@ static irqreturn_t egalax_i2c_interrupt(int irq, void *dev_id)
        return IRQ_HANDLED;
 }
 
+
+void egalax_i2c_set_standby(struct i2c_client *client, int enable)
+{
+        struct eeti_egalax_platform_data *pdata = pdata = client->dev.platform_data;
+        unsigned lcd_standby = pdata->standby_pin;
+        int lcd_standby_pol = pdata->standby_value;
+        printk("%s : %s, enable = %d", __FILE__, __FUNCTION__,enable);
+        // set display_on
+        if(lcd_standby != INVALID_GPIO)
+        {
+            gpio_direction_output(lcd_standby, 0);
+            gpio_set_value(lcd_standby, enable ? lcd_standby_pol : !lcd_standby_pol);
+        }
+}
+
 #ifdef CONFIG_PM
 static int egalax_i2c_suspend(struct i2c_client *client, pm_message_t mesg)
 {
@@ -518,14 +533,14 @@ static int egalax_i2c_suspend(struct i2c_client *client, pm_message_t mesg)
        {
                printk(KERN_DEBUG "[egalax_i2c]: device_may_wakeup false\n");
        }
-
+        egalax_i2c_set_standby(client, 1);
        return 0;
 }
 
 static int egalax_i2c_resume(struct i2c_client *client)
 {
        struct _egalax_i2c *egalax_i2c = i2c_get_clientdata(client);
-       
+        egalax_i2c_set_standby(client, 0);     
        if(device_may_wakeup(&client->dev)) 
        {
                disable_irq_wake(p_egalax_i2c_dev->irq);