summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBenet Clark <benetc@codeaurora.org>2014-02-05 02:16:33 -0800
committerDavid Keitel <dkeitel@codeaurora.org>2016-03-23 20:26:55 -0700
commit967a0edb3e92946bd6c340a6f6141a11f42e893a (patch)
tree71f60384e0deb88fbe0ec33bc66b8eddd1ca0ce7
parente09b58be2c39991a3d0ec2bfc718fb6c62691ec5 (diff)
msm: mdss: Add PA compat ioctl to PP ioctl framework
The PP compat ioctl now supports Picture Adjustment. Signed-off-by: Benet Clark <benetc@codeaurora.org> Change-Id: I8058164561911bdc384ed3c61dc710741cb60a50
-rw-r--r--drivers/video/fbdev/msm/mdss_compat_utils.c93
1 files changed, 93 insertions, 0 deletions
diff --git a/drivers/video/fbdev/msm/mdss_compat_utils.c b/drivers/video/fbdev/msm/mdss_compat_utils.c
index 9db0f5607c58..299d758f6634 100644
--- a/drivers/video/fbdev/msm/mdss_compat_utils.c
+++ b/drivers/video/fbdev/msm/mdss_compat_utils.c
@@ -865,6 +865,86 @@ static int __from_user_bl_scale_data(
return 0;
}
+static int __from_user_pa_cfg(
+ struct mdp_pa_cfg32 __user *pa_data32,
+ struct mdp_pa_cfg __user *pa_data)
+{
+ if (copy_in_user(&pa_data->flags,
+ &pa_data32->flags,
+ sizeof(uint32_t)) ||
+ copy_in_user(&pa_data->hue_adj,
+ &pa_data32->hue_adj,
+ sizeof(uint32_t)) ||
+ copy_in_user(&pa_data->sat_adj,
+ &pa_data32->sat_adj,
+ sizeof(uint32_t)) ||
+ copy_in_user(&pa_data->val_adj,
+ &pa_data32->val_adj,
+ sizeof(uint32_t)) ||
+ copy_in_user(&pa_data->cont_adj,
+ &pa_data32->cont_adj,
+ sizeof(uint32_t)))
+ return -EFAULT;
+
+ return 0;
+}
+
+static int __to_user_pa_cfg(
+ struct mdp_pa_cfg32 __user *pa_data32,
+ struct mdp_pa_cfg __user *pa_data)
+{
+ if (copy_in_user(&pa_data32->flags,
+ &pa_data->flags,
+ sizeof(uint32_t)) ||
+ copy_in_user(&pa_data32->hue_adj,
+ &pa_data->hue_adj,
+ sizeof(uint32_t)) ||
+ copy_in_user(&pa_data32->sat_adj,
+ &pa_data->sat_adj,
+ sizeof(uint32_t)) ||
+ copy_in_user(&pa_data32->val_adj,
+ &pa_data->val_adj,
+ sizeof(uint32_t)) ||
+ copy_in_user(&pa_data32->cont_adj,
+ &pa_data->cont_adj,
+ sizeof(uint32_t)))
+ return -EFAULT;
+
+ return 0;
+}
+
+static int __from_user_pa_cfg_data(
+ struct mdp_pa_cfg_data32 __user *pa_cfg32,
+ struct mdp_pa_cfg_data __user *pa_cfg)
+{
+ if (copy_in_user(&pa_cfg->block,
+ &pa_cfg32->block,
+ sizeof(uint32_t)))
+ return -EFAULT;
+ if (__from_user_pa_cfg(
+ compat_ptr((uintptr_t)&pa_cfg32->pa_data),
+ &pa_cfg->pa_data))
+ return -EFAULT;
+
+ return 0;
+}
+
+static int __to_user_pa_cfg_data(
+ struct mdp_pa_cfg_data32 __user *pa_cfg32,
+ struct mdp_pa_cfg_data __user *pa_cfg)
+{
+ if (copy_in_user(&pa_cfg32->block,
+ &pa_cfg->block,
+ sizeof(uint32_t)))
+ return -EFAULT;
+ if (__to_user_pa_cfg(
+ compat_ptr((uintptr_t)&pa_cfg32->pa_data),
+ &pa_cfg->pa_data))
+ return -EFAULT;
+
+ return 0;
+}
+
static int __pp_compat_alloc(struct msmfb_mdp_pp32 __user *pp32,
struct msmfb_mdp_pp __user **pp,
uint32_t op)
@@ -1026,6 +1106,19 @@ static int mdss_compat_pp_ioctl(struct fb_info *info, unsigned int cmd,
goto pp_compat_exit;
ret = mdss_fb_do_ioctl(info, cmd, (unsigned long) pp);
break;
+ case mdp_op_pa_cfg:
+ ret = __from_user_pa_cfg_data(
+ compat_ptr((uintptr_t)&pp32->data.pa_cfg_data),
+ &pp->data.pa_cfg_data);
+ if (ret)
+ goto pp_compat_exit;
+ ret = mdss_fb_do_ioctl(info, cmd, (unsigned long) pp);
+ if (ret)
+ goto pp_compat_exit;
+ ret = __to_user_pa_cfg_data(
+ compat_ptr((uintptr_t)&pp32->data.pa_cfg_data),
+ &pp->data.pa_cfg_data);
+ break;
default:
break;
}