]> git.pld-linux.org Git - packages/kernel.git/blobdiff - kernel-pinebook-pro.patch
up to 6.4.3
[packages/kernel.git] / kernel-pinebook-pro.patch
index 73d69c208afec3ec4fc41566ec90a3f5e9411cee..d92d5ab799e415819e2f2b71bb1eda31c5fc6836 100644 (file)
@@ -258,8 +258,8 @@ index 000000000000..143ff2486f2f
 +
 +      /* consumers */
 +      struct usb_role_switch *role_sw;
-+        struct typec_switch *sw;
-+        struct typec_mux *mux;
++        struct typec_switch_dev *sw;
++        struct typec_mux_dev *mux;
 +
 +      /* providers */
 +      struct extcon_dev *extcon;
@@ -374,7 +374,7 @@ index 000000000000..143ff2486f2f
 +      return 0;
 +}
 +
-+static int typec_extcon_sw_set(struct typec_switch *sw,
++static int typec_extcon_sw_set(struct typec_switch_dev *sw,
 +                             enum typec_orientation orientation)
 +{
 +        struct typec_extcon *tce = typec_switch_get_drvdata(sw);
@@ -390,7 +390,7 @@ index 000000000000..143ff2486f2f
 +        return 0;
 +}
 +
-+static int typec_extcon_mux_set(struct typec_mux *mux,
++static int typec_extcon_mux_set(struct typec_mux_dev *mux,
 +                              struct typec_mux_state *state)
 +{
 +        struct typec_extcon *tce = typec_mux_get_drvdata(mux);
@@ -634,7 +634,7 @@ index c2f021a1a18f..fc33e111bbee 100644
 +                      altmodes {
 +                              dp {
 +                                      svid = <0xff01>;
-+                                      vdo = <0x0c0046>;
++                                      vdo = <0x0c0006>;
 +                              };
 +                      };
  
@@ -651,346 +651,3 @@ index c2f021a1a18f..fc33e111bbee 100644
 -- 
 2.34.1
 
-From: Hugh Cole-Baker <sigmaris@gmail.com>
-Subject: [PATCH v2 1/3] drm/rockchip: define gamma registers for RK3399
-Date: Tue, 19 Oct 2021 22:58:41 +0100
-
-The VOP on RK3399 has a different approach from previous versions for
-setting a gamma lookup table, using an update_gamma_lut register. As
-this differs from RK3288, give RK3399 its own set of "common" register
-definitions.
-
-Signed-off-by: Hugh Cole-Baker <sigmaris@gmail.com>
----
-
-Changes from v1: no changes in this patch
-
- drivers/gpu/drm/rockchip/rockchip_drm_vop.h |  2 ++
- drivers/gpu/drm/rockchip/rockchip_vop_reg.c | 24 +++++++++++++++++++--
- drivers/gpu/drm/rockchip/rockchip_vop_reg.h |  1 +
- 3 files changed, 25 insertions(+), 2 deletions(-)
-
-diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_vop.h b/drivers/gpu/drm/rockchip/rockchip_drm_vop.h
-index 857d97cdc67c..14179e89bd21 100644
---- a/drivers/gpu/drm/rockchip/rockchip_drm_vop.h
-+++ b/drivers/gpu/drm/rockchip/rockchip_drm_vop.h
-@@ -99,6 +99,8 @@ struct vop_common {
-       struct vop_reg dither_down_en;
-       struct vop_reg dither_up;
-       struct vop_reg dsp_lut_en;
-+      struct vop_reg update_gamma_lut;
-+      struct vop_reg lut_buffer_index;
-       struct vop_reg gate_en;
-       struct vop_reg mmu_en;
-       struct vop_reg out_mode;
-diff --git a/drivers/gpu/drm/rockchip/rockchip_vop_reg.c b/drivers/gpu/drm/rockchip/rockchip_vop_reg.c
-index ca7cc82125cb..bfb7e130f09b 100644
---- a/drivers/gpu/drm/rockchip/rockchip_vop_reg.c
-+++ b/drivers/gpu/drm/rockchip/rockchip_vop_reg.c
-@@ -865,6 +865,24 @@ static const struct vop_output rk3399_output = {
-       .mipi_dual_channel_en = VOP_REG(RK3288_SYS_CTRL, 0x1, 3),
- };
-+static const struct vop_common rk3399_common = {
-+      .standby = VOP_REG_SYNC(RK3399_SYS_CTRL, 0x1, 22),
-+      .gate_en = VOP_REG(RK3399_SYS_CTRL, 0x1, 23),
-+      .mmu_en = VOP_REG(RK3399_SYS_CTRL, 0x1, 20),
-+      .dither_down_sel = VOP_REG(RK3399_DSP_CTRL1, 0x1, 4),
-+      .dither_down_mode = VOP_REG(RK3399_DSP_CTRL1, 0x1, 3),
-+      .dither_down_en = VOP_REG(RK3399_DSP_CTRL1, 0x1, 2),
-+      .pre_dither_down = VOP_REG(RK3399_DSP_CTRL1, 0x1, 1),
-+      .dither_up = VOP_REG(RK3399_DSP_CTRL1, 0x1, 6),
-+      .dsp_lut_en = VOP_REG(RK3399_DSP_CTRL1, 0x1, 0),
-+      .update_gamma_lut = VOP_REG(RK3399_DSP_CTRL1, 0x1, 7),
-+      .lut_buffer_index = VOP_REG(RK3399_DBG_POST_REG1, 0x1, 1),
-+      .data_blank = VOP_REG(RK3399_DSP_CTRL0, 0x1, 19),
-+      .dsp_blank = VOP_REG(RK3399_DSP_CTRL0, 0x3, 18),
-+      .out_mode = VOP_REG(RK3399_DSP_CTRL0, 0xf, 0),
-+      .cfg_done = VOP_REG_SYNC(RK3399_REG_CFG_DONE, 0x1, 0),
-+};
-+
- static const struct vop_yuv2yuv_phy rk3399_yuv2yuv_win01_data = {
-       .y2r_coefficients = {
-               VOP_REG(RK3399_WIN0_YUV2YUV_Y2R + 0, 0xffff, 0),
-@@ -944,7 +962,7 @@ static const struct vop_data rk3399_vop_big = {
-       .version = VOP_VERSION(3, 5),
-       .feature = VOP_FEATURE_OUTPUT_RGB10,
-       .intr = &rk3366_vop_intr,
--      .common = &rk3288_common,
-+      .common = &rk3399_common,
-       .modeset = &rk3288_modeset,
-       .output = &rk3399_output,
-       .afbc = &rk3399_vop_afbc,
-@@ -952,6 +970,7 @@ static const struct vop_data rk3399_vop_big = {
-       .win = rk3399_vop_win_data,
-       .win_size = ARRAY_SIZE(rk3399_vop_win_data),
-       .win_yuv2yuv = rk3399_vop_big_win_yuv2yuv_data,
-+      .lut_size = 1024,
- };
- static const struct vop_win_data rk3399_vop_lit_win_data[] = {
-@@ -970,13 +989,14 @@ static const struct vop_win_yuv2yuv_data rk3399_vop_lit_win_yuv2yuv_data[] = {
- static const struct vop_data rk3399_vop_lit = {
-       .version = VOP_VERSION(3, 6),
-       .intr = &rk3366_vop_intr,
--      .common = &rk3288_common,
-+      .common = &rk3399_common,
-       .modeset = &rk3288_modeset,
-       .output = &rk3399_output,
-       .misc = &rk3368_misc,
-       .win = rk3399_vop_lit_win_data,
-       .win_size = ARRAY_SIZE(rk3399_vop_lit_win_data),
-       .win_yuv2yuv = rk3399_vop_lit_win_yuv2yuv_data,
-+      .lut_size = 256,
- };
- static const struct vop_win_data rk3228_vop_win_data[] = {
-diff --git a/drivers/gpu/drm/rockchip/rockchip_vop_reg.h b/drivers/gpu/drm/rockchip/rockchip_vop_reg.h
-index 0b3cd65ba5c1..406e981c75bd 100644
---- a/drivers/gpu/drm/rockchip/rockchip_vop_reg.h
-+++ b/drivers/gpu/drm/rockchip/rockchip_vop_reg.h
-@@ -628,6 +628,7 @@
- #define RK3399_YUV2YUV_WIN                    0x02c0
- #define RK3399_YUV2YUV_POST                   0x02c4
- #define RK3399_AUTO_GATING_EN                 0x02cc
-+#define RK3399_DBG_POST_REG1                  0x036c
- #define RK3399_WIN0_CSC_COE                   0x03a0
- #define RK3399_WIN1_CSC_COE                   0x03c0
- #define RK3399_WIN2_CSC_COE                   0x03e0
-
-From: Hugh Cole-Baker <sigmaris@gmail.com>
-Subject: [PATCH v2 2/3] drm/rockchip: support gamma control on RK3399
-Date: Tue, 19 Oct 2021 22:58:42 +0100
-
-The RK3399 has a 1024-entry gamma LUT with 10 bits per component on its
-"big" VOP and a 256-entry, 8 bit per component LUT on the "little" VOP.
-Compared to the RK3288, it no longer requires disabling gamma while
-updating the LUT. On the RK3399, the LUT can be updated at any time as
-the hardware has two LUT buffers, one can be written while the other is
-in use. A swap of the buffers is triggered by writing 1 to the
-update_gamma_lut register.
-
-Signed-off-by: Hugh Cole-Baker <sigmaris@gmail.com>
----
-
-Changes from v1: Moved the vop_crtc_gamma_set call to the end of
-vop_crtc_atomic_enable after the clocks and CRTC are enabled.
-
- drivers/gpu/drm/rockchip/rockchip_drm_vop.c | 105 +++++++++++++-------
- 1 file changed, 71 insertions(+), 34 deletions(-)
-
-diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_vop.c b/drivers/gpu/drm/rockchip/rockchip_drm_vop.c
-index ba9e14da41b4..e2c97f1b26da 100644
---- a/drivers/gpu/drm/rockchip/rockchip_drm_vop.c
-+++ b/drivers/gpu/drm/rockchip/rockchip_drm_vop.c
-@@ -9,6 +9,7 @@
- #include <linux/delay.h>
- #include <linux/iopoll.h>
- #include <linux/kernel.h>
-+#include <linux/log2.h>
- #include <linux/module.h>
- #include <linux/of.h>
- #include <linux/of_device.h>
-@@ -66,6 +67,9 @@
- #define VOP_REG_SET(vop, group, name, v) \
-                   vop_reg_set(vop, &vop->data->group->name, 0, ~0, v, #name)
-+#define VOP_HAS_REG(vop, group, name) \
-+              (!!(vop->data->group->name.mask))
-+
- #define VOP_INTR_SET_TYPE(vop, name, type, v) \
-       do { \
-               int i, reg = 0, mask = 0; \
-@@ -1204,17 +1208,22 @@ static bool vop_dsp_lut_is_enabled(struct vop *vop)
-       return vop_read_reg(vop, 0, &vop->data->common->dsp_lut_en);
- }
-+static u32 vop_lut_buffer_index(struct vop *vop)
-+{
-+      return vop_read_reg(vop, 0, &vop->data->common->lut_buffer_index);
-+}
-+
- static void vop_crtc_write_gamma_lut(struct vop *vop, struct drm_crtc *crtc)
- {
-       struct drm_color_lut *lut = crtc->state->gamma_lut->data;
--      unsigned int i;
-+      unsigned int i, bpc = ilog2(vop->data->lut_size);
-       for (i = 0; i < crtc->gamma_size; i++) {
-               u32 word;
--              word = (drm_color_lut_extract(lut[i].red, 10) << 20) |
--                     (drm_color_lut_extract(lut[i].green, 10) << 10) |
--                      drm_color_lut_extract(lut[i].blue, 10);
-+              word = (drm_color_lut_extract(lut[i].red, bpc) << (2 * bpc)) |
-+                     (drm_color_lut_extract(lut[i].green, bpc) << bpc) |
-+                      drm_color_lut_extract(lut[i].blue, bpc);
-               writel(word, vop->lut_regs + i * 4);
-       }
- }
-@@ -1224,38 +1233,66 @@ static void vop_crtc_gamma_set(struct vop *vop, struct drm_crtc *crtc,
- {
-       struct drm_crtc_state *state = crtc->state;
-       unsigned int idle;
-+      u32 lut_idx, old_idx;
-       int ret;
-       if (!vop->lut_regs)
-               return;
--      /*
--       * To disable gamma (gamma_lut is null) or to write
--       * an update to the LUT, clear dsp_lut_en.
--       */
--      spin_lock(&vop->reg_lock);
--      VOP_REG_SET(vop, common, dsp_lut_en, 0);
--      vop_cfg_done(vop);
--      spin_unlock(&vop->reg_lock);
--      /*
--       * In order to write the LUT to the internal memory,
--       * we need to first make sure the dsp_lut_en bit is cleared.
--       */
--      ret = readx_poll_timeout(vop_dsp_lut_is_enabled, vop,
--                               idle, !idle, 5, 30 * 1000);
--      if (ret) {
--              DRM_DEV_ERROR(vop->dev, "display LUT RAM enable timeout!\n");
--              return;
--      }
-+      if (!state->gamma_lut || !VOP_HAS_REG(vop, common, update_gamma_lut)) {
-+              /*
-+               * To disable gamma (gamma_lut is null) or to write
-+               * an update to the LUT, clear dsp_lut_en.
-+               */
-+              spin_lock(&vop->reg_lock);
-+              VOP_REG_SET(vop, common, dsp_lut_en, 0);
-+              vop_cfg_done(vop);
-+              spin_unlock(&vop->reg_lock);
--      if (!state->gamma_lut)
--              return;
-+              /*
-+               * In order to write the LUT to the internal memory,
-+               * we need to first make sure the dsp_lut_en bit is cleared.
-+               */
-+              ret = readx_poll_timeout(vop_dsp_lut_is_enabled, vop,
-+                                       idle, !idle, 5, 30 * 1000);
-+              if (ret) {
-+                      DRM_DEV_ERROR(vop->dev, "display LUT RAM enable timeout!\n");
-+                      return;
-+              }
-+
-+              if (!state->gamma_lut)
-+                      return;
-+      } else {
-+              /*
-+               * On RK3399 the gamma LUT can updated without clearing dsp_lut_en,
-+               * by setting update_gamma_lut then waiting for lut_buffer_index change
-+               */
-+              old_idx = vop_lut_buffer_index(vop);
-+      }
-       spin_lock(&vop->reg_lock);
-       vop_crtc_write_gamma_lut(vop, crtc);
-       VOP_REG_SET(vop, common, dsp_lut_en, 1);
-+      VOP_REG_SET(vop, common, update_gamma_lut, 1);
-       vop_cfg_done(vop);
-       spin_unlock(&vop->reg_lock);
-+
-+      if (VOP_HAS_REG(vop, common, update_gamma_lut)) {
-+              ret = readx_poll_timeout(vop_lut_buffer_index, vop,
-+                                       lut_idx, lut_idx != old_idx, 5, 30 * 1000);
-+              if (ret) {
-+                      DRM_DEV_ERROR(vop->dev, "gamma LUT update timeout!\n");
-+                      return;
-+              }
-+
-+              /*
-+               * update_gamma_lut is auto cleared by HW, but write 0 to clear the bit
-+               * in our backup of the regs.
-+               */
-+              spin_lock(&vop->reg_lock);
-+              VOP_REG_SET(vop, common, update_gamma_lut, 0);
-+              spin_unlock(&vop->reg_lock);
-+      }
- }
- static void vop_crtc_atomic_begin(struct drm_crtc *crtc,
-@@ -1305,14 +1342,6 @@ static void vop_crtc_atomic_enable(struct drm_crtc *crtc,
-               return;
-       }
--      /*
--       * If we have a GAMMA LUT in the state, then let's make sure
--       * it's updated. We might be coming out of suspend,
--       * which means the LUT internal memory needs to be re-written.
--       */
--      if (crtc->state->gamma_lut)
--              vop_crtc_gamma_set(vop, crtc, old_state);
--
-       mutex_lock(&vop->vop_lock);
-       WARN_ON(vop->event);
-@@ -1403,6 +1432,14 @@ static void vop_crtc_atomic_enable(struct drm_crtc *crtc,
-       VOP_REG_SET(vop, common, standby, 0);
-       mutex_unlock(&vop->vop_lock);
-+
-+      /*
-+       * If we have a GAMMA LUT in the state, then let's make sure
-+       * it's updated. We might be coming out of suspend,
-+       * which means the LUT internal memory needs to be re-written.
-+       */
-+      if (crtc->state->gamma_lut)
-+              vop_crtc_gamma_set(vop, crtc, old_state);
- }
- static bool vop_fs_irq_is_pending(struct vop *vop)
-@@ -2125,8 +2162,8 @@ static int vop_bind(struct device *dev, struct device *master, void *data)
-       res = platform_get_resource(pdev, IORESOURCE_MEM, 1);
-       if (res) {
--              if (!vop_data->lut_size) {
--                      DRM_DEV_ERROR(dev, "no gamma LUT size defined\n");
-+              if (vop_data->lut_size != 1024 && vop_data->lut_size != 256) {
-+                      DRM_DEV_ERROR(dev, "unsupported gamma LUT size %d\n", vop_data->lut_size);
-                       return -EINVAL;
-               }
-               vop->lut_regs = devm_ioremap_resource(dev, res);
-
-From: Hugh Cole-Baker <sigmaris@gmail.com>
-Subject: [PATCH v2 3/3] arm64: dts: rockchip: enable gamma control on RK3399
-Date: Tue, 19 Oct 2021 22:58:43 +0100
-
-Define the memory region on RK3399 VOPs containing the gamma LUT at
-base+0x2000.
-
-Signed-off-by: Hugh Cole-Baker <sigmaris@gmail.com>
----
-
-Changes from v1: no changes in this patch
-
- arch/arm64/boot/dts/rockchip/rk3399.dtsi | 4 ++--
- 1 file changed, 2 insertions(+), 2 deletions(-)
-
-diff --git a/arch/arm64/boot/dts/rockchip/rk3399.dtsi b/arch/arm64/boot/dts/rockchip/rk3399.dtsi
-index 3871c7fd83b0..9cbf6ccdd256 100644
---- a/arch/arm64/boot/dts/rockchip/rk3399.dtsi
-+++ b/arch/arm64/boot/dts/rockchip/rk3399.dtsi
-@@ -1619,7 +1619,7 @@ i2s2: i2s@ff8a0000 {
-       vopl: vop@ff8f0000 {
-               compatible = "rockchip,rk3399-vop-lit";
--              reg = <0x0 0xff8f0000 0x0 0x3efc>;
-+              reg = <0x0 0xff8f0000 0x0 0x2000>, <0x0 0xff8f2000 0x0 0x400>;
-               interrupts = <GIC_SPI 119 IRQ_TYPE_LEVEL_HIGH 0>;
-               assigned-clocks = <&cru ACLK_VOP1>, <&cru HCLK_VOP1>;
-               assigned-clock-rates = <400000000>, <100000000>;
-@@ -1676,7 +1676,7 @@ vopl_mmu: iommu@ff8f3f00 {
-       vopb: vop@ff900000 {
-               compatible = "rockchip,rk3399-vop-big";
--              reg = <0x0 0xff900000 0x0 0x3efc>;
-+              reg = <0x0 0xff900000 0x0 0x2000>, <0x0 0xff902000 0x0 0x1000>;
-               interrupts = <GIC_SPI 118 IRQ_TYPE_LEVEL_HIGH 0>;
-               assigned-clocks = <&cru ACLK_VOP0>, <&cru HCLK_VOP0>;
-               assigned-clock-rates = <400000000>, <100000000>;
This page took 0.057458 seconds and 4 git commands to generate.