diff options
Diffstat (limited to 'drivers/gpio/gpio-aggregator.c')
| -rw-r--r-- | drivers/gpio/gpio-aggregator.c | 39 | 
1 files changed, 5 insertions, 34 deletions
| diff --git a/drivers/gpio/gpio-aggregator.c b/drivers/gpio/gpio-aggregator.c index 08171431bb8f..34e35b64dcdc 100644 --- a/drivers/gpio/gpio-aggregator.c +++ b/drivers/gpio/gpio-aggregator.c @@ -37,31 +37,6 @@ struct gpio_aggregator {  static DEFINE_MUTEX(gpio_aggregator_lock);	/* protects idr */  static DEFINE_IDR(gpio_aggregator_idr); -static char *get_arg(char **args) -{ -	char *start, *end; - -	start = skip_spaces(*args); -	if (!*start) -		return NULL; - -	if (*start == '"') { -		/* Quoted arg */ -		end = strchr(++start, '"'); -		if (!end) -			return ERR_PTR(-EINVAL); -	} else { -		/* Unquoted arg */ -		for (end = start; *end && !isspace(*end); end++) ; -	} - -	if (*end) -		*end++ = '\0'; - -	*args = end; -	return start; -} -  static int aggr_add_gpio(struct gpio_aggregator *aggr, const char *key,  			 int hwnum, unsigned int *n)  { @@ -83,8 +58,8 @@ static int aggr_add_gpio(struct gpio_aggregator *aggr, const char *key,  static int aggr_parse(struct gpio_aggregator *aggr)  { +	char *args = skip_spaces(aggr->args);  	char *name, *offsets, *p; -	char *args = aggr->args;  	unsigned long *bitmap;  	unsigned int i, n = 0;  	int error = 0; @@ -93,13 +68,9 @@ static int aggr_parse(struct gpio_aggregator *aggr)  	if (!bitmap)  		return -ENOMEM; -	for (name = get_arg(&args), offsets = get_arg(&args); name; -	     offsets = get_arg(&args)) { -		if (IS_ERR(name)) { -			pr_err("Cannot get GPIO specifier: %pe\n", name); -			error = PTR_ERR(name); -			goto free_bitmap; -		} +	args = next_arg(args, &name, &p); +	while (*args) { +		args = next_arg(args, &offsets, &p);  		p = get_options(offsets, 0, &error);  		if (error == 0 || *p) { @@ -125,7 +96,7 @@ static int aggr_parse(struct gpio_aggregator *aggr)  				goto free_bitmap;  		} -		name = get_arg(&args); +		args = next_arg(args, &name, &p);  	}  	if (!n) { | 
