@@ -361,7 +361,9 @@ static void vc4_crtc_config_pv(struct drm_crtc *crtc, struct drm_encoder *encode
361
361
bool is_dsi1 = vc4_encoder -> type == VC4_ENCODER_TYPE_DSI1 ;
362
362
bool is_vec = vc4_encoder -> type == VC4_ENCODER_TYPE_VEC ;
363
363
u32 format = is_dsi1 ? PV_CONTROL_FORMAT_DSIV_24 : PV_CONTROL_FORMAT_24 ;
364
- u8 ppc = pv_data -> pixels_per_clock ;
364
+ u8 ppc = (mode -> flags & DRM_MODE_FLAG_INTERLACE ) ?
365
+ pv_data -> pixels_per_clock_int :
366
+ pv_data -> pixels_per_clock ;
365
367
366
368
u16 vert_bp = mode -> crtc_vtotal - mode -> crtc_vsync_end ;
367
369
u16 vert_sync = mode -> crtc_vsync_end - mode -> crtc_vsync_start ;
@@ -426,7 +428,8 @@ static void vc4_crtc_config_pv(struct drm_crtc *crtc, struct drm_encoder *encode
426
428
*/
427
429
CRTC_WRITE (PV_V_CONTROL ,
428
430
PV_VCONTROL_CONTINUOUS |
429
- (vc4 -> gen >= VC4_GEN_6_C ? PV_VCONTROL_ODD_TIMING : 0 ) |
431
+ (vc4 -> gen >= VC4_GEN_6_C && ppc == 1 ?
432
+ PV_VCONTROL_ODD_TIMING : 0 ) |
430
433
(is_dsi ? PV_VCONTROL_DSI : 0 ) |
431
434
PV_VCONTROL_INTERLACE |
432
435
(odd_field_first
@@ -438,7 +441,8 @@ static void vc4_crtc_config_pv(struct drm_crtc *crtc, struct drm_encoder *encode
438
441
} else {
439
442
CRTC_WRITE (PV_V_CONTROL ,
440
443
PV_VCONTROL_CONTINUOUS |
441
- (vc4 -> gen >= VC4_GEN_6_C ? PV_VCONTROL_ODD_TIMING : 0 ) |
444
+ (vc4 -> gen >= VC4_GEN_6_C && ppc == 1 ?
445
+ PV_VCONTROL_ODD_TIMING : 0 ) |
442
446
(is_dsi ? PV_VCONTROL_DSI : 0 ));
443
447
CRTC_WRITE (PV_VSYNCD_EVEN , 0 );
444
448
}
@@ -1208,6 +1212,7 @@ const struct vc4_pv_data bcm2835_pv0_data = {
1208
1212
},
1209
1213
.fifo_depth = 64 ,
1210
1214
.pixels_per_clock = 1 ,
1215
+ .pixels_per_clock_int = 1 ,
1211
1216
.encoder_types = {
1212
1217
[PV_CONTROL_CLK_SELECT_DSI ] = VC4_ENCODER_TYPE_DSI0 ,
1213
1218
[PV_CONTROL_CLK_SELECT_DPI_SMI_HDMI ] = VC4_ENCODER_TYPE_DPI ,
@@ -1223,6 +1228,7 @@ const struct vc4_pv_data bcm2835_pv1_data = {
1223
1228
},
1224
1229
.fifo_depth = 64 ,
1225
1230
.pixels_per_clock = 1 ,
1231
+ .pixels_per_clock_int = 1 ,
1226
1232
.encoder_types = {
1227
1233
[PV_CONTROL_CLK_SELECT_DSI ] = VC4_ENCODER_TYPE_DSI1 ,
1228
1234
[PV_CONTROL_CLK_SELECT_DPI_SMI_HDMI ] = VC4_ENCODER_TYPE_SMI ,
@@ -1238,6 +1244,7 @@ const struct vc4_pv_data bcm2835_pv2_data = {
1238
1244
},
1239
1245
.fifo_depth = 64 ,
1240
1246
.pixels_per_clock = 1 ,
1247
+ .pixels_per_clock_int = 1 ,
1241
1248
.encoder_types = {
1242
1249
[PV_CONTROL_CLK_SELECT_DPI_SMI_HDMI ] = VC4_ENCODER_TYPE_HDMI0 ,
1243
1250
[PV_CONTROL_CLK_SELECT_VEC ] = VC4_ENCODER_TYPE_VEC ,
@@ -1253,6 +1260,7 @@ const struct vc4_pv_data bcm2711_pv0_data = {
1253
1260
},
1254
1261
.fifo_depth = 64 ,
1255
1262
.pixels_per_clock = 1 ,
1263
+ .pixels_per_clock_int = 1 ,
1256
1264
.encoder_types = {
1257
1265
[0 ] = VC4_ENCODER_TYPE_DSI0 ,
1258
1266
[1 ] = VC4_ENCODER_TYPE_DPI ,
@@ -1268,6 +1276,7 @@ const struct vc4_pv_data bcm2711_pv1_data = {
1268
1276
},
1269
1277
.fifo_depth = 64 ,
1270
1278
.pixels_per_clock = 1 ,
1279
+ .pixels_per_clock_int = 1 ,
1271
1280
.encoder_types = {
1272
1281
[0 ] = VC4_ENCODER_TYPE_DSI1 ,
1273
1282
[1 ] = VC4_ENCODER_TYPE_SMI ,
@@ -1283,6 +1292,7 @@ const struct vc4_pv_data bcm2711_pv2_data = {
1283
1292
},
1284
1293
.fifo_depth = 256 ,
1285
1294
.pixels_per_clock = 2 ,
1295
+ .pixels_per_clock_int = 2 ,
1286
1296
.encoder_types = {
1287
1297
[0 ] = VC4_ENCODER_TYPE_HDMI0 ,
1288
1298
},
@@ -1297,6 +1307,7 @@ const struct vc4_pv_data bcm2711_pv3_data = {
1297
1307
},
1298
1308
.fifo_depth = 64 ,
1299
1309
.pixels_per_clock = 1 ,
1310
+ .pixels_per_clock_int = 1 ,
1300
1311
.encoder_types = {
1301
1312
[PV_CONTROL_CLK_SELECT_VEC ] = VC4_ENCODER_TYPE_VEC ,
1302
1313
},
@@ -1311,6 +1322,7 @@ const struct vc4_pv_data bcm2711_pv4_data = {
1311
1322
},
1312
1323
.fifo_depth = 64 ,
1313
1324
.pixels_per_clock = 2 ,
1325
+ .pixels_per_clock_int = 2 ,
1314
1326
.encoder_types = {
1315
1327
[0 ] = VC4_ENCODER_TYPE_HDMI1 ,
1316
1328
},
@@ -1324,6 +1336,7 @@ const struct vc4_pv_data bcm2712_pv0_data = {
1324
1336
},
1325
1337
.fifo_depth = 64 ,
1326
1338
.pixels_per_clock = 1 ,
1339
+ .pixels_per_clock_int = 2 ,
1327
1340
.encoder_types = {
1328
1341
[0 ] = VC4_ENCODER_TYPE_HDMI0 ,
1329
1342
},
@@ -1337,6 +1350,7 @@ const struct vc4_pv_data bcm2712_pv1_data = {
1337
1350
},
1338
1351
.fifo_depth = 64 ,
1339
1352
.pixels_per_clock = 1 ,
1353
+ .pixels_per_clock_int = 2 ,
1340
1354
.encoder_types = {
1341
1355
[0 ] = VC4_ENCODER_TYPE_HDMI1 ,
1342
1356
},
0 commit comments