pinctrl-pxa2xx.h 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  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 {
  47. spinlock_t lock;
  48. void __iomem **base_gafr;
  49. void __iomem **base_gpdr;
  50. void __iomem **base_pgsr;
  51. struct device *dev;
  52. struct pinctrl_desc desc;
  53. struct pinctrl_dev *pctl_dev;
  54. unsigned npins;
  55. const struct pxa_desc_pin *ppins;
  56. unsigned ngroups;
  57. struct pingroup *groups;
  58. unsigned nfuncs;
  59. struct pinfunction *functions;
  60. char *name;
  61. };
  62. int pxa2xx_pinctrl_init(struct platform_device *pdev,
  63. const struct pxa_desc_pin *ppins, int npins,
  64. void __iomem *base_gafr[], void __iomem *base_gpdr[],
  65. void __iomem *base_gpsr[]);
  66. #endif /* __PINCTRL_PXA_H */