aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/media/rc/fintek-cir.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/media/rc/fintek-cir.c')
-rw-r--r--drivers/media/rc/fintek-cir.c24
1 files changed, 13 insertions, 11 deletions
diff --git a/drivers/media/rc/fintek-cir.c b/drivers/media/rc/fintek-cir.c
index 1df410e13688..d6fa441655d2 100644
--- a/drivers/media/rc/fintek-cir.c
+++ b/drivers/media/rc/fintek-cir.c
@@ -500,18 +500,18 @@ static int fintek_probe(struct pnp_dev *pdev, const struct pnp_device_id *dev_id
500 /* input device for IR remote (and tx) */ 500 /* input device for IR remote (and tx) */
501 rdev = rc_allocate_device(); 501 rdev = rc_allocate_device();
502 if (!rdev) 502 if (!rdev)
503 goto failure; 503 goto exit_free_dev_rdev;
504 504
505 ret = -ENODEV; 505 ret = -ENODEV;
506 /* validate pnp resources */ 506 /* validate pnp resources */
507 if (!pnp_port_valid(pdev, 0)) { 507 if (!pnp_port_valid(pdev, 0)) {
508 dev_err(&pdev->dev, "IR PNP Port not valid!\n"); 508 dev_err(&pdev->dev, "IR PNP Port not valid!\n");
509 goto failure; 509 goto exit_free_dev_rdev;
510 } 510 }
511 511
512 if (!pnp_irq_valid(pdev, 0)) { 512 if (!pnp_irq_valid(pdev, 0)) {
513 dev_err(&pdev->dev, "IR PNP IRQ not valid!\n"); 513 dev_err(&pdev->dev, "IR PNP IRQ not valid!\n");
514 goto failure; 514 goto exit_free_dev_rdev;
515 } 515 }
516 516
517 fintek->cir_addr = pnp_port_start(pdev, 0); 517 fintek->cir_addr = pnp_port_start(pdev, 0);
@@ -528,7 +528,7 @@ static int fintek_probe(struct pnp_dev *pdev, const struct pnp_device_id *dev_id
528 528
529 ret = fintek_hw_detect(fintek); 529 ret = fintek_hw_detect(fintek);
530 if (ret) 530 if (ret)
531 goto failure; 531 goto exit_free_dev_rdev;
532 532
533 /* Initialize CIR & CIR Wake Logical Devices */ 533 /* Initialize CIR & CIR Wake Logical Devices */
534 fintek_config_mode_enable(fintek); 534 fintek_config_mode_enable(fintek);
@@ -557,33 +557,35 @@ static int fintek_probe(struct pnp_dev *pdev, const struct pnp_device_id *dev_id
557 /* rx resolution is hardwired to 50us atm, 1, 25, 100 also possible */ 557 /* rx resolution is hardwired to 50us atm, 1, 25, 100 also possible */
558 rdev->rx_resolution = US_TO_NS(CIR_SAMPLE_PERIOD); 558 rdev->rx_resolution = US_TO_NS(CIR_SAMPLE_PERIOD);
559 559
560 fintek->rdev = rdev;
561
560 ret = -EBUSY; 562 ret = -EBUSY;
561 /* now claim resources */ 563 /* now claim resources */
562 if (!request_region(fintek->cir_addr, 564 if (!request_region(fintek->cir_addr,
563 fintek->cir_port_len, FINTEK_DRIVER_NAME)) 565 fintek->cir_port_len, FINTEK_DRIVER_NAME))
564 goto failure; 566 goto exit_free_dev_rdev;
565 567
566 if (request_irq(fintek->cir_irq, fintek_cir_isr, IRQF_SHARED, 568 if (request_irq(fintek->cir_irq, fintek_cir_isr, IRQF_SHARED,
567 FINTEK_DRIVER_NAME, (void *)fintek)) 569 FINTEK_DRIVER_NAME, (void *)fintek))
568 goto failure2; 570 goto exit_free_cir_addr;
569 571
570 ret = rc_register_device(rdev); 572 ret = rc_register_device(rdev);
571 if (ret) 573 if (ret)
572 goto failure3; 574 goto exit_free_irq;
573 575
574 device_init_wakeup(&pdev->dev, true); 576 device_init_wakeup(&pdev->dev, true);
575 fintek->rdev = rdev; 577
576 fit_pr(KERN_NOTICE, "driver has been successfully loaded\n"); 578 fit_pr(KERN_NOTICE, "driver has been successfully loaded\n");
577 if (debug) 579 if (debug)
578 cir_dump_regs(fintek); 580 cir_dump_regs(fintek);
579 581
580 return 0; 582 return 0;
581 583
582failure3: 584exit_free_irq:
583 free_irq(fintek->cir_irq, fintek); 585 free_irq(fintek->cir_irq, fintek);
584failure2: 586exit_free_cir_addr:
585 release_region(fintek->cir_addr, fintek->cir_port_len); 587 release_region(fintek->cir_addr, fintek->cir_port_len);
586failure: 588exit_free_dev_rdev:
587 rc_free_device(rdev); 589 rc_free_device(rdev);
588 kfree(fintek); 590 kfree(fintek);
589 591