diff options
| author | Linux Build Service Account <lnxbuild@localhost> | 2014-03-15 22:47:33 -0700 |
|---|---|---|
| committer | Gerrit - the friendly Code Review server <code-review@localhost> | 2014-03-15 22:47:32 -0700 |
| commit | 8c750d7eb96b331fc0f17fbf5ce17d1e5338bbd0 (patch) | |
| tree | a85a502bba9e2add4ac7b7ab5d210f0a1dc3ed66 | |
| parent | b81df7a8cbc5f3d984deda09cac9fd4051109c59 (diff) | |
| parent | d0504465408167458594a7f9344e64a77c808dd9 (diff) | |
Merge "msm: mdss: dsi: Share panel alignment restrictions through sysfs node"
| -rw-r--r-- | Documentation/devicetree/bindings/fb/mdss-dsi-panel.txt | 3 | ||||
| -rw-r--r-- | drivers/video/msm/mdss/mdss_dsi_panel.c | 31 | ||||
| -rw-r--r-- | drivers/video/msm/mdss/mdss_fb.c | 19 | ||||
| -rw-r--r-- | drivers/video/msm/mdss/mdss_panel.h | 4 |
4 files changed, 57 insertions, 0 deletions
diff --git a/Documentation/devicetree/bindings/fb/mdss-dsi-panel.txt b/Documentation/devicetree/bindings/fb/mdss-dsi-panel.txt index 1c9e1ef0343..348f7132d4a 100644 --- a/Documentation/devicetree/bindings/fb/mdss-dsi-panel.txt +++ b/Documentation/devicetree/bindings/fb/mdss-dsi-panel.txt @@ -288,6 +288,8 @@ Optional properties: - qcom,mdss-dsi-rx-eot-ignore: Boolean used to enable ignoring end of transmission packets. - qcom,mdss-dsi-tx-eot-append: Boolean used to enable appending end of transmission packets. - qcom,ulps-enabled: Boolean to enable support for Ultra Low Power State (ULPS) mode. +- qcom,panel-roi-alignment: Specifies the panel ROI alignment restrictions on its + left, top, width and height values Note, if a given optional qcom,* binding is not present, then the driver will configure the default values specified. @@ -392,5 +394,6 @@ Example: mdss-dsi-rx-eot-ignore; mdss-dsi-tx-eot-append; qcom,ulps-enabled; + qcom,panel-roi-alignment = <4 4 2 2>; }; }; diff --git a/drivers/video/msm/mdss/mdss_dsi_panel.c b/drivers/video/msm/mdss/mdss_dsi_panel.c index f257592b9fd..660eaeb7ce9 100644 --- a/drivers/video/msm/mdss/mdss_dsi_panel.c +++ b/drivers/video/msm/mdss/mdss_dsi_panel.c @@ -758,6 +758,35 @@ static int mdss_dsi_parse_reset_seq(struct device_node *np, return 0; } +static void mdss_dsi_parse_roi_alignment(struct device_node *np, + struct mdss_panel_info *pinfo) +{ + int len = 0; + u32 value[4]; + struct property *data; + data = of_find_property(np, "qcom,panel-roi-alignment", &len); + len /= sizeof(u32); + if (!data || (len != 4)) { + pr_debug("%s: Panel roi alignment not found", __func__); + } else { + int rc = of_property_read_u32_array(np, + "qcom,panel-roi-alignment", value, len); + if (rc) + pr_debug("%s: Error reading panel roi alignment values", + __func__); + else { + pinfo->xstart_pix_align = value[0]; + pinfo->width_pix_align = value[1]; + pinfo->ystart_pix_align = value[2]; + pinfo->height_pix_align = value[3]; + } + + pr_debug("%s: coordinate rules: [%d, %d, %d, %d]", __func__, + pinfo->xstart_pix_align, pinfo->width_pix_align, + pinfo->ystart_pix_align, pinfo->height_pix_align); + } +} + static int mdss_dsi_parse_panel_features(struct device_node *np, struct mdss_dsi_ctrl_pdata *ctrl) { @@ -1048,6 +1077,8 @@ static int mdss_panel_parse_dt(struct device_node *np, rc = of_property_read_u32(np, "qcom,mdss-dsi-init-delay-us", &tmp); pinfo->mipi.init_delay = (!rc ? tmp : 0); + mdss_dsi_parse_roi_alignment(np, pinfo); + mdss_dsi_parse_trigger(np, &(pinfo->mipi.mdp_trigger), "qcom,mdss-dsi-mdp-trigger"); diff --git a/drivers/video/msm/mdss/mdss_fb.c b/drivers/video/msm/mdss/mdss_fb.c index 9ccbb13d8c5..e56a20cfe94 100644 --- a/drivers/video/msm/mdss/mdss_fb.c +++ b/drivers/video/msm/mdss/mdss_fb.c @@ -382,12 +382,30 @@ static ssize_t mdss_fb_get_idle_notify(struct device *dev, return ret; } +static ssize_t mdss_fb_get_panel_info(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_panel_info *pinfo = mfd->panel_info; + int ret; + + ret = scnprintf(buf, PAGE_SIZE, + "pu_en=%d\nxalign=%d\nwalign=%d\nystart=%d\nhalign=%d", + pinfo->partial_update_enabled, pinfo->xstart_pix_align, + pinfo->width_pix_align, pinfo->ystart_pix_align, + pinfo->height_pix_align); + + return ret; +} + static DEVICE_ATTR(msm_fb_type, S_IRUGO, mdss_fb_get_type, NULL); static DEVICE_ATTR(msm_fb_split, S_IRUGO, mdss_fb_get_split, NULL); static DEVICE_ATTR(show_blank_event, S_IRUGO, mdss_mdp_show_blank_event, NULL); static DEVICE_ATTR(idle_time, S_IRUGO | S_IWUSR | S_IWGRP, mdss_fb_get_idle_time, mdss_fb_set_idle_time); static DEVICE_ATTR(idle_notify, S_IRUGO, mdss_fb_get_idle_notify, NULL); +static DEVICE_ATTR(msm_fb_panel_info, S_IRUGO, mdss_fb_get_panel_info, NULL); static struct attribute *mdss_fb_attrs[] = { &dev_attr_msm_fb_type.attr, @@ -395,6 +413,7 @@ static struct attribute *mdss_fb_attrs[] = { &dev_attr_show_blank_event.attr, &dev_attr_idle_time.attr, &dev_attr_idle_notify.attr, + &dev_attr_msm_fb_panel_info.attr, NULL, }; diff --git a/drivers/video/msm/mdss/mdss_panel.h b/drivers/video/msm/mdss/mdss_panel.h index a32b695a0c3..823bc94f443 100644 --- a/drivers/video/msm/mdss/mdss_panel.h +++ b/drivers/video/msm/mdss/mdss_panel.h @@ -320,6 +320,10 @@ struct mdss_panel_info { char dfps_update; int new_fps; u32 mode_gpio_state; + u32 xstart_pix_align; + u32 width_pix_align; + u32 ystart_pix_align; + u32 height_pix_align; u32 cont_splash_enabled; u32 partial_update_enabled; |
