msm_fb: display: add ioctl for mixer info
Add new ioctl to allow user to query mdp mixer detail configuration.
Signed-off-by: Kuogee Hsieh <khsieh@codeaurora.org>
diff --git a/drivers/video/msm/msm_fb.c b/drivers/video/msm/msm_fb.c
index b5cd46a3..5914068 100644
--- a/drivers/video/msm/msm_fb.c
+++ b/drivers/video/msm/msm_fb.c
@@ -2542,8 +2542,7 @@
ret = copy_from_user(&req, argp, sizeof(req));
if (ret) {
- printk(KERN_ERR "%s:msmfb_overlay_blt ioctl failed\n",
- __func__);
+ pr_err("%s: failed\n", __func__);
return ret;
}
@@ -2557,6 +2556,12 @@
int ret;
struct msmfb_overlay_blt req;
+ ret = copy_from_user(&req, argp, sizeof(req));
+ if (ret) {
+ pr_err("%s: failed\n", __func__);
+ return ret;
+ }
+
ret = mdp4_overlay_blt_offset(info, &req);
ret = copy_to_user(argp, &req, sizeof(req));
@@ -2594,6 +2599,27 @@
return ret;
}
+static int msmfb_mixer_info(struct fb_info *info, unsigned long *argp)
+{
+ int ret, cnt;
+ struct msmfb_mixer_info_req req;
+
+ ret = copy_from_user(&req, argp, sizeof(req));
+ if (ret) {
+ pr_err("%s: failed\n", __func__);
+ return ret;
+ }
+
+ cnt = mdp4_mixer_info(req.mixer_num, req.info);
+ req.cnt = cnt;
+ ret = copy_to_user(argp, &req, sizeof(req));
+ if (ret)
+ pr_err("%s:msmfb_overlay_blt_off ioctl failed\n",
+ __func__);
+
+ return cnt;
+}
+
#endif
DEFINE_SEMAPHORE(msm_fb_ioctl_ppp_sem);
@@ -2718,6 +2744,11 @@
ret = msmfb_overlay_3d_sbys(info, argp);
up(&msm_fb_ioctl_ppp_sem);
break;
+ case MSMFB_MIXER_INFO:
+ down(&msm_fb_ioctl_ppp_sem);
+ ret = msmfb_mixer_info(info, argp);
+ up(&msm_fb_ioctl_ppp_sem);
+ break;
#endif
case MSMFB_BLIT:
down(&msm_fb_ioctl_ppp_sem);