diff options
author | Ajay Singh Parmar <aparmar@codeaurora.org> | 2017-01-26 19:17:52 -0800 |
---|---|---|
committer | Ajay Singh Parmar <aparmar@codeaurora.org> | 2017-01-31 11:58:42 -0800 |
commit | 55e88a7c6751ea502b38ca91e3def95ed6910234 (patch) | |
tree | f8bd440298c52bc268ba7fce7425a9a5fa18e991 | |
parent | 42e1251b38729f7d0ec276e8a195db1d3ed22d41 (diff) |
msm: mdss: dp: fix hdcp data address
Provide correct hdcp related data from a given device to
avoid invalid address access related issues.
CRs-Fixed: 1114981
Change-Id: I8af0e80fa883f21e989a12a84e8e656d0dcb72d4
Signed-off-by: Ajay Singh Parmar <aparmar@codeaurora.org>
-rw-r--r-- | drivers/video/fbdev/msm/mdss_dp.c | 33 |
1 files changed, 24 insertions, 9 deletions
diff --git a/drivers/video/fbdev/msm/mdss_dp.c b/drivers/video/fbdev/msm/mdss_dp.c index f3c36c5c6b5a..93b436eab5ab 100644 --- a/drivers/video/fbdev/msm/mdss_dp.c +++ b/drivers/video/fbdev/msm/mdss_dp.c @@ -3759,18 +3759,33 @@ probe_err: void *mdss_dp_get_hdcp_data(struct device *dev) { - struct mdss_dp_drv_pdata *dp_drv = NULL; + struct mdss_dp_drv_pdata *dp; + struct msm_fb_data_type *mfd; + struct mdss_panel_data *pd; + struct fb_info *fbi = dev_get_drvdata(dev); - if (!dev) { - pr_err("%s:Invalid input\n", __func__); - return NULL; + if (!fbi) { + pr_err("invalid fbi\n"); + goto error; } - dp_drv = dev_get_drvdata(dev); - if (!dp_drv) { - pr_err("%s:Invalid dp driver\n", __func__); - return NULL; + + mfd = (struct msm_fb_data_type *)fbi->par; + if (!mfd) { + pr_err("invalid mfd\n"); + goto error; + } + + pd = dev_get_platdata(&mfd->pdev->dev); + if (!pd) { + pr_err("invalid panel_data\n"); + goto error; } - return dp_drv->hdcp.data; + + dp = container_of(pd, struct mdss_dp_drv_pdata, panel_data); + + return dp->hdcp.data; +error: + return NULL; } static inline bool dp_is_stream_shareable(struct mdss_dp_drv_pdata *dp_drv) |