drm/tests: hdmi: Fix memory leaks in drm_display_mode_from_cea_vic()
[drm/drm-misc.git] / drivers / media / platform / mediatek / mdp / mtk_mdp_comp.c
blob3501ac411242066bff2af219f4a508639be1063d
1 // SPDX-License-Identifier: GPL-2.0-only
2 /*
3 * Copyright (c) 2016 MediaTek Inc.
4 * Author: Ming Hsiu Tsai <minghsiu.tsai@mediatek.com>
5 */
7 #include <linux/clk.h>
8 #include <linux/device.h>
9 #include <linux/of.h>
11 #include "mtk_mdp_comp.h"
14 void mtk_mdp_comp_clock_on(struct device *dev, struct mtk_mdp_comp *comp)
16 int i, err;
18 for (i = 0; i < ARRAY_SIZE(comp->clk); i++) {
19 if (IS_ERR(comp->clk[i]))
20 continue;
21 err = clk_prepare_enable(comp->clk[i]);
22 if (err)
23 dev_err(dev,
24 "failed to enable clock, err %d. type:%d i:%d\n",
25 err, comp->type, i);
29 void mtk_mdp_comp_clock_off(struct device *dev, struct mtk_mdp_comp *comp)
31 int i;
33 for (i = 0; i < ARRAY_SIZE(comp->clk); i++) {
34 if (IS_ERR(comp->clk[i]))
35 continue;
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)
44 int ret;
45 int i;
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");
55 goto put_dev;
58 /* Only RDMA needs two clocks */
59 if (comp->type != MTK_MDP_RDMA)
60 break;
63 return 0;
65 put_dev:
66 of_node_put(comp->dev_node);
68 return ret;
71 void mtk_mdp_comp_deinit(struct device *dev, struct mtk_mdp_comp *comp)
73 of_node_put(comp->dev_node);