Merge branch 'remotes/lorenzo/pci/misc'
[linux-2.6-microblaze.git] / drivers / gpio / gpio-aggregator.c
index dfd8a48..0817143 100644 (file)
@@ -62,34 +62,6 @@ static char *get_arg(char **args)
        return start;
 }
 
-static bool isrange(const char *s)
-{
-       size_t n;
-
-       if (IS_ERR_OR_NULL(s))
-               return false;
-
-       while (1) {
-               n = strspn(s, "0123456789");
-               if (!n)
-                       return false;
-
-               s += n;
-
-               switch (*s++) {
-               case '\0':
-                       return true;
-
-               case '-':
-               case ',':
-                       break;
-
-               default:
-                       return false;
-               }
-       }
-}
-
 static int aggr_add_gpio(struct gpio_aggregator *aggr, const char *key,
                         int hwnum, unsigned int *n)
 {
@@ -100,8 +72,7 @@ static int aggr_add_gpio(struct gpio_aggregator *aggr, const char *key,
        if (!lookups)
                return -ENOMEM;
 
-       lookups->table[*n] =
-               (struct gpiod_lookup)GPIO_LOOKUP_IDX(key, hwnum, NULL, *n, 0);
+       lookups->table[*n] = GPIO_LOOKUP_IDX(key, hwnum, NULL, *n, 0);
 
        (*n)++;
        memset(&lookups->table[*n], 0, sizeof(lookups->table[*n]));
@@ -112,10 +83,10 @@ static int aggr_add_gpio(struct gpio_aggregator *aggr, const char *key,
 
 static int aggr_parse(struct gpio_aggregator *aggr)
 {
+       char *name, *offsets, *p;
        char *args = aggr->args;
        unsigned long *bitmap;
        unsigned int i, n = 0;
-       char *name, *offsets;
        int error = 0;
 
        bitmap = bitmap_alloc(ARCH_NR_GPIOS, GFP_KERNEL);
@@ -130,7 +101,8 @@ static int aggr_parse(struct gpio_aggregator *aggr)
                        goto free_bitmap;
                }
 
-               if (!isrange(offsets)) {
+               p = get_options(offsets, 0, &error);
+               if (error == 0 || *p) {
                        /* Named GPIO line */
                        error = aggr_add_gpio(aggr, name, U16_MAX, &n);
                        if (error)
@@ -271,7 +243,7 @@ static DRIVER_ATTR_WO(delete_device);
 static struct attribute *gpio_aggregator_attrs[] = {
        &driver_attr_new_device.attr,
        &driver_attr_delete_device.attr,
-       NULL,
+       NULL
 };
 ATTRIBUTE_GROUPS(gpio_aggregator);
 
@@ -545,7 +517,7 @@ static const struct of_device_id gpio_aggregator_dt_ids[] = {
         * Add GPIO-operated devices controlled from userspace below,
         * or use "driver_override" in sysfs
         */
-       {},
+       {}
 };
 MODULE_DEVICE_TABLE(of, gpio_aggregator_dt_ids);
 #endif