pinctrl-lpass-lpi.h 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. /* SPDX-License-Identifier: GPL-2.0-only */
  2. /*
  3. * Copyright (c) 2016-2019, The Linux Foundation. All rights reserved.
  4. * Copyright (c) 2020 Linaro Ltd.
  5. */
  6. #ifndef __PINCTRL_LPASS_LPI_H__
  7. #define __PINCTRL_LPASS_LPI_H__
  8. #include <linux/bitops.h>
  9. #include <linux/bitfield.h>
  10. #include "../core.h"
  11. #define LPI_SLEW_RATE_CTL_REG 0xa000
  12. #define LPI_TLMM_REG_OFFSET 0x1000
  13. #define LPI_SLEW_RATE_MAX 0x03
  14. #define LPI_SLEW_BITS_SIZE 0x02
  15. #define LPI_SLEW_RATE_MASK GENMASK(1, 0)
  16. #define LPI_GPIO_CFG_REG 0x00
  17. #define LPI_GPIO_PULL_MASK GENMASK(1, 0)
  18. #define LPI_GPIO_FUNCTION_MASK GENMASK(5, 2)
  19. #define LPI_GPIO_OUT_STRENGTH_MASK GENMASK(8, 6)
  20. #define LPI_GPIO_OE_MASK BIT(9)
  21. #define LPI_GPIO_VALUE_REG 0x04
  22. #define LPI_GPIO_VALUE_IN_MASK BIT(0)
  23. #define LPI_GPIO_VALUE_OUT_MASK BIT(1)
  24. #define LPI_GPIO_BIAS_DISABLE 0x0
  25. #define LPI_GPIO_PULL_DOWN 0x1
  26. #define LPI_GPIO_KEEPER 0x2
  27. #define LPI_GPIO_PULL_UP 0x3
  28. #define LPI_GPIO_DS_TO_VAL(v) (v / 2 - 1)
  29. #define LPI_NO_SLEW -1
  30. #define LPI_FUNCTION(fname) \
  31. [LPI_MUX_##fname] = { \
  32. .name = #fname, \
  33. .groups = fname##_groups, \
  34. .ngroups = ARRAY_SIZE(fname##_groups), \
  35. }
  36. #define LPI_PINGROUP(id, soff, f1, f2, f3, f4) \
  37. { \
  38. .group.name = "gpio" #id, \
  39. .group.pins = gpio##id##_pins, \
  40. .pin = id, \
  41. .slew_offset = soff, \
  42. .group.num_pins = ARRAY_SIZE(gpio##id##_pins), \
  43. .funcs = (int[]){ \
  44. LPI_MUX_gpio, \
  45. LPI_MUX_##f1, \
  46. LPI_MUX_##f2, \
  47. LPI_MUX_##f3, \
  48. LPI_MUX_##f4, \
  49. }, \
  50. .nfuncs = 5, \
  51. }
  52. struct lpi_pingroup {
  53. struct group_desc group;
  54. unsigned int pin;
  55. /* Bit offset in slew register for SoundWire pins only */
  56. int slew_offset;
  57. unsigned int *funcs;
  58. unsigned int nfuncs;
  59. };
  60. struct lpi_function {
  61. const char *name;
  62. const char * const *groups;
  63. unsigned int ngroups;
  64. };
  65. struct lpi_pinctrl_variant_data {
  66. const struct pinctrl_pin_desc *pins;
  67. int npins;
  68. const struct lpi_pingroup *groups;
  69. int ngroups;
  70. const struct lpi_function *functions;
  71. int nfunctions;
  72. };
  73. int lpi_pinctrl_probe(struct platform_device *pdev);
  74. int lpi_pinctrl_remove(struct platform_device *pdev);
  75. #endif /*__PINCTRL_LPASS_LPI_H__*/