From: Wu Zhangjin <wuzhangjin@xxxxxxxxx> This patch add support to suspend the yeeloong platform specific devices(LCD, CRT, USB...). Acked-by: Rafael J. Wysocki <rjw@xxxxxxx> Acked-by: Pavel Machek <pavel@xxxxxx> Signed-off-by: Wu Zhangjin <wuzhangjin@xxxxxxxxx> --- drivers/platform/mips/yeeloong_laptop.c | 41 +++++++++++++++++++++++++++++++ 1 files changed, 41 insertions(+), 0 deletions(-) diff --git a/drivers/platform/mips/yeeloong_laptop.c b/drivers/platform/mips/yeeloong_laptop.c index 8378926..d31824b 100644 --- a/drivers/platform/mips/yeeloong_laptop.c +++ b/drivers/platform/mips/yeeloong_laptop.c @@ -536,6 +536,45 @@ static void yeeloong_vo_exit(void) } } +#ifdef CONFIG_LOONGSON_SUSPEND +static void usb_ports_set(int status) +{ + status = !!status; + + ec_write(REG_USB0_FLAG, status); + ec_write(REG_USB1_FLAG, status); + ec_write(REG_USB2_FLAG, status); +} + +static int yeeloong_suspend(struct platform_device *dev, pm_message_t state) + +{ + /* Turn off LCD */ + yeeloong_lcd_vo_set(BIT_DISPLAY_LCD_OFF); + /* Turn off CRT */ + yeeloong_crt_vo_set(BIT_CRT_DETECT_UNPLUG); + /* Poweroff three usb ports */ + usb_ports_set(BIT_USB_FLAG_OFF); + + return 0; +} + +static int yeeloong_resume(struct platform_device *pdev) +{ + /* Resume the status of lcd & crt */ + yeeloong_lcd_vo_set(BIT_DISPLAY_LCD_ON); + yeeloong_crt_vo_set(BIT_CRT_DETECT_PLUG); + + /* Poweron three usb ports */ + usb_ports_set(BIT_USB_FLAG_ON); + + return 0; +} +#else /* !CONFIG_LOONGSON_SUSPEND */ +#define yeeloong_suspend NULL +#define yeeloong_resume NULL +#endif + static struct platform_device_id platform_device_ids[] = { { .name = "yeeloong_laptop", @@ -551,6 +590,8 @@ static struct platform_driver platform_driver = { .owner = THIS_MODULE, }, .id_table = platform_device_ids, + .suspend = yeeloong_suspend, + .resume = yeeloong_resume, }; static int __init yeeloong_init(void) -- 1.6.2.1