aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/staging/media/lirc/lirc_serial.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/staging/media/lirc/lirc_serial.c')
-rw-r--r--drivers/staging/media/lirc/lirc_serial.c19
1 files changed, 16 insertions, 3 deletions
diff --git a/drivers/staging/media/lirc/lirc_serial.c b/drivers/staging/media/lirc/lirc_serial.c
index 86376311506..d833772ef80 100644
--- a/drivers/staging/media/lirc/lirc_serial.c
+++ b/drivers/staging/media/lirc/lirc_serial.c
@@ -875,11 +875,14 @@ static int __devinit lirc_serial_probe(struct platform_device *dev)
875 ": or compile the serial port driver as module and\n"); 875 ": or compile the serial port driver as module and\n");
876 printk(KERN_WARNING LIRC_DRIVER_NAME 876 printk(KERN_WARNING LIRC_DRIVER_NAME
877 ": make sure this module is loaded first\n"); 877 ": make sure this module is loaded first\n");
878 return -EBUSY; 878 result = -EBUSY;
879 goto exit_free_irq;
879 } 880 }
880 881
881 if (hardware_init_port() < 0) 882 if (hardware_init_port() < 0) {
882 return -EINVAL; 883 result = -EINVAL;
884 goto exit_release_region;
885 }
883 886
884 /* Initialize pulse/space widths */ 887 /* Initialize pulse/space widths */
885 init_timing_params(duty_cycle, freq); 888 init_timing_params(duty_cycle, freq);
@@ -911,6 +914,16 @@ static int __devinit lirc_serial_probe(struct platform_device *dev)
911 914
912 dprintk("Interrupt %d, port %04x obtained\n", irq, io); 915 dprintk("Interrupt %d, port %04x obtained\n", irq, io);
913 return 0; 916 return 0;
917
918exit_release_region:
919 if (iommap != 0)
920 release_mem_region(iommap, 8 << ioshift);
921 else
922 release_region(io, 8);
923exit_free_irq:
924 free_irq(irq, (void *)&hardware);
925
926 return result;
914} 927}
915 928
916static int __devexit lirc_serial_remove(struct platform_device *dev) 929static int __devexit lirc_serial_remove(struct platform_device *dev)