Lines Matching refs:dcss

16 #include "dcss-dev.h"
17 #include "dcss-kms.h"
19 static void dcss_clocks_enable(struct dcss_dev *dcss)
21 clk_prepare_enable(dcss->axi_clk);
22 clk_prepare_enable(dcss->apb_clk);
23 clk_prepare_enable(dcss->rtrm_clk);
24 clk_prepare_enable(dcss->dtrc_clk);
25 clk_prepare_enable(dcss->pix_clk);
28 static void dcss_clocks_disable(struct dcss_dev *dcss)
30 clk_disable_unprepare(dcss->pix_clk);
31 clk_disable_unprepare(dcss->dtrc_clk);
32 clk_disable_unprepare(dcss->rtrm_clk);
33 clk_disable_unprepare(dcss->apb_clk);
34 clk_disable_unprepare(dcss->axi_clk);
39 struct dcss_dev *dcss = data;
41 dcss->disable_callback = NULL;
43 dcss_ss_shutoff(dcss->ss);
44 dcss_dtg_shutoff(dcss->dtg);
46 complete(&dcss->disable_completion);
49 void dcss_disable_dtg_and_ss(struct dcss_dev *dcss)
51 dcss->disable_callback = dcss_disable_dtg_and_ss_cb;
54 void dcss_enable_dtg_and_ss(struct dcss_dev *dcss)
56 if (dcss->disable_callback)
57 dcss->disable_callback = NULL;
59 dcss_dtg_enable(dcss->dtg);
60 dcss_ss_enable(dcss->ss);
63 static int dcss_submodules_init(struct dcss_dev *dcss)
66 u32 base_addr = dcss->start_addr;
67 const struct dcss_type_data *devtype = dcss->devtype;
69 dcss_clocks_enable(dcss);
71 ret = dcss_blkctl_init(dcss, base_addr + devtype->blkctl_ofs);
75 ret = dcss_ctxld_init(dcss, base_addr + devtype->ctxld_ofs);
79 ret = dcss_dtg_init(dcss, base_addr + devtype->dtg_ofs);
83 ret = dcss_ss_init(dcss, base_addr + devtype->ss_ofs);
87 ret = dcss_dpr_init(dcss, base_addr + devtype->dpr_ofs);
91 ret = dcss_scaler_init(dcss, base_addr + devtype->scaler_ofs);
95 dcss_clocks_disable(dcss);
100 dcss_dpr_exit(dcss->dpr);
103 dcss_ss_exit(dcss->ss);
106 dcss_dtg_exit(dcss->dtg);
109 dcss_ctxld_exit(dcss->ctxld);
112 dcss_blkctl_exit(dcss->blkctl);
114 dcss_clocks_disable(dcss);
119 static void dcss_submodules_stop(struct dcss_dev *dcss)
121 dcss_clocks_enable(dcss);
122 dcss_scaler_exit(dcss->scaler);
123 dcss_dpr_exit(dcss->dpr);
124 dcss_ss_exit(dcss->ss);
125 dcss_dtg_exit(dcss->dtg);
126 dcss_ctxld_exit(dcss->ctxld);
127 dcss_blkctl_exit(dcss->blkctl);
128 dcss_clocks_disable(dcss);
131 static int dcss_clks_init(struct dcss_dev *dcss)
138 {"apb", &dcss->apb_clk},
139 {"axi", &dcss->axi_clk},
140 {"pix", &dcss->pix_clk},
141 {"rtrm", &dcss->rtrm_clk},
142 {"dtrc", &dcss->dtrc_clk},
146 *clks[i].clk = devm_clk_get(dcss->dev, clks[i].id);
148 dev_err(dcss->dev, "failed to get %s clock\n",
157 static void dcss_clks_release(struct dcss_dev *dcss)
159 devm_clk_put(dcss->dev, dcss->dtrc_clk);
160 devm_clk_put(dcss->dev, dcss->rtrm_clk);
161 devm_clk_put(dcss->dev, dcss->pix_clk);
162 devm_clk_put(dcss->dev, dcss->axi_clk);
163 devm_clk_put(dcss->dev, dcss->apb_clk);
171 struct dcss_dev *dcss;
186 dcss = kzalloc(sizeof(*dcss), GFP_KERNEL);
187 if (!dcss)
190 dcss->dev = dev;
191 dcss->devtype = devtype;
192 dcss->hdmi_output = hdmi_output;
194 ret = dcss_clks_init(dcss);
200 dcss->of_port = of_graph_get_port_by_id(dev->of_node, 0);
201 if (!dcss->of_port) {
207 dcss->start_addr = res->start;
209 ret = dcss_submodules_init(dcss);
211 of_node_put(dcss->of_port);
216 init_completion(&dcss->disable_completion);
224 return dcss;
227 dcss_clks_release(dcss);
230 kfree(dcss);
235 void dcss_dev_destroy(struct dcss_dev *dcss)
237 if (!pm_runtime_suspended(dcss->dev)) {
238 dcss_ctxld_suspend(dcss->ctxld);
239 dcss_clocks_disable(dcss);
242 of_node_put(dcss->of_port);
244 pm_runtime_disable(dcss->dev);
246 dcss_submodules_stop(dcss);
248 dcss_clks_release(dcss);
250 kfree(dcss);
255 struct dcss_dev *dcss = dcss_drv_dev_to_dcss(dev);
264 ret = dcss_ctxld_suspend(dcss->ctxld);
268 dcss_clocks_disable(dcss);
275 struct dcss_dev *dcss = dcss_drv_dev_to_dcss(dev);
283 dcss_clocks_enable(dcss);
285 dcss_blkctl_cfg(dcss->blkctl);
287 dcss_ctxld_resume(dcss->ctxld);
296 struct dcss_dev *dcss = dcss_drv_dev_to_dcss(dev);
299 ret = dcss_ctxld_suspend(dcss->ctxld);
303 dcss_clocks_disable(dcss);
310 struct dcss_dev *dcss = dcss_drv_dev_to_dcss(dev);
312 dcss_clocks_enable(dcss);
314 dcss_blkctl_cfg(dcss->blkctl);
316 dcss_ctxld_resume(dcss->ctxld);