Loading drivers/video/msm/mdss/mdss_mdp.h +1 −0 Original line number Diff line number Diff line Loading @@ -532,6 +532,7 @@ struct mdss_overlay_private { struct list_head bufs_freelist; int ad_state; int dyn_pu_state; bool handoff; u32 splash_mem_addr; Loading drivers/video/msm/mdss/mdss_mdp_overlay.c +38 −0 Original line number Diff line number Diff line Loading @@ -2501,14 +2501,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, }; Loading Loading @@ -4409,6 +4446,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"); Loading Loading
drivers/video/msm/mdss/mdss_mdp.h +1 −0 Original line number Diff line number Diff line Loading @@ -532,6 +532,7 @@ struct mdss_overlay_private { struct list_head bufs_freelist; int ad_state; int dyn_pu_state; bool handoff; u32 splash_mem_addr; Loading
drivers/video/msm/mdss/mdss_mdp_overlay.c +38 −0 Original line number Diff line number Diff line Loading @@ -2501,14 +2501,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, }; Loading Loading @@ -4409,6 +4446,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"); Loading