hc
2023-11-06 e3e12f52b214121840b44c91de5b3e5af5d3eb84
kernel/drivers/video/rockchip/mpp/mpp_service.c
....@@ -19,6 +19,7 @@
1919 #include <linux/slab.h>
2020 #include <linux/nospec.h>
2121 #include <linux/mfd/syscon.h>
22
+#include <linux/regmap.h>
2223
2324 #include "mpp_debug.h"
2425 #include "mpp_common.h"
....@@ -42,34 +43,47 @@
4243 struct mpp_grf_info *grf_info,
4344 const char *grf_name)
4445 {
45
- int ret;
4646 int index;
4747 u32 grf_offset = 0;
4848 u32 grf_value = 0;
49
+ u32 mem_offset = 0;
50
+ u32 val_mem_on = 0;
51
+ u32 val_mem_off = 0;
4952 struct regmap *grf;
5053
5154 grf = syscon_regmap_lookup_by_phandle(np, "rockchip,grf");
5255 if (IS_ERR_OR_NULL(grf))
5356 return -EINVAL;
5457
55
- ret = of_property_read_u32(np, "rockchip,grf-offset", &grf_offset);
56
- if (ret)
57
- return -ENODATA;
58
-
5958 index = of_property_match_string(np, "rockchip,grf-names", grf_name);
6059 if (index < 0)
6160 return -ENODATA;
6261
63
- ret = of_property_read_u32_index(np, "rockchip,grf-values",
64
- index, &grf_value);
65
- if (ret)
66
- return -ENODATA;
62
+ of_property_read_u32(np, "rockchip,grf-offset", &grf_offset);
63
+ of_property_read_u32_index(np, "rockchip,grf-values",
64
+ index, &grf_value);
65
+ of_property_read_u32_index(np, "rockchip,grf-mem-offset",
66
+ index, &mem_offset);
67
+ of_property_read_u32_index(np, "rockchip,grf-mem-on-values",
68
+ index, &val_mem_on);
69
+ of_property_read_u32_index(np, "rockchip,grf-mem-off-values",
70
+ index, &val_mem_off);
71
+
6772
6873 grf_info->grf = grf;
6974 grf_info->offset = grf_offset;
7075 grf_info->val = grf_value;
7176
72
- mpp_set_grf(grf_info);
77
+ grf_info->mem_offset = mem_offset;
78
+ grf_info->val_mem_on = val_mem_on;
79
+ grf_info->val_mem_off = val_mem_off;
80
+
81
+ if (grf_info->offset && grf_info->val)
82
+ mpp_set_grf(grf_info);
83
+
84
+ if (grf_info->mem_offset && grf_info->val_mem_off)
85
+ regmap_write(grf_info->grf, grf_info->mem_offset,
86
+ grf_info->val_mem_off);
7387
7488 return 0;
7589 }
....@@ -261,6 +275,7 @@
261275 /* show support devices */
262276 proc_create_single_data("supports-device", 0444,
263277 srv->procfs, mpp_show_support_device, srv);
278
+ mpp_procfs_create_u32("timing_en", 0644, srv->procfs, &srv->timing_en);
264279
265280 return 0;
266281 }