Message ID | 20200306144400.4269-2-ajay.kathat@microchip.com (mailing list archive) |
---|---|
State | Not Applicable |
Delegated to: | Kalle Valo |
Headers | show |
Series | staging: wilc1000: handle DT binding documentation comments | expand |
On Fri, Mar 6, 2020 at 8:44 AM <Ajay.Kathat@microchip.com> wrote: > > From: Ajay Singh <ajay.kathat@microchip.com> > > 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@bogus/ > > Signed-off-by: Ajay Singh <ajay.kathat@microchip.com> > --- > .../net/wireless/microchip,wilc1000.yaml | 79 +++++++++++++++++++ > .../wilc1000/microchip,wilc1000,sdio.yaml | 8 +- > .../wilc1000/microchip,wilc1000,spi.yaml | 8 +- Bindings should be a separate patch. > drivers/staging/wilc1000/netdev.c | 24 ++---- > drivers/staging/wilc1000/netdev.h | 1 - > drivers/staging/wilc1000/sdio.c | 31 +++----- > drivers/staging/wilc1000/spi.c | 15 +--- > drivers/staging/wilc1000/wlan.h | 1 - > 8 files changed, 108 insertions(+), 59 deletions(-) > create mode 100644 Documentation/devicetree/bindings/net/wireless/microchip,wilc1000.yaml > > diff --git a/Documentation/devicetree/bindings/net/wireless/microchip,wilc1000.yaml b/Documentation/devicetree/bindings/net/wireless/microchip,wilc1000.yaml > new file mode 100644 > index 000000000000..a1914449ad07 > --- /dev/null > +++ b/Documentation/devicetree/bindings/net/wireless/microchip,wilc1000.yaml > @@ -0,0 +1,79 @@ > +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) > +%YAML 1.2 > +--- > +$id: http://devicetree.org/schemas/net/wireless/microchip,wilc1000.yaml# > +$schema: http://devicetree.org/meta-schemas/core.yaml# > + > +title: Microchip WILC wireless devicetree bindings > + > +maintainers: > + - Adham Abozaeid <adham.abozaeid@microchip.com> > + - Ajay Singh <ajay.kathat@microchip.com> > + > +description: > + The wilc1000 chips can be connected via SPI or SDIO. This document > + describes the binding to connect wilc devices. > + > +properties: > + compatible: > + const: microchip,wilc1000 > + > + spi-max-frequency: > + description: Maximum SPI clocking speed of device in Hz. > + maxItems: 1 No need to redefine a common property. Just: spi-max-frequency: true > + > + reg: > + description: Chip select address of device. Drop this. > + maxItems: 1 > + > + interrupts: > + maxItems: 1 > + > + clocks: > + description: phandle to the clock connected on rtc clock line. > + maxItems: 1 > + > + clock-names: > + const: rtc > + > +required: > + - compatible > + - reg > + - interrupts > + > +examples: > + - | > + spi1: spi@fc018000 { > + #address-cells = <1>; > + #size-cells = <0>; > + cs-gpios = <&pioB 21 0>; > + wifi@0 { > + compatible = "microchip,wilc1000"; > + spi-max-frequency = <48000000>; > + reg = <0>; > + interrupt-parent = <&pioC>; > + interrupts = <27 0>; > + clocks = <&pck1>; > + clock-names = "rtc"; > + }; > + }; > + > + - | > + mmc1: mmc@fc000000 { > + #address-cells = <1>; > + #size-cells = <0>; > + pinctrl-names = "default"; > + pinctrl-0 = <&pinctrl_mmc1_clk_cmd_dat0 &pinctrl_mmc1_dat1_3>; > + non-removable; > + vmmc-supply = <&vcc_mmc1_reg>; > + vqmmc-supply = <&vcc_3v3_reg>; > + bus-width = <4>; > + wifi@0 { > + compatible = "microchip,wilc1000"; > + reg = <0>; > + interrupt-parent = <&pioC>; > + interrupts = <27 0>; > + clocks = <&pck1>; > + clock-names = "rtc"; > + }; > + }; > diff --git a/drivers/staging/wilc1000/microchip,wilc1000,sdio.yaml b/drivers/staging/wilc1000/microchip,wilc1000,sdio.yaml > index b338f569f7e2..9df7327bc668 100644 > --- a/drivers/staging/wilc1000/microchip,wilc1000,sdio.yaml > +++ b/drivers/staging/wilc1000/microchip,wilc1000,sdio.yaml Why aren't you just removing this file and the spi one? Rob
Hi Rob, On 06/03/20 9:05 pm, Rob Herring wrote: > > On Fri, Mar 6, 2020 at 8:44 AM <Ajay.Kathat@microchip.com> wrote: >> >> From: Ajay Singh <ajay.kathat@microchip.com> >> >> 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@bogus/ >> >> Signed-off-by: Ajay Singh <ajay.kathat@microchip.com> >> --- >> .../net/wireless/microchip,wilc1000.yaml | 79 +++++++++++++++++++ >> .../wilc1000/microchip,wilc1000,sdio.yaml | 8 +- >> .../wilc1000/microchip,wilc1000,spi.yaml | 8 +- > > Bindings should be a separate patch. > Ok. I will add them in separate patch. >> drivers/staging/wilc1000/netdev.c | 24 ++---- >> drivers/staging/wilc1000/netdev.h | 1 - >> drivers/staging/wilc1000/sdio.c | 31 +++----- >> drivers/staging/wilc1000/spi.c | 15 +--- >> drivers/staging/wilc1000/wlan.h | 1 - >> 8 files changed, 108 insertions(+), 59 deletions(-) >> create mode 100644 Documentation/devicetree/bindings/net/wireless/microchip,wilc1000.yaml >> >> diff --git a/Documentation/devicetree/bindings/net/wireless/microchip,wilc1000.yaml b/Documentation/devicetree/bindings/net/wireless/microchip,wilc1000.yaml >> new file mode 100644 >> index 000000000000..a1914449ad07 >> --- /dev/null >> +++ b/Documentation/devicetree/bindings/net/wireless/microchip,wilc1000.yaml >> @@ -0,0 +1,79 @@ >> +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) >> +%YAML 1.2 >> +--- >> +$id: http://devicetree.org/schemas/net/wireless/microchip,wilc1000.yaml# >> +$schema: http://devicetree.org/meta-schemas/core.yaml# >> + >> +title: Microchip WILC wireless devicetree bindings >> + >> +maintainers: >> + - Adham Abozaeid <adham.abozaeid@microchip.com> >> + - Ajay Singh <ajay.kathat@microchip.com> >> + >> +description: >> + The wilc1000 chips can be connected via SPI or SDIO. This document >> + describes the binding to connect wilc devices. >> + >> +properties: >> + compatible: >> + const: microchip,wilc1000 >> + >> + spi-max-frequency: >> + description: Maximum SPI clocking speed of device in Hz. >> + maxItems: 1 > > No need to redefine a common property. Just: > > spi-max-frequency: true > Ok. I will changes this. >> + >> + reg: >> + description: Chip select address of device. > > Drop this. > Ok. >> + maxItems: 1 >> + >> + interrupts: >> + maxItems: 1 >> + >> + clocks: >> + description: phandle to the clock connected on rtc clock line. >> + maxItems: 1 >> + >> + clock-names: >> + const: rtc >> + >> +required: >> + - compatible >> + - reg >> + - interrupts >> + >> +examples: >> + - | >> + spi1: spi@fc018000 { >> + #address-cells = <1>; >> + #size-cells = <0>; >> + cs-gpios = <&pioB 21 0>; >> + wifi@0 { >> + compatible = "microchip,wilc1000"; >> + spi-max-frequency = <48000000>; >> + reg = <0>; >> + interrupt-parent = <&pioC>; >> + interrupts = <27 0>; >> + clocks = <&pck1>; >> + clock-names = "rtc"; >> + }; >> + }; >> + >> + - | >> + mmc1: mmc@fc000000 { >> + #address-cells = <1>; >> + #size-cells = <0>; >> + pinctrl-names = "default"; >> + pinctrl-0 = <&pinctrl_mmc1_clk_cmd_dat0 &pinctrl_mmc1_dat1_3>; >> + non-removable; >> + vmmc-supply = <&vcc_mmc1_reg>; >> + vqmmc-supply = <&vcc_3v3_reg>; >> + bus-width = <4>; >> + wifi@0 { >> + compatible = "microchip,wilc1000"; >> + reg = <0>; >> + interrupt-parent = <&pioC>; >> + interrupts = <27 0>; >> + clocks = <&pck1>; >> + clock-names = "rtc"; >> + }; >> + }; >> diff --git a/drivers/staging/wilc1000/microchip,wilc1000,sdio.yaml b/drivers/staging/wilc1000/microchip,wilc1000,sdio.yaml >> index b338f569f7e2..9df7327bc668 100644 >> --- a/drivers/staging/wilc1000/microchip,wilc1000,sdio.yaml >> +++ b/drivers/staging/wilc1000/microchip,wilc1000,sdio.yaml > > Why aren't you just removing this file and the spi one? The binding file wrongly got added in this patch. It needs to be added only to '/driver/staging/wilc1000'. I will update this and send v2 series by keeping binding patch separate from code changes. Regards, Ajay
diff --git a/Documentation/devicetree/bindings/net/wireless/microchip,wilc1000.yaml b/Documentation/devicetree/bindings/net/wireless/microchip,wilc1000.yaml new file mode 100644 index 000000000000..a1914449ad07 --- /dev/null +++ b/Documentation/devicetree/bindings/net/wireless/microchip,wilc1000.yaml @@ -0,0 +1,79 @@ +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) +%YAML 1.2 +--- +$id: http://devicetree.org/schemas/net/wireless/microchip,wilc1000.yaml# +$schema: http://devicetree.org/meta-schemas/core.yaml# + +title: Microchip WILC wireless devicetree bindings + +maintainers: + - Adham Abozaeid <adham.abozaeid@microchip.com> + - Ajay Singh <ajay.kathat@microchip.com> + +description: + The wilc1000 chips can be connected via SPI or SDIO. This document + describes the binding to connect wilc devices. + +properties: + compatible: + const: microchip,wilc1000 + + spi-max-frequency: + description: Maximum SPI clocking speed of device in Hz. + maxItems: 1 + + reg: + description: Chip select address of device. + maxItems: 1 + + interrupts: + maxItems: 1 + + clocks: + description: phandle to the clock connected on rtc clock line. + maxItems: 1 + + clock-names: + const: rtc + +required: + - compatible + - reg + - interrupts + +examples: + - | + spi1: spi@fc018000 { + #address-cells = <1>; + #size-cells = <0>; + cs-gpios = <&pioB 21 0>; + wifi@0 { + compatible = "microchip,wilc1000"; + spi-max-frequency = <48000000>; + reg = <0>; + interrupt-parent = <&pioC>; + interrupts = <27 0>; + clocks = <&pck1>; + clock-names = "rtc"; + }; + }; + + - | + mmc1: mmc@fc000000 { + #address-cells = <1>; + #size-cells = <0>; + pinctrl-names = "default"; + pinctrl-0 = <&pinctrl_mmc1_clk_cmd_dat0 &pinctrl_mmc1_dat1_3>; + non-removable; + vmmc-supply = <&vcc_mmc1_reg>; + vqmmc-supply = <&vcc_3v3_reg>; + bus-width = <4>; + wifi@0 { + compatible = "microchip,wilc1000"; + reg = <0>; + interrupt-parent = <&pioC>; + interrupts = <27 0>; + clocks = <&pck1>; + clock-names = "rtc"; + }; + }; diff --git a/drivers/staging/wilc1000/microchip,wilc1000,sdio.yaml b/drivers/staging/wilc1000/microchip,wilc1000,sdio.yaml index b338f569f7e2..9df7327bc668 100644 --- a/drivers/staging/wilc1000/microchip,wilc1000,sdio.yaml +++ b/drivers/staging/wilc1000/microchip,wilc1000,sdio.yaml @@ -19,8 +19,7 @@ properties: compatible: const: microchip,wilc1000-sdio - irq-gpios: - description: The GPIO phandle connect to a host IRQ. + interrupts: maxItems: 1 reg: @@ -40,7 +39,7 @@ properties: required: - compatible - - irq-gpios + - interrupts - reg examples: @@ -56,7 +55,8 @@ examples: status = "okay"; wilc_sdio@0 { compatible = "microchip,wilc1000-sdio"; - irq-gpios = <&pioC 27 0>; + interrupt-parent = <&pioC>; + interrupts = <27 0>; reg = <0>; clocks = <&pck1>; clock-names = "rtc_clk"; diff --git a/drivers/staging/wilc1000/microchip,wilc1000,spi.yaml b/drivers/staging/wilc1000/microchip,wilc1000,spi.yaml index cc8ed64ce627..dd5e8da1f562 100644 --- a/drivers/staging/wilc1000/microchip,wilc1000,spi.yaml +++ b/drivers/staging/wilc1000/microchip,wilc1000,spi.yaml @@ -26,8 +26,7 @@ properties: description: Chip select address of device. maxItems: 1 - irq-gpios: - description: The GPIO phandle connect to a host IRQ. + interrupts: maxItems: 1 clocks: @@ -38,7 +37,7 @@ required: - compatible - spi-max-frequency - reg - - irq-gpios + - interrupts examples: - | @@ -51,7 +50,8 @@ examples: compatible = "microchip,wilc1000-spi"; spi-max-frequency = <48000000>; reg = <0>; - irq-gpios = <&pioC 27 0>; + interrupt-parent = <&pioC>; + interrupts = <27 0>; clocks = <&pck1>; clock-names = "rtc_clk"; assigned-clocks = <&pck1>; diff --git a/drivers/staging/wilc1000/netdev.c b/drivers/staging/wilc1000/netdev.c index 045f5cdfdca0..a61c1a7aefa8 100644 --- a/drivers/staging/wilc1000/netdev.c +++ b/drivers/staging/wilc1000/netdev.c @@ -46,29 +46,21 @@ static irqreturn_t isr_bh_routine(int irq, void *userdata) static int init_irq(struct net_device *dev) { - int ret = 0; struct wilc_vif *vif = netdev_priv(dev); struct wilc *wl = vif->wilc; - - 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); + int ret; ret = request_threaded_irq(wl->dev_irq_num, isr_uh_routine, isr_bh_routine, IRQF_TRIGGER_FALLING | IRQF_ONESHOT, "WILC_IRQ", dev); - if (ret < 0) - netdev_err(dev, "Failed to request IRQ\n"); - else - netdev_dbg(dev, "IRQ request succeeded IRQ-NUM= %d\n", - wl->dev_irq_num); + if (ret) { + netdev_err(dev, "Failed to request IRQ [%d]\n", ret); + return ret; + } + netdev_dbg(dev, "IRQ request succeeded IRQ-NUM= %d\n", wl->dev_irq_num); - return ret; + return 0; } 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) if (ret) goto fail_wilc_wlan; - if (wl->gpio_irq && init_irq(dev)) { + if (wl->dev_irq_num && init_irq(dev)) { ret = -EIO; goto fail_threads; } diff --git a/drivers/staging/wilc1000/netdev.h b/drivers/staging/wilc1000/netdev.h index e3689e2a4abb..61cbec674a62 100644 --- a/drivers/staging/wilc1000/netdev.h +++ b/drivers/staging/wilc1000/netdev.h @@ -209,7 +209,6 @@ struct wilc { const struct wilc_hif_func *hif_func; int io_type; s8 mac_status; - struct gpio_desc *gpio_irq; struct clk *rtc_clk; bool initialized; int dev_irq_num; diff --git a/drivers/staging/wilc1000/sdio.c b/drivers/staging/wilc1000/sdio.c index 2301e90c21ca..44b426874c1b 100644 --- a/drivers/staging/wilc1000/sdio.c +++ b/drivers/staging/wilc1000/sdio.c @@ -8,6 +8,7 @@ #include <linux/mmc/sdio_func.h> #include <linux/mmc/host.h> #include <linux/mmc/sdio.h> +#include <linux/of_irq.h> #include "netdev.h" #include "cfg80211.h" @@ -122,33 +123,32 @@ static int wilc_sdio_probe(struct sdio_func *func, { struct wilc *wilc; int ret; - struct gpio_desc *gpio = NULL; struct wilc_sdio *sdio_priv; sdio_priv = kzalloc(sizeof(*sdio_priv), GFP_KERNEL); if (!sdio_priv) 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, &wilc_hif_sdio); if (ret) { kfree(sdio_priv); 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); wilc->bus_data = sdio_priv; wilc->dev = &func->dev; - wilc->gpio_irq = gpio; wilc->rtc_clk = devm_clk_get(&func->card->dev, "rtc_clk"); if (PTR_ERR_OR_ZERO(wilc->rtc_clk) == -EPROBE_DEFER) @@ -164,10 +164,6 @@ static void wilc_sdio_remove(struct sdio_func *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)) clk_disable_unprepare(wilc->rtc_clk); @@ -592,9 +588,6 @@ static int wilc_sdio_init(struct wilc *wilc, bool resume) int loop, ret; u32 chipid; - if (!resume) - sdio_priv->irq_gpio = wilc->dev_irq_num; - /** * function 0 csa enable **/ diff --git a/drivers/staging/wilc1000/spi.c b/drivers/staging/wilc1000/spi.c index dfd25df75780..852f318a86f0 100644 --- a/drivers/staging/wilc1000/spi.c +++ b/drivers/staging/wilc1000/spi.c @@ -151,21 +151,12 @@ static int wilc_bus_probe(struct spi_device *spi) { int ret; struct wilc *wilc; - struct gpio_desc *gpio; struct wilc_spi *spi_priv; spi_priv = kzalloc(sizeof(*spi_priv), GFP_KERNEL); if (!spi_priv) 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); if (ret) { kfree(spi_priv); @@ -175,7 +166,7 @@ static int wilc_bus_probe(struct spi_device *spi) spi_set_drvdata(spi, wilc); wilc->dev = &spi->dev; 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"); if (PTR_ERR_OR_ZERO(wilc->rtc_clk) == -EPROBE_DEFER) @@ -190,10 +181,6 @@ static int wilc_bus_remove(struct spi_device *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)) clk_disable_unprepare(wilc->rtc_clk); diff --git a/drivers/staging/wilc1000/wlan.h b/drivers/staging/wilc1000/wlan.h index 5999c5490ea5..7689569cd82f 100644 --- a/drivers/staging/wilc1000/wlan.h +++ b/drivers/staging/wilc1000/wlan.h @@ -206,7 +206,6 @@ #define WILC_TX_BUFF_SIZE (64 * 1024) #define MODALIAS "WILC_SPI" -#define GPIO_NUM 0x44 #define WILC_PKT_HDR_CONFIG_FIELD BIT(31) #define WILC_PKT_HDR_OFFSET_FIELD GENMASK(30, 22)