Loading drivers/video/msm/mdss/mdss_fb.c +57 −0 Original line number Diff line number Diff line Loading @@ -661,6 +661,60 @@ static int mdss_fb_blanking_mode_switch(struct msm_fb_data_type *mfd, int mode) return 0; } static ssize_t mdss_fb_change_dfps_mode(struct device *dev, struct device_attribute *attr, const char *buf, size_t len) { struct fb_info *fbi = dev_get_drvdata(dev); struct msm_fb_data_type *mfd = (struct msm_fb_data_type *)fbi->par; struct mdss_panel_data *pdata; struct mdss_panel_info *pinfo; u32 dfps_mode; pdata = dev_get_platdata(&mfd->pdev->dev); if (!pdata) { pr_err("no panel connected!\n"); return len; } pinfo = &pdata->panel_info; if (sscanf(buf, "%d", &dfps_mode) != 1) { pr_err("sccanf buf error!\n"); return len; } if (dfps_mode >= DFPS_MODE_MAX) { pinfo->dynamic_fps = false; return len; } pinfo->dynamic_fps = true; pinfo->dfps_update = dfps_mode; return len; } static ssize_t mdss_fb_get_dfps_mode(struct device *dev, struct device_attribute *attr, char *buf) { struct fb_info *fbi = dev_get_drvdata(dev); struct msm_fb_data_type *mfd = (struct msm_fb_data_type *)fbi->par; struct mdss_panel_data *pdata; struct mdss_panel_info *pinfo; int ret; pdata = dev_get_platdata(&mfd->pdev->dev); if (!pdata) { pr_err("no panel connected!\n"); return -EINVAL; } pinfo = &pdata->panel_info; ret = scnprintf(buf, PAGE_SIZE, "dfps enabled=%d mode=%d\n", pinfo->dynamic_fps, pinfo->dfps_update); return ret; } static DEVICE_ATTR(msm_fb_type, S_IRUGO, mdss_fb_get_type, NULL); static DEVICE_ATTR(msm_fb_split, S_IRUGO | S_IWUSR, mdss_fb_show_split, mdss_fb_store_split); Loading @@ -675,6 +729,8 @@ static DEVICE_ATTR(msm_fb_thermal_level, S_IRUGO | S_IWUSR, mdss_fb_get_thermal_level, mdss_fb_set_thermal_level); static DEVICE_ATTR(msm_fb_panel_status, S_IRUGO, mdss_fb_get_panel_status, NULL); static DEVICE_ATTR(msm_fb_dfps_mode, S_IRUGO | S_IWUSR, mdss_fb_get_dfps_mode, mdss_fb_change_dfps_mode); static struct attribute *mdss_fb_attrs[] = { &dev_attr_msm_fb_type.attr, &dev_attr_msm_fb_split.attr, Loading @@ -685,6 +741,7 @@ static struct attribute *mdss_fb_attrs[] = { &dev_attr_msm_fb_src_split_info.attr, &dev_attr_msm_fb_thermal_level.attr, &dev_attr_msm_fb_panel_status.attr, &dev_attr_msm_fb_dfps_mode.attr, NULL, }; Loading drivers/video/msm/mdss/mdss_panel.h +1 −0 Original line number Diff line number Diff line Loading @@ -325,6 +325,7 @@ enum dynamic_fps_update { DFPS_IMMEDIATE_CLK_UPDATE_MODE, DFPS_IMMEDIATE_PORCH_UPDATE_MODE_VFP, DFPS_IMMEDIATE_PORCH_UPDATE_MODE_HFP, DFPS_MODE_MAX }; enum lvds_mode { Loading Loading
drivers/video/msm/mdss/mdss_fb.c +57 −0 Original line number Diff line number Diff line Loading @@ -661,6 +661,60 @@ static int mdss_fb_blanking_mode_switch(struct msm_fb_data_type *mfd, int mode) return 0; } static ssize_t mdss_fb_change_dfps_mode(struct device *dev, struct device_attribute *attr, const char *buf, size_t len) { struct fb_info *fbi = dev_get_drvdata(dev); struct msm_fb_data_type *mfd = (struct msm_fb_data_type *)fbi->par; struct mdss_panel_data *pdata; struct mdss_panel_info *pinfo; u32 dfps_mode; pdata = dev_get_platdata(&mfd->pdev->dev); if (!pdata) { pr_err("no panel connected!\n"); return len; } pinfo = &pdata->panel_info; if (sscanf(buf, "%d", &dfps_mode) != 1) { pr_err("sccanf buf error!\n"); return len; } if (dfps_mode >= DFPS_MODE_MAX) { pinfo->dynamic_fps = false; return len; } pinfo->dynamic_fps = true; pinfo->dfps_update = dfps_mode; return len; } static ssize_t mdss_fb_get_dfps_mode(struct device *dev, struct device_attribute *attr, char *buf) { struct fb_info *fbi = dev_get_drvdata(dev); struct msm_fb_data_type *mfd = (struct msm_fb_data_type *)fbi->par; struct mdss_panel_data *pdata; struct mdss_panel_info *pinfo; int ret; pdata = dev_get_platdata(&mfd->pdev->dev); if (!pdata) { pr_err("no panel connected!\n"); return -EINVAL; } pinfo = &pdata->panel_info; ret = scnprintf(buf, PAGE_SIZE, "dfps enabled=%d mode=%d\n", pinfo->dynamic_fps, pinfo->dfps_update); return ret; } static DEVICE_ATTR(msm_fb_type, S_IRUGO, mdss_fb_get_type, NULL); static DEVICE_ATTR(msm_fb_split, S_IRUGO | S_IWUSR, mdss_fb_show_split, mdss_fb_store_split); Loading @@ -675,6 +729,8 @@ static DEVICE_ATTR(msm_fb_thermal_level, S_IRUGO | S_IWUSR, mdss_fb_get_thermal_level, mdss_fb_set_thermal_level); static DEVICE_ATTR(msm_fb_panel_status, S_IRUGO, mdss_fb_get_panel_status, NULL); static DEVICE_ATTR(msm_fb_dfps_mode, S_IRUGO | S_IWUSR, mdss_fb_get_dfps_mode, mdss_fb_change_dfps_mode); static struct attribute *mdss_fb_attrs[] = { &dev_attr_msm_fb_type.attr, &dev_attr_msm_fb_split.attr, Loading @@ -685,6 +741,7 @@ static struct attribute *mdss_fb_attrs[] = { &dev_attr_msm_fb_src_split_info.attr, &dev_attr_msm_fb_thermal_level.attr, &dev_attr_msm_fb_panel_status.attr, &dev_attr_msm_fb_dfps_mode.attr, NULL, }; Loading
drivers/video/msm/mdss/mdss_panel.h +1 −0 Original line number Diff line number Diff line Loading @@ -325,6 +325,7 @@ enum dynamic_fps_update { DFPS_IMMEDIATE_CLK_UPDATE_MODE, DFPS_IMMEDIATE_PORCH_UPDATE_MODE_VFP, DFPS_IMMEDIATE_PORCH_UPDATE_MODE_HFP, DFPS_MODE_MAX }; enum lvds_mode { Loading