| .. | .. |
|---|
| 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 | } |
|---|