diff options
author | Varka Bhadram <varkabhadram@gmail.com> | 2014-06-11 00:34:44 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2014-06-11 18:39:19 -0400 |
commit | 0aaf43f51dc7e7f00029c90d778e895a88a90cc6 (patch) | |
tree | 7305b494d06963ec9d353c2db2ede64ed7e141e2 | |
parent | f6479449957750175a2dbd9ddf051c04a072abd6 (diff) |
mrf24j40: add device managed APIs
adds the device managed APIs so that no need worry about
freeing the resources.
Signed-off-by: Varka Bhadram <varkab@cdac.in>
Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r-- | drivers/net/ieee802154/mrf24j40.c | 33 |
1 files changed, 13 insertions, 20 deletions
diff --git a/drivers/net/ieee802154/mrf24j40.c b/drivers/net/ieee802154/mrf24j40.c index 78a6552ed707..4048062011ba 100644 --- a/drivers/net/ieee802154/mrf24j40.c +++ b/drivers/net/ieee802154/mrf24j40.c | |||
@@ -618,12 +618,12 @@ static int mrf24j40_probe(struct spi_device *spi) | |||
618 | 618 | ||
619 | printk(KERN_INFO "mrf24j40: probe(). IRQ: %d\n", spi->irq); | 619 | printk(KERN_INFO "mrf24j40: probe(). IRQ: %d\n", spi->irq); |
620 | 620 | ||
621 | devrec = kzalloc(sizeof(struct mrf24j40), GFP_KERNEL); | 621 | devrec = devm_kzalloc(&spi->dev, sizeof(struct mrf24j40), GFP_KERNEL); |
622 | if (!devrec) | 622 | if (!devrec) |
623 | goto err_devrec; | 623 | goto err_ret; |
624 | devrec->buf = kzalloc(3, GFP_KERNEL); | 624 | devrec->buf = devm_kzalloc(&spi->dev, 3, GFP_KERNEL); |
625 | if (!devrec->buf) | 625 | if (!devrec->buf) |
626 | goto err_buf; | 626 | goto err_ret; |
627 | 627 | ||
628 | spi->mode = SPI_MODE_0; /* TODO: Is this appropriate for right here? */ | 628 | spi->mode = SPI_MODE_0; /* TODO: Is this appropriate for right here? */ |
629 | if (spi->max_speed_hz > MAX_SPI_SPEED_HZ) | 629 | if (spi->max_speed_hz > MAX_SPI_SPEED_HZ) |
@@ -638,7 +638,7 @@ static int mrf24j40_probe(struct spi_device *spi) | |||
638 | 638 | ||
639 | devrec->dev = ieee802154_alloc_device(0, &mrf24j40_ops); | 639 | devrec->dev = ieee802154_alloc_device(0, &mrf24j40_ops); |
640 | if (!devrec->dev) | 640 | if (!devrec->dev) |
641 | goto err_alloc_dev; | 641 | goto err_ret; |
642 | 642 | ||
643 | devrec->dev->priv = devrec; | 643 | devrec->dev->priv = devrec; |
644 | devrec->dev->parent = &devrec->spi->dev; | 644 | devrec->dev->parent = &devrec->spi->dev; |
@@ -676,12 +676,13 @@ static int mrf24j40_probe(struct spi_device *spi) | |||
676 | val &= ~0x3; /* Clear RX mode (normal) */ | 676 | val &= ~0x3; /* Clear RX mode (normal) */ |
677 | write_short_reg(devrec, REG_RXMCR, val); | 677 | write_short_reg(devrec, REG_RXMCR, val); |
678 | 678 | ||
679 | ret = request_threaded_irq(spi->irq, | 679 | ret = devm_request_threaded_irq(&spi->dev, |
680 | NULL, | 680 | spi->irq, |
681 | mrf24j40_isr, | 681 | NULL, |
682 | IRQF_TRIGGER_LOW|IRQF_ONESHOT, | 682 | mrf24j40_isr, |
683 | dev_name(&spi->dev), | 683 | IRQF_TRIGGER_LOW|IRQF_ONESHOT, |
684 | devrec); | 684 | dev_name(&spi->dev), |
685 | devrec); | ||
685 | 686 | ||
686 | if (ret) { | 687 | if (ret) { |
687 | dev_err(printdev(devrec), "Unable to get IRQ"); | 688 | dev_err(printdev(devrec), "Unable to get IRQ"); |
@@ -695,11 +696,7 @@ err_read_reg: | |||
695 | ieee802154_unregister_device(devrec->dev); | 696 | ieee802154_unregister_device(devrec->dev); |
696 | err_register_device: | 697 | err_register_device: |
697 | ieee802154_free_device(devrec->dev); | 698 | ieee802154_free_device(devrec->dev); |
698 | err_alloc_dev: | 699 | err_ret: |
699 | kfree(devrec->buf); | ||
700 | err_buf: | ||
701 | kfree(devrec); | ||
702 | err_devrec: | ||
703 | return ret; | 700 | return ret; |
704 | } | 701 | } |
705 | 702 | ||
@@ -709,15 +706,11 @@ static int mrf24j40_remove(struct spi_device *spi) | |||
709 | 706 | ||
710 | dev_dbg(printdev(devrec), "remove\n"); | 707 | dev_dbg(printdev(devrec), "remove\n"); |
711 | 708 | ||
712 | free_irq(spi->irq, devrec); | ||
713 | ieee802154_unregister_device(devrec->dev); | 709 | ieee802154_unregister_device(devrec->dev); |
714 | ieee802154_free_device(devrec->dev); | 710 | ieee802154_free_device(devrec->dev); |
715 | /* TODO: Will ieee802154_free_device() wait until ->xmit() is | 711 | /* TODO: Will ieee802154_free_device() wait until ->xmit() is |
716 | * complete? */ | 712 | * complete? */ |
717 | 713 | ||
718 | /* Clean up the SPI stuff. */ | ||
719 | kfree(devrec->buf); | ||
720 | kfree(devrec); | ||
721 | return 0; | 714 | return 0; |
722 | } | 715 | } |
723 | 716 | ||