PCI: mvebu: switch to using gpiod API
Subsystems (3)
PATCH v3 1/1 PCI: mvebu: switch to using gpiod API
This patch switches the driver away from legacy gpio/of_gpio API to gpiod API, and removes use of of_get_named_gpio_flags() which I want to make private to gpiolib.
---
v3:
- add #include <linux/irqchip/chained_irq.h> to avoid compile errors. This was previously included indirectly via linux/of_gpio.h -> linux/gpio/driver.h
v2:
- free port->reset_name when reset GPIO is not found (Pali)
- remove stray tab (Pali)
This is the last user of of_get_named_gpio_flags() in the "next" tree.
Thanks!
drivers/pci/controller/pci-mvebu.c | 51 ++++++++++-------------------- 1 file changed, 17 insertions(+), 34 deletions(-)
drivers/pci/controller/pci-mvebu.c +17 -34
@@ -11,15 +11,15 @@#include <linux/bitfield.h> #include <linux/clk.h> #include <linux/delay.h> -#include <linux/gpio.h> +#include <linux/gpio/consumer.h> #include <linux/init.h> #include <linux/irqdomain.h> +#include <linux/irqchip/chained_irq.h> #include <linux/mbus.h> #include <linux/slab.h> #include <linux/platform_device.h> #include <linux/of_address.h> #include <linux/of_irq.h> -#include <linux/of_gpio.h> #include <linux/of_pci.h> #include <linux/of_platform.h>
@@ -1262,9 +1262,8 @@ static int mvebu_pcie_parse_port(struct mvebu_pcie *pcie, struct mvebu_pcie_port *port, struct device_node *child) { struct device *dev = &pcie->pdev->dev; -enum of_gpio_flags flags;u32 slot_power_limit; -int reset_gpio, ret; +int ret;u32 num_lanes; port->pcie = pcie;
@@ -1328,40 +1327,24 @@ static int mvebu_pcie_parse_port(struct mvebu_pcie *pcie, port->name, child); } - reset_gpio =of_get_named_gpio_flags (child,"reset-gpios" ,0 , &flags); -if (reset_gpio == -EPROBE_DEFER ) { - ret = reset_gpio; + port->reset_name =devm_kasprintf (dev,GFP_KERNEL ,"%s-reset" , + port->name); +if (!port->reset_name) { + ret = -ENOMEM ; goto err; } -if (gpio_is_valid (reset_gpio)) { -unsigned long gpio_flags; - - port->reset_name =devm_kasprintf (dev,GFP_KERNEL ,"%s-reset" , - port->name); -if (!port->reset_name) { - ret = -ENOMEM ; + port->reset_gpio =devm_fwnode_gpiod_get (dev,of_fwnode_handle (child), +"reset" ,GPIOD_OUT_HIGH , + port->name); + ret =PTR_ERR_OR_ZERO (port->reset_gpio); +if (ret) { +if (ret != -ENOENT ) goto err; - } - -if (flags &OF_GPIO_ACTIVE_LOW ) { -dev_info (dev,"%pOF: reset gpio is active low\n" , - child); - gpio_flags =GPIOF_ACTIVE_LOW | -GPIOF_OUT_INIT_LOW ; - }else { - gpio_flags =GPIOF_OUT_INIT_HIGH ; - } - - ret =devm_gpio_request_one (dev, reset_gpio, gpio_flags, - port->reset_name); -if (ret) { -if (ret == -EPROBE_DEFER ) - goto err; - goto skip; - } - - port->reset_gpio =gpio_to_desc (reset_gpio); +/* reset gpio is optional */ + port->reset_gpio =NULL ; +devm_kfree (dev, port->reset_name); + port->reset_name =NULL ; } slot_power_limit = of_pci_get_slot_power_limit(child,
Signature · 5 lines
2.39.0.rc0.267.gcb52ba06e7-goog -- Dmitry
Bjorn Helgaas
AppliedQuoted 5 lines · Dmitry Torokhov
This patch switches the driver away from legacy gpio/of_gpio API to gpiod API, and removes use of
of_get_named_gpio_flags()which I want to make private to gpiolib.Signed-off-by Dmitry Torokhov <[email protected]>
Applied to pci/ctrl/mvebu for v6.2, thanks, Dmitry!
Quoted 117 lines
---
v3:
- add #include <linux/irqchip/chained_irq.h> to avoid compile errors. This was previously included indirectly vialinux/of_gpio.h->linux/gpio/driver.hv2:
- freeport->reset_namewhen reset GPIO is not found (Pali)
- remove stray tab (Pali)This is the last user of
of_get_named_gpio_flags()in the "next" tree.Thanks!
drivers/pci/controller/pci-mvebu.c | 51 ++++++++++-------------------- 1 file changed, 17 insertions(+), 34 deletions(-)drivers/pci/controller/pci-mvebu.c +17
-34@@ -11,15 +11,15 @@#include <linux/bitfield.h> #include <linux/clk.h> #include <linux/delay.h> -#include <linux/gpio.h> +#include <linux/gpio/consumer.h> #include <linux/init.h> #include <linux/irqdomain.h> +#include <linux/irqchip/chained_irq.h> #include <linux/mbus.h> #include <linux/slab.h> #include <linux/platform_device.h> #include <linux/of_address.h> #include <linux/of_irq.h> -#include <linux/of_gpio.h> #include <linux/of_pci.h> #include <linux/of_platform.h> @@ -1262,9 +1262,8 @@ static int mvebu_pcie_parse_port(struct mvebu_pcie *pcie, struct mvebu_pcie_port *port, struct device_node *child) { struct device *dev = &pcie->pdev->dev; -enum of_gpio_flags flags;u32 slot_power_limit; -int reset_gpio, ret; +int ret;u32 num_lanes; port->pcie = pcie;@@ -1328,40 +1327,24 @@ static int mvebu_pcie_parse_port(struct mvebu_pcie *pcie, port->name, child); } - reset_gpio =of_get_named_gpio_flags (child,"reset-gpios" ,0 , &flags); -if (reset_gpio == -EPROBE_DEFER ) { - ret = reset_gpio; + port->reset_name =devm_kasprintf (dev,GFP_KERNEL ,"%s-reset" , + port->name); +if (!port->reset_name) { + ret = -ENOMEM ; goto err; } -if (gpio_is_valid (reset_gpio)) { -unsigned long gpio_flags; - - port->reset_name =devm_kasprintf (dev,GFP_KERNEL ,"%s-reset" , - port->name); -if (!port->reset_name) { - ret = -ENOMEM ; + port->reset_gpio =devm_fwnode_gpiod_get (dev,of_fwnode_handle (child), +"reset" ,GPIOD_OUT_HIGH , + port->name); + ret =PTR_ERR_OR_ZERO (port->reset_gpio); +if (ret) { +if (ret != -ENOENT ) goto err; - } - -if (flags &OF_GPIO_ACTIVE_LOW ) { -dev_info (dev,"%pOF: reset gpio is active low\n" , - child); - gpio_flags =GPIOF_ACTIVE_LOW | -GPIOF_OUT_INIT_LOW ; - }else { - gpio_flags =GPIOF_OUT_INIT_HIGH ; - } - - ret =devm_gpio_request_one (dev, reset_gpio, gpio_flags, - port->reset_name); -if (ret) { -if (ret == -EPROBE_DEFER ) - goto err; - goto skip; - } - - port->reset_gpio =gpio_to_desc (reset_gpio); +/* reset gpio is optional */ + port->reset_gpio =NULL ; +devm_kfree (dev, port->reset_name); + port->reset_name =NULL ; } slot_power_limit = of_pci_get_slot_power_limit(child,Signature · 10 lines
2.39.0.rc0.267.gcb52ba06e7-goog -- Dmitry _______________________________________________ linux-arm-kernel mailing list [email protected] http://lists.infradead.org/mailman/listinfo/linux-arm-kernel