forked from ~ljy/RK356X_SDK_RELEASE

hc
2024-05-10 9999e48639b3cecb08ffb37358bcba3b48161b29
kernel/drivers/media/platform/rockchip/isp/rkisp_tb_helper.c
....@@ -17,10 +17,14 @@
1717 #include <linux/regmap.h>
1818 #include <linux/dma-buf.h>
1919 #include <linux/highmem.h>
20
+#include <linux/soc/rockchip/rockchip_thunderboot_service.h>
2021
2122 #include "rkisp_tb_helper.h"
2223
2324 static struct platform_device *rkisp_tb_pdev;
25
+static struct clk_bulk_data *rkisp_tb_clk;
26
+static int rkisp_tb_clk_num;
27
+static struct rk_tb_client tb_cl;
2428
2529 struct shm_data {
2630 int npages;
....@@ -71,7 +75,7 @@
7175 {
7276 struct shm_data *data = dma_buf->priv;
7377
74
- return vm_map_ram(data->pages, data->npages, 0, PAGE_KERNEL);
78
+ return vm_map_ram(data->pages, data->npages, 0);
7579 }
7680
7781 static void shm_vunmap(struct dma_buf *dma_buf, void *vaddr)
....@@ -79,20 +83,6 @@
7983 struct shm_data *data = dma_buf->priv;
8084
8185 vm_unmap_ram(vaddr, data->npages);
82
-}
83
-
84
-static void *shm_kmap(struct dma_buf *dma_buf, unsigned long page_num)
85
-{
86
- struct shm_data *data = dma_buf->priv;
87
-
88
- return kmap(data->pages[page_num]);
89
-}
90
-
91
-static void shm_kunmap(struct dma_buf *dma_buf, unsigned long page_num, void *addr)
92
-{
93
- struct shm_data *data = dma_buf->priv;
94
-
95
- return kunmap(data->pages[page_num]);
9686 }
9787
9888 static int shm_mmap(struct dma_buf *dma_buf, struct vm_area_struct *vma)
....@@ -138,8 +128,6 @@
138128 .map_dma_buf = shm_map_dma_buf,
139129 .unmap_dma_buf = shm_unmap_dma_buf,
140130 .release = shm_release,
141
- .map = shm_kmap,
142
- .unmap = shm_kunmap,
143131 .mmap = shm_mmap,
144132 .vmap = shm_vmap,
145133 .vunmap = shm_vunmap,
....@@ -175,20 +163,35 @@
175163
176164 static int __maybe_unused rkisp_tb_clocks_loader_protect(void)
177165 {
166
+ int ret = 0;
167
+
178168 if (rkisp_tb_pdev) {
179169 pm_runtime_enable(&rkisp_tb_pdev->dev);
180170 pm_runtime_get_sync(&rkisp_tb_pdev->dev);
171
+ if (rkisp_tb_clk_num) {
172
+ ret = clk_bulk_prepare_enable(rkisp_tb_clk_num, rkisp_tb_clk);
173
+ if (ret)
174
+ dev_err(&rkisp_tb_pdev->dev, "Cannot enable clock\n");
175
+ }
181176 }
182
- return 0;
177
+
178
+ return ret;
183179 }
184180
185181 static int __maybe_unused rkisp_tb_clocks_loader_unprotect(void)
186182 {
187183 if (rkisp_tb_pdev) {
184
+ if (rkisp_tb_clk_num)
185
+ clk_bulk_disable_unprepare(rkisp_tb_clk_num, rkisp_tb_clk);
188186 pm_runtime_put_sync(&rkisp_tb_pdev->dev);
189187 pm_runtime_disable(&rkisp_tb_pdev->dev);
190188 }
191189 return 0;
190
+}
191
+
192
+static void rkisp_tb_cb(void *data)
193
+{
194
+ rkisp_tb_clocks_loader_unprotect();
192195 }
193196
194197 static int __maybe_unused rkisp_tb_runtime_suspend(struct device *dev)
....@@ -218,7 +221,18 @@
218221 static int rkisp_tb_plat_probe(struct platform_device *pdev)
219222 {
220223 rkisp_tb_pdev = pdev;
224
+ rkisp_tb_clk_num = devm_clk_bulk_get_all(&pdev->dev, &rkisp_tb_clk);
225
+ if (rkisp_tb_clk_num <= 0) {
226
+ dev_warn(&pdev->dev, "get clk fail:%d\n", rkisp_tb_clk_num);
227
+ rkisp_tb_clk_num = 0;
228
+ }
221229 rkisp_tb_clocks_loader_protect();
230
+
231
+ if (IS_ENABLED(CONFIG_ROCKCHIP_THUNDER_BOOT_SERVICE)) {
232
+ tb_cl.cb = rkisp_tb_cb;
233
+ return rk_tb_client_register_cb(&tb_cl);
234
+ }
235
+
222236 return 0;
223237 }
224238
....@@ -263,6 +277,9 @@
263277
264278 void rkisp_tb_unprotect_clk(void)
265279 {
280
+ if (IS_ENABLED(CONFIG_ROCKCHIP_THUNDER_BOOT_SERVICE))
281
+ return;
282
+
266283 rkisp_tb_clocks_loader_unprotect();
267284 }
268285 EXPORT_SYMBOL(rkisp_tb_unprotect_clk);