From 15ade055295d13f95d49e3d99b09f3bbfb4a43e7 Mon Sep 17 00:00:00 2001
From: hc <hc@nodka.com>
Date: Mon, 06 Nov 2023 07:25:24 +0000
Subject: [PATCH] add at24 driver

---
 kernel/drivers/video/rockchip/mpp/mpp_service.c |   35 +++++++++++++++++++++++++----------
 1 files changed, 25 insertions(+), 10 deletions(-)

diff --git a/kernel/drivers/video/rockchip/mpp/mpp_service.c b/kernel/drivers/video/rockchip/mpp/mpp_service.c
index 375f550..67ef213 100644
--- a/kernel/drivers/video/rockchip/mpp/mpp_service.c
+++ b/kernel/drivers/video/rockchip/mpp/mpp_service.c
@@ -19,6 +19,7 @@
 #include <linux/slab.h>
 #include <linux/nospec.h>
 #include <linux/mfd/syscon.h>
+#include <linux/regmap.h>
 
 #include "mpp_debug.h"
 #include "mpp_common.h"
@@ -42,34 +43,47 @@
 			struct mpp_grf_info *grf_info,
 			const char *grf_name)
 {
-	int ret;
 	int index;
 	u32 grf_offset = 0;
 	u32 grf_value = 0;
+	u32 mem_offset = 0;
+	u32 val_mem_on = 0;
+	u32 val_mem_off = 0;
 	struct regmap *grf;
 
 	grf = syscon_regmap_lookup_by_phandle(np, "rockchip,grf");
 	if (IS_ERR_OR_NULL(grf))
 		return -EINVAL;
 
-	ret = of_property_read_u32(np, "rockchip,grf-offset", &grf_offset);
-	if (ret)
-		return -ENODATA;
-
 	index = of_property_match_string(np, "rockchip,grf-names", grf_name);
 	if (index < 0)
 		return -ENODATA;
 
-	ret = of_property_read_u32_index(np, "rockchip,grf-values",
-					 index, &grf_value);
-	if (ret)
-		return -ENODATA;
+	of_property_read_u32(np, "rockchip,grf-offset", &grf_offset);
+	of_property_read_u32_index(np, "rockchip,grf-values",
+				   index, &grf_value);
+	of_property_read_u32_index(np, "rockchip,grf-mem-offset",
+				   index, &mem_offset);
+	of_property_read_u32_index(np, "rockchip,grf-mem-on-values",
+				   index, &val_mem_on);
+	of_property_read_u32_index(np, "rockchip,grf-mem-off-values",
+				   index, &val_mem_off);
+
 
 	grf_info->grf = grf;
 	grf_info->offset = grf_offset;
 	grf_info->val = grf_value;
 
-	mpp_set_grf(grf_info);
+	grf_info->mem_offset = mem_offset;
+	grf_info->val_mem_on = val_mem_on;
+	grf_info->val_mem_off = val_mem_off;
+
+	if (grf_info->offset && grf_info->val)
+		mpp_set_grf(grf_info);
+
+	if (grf_info->mem_offset && grf_info->val_mem_off)
+		regmap_write(grf_info->grf, grf_info->mem_offset,
+			     grf_info->val_mem_off);
 
 	return 0;
 }
@@ -261,6 +275,7 @@
 	/* show support devices */
 	proc_create_single_data("supports-device", 0444,
 				srv->procfs, mpp_show_support_device, srv);
+	mpp_procfs_create_u32("timing_en", 0644, srv->procfs, &srv->timing_en);
 
 	return 0;
 }

--
Gitblit v1.6.2