From dfee776afc41a8511690313e504ae55131d3f291 Mon Sep 17 00:00:00 2001 From: =?utf8?q?=E8=94=A1=E6=9E=AB?= Date: Sat, 23 Apr 2011 12:48:37 +0800 Subject: [PATCH] modify touch screen standby --- arch/arm/mach-rk29/board-rk29-ddr3sdk.c | 30 ++++++++++++++++----- arch/arm/mach-rk29/board-rk29sdk.c | 28 +++++++++++++++---- arch/arm/mach-rk29/include/mach/board.h | 2 ++ drivers/input/touchscreen/eeti_egalax_i2c.c | 30 +++++++++++++-------- 4 files changed, 68 insertions(+), 22 deletions(-) mode change 100644 => 100755 drivers/input/touchscreen/eeti_egalax_i2c.c diff --git a/arch/arm/mach-rk29/board-rk29-ddr3sdk.c b/arch/arm/mach-rk29/board-rk29-ddr3sdk.c index 18ae868fd967..5d761b05ab1b 100755 --- a/arch/arm/mach-rk29/board-rk29-ddr3sdk.c +++ b/arch/arm/mach-rk29/board-rk29-ddr3sdk.c @@ -130,7 +130,7 @@ struct rk29_nand_platform_data rk29_nand_data = { * author: zyw@rock-chips.com *****************************************************************************************/ #define FB_ID 0 -#define FB_DISPLAY_ON_PIN RK29_PIN6_PD0 +#define FB_DISPLAY_ON_PIN INVALID_GPIO #define FB_LCD_STANDBY_PIN INVALID_GPIO #define FB_LCD_CABC_EN_PIN RK29_PIN6_PD2 #define FB_MCU_FMK_PIN INVALID_GPIO @@ -145,6 +145,8 @@ struct rk29_nand_platform_data rk29_nand_data = { *****************************************************************************************/ #define TOUCH_SCREEN_STANDBY_PIN RK29_PIN6_PD1 #define TOUCH_SCREEN_STANDBY_VALUE GPIO_HIGH +#define TOUCH_SCREEN_DISPLAY_PIN RK29_PIN6_PD0 +#define TOUCH_SCREEN_DISPLAY_VALUE GPIO_HIGH static int rk29_lcd_io_init(void) { @@ -180,13 +182,27 @@ static int rk29_fb_io_init(struct rk29_fb_setting_info *fb_setting) } gpio_direction_input(FB_MCU_FMK_PIN); } - if(fb_setting->disp_on_en && (FB_DISPLAY_ON_PIN != INVALID_GPIO)) + if(fb_setting->disp_on_en) { - ret = gpio_request(FB_DISPLAY_ON_PIN, NULL); - if(ret != 0) + if(FB_DISPLAY_ON_PIN != INVALID_GPIO) + { + ret = gpio_request(FB_DISPLAY_ON_PIN, NULL); + if(ret != 0) + { + gpio_free(FB_DISPLAY_ON_PIN); + printk(">>>>>> FB_DISPLAY_ON_PIN gpio_request err \n "); + } + } + else { - gpio_free(FB_DISPLAY_ON_PIN); - printk(">>>>>> FB_DISPLAY_ON_PIN gpio_request err \n "); + ret = gpio_request(TOUCH_SCREEN_DISPLAY_PIN, NULL); + if(ret != 0) + { + gpio_free(TOUCH_SCREEN_DISPLAY_PIN); + printk(">>>>>> TOUCH_SCREEN_DISPLAY_PIN gpio_request err \n "); + } + gpio_direction_output(TOUCH_SCREEN_DISPLAY_PIN, 0); + gpio_set_value(TOUCH_SCREEN_DISPLAY_PIN, TOUCH_SCREEN_DISPLAY_VALUE); } } @@ -410,6 +426,8 @@ static struct eeti_egalax_platform_data eeti_egalax_info = { .init_platform_hw= EETI_EGALAX_init_platform_hw, .standby_pin = TOUCH_SCREEN_STANDBY_PIN, .standby_value = TOUCH_SCREEN_STANDBY_VALUE, + .disp_on_pin = TOUCH_SCREEN_DISPLAY_PIN, + .disp_on_value = TOUCH_SCREEN_DISPLAY_VALUE, }; #endif /*MMA8452 gsensor*/ diff --git a/arch/arm/mach-rk29/board-rk29sdk.c b/arch/arm/mach-rk29/board-rk29sdk.c index 8e7a98fdc67f..74f7b2e562df 100755 --- a/arch/arm/mach-rk29/board-rk29sdk.c +++ b/arch/arm/mach-rk29/board-rk29sdk.c @@ -145,6 +145,8 @@ struct rk29_nand_platform_data rk29_nand_data = { *****************************************************************************************/ #define TOUCH_SCREEN_STANDBY_PIN INVALID_GPIO #define TOUCH_SCREEN_STANDBY_VALUE GPIO_HIGH +#define TOUCH_SCREEN_DISPLAY_PIN INVALID_GPIO +#define TOUCH_SCREEN_DISPLAY_VALUE GPIO_HIGH static int rk29_lcd_io_init(void) { @@ -180,13 +182,27 @@ static int rk29_fb_io_init(struct rk29_fb_setting_info *fb_setting) } gpio_direction_input(FB_MCU_FMK_PIN); } - if(fb_setting->disp_on_en && (FB_DISPLAY_ON_PIN != INVALID_GPIO)) + if(fb_setting->disp_on_en) { - ret = gpio_request(FB_DISPLAY_ON_PIN, NULL); - if(ret != 0) + if(FB_DISPLAY_ON_PIN != INVALID_GPIO) + { + ret = gpio_request(FB_DISPLAY_ON_PIN, NULL); + if(ret != 0) + { + gpio_free(FB_DISPLAY_ON_PIN); + printk(">>>>>> FB_DISPLAY_ON_PIN gpio_request err \n "); + } + } + else { - gpio_free(FB_DISPLAY_ON_PIN); - printk(">>>>>> FB_DISPLAY_ON_PIN gpio_request err \n "); + ret = gpio_request(TOUCH_SCREEN_DISPLAY_PIN, NULL); + if(ret != 0) + { + gpio_free(TOUCH_SCREEN_DISPLAY_PIN); + printk(">>>>>> TOUCH_SCREEN_DISPLAY_PIN gpio_request err \n "); + } + gpio_direction_output(TOUCH_SCREEN_DISPLAY_PIN, 0); + gpio_set_value(TOUCH_SCREEN_DISPLAY_PIN, TOUCH_SCREEN_DISPLAY_VALUE); } } @@ -410,6 +426,8 @@ static struct eeti_egalax_platform_data eeti_egalax_info = { .init_platform_hw= EETI_EGALAX_init_platform_hw, .standby_pin = TOUCH_SCREEN_STANDBY_PIN, .standby_value = TOUCH_SCREEN_STANDBY_VALUE, + .disp_on_pin = TOUCH_SCREEN_DISPLAY_PIN, + .disp_on_value = TOUCH_SCREEN_DISPLAY_VALUE, }; #endif /*MMA8452 gsensor*/ diff --git a/arch/arm/mach-rk29/include/mach/board.h b/arch/arm/mach-rk29/include/mach/board.h index 441572df85a1..01c62dc0eb53 100755 --- a/arch/arm/mach-rk29/include/mach/board.h +++ b/arch/arm/mach-rk29/include/mach/board.h @@ -154,6 +154,8 @@ struct eeti_egalax_platform_data{ void (*exit_platform_hw)(void); int standby_pin; int standby_value; + int disp_on_pin; + int disp_on_value; }; diff --git a/drivers/input/touchscreen/eeti_egalax_i2c.c b/drivers/input/touchscreen/eeti_egalax_i2c.c old mode 100644 new mode 100755 index 4d68f261c7c8..3325f1c36a7f --- a/drivers/input/touchscreen/eeti_egalax_i2c.c +++ b/drivers/input/touchscreen/eeti_egalax_i2c.c @@ -499,16 +499,24 @@ static irqreturn_t egalax_i2c_interrupt(int irq, void *dev_id) 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; + struct eeti_egalax_platform_data *mach_info = client->dev.platform_data; + unsigned display_on = mach_info->disp_on_pin; + unsigned lcd_standby = mach_info->standby_pin; + + int display_on_pol = mach_info->disp_on_value; + int lcd_standby_pol = mach_info->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); - } + if(display_on != INVALID_GPIO) + { + gpio_direction_output(display_on, 0); + gpio_set_value(display_on, enable ? display_on_pol : !display_on_pol); + } + 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 @@ -533,14 +541,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); + egalax_i2c_set_standby(client, 0); 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); + egalax_i2c_set_standby(client, 1); if(device_may_wakeup(&client->dev)) { disable_irq_wake(p_egalax_i2c_dev->irq); -- 2.34.1