.. | .. |
---|
19 | 19 | #include <linux/slab.h> |
---|
20 | 20 | #include <linux/nospec.h> |
---|
21 | 21 | #include <linux/mfd/syscon.h> |
---|
| 22 | +#include <linux/regmap.h> |
---|
22 | 23 | |
---|
23 | 24 | #include "mpp_debug.h" |
---|
24 | 25 | #include "mpp_common.h" |
---|
.. | .. |
---|
42 | 43 | struct mpp_grf_info *grf_info, |
---|
43 | 44 | const char *grf_name) |
---|
44 | 45 | { |
---|
45 | | - int ret; |
---|
46 | 46 | int index; |
---|
47 | 47 | u32 grf_offset = 0; |
---|
48 | 48 | u32 grf_value = 0; |
---|
| 49 | + u32 mem_offset = 0; |
---|
| 50 | + u32 val_mem_on = 0; |
---|
| 51 | + u32 val_mem_off = 0; |
---|
49 | 52 | struct regmap *grf; |
---|
50 | 53 | |
---|
51 | 54 | grf = syscon_regmap_lookup_by_phandle(np, "rockchip,grf"); |
---|
52 | 55 | if (IS_ERR_OR_NULL(grf)) |
---|
53 | 56 | return -EINVAL; |
---|
54 | 57 | |
---|
55 | | - ret = of_property_read_u32(np, "rockchip,grf-offset", &grf_offset); |
---|
56 | | - if (ret) |
---|
57 | | - return -ENODATA; |
---|
58 | | - |
---|
59 | 58 | index = of_property_match_string(np, "rockchip,grf-names", grf_name); |
---|
60 | 59 | if (index < 0) |
---|
61 | 60 | return -ENODATA; |
---|
62 | 61 | |
---|
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 | + |
---|
67 | 72 | |
---|
68 | 73 | grf_info->grf = grf; |
---|
69 | 74 | grf_info->offset = grf_offset; |
---|
70 | 75 | grf_info->val = grf_value; |
---|
71 | 76 | |
---|
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); |
---|
73 | 87 | |
---|
74 | 88 | return 0; |
---|
75 | 89 | } |
---|
.. | .. |
---|
261 | 275 | /* show support devices */ |
---|
262 | 276 | proc_create_single_data("supports-device", 0444, |
---|
263 | 277 | srv->procfs, mpp_show_support_device, srv); |
---|
| 278 | + mpp_procfs_create_u32("timing_en", 0644, srv->procfs, &srv->timing_en); |
---|
264 | 279 | |
---|
265 | 280 | return 0; |
---|
266 | 281 | } |
---|