diff options
-rw-r--r-- | drivers/gpio/gpio-104-idi-48.c | 28 |
1 files changed, 5 insertions, 23 deletions
diff --git a/drivers/gpio/gpio-104-idi-48.c b/drivers/gpio/gpio-104-idi-48.c index 2d2763ea1a68..eafbf053f3e8 100644 --- a/drivers/gpio/gpio-104-idi-48.c +++ b/drivers/gpio/gpio-104-idi-48.c | |||
@@ -47,7 +47,6 @@ MODULE_PARM_DESC(irq, "ACCES 104-IDI-48 interrupt line numbers"); | |||
47 | * @ack_lock: synchronization lock to prevent IRQ handler race conditions | 47 | * @ack_lock: synchronization lock to prevent IRQ handler race conditions |
48 | * @irq_mask: input bits affected by interrupts | 48 | * @irq_mask: input bits affected by interrupts |
49 | * @base: base port address of the GPIO device | 49 | * @base: base port address of the GPIO device |
50 | * @irq: Interrupt line number | ||
51 | * @cos_enb: Change-Of-State IRQ enable boundaries mask | 50 | * @cos_enb: Change-Of-State IRQ enable boundaries mask |
52 | */ | 51 | */ |
53 | struct idi_48_gpio { | 52 | struct idi_48_gpio { |
@@ -56,7 +55,6 @@ struct idi_48_gpio { | |||
56 | spinlock_t ack_lock; | 55 | spinlock_t ack_lock; |
57 | unsigned char irq_mask[6]; | 56 | unsigned char irq_mask[6]; |
58 | unsigned base; | 57 | unsigned base; |
59 | unsigned irq; | ||
60 | unsigned char cos_enb; | 58 | unsigned char cos_enb; |
61 | }; | 59 | }; |
62 | 60 | ||
@@ -244,14 +242,13 @@ static int idi_48_probe(struct device *dev, unsigned int id) | |||
244 | idi48gpio->chip.direction_input = idi_48_gpio_direction_input; | 242 | idi48gpio->chip.direction_input = idi_48_gpio_direction_input; |
245 | idi48gpio->chip.get = idi_48_gpio_get; | 243 | idi48gpio->chip.get = idi_48_gpio_get; |
246 | idi48gpio->base = base[id]; | 244 | idi48gpio->base = base[id]; |
247 | idi48gpio->irq = irq[id]; | ||
248 | 245 | ||
249 | spin_lock_init(&idi48gpio->lock); | 246 | spin_lock_init(&idi48gpio->lock); |
250 | spin_lock_init(&idi48gpio->ack_lock); | 247 | spin_lock_init(&idi48gpio->ack_lock); |
251 | 248 | ||
252 | dev_set_drvdata(dev, idi48gpio); | 249 | dev_set_drvdata(dev, idi48gpio); |
253 | 250 | ||
254 | err = gpiochip_add_data(&idi48gpio->chip, idi48gpio); | 251 | err = devm_gpiochip_add_data(dev, &idi48gpio->chip, idi48gpio); |
255 | if (err) { | 252 | if (err) { |
256 | dev_err(dev, "GPIO registering failed (%d)\n", err); | 253 | dev_err(dev, "GPIO registering failed (%d)\n", err); |
257 | return err; | 254 | return err; |
@@ -265,31 +262,17 @@ static int idi_48_probe(struct device *dev, unsigned int id) | |||
265 | handle_edge_irq, IRQ_TYPE_NONE); | 262 | handle_edge_irq, IRQ_TYPE_NONE); |
266 | if (err) { | 263 | if (err) { |
267 | dev_err(dev, "Could not add irqchip (%d)\n", err); | 264 | dev_err(dev, "Could not add irqchip (%d)\n", err); |
268 | goto err_gpiochip_remove; | 265 | return err; |
269 | } | 266 | } |
270 | 267 | ||
271 | err = request_irq(irq[id], idi_48_irq_handler, IRQF_SHARED, name, | 268 | err = devm_request_irq(dev, irq[id], idi_48_irq_handler, IRQF_SHARED, |
272 | idi48gpio); | 269 | name, idi48gpio); |
273 | if (err) { | 270 | if (err) { |
274 | dev_err(dev, "IRQ handler registering failed (%d)\n", err); | 271 | dev_err(dev, "IRQ handler registering failed (%d)\n", err); |
275 | goto err_gpiochip_remove; | 272 | return err; |
276 | } | 273 | } |
277 | 274 | ||
278 | return 0; | 275 | return 0; |
279 | |||
280 | err_gpiochip_remove: | ||
281 | gpiochip_remove(&idi48gpio->chip); | ||
282 | return err; | ||
283 | } | ||
284 | |||
285 | static int idi_48_remove(struct device *dev, unsigned int id) | ||
286 | { | ||
287 | struct idi_48_gpio *const idi48gpio = dev_get_drvdata(dev); | ||
288 | |||
289 | free_irq(idi48gpio->irq, idi48gpio); | ||
290 | gpiochip_remove(&idi48gpio->chip); | ||
291 | |||
292 | return 0; | ||
293 | } | 276 | } |
294 | 277 | ||
295 | static struct isa_driver idi_48_driver = { | 278 | static struct isa_driver idi_48_driver = { |
@@ -297,7 +280,6 @@ static struct isa_driver idi_48_driver = { | |||
297 | .driver = { | 280 | .driver = { |
298 | .name = "104-idi-48" | 281 | .name = "104-idi-48" |
299 | }, | 282 | }, |
300 | .remove = idi_48_remove | ||
301 | }; | 283 | }; |
302 | module_isa_driver(idi_48_driver, num_idi_48); | 284 | module_isa_driver(idi_48_driver, num_idi_48); |
303 | 285 | ||