1 // SPDX-License-Identifier: GPL-2.0-only
3 * Copyright (c) 2016 MediaTek Inc.
4 * Author: Ming Hsiu Tsai <minghsiu.tsai@mediatek.com>
8 #include <linux/device.h>
11 #include "mtk_mdp_comp.h"
14 void mtk_mdp_comp_clock_on(struct device
*dev
, struct mtk_mdp_comp
*comp
)
18 for (i
= 0; i
< ARRAY_SIZE(comp
->clk
); i
++) {
19 if (IS_ERR(comp
->clk
[i
]))
21 err
= clk_prepare_enable(comp
->clk
[i
]);
24 "failed to enable clock, err %d. type:%d i:%d\n",
29 void mtk_mdp_comp_clock_off(struct device
*dev
, struct mtk_mdp_comp
*comp
)
33 for (i
= 0; i
< ARRAY_SIZE(comp
->clk
); i
++) {
34 if (IS_ERR(comp
->clk
[i
]))
36 clk_disable_unprepare(comp
->clk
[i
]);
40 int mtk_mdp_comp_init(struct device
*dev
, struct device_node
*node
,
41 struct mtk_mdp_comp
*comp
,
42 enum mtk_mdp_comp_type comp_type
)
47 comp
->dev_node
= of_node_get(node
);
48 comp
->type
= comp_type
;
50 for (i
= 0; i
< ARRAY_SIZE(comp
->clk
); i
++) {
51 comp
->clk
[i
] = of_clk_get(node
, i
);
52 if (IS_ERR(comp
->clk
[i
])) {
53 ret
= dev_err_probe(dev
, PTR_ERR(comp
->clk
[i
]),
54 "Failed to get clock\n");
58 /* Only RDMA needs two clocks */
59 if (comp
->type
!= MTK_MDP_RDMA
)
66 of_node_put(comp
->dev_node
);
71 void mtk_mdp_comp_deinit(struct device
*dev
, struct mtk_mdp_comp
*comp
)
73 of_node_put(comp
->dev_node
);