pinctrl-pxa2xx.h 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. /* SPDX-License-Identifier: GPL-2.0-only */
  2. /*
  3. * Marvell PXA2xx family pin control
  4. *
  5. * Copyright (C) 2015 Robert Jarzmik
  6. */
  7. #ifndef __PINCTRL_PXA_H
  8. #define __PINCTRL_PXA_H
  9. #define PXA_FUNCTION(_dir, _af, _name) \
  10. { \
  11. .name = _name, \
  12. .muxval = (_dir | (_af << 1)), \
  13. }
  14. #define PXA_PIN(_pin, funcs...) \
  15. { \
  16. .pin = _pin, \
  17. .functions = (struct pxa_desc_function[]){ \
  18. funcs, { } }, \
  19. }
  20. #define PXA_GPIO_PIN(_pin, funcs...) \
  21. { \
  22. .pin = _pin, \
  23. .functions = (struct pxa_desc_function[]){ \
  24. PXA_FUNCTION(0, 0, "gpio_in"), \
  25. PXA_FUNCTION(1, 0, "gpio_out"), \
  26. funcs, { } }, \
  27. }
  28. #define PXA_GPIO_ONLY_PIN(_pin) \
  29. { \
  30. .pin = _pin, \
  31. .functions = (struct pxa_desc_function[]){ \
  32. PXA_FUNCTION(0, 0, "gpio_in"), \
  33. PXA_FUNCTION(1, 0, "gpio_out"), \
  34. { } }, \
  35. }
  36. #define PXA_PINCTRL_PIN(pin) \
  37. PINCTRL_PIN(pin, "P" #pin)
  38. struct pxa_desc_function {
  39. const char *name;
  40. u8 muxval;
  41. };
  42. struct pxa_desc_pin {
  43. struct pinctrl_pin_desc pin;
  44. struct pxa_desc_function *functions;
  45. };
  46. struct pxa_pinctrl_group {
  47. const char *name;
  48. unsigned pin;
  49. };
  50. struct pxa_pinctrl_function {
  51. const char *name;
  52. const char **groups;
  53. unsigned ngroups;
  54. };
  55. struct pxa_pinctrl {
  56. spinlock_t lock;
  57. void __iomem **base_gafr;
  58. void __iomem **base_gpdr;
  59. void __iomem **base_pgsr;
  60. struct device *dev;
  61. struct pinctrl_desc desc;
  62. struct pinctrl_dev *pctl_dev;
  63. unsigned npins;
  64. const struct pxa_desc_pin *ppins;
  65. unsigned ngroups;
  66. struct pxa_pinctrl_group *groups;
  67. unsigned nfuncs;
  68. struct pxa_pinctrl_function *functions;
  69. char *name;
  70. };
  71. int pxa2xx_pinctrl_init(struct platform_device *pdev,
  72. const struct pxa_desc_pin *ppins, int npins,
  73. void __iomem *base_gafr[], void __iomem *base_gpdr[],
  74. void __iomem *base_gpsr[]);
  75. #endif /* __PINCTRL_PXA_H */