.. | .. |
---|
943 | 943 | .detect = analogix_dp_connector_detect, |
---|
944 | 944 | }; |
---|
945 | 945 | |
---|
| 946 | +static u32 analogix_dp_parse_link_frequencies(struct analogix_dp_device *dp) |
---|
| 947 | +{ |
---|
| 948 | + struct udevice *dev = dp->dev; |
---|
| 949 | + const struct device_node *endpoint; |
---|
| 950 | + u64 frequency = 0; |
---|
| 951 | + |
---|
| 952 | + endpoint = rockchip_of_graph_get_endpoint_by_regs(dev->node, 1, 0); |
---|
| 953 | + if (!endpoint) |
---|
| 954 | + return 0; |
---|
| 955 | + |
---|
| 956 | + if (of_property_read_u64(endpoint, "link-frequencies", &frequency) < 0) |
---|
| 957 | + return 0; |
---|
| 958 | + |
---|
| 959 | + if (!frequency) |
---|
| 960 | + return 0; |
---|
| 961 | + |
---|
| 962 | + do_div(frequency, 10 * 1000); /* symbol rate kbytes */ |
---|
| 963 | + |
---|
| 964 | + switch (frequency) { |
---|
| 965 | + case 162000: |
---|
| 966 | + case 270000: |
---|
| 967 | + case 540000: |
---|
| 968 | + break; |
---|
| 969 | + default: |
---|
| 970 | + dev_err(dev, "invalid link frequency value: %llu\n", frequency); |
---|
| 971 | + return 0; |
---|
| 972 | + } |
---|
| 973 | + |
---|
| 974 | + return frequency; |
---|
| 975 | +} |
---|
| 976 | + |
---|
946 | 977 | static int analogix_dp_parse_dt(struct analogix_dp_device *dp) |
---|
947 | 978 | { |
---|
948 | 979 | struct udevice *dev = dp->dev; |
---|
.. | .. |
---|
956 | 987 | dp->video_info.force_stream_valid = |
---|
957 | 988 | dev_read_bool(dev, "analogix,force-stream-valid"); |
---|
958 | 989 | |
---|
959 | | - max_link_rate = dev_read_u32_default(dev, "max-link-rate", 0); |
---|
960 | | - if (max_link_rate) { |
---|
961 | | - switch (max_link_rate) { |
---|
962 | | - case 1620: |
---|
963 | | - case 2700: |
---|
964 | | - case 5400: |
---|
965 | | - dp->video_info.max_link_rate = |
---|
966 | | - min_t(u8, dp->video_info.max_link_rate, |
---|
967 | | - drm_dp_link_rate_to_bw_code(max_link_rate * 100)); |
---|
968 | | - break; |
---|
969 | | - default: |
---|
970 | | - dev_err(dev, "invalid max-link-rate %d\n", max_link_rate); |
---|
971 | | - break; |
---|
972 | | - } |
---|
973 | | - } |
---|
| 990 | + max_link_rate = analogix_dp_parse_link_frequencies(dp); |
---|
| 991 | + if (max_link_rate && max_link_rate < drm_dp_bw_code_to_link_rate(dp->video_info.max_link_rate)) |
---|
| 992 | + dp->video_info.max_link_rate = drm_dp_link_rate_to_bw_code(max_link_rate); |
---|
974 | 993 | |
---|
975 | 994 | if (dev_read_prop(dev, "data-lanes", &len)) { |
---|
976 | 995 | num_lanes = len / sizeof(u32); |
---|
.. | .. |
---|
1075 | 1094 | .lcdsel_big = 0 | BIT(21), |
---|
1076 | 1095 | .lcdsel_lit = BIT(5) | BIT(21), |
---|
1077 | 1096 | .chip_type = RK3399_EDP, |
---|
| 1097 | + .ssc = true, |
---|
1078 | 1098 | |
---|
1079 | | - .max_link_rate = DP_LINK_BW_2_7, |
---|
| 1099 | + .max_link_rate = DP_LINK_BW_5_4, |
---|
1080 | 1100 | .max_lane_count = 4, |
---|
1081 | 1101 | }; |
---|
1082 | 1102 | |
---|