@@ -378,7 +378,9 @@ static void vc4_crtc_config_pv(struct drm_crtc *crtc, struct drm_encoder *encode
378
378
bool is_dsi1 = vc4_encoder -> type == VC4_ENCODER_TYPE_DSI1 ;
379
379
bool is_vec = vc4_encoder -> type == VC4_ENCODER_TYPE_VEC ;
380
380
u32 format = is_dsi1 ? PV_CONTROL_FORMAT_DSIV_24 : PV_CONTROL_FORMAT_24 ;
381
- u8 ppc = pv_data -> pixels_per_clock ;
381
+ u8 ppc = (mode -> flags & DRM_MODE_FLAG_INTERLACE ) ?
382
+ pv_data -> pixels_per_clock_int :
383
+ pv_data -> pixels_per_clock ;
382
384
383
385
u16 vert_bp = mode -> crtc_vtotal - mode -> crtc_vsync_end ;
384
386
u16 vert_sync = mode -> crtc_vsync_end - mode -> crtc_vsync_start ;
@@ -443,7 +445,8 @@ static void vc4_crtc_config_pv(struct drm_crtc *crtc, struct drm_encoder *encode
443
445
*/
444
446
CRTC_WRITE (PV_V_CONTROL ,
445
447
PV_VCONTROL_CONTINUOUS |
446
- (vc4 -> gen >= VC4_GEN_6 ? PV_VCONTROL_ODD_TIMING : 0 ) |
448
+ (vc4 -> gen >= VC4_GEN_6 && ppc == 1 ?
449
+ PV_VCONTROL_ODD_TIMING : 0 ) |
447
450
(is_dsi ? PV_VCONTROL_DSI : 0 ) |
448
451
PV_VCONTROL_INTERLACE |
449
452
(odd_field_first
@@ -455,7 +458,8 @@ static void vc4_crtc_config_pv(struct drm_crtc *crtc, struct drm_encoder *encode
455
458
} else {
456
459
CRTC_WRITE (PV_V_CONTROL ,
457
460
PV_VCONTROL_CONTINUOUS |
458
- (vc4 -> gen >= VC4_GEN_6 ? PV_VCONTROL_ODD_TIMING : 0 ) |
461
+ (vc4 -> gen >= VC4_GEN_6 && ppc == 1 ?
462
+ PV_VCONTROL_ODD_TIMING : 0 ) |
459
463
(is_dsi ? PV_VCONTROL_DSI : 0 ));
460
464
CRTC_WRITE (PV_VSYNCD_EVEN , 0 );
461
465
}
@@ -1223,6 +1227,7 @@ const struct vc4_pv_data bcm2835_pv0_data = {
1223
1227
},
1224
1228
.fifo_depth = 64 ,
1225
1229
.pixels_per_clock = 1 ,
1230
+ .pixels_per_clock_int = 1 ,
1226
1231
.encoder_types = {
1227
1232
[PV_CONTROL_CLK_SELECT_DSI ] = VC4_ENCODER_TYPE_DSI0 ,
1228
1233
[PV_CONTROL_CLK_SELECT_DPI_SMI_HDMI ] = VC4_ENCODER_TYPE_DPI ,
@@ -1238,6 +1243,7 @@ const struct vc4_pv_data bcm2835_pv1_data = {
1238
1243
},
1239
1244
.fifo_depth = 64 ,
1240
1245
.pixels_per_clock = 1 ,
1246
+ .pixels_per_clock_int = 1 ,
1241
1247
.encoder_types = {
1242
1248
[PV_CONTROL_CLK_SELECT_DSI ] = VC4_ENCODER_TYPE_DSI1 ,
1243
1249
[PV_CONTROL_CLK_SELECT_DPI_SMI_HDMI ] = VC4_ENCODER_TYPE_SMI ,
@@ -1253,6 +1259,7 @@ const struct vc4_pv_data bcm2835_pv2_data = {
1253
1259
},
1254
1260
.fifo_depth = 64 ,
1255
1261
.pixels_per_clock = 1 ,
1262
+ .pixels_per_clock_int = 1 ,
1256
1263
.encoder_types = {
1257
1264
[PV_CONTROL_CLK_SELECT_DPI_SMI_HDMI ] = VC4_ENCODER_TYPE_HDMI0 ,
1258
1265
[PV_CONTROL_CLK_SELECT_VEC ] = VC4_ENCODER_TYPE_VEC ,
@@ -1268,6 +1275,7 @@ const struct vc4_pv_data bcm2711_pv0_data = {
1268
1275
},
1269
1276
.fifo_depth = 64 ,
1270
1277
.pixels_per_clock = 1 ,
1278
+ .pixels_per_clock_int = 1 ,
1271
1279
.encoder_types = {
1272
1280
[0 ] = VC4_ENCODER_TYPE_DSI0 ,
1273
1281
[1 ] = VC4_ENCODER_TYPE_DPI ,
@@ -1283,6 +1291,7 @@ const struct vc4_pv_data bcm2711_pv1_data = {
1283
1291
},
1284
1292
.fifo_depth = 64 ,
1285
1293
.pixels_per_clock = 1 ,
1294
+ .pixels_per_clock_int = 1 ,
1286
1295
.encoder_types = {
1287
1296
[0 ] = VC4_ENCODER_TYPE_DSI1 ,
1288
1297
[1 ] = VC4_ENCODER_TYPE_SMI ,
@@ -1298,6 +1307,7 @@ const struct vc4_pv_data bcm2711_pv2_data = {
1298
1307
},
1299
1308
.fifo_depth = 256 ,
1300
1309
.pixels_per_clock = 2 ,
1310
+ .pixels_per_clock_int = 2 ,
1301
1311
.encoder_types = {
1302
1312
[0 ] = VC4_ENCODER_TYPE_HDMI0 ,
1303
1313
},
@@ -1312,6 +1322,7 @@ const struct vc4_pv_data bcm2711_pv3_data = {
1312
1322
},
1313
1323
.fifo_depth = 64 ,
1314
1324
.pixels_per_clock = 1 ,
1325
+ .pixels_per_clock_int = 1 ,
1315
1326
.encoder_types = {
1316
1327
[PV_CONTROL_CLK_SELECT_VEC ] = VC4_ENCODER_TYPE_VEC ,
1317
1328
},
@@ -1326,6 +1337,7 @@ const struct vc4_pv_data bcm2711_pv4_data = {
1326
1337
},
1327
1338
.fifo_depth = 64 ,
1328
1339
.pixels_per_clock = 2 ,
1340
+ .pixels_per_clock_int = 2 ,
1329
1341
.encoder_types = {
1330
1342
[0 ] = VC4_ENCODER_TYPE_HDMI1 ,
1331
1343
},
@@ -1339,6 +1351,7 @@ const struct vc4_pv_data bcm2712_pv0_data = {
1339
1351
},
1340
1352
.fifo_depth = 64 ,
1341
1353
.pixels_per_clock = 1 ,
1354
+ .pixels_per_clock_int = 2 ,
1342
1355
.encoder_types = {
1343
1356
[0 ] = VC4_ENCODER_TYPE_HDMI0 ,
1344
1357
},
@@ -1352,6 +1365,7 @@ const struct vc4_pv_data bcm2712_pv1_data = {
1352
1365
},
1353
1366
.fifo_depth = 64 ,
1354
1367
.pixels_per_clock = 1 ,
1368
+ .pixels_per_clock_int = 2 ,
1355
1369
.encoder_types = {
1356
1370
[0 ] = VC4_ENCODER_TYPE_HDMI1 ,
1357
1371
},
0 commit comments