Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
[firefly-linux-kernel-4.4.55.git] / drivers / net / ieee802154 / mrf24j40.c
index 0ca8f88ac538f2f735435723dc2bee1ea8c2618c..ede3ce4912f92162b9411167fb8cab5ea248c479 100644 (file)
@@ -25,6 +25,7 @@
 #include <linux/pinctrl/consumer.h>
 #include <net/wpan-phy.h>
 #include <net/mac802154.h>
+#include <net/ieee802154.h>
 
 /* MRF24J40 Short Address Registers */
 #define REG_RXMCR    0x00  /* Receive MAC control */
@@ -349,7 +350,9 @@ static int mrf24j40_tx(struct ieee802154_dev *dev, struct sk_buff *skb)
        if (ret)
                goto err;
        val |= 0x1;
-       val &= ~0x4;
+       /* Set TXNACKREQ if the ACK bit is set in the packet. */
+       if (skb->data[0] & IEEE802154_FC_ACK_REQ)
+               val |= 0x4;
        write_short_reg(devrec, REG_TXNCON, val);
 
        INIT_COMPLETION(devrec->tx_complete);
@@ -371,7 +374,7 @@ static int mrf24j40_tx(struct ieee802154_dev *dev, struct sk_buff *skb)
        if (ret)
                goto err;
        if (val & 0x1) {
-               dev_err(printdev(devrec), "Error Sending. Retry count exceeded\n");
+               dev_dbg(printdev(devrec), "Error Sending. Retry count exceeded\n");
                ret = -ECOMM; /* TODO: Better error code ? */
        } else
                dev_dbg(printdev(devrec), "Packet Sent\n");
@@ -648,7 +651,7 @@ static int mrf24j40_probe(struct spi_device *spi)
        init_completion(&devrec->tx_complete);
        INIT_WORK(&devrec->irqwork, mrf24j40_isrwork);
        devrec->spi = spi;
-       dev_set_drvdata(&spi->dev, devrec);
+       spi_set_drvdata(spi, devrec);
 
        /* Register with the 802154 subsystem */
 
@@ -720,7 +723,7 @@ err_devrec:
 
 static int mrf24j40_remove(struct spi_device *spi)
 {
-       struct mrf24j40 *devrec = dev_get_drvdata(&spi->dev);
+       struct mrf24j40 *devrec = spi_get_drvdata(spi);
 
        dev_dbg(printdev(devrec), "remove\n");
 
@@ -732,7 +735,7 @@ static int mrf24j40_remove(struct spi_device *spi)
         * complete? */
 
        /* Clean up the SPI stuff. */
-       dev_set_drvdata(&spi->dev, NULL);
+       spi_set_drvdata(spi, NULL);
        kfree(devrec->buf);
        kfree(devrec);
        return 0;
@@ -756,18 +759,7 @@ static struct spi_driver mrf24j40_driver = {
        .remove = mrf24j40_remove,
 };
 
-static int __init mrf24j40_init(void)
-{
-       return spi_register_driver(&mrf24j40_driver);
-}
-
-static void __exit mrf24j40_exit(void)
-{
-       spi_unregister_driver(&mrf24j40_driver);
-}
-
-module_init(mrf24j40_init);
-module_exit(mrf24j40_exit);
+module_spi_driver(mrf24j40_driver);
 
 MODULE_LICENSE("GPL");
 MODULE_AUTHOR("Alan Ott");