|
@@ -991,39 +991,10 @@ wbcir_probe(struct pnp_dev *device, const struct pnp_device_id *dev_id)
|
|
|
"(w: 0x%lX, e: 0x%lX, s: 0x%lX, i: %u)\n",
|
|
|
data->wbase, data->ebase, data->sbase, data->irq);
|
|
|
|
|
|
- if (!request_region(data->wbase, WAKEUP_IOMEM_LEN, DRVNAME)) {
|
|
|
- dev_err(dev, "Region 0x%lx-0x%lx already in use!\n",
|
|
|
- data->wbase, data->wbase + WAKEUP_IOMEM_LEN - 1);
|
|
|
- err = -EBUSY;
|
|
|
- goto exit_free_data;
|
|
|
- }
|
|
|
-
|
|
|
- if (!request_region(data->ebase, EHFUNC_IOMEM_LEN, DRVNAME)) {
|
|
|
- dev_err(dev, "Region 0x%lx-0x%lx already in use!\n",
|
|
|
- data->ebase, data->ebase + EHFUNC_IOMEM_LEN - 1);
|
|
|
- err = -EBUSY;
|
|
|
- goto exit_release_wbase;
|
|
|
- }
|
|
|
-
|
|
|
- if (!request_region(data->sbase, SP_IOMEM_LEN, DRVNAME)) {
|
|
|
- dev_err(dev, "Region 0x%lx-0x%lx already in use!\n",
|
|
|
- data->sbase, data->sbase + SP_IOMEM_LEN - 1);
|
|
|
- err = -EBUSY;
|
|
|
- goto exit_release_ebase;
|
|
|
- }
|
|
|
-
|
|
|
- err = request_irq(data->irq, wbcir_irq_handler,
|
|
|
- IRQF_DISABLED, DRVNAME, device);
|
|
|
- if (err) {
|
|
|
- dev_err(dev, "Failed to claim IRQ %u\n", data->irq);
|
|
|
- err = -EBUSY;
|
|
|
- goto exit_release_sbase;
|
|
|
- }
|
|
|
-
|
|
|
led_trigger_register_simple("cir-tx", &data->txtrigger);
|
|
|
if (!data->txtrigger) {
|
|
|
err = -ENOMEM;
|
|
|
- goto exit_free_irq;
|
|
|
+ goto exit_free_data;
|
|
|
}
|
|
|
|
|
|
led_trigger_register_simple("cir-rx", &data->rxtrigger);
|
|
@@ -1062,9 +1033,38 @@ wbcir_probe(struct pnp_dev *device, const struct pnp_device_id *dev_id)
|
|
|
data->dev->priv = data;
|
|
|
data->dev->dev.parent = &device->dev;
|
|
|
|
|
|
+ if (!request_region(data->wbase, WAKEUP_IOMEM_LEN, DRVNAME)) {
|
|
|
+ dev_err(dev, "Region 0x%lx-0x%lx already in use!\n",
|
|
|
+ data->wbase, data->wbase + WAKEUP_IOMEM_LEN - 1);
|
|
|
+ err = -EBUSY;
|
|
|
+ goto exit_free_rc;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (!request_region(data->ebase, EHFUNC_IOMEM_LEN, DRVNAME)) {
|
|
|
+ dev_err(dev, "Region 0x%lx-0x%lx already in use!\n",
|
|
|
+ data->ebase, data->ebase + EHFUNC_IOMEM_LEN - 1);
|
|
|
+ err = -EBUSY;
|
|
|
+ goto exit_release_wbase;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (!request_region(data->sbase, SP_IOMEM_LEN, DRVNAME)) {
|
|
|
+ dev_err(dev, "Region 0x%lx-0x%lx already in use!\n",
|
|
|
+ data->sbase, data->sbase + SP_IOMEM_LEN - 1);
|
|
|
+ err = -EBUSY;
|
|
|
+ goto exit_release_ebase;
|
|
|
+ }
|
|
|
+
|
|
|
+ err = request_irq(data->irq, wbcir_irq_handler,
|
|
|
+ IRQF_DISABLED, DRVNAME, device);
|
|
|
+ if (err) {
|
|
|
+ dev_err(dev, "Failed to claim IRQ %u\n", data->irq);
|
|
|
+ err = -EBUSY;
|
|
|
+ goto exit_release_sbase;
|
|
|
+ }
|
|
|
+
|
|
|
err = rc_register_device(data->dev);
|
|
|
if (err)
|
|
|
- goto exit_free_rc;
|
|
|
+ goto exit_free_irq;
|
|
|
|
|
|
device_init_wakeup(&device->dev, 1);
|
|
|
|
|
@@ -1072,14 +1072,6 @@ wbcir_probe(struct pnp_dev *device, const struct pnp_device_id *dev_id)
|
|
|
|
|
|
return 0;
|
|
|
|
|
|
-exit_free_rc:
|
|
|
- rc_free_device(data->dev);
|
|
|
-exit_unregister_led:
|
|
|
- led_classdev_unregister(&data->led);
|
|
|
-exit_unregister_rxtrigger:
|
|
|
- led_trigger_unregister_simple(data->rxtrigger);
|
|
|
-exit_unregister_txtrigger:
|
|
|
- led_trigger_unregister_simple(data->txtrigger);
|
|
|
exit_free_irq:
|
|
|
free_irq(data->irq, device);
|
|
|
exit_release_sbase:
|
|
@@ -1088,6 +1080,14 @@ exit_release_ebase:
|
|
|
release_region(data->ebase, EHFUNC_IOMEM_LEN);
|
|
|
exit_release_wbase:
|
|
|
release_region(data->wbase, WAKEUP_IOMEM_LEN);
|
|
|
+exit_free_rc:
|
|
|
+ rc_free_device(data->dev);
|
|
|
+exit_unregister_led:
|
|
|
+ led_classdev_unregister(&data->led);
|
|
|
+exit_unregister_rxtrigger:
|
|
|
+ led_trigger_unregister_simple(data->rxtrigger);
|
|
|
+exit_unregister_txtrigger:
|
|
|
+ led_trigger_unregister_simple(data->txtrigger);
|
|
|
exit_free_data:
|
|
|
kfree(data);
|
|
|
pnp_set_drvdata(device, NULL);
|