@@ -30,6 +30,7 @@ enum mtk_ovl_adaptor_comp_type {
3030 OVL_ADAPTOR_TYPE_ETHDR ,
3131 OVL_ADAPTOR_TYPE_MDP_RDMA ,
3232 OVL_ADAPTOR_TYPE_MERGE ,
33+ OVL_ADAPTOR_TYPE_PADDING ,
3334 OVL_ADAPTOR_TYPE_NUM ,
3435};
3536
@@ -47,6 +48,14 @@ enum mtk_ovl_adaptor_comp_id {
4748 OVL_ADAPTOR_MERGE1 ,
4849 OVL_ADAPTOR_MERGE2 ,
4950 OVL_ADAPTOR_MERGE3 ,
51+ OVL_ADAPTOR_PADDING0 ,
52+ OVL_ADAPTOR_PADDING1 ,
53+ OVL_ADAPTOR_PADDING2 ,
54+ OVL_ADAPTOR_PADDING3 ,
55+ OVL_ADAPTOR_PADDING4 ,
56+ OVL_ADAPTOR_PADDING5 ,
57+ OVL_ADAPTOR_PADDING6 ,
58+ OVL_ADAPTOR_PADDING7 ,
5059 OVL_ADAPTOR_ID_MAX
5160};
5261
@@ -67,6 +76,7 @@ static const char * const private_comp_stem[OVL_ADAPTOR_TYPE_NUM] = {
6776 [OVL_ADAPTOR_TYPE_ETHDR ] = "ethdr" ,
6877 [OVL_ADAPTOR_TYPE_MDP_RDMA ] = "vdo1-rdma" ,
6978 [OVL_ADAPTOR_TYPE_MERGE ] = "merge" ,
79+ [OVL_ADAPTOR_TYPE_PADDING ] = "padding" ,
7080};
7181
7282static const struct mtk_ddp_comp_funcs ethdr = {
@@ -79,6 +89,14 @@ static const struct mtk_ddp_comp_funcs ethdr = {
7989static const struct mtk_ddp_comp_funcs merge = {
8090 .clk_enable = mtk_merge_clk_enable ,
8191 .clk_disable = mtk_merge_clk_disable ,
92+ .mode_valid = mtk_merge_mode_valid ,
93+ };
94+
95+ static const struct mtk_ddp_comp_funcs padding = {
96+ .clk_enable = mtk_padding_clk_enable ,
97+ .clk_disable = mtk_padding_clk_disable ,
98+ .start = mtk_padding_start ,
99+ .stop = mtk_padding_stop ,
82100};
83101
84102static const struct mtk_ddp_comp_funcs rdma = {
@@ -102,6 +120,14 @@ static const struct ovl_adaptor_comp_match comp_matches[OVL_ADAPTOR_ID_MAX] = {
102120 [OVL_ADAPTOR_MERGE1 ] = { OVL_ADAPTOR_TYPE_MERGE , DDP_COMPONENT_MERGE2 , 2 , & merge },
103121 [OVL_ADAPTOR_MERGE2 ] = { OVL_ADAPTOR_TYPE_MERGE , DDP_COMPONENT_MERGE3 , 3 , & merge },
104122 [OVL_ADAPTOR_MERGE3 ] = { OVL_ADAPTOR_TYPE_MERGE , DDP_COMPONENT_MERGE4 , 4 , & merge },
123+ [OVL_ADAPTOR_PADDING0 ] = { OVL_ADAPTOR_TYPE_PADDING , DDP_COMPONENT_PADDING0 , 0 , & padding },
124+ [OVL_ADAPTOR_PADDING1 ] = { OVL_ADAPTOR_TYPE_PADDING , DDP_COMPONENT_PADDING1 , 1 , & padding },
125+ [OVL_ADAPTOR_PADDING2 ] = { OVL_ADAPTOR_TYPE_PADDING , DDP_COMPONENT_PADDING2 , 2 , & padding },
126+ [OVL_ADAPTOR_PADDING3 ] = { OVL_ADAPTOR_TYPE_PADDING , DDP_COMPONENT_PADDING3 , 3 , & padding },
127+ [OVL_ADAPTOR_PADDING4 ] = { OVL_ADAPTOR_TYPE_PADDING , DDP_COMPONENT_PADDING4 , 4 , & padding },
128+ [OVL_ADAPTOR_PADDING5 ] = { OVL_ADAPTOR_TYPE_PADDING , DDP_COMPONENT_PADDING5 , 5 , & padding },
129+ [OVL_ADAPTOR_PADDING6 ] = { OVL_ADAPTOR_TYPE_PADDING , DDP_COMPONENT_PADDING6 , 6 , & padding },
130+ [OVL_ADAPTOR_PADDING7 ] = { OVL_ADAPTOR_TYPE_PADDING , DDP_COMPONENT_PADDING7 , 7 , & padding },
105131};
106132
107133void mtk_ovl_adaptor_layer_config (struct device * dev , unsigned int idx ,
@@ -317,6 +343,22 @@ void mtk_ovl_adaptor_clk_disable(struct device *dev)
317343 }
318344}
319345
346+ enum drm_mode_status mtk_ovl_adaptor_mode_valid (struct device * dev ,
347+ const struct drm_display_mode * mode )
348+
349+ {
350+ int i ;
351+ struct mtk_disp_ovl_adaptor * ovl_adaptor = dev_get_drvdata (dev );
352+
353+ for (i = 0 ; i < OVL_ADAPTOR_ID_MAX ; i ++ ) {
354+ dev = ovl_adaptor -> ovl_adaptor_comp [i ];
355+ if (!dev || !comp_matches [i ].funcs -> mode_valid )
356+ continue ;
357+ return comp_matches [i ].funcs -> mode_valid (dev , mode );
358+ }
359+ return MODE_OK ;
360+ }
361+
320362unsigned int mtk_ovl_adaptor_layer_nr (struct device * dev )
321363{
322364 return MTK_OVL_ADAPTOR_LAYER_NUM ;
@@ -437,6 +479,7 @@ static int ovl_adaptor_comp_get_id(struct device *dev, struct device_node *node,
437479}
438480
439481static const struct of_device_id mtk_ovl_adaptor_comp_dt_ids [] = {
482+ { .compatible = "mediatek,mt8188-disp-padding" , .data = (void * )OVL_ADAPTOR_TYPE_PADDING },
440483 { .compatible = "mediatek,mt8195-disp-ethdr" , .data = (void * )OVL_ADAPTOR_TYPE_ETHDR },
441484 { .compatible = "mediatek,mt8195-disp-merge" , .data = (void * )OVL_ADAPTOR_TYPE_MERGE },
442485 { .compatible = "mediatek,mt8195-vdo1-rdma" , .data = (void * )OVL_ADAPTOR_TYPE_MDP_RDMA },
0 commit comments