diff options
| author | Dhaval Patel <pdhaval@codeaurora.org> | 2014-08-18 12:57:19 -0700 |
|---|---|---|
| committer | David Keitel <dkeitel@codeaurora.org> | 2016-03-23 20:33:22 -0700 |
| commit | c05ee5a7cdf5b264aa73e30c2003d6a65fb74cb4 (patch) | |
| tree | 33acb1d6e2756e8226de30f37f30e072cad9e861 /drivers/video/fbdev | |
| parent | 67ac4262d4222fe770f1e94b8baae4aa8324dc51 (diff) | |
mdss: mdp: parse memory handle for cont splash buffer
Continuous splash screen buffer is reserved in
target dtsi file for MSM8994 target. FB driver should
parse this memory handle using "linux,continuous-region"
to get the splash screen buffer address and size. This
avoids usage of "qcom,memory-reserve" entry which forces
user to provide duplicate information.
Change-Id: Ice6cddf6c71a2de9adf15a763434a310e07a3da6
Signed-off-by: Dhaval Patel <pdhaval@codeaurora.org>
Diffstat (limited to 'drivers/video/fbdev')
| -rw-r--r-- | drivers/video/fbdev/msm/mdss_mdp_splash_logo.c | 49 |
1 files changed, 38 insertions, 11 deletions
diff --git a/drivers/video/fbdev/msm/mdss_mdp_splash_logo.c b/drivers/video/fbdev/msm/mdss_mdp_splash_logo.c index 10242732e675..d648aca12c3b 100644 --- a/drivers/video/fbdev/msm/mdss_mdp_splash_logo.c +++ b/drivers/video/fbdev/msm/mdss_mdp_splash_logo.c @@ -19,6 +19,7 @@ #include <linux/memblock.h> #include <linux/bootmem.h> #include <linux/iommu.h> +#include <linux/of_address.h> #include <linux/fb.h> #include <linux/dma-buf.h> @@ -591,25 +592,51 @@ static __ref int mdss_mdp_splash_parse_dt(struct msm_fb_data_type *mfd) struct mdss_overlay_private *mdp5_mdata = mfd_to_mdp5_data(mfd); int len = 0, rc = 0; u32 offsets[2]; + struct device_node *pnode, *child_node; mfd->splash_info.splash_logo_enabled = of_property_read_bool(pdev->dev.of_node, "qcom,mdss-fb-splash-logo-enabled"); of_find_property(pdev->dev.of_node, "qcom,memblock-reserve", &len); - if (len < 1) { - pr_debug("mem reservation for splash screen fb not present\n"); - rc = -EINVAL; - goto error; - } - - len = len / sizeof(u32); + if (len) { + len = len / sizeof(u32); - rc = of_property_read_u32_array(pdev->dev.of_node, + rc = of_property_read_u32_array(pdev->dev.of_node, "qcom,memblock-reserve", offsets, len); - if (rc) { - pr_debug("error reading mem reserve settings for fb\n"); - goto error; + if (rc) { + pr_err("error reading mem reserve settings for fb\n"); + goto error; + } + } else { + child_node = of_get_child_by_name(pdev->dev.of_node, + "qcom,cont-splash-memory"); + if (!child_node) { + pr_err("splash mem child node is not present\n"); + rc = -EINVAL; + goto error; + } + + pnode = of_parse_phandle(child_node, "linux,contiguous-region", + 0); + if (pnode != NULL) { + const u32 *addr; + u64 size; + addr = of_get_address(pnode, 0, &size, NULL); + if (!addr) { + pr_err("failed to parse the splash memory address\n"); + of_node_put(pnode); + rc = -EINVAL; + goto error; + } + offsets[0] = (u32) of_read_ulong(addr, 2); + offsets[1] = (u32) size; + of_node_put(pnode); + } else { + pr_err("mem reservation for splash screen fb not present\n"); + rc = -EINVAL; + goto error; + } } if (!memblock_is_reserved(offsets[0])) { |
