Commit 3ee72c08 authored by Ajay Singh's avatar Ajay Singh Committed by Greg Kroah-Hartman

staging: wilc1000: use 'interrupts' property instead of 'irq-gpio'

Make use of 'interrupts' property instead of using gpio for handling
the interrupt as suggested in [1].

[1]. https://lore.kernel.org/linux-wireless/20200303015558.GA6876@bogusSigned-off-by: default avatarAjay Singh <ajay.kathat@microchip.com>
Link: https://lore.kernel.org/r/20200307085523.7320-2-ajay.kathat@microchip.comSigned-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 7d508880
...@@ -46,29 +46,21 @@ static irqreturn_t isr_bh_routine(int irq, void *userdata) ...@@ -46,29 +46,21 @@ static irqreturn_t isr_bh_routine(int irq, void *userdata)
static int init_irq(struct net_device *dev) static int init_irq(struct net_device *dev)
{ {
int ret = 0;
struct wilc_vif *vif = netdev_priv(dev); struct wilc_vif *vif = netdev_priv(dev);
struct wilc *wl = vif->wilc; struct wilc *wl = vif->wilc;
int ret;
ret = gpiod_direction_input(wl->gpio_irq);
if (ret) {
netdev_err(dev, "could not obtain gpio for WILC_INTR\n");
return ret;
}
wl->dev_irq_num = gpiod_to_irq(wl->gpio_irq);
ret = request_threaded_irq(wl->dev_irq_num, isr_uh_routine, ret = request_threaded_irq(wl->dev_irq_num, isr_uh_routine,
isr_bh_routine, isr_bh_routine,
IRQF_TRIGGER_FALLING | IRQF_ONESHOT, IRQF_TRIGGER_FALLING | IRQF_ONESHOT,
"WILC_IRQ", dev); "WILC_IRQ", dev);
if (ret < 0) if (ret) {
netdev_err(dev, "Failed to request IRQ\n"); netdev_err(dev, "Failed to request IRQ [%d]\n", ret);
else
netdev_dbg(dev, "IRQ request succeeded IRQ-NUM= %d\n",
wl->dev_irq_num);
return ret; return ret;
}
netdev_dbg(dev, "IRQ request succeeded IRQ-NUM= %d\n", wl->dev_irq_num);
return 0;
} }
static void deinit_irq(struct net_device *dev) static void deinit_irq(struct net_device *dev)
...@@ -501,7 +493,7 @@ static int wilc_wlan_initialize(struct net_device *dev, struct wilc_vif *vif) ...@@ -501,7 +493,7 @@ static int wilc_wlan_initialize(struct net_device *dev, struct wilc_vif *vif)
if (ret) if (ret)
goto fail_wilc_wlan; goto fail_wilc_wlan;
if (wl->gpio_irq && init_irq(dev)) { if (wl->dev_irq_num && init_irq(dev)) {
ret = -EIO; ret = -EIO;
goto fail_threads; goto fail_threads;
} }
......
...@@ -209,7 +209,6 @@ struct wilc { ...@@ -209,7 +209,6 @@ struct wilc {
const struct wilc_hif_func *hif_func; const struct wilc_hif_func *hif_func;
int io_type; int io_type;
s8 mac_status; s8 mac_status;
struct gpio_desc *gpio_irq;
struct clk *rtc_clk; struct clk *rtc_clk;
bool initialized; bool initialized;
int dev_irq_num; int dev_irq_num;
......
...@@ -8,6 +8,7 @@ ...@@ -8,6 +8,7 @@
#include <linux/mmc/sdio_func.h> #include <linux/mmc/sdio_func.h>
#include <linux/mmc/host.h> #include <linux/mmc/host.h>
#include <linux/mmc/sdio.h> #include <linux/mmc/sdio.h>
#include <linux/of_irq.h>
#include "netdev.h" #include "netdev.h"
#include "cfg80211.h" #include "cfg80211.h"
...@@ -122,33 +123,32 @@ static int wilc_sdio_probe(struct sdio_func *func, ...@@ -122,33 +123,32 @@ static int wilc_sdio_probe(struct sdio_func *func,
{ {
struct wilc *wilc; struct wilc *wilc;
int ret; int ret;
struct gpio_desc *gpio = NULL;
struct wilc_sdio *sdio_priv; struct wilc_sdio *sdio_priv;
sdio_priv = kzalloc(sizeof(*sdio_priv), GFP_KERNEL); sdio_priv = kzalloc(sizeof(*sdio_priv), GFP_KERNEL);
if (!sdio_priv) if (!sdio_priv)
return -ENOMEM; return -ENOMEM;
if (IS_ENABLED(CONFIG_WILC1000_HW_OOB_INTR)) {
gpio = gpiod_get(&func->dev, "irq", GPIOD_IN);
if (IS_ERR(gpio)) {
/* get the GPIO descriptor from hardcode GPIO number */
gpio = gpio_to_desc(GPIO_NUM);
if (!gpio)
dev_err(&func->dev, "failed to get irq gpio\n");
}
}
ret = wilc_cfg80211_init(&wilc, &func->dev, WILC_HIF_SDIO, ret = wilc_cfg80211_init(&wilc, &func->dev, WILC_HIF_SDIO,
&wilc_hif_sdio); &wilc_hif_sdio);
if (ret) { if (ret) {
kfree(sdio_priv); kfree(sdio_priv);
return ret; return ret;
} }
if (IS_ENABLED(CONFIG_WILC1000_HW_OOB_INTR)) {
struct device_node *np = func->card->dev.of_node;
int irq_num = of_irq_get(np, 0);
if (irq_num > 0) {
wilc->dev_irq_num = irq_num;
sdio_priv->irq_gpio = true;
}
}
sdio_set_drvdata(func, wilc); sdio_set_drvdata(func, wilc);
wilc->bus_data = sdio_priv; wilc->bus_data = sdio_priv;
wilc->dev = &func->dev; wilc->dev = &func->dev;
wilc->gpio_irq = gpio;
wilc->rtc_clk = devm_clk_get(&func->card->dev, "rtc_clk"); wilc->rtc_clk = devm_clk_get(&func->card->dev, "rtc_clk");
if (PTR_ERR_OR_ZERO(wilc->rtc_clk) == -EPROBE_DEFER) if (PTR_ERR_OR_ZERO(wilc->rtc_clk) == -EPROBE_DEFER)
...@@ -164,10 +164,6 @@ static void wilc_sdio_remove(struct sdio_func *func) ...@@ -164,10 +164,6 @@ static void wilc_sdio_remove(struct sdio_func *func)
{ {
struct wilc *wilc = sdio_get_drvdata(func); struct wilc *wilc = sdio_get_drvdata(func);
/* free the GPIO in module remove */
if (wilc->gpio_irq)
gpiod_put(wilc->gpio_irq);
if (!IS_ERR(wilc->rtc_clk)) if (!IS_ERR(wilc->rtc_clk))
clk_disable_unprepare(wilc->rtc_clk); clk_disable_unprepare(wilc->rtc_clk);
...@@ -592,9 +588,6 @@ static int wilc_sdio_init(struct wilc *wilc, bool resume) ...@@ -592,9 +588,6 @@ static int wilc_sdio_init(struct wilc *wilc, bool resume)
int loop, ret; int loop, ret;
u32 chipid; u32 chipid;
if (!resume)
sdio_priv->irq_gpio = wilc->dev_irq_num;
/** /**
* function 0 csa enable * function 0 csa enable
**/ **/
......
...@@ -151,21 +151,12 @@ static int wilc_bus_probe(struct spi_device *spi) ...@@ -151,21 +151,12 @@ static int wilc_bus_probe(struct spi_device *spi)
{ {
int ret; int ret;
struct wilc *wilc; struct wilc *wilc;
struct gpio_desc *gpio;
struct wilc_spi *spi_priv; struct wilc_spi *spi_priv;
spi_priv = kzalloc(sizeof(*spi_priv), GFP_KERNEL); spi_priv = kzalloc(sizeof(*spi_priv), GFP_KERNEL);
if (!spi_priv) if (!spi_priv)
return -ENOMEM; return -ENOMEM;
gpio = gpiod_get(&spi->dev, "irq", GPIOD_IN);
if (IS_ERR(gpio)) {
/* get the GPIO descriptor from hardcode GPIO number */
gpio = gpio_to_desc(GPIO_NUM);
if (!gpio)
dev_err(&spi->dev, "failed to get the irq gpio\n");
}
ret = wilc_cfg80211_init(&wilc, &spi->dev, WILC_HIF_SPI, &wilc_hif_spi); ret = wilc_cfg80211_init(&wilc, &spi->dev, WILC_HIF_SPI, &wilc_hif_spi);
if (ret) { if (ret) {
kfree(spi_priv); kfree(spi_priv);
...@@ -175,7 +166,7 @@ static int wilc_bus_probe(struct spi_device *spi) ...@@ -175,7 +166,7 @@ static int wilc_bus_probe(struct spi_device *spi)
spi_set_drvdata(spi, wilc); spi_set_drvdata(spi, wilc);
wilc->dev = &spi->dev; wilc->dev = &spi->dev;
wilc->bus_data = spi_priv; wilc->bus_data = spi_priv;
wilc->gpio_irq = gpio; wilc->dev_irq_num = spi->irq;
wilc->rtc_clk = devm_clk_get(&spi->dev, "rtc_clk"); wilc->rtc_clk = devm_clk_get(&spi->dev, "rtc_clk");
if (PTR_ERR_OR_ZERO(wilc->rtc_clk) == -EPROBE_DEFER) if (PTR_ERR_OR_ZERO(wilc->rtc_clk) == -EPROBE_DEFER)
...@@ -190,10 +181,6 @@ static int wilc_bus_remove(struct spi_device *spi) ...@@ -190,10 +181,6 @@ static int wilc_bus_remove(struct spi_device *spi)
{ {
struct wilc *wilc = spi_get_drvdata(spi); struct wilc *wilc = spi_get_drvdata(spi);
/* free the GPIO in module remove */
if (wilc->gpio_irq)
gpiod_put(wilc->gpio_irq);
if (!IS_ERR(wilc->rtc_clk)) if (!IS_ERR(wilc->rtc_clk))
clk_disable_unprepare(wilc->rtc_clk); clk_disable_unprepare(wilc->rtc_clk);
......
...@@ -206,7 +206,6 @@ ...@@ -206,7 +206,6 @@
#define WILC_TX_BUFF_SIZE (64 * 1024) #define WILC_TX_BUFF_SIZE (64 * 1024)
#define MODALIAS "WILC_SPI" #define MODALIAS "WILC_SPI"
#define GPIO_NUM 0x44
#define WILC_PKT_HDR_CONFIG_FIELD BIT(31) #define WILC_PKT_HDR_CONFIG_FIELD BIT(31)
#define WILC_PKT_HDR_OFFSET_FIELD GENMASK(30, 22) #define WILC_PKT_HDR_OFFSET_FIELD GENMASK(30, 22)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment