pinctrl-starfive-jh7110.h 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. /* SPDX-License-Identifier: GPL-2.0 */
  2. /*
  3. * Pinctrl / GPIO driver for StarFive JH7110 SoC
  4. *
  5. * Copyright (C) 2022 StarFive Technology Co., Ltd.
  6. */
  7. #ifndef __PINCTRL_STARFIVE_JH7110_H__
  8. #define __PINCTRL_STARFIVE_JH7110_H__
  9. #include <linux/pinctrl/pinconf-generic.h>
  10. #include <linux/pinctrl/pinmux.h>
  11. struct jh7110_pinctrl {
  12. struct device *dev;
  13. struct gpio_chip gc;
  14. struct pinctrl_gpio_range gpios;
  15. raw_spinlock_t lock;
  16. void __iomem *base;
  17. struct pinctrl_dev *pctl;
  18. /* register read/write mutex */
  19. struct mutex mutex;
  20. const struct jh7110_pinctrl_soc_info *info;
  21. u32 *saved_regs;
  22. };
  23. struct jh7110_gpio_irq_reg {
  24. unsigned int is_reg_base;
  25. unsigned int ic_reg_base;
  26. unsigned int ibe_reg_base;
  27. unsigned int iev_reg_base;
  28. unsigned int ie_reg_base;
  29. unsigned int ris_reg_base;
  30. unsigned int mis_reg_base;
  31. };
  32. struct jh7110_pinctrl_soc_info {
  33. const struct pinctrl_pin_desc *pins;
  34. unsigned int npins;
  35. unsigned int ngpios;
  36. /* gpio dout/doen/din/gpioinput register */
  37. unsigned int dout_reg_base;
  38. unsigned int dout_mask;
  39. unsigned int doen_reg_base;
  40. unsigned int doen_mask;
  41. unsigned int gpi_reg_base;
  42. unsigned int gpi_mask;
  43. unsigned int gpioin_reg_base;
  44. const struct jh7110_gpio_irq_reg *irq_reg;
  45. unsigned int nsaved_regs;
  46. /* generic pinmux */
  47. int (*jh7110_set_one_pin_mux)(struct jh7110_pinctrl *sfp,
  48. unsigned int pin,
  49. unsigned int din, u32 dout,
  50. u32 doen, u32 func);
  51. /* gpio chip */
  52. int (*jh7110_get_padcfg_base)(struct jh7110_pinctrl *sfp,
  53. unsigned int pin);
  54. void (*jh7110_gpio_irq_handler)(struct irq_desc *desc);
  55. int (*jh7110_gpio_init_hw)(struct gpio_chip *gc);
  56. };
  57. void jh7110_set_gpiomux(struct jh7110_pinctrl *sfp, unsigned int pin,
  58. unsigned int din, u32 dout, u32 doen);
  59. int jh7110_pinctrl_probe(struct platform_device *pdev);
  60. struct jh7110_pinctrl *jh7110_from_irq_desc(struct irq_desc *desc);
  61. extern const struct dev_pm_ops jh7110_pinctrl_pm_ops;
  62. #endif /* __PINCTRL_STARFIVE_JH7110_H__ */