diff options
Diffstat (limited to 'arch/powerpc/sysdev/qe_lib')
| -rw-r--r-- | arch/powerpc/sysdev/qe_lib/gpio.c | 42 | ||||
| -rw-r--r-- | arch/powerpc/sysdev/qe_lib/qe_ic.c | 12 | 
2 files changed, 14 insertions, 40 deletions
diff --git a/arch/powerpc/sysdev/qe_lib/gpio.c b/arch/powerpc/sysdev/qe_lib/gpio.c index e23f23cf9f5..521e67a49dc 100644 --- a/arch/powerpc/sysdev/qe_lib/gpio.c +++ b/arch/powerpc/sysdev/qe_lib/gpio.c @@ -139,14 +139,10 @@ struct qe_pin {  struct qe_pin *qe_pin_request(struct device_node *np, int index)  {  	struct qe_pin *qe_pin; -	struct device_node *gpio_np;  	struct gpio_chip *gc;  	struct of_mm_gpio_chip *mm_gc;  	struct qe_gpio_chip *qe_gc;  	int err; -	int size; -	const void *gpio_spec; -	const u32 *gpio_cells;  	unsigned long flags;  	qe_pin = kzalloc(sizeof(*qe_pin), GFP_KERNEL); @@ -155,45 +151,25 @@ struct qe_pin *qe_pin_request(struct device_node *np, int index)  		return ERR_PTR(-ENOMEM);  	} -	err = of_parse_phandles_with_args(np, "gpios", "#gpio-cells", index, -					  &gpio_np, &gpio_spec); -	if (err) { -		pr_debug("%s: can't parse gpios property\n", __func__); +	err = of_get_gpio(np, index); +	if (err < 0) +		goto err0; +	gc = gpio_to_chip(err); +	if (WARN_ON(!gc))  		goto err0; -	} -	if (!of_device_is_compatible(gpio_np, "fsl,mpc8323-qe-pario-bank")) { +	if (!of_device_is_compatible(gc->of_node, "fsl,mpc8323-qe-pario-bank")) {  		pr_debug("%s: tried to get a non-qe pin\n", __func__);  		err = -EINVAL; -		goto err1; -	} - -	gc = of_node_to_gpiochip(gpio_np); -	if (!gc) { -		pr_debug("%s: gpio controller %s isn't registered\n", -			 np->full_name, gpio_np->full_name); -		err = -ENODEV; -		goto err1; -	} - -	gpio_cells = of_get_property(gpio_np, "#gpio-cells", &size); -	if (!gpio_cells || size != sizeof(*gpio_cells) || -			*gpio_cells != gc->of_gpio_n_cells) { -		pr_debug("%s: wrong #gpio-cells for %s\n", -			 np->full_name, gpio_np->full_name); -		err = -EINVAL; -		goto err1; +		goto err0;  	} -	err = gc->of_xlate(gc, np, gpio_spec, NULL); -	if (err < 0) -		goto err1; -  	mm_gc = to_of_mm_gpio_chip(gc);  	qe_gc = to_qe_gpio_chip(mm_gc);  	spin_lock_irqsave(&qe_gc->lock, flags); +	err -= gc->base;  	if (test_and_set_bit(QE_PIN_REQUESTED, &qe_gc->pin_flags[err]) == 0) {  		qe_pin->controller = qe_gc;  		qe_pin->num = err; @@ -206,8 +182,6 @@ struct qe_pin *qe_pin_request(struct device_node *np, int index)  	if (!err)  		return qe_pin; -err1: -	of_node_put(gpio_np);  err0:  	kfree(qe_pin);  	pr_debug("%s failed with status %d\n", __func__, err); diff --git a/arch/powerpc/sysdev/qe_lib/qe_ic.c b/arch/powerpc/sysdev/qe_lib/qe_ic.c index 18e75ca19fe..73034bd203c 100644 --- a/arch/powerpc/sysdev/qe_lib/qe_ic.c +++ b/arch/powerpc/sysdev/qe_lib/qe_ic.c @@ -22,7 +22,6 @@  #include <linux/stddef.h>  #include <linux/sched.h>  #include <linux/signal.h> -#include <linux/sysdev.h>  #include <linux/device.h>  #include <linux/bootmem.h>  #include <linux/spinlock.h> @@ -484,13 +483,14 @@ int qe_ic_set_high_priority(unsigned int virq, unsigned int priority, int high)  	return 0;  } -static struct sysdev_class qe_ic_sysclass = { +static struct bus_type qe_ic_subsys = {  	.name = "qe_ic", +	.dev_name = "qe_ic",  }; -static struct sys_device device_qe_ic = { +static struct device device_qe_ic = {  	.id = 0, -	.cls = &qe_ic_sysclass, +	.bus = &qe_ic_subsys,  };  static int __init init_qe_ic_sysfs(void) @@ -499,12 +499,12 @@ static int __init init_qe_ic_sysfs(void)  	printk(KERN_DEBUG "Registering qe_ic with sysfs...\n"); -	rc = sysdev_class_register(&qe_ic_sysclass); +	rc = subsys_system_register(&qe_ic_subsys, NULL);  	if (rc) {  		printk(KERN_ERR "Failed registering qe_ic sys class\n");  		return -ENODEV;  	} -	rc = sysdev_register(&device_qe_ic); +	rc = device_register(&device_qe_ic);  	if (rc) {  		printk(KERN_ERR "Failed registering qe_ic sys device\n");  		return -ENODEV;  | 
