summaryrefslogtreecommitdiff
path: root/drivers/pinctrl/stm32/pinctrl-stm32-hdp.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/pinctrl/stm32/pinctrl-stm32-hdp.c')
-rw-r--r--drivers/pinctrl/stm32/pinctrl-stm32-hdp.c36
1 files changed, 21 insertions, 15 deletions
diff --git a/drivers/pinctrl/stm32/pinctrl-stm32-hdp.c b/drivers/pinctrl/stm32/pinctrl-stm32-hdp.c
index e91442eb566b..0b1dff01e04c 100644
--- a/drivers/pinctrl/stm32/pinctrl-stm32-hdp.c
+++ b/drivers/pinctrl/stm32/pinctrl-stm32-hdp.c
@@ -6,6 +6,7 @@
#include <linux/bits.h>
#include <linux/clk.h>
#include <linux/gpio/driver.h>
+#include <linux/gpio/generic.h>
#include <linux/io.h>
#include <linux/of.h>
#include <linux/of_device.h>
@@ -45,7 +46,7 @@ struct stm32_hdp {
void __iomem *base;
struct clk *clk;
struct pinctrl_dev *pctl_dev;
- struct gpio_chip gpio_chip;
+ struct gpio_generic_chip gpio_chip;
u32 mux_conf;
u32 gposet_conf;
const char * const *func_name;
@@ -575,7 +576,7 @@ static const struct pinmux_ops stm32_hdp_pinmux_ops = {
.gpio_set_direction = NULL,
};
-static struct pinctrl_desc stm32_hdp_pdesc = {
+static const struct pinctrl_desc stm32_hdp_pdesc = {
.name = DRIVER_NAME,
.pins = stm32_hdp_pins,
.npins = ARRAY_SIZE(stm32_hdp_pins),
@@ -603,6 +604,7 @@ MODULE_DEVICE_TABLE(of, stm32_hdp_of_match);
static int stm32_hdp_probe(struct platform_device *pdev)
{
+ struct gpio_generic_chip_config config;
struct device *dev = &pdev->dev;
struct stm32_hdp *hdp;
u8 version;
@@ -635,21 +637,25 @@ static int stm32_hdp_probe(struct platform_device *pdev)
if (err)
return dev_err_probe(dev, err, "Failed to enable pinctrl\n");
- hdp->gpio_chip.get_direction = stm32_hdp_gpio_get_direction;
- hdp->gpio_chip.ngpio = ARRAY_SIZE(stm32_hdp_pins);
- hdp->gpio_chip.can_sleep = true;
- hdp->gpio_chip.names = stm32_hdp_pins_group;
-
- err = bgpio_init(&hdp->gpio_chip, dev, 4,
- hdp->base + HDP_GPOVAL,
- hdp->base + HDP_GPOSET,
- hdp->base + HDP_GPOCLR,
- NULL, NULL, BGPIOF_NO_INPUT);
+ hdp->gpio_chip.gc.get_direction = stm32_hdp_gpio_get_direction;
+ hdp->gpio_chip.gc.ngpio = ARRAY_SIZE(stm32_hdp_pins);
+ hdp->gpio_chip.gc.can_sleep = true;
+ hdp->gpio_chip.gc.names = stm32_hdp_pins_group;
+
+ config = (struct gpio_generic_chip_config) {
+ .dev = dev,
+ .sz = 4,
+ .dat = hdp->base + HDP_GPOVAL,
+ .set = hdp->base + HDP_GPOSET,
+ .clr = hdp->base + HDP_GPOCLR,
+ .flags = GPIO_GENERIC_NO_INPUT,
+ };
+
+ err = gpio_generic_chip_init(&hdp->gpio_chip, &config);
if (err)
- return dev_err_probe(dev, err, "Failed to init bgpio\n");
-
+ return dev_err_probe(dev, err, "Failed to init the generic GPIO chip\n");
- err = devm_gpiochip_add_data(dev, &hdp->gpio_chip, hdp);
+ err = devm_gpiochip_add_data(dev, &hdp->gpio_chip.gc, hdp);
if (err)
return dev_err_probe(dev, err, "Failed to add gpiochip\n");