gpio: gpio-dwapb: add optional reset
Subsystems (2)
PATCH 1/1 gpio: gpio-dwapb: add optional reset
Some platforms require reset to be released to allow register access.
---
v2: Request shared controller
return all errors from reset controller request drop conditions on asserting/deasserting reset
--- drivers/gpio/gpio-dwapb.c | 9 +++++++++ 1 file changed, 9 insertions(+)
drivers/gpio/gpio-dwapb.c +9 -0
@@ -25,6 +25,7 @@#include <linux/of_irq.h> #include <linux/platform_device.h> #include <linux/property.h> +#include <linux/reset.h> #include <linux/spinlock.h> #include <linux/platform_data/gpio-dwapb.h> #include <linux/slab.h>
@@ -97,6 +98,7 @@ struct dwapb_gpio {unsigned int nr_ports;struct irq_domain *domain;unsigned int flags; +struct reset_control *rst; };static inline u32 gpio_reg_v2_convert (unsigned int offset)
@@ -608,6 +610,12 @@ static int dwapb_gpio_probe(struct platform_device *pdev) gpio->dev = &pdev->dev; gpio->nr_ports = pdata->nports; + gpio->rst =devm_reset_control_get_optional_shared (dev,NULL ); +if (IS_ERR (gpio->rst)) +return PTR_ERR (gpio->rst); + +reset_control_deassert (gpio->rst); + gpio->ports =devm_kcalloc (&pdev->dev, gpio->nr_ports,sizeof (*gpio->ports),GFP_KERNEL );if (!gpio->ports)
@@ -659,6 +667,7 @@ static int dwapb_gpio_remove(struct platform_device *pdev)dwapb_gpio_unregister (gpio);dwapb_irq_teardown (gpio); +reset_control_assert (gpio->rst);return 0 ; }
Signature · 1 line
2.7.4
On Wed, Oct 11, 2017 at 11:34 AM, Alan Tull <[email protected]> wrote:
Sorry, I forgot to specify PATCH v2 in the subject.
Alan
Quoted 56 lines
Some platforms require reset to be released to allow register access.
Signed-off-by Alan Tull <[email protected]>---
v2: Request shared controller
return all errors from reset controller request drop conditions on asserting/deasserting reset--- drivers/gpio/gpio-dwapb.c | 9 +++++++++ 1 file changed, 9 insertions(+)drivers/gpio/gpio-dwapb.c +9
-1@@ -25,6 +25,7 @@#include <linux/of_irq.h> #include <linux/platform_device.h> #include <linux/property.h> +#include <linux/reset.h> #include <linux/spinlock.h> #include <linux/platform_data/gpio-dwapb.h> #include <linux/slab.h> @@ -97,6 +98,7 @@ struct dwapb_gpio {unsigned int nr_ports;struct irq_domain *domain;unsigned int flags; +struct reset_control *rst; };static inline u32 gpio_reg_v2_convert (unsigned int offset)@@ -608,6 +610,12 @@ static int dwapb_gpio_probe(struct platform_device *pdev) gpio->dev = &pdev->dev; gpio->nr_ports = pdata->nports; + gpio->rst =devm_reset_control_get_optional_shared (dev,NULL ); +if (IS_ERR (gpio->rst)) +return PTR_ERR (gpio->rst); + +reset_control_deassert (gpio->rst); + gpio->ports =devm_kcalloc (&pdev->dev, gpio->nr_ports,sizeof (*gpio->ports),GFP_KERNEL );if (!gpio->ports)@@ -659,6 +667,7 @@ static int dwapb_gpio_remove(struct platform_device *pdev)dwapb_gpio_unregister (gpio);dwapb_irq_teardown (gpio); +reset_control_assert (gpio->rst);return 0 ; } --2.7.4
Quoted 8 lines · Alan Tull
Some platforms require reset to be released to allow register access.
Signed-off-by Alan Tull <[email protected]>---
v2: Request shared controller
return all errors from reset controller request drop conditions on asserting/deasserting reset
Could you also update the device tree binding docs [1] to mention the optional resets phandle?
[1] Documentation/devicetree/bindings/gpio/snps-dwapb-gpio.txt
regards
Philipp
Quoted 45 lines
--- drivers/gpio/gpio-dwapb.c | 9 +++++++++ 1 file changed, 9 insertions(+)drivers/gpio/gpio-dwapb.c +9
-0@@ -25,6 +25,7 @@#include <linux/of_irq.h> #include <linux/platform_device.h> #include <linux/property.h> +#include <linux/reset.h> #include <linux/spinlock.h> #include <linux/platform_data/gpio-dwapb.h> #include <linux/slab.h> @@ -97,6 +98,7 @@ struct dwapb_gpio {unsigned int nr_ports;struct irq_domain *domain;unsigned int flags; +struct reset_control *rst; };static inline u32 gpio_reg_v2_convert (unsigned int offset)@@ -608,6 +610,12 @@ static int dwapb_gpio_probe(struct platform_device *pdev) gpio->dev = &pdev->dev; gpio->nr_ports = pdata->nports; + gpio->rst =devm_reset_control_get_optional_shared (dev,NULL ); +if (IS_ERR (gpio->rst)) +return PTR_ERR (gpio->rst); + +reset_control_deassert (gpio->rst); + gpio->ports =devm_kcalloc (&pdev->dev, gpio->nr_ports,sizeof (*gpio->ports),GFP_KERNEL );if (!gpio->ports)@@ -659,6 +667,7 @@ static int dwapb_gpio_remove(struct platform_device *pdev)dwapb_gpio_unregister (gpio);dwapb_irq_teardown (gpio); +reset_control_assert (gpio->rst);return 0 ; }
Quoted 8 lines · Alan Tull
Some platforms require reset to be released to allow register access.
Signed-off-by Alan Tull <[email protected]>---
v2: Request shared controller
return all errors from reset controller request drop conditions on asserting/deasserting reset
This v2 version applied with Philipp's review tag, I also added a blurb to the DT binding as Philipp asked so no need to fix that separately.
Yours,
Linus Walleij
On Thu, Oct 12, 2017 at 3:26 AM, Linus Walleij <[email protected]> wrote:
Hi Linus, Phillipp,
Quoted 6 lines
This v2 version applied with Philipp's review tag, I also added a blurb to the DT binding as Philipp asked so no need to fix that separately.
Yours,
Linus Walleij
Thanks!
Alan Tull