From 9999e48639b3cecb08ffb37358bcba3b48161b29 Mon Sep 17 00:00:00 2001
From: hc <hc@nodka.com>
Date: Fri, 10 May 2024 08:50:17 +0000
Subject: [PATCH] add ax88772_rst

---
 kernel/drivers/media/platform/rockchip/isp/rkisp_tb_helper.c |   53 +++++++++++++++++++++++++++++++++++------------------
 1 files changed, 35 insertions(+), 18 deletions(-)

diff --git a/kernel/drivers/media/platform/rockchip/isp/rkisp_tb_helper.c b/kernel/drivers/media/platform/rockchip/isp/rkisp_tb_helper.c
index 6bc9b34..4ae04a4 100644
--- a/kernel/drivers/media/platform/rockchip/isp/rkisp_tb_helper.c
+++ b/kernel/drivers/media/platform/rockchip/isp/rkisp_tb_helper.c
@@ -17,10 +17,14 @@
 #include <linux/regmap.h>
 #include <linux/dma-buf.h>
 #include <linux/highmem.h>
+#include <linux/soc/rockchip/rockchip_thunderboot_service.h>
 
 #include "rkisp_tb_helper.h"
 
 static struct platform_device *rkisp_tb_pdev;
+static struct clk_bulk_data *rkisp_tb_clk;
+static int rkisp_tb_clk_num;
+static struct rk_tb_client tb_cl;
 
 struct shm_data {
 	int npages;
@@ -71,7 +75,7 @@
 {
 	struct shm_data *data = dma_buf->priv;
 
-	return vm_map_ram(data->pages, data->npages, 0, PAGE_KERNEL);
+	return vm_map_ram(data->pages, data->npages, 0);
 }
 
 static void shm_vunmap(struct dma_buf *dma_buf, void *vaddr)
@@ -79,20 +83,6 @@
 	struct shm_data *data = dma_buf->priv;
 
 	vm_unmap_ram(vaddr, data->npages);
-}
-
-static void *shm_kmap(struct dma_buf *dma_buf, unsigned long page_num)
-{
-	struct shm_data *data = dma_buf->priv;
-
-	return kmap(data->pages[page_num]);
-}
-
-static void shm_kunmap(struct dma_buf *dma_buf, unsigned long page_num, void *addr)
-{
-	struct shm_data *data = dma_buf->priv;
-
-	return kunmap(data->pages[page_num]);
 }
 
 static int shm_mmap(struct dma_buf *dma_buf, struct vm_area_struct *vma)
@@ -138,8 +128,6 @@
 	.map_dma_buf = shm_map_dma_buf,
 	.unmap_dma_buf = shm_unmap_dma_buf,
 	.release = shm_release,
-	.map = shm_kmap,
-	.unmap = shm_kunmap,
 	.mmap = shm_mmap,
 	.vmap = shm_vmap,
 	.vunmap = shm_vunmap,
@@ -175,20 +163,35 @@
 
 static int __maybe_unused rkisp_tb_clocks_loader_protect(void)
 {
+	int ret = 0;
+
 	if (rkisp_tb_pdev) {
 		pm_runtime_enable(&rkisp_tb_pdev->dev);
 		pm_runtime_get_sync(&rkisp_tb_pdev->dev);
+		if (rkisp_tb_clk_num) {
+			ret = clk_bulk_prepare_enable(rkisp_tb_clk_num, rkisp_tb_clk);
+			if (ret)
+				dev_err(&rkisp_tb_pdev->dev, "Cannot enable clock\n");
+		}
 	}
-	return 0;
+
+	return ret;
 }
 
 static int __maybe_unused rkisp_tb_clocks_loader_unprotect(void)
 {
 	if (rkisp_tb_pdev) {
+		if (rkisp_tb_clk_num)
+			clk_bulk_disable_unprepare(rkisp_tb_clk_num, rkisp_tb_clk);
 		pm_runtime_put_sync(&rkisp_tb_pdev->dev);
 		pm_runtime_disable(&rkisp_tb_pdev->dev);
 	}
 	return 0;
+}
+
+static void rkisp_tb_cb(void *data)
+{
+	rkisp_tb_clocks_loader_unprotect();
 }
 
 static int __maybe_unused rkisp_tb_runtime_suspend(struct device *dev)
@@ -218,7 +221,18 @@
 static int rkisp_tb_plat_probe(struct platform_device *pdev)
 {
 	rkisp_tb_pdev = pdev;
+	rkisp_tb_clk_num = devm_clk_bulk_get_all(&pdev->dev, &rkisp_tb_clk);
+	if (rkisp_tb_clk_num <= 0) {
+		dev_warn(&pdev->dev, "get clk fail:%d\n", rkisp_tb_clk_num);
+		rkisp_tb_clk_num = 0;
+	}
 	rkisp_tb_clocks_loader_protect();
+
+	if (IS_ENABLED(CONFIG_ROCKCHIP_THUNDER_BOOT_SERVICE)) {
+		tb_cl.cb = rkisp_tb_cb;
+		return rk_tb_client_register_cb(&tb_cl);
+	}
+
 	return 0;
 }
 
@@ -263,6 +277,9 @@
 
 void rkisp_tb_unprotect_clk(void)
 {
+	if (IS_ENABLED(CONFIG_ROCKCHIP_THUNDER_BOOT_SERVICE))
+		return;
+
 	rkisp_tb_clocks_loader_unprotect();
 }
 EXPORT_SYMBOL(rkisp_tb_unprotect_clk);

--
Gitblit v1.6.2