forked from ~ljy/RK356X_SDK_RELEASE

hc
2024-05-10 9999e48639b3cecb08ffb37358bcba3b48161b29
kernel/drivers/media/platform/rockchip/isp/common.c
....@@ -6,6 +6,7 @@
66 #include <linux/of_platform.h>
77 #include <linux/slab.h>
88 #include "dev.h"
9
+#include "hw.h"
910 #include "isp_ispp.h"
1011 #include "regs.h"
1112
....@@ -36,6 +37,8 @@
3637 *flag = SW_REG_CACHE;
3738 if (dev->hw_dev->is_single || is_direct) {
3839 *flag = SW_REG_CACHE_SYNC;
40
+ if (dev->hw_dev->unite == ISP_UNITE_ONE)
41
+ return;
3942 writel(val, dev->hw_dev->base_next_addr + reg);
4043 }
4144 }
....@@ -166,13 +169,18 @@
166169 continue;
167170 }
168171
172
+ if (hw->unite == ISP_UNITE_ONE && dev->unite_index == ISP_UNITE_RIGHT) {
173
+ val = dev->sw_base_addr + i + RKISP_ISP_SW_MAX_SIZE;
174
+ flag = dev->sw_base_addr + i + RKISP_ISP_SW_MAX_SIZE + RKISP_ISP_SW_REG_SIZE;
175
+ }
176
+
169177 if (*flag == SW_REG_CACHE) {
170178 if ((i == ISP3X_MAIN_RESIZE_CTRL ||
171179 i == ISP32_BP_RESIZE_CTRL ||
172180 i == ISP3X_SELF_RESIZE_CTRL) && *val == 0)
173181 *val = CIF_RSZ_CTRL_CFG_UPD;
174182 writel(*val, base + i);
175
- if (hw->is_unite) {
183
+ if (hw->unite == ISP_UNITE_TWO) {
176184 val = dev->sw_base_addr + i + RKISP_ISP_SW_MAX_SIZE;
177185 if ((i == ISP3X_MAIN_RESIZE_CTRL ||
178186 i == ISP32_BP_RESIZE_CTRL ||
....@@ -310,6 +318,11 @@
310318 return -EINVAL;
311319 }
312320
321
+ if (hw->dev_num >= DEV_MAX) {
322
+ dev_err(isp->dev, "failed attach isp hw, max dev:%d\n", DEV_MAX);
323
+ return -EINVAL;
324
+ }
325
+
313326 isp->dev_id = hw->dev_num;
314327 hw->isp[hw->dev_num] = isp;
315328 hw->dev_num++;
....@@ -443,3 +456,14 @@
443456 else
444457 rkisp_free_buffer(dev, &hw->dummy_buf);
445458 }
459
+
460
+u64 rkisp_time_get_ns(struct rkisp_device *dev)
461
+{
462
+ u64 ns;
463
+
464
+ if (dev->isp_ver == ISP_V32)
465
+ ns = ktime_get_boottime_ns();
466
+ else
467
+ ns = ktime_get_ns();
468
+ return ns;
469
+}