1 /* SPDX-License-Identifier: GPL-2.0 */
3 * Pinctrl / GPIO driver for StarFive JH7110 SoC
5 * Copyright (C) 2022 StarFive Technology Co., Ltd.
8 #ifndef __DRIVERS_PINCTRL_STARFIVE_H__
9 #define __DRIVERS_PINCTRL_STARFIVE_H__
11 #include <linux/pinctrl/pinconf-generic.h>
12 #include <linux/pinctrl/pinmux.h>
14 struct starfive_pinctrl {
17 struct pinctrl_gpio_range gpios;
20 struct pinctrl_dev *pctl;
21 /* register read/write mutex */
23 const struct starfive_pinctrl_soc_info *info;
26 struct starfive_gpio_irq_reg {
27 unsigned int is_reg_base;
28 unsigned int ic_reg_base;
29 unsigned int ibe_reg_base;
30 unsigned int iev_reg_base;
31 unsigned int ie_reg_base;
32 unsigned int ris_reg_base;
33 unsigned int mis_reg_base;
36 struct starfive_pinctrl_soc_info {
37 const struct pinctrl_pin_desc *pins;
43 /* gpio dout/doen/din/gpioinput register */
44 unsigned int dout_reg_base;
45 unsigned int dout_mask;
46 unsigned int doen_reg_base;
47 unsigned int doen_mask;
48 unsigned int gpi_reg_base;
49 unsigned int gpi_mask;
50 unsigned int gpioin_reg_base;
52 const struct starfive_gpio_irq_reg *irq_reg;
55 int (*starfive_set_one_pin_mux)(struct starfive_pinctrl *sfp,
57 unsigned int din, u32 dout,
60 int (*starfive_get_padcfg_base)(struct starfive_pinctrl *sfp,
62 void (*starfive_gpio_irq_handler)(struct irq_desc *desc);
63 int (*starfive_gpio_init_hw)(struct gpio_chip *gc);
66 void starfive_set_gpiomux(struct starfive_pinctrl *sfp, unsigned int pin,
67 unsigned int din, u32 dout, u32 doen);
68 int starfive_pinctrl_probe(struct platform_device *pdev,
69 const struct starfive_pinctrl_soc_info *info);
70 struct starfive_pinctrl *starfive_from_irq_desc(struct irq_desc *desc);
72 #endif /* __DRIVERS_PINCTRL_STARFIVE_H__ */