diff options
Diffstat (limited to 'drivers/dio')
| -rw-r--r-- | drivers/dio/dio-driver.c | 85 | ||||
| -rw-r--r-- | drivers/dio/dio-sysfs.c | 19 | ||||
| -rw-r--r-- | drivers/dio/dio.c | 26 |
3 files changed, 65 insertions, 65 deletions
diff --git a/drivers/dio/dio-driver.c b/drivers/dio/dio-driver.c index e4c48e32936..a7b174ef4c8 100644 --- a/drivers/dio/dio-driver.c +++ b/drivers/dio/dio-driver.c @@ -15,16 +15,15 @@ #include <linux/dio.h> - /** - * dio_match_device - Tell if a DIO device structure has a matching - * DIO device id structure - * @ids: array of DIO device id structures to search in - * @dev: the DIO device structure to match against - * - * Used by a driver to check whether a DIO device present in the - * system is in its list of supported devices. Returns the matching - * dio_device_id structure or %NULL if there is no match. - */ +/** + * dio_match_device - Tell if a DIO device structure has a matching DIO device id structure + * @ids: array of DIO device id structures to search in + * @d: the DIO device structure to match against + * + * Used by a driver to check whether a DIO device present in the + * system is in its list of supported devices. Returns the matching + * dio_device_id structure or %NULL if there is no match. + */ const struct dio_device_id * dio_match_device(const struct dio_device_id *ids, @@ -66,13 +65,13 @@ static int dio_device_probe(struct device *dev) } - /** - * dio_register_driver - register a new DIO driver - * @drv: the driver structure to register - * - * Adds the driver structure to the list of registered drivers - * Returns zero or a negative error value. - */ +/** + * dio_register_driver - register a new DIO driver + * @drv: the driver structure to register + * + * Adds the driver structure to the list of registered drivers + * Returns zero or a negative error value. + */ int dio_register_driver(struct dio_driver *drv) { @@ -85,15 +84,15 @@ int dio_register_driver(struct dio_driver *drv) } - /** - * dio_unregister_driver - unregister a DIO driver - * @drv: the driver structure to unregister - * - * Deletes the driver structure from the list of registered DIO drivers, - * gives it a chance to clean up by calling its remove() function for - * each device it was responsible for, and marks those devices as - * driverless. - */ +/** + * dio_unregister_driver - unregister a DIO driver + * @drv: the driver structure to unregister + * + * Deletes the driver structure from the list of registered DIO drivers, + * gives it a chance to clean up by calling its remove() function for + * each device it was responsible for, and marks those devices as + * driverless. + */ void dio_unregister_driver(struct dio_driver *drv) { @@ -101,16 +100,15 @@ void dio_unregister_driver(struct dio_driver *drv) } - /** - * dio_bus_match - Tell if a DIO device structure has a matching DIO - * device id structure - * @ids: array of DIO device id structures to search in - * @dev: the DIO device structure to match against - * - * Used by a driver to check whether a DIO device present in the - * system is in its list of supported devices. Returns the matching - * dio_device_id structure or %NULL if there is no match. - */ +/** + * dio_bus_match - Tell if a DIO device structure has a matching DIO device id structure + * @dev: the DIO device structure to match against + * @drv: the &device_driver that points to the array of DIO device id structures to search + * + * Used by a driver to check whether a DIO device present in the + * system is in its list of supported devices. Returns the matching + * dio_device_id structure or %NULL if there is no match. + */ static int dio_bus_match(struct device *dev, struct device_driver *drv) { @@ -121,19 +119,7 @@ static int dio_bus_match(struct device *dev, struct device_driver *drv) if (!ids) return 0; - while (ids->id) { - if (ids->id == DIO_WILDCARD) - return 1; - if (DIO_NEEDSSECID(ids->id & 0xff)) { - if (ids->id == d->id) - return 1; - } else { - if ((ids->id & 0xff) == (d->id & 0xff)) - return 1; - } - ids++; - } - return 0; + return dio_match_device(ids, d) ? 1 : 0; } @@ -154,5 +140,4 @@ postcore_initcall(dio_driver_init); EXPORT_SYMBOL(dio_match_device); EXPORT_SYMBOL(dio_register_driver); EXPORT_SYMBOL(dio_unregister_driver); -EXPORT_SYMBOL(dio_dev_driver); EXPORT_SYMBOL(dio_bus_type); diff --git a/drivers/dio/dio-sysfs.c b/drivers/dio/dio-sysfs.c index f4646303884..ee1a3b59bd4 100644 --- a/drivers/dio/dio-sysfs.c +++ b/drivers/dio/dio-sysfs.c @@ -58,20 +58,25 @@ static ssize_t dio_show_resource(struct device *dev, struct device_attribute *at struct dio_dev *d = to_dio_dev(dev); return sprintf(buf, "0x%08lx 0x%08lx 0x%08lx\n", - dio_resource_start(d), dio_resource_end(d), + (unsigned long)dio_resource_start(d), + (unsigned long)dio_resource_end(d), dio_resource_flags(d)); } static DEVICE_ATTR(resource, S_IRUGO, dio_show_resource, NULL); -void dio_create_sysfs_dev_files(struct dio_dev *d) +int dio_create_sysfs_dev_files(struct dio_dev *d) { struct device *dev = &d->dev; + int error; /* current configuration's attributes */ - device_create_file(dev, &dev_attr_id); - device_create_file(dev, &dev_attr_ipl); - device_create_file(dev, &dev_attr_secid); - device_create_file(dev, &dev_attr_name); - device_create_file(dev, &dev_attr_resource); + if ((error = device_create_file(dev, &dev_attr_id)) || + (error = device_create_file(dev, &dev_attr_ipl)) || + (error = device_create_file(dev, &dev_attr_secid)) || + (error = device_create_file(dev, &dev_attr_name)) || + (error = device_create_file(dev, &dev_attr_resource))) + return error; + + return 0; } diff --git a/drivers/dio/dio.c b/drivers/dio/dio.c index 17502d6efae..55dd88d82d6 100644 --- a/drivers/dio/dio.c +++ b/drivers/dio/dio.c @@ -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); @@ -234,7 +237,7 @@ static int __init dio_init(void) 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); @@ -254,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; } |
