Lines Matching refs:dcss
15 #include "dcss-dev.h"
16 #include "dcss-kms.h"
18 static void dcss_clocks_enable(struct dcss_dev *dcss)
20 clk_prepare_enable(dcss->axi_clk);
21 clk_prepare_enable(dcss->apb_clk);
22 clk_prepare_enable(dcss->rtrm_clk);
23 clk_prepare_enable(dcss->dtrc_clk);
24 clk_prepare_enable(dcss->pix_clk);
27 static void dcss_clocks_disable(struct dcss_dev *dcss)
29 clk_disable_unprepare(dcss->pix_clk);
30 clk_disable_unprepare(dcss->dtrc_clk);
31 clk_disable_unprepare(dcss->rtrm_clk);
32 clk_disable_unprepare(dcss->apb_clk);
33 clk_disable_unprepare(dcss->axi_clk);
38 struct dcss_dev *dcss = data;
40 dcss->disable_callback = NULL;
42 dcss_ss_shutoff(dcss->ss);
43 dcss_dtg_shutoff(dcss->dtg);
45 complete(&dcss->disable_completion);
48 void dcss_disable_dtg_and_ss(struct dcss_dev *dcss)
50 dcss->disable_callback = dcss_disable_dtg_and_ss_cb;
53 void dcss_enable_dtg_and_ss(struct dcss_dev *dcss)
55 if (dcss->disable_callback)
56 dcss->disable_callback = NULL;
58 dcss_dtg_enable(dcss->dtg);
59 dcss_ss_enable(dcss->ss);
62 static int dcss_submodules_init(struct dcss_dev *dcss)
65 u32 base_addr = dcss->start_addr;
66 const struct dcss_type_data *devtype = dcss->devtype;
68 dcss_clocks_enable(dcss);
70 ret = dcss_blkctl_init(dcss, base_addr + devtype->blkctl_ofs);
74 ret = dcss_ctxld_init(dcss, base_addr + devtype->ctxld_ofs);
78 ret = dcss_dtg_init(dcss, base_addr + devtype->dtg_ofs);
82 ret = dcss_ss_init(dcss, base_addr + devtype->ss_ofs);
86 ret = dcss_dpr_init(dcss, base_addr + devtype->dpr_ofs);
90 ret = dcss_scaler_init(dcss, base_addr + devtype->scaler_ofs);
94 dcss_clocks_disable(dcss);
99 dcss_dpr_exit(dcss->dpr);
102 dcss_ss_exit(dcss->ss);
105 dcss_dtg_exit(dcss->dtg);
108 dcss_ctxld_exit(dcss->ctxld);
111 dcss_blkctl_exit(dcss->blkctl);
113 dcss_clocks_disable(dcss);
118 static void dcss_submodules_stop(struct dcss_dev *dcss)
120 dcss_clocks_enable(dcss);
121 dcss_scaler_exit(dcss->scaler);
122 dcss_dpr_exit(dcss->dpr);
123 dcss_ss_exit(dcss->ss);
124 dcss_dtg_exit(dcss->dtg);
125 dcss_ctxld_exit(dcss->ctxld);
126 dcss_blkctl_exit(dcss->blkctl);
127 dcss_clocks_disable(dcss);
130 static int dcss_clks_init(struct dcss_dev *dcss)
137 {"apb", &dcss->apb_clk},
138 {"axi", &dcss->axi_clk},
139 {"pix", &dcss->pix_clk},
140 {"rtrm", &dcss->rtrm_clk},
141 {"dtrc", &dcss->dtrc_clk},
145 *clks[i].clk = devm_clk_get(dcss->dev, clks[i].id);
147 dev_err(dcss->dev, "failed to get %s clock\n",
156 static void dcss_clks_release(struct dcss_dev *dcss)
158 devm_clk_put(dcss->dev, dcss->dtrc_clk);
159 devm_clk_put(dcss->dev, dcss->rtrm_clk);
160 devm_clk_put(dcss->dev, dcss->pix_clk);
161 devm_clk_put(dcss->dev, dcss->axi_clk);
162 devm_clk_put(dcss->dev, dcss->apb_clk);
170 struct dcss_dev *dcss;
185 dcss = kzalloc(sizeof(*dcss), GFP_KERNEL);
186 if (!dcss)
189 dcss->dev = dev;
190 dcss->devtype = devtype;
191 dcss->hdmi_output = hdmi_output;
193 ret = dcss_clks_init(dcss);
199 dcss->of_port = of_graph_get_port_by_id(dev->of_node, 0);
200 if (!dcss->of_port) {
206 dcss->start_addr = res->start;
208 ret = dcss_submodules_init(dcss);
210 of_node_put(dcss->of_port);
215 init_completion(&dcss->disable_completion);
223 return dcss;
226 dcss_clks_release(dcss);
229 kfree(dcss);
234 void dcss_dev_destroy(struct dcss_dev *dcss)
236 if (!pm_runtime_suspended(dcss->dev)) {
237 dcss_ctxld_suspend(dcss->ctxld);
238 dcss_clocks_disable(dcss);
241 of_node_put(dcss->of_port);
243 pm_runtime_disable(dcss->dev);
245 dcss_submodules_stop(dcss);
247 dcss_clks_release(dcss);
249 kfree(dcss);
255 struct dcss_dev *dcss = dcss_drv_dev_to_dcss(dev);
267 ret = dcss_ctxld_suspend(dcss->ctxld);
271 dcss_clocks_disable(dcss);
278 struct dcss_dev *dcss = dcss_drv_dev_to_dcss(dev);
287 dcss_clocks_enable(dcss);
289 dcss_blkctl_cfg(dcss->blkctl);
291 dcss_ctxld_resume(dcss->ctxld);
304 struct dcss_dev *dcss = dcss_drv_dev_to_dcss(dev);
307 ret = dcss_ctxld_suspend(dcss->ctxld);
311 dcss_clocks_disable(dcss);
318 struct dcss_dev *dcss = dcss_drv_dev_to_dcss(dev);
320 dcss_clocks_enable(dcss);
322 dcss_blkctl_cfg(dcss->blkctl);
324 dcss_ctxld_resume(dcss->ctxld);