aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/i2c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/i2c')
-rw-r--r--drivers/i2c/busses/i2c-bfin-twi.c44
1 files changed, 12 insertions, 32 deletions
diff --git a/drivers/i2c/busses/i2c-bfin-twi.c b/drivers/i2c/busses/i2c-bfin-twi.c
index e6d5162b6379..3e271e7558d3 100644
--- a/drivers/i2c/busses/i2c-bfin-twi.c
+++ b/drivers/i2c/busses/i2c-bfin-twi.c
@@ -620,35 +620,27 @@ static int i2c_bfin_twi_probe(struct platform_device *pdev)
620 int rc; 620 int rc;
621 unsigned int clkhilow; 621 unsigned int clkhilow;
622 622
623 iface = kzalloc(sizeof(struct bfin_twi_iface), GFP_KERNEL); 623 iface = devm_kzalloc(&pdev->dev, sizeof(struct bfin_twi_iface),
624 GFP_KERNEL);
624 if (!iface) { 625 if (!iface) {
625 dev_err(&pdev->dev, "Cannot allocate memory\n"); 626 dev_err(&pdev->dev, "Cannot allocate memory\n");
626 rc = -ENOMEM; 627 return -ENOMEM;
627 goto out_error_nomem;
628 } 628 }
629 629
630 spin_lock_init(&(iface->lock)); 630 spin_lock_init(&(iface->lock));
631 631
632 /* Find and map our resources */ 632 /* Find and map our resources */
633 res = platform_get_resource(pdev, IORESOURCE_MEM, 0); 633 res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
634 if (res == NULL) { 634 iface->regs_base = devm_ioremap_resource(&pdev->dev, res);
635 dev_err(&pdev->dev, "Cannot get IORESOURCE_MEM\n"); 635 if (IS_ERR(iface->regs_base)) {
636 rc = -ENOENT;
637 goto out_error_get_res;
638 }
639
640 iface->regs_base = ioremap(res->start, resource_size(res));
641 if (iface->regs_base == NULL) {
642 dev_err(&pdev->dev, "Cannot map IO\n"); 636 dev_err(&pdev->dev, "Cannot map IO\n");
643 rc = -ENXIO; 637 return PTR_ERR(iface->regs_base);
644 goto out_error_ioremap;
645 } 638 }
646 639
647 iface->irq = platform_get_irq(pdev, 0); 640 iface->irq = platform_get_irq(pdev, 0);
648 if (iface->irq < 0) { 641 if (iface->irq < 0) {
649 dev_err(&pdev->dev, "No IRQ specified\n"); 642 dev_err(&pdev->dev, "No IRQ specified\n");
650 rc = -ENOENT; 643 return -ENOENT;
651 goto out_error_no_irq;
652 } 644 }
653 645
654 p_adap = &iface->adap; 646 p_adap = &iface->adap;
@@ -666,15 +658,15 @@ static int i2c_bfin_twi_probe(struct platform_device *pdev)
666 "i2c-bfin-twi"); 658 "i2c-bfin-twi");
667 if (rc) { 659 if (rc) {
668 dev_err(&pdev->dev, "Can't setup pin mux!\n"); 660 dev_err(&pdev->dev, "Can't setup pin mux!\n");
669 goto out_error_pin_mux; 661 return -EBUSY;
670 } 662 }
671 663
672 rc = request_irq(iface->irq, bfin_twi_interrupt_entry, 664 rc = devm_request_irq(&pdev->dev, iface->irq, bfin_twi_interrupt_entry,
673 0, pdev->name, iface); 665 0, pdev->name, iface);
674 if (rc) { 666 if (rc) {
675 dev_err(&pdev->dev, "Can't get IRQ %d !\n", iface->irq); 667 dev_err(&pdev->dev, "Can't get IRQ %d !\n", iface->irq);
676 rc = -ENODEV; 668 rc = -ENODEV;
677 goto out_error_req_irq; 669 goto out_error;
678 } 670 }
679 671
680 /* Set TWI internal clock as 10MHz */ 672 /* Set TWI internal clock as 10MHz */
@@ -695,7 +687,7 @@ static int i2c_bfin_twi_probe(struct platform_device *pdev)
695 rc = i2c_add_numbered_adapter(p_adap); 687 rc = i2c_add_numbered_adapter(p_adap);
696 if (rc < 0) { 688 if (rc < 0) {
697 dev_err(&pdev->dev, "Can't add i2c adapter!\n"); 689 dev_err(&pdev->dev, "Can't add i2c adapter!\n");
698 goto out_error_add_adapter; 690 goto out_error;
699 } 691 }
700 692
701 platform_set_drvdata(pdev, iface); 693 platform_set_drvdata(pdev, iface);
@@ -705,17 +697,8 @@ static int i2c_bfin_twi_probe(struct platform_device *pdev)
705 697
706 return 0; 698 return 0;
707 699
708out_error_add_adapter: 700out_error:
709 free_irq(iface->irq, iface);
710out_error_req_irq:
711out_error_no_irq:
712 peripheral_free_list(dev_get_platdata(&pdev->dev)); 701 peripheral_free_list(dev_get_platdata(&pdev->dev));
713out_error_pin_mux:
714 iounmap(iface->regs_base);
715out_error_ioremap:
716out_error_get_res:
717 kfree(iface);
718out_error_nomem:
719 return rc; 702 return rc;
720} 703}
721 704
@@ -724,10 +707,7 @@ static int i2c_bfin_twi_remove(struct platform_device *pdev)
724 struct bfin_twi_iface *iface = platform_get_drvdata(pdev); 707 struct bfin_twi_iface *iface = platform_get_drvdata(pdev);
725 708
726 i2c_del_adapter(&(iface->adap)); 709 i2c_del_adapter(&(iface->adap));
727 free_irq(iface->irq, iface);
728 peripheral_free_list(dev_get_platdata(&pdev->dev)); 710 peripheral_free_list(dev_get_platdata(&pdev->dev));
729 iounmap(iface->regs_base);
730 kfree(iface);
731 711
732 return 0; 712 return 0;
733} 713}