diff options
Diffstat (limited to 'drivers/staging/asus_oled/asus_oled.c')
-rw-r--r-- | drivers/staging/asus_oled/asus_oled.c | 56 |
1 files changed, 45 insertions, 11 deletions
diff --git a/drivers/staging/asus_oled/asus_oled.c b/drivers/staging/asus_oled/asus_oled.c index f63c1d3aeb64..00185478647a 100644 --- a/drivers/staging/asus_oled/asus_oled.c +++ b/drivers/staging/asus_oled/asus_oled.c @@ -42,8 +42,6 @@ #define ASUS_OLED_NAME "asus-oled" #define ASUS_OLED_UNDERSCORE_NAME "asus_oled" -#define ASUS_OLED_ERROR "Asus OLED Display Error: " - #define ASUS_OLED_STATIC 's' #define ASUS_OLED_ROLL 'r' #define ASUS_OLED_FLASH 'f' @@ -57,8 +55,9 @@ #define USB_DEVICE_ID_ASUS_LCM2 0x175b MODULE_AUTHOR("Jakub Schmidtke, sjakub@gmail.com"); -MODULE_DESCRIPTION("Asus OLED Driver v" ASUS_OLED_VERSION); +MODULE_DESCRIPTION("Asus OLED Driver"); MODULE_LICENSE("GPL"); +MODULE_VERSION(ASUS_OLED_VERSION); static struct class *oled_class; static int oled_num; @@ -138,6 +137,7 @@ struct asus_oled_dev { size_t buf_size; char *buf; uint8_t enabled; + uint8_t enabled_post_resume; struct device *dev; }; @@ -383,13 +383,13 @@ static int append_values(struct asus_oled_dev *odev, uint8_t val, size_t count) default: i = 0; - printk(ASUS_OLED_ERROR "Unknown OLED Pack Mode: %d!\n", + dev_err(odev->dev, "Unknown OLED Pack Mode: %d!\n", odev->pack_mode); break; } if (i >= odev->buf_size) { - printk(ASUS_OLED_ERROR "Buffer overflow! Report a bug:" + dev_err(odev->dev, "Buffer overflow! Report a bug:" "offs: %d >= %d i: %d (x: %d y: %d)\n", (int) odev->buf_offs, (int) odev->buf_size, (int) i, (int) x, (int) y); @@ -435,7 +435,7 @@ static ssize_t odev_set_picture(struct asus_oled_dev *odev, odev->buf = kmalloc(odev->buf_size, GFP_KERNEL); if (odev->buf == NULL) { odev->buf_size = 0; - printk(ASUS_OLED_ERROR "Out of memory!\n"); + dev_err(odev->dev, "Out of memory!\n"); return -ENOMEM; } @@ -473,7 +473,7 @@ static ssize_t odev_set_picture(struct asus_oled_dev *odev, odev->pic_mode = buf[1]; break; default: - printk(ASUS_OLED_ERROR "Wrong picture mode: '%c'.\n", + dev_err(odev->dev, "Wrong picture mode: '%c'.\n", buf[1]); return -EIO; break; @@ -533,7 +533,7 @@ static ssize_t odev_set_picture(struct asus_oled_dev *odev, if (odev->buf == NULL) { odev->buf_size = 0; - printk(ASUS_OLED_ERROR "Out of memory!\n"); + dev_err(odev->dev, "Out of memory!\n"); return -ENOMEM; } @@ -593,15 +593,15 @@ static ssize_t odev_set_picture(struct asus_oled_dev *odev, return count; error_width: - printk(ASUS_OLED_ERROR "Wrong picture width specified.\n"); + dev_err(odev->dev, "Wrong picture width specified.\n"); return -EIO; error_height: - printk(ASUS_OLED_ERROR "Wrong picture height specified.\n"); + dev_err(odev->dev, "Wrong picture height specified.\n"); return -EIO; error_header: - printk(ASUS_OLED_ERROR "Wrong picture header.\n"); + dev_err(odev->dev, "Wrong picture header.\n"); return -EIO; } @@ -766,11 +766,45 @@ static void asus_oled_disconnect(struct usb_interface *interface) dev_info(&interface->dev, "Disconnected Asus OLED device\n"); } +#ifdef CONFIG_PM +static int asus_oled_suspend(struct usb_interface *intf, pm_message_t message) +{ + struct asus_oled_dev *odev; + + odev = usb_get_intfdata(intf); + if (!odev) + return -ENODEV; + + odev->enabled_post_resume = odev->enabled; + enable_oled(odev, 0); + + return 0; +} + +static int asus_oled_resume(struct usb_interface *intf) +{ + struct asus_oled_dev *odev; + + odev = usb_get_intfdata(intf); + if (!odev) + return -ENODEV; + + enable_oled(odev, odev->enabled_post_resume); + + return 0; +} +#else +#define asus_oled_suspend NULL +#define asus_oled_resume NULL +#endif + static struct usb_driver oled_driver = { .name = ASUS_OLED_NAME, .probe = asus_oled_probe, .disconnect = asus_oled_disconnect, .id_table = id_table, + .suspend = asus_oled_suspend, + .resume = asus_oled_resume, }; static CLASS_ATTR_STRING(version, S_IRUGO, |