950-0668-drm-vc4-hdmi-Split-the-CEC-disable-enable-functions-.patch 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. From 7090c69d64c3871867e86adc5bf568d89608c965 Mon Sep 17 00:00:00 2001
  2. From: Maxime Ripard <[email protected]>
  3. Date: Tue, 29 Jun 2021 09:53:52 +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. Signed-off-by: Maxime Ripard <[email protected]>
  10. ---
  11. drivers/gpu/drm/vc4/vc4_hdmi.c | 75 ++++++++++++++++++++--------------
  12. 1 file changed, 45 insertions(+), 30 deletions(-)
  13. --- a/drivers/gpu/drm/vc4/vc4_hdmi.c
  14. +++ b/drivers/gpu/drm/vc4/vc4_hdmi.c
  15. @@ -1756,7 +1756,7 @@ static irqreturn_t vc4_cec_irq_handler(i
  16. return ret;
  17. }
  18. -static int vc4_hdmi_cec_adap_enable(struct cec_adapter *adap, bool enable)
  19. +static int vc4_hdmi_cec_enable(struct cec_adapter *adap)
  20. {
  21. struct vc4_hdmi *vc4_hdmi = cec_get_drvdata(adap);
  22. /* clock period in microseconds */
  23. @@ -1769,38 +1769,53 @@ static int vc4_hdmi_cec_adap_enable(stru
  24. val |= ((4700 / usecs) << VC4_HDMI_CEC_CNT_TO_4700_US_SHIFT) |
  25. ((4500 / usecs) << VC4_HDMI_CEC_CNT_TO_4500_US_SHIFT);
  26. - if (enable) {
  27. - HDMI_WRITE(HDMI_CEC_CNTRL_5, val |
  28. - VC4_HDMI_CEC_TX_SW_RESET | VC4_HDMI_CEC_RX_SW_RESET);
  29. - HDMI_WRITE(HDMI_CEC_CNTRL_5, val);
  30. - HDMI_WRITE(HDMI_CEC_CNTRL_2,
  31. - ((1500 / usecs) << VC4_HDMI_CEC_CNT_TO_1500_US_SHIFT) |
  32. - ((1300 / usecs) << VC4_HDMI_CEC_CNT_TO_1300_US_SHIFT) |
  33. - ((800 / usecs) << VC4_HDMI_CEC_CNT_TO_800_US_SHIFT) |
  34. - ((600 / usecs) << VC4_HDMI_CEC_CNT_TO_600_US_SHIFT) |
  35. - ((400 / usecs) << VC4_HDMI_CEC_CNT_TO_400_US_SHIFT));
  36. - HDMI_WRITE(HDMI_CEC_CNTRL_3,
  37. - ((2750 / usecs) << VC4_HDMI_CEC_CNT_TO_2750_US_SHIFT) |
  38. - ((2400 / usecs) << VC4_HDMI_CEC_CNT_TO_2400_US_SHIFT) |
  39. - ((2050 / usecs) << VC4_HDMI_CEC_CNT_TO_2050_US_SHIFT) |
  40. - ((1700 / usecs) << VC4_HDMI_CEC_CNT_TO_1700_US_SHIFT));
  41. - HDMI_WRITE(HDMI_CEC_CNTRL_4,
  42. - ((4300 / usecs) << VC4_HDMI_CEC_CNT_TO_4300_US_SHIFT) |
  43. - ((3900 / usecs) << VC4_HDMI_CEC_CNT_TO_3900_US_SHIFT) |
  44. - ((3600 / usecs) << VC4_HDMI_CEC_CNT_TO_3600_US_SHIFT) |
  45. - ((3500 / usecs) << VC4_HDMI_CEC_CNT_TO_3500_US_SHIFT));
  46. -
  47. - if (!vc4_hdmi->variant->external_irq_controller)
  48. - HDMI_WRITE(HDMI_CEC_CPU_MASK_CLEAR, VC4_HDMI_CPU_CEC);
  49. - } else {
  50. - if (!vc4_hdmi->variant->external_irq_controller)
  51. - HDMI_WRITE(HDMI_CEC_CPU_MASK_SET, VC4_HDMI_CPU_CEC);
  52. - HDMI_WRITE(HDMI_CEC_CNTRL_5, val |
  53. - VC4_HDMI_CEC_TX_SW_RESET | VC4_HDMI_CEC_RX_SW_RESET);
  54. - }
  55. + HDMI_WRITE(HDMI_CEC_CNTRL_5, val |
  56. + VC4_HDMI_CEC_TX_SW_RESET | VC4_HDMI_CEC_RX_SW_RESET);
  57. + HDMI_WRITE(HDMI_CEC_CNTRL_5, val);
  58. + HDMI_WRITE(HDMI_CEC_CNTRL_2,
  59. + ((1500 / usecs) << VC4_HDMI_CEC_CNT_TO_1500_US_SHIFT) |
  60. + ((1300 / usecs) << VC4_HDMI_CEC_CNT_TO_1300_US_SHIFT) |
  61. + ((800 / usecs) << VC4_HDMI_CEC_CNT_TO_800_US_SHIFT) |
  62. + ((600 / usecs) << VC4_HDMI_CEC_CNT_TO_600_US_SHIFT) |
  63. + ((400 / usecs) << VC4_HDMI_CEC_CNT_TO_400_US_SHIFT));
  64. + HDMI_WRITE(HDMI_CEC_CNTRL_3,
  65. + ((2750 / usecs) << VC4_HDMI_CEC_CNT_TO_2750_US_SHIFT) |
  66. + ((2400 / usecs) << VC4_HDMI_CEC_CNT_TO_2400_US_SHIFT) |
  67. + ((2050 / usecs) << VC4_HDMI_CEC_CNT_TO_2050_US_SHIFT) |
  68. + ((1700 / usecs) << VC4_HDMI_CEC_CNT_TO_1700_US_SHIFT));
  69. + HDMI_WRITE(HDMI_CEC_CNTRL_4,
  70. + ((4300 / usecs) << VC4_HDMI_CEC_CNT_TO_4300_US_SHIFT) |
  71. + ((3900 / usecs) << VC4_HDMI_CEC_CNT_TO_3900_US_SHIFT) |
  72. + ((3600 / usecs) << VC4_HDMI_CEC_CNT_TO_3600_US_SHIFT) |
  73. + ((3500 / usecs) << VC4_HDMI_CEC_CNT_TO_3500_US_SHIFT));
  74. +
  75. + if (!vc4_hdmi->variant->external_irq_controller)
  76. + HDMI_WRITE(HDMI_CEC_CPU_MASK_CLEAR, VC4_HDMI_CPU_CEC);
  77. +
  78. return 0;
  79. }
  80. +static int vc4_hdmi_cec_disable(struct cec_adapter *adap)
  81. +{
  82. + struct vc4_hdmi *vc4_hdmi = cec_get_drvdata(adap);
  83. +
  84. + if (!vc4_hdmi->variant->external_irq_controller)
  85. + HDMI_WRITE(HDMI_CEC_CPU_MASK_SET, VC4_HDMI_CPU_CEC);
  86. +
  87. + HDMI_WRITE(HDMI_CEC_CNTRL_5, HDMI_READ(HDMI_CEC_CNTRL_5) |
  88. + VC4_HDMI_CEC_TX_SW_RESET | VC4_HDMI_CEC_RX_SW_RESET);
  89. +
  90. + return 0;
  91. +}
  92. +
  93. +static int vc4_hdmi_cec_adap_enable(struct cec_adapter *adap, bool enable)
  94. +{
  95. + if (enable)
  96. + return vc4_hdmi_cec_enable(adap);
  97. + else
  98. + return vc4_hdmi_cec_disable(adap);
  99. +}
  100. +
  101. static int vc4_hdmi_cec_adap_log_addr(struct cec_adapter *adap, u8 log_addr)
  102. {
  103. struct vc4_hdmi *vc4_hdmi = cec_get_drvdata(adap);