826-v6.2-pinctrl-mediatek-extend-pinctrl-moore-to-support-new.patch 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  1. From fae82621ac33e2a4a96220c56e90d1ec6237d394 Mon Sep 17 00:00:00 2001
  2. From: Sam Shih <[email protected]>
  3. Date: Sun, 6 Nov 2022 09:01:12 +0100
  4. Subject: [PATCH] pinctrl: mediatek: extend pinctrl-moore to support new bias
  5. functions
  6. Commit fb34a9ae383a ("pinctrl: mediatek: support rsel feature")
  7. introduced SoC specify 'pull_type' attribute to mtk_pinconf_bias_set_combo
  8. and mtk_pinconf_bias_get_combo, and make the functions able to support
  9. almost all Mediatek SoCs that use pinctrl-mtk-common-v2.c.
  10. This patch enables pinctrl_moore to support these functions.
  11. Signed-off-by: Sam Shih <[email protected]>
  12. Signed-off-by: Frank Wunderlich <[email protected]>
  13. Reviewed-by: AngeloGioacchino Del Regno <[email protected]>
  14. Link: https://lore.kernel.org/r/[email protected]
  15. Signed-off-by: Linus Walleij <[email protected]>
  16. ---
  17. drivers/pinctrl/mediatek/pinctrl-moore.c | 49 ++++++++++++++++++++----
  18. 1 file changed, 42 insertions(+), 7 deletions(-)
  19. --- a/drivers/pinctrl/mediatek/pinctrl-moore.c
  20. +++ b/drivers/pinctrl/mediatek/pinctrl-moore.c
  21. @@ -8,6 +8,7 @@
  22. *
  23. */
  24. +#include <dt-bindings/pinctrl/mt65xx.h>
  25. #include <linux/gpio/driver.h>
  26. #include "pinctrl-moore.h"
  27. @@ -105,7 +106,7 @@ static int mtk_pinconf_get(struct pinctr
  28. {
  29. struct mtk_pinctrl *hw = pinctrl_dev_get_drvdata(pctldev);
  30. u32 param = pinconf_to_config_param(*config);
  31. - int val, val2, err, reg, ret = 1;
  32. + int val, val2, err, pullup, reg, ret = 1;
  33. const struct mtk_pin_desc *desc;
  34. desc = (const struct mtk_pin_desc *)&hw->soc->pins[pin];
  35. @@ -114,7 +115,13 @@ static int mtk_pinconf_get(struct pinctr
  36. switch (param) {
  37. case PIN_CONFIG_BIAS_DISABLE:
  38. - if (hw->soc->bias_disable_get) {
  39. + if (hw->soc->bias_get_combo) {
  40. + err = hw->soc->bias_get_combo(hw, desc, &pullup, &ret);
  41. + if (err)
  42. + return err;
  43. + if (ret != MTK_PUPD_SET_R1R0_00 && ret != MTK_DISABLE)
  44. + return -EINVAL;
  45. + } else if (hw->soc->bias_disable_get) {
  46. err = hw->soc->bias_disable_get(hw, desc, &ret);
  47. if (err)
  48. return err;
  49. @@ -123,7 +130,15 @@ static int mtk_pinconf_get(struct pinctr
  50. }
  51. break;
  52. case PIN_CONFIG_BIAS_PULL_UP:
  53. - if (hw->soc->bias_get) {
  54. + if (hw->soc->bias_get_combo) {
  55. + err = hw->soc->bias_get_combo(hw, desc, &pullup, &ret);
  56. + if (err)
  57. + return err;
  58. + if (ret == MTK_PUPD_SET_R1R0_00 || ret == MTK_DISABLE)
  59. + return -EINVAL;
  60. + if (!pullup)
  61. + return -EINVAL;
  62. + } else if (hw->soc->bias_get) {
  63. err = hw->soc->bias_get(hw, desc, 1, &ret);
  64. if (err)
  65. return err;
  66. @@ -132,7 +147,15 @@ static int mtk_pinconf_get(struct pinctr
  67. }
  68. break;
  69. case PIN_CONFIG_BIAS_PULL_DOWN:
  70. - if (hw->soc->bias_get) {
  71. + if (hw->soc->bias_get_combo) {
  72. + err = hw->soc->bias_get_combo(hw, desc, &pullup, &ret);
  73. + if (err)
  74. + return err;
  75. + if (ret == MTK_PUPD_SET_R1R0_00 || ret == MTK_DISABLE)
  76. + return -EINVAL;
  77. + if (pullup)
  78. + return -EINVAL;
  79. + } else if (hw->soc->bias_get) {
  80. err = hw->soc->bias_get(hw, desc, 0, &ret);
  81. if (err)
  82. return err;
  83. @@ -235,7 +258,11 @@ static int mtk_pinconf_set(struct pinctr
  84. switch (param) {
  85. case PIN_CONFIG_BIAS_DISABLE:
  86. - if (hw->soc->bias_disable_set) {
  87. + if (hw->soc->bias_set_combo) {
  88. + err = hw->soc->bias_set_combo(hw, desc, 0, MTK_DISABLE);
  89. + if (err)
  90. + return err;
  91. + } else if (hw->soc->bias_disable_set) {
  92. err = hw->soc->bias_disable_set(hw, desc);
  93. if (err)
  94. return err;
  95. @@ -244,7 +271,11 @@ static int mtk_pinconf_set(struct pinctr
  96. }
  97. break;
  98. case PIN_CONFIG_BIAS_PULL_UP:
  99. - if (hw->soc->bias_set) {
  100. + if (hw->soc->bias_set_combo) {
  101. + err = hw->soc->bias_set_combo(hw, desc, 1, arg);
  102. + if (err)
  103. + return err;
  104. + } else if (hw->soc->bias_set) {
  105. err = hw->soc->bias_set(hw, desc, 1);
  106. if (err)
  107. return err;
  108. @@ -253,7 +284,11 @@ static int mtk_pinconf_set(struct pinctr
  109. }
  110. break;
  111. case PIN_CONFIG_BIAS_PULL_DOWN:
  112. - if (hw->soc->bias_set) {
  113. + if (hw->soc->bias_set_combo) {
  114. + err = hw->soc->bias_set_combo(hw, desc, 0, arg);
  115. + if (err)
  116. + return err;
  117. + } else if (hw->soc->bias_set) {
  118. err = hw->soc->bias_set(hw, desc, 0);
  119. if (err)
  120. return err;