V4L/DVB (13554a): v4l: Use the video_drvdata function in drivers
[safe/jmp/linux-2.6] / drivers / macintosh / adb.c
index 61b62a6..1c4ee6e 100644 (file)
@@ -317,13 +317,15 @@ static int __init adb_init(void)
                        break;
                }
        }
-       if ((adb_controller == NULL) || adb_controller->init()) {
-               printk(KERN_WARNING "Warning: no ADB interface detected\n");
+       if (adb_controller != NULL && adb_controller->init &&
+           adb_controller->init())
                adb_controller = NULL;
+       if (adb_controller == NULL) {
+               printk(KERN_WARNING "Warning: no ADB interface detected\n");
        } else {
 #ifdef CONFIG_PPC
-               if (machine_is_compatible("AAPL,PowerBook1998") ||
-                       machine_is_compatible("PowerBook1,1"))
+               if (of_machine_is_compatible("AAPL,PowerBook1998") ||
+                       of_machine_is_compatible("PowerBook1,1"))
                        sleepy_trackpad = 1;
 #endif /* CONFIG_PPC */
 
@@ -643,12 +645,18 @@ do_adb_query(struct adb_request *req)
 static int adb_open(struct inode *inode, struct file *file)
 {
        struct adbdev_state *state;
+       int ret = 0;
 
-       if (iminor(inode) > 0 || adb_controller == NULL)
-               return -ENXIO;
+       lock_kernel();
+       if (iminor(inode) > 0 || adb_controller == NULL) {
+               ret = -ENXIO;
+               goto out;
+       }
        state = kmalloc(sizeof(struct adbdev_state), GFP_KERNEL);
-       if (state == 0)
-               return -ENOMEM;
+       if (state == 0) {
+               ret = -ENOMEM;
+               goto out;
+       }
        file->private_data = state;
        spin_lock_init(&state->lock);
        atomic_set(&state->n_pending, 0);
@@ -656,7 +664,9 @@ static int adb_open(struct inode *inode, struct file *file)
        init_waitqueue_head(&state->wait_queue);
        state->inuse = 1;
 
-       return 0;
+out:
+       unlock_kernel();
+       return ret;
 }
 
 static int adb_release(struct inode *inode, struct file *file)
@@ -854,7 +864,7 @@ adbdev_init(void)
        adb_dev_class = class_create(THIS_MODULE, "adb");
        if (IS_ERR(adb_dev_class))
                return;
-       device_create(adb_dev_class, NULL, MKDEV(ADB_MAJOR, 0), "adb");
+       device_create(adb_dev_class, NULL, MKDEV(ADB_MAJOR, 0), NULL, "adb");
 
        platform_device_register(&adb_pfdev);
        platform_driver_probe(&adb_pfdrv, adb_dummy_probe);