Merge branch 'master' into sh/st-integration
[safe/jmp/linux-2.6] / drivers / dio / dio.c
index a620f7d..55dd88d 100644 (file)
@@ -88,8 +88,6 @@ static struct dioname names[] =
 #undef DIONAME
 #undef DIOFBNAME
 
-#define NUMNAMES (sizeof(names) / sizeof(struct dioname))
-
 static const char *unknowndioname 
         = "unknown DIO board -- please email <linux-m68k@lists.linux-m68k.org>!";
 
@@ -97,7 +95,7 @@ static const char *dio_getname(int id)
 {
         /* return pointer to a constant string describing the board with given ID */
        unsigned int i;
-        for (i = 0; i < NUMNAMES; i++)
+       for (i = 0; i < ARRAY_SIZE(names); i++)
                 if (names[i].id == id) 
                         return names[i].name;
 
@@ -175,6 +173,7 @@ static int __init dio_init(void)
        mm_segment_t fs;
        int i;
        struct dio_dev *dev;
+       int error;
 
        if (!MACH_IS_HP300)
                return 0;
@@ -183,8 +182,12 @@ static int __init dio_init(void)
 
        /* Initialize the DIO bus */ 
        INIT_LIST_HEAD(&dio_bus.devices);
-       strcpy(dio_bus.dev.bus_id, "dio");
-       device_register(&dio_bus.dev);
+       dev_set_name(&dio_bus.dev, "dio");
+       error = device_register(&dio_bus.dev);
+       if (error) {
+               pr_err("DIO: Error registering dio_bus\n");
+               return error;
+       }
 
        /* Request all resources */
        dio_bus.num_resources = (hp300_model == HP_320 ? 1 : 2);
@@ -224,18 +227,17 @@ static int __init dio_init(void)
                set_fs(fs);
 
                 /* Found a board, allocate it an entry in the list */
-               dev = kmalloc(sizeof(struct dio_dev), GFP_KERNEL);
+               dev = kzalloc(sizeof(struct dio_dev), GFP_KERNEL);
                if (!dev)
                        return 0;
 
-               memset(dev, 0, sizeof(struct dio_dev));
                dev->bus = &dio_bus;
                dev->dev.parent = &dio_bus.dev;
                dev->dev.bus = &dio_bus_type;
                dev->scode = scode;
                dev->resource.start = pa;
                dev->resource.end = pa + DIO_SIZE(scode, va);
-               sprintf(dev->dev.bus_id,"%02x", scode);
+               dev_set_name(&dev->dev, "%02x", scode);
 
                 /* read the ID byte(s) and encode if necessary. */
                prid = DIO_ID(va);
@@ -255,8 +257,15 @@ static int __init dio_init(void)
 
                if (scode >= DIOII_SCBASE)
                        iounmap(va);
-               device_register(&dev->dev);
-               dio_create_sysfs_dev_files(dev);
+               error = device_register(&dev->dev);
+               if (error) {
+                       pr_err("DIO: Error registering device %s\n",
+                              dev->name);
+                       continue;
+               }
+               error = dio_create_sysfs_dev_files(dev);
+               if (error)
+                       dev_err(&dev->dev, "Error creating sysfs files\n");
         }
        return 0;
 }