From: Mark Yao Date: Sun, 15 Jan 2017 08:50:24 +0000 (+0800) Subject: drm/sysfs: add current display mode to sysfs X-Git-Tag: firefly_0821_release~738 X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=0881d3360a9f6da66294c666c7d0a27ef55f8589;p=firefly-linux-kernel-4.4.55.git drm/sysfs: add current display mode to sysfs Change-Id: I2a1a699bac74d9fe71151ba1eb8e33e0683a48a5 Signed-off-by: Mark Yao --- diff --git a/drivers/gpu/drm/drm_sysfs.c b/drivers/gpu/drm/drm_sysfs.c index 79f747296868..1dc9f304cc8c 100644 --- a/drivers/gpu/drm/drm_sysfs.c +++ b/drivers/gpu/drm/drm_sysfs.c @@ -296,6 +296,35 @@ static ssize_t modes_show(struct device *device, return written; } +static ssize_t mode_show(struct device *device, + struct device_attribute *attr, + char *buf) +{ + struct drm_connector *connector = to_drm_connector(device); + struct drm_display_mode *mode; + struct drm_crtc_state *crtc_state; + bool interlaced; + int written = 0; + + if (!connector->state || !connector->state->crtc) + return written; + + crtc_state = connector->state->crtc->state; + if (!crtc_state) + return written; + + mode = &crtc_state->mode; + + interlaced = !!(mode->flags & DRM_MODE_FLAG_INTERLACE); + written += snprintf(buf + written, PAGE_SIZE - written, + "%dx%d%s%d\n", + mode->hdisplay, mode->vdisplay, + interlaced ? "i" : "p", + drm_mode_vrefresh(mode)); + + return written; +} + static ssize_t tv_subconnector_show(struct device *device, struct device_attribute *attr, char *buf) @@ -396,12 +425,14 @@ static DEVICE_ATTR_RW(status); static DEVICE_ATTR_RO(enabled); static DEVICE_ATTR_RO(dpms); static DEVICE_ATTR_RO(modes); +static DEVICE_ATTR_RO(mode); static struct attribute *connector_dev_attrs[] = { &dev_attr_status.attr, &dev_attr_enabled.attr, &dev_attr_dpms.attr, &dev_attr_modes.attr, + &dev_attr_mode.attr, NULL };