@@ -187,6 +187,8 @@ struct rk_udphy {
187
187
u32 dp_aux_din_sel ;
188
188
bool dp_sink_hpd_sel ;
189
189
bool dp_sink_hpd_cfg ;
190
+ unsigned int link_rate ;
191
+ unsigned int lanes ;
190
192
u8 bw ;
191
193
int id ;
192
194
@@ -1103,61 +1105,64 @@ static int rk_udphy_dp_phy_power_off(struct phy *phy)
1103
1105
return 0 ;
1104
1106
}
1105
1107
1106
- static int rk_udphy_dp_phy_verify_link_rate (unsigned int link_rate )
1108
+ /*
1109
+ * Verify link rate
1110
+ */
1111
+ static int rk_udphy_dp_phy_verify_link_rate (struct rk_udphy * udphy ,
1112
+ struct phy_configure_opts_dp * dp )
1107
1113
{
1108
- switch (link_rate ) {
1114
+ switch (dp -> link_rate ) {
1109
1115
case 1620 :
1110
1116
case 2700 :
1111
1117
case 5400 :
1112
1118
case 8100 :
1119
+ udphy -> link_rate = dp -> link_rate ;
1113
1120
break ;
1114
-
1115
1121
default :
1116
1122
return - EINVAL ;
1117
1123
}
1118
1124
1119
1125
return 0 ;
1120
1126
}
1121
1127
1122
- static int rk_udphy_dp_phy_verify_config (struct rk_udphy * udphy ,
1123
- struct phy_configure_opts_dp * dp )
1128
+ static int rk_udphy_dp_phy_verify_lanes (struct rk_udphy * udphy ,
1129
+ struct phy_configure_opts_dp * dp )
1124
1130
{
1125
- int i , ret ;
1126
-
1127
- /* If changing link rate was required, verify it's supported. */
1128
- ret = rk_udphy_dp_phy_verify_link_rate (dp -> link_rate );
1129
- if (ret )
1130
- return ret ;
1131
-
1132
- /* Verify lane count. */
1133
1131
switch (dp -> lanes ) {
1134
1132
case 1 :
1135
1133
case 2 :
1136
1134
case 4 :
1137
1135
/* valid lane count. */
1136
+ udphy -> lanes = dp -> lanes ;
1138
1137
break ;
1139
1138
1140
1139
default :
1141
1140
return - EINVAL ;
1142
1141
}
1143
1142
1144
- /*
1145
- * If changing voltages is required, check swing and pre-emphasis
1146
- * levels, per-lane.
1147
- */
1148
- if (dp -> set_voltages ) {
1149
- /* Lane count verified previously. */
1150
- for (i = 0 ; i < dp -> lanes ; i ++ ) {
1151
- if (dp -> voltage [i ] > 3 || dp -> pre [i ] > 3 )
1152
- return - EINVAL ;
1143
+ return 0 ;
1144
+ }
1153
1145
1154
- /*
1155
- * Sum of voltage swing and pre-emphasis levels cannot
1156
- * exceed 3.
1157
- */
1158
- if (dp -> voltage [i ] + dp -> pre [i ] > 3 )
1159
- return - EINVAL ;
1160
- }
1146
+ /*
1147
+ * If changing voltages is required, check swing and pre-emphasis
1148
+ * levels, per-lane.
1149
+ */
1150
+ static int rk_udphy_dp_phy_verify_voltages (struct rk_udphy * udphy ,
1151
+ struct phy_configure_opts_dp * dp )
1152
+ {
1153
+ int i ;
1154
+
1155
+ /* Lane count verified previously. */
1156
+ for (i = 0 ; i < udphy -> lanes ; i ++ ) {
1157
+ if (dp -> voltage [i ] > 3 || dp -> pre [i ] > 3 )
1158
+ return - EINVAL ;
1159
+
1160
+ /*
1161
+ * Sum of voltage swing and pre-emphasis levels cannot
1162
+ * exceed 3.
1163
+ */
1164
+ if (dp -> voltage [i ] + dp -> pre [i ] > 3 )
1165
+ return - EINVAL ;
1161
1166
}
1162
1167
1163
1168
return 0 ;
@@ -1197,9 +1202,23 @@ static int rk_udphy_dp_phy_configure(struct phy *phy,
1197
1202
u32 i , val , lane ;
1198
1203
int ret ;
1199
1204
1200
- ret = rk_udphy_dp_phy_verify_config (udphy , dp );
1201
- if (ret )
1202
- return ret ;
1205
+ if (dp -> set_rate ) {
1206
+ ret = rk_udphy_dp_phy_verify_link_rate (udphy , dp );
1207
+ if (ret )
1208
+ return ret ;
1209
+ }
1210
+
1211
+ if (dp -> set_lanes ) {
1212
+ ret = rk_udphy_dp_phy_verify_lanes (udphy , dp );
1213
+ if (ret )
1214
+ return ret ;
1215
+ }
1216
+
1217
+ if (dp -> set_voltages ) {
1218
+ ret = rk_udphy_dp_phy_verify_voltages (udphy , dp );
1219
+ if (ret )
1220
+ return ret ;
1221
+ }
1203
1222
1204
1223
if (dp -> set_rate ) {
1205
1224
regmap_update_bits (udphy -> pma_regmap , CMN_DP_RSTN_OFFSET ,
@@ -1244,9 +1263,9 @@ static int rk_udphy_dp_phy_configure(struct phy *phy,
1244
1263
}
1245
1264
1246
1265
if (dp -> set_voltages ) {
1247
- for (i = 0 ; i < dp -> lanes ; i ++ ) {
1266
+ for (i = 0 ; i < udphy -> lanes ; i ++ ) {
1248
1267
lane = udphy -> dp_lane_sel [i ];
1249
- switch (dp -> link_rate ) {
1268
+ switch (udphy -> link_rate ) {
1250
1269
case 1620 :
1251
1270
case 2700 :
1252
1271
regmap_update_bits (udphy -> pma_regmap ,
0 commit comments