@@ -393,6 +393,25 @@ static const struct mtk_ddp_comp_funcs ddp_ufoe = {
393
393
.start = mtk_ufoe_start ,
394
394
};
395
395
396
+ static const struct mtk_ddp_comp_funcs ddp_ovl_adaptor = {
397
+ .clk_enable = mtk_ovl_adaptor_clk_enable ,
398
+ .clk_disable = mtk_ovl_adaptor_clk_disable ,
399
+ .config = mtk_ovl_adaptor_config ,
400
+ .start = mtk_ovl_adaptor_start ,
401
+ .stop = mtk_ovl_adaptor_stop ,
402
+ .layer_nr = mtk_ovl_adaptor_layer_nr ,
403
+ .layer_config = mtk_ovl_adaptor_layer_config ,
404
+ .register_vblank_cb = mtk_ovl_adaptor_register_vblank_cb ,
405
+ .unregister_vblank_cb = mtk_ovl_adaptor_unregister_vblank_cb ,
406
+ .enable_vblank = mtk_ovl_adaptor_enable_vblank ,
407
+ .disable_vblank = mtk_ovl_adaptor_disable_vblank ,
408
+ .dma_dev_get = mtk_ovl_adaptor_dma_dev_get ,
409
+ .connect = mtk_ovl_adaptor_connect ,
410
+ .disconnect = mtk_ovl_adaptor_disconnect ,
411
+ .add = mtk_ovl_adaptor_add_comp ,
412
+ .remove = mtk_ovl_adaptor_remove_comp ,
413
+ };
414
+
396
415
static const char * const mtk_ddp_comp_stem [MTK_DDP_COMP_TYPE_MAX ] = {
397
416
[MTK_DISP_AAL ] = "aal" ,
398
417
[MTK_DISP_BLS ] = "bls" ,
@@ -406,6 +425,7 @@ static const char * const mtk_ddp_comp_stem[MTK_DDP_COMP_TYPE_MAX] = {
406
425
[MTK_DISP_OD ] = "od" ,
407
426
[MTK_DISP_OVL ] = "ovl" ,
408
427
[MTK_DISP_OVL_2L ] = "ovl-2l" ,
428
+ [MTK_DISP_OVL_ADAPTOR ] = "ovl_adaptor" ,
409
429
[MTK_DISP_POSTMASK ] = "postmask" ,
410
430
[MTK_DISP_PWM ] = "pwm" ,
411
431
[MTK_DISP_RDMA ] = "rdma" ,
@@ -422,53 +442,54 @@ struct mtk_ddp_comp_match {
422
442
const struct mtk_ddp_comp_funcs * funcs ;
423
443
};
424
444
425
- static const struct mtk_ddp_comp_match mtk_ddp_matches [DDP_COMPONENT_ID_MAX ] = {
426
- [DDP_COMPONENT_AAL0 ] = { MTK_DISP_AAL , 0 , & ddp_aal },
427
- [DDP_COMPONENT_AAL1 ] = { MTK_DISP_AAL , 1 , & ddp_aal },
428
- [DDP_COMPONENT_BLS ] = { MTK_DISP_BLS , 0 , NULL },
429
- [DDP_COMPONENT_CCORR ] = { MTK_DISP_CCORR , 0 , & ddp_ccorr },
430
- [DDP_COMPONENT_COLOR0 ] = { MTK_DISP_COLOR , 0 , & ddp_color },
431
- [DDP_COMPONENT_COLOR1 ] = { MTK_DISP_COLOR , 1 , & ddp_color },
432
- [DDP_COMPONENT_DITHER0 ] = { MTK_DISP_DITHER , 0 , & ddp_dither },
433
- [DDP_COMPONENT_DP_INTF0 ] = { MTK_DP_INTF , 0 , & ddp_dpi },
434
- [DDP_COMPONENT_DP_INTF1 ] = { MTK_DP_INTF , 1 , & ddp_dpi },
435
- [DDP_COMPONENT_DPI0 ] = { MTK_DPI , 0 , & ddp_dpi },
436
- [DDP_COMPONENT_DPI1 ] = { MTK_DPI , 1 , & ddp_dpi },
437
- [DDP_COMPONENT_DSC0 ] = { MTK_DISP_DSC , 0 , & ddp_dsc },
438
- [DDP_COMPONENT_DSC1 ] = { MTK_DISP_DSC , 1 , & ddp_dsc },
439
- [DDP_COMPONENT_DSI0 ] = { MTK_DSI , 0 , & ddp_dsi },
440
- [DDP_COMPONENT_DSI1 ] = { MTK_DSI , 1 , & ddp_dsi },
441
- [DDP_COMPONENT_DSI2 ] = { MTK_DSI , 2 , & ddp_dsi },
442
- [DDP_COMPONENT_DSI3 ] = { MTK_DSI , 3 , & ddp_dsi },
443
- [DDP_COMPONENT_GAMMA ] = { MTK_DISP_GAMMA , 0 , & ddp_gamma },
444
- [DDP_COMPONENT_MERGE0 ] = { MTK_DISP_MERGE , 0 , & ddp_merge },
445
- [DDP_COMPONENT_MERGE1 ] = { MTK_DISP_MERGE , 1 , & ddp_merge },
446
- [DDP_COMPONENT_MERGE2 ] = { MTK_DISP_MERGE , 2 , & ddp_merge },
447
- [DDP_COMPONENT_MERGE3 ] = { MTK_DISP_MERGE , 3 , & ddp_merge },
448
- [DDP_COMPONENT_MERGE4 ] = { MTK_DISP_MERGE , 4 , & ddp_merge },
449
- [DDP_COMPONENT_MERGE5 ] = { MTK_DISP_MERGE , 5 , & ddp_merge },
450
- [DDP_COMPONENT_OD0 ] = { MTK_DISP_OD , 0 , & ddp_od },
451
- [DDP_COMPONENT_OD1 ] = { MTK_DISP_OD , 1 , & ddp_od },
452
- [DDP_COMPONENT_OVL0 ] = { MTK_DISP_OVL , 0 , & ddp_ovl },
453
- [DDP_COMPONENT_OVL1 ] = { MTK_DISP_OVL , 1 , & ddp_ovl },
454
- [DDP_COMPONENT_OVL_2L0 ] = { MTK_DISP_OVL_2L , 0 , & ddp_ovl },
455
- [DDP_COMPONENT_OVL_2L1 ] = { MTK_DISP_OVL_2L , 1 , & ddp_ovl },
456
- [DDP_COMPONENT_OVL_2L2 ] = { MTK_DISP_OVL_2L , 2 , & ddp_ovl },
457
- [DDP_COMPONENT_POSTMASK0 ] = { MTK_DISP_POSTMASK , 0 , & ddp_postmask },
458
- [DDP_COMPONENT_PWM0 ] = { MTK_DISP_PWM , 0 , NULL },
459
- [DDP_COMPONENT_PWM1 ] = { MTK_DISP_PWM , 1 , NULL },
460
- [DDP_COMPONENT_PWM2 ] = { MTK_DISP_PWM , 2 , NULL },
461
- [DDP_COMPONENT_RDMA0 ] = { MTK_DISP_RDMA , 0 , & ddp_rdma },
462
- [DDP_COMPONENT_RDMA1 ] = { MTK_DISP_RDMA , 1 , & ddp_rdma },
463
- [DDP_COMPONENT_RDMA2 ] = { MTK_DISP_RDMA , 2 , & ddp_rdma },
464
- [DDP_COMPONENT_RDMA4 ] = { MTK_DISP_RDMA , 4 , & ddp_rdma },
465
- [DDP_COMPONENT_UFOE ] = { MTK_DISP_UFOE , 0 , & ddp_ufoe },
466
- [DDP_COMPONENT_WDMA0 ] = { MTK_DISP_WDMA , 0 , NULL },
467
- [DDP_COMPONENT_WDMA1 ] = { MTK_DISP_WDMA , 1 , NULL },
445
+ static const struct mtk_ddp_comp_match mtk_ddp_matches [DDP_COMPONENT_DRM_ID_MAX ] = {
446
+ [DDP_COMPONENT_AAL0 ] = { MTK_DISP_AAL , 0 , & ddp_aal },
447
+ [DDP_COMPONENT_AAL1 ] = { MTK_DISP_AAL , 1 , & ddp_aal },
448
+ [DDP_COMPONENT_BLS ] = { MTK_DISP_BLS , 0 , NULL },
449
+ [DDP_COMPONENT_CCORR ] = { MTK_DISP_CCORR , 0 , & ddp_ccorr },
450
+ [DDP_COMPONENT_COLOR0 ] = { MTK_DISP_COLOR , 0 , & ddp_color },
451
+ [DDP_COMPONENT_COLOR1 ] = { MTK_DISP_COLOR , 1 , & ddp_color },
452
+ [DDP_COMPONENT_DITHER0 ] = { MTK_DISP_DITHER , 0 , & ddp_dither },
453
+ [DDP_COMPONENT_DP_INTF0 ] = { MTK_DP_INTF , 0 , & ddp_dpi },
454
+ [DDP_COMPONENT_DP_INTF1 ] = { MTK_DP_INTF , 1 , & ddp_dpi },
455
+ [DDP_COMPONENT_DPI0 ] = { MTK_DPI , 0 , & ddp_dpi },
456
+ [DDP_COMPONENT_DPI1 ] = { MTK_DPI , 1 , & ddp_dpi },
457
+ [DDP_COMPONENT_DRM_OVL_ADAPTOR ] = { MTK_DISP_OVL_ADAPTOR , 0 , & ddp_ovl_adaptor },
458
+ [DDP_COMPONENT_DSC0 ] = { MTK_DISP_DSC , 0 , & ddp_dsc },
459
+ [DDP_COMPONENT_DSC1 ] = { MTK_DISP_DSC , 1 , & ddp_dsc },
460
+ [DDP_COMPONENT_DSI0 ] = { MTK_DSI , 0 , & ddp_dsi },
461
+ [DDP_COMPONENT_DSI1 ] = { MTK_DSI , 1 , & ddp_dsi },
462
+ [DDP_COMPONENT_DSI2 ] = { MTK_DSI , 2 , & ddp_dsi },
463
+ [DDP_COMPONENT_DSI3 ] = { MTK_DSI , 3 , & ddp_dsi },
464
+ [DDP_COMPONENT_GAMMA ] = { MTK_DISP_GAMMA , 0 , & ddp_gamma },
465
+ [DDP_COMPONENT_MERGE0 ] = { MTK_DISP_MERGE , 0 , & ddp_merge },
466
+ [DDP_COMPONENT_MERGE1 ] = { MTK_DISP_MERGE , 1 , & ddp_merge },
467
+ [DDP_COMPONENT_MERGE2 ] = { MTK_DISP_MERGE , 2 , & ddp_merge },
468
+ [DDP_COMPONENT_MERGE3 ] = { MTK_DISP_MERGE , 3 , & ddp_merge },
469
+ [DDP_COMPONENT_MERGE4 ] = { MTK_DISP_MERGE , 4 , & ddp_merge },
470
+ [DDP_COMPONENT_MERGE5 ] = { MTK_DISP_MERGE , 5 , & ddp_merge },
471
+ [DDP_COMPONENT_OD0 ] = { MTK_DISP_OD , 0 , & ddp_od },
472
+ [DDP_COMPONENT_OD1 ] = { MTK_DISP_OD , 1 , & ddp_od },
473
+ [DDP_COMPONENT_OVL0 ] = { MTK_DISP_OVL , 0 , & ddp_ovl },
474
+ [DDP_COMPONENT_OVL1 ] = { MTK_DISP_OVL , 1 , & ddp_ovl },
475
+ [DDP_COMPONENT_OVL_2L0 ] = { MTK_DISP_OVL_2L , 0 , & ddp_ovl },
476
+ [DDP_COMPONENT_OVL_2L1 ] = { MTK_DISP_OVL_2L , 1 , & ddp_ovl },
477
+ [DDP_COMPONENT_OVL_2L2 ] = { MTK_DISP_OVL_2L , 2 , & ddp_ovl },
478
+ [DDP_COMPONENT_POSTMASK0 ] = { MTK_DISP_POSTMASK , 0 , & ddp_postmask },
479
+ [DDP_COMPONENT_PWM0 ] = { MTK_DISP_PWM , 0 , NULL },
480
+ [DDP_COMPONENT_PWM1 ] = { MTK_DISP_PWM , 1 , NULL },
481
+ [DDP_COMPONENT_PWM2 ] = { MTK_DISP_PWM , 2 , NULL },
482
+ [DDP_COMPONENT_RDMA0 ] = { MTK_DISP_RDMA , 0 , & ddp_rdma },
483
+ [DDP_COMPONENT_RDMA1 ] = { MTK_DISP_RDMA , 1 , & ddp_rdma },
484
+ [DDP_COMPONENT_RDMA2 ] = { MTK_DISP_RDMA , 2 , & ddp_rdma },
485
+ [DDP_COMPONENT_RDMA4 ] = { MTK_DISP_RDMA , 4 , & ddp_rdma },
486
+ [DDP_COMPONENT_UFOE ] = { MTK_DISP_UFOE , 0 , & ddp_ufoe },
487
+ [DDP_COMPONENT_WDMA0 ] = { MTK_DISP_WDMA , 0 , NULL },
488
+ [DDP_COMPONENT_WDMA1 ] = { MTK_DISP_WDMA , 1 , NULL },
468
489
};
469
490
470
491
static bool mtk_drm_find_comp_in_ddp (struct device * dev ,
471
- const enum mtk_ddp_comp_id * path ,
492
+ const unsigned int * path ,
472
493
unsigned int path_len ,
473
494
struct mtk_ddp_comp * ddp_comp )
474
495
{
@@ -521,7 +542,7 @@ unsigned int mtk_drm_find_possible_crtc_by_comp(struct drm_device *drm,
521
542
}
522
543
523
544
int mtk_ddp_comp_init (struct device_node * node , struct mtk_ddp_comp * comp ,
524
- enum mtk_ddp_comp_id comp_id )
545
+ unsigned int comp_id )
525
546
{
526
547
struct platform_device * comp_pdev ;
527
548
enum mtk_ddp_comp_type type ;
@@ -530,19 +551,24 @@ int mtk_ddp_comp_init(struct device_node *node, struct mtk_ddp_comp *comp,
530
551
int ret ;
531
552
#endif
532
553
533
- if (comp_id < 0 || comp_id >= DDP_COMPONENT_ID_MAX )
554
+ if (comp_id < 0 || comp_id >= DDP_COMPONENT_DRM_ID_MAX )
534
555
return - EINVAL ;
535
556
536
557
type = mtk_ddp_matches [comp_id ].type ;
537
558
538
559
comp -> id = comp_id ;
539
560
comp -> funcs = mtk_ddp_matches [comp_id ].funcs ;
540
- comp_pdev = of_find_device_by_node (node );
541
- if (!comp_pdev ) {
542
- DRM_INFO ("Waiting for device %s\n" , node -> full_name );
543
- return - EPROBE_DEFER ;
561
+ /* Not all drm components have a DTS device node, such as ovl_adaptor,
562
+ * which is the drm bring up sub driver
563
+ */
564
+ if (node ) {
565
+ comp_pdev = of_find_device_by_node (node );
566
+ if (!comp_pdev ) {
567
+ DRM_INFO ("Waiting for device %s\n" , node -> full_name );
568
+ return - EPROBE_DEFER ;
569
+ }
570
+ comp -> dev = & comp_pdev -> dev ;
544
571
}
545
- comp -> dev = & comp_pdev -> dev ;
546
572
547
573
if (type == MTK_DISP_AAL ||
548
574
type == MTK_DISP_BLS ||
@@ -552,6 +578,7 @@ int mtk_ddp_comp_init(struct device_node *node, struct mtk_ddp_comp *comp,
552
578
type == MTK_DISP_MERGE ||
553
579
type == MTK_DISP_OVL ||
554
580
type == MTK_DISP_OVL_2L ||
581
+ type == MTK_DISP_OVL_ADAPTOR ||
555
582
type == MTK_DISP_PWM ||
556
583
type == MTK_DISP_RDMA ||
557
584
type == MTK_DPI ||
0 commit comments