@@ -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
}
@@ -1205,6 +1209,7 @@ const struct vc4_pv_data bcm2835_pv0_data = {
1205
1209
},
1206
1210
.fifo_depth = 64 ,
1207
1211
.pixels_per_clock = 1 ,
1212
+ .pixels_per_clock_int = 1 ,
1208
1213
.encoder_types = {
1209
1214
[PV_CONTROL_CLK_SELECT_DSI ] = VC4_ENCODER_TYPE_DSI0 ,
1210
1215
[PV_CONTROL_CLK_SELECT_DPI_SMI_HDMI ] = VC4_ENCODER_TYPE_DPI ,
@@ -1220,6 +1225,7 @@ const struct vc4_pv_data bcm2835_pv1_data = {
1220
1225
},
1221
1226
.fifo_depth = 64 ,
1222
1227
.pixels_per_clock = 1 ,
1228
+ .pixels_per_clock_int = 1 ,
1223
1229
.encoder_types = {
1224
1230
[PV_CONTROL_CLK_SELECT_DSI ] = VC4_ENCODER_TYPE_DSI1 ,
1225
1231
[PV_CONTROL_CLK_SELECT_DPI_SMI_HDMI ] = VC4_ENCODER_TYPE_SMI ,
@@ -1235,6 +1241,7 @@ const struct vc4_pv_data bcm2835_pv2_data = {
1235
1241
},
1236
1242
.fifo_depth = 64 ,
1237
1243
.pixels_per_clock = 1 ,
1244
+ .pixels_per_clock_int = 1 ,
1238
1245
.encoder_types = {
1239
1246
[PV_CONTROL_CLK_SELECT_DPI_SMI_HDMI ] = VC4_ENCODER_TYPE_HDMI0 ,
1240
1247
[PV_CONTROL_CLK_SELECT_VEC ] = VC4_ENCODER_TYPE_VEC ,
@@ -1250,6 +1257,7 @@ const struct vc4_pv_data bcm2711_pv0_data = {
1250
1257
},
1251
1258
.fifo_depth = 64 ,
1252
1259
.pixels_per_clock = 1 ,
1260
+ .pixels_per_clock_int = 1 ,
1253
1261
.encoder_types = {
1254
1262
[0 ] = VC4_ENCODER_TYPE_DSI0 ,
1255
1263
[1 ] = VC4_ENCODER_TYPE_DPI ,
@@ -1265,6 +1273,7 @@ const struct vc4_pv_data bcm2711_pv1_data = {
1265
1273
},
1266
1274
.fifo_depth = 64 ,
1267
1275
.pixels_per_clock = 1 ,
1276
+ .pixels_per_clock_int = 1 ,
1268
1277
.encoder_types = {
1269
1278
[0 ] = VC4_ENCODER_TYPE_DSI1 ,
1270
1279
[1 ] = VC4_ENCODER_TYPE_SMI ,
@@ -1280,6 +1289,7 @@ const struct vc4_pv_data bcm2711_pv2_data = {
1280
1289
},
1281
1290
.fifo_depth = 256 ,
1282
1291
.pixels_per_clock = 2 ,
1292
+ .pixels_per_clock_int = 2 ,
1283
1293
.encoder_types = {
1284
1294
[0 ] = VC4_ENCODER_TYPE_HDMI0 ,
1285
1295
},
@@ -1294,6 +1304,7 @@ const struct vc4_pv_data bcm2711_pv3_data = {
1294
1304
},
1295
1305
.fifo_depth = 64 ,
1296
1306
.pixels_per_clock = 1 ,
1307
+ .pixels_per_clock_int = 1 ,
1297
1308
.encoder_types = {
1298
1309
[PV_CONTROL_CLK_SELECT_VEC ] = VC4_ENCODER_TYPE_VEC ,
1299
1310
},
@@ -1308,6 +1319,7 @@ const struct vc4_pv_data bcm2711_pv4_data = {
1308
1319
},
1309
1320
.fifo_depth = 64 ,
1310
1321
.pixels_per_clock = 2 ,
1322
+ .pixels_per_clock_int = 2 ,
1311
1323
.encoder_types = {
1312
1324
[0 ] = VC4_ENCODER_TYPE_HDMI1 ,
1313
1325
},
@@ -1321,6 +1333,7 @@ const struct vc4_pv_data bcm2712_pv0_data = {
1321
1333
},
1322
1334
.fifo_depth = 64 ,
1323
1335
.pixels_per_clock = 1 ,
1336
+ .pixels_per_clock_int = 2 ,
1324
1337
.encoder_types = {
1325
1338
[0 ] = VC4_ENCODER_TYPE_HDMI0 ,
1326
1339
},
@@ -1334,6 +1347,7 @@ const struct vc4_pv_data bcm2712_pv1_data = {
1334
1347
},
1335
1348
.fifo_depth = 64 ,
1336
1349
.pixels_per_clock = 1 ,
1350
+ .pixels_per_clock_int = 2 ,
1337
1351
.encoder_types = {
1338
1352
[0 ] = VC4_ENCODER_TYPE_HDMI1 ,
1339
1353
},
0 commit comments