]> www.pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - drivers/hid/hidraw.c
Merge branch 'omap-pool'
[linux-2.6-omap-h63xx.git] / drivers / hid / hidraw.c
index 02b19db5442ebd1d1fce7c0716bb2a071f528e12..e263d47311790b7e215bfd4dbf119999e87064aa 100644 (file)
@@ -181,9 +181,17 @@ static int hidraw_open(struct inode *inode, struct file *file)
 
        dev = hidraw_table[minor];
        if (!dev->open++) {
+               if (dev->hid->ll_driver->power) {
+                       err = dev->hid->ll_driver->power(dev->hid, PM_HINT_FULLON);
+                       if (err < 0)
+                               goto out_unlock;
+               }
                err = dev->hid->ll_driver->open(dev->hid);
-               if (err < 0)
+               if (err < 0) {
+                       if (dev->hid->ll_driver->power)
+                               dev->hid->ll_driver->power(dev->hid, PM_HINT_NORMAL);
                        dev->open--;
+               }
        }
 
 out_unlock:
@@ -209,10 +217,13 @@ static int hidraw_release(struct inode * inode, struct file * file)
        list_del(&list->node);
        dev = hidraw_table[minor];
        if (!--dev->open) {
-               if (list->hidraw->exist)
+               if (list->hidraw->exist) {
+                       if (dev->hid->ll_driver->power)
+                               dev->hid->ll_driver->power(dev->hid, PM_HINT_NORMAL);
                        dev->hid->ll_driver->close(dev->hid);
-               else
+               } else {
                        kfree(list->hidraw);
+               }
        }
 
        kfree(list);