diff options
| -rw-r--r-- | drivers/hid/hid-cp2112.c | 19 | 
1 files changed, 10 insertions, 9 deletions
| diff --git a/drivers/hid/hid-cp2112.c b/drivers/hid/hid-cp2112.c index f64517bc33e2..21e15627a461 100644 --- a/drivers/hid/hid-cp2112.c +++ b/drivers/hid/hid-cp2112.c @@ -1235,6 +1235,7 @@ static int cp2112_probe(struct hid_device *hdev, const struct hid_device_id *id)  	struct cp2112_device *dev;  	u8 buf[3];  	struct cp2112_smbus_config_report config; +	struct gpio_irq_chip *girq;  	int ret;  	dev = devm_kzalloc(&hdev->dev, sizeof(*dev), GFP_KERNEL); @@ -1338,6 +1339,15 @@ static int cp2112_probe(struct hid_device *hdev, const struct hid_device_id *id)  	dev->gc.can_sleep		= 1;  	dev->gc.parent			= &hdev->dev; +	girq = &dev->gc.irq; +	girq->chip = &cp2112_gpio_irqchip; +	/* The event comes from the outside so no parent handler */ +	girq->parent_handler = NULL; +	girq->num_parents = 0; +	girq->parents = NULL; +	girq->default_type = IRQ_TYPE_NONE; +	girq->handler = handle_simple_irq; +  	ret = gpiochip_add_data(&dev->gc, dev);  	if (ret < 0) {  		hid_err(hdev, "error registering gpio chip\n"); @@ -1353,17 +1363,8 @@ static int cp2112_probe(struct hid_device *hdev, const struct hid_device_id *id)  	chmod_sysfs_attrs(hdev);  	hid_hw_power(hdev, PM_HINT_NORMAL); -	ret = gpiochip_irqchip_add(&dev->gc, &cp2112_gpio_irqchip, 0, -				   handle_simple_irq, IRQ_TYPE_NONE); -	if (ret) { -		dev_err(dev->gc.parent, "failed to add IRQ chip\n"); -		goto err_sysfs_remove; -	} -  	return ret; -err_sysfs_remove: -	sysfs_remove_group(&hdev->dev.kobj, &cp2112_attr_group);  err_gpiochip_remove:  	gpiochip_remove(&dev->gc);  err_free_i2c: | 
