From 2e4141400cf6542b50cb64ea89cd4c207c8caa5d Mon Sep 17 00:00:00 2001 From: Ping Li Date: Wed, 23 Jul 2014 15:25:59 -0700 Subject: msm: mdss: Create sysfs node for partial update state Create a sysfs node for partial update state. This dyn_pu sysfs node will be used to show whether partial update feature is enabled or not, so the we can dynamically enable/disable post processing features accordingly. Change-Id: I7012e7830575942299ae07c956eb27244e622365 Signed-off-by: Ping Li --- drivers/video/fbdev/msm/mdss_mdp.h | 1 + drivers/video/fbdev/msm/mdss_mdp_overlay.c | 38 ++++++++++++++++++++++++++++++ 2 files changed, 39 insertions(+) diff --git a/drivers/video/fbdev/msm/mdss_mdp.h b/drivers/video/fbdev/msm/mdss_mdp.h index 4df2d78756af..be42b9a652d4 100644 --- a/drivers/video/fbdev/msm/mdss_mdp.h +++ b/drivers/video/fbdev/msm/mdss_mdp.h @@ -505,6 +505,7 @@ struct mdss_overlay_private { struct mdss_mdp_data free_list[MAX_FREE_LIST_SIZE]; int free_list_size; int ad_state; + int dyn_pu_state; bool handoff; u32 splash_mem_addr; diff --git a/drivers/video/fbdev/msm/mdss_mdp_overlay.c b/drivers/video/fbdev/msm/mdss_mdp_overlay.c index a416e6cf417d..a17d7bcc047a 100644 --- a/drivers/video/fbdev/msm/mdss_mdp_overlay.c +++ b/drivers/video/fbdev/msm/mdss_mdp_overlay.c @@ -2365,14 +2365,51 @@ static ssize_t mdss_mdp_ad_store(struct device *dev, return count; } +static ssize_t mdss_mdp_dyn_pu_show(struct device *dev, + struct device_attribute *attr, char *buf) +{ + struct fb_info *fbi = dev_get_drvdata(dev); + struct msm_fb_data_type *mfd = fbi->par; + struct mdss_overlay_private *mdp5_data = mfd_to_mdp5_data(mfd); + int ret, state; + + state = (mdp5_data->dyn_pu_state >= 0) ? mdp5_data->dyn_pu_state : -1; + + ret = scnprintf(buf, PAGE_SIZE, "%d", state); + + return ret; +} + +static ssize_t mdss_mdp_dyn_pu_store(struct device *dev, + struct device_attribute *attr, const char *buf, size_t count) +{ + struct fb_info *fbi = dev_get_drvdata(dev); + struct msm_fb_data_type *mfd = fbi->par; + struct mdss_overlay_private *mdp5_data = mfd_to_mdp5_data(mfd); + int ret, dyn_pu; + + ret = kstrtoint(buf, 10, &dyn_pu); + if (ret) { + pr_err("Invalid input for partial udpate: ret = %d\n", ret); + return ret; + } + + mdp5_data->dyn_pu_state = dyn_pu; + sysfs_notify(&dev->kobj, NULL, "dyn_pu"); + + return count; +} static DEVICE_ATTR(vsync_event, S_IRUGO, mdss_mdp_vsync_show_event, NULL); static DEVICE_ATTR(ad, S_IRUGO | S_IWUSR | S_IWGRP, mdss_mdp_ad_show, mdss_mdp_ad_store); +static DEVICE_ATTR(dyn_pu, S_IRUGO | S_IWUSR | S_IWGRP, mdss_mdp_dyn_pu_show, + mdss_mdp_dyn_pu_store); static struct attribute *mdp_overlay_sysfs_attrs[] = { &dev_attr_vsync_event.attr, &dev_attr_ad.attr, + &dev_attr_dyn_pu.attr, NULL, }; @@ -4037,6 +4074,7 @@ int mdss_mdp_overlay_init(struct msm_fb_data_type *mfd) rc = 0; } } + mdp5_data->dyn_pu_state = mfd->panel_info->partial_update_enabled; if (mdss_mdp_pp_overlay_init(mfd)) pr_warn("Failed to initialize pp overlay data.\n"); -- cgit v1.2.3