pinctrl-starfive.h 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. /* SPDX-License-Identifier: GPL-2.0 */
  2. /*
  3. * Pinctrl / GPIO driver for StarFive SoC
  4. *
  5. * Copyright (C) 2022-2023 StarFive Technology Co., Ltd.
  6. * Author: Lee Kuan Lim <kuanlim.lee@starfivetech.com>
  7. * Author: Jianlong Huang <jianlong.huang@starfivetech.com>
  8. */
  9. #define STARFIVE_PINCTRL(a, b) { .number = a, .name = b }
  10. extern const struct pinctrl_ops starfive_pinctrl_ops;
  11. struct starfive_pinctrl_pin {
  12. unsigned int number;
  13. const char *name;
  14. };
  15. struct starfive_pinctrl_soc_info {
  16. /* pinctrl */
  17. int (*set_one_pinmux)(struct udevice *dev, unsigned int pin,
  18. unsigned int din, u32 dout, u32 doen, u32 func);
  19. int (*get_padcfg_base)(struct udevice *dev,
  20. unsigned int pin);
  21. /* gpio dout/doen/din/gpioinput register */
  22. unsigned int dout_reg_base;
  23. unsigned int dout_mask;
  24. unsigned int doen_reg_base;
  25. unsigned int doen_mask;
  26. unsigned int gpi_reg_base;
  27. unsigned int gpi_mask;
  28. unsigned int gpioin_reg_base;
  29. /* gpio */
  30. const char *gpio_bank_name;
  31. int ngpios;
  32. void (*gpio_init_hw)(struct udevice *dev);
  33. };
  34. /*
  35. * struct starfive_pinctrl_priv - private data for Starfive pinctrl driver
  36. *
  37. * @padctl_base: base address of the pinctrl device
  38. * @info: SoC specific data & function
  39. */
  40. struct starfive_pinctrl_priv {
  41. void __iomem *base;
  42. struct starfive_pinctrl_soc_info *info;
  43. };
  44. void starfive_set_gpiomux(struct udevice *dev, unsigned int pin,
  45. unsigned int din, u32 dout, u32 doen);
  46. int starfive_pinctrl_probe(struct udevice *dev,
  47. const struct starfive_pinctrl_soc_info *info);