950-0001-drm-vc4-hdmi-Split-the-CEC-disable-enable-functions-.patch 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. From d145ff5ff4c35bf00a84c7f916165150d0a75e53 Mon Sep 17 00:00:00 2001
  2. From: Maxime Ripard <[email protected]>
  3. Date: Thu, 19 Aug 2021 15:59:29 +0200
  4. Subject: [PATCH] drm/vc4: hdmi: Split the CEC disable / enable
  5. functions in two
  6. In order to ease further additions to the CEC enable and disable, let's
  7. split the function into two functions, one to enable and the other to
  8. disable.
  9. Reviewed-by: Dave Stevenson <[email protected]>
  10. Signed-off-by: Maxime Ripard <[email protected]>
  11. Link: https://patchwork.freedesktop.org/patch/msgid/[email protected]
  12. ---
  13. drivers/gpu/drm/vc4/vc4_hdmi.c | 75 ++++++++++++++++++++--------------
  14. 1 file changed, 45 insertions(+), 30 deletions(-)
  15. --- a/drivers/gpu/drm/vc4/vc4_hdmi.c
  16. +++ b/drivers/gpu/drm/vc4/vc4_hdmi.c
  17. @@ -1749,7 +1749,7 @@ static irqreturn_t vc4_cec_irq_handler(i
  18. return ret;
  19. }
  20. -static int vc4_hdmi_cec_adap_enable(struct cec_adapter *adap, bool enable)
  21. +static int vc4_hdmi_cec_enable(struct cec_adapter *adap)
  22. {
  23. struct vc4_hdmi *vc4_hdmi = cec_get_drvdata(adap);
  24. /* clock period in microseconds */
  25. @@ -1762,38 +1762,53 @@ static int vc4_hdmi_cec_adap_enable(stru
  26. val |= ((4700 / usecs) << VC4_HDMI_CEC_CNT_TO_4700_US_SHIFT) |
  27. ((4500 / usecs) << VC4_HDMI_CEC_CNT_TO_4500_US_SHIFT);
  28. - if (enable) {
  29. - HDMI_WRITE(HDMI_CEC_CNTRL_5, val |
  30. - VC4_HDMI_CEC_TX_SW_RESET | VC4_HDMI_CEC_RX_SW_RESET);
  31. - HDMI_WRITE(HDMI_CEC_CNTRL_5, val);
  32. - HDMI_WRITE(HDMI_CEC_CNTRL_2,
  33. - ((1500 / usecs) << VC4_HDMI_CEC_CNT_TO_1500_US_SHIFT) |
  34. - ((1300 / usecs) << VC4_HDMI_CEC_CNT_TO_1300_US_SHIFT) |
  35. - ((800 / usecs) << VC4_HDMI_CEC_CNT_TO_800_US_SHIFT) |
  36. - ((600 / usecs) << VC4_HDMI_CEC_CNT_TO_600_US_SHIFT) |
  37. - ((400 / usecs) << VC4_HDMI_CEC_CNT_TO_400_US_SHIFT));
  38. - HDMI_WRITE(HDMI_CEC_CNTRL_3,
  39. - ((2750 / usecs) << VC4_HDMI_CEC_CNT_TO_2750_US_SHIFT) |
  40. - ((2400 / usecs) << VC4_HDMI_CEC_CNT_TO_2400_US_SHIFT) |
  41. - ((2050 / usecs) << VC4_HDMI_CEC_CNT_TO_2050_US_SHIFT) |
  42. - ((1700 / usecs) << VC4_HDMI_CEC_CNT_TO_1700_US_SHIFT));
  43. - HDMI_WRITE(HDMI_CEC_CNTRL_4,
  44. - ((4300 / usecs) << VC4_HDMI_CEC_CNT_TO_4300_US_SHIFT) |
  45. - ((3900 / usecs) << VC4_HDMI_CEC_CNT_TO_3900_US_SHIFT) |
  46. - ((3600 / usecs) << VC4_HDMI_CEC_CNT_TO_3600_US_SHIFT) |
  47. - ((3500 / usecs) << VC4_HDMI_CEC_CNT_TO_3500_US_SHIFT));
  48. -
  49. - if (!vc4_hdmi->variant->external_irq_controller)
  50. - HDMI_WRITE(HDMI_CEC_CPU_MASK_CLEAR, VC4_HDMI_CPU_CEC);
  51. - } else {
  52. - if (!vc4_hdmi->variant->external_irq_controller)
  53. - HDMI_WRITE(HDMI_CEC_CPU_MASK_SET, VC4_HDMI_CPU_CEC);
  54. - HDMI_WRITE(HDMI_CEC_CNTRL_5, val |
  55. - VC4_HDMI_CEC_TX_SW_RESET | VC4_HDMI_CEC_RX_SW_RESET);
  56. - }
  57. + HDMI_WRITE(HDMI_CEC_CNTRL_5, val |
  58. + VC4_HDMI_CEC_TX_SW_RESET | VC4_HDMI_CEC_RX_SW_RESET);
  59. + HDMI_WRITE(HDMI_CEC_CNTRL_5, val);
  60. + HDMI_WRITE(HDMI_CEC_CNTRL_2,
  61. + ((1500 / usecs) << VC4_HDMI_CEC_CNT_TO_1500_US_SHIFT) |
  62. + ((1300 / usecs) << VC4_HDMI_CEC_CNT_TO_1300_US_SHIFT) |
  63. + ((800 / usecs) << VC4_HDMI_CEC_CNT_TO_800_US_SHIFT) |
  64. + ((600 / usecs) << VC4_HDMI_CEC_CNT_TO_600_US_SHIFT) |
  65. + ((400 / usecs) << VC4_HDMI_CEC_CNT_TO_400_US_SHIFT));
  66. + HDMI_WRITE(HDMI_CEC_CNTRL_3,
  67. + ((2750 / usecs) << VC4_HDMI_CEC_CNT_TO_2750_US_SHIFT) |
  68. + ((2400 / usecs) << VC4_HDMI_CEC_CNT_TO_2400_US_SHIFT) |
  69. + ((2050 / usecs) << VC4_HDMI_CEC_CNT_TO_2050_US_SHIFT) |
  70. + ((1700 / usecs) << VC4_HDMI_CEC_CNT_TO_1700_US_SHIFT));
  71. + HDMI_WRITE(HDMI_CEC_CNTRL_4,
  72. + ((4300 / usecs) << VC4_HDMI_CEC_CNT_TO_4300_US_SHIFT) |
  73. + ((3900 / usecs) << VC4_HDMI_CEC_CNT_TO_3900_US_SHIFT) |
  74. + ((3600 / usecs) << VC4_HDMI_CEC_CNT_TO_3600_US_SHIFT) |
  75. + ((3500 / usecs) << VC4_HDMI_CEC_CNT_TO_3500_US_SHIFT));
  76. +
  77. + if (!vc4_hdmi->variant->external_irq_controller)
  78. + HDMI_WRITE(HDMI_CEC_CPU_MASK_CLEAR, VC4_HDMI_CPU_CEC);
  79. +
  80. return 0;
  81. }
  82. +static int vc4_hdmi_cec_disable(struct cec_adapter *adap)
  83. +{
  84. + struct vc4_hdmi *vc4_hdmi = cec_get_drvdata(adap);
  85. +
  86. + if (!vc4_hdmi->variant->external_irq_controller)
  87. + HDMI_WRITE(HDMI_CEC_CPU_MASK_SET, VC4_HDMI_CPU_CEC);
  88. +
  89. + HDMI_WRITE(HDMI_CEC_CNTRL_5, HDMI_READ(HDMI_CEC_CNTRL_5) |
  90. + VC4_HDMI_CEC_TX_SW_RESET | VC4_HDMI_CEC_RX_SW_RESET);
  91. +
  92. + return 0;
  93. +}
  94. +
  95. +static int vc4_hdmi_cec_adap_enable(struct cec_adapter *adap, bool enable)
  96. +{
  97. + if (enable)
  98. + return vc4_hdmi_cec_enable(adap);
  99. + else
  100. + return vc4_hdmi_cec_disable(adap);
  101. +}
  102. +
  103. static int vc4_hdmi_cec_adap_log_addr(struct cec_adapter *adap, u8 log_addr)
  104. {
  105. struct vc4_hdmi *vc4_hdmi = cec_get_drvdata(adap);