#include "dsc.h"
 #include "link_hwss.h"
 #include "dc/dc_dmub_srv.h"
+#include "link/protocols/link_dp_capability.h"
 
 #ifdef CONFIG_DRM_AMD_SECURE_DISPLAY
 #include "amdgpu_dm_psr.h"
        return result;
 }
 
-static int dp_lttpr_status_show(struct seq_file *m, void *d)
+static int dp_lttpr_status_show(struct seq_file *m, void *unused)
 {
-       char *data;
-       struct amdgpu_dm_connector *connector = file_inode(m->file)->i_private;
-       struct dc_link *link = connector->dc_link;
-       uint32_t read_size = 1;
-       uint8_t repeater_count = 0;
+       struct drm_connector *connector = m->private;
+       struct amdgpu_dm_connector *aconnector =
+               to_amdgpu_dm_connector(connector);
+       struct dc_lttpr_caps caps = aconnector->dc_link->dpcd_caps.lttpr_caps;
 
-       data = kzalloc(read_size, GFP_KERNEL);
-       if (!data)
-               return 0;
+       if (connector->status != connector_status_connected)
+               return -ENODEV;
 
-       dm_helpers_dp_read_dpcd(link->ctx, link, 0xF0002, data, read_size);
+       seq_printf(m, "phy repeater count: %u (raw: 0x%x)\n",
+                  dp_parse_lttpr_repeater_count(caps.phy_repeater_cnt),
+                  caps.phy_repeater_cnt);
 
-       switch ((uint8_t)*data) {
-       case 0x80:
-               repeater_count = 1;
-               break;
-       case 0x40:
-               repeater_count = 2;
-               break;
-       case 0x20:
-               repeater_count = 3;
-               break;
-       case 0x10:
-               repeater_count = 4;
-               break;
-       case 0x8:
-               repeater_count = 5;
-               break;
-       case 0x4:
-               repeater_count = 6;
-               break;
-       case 0x2:
-               repeater_count = 7;
+       seq_puts(m, "phy repeater mode: ");
+
+       switch (caps.mode) {
+       case DP_PHY_REPEATER_MODE_TRANSPARENT:
+               seq_puts(m, "transparent");
                break;
-       case 0x1:
-               repeater_count = 8;
+       case DP_PHY_REPEATER_MODE_NON_TRANSPARENT:
+               seq_puts(m, "non-transparent");
                break;
-       case 0x0:
-               repeater_count = 0;
+       case 0x00:
+               seq_puts(m, "non lttpr");
                break;
        default:
-               repeater_count = (uint8_t)*data;
+               seq_printf(m, "read error (raw: 0x%x)", caps.mode);
                break;
        }
 
-       seq_printf(m, "phy repeater count: %d\n", repeater_count);
-
-       dm_helpers_dp_read_dpcd(link->ctx, link, 0xF0003, data, read_size);
-
-       if ((uint8_t)*data == 0x55)
-               seq_printf(m, "phy repeater mode: transparent\n");
-       else if ((uint8_t)*data == 0xAA)
-               seq_printf(m, "phy repeater mode: non-transparent\n");
-       else if ((uint8_t)*data == 0x00)
-               seq_printf(m, "phy repeater mode: non lttpr\n");
-       else
-               seq_printf(m, "phy repeater mode: read error\n");
-
-       kfree(data);
+       seq_puts(m, "\n");
        return 0;
 }