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