From: Todd Previte <tprevite@gmail.com>
To: intel-gfx@lists.freedesktop.org
Subject: [PATCH 9/9] drm/i915: Add debugfs write and test param parsing functions for DP test control
Date: Wed, 18 Feb 2015 20:00:37 -0700 [thread overview]
Message-ID: <1424314837-32434-10-git-send-email-tprevite@gmail.com> (raw)
In-Reply-To: <1424314837-32434-1-git-send-email-tprevite@gmail.com>
Adds and implements the 'write' function for the debugfs i915_dp_test_ctrl file.
Also adds in the required parsing function to read in the data from the file
once the user app has written its data to it.
V2:
- N/A
V3:
- Removed use of dp_connector_is_valid()
- Replaced with DRM connector check to match other functions
- Updated the dp_parse_test_ctl function to use the new enums
instead of #defines
Signed-off-by: Todd Previte <tprevite@gmail.com>
---
drivers/gpu/drm/i915/i915_debugfs.c | 105 ++++++++++++++++++++++++++++++++++++
1 file changed, 105 insertions(+)
diff --git a/drivers/gpu/drm/i915/i915_debugfs.c b/drivers/gpu/drm/i915/i915_debugfs.c
index 45c0fde..e180813 100644
--- a/drivers/gpu/drm/i915/i915_debugfs.c
+++ b/drivers/gpu/drm/i915/i915_debugfs.c
@@ -4073,6 +4073,46 @@ static int dp_parse_config(char *input_buffer,
return status;
}
+static int dp_parse_test_ctl(char *input_buffer,
+ ssize_t buffer_size,
+ struct intel_dp *intel_dp)
+{
+ char *ctrl_lines[DP_CTRL_PARAM_COUNT];
+ int line_count;
+ int test_data;
+ int active;
+ int response;
+ char *conn_name; /* Connector name in the file */
+ char *dp_name; /* Connector name in the intel_dp struct */
+
+ if (!input_buffer)
+ return -EIO;
+
+ line_count = dp_tokenize_config(input_buffer, ctrl_lines);
+ if (line_count != DP_CTRL_PARAM_COUNT)
+ return -EIO;
+
+ conn_name = ctrl_lines[DP_CTRL_PARAM_CONNECTOR];
+ dp_name = intel_dp->attached_connector->base.name;
+
+ if (strncmp(conn_name, dp_name, strlen(dp_name)) == 0) {
+ kstrtol(ctrl_lines[DP_CTRL_PARAM_TEST_DATA],
+ 16,
+ (long *)&test_data);
+ kstrtol(ctrl_lines[DP_CTRL_PARAM_TEST_ACTIVE],
+ 16,
+ (long *)&active);
+ kstrtol(ctrl_lines[DP_CTRL_PARAM_TEST_RESPONSE],
+ 16,
+ (long *)&response);
+ } else {
+ DRM_DEBUG_DRIVER("Connector names don't match\n");
+ return -EIO;
+ }
+
+ return 0;
+}
+
static int i915_displayport_config_ctl_show(struct seq_file *m, void *data)
{
struct drm_device *dev = m->private;
@@ -4180,6 +4220,70 @@ static const struct file_operations i915_displayport_config_ctl_fops = {
.write = i915_displayport_config_ctl_write
};
+static ssize_t i915_displayport_test_ctl_write(struct file *file,
+ const char __user *ubuf,
+ size_t len, loff_t *offp)
+{
+ char *input_buffer;
+ int status = 0;
+ struct seq_file *m;
+ struct drm_device *dev;
+ struct drm_connector *connector;
+ struct list_head *connector_list;
+ struct intel_dp *intel_dp;
+
+ m = file->private_data;
+ if (!m) {
+ status = -ENODEV;
+ return status;
+ }
+ dev = m->private;
+
+ if (!dev) {
+ status = -ENODEV;
+ return status;
+ }
+ connector_list = &dev->mode_config.connector_list;
+
+ if (len == 0)
+ return 0;
+
+ input_buffer = kmalloc(len + 1, GFP_KERNEL);
+ if (!input_buffer)
+ return -ENOMEM;
+
+ if (copy_from_user(input_buffer, ubuf, len)) {
+ status = -EFAULT;
+ goto out;
+ }
+
+ input_buffer[len] = '\0';
+ DRM_DEBUG_DRIVER("Copied %d bytes from user\n", (unsigned int)len);
+
+ list_for_each_entry(connector, connector_list, head) {
+
+ if (connector->connector_type !=
+ DRM_MODE_CONNECTOR_DisplayPort)
+ continue;
+
+ if (connector->connector_type ==
+ DRM_MODE_CONNECTOR_DisplayPort &&
+ connector->status == connector_status_connected) {
+ intel_dp = enc_to_intel_dp(connector->encoder);
+ status = dp_parse_test_ctl(input_buffer, len, intel_dp);
+ if (status < 0)
+ goto out;
+ }
+ }
+out:
+ kfree(input_buffer);
+ if (status < 0)
+ return status;
+
+ *offp += len;
+ return len;
+}
+
static int i915_displayport_test_ctl_show(struct seq_file *m, void *data)
{
struct drm_device *dev = m->private;
@@ -4232,6 +4336,7 @@ static int i915_displayport_test_ctl_open(struct inode *inode,
static const struct file_operations i915_dp_test_ctl_fops = {
.owner = THIS_MODULE,
.open = i915_displayport_test_ctl_open,
+ .write = i915_displayport_test_ctl_write,
.read = seq_read,
.llseek = seq_lseek,
.release = single_release,
--
1.9.1
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx
next prev parent reply other threads:[~2015-02-19 3:00 UTC|newest]
Thread overview: 23+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-02-19 3:00 Displayport Compliance Testing V3 Todd Previte
2015-02-19 3:00 ` [PATCH 1/9] drm/i915: Add automated testing support for Displayport compliance testing Todd Previte
2015-02-19 3:00 ` [PATCH 2/9] drm/i915: Update intel_dp_check_link_status() " Todd Previte
2015-02-19 3:00 ` [PATCH 3/9] drm/i915: Add a delay in Displayport AUX transactions for " Todd Previte
2015-02-19 3:00 ` [PATCH 4/9] drm/i915: Add debugfs functions for Displayport " Todd Previte
2015-03-09 17:57 ` Jani Nikula
2015-03-11 17:19 ` Todd Previte
2015-02-19 3:00 ` [PATCH 5/9] drm/i915: Update the EDID automated compliance test function Todd Previte
2015-02-26 17:40 ` [PATCH 5/9 V4] " Todd Previte
2015-02-19 3:00 ` [PATCH 6/9] drm/i915: Update intel_dp_compute_config() to handle compliance test requests Todd Previte
2015-02-19 3:00 ` [PATCH 7/9] drm/i915: Update intel_dp_hpd_pulse() to check link status for non-MST operation Todd Previte
2015-03-05 18:22 ` [PATCH] " Todd Previte
2015-03-06 16:34 ` Daniel Vetter
2015-03-09 15:34 ` Jesse Barnes
2015-03-09 17:29 ` Daniel Vetter
2015-03-09 19:07 ` Jesse Barnes
2015-03-09 21:04 ` Ville Syrjälä
2015-03-11 18:37 ` Jesse Barnes
2015-03-11 19:10 ` Ville Syrjälä
2015-03-11 19:38 ` Daniel Vetter
2015-02-19 3:00 ` [PATCH 8/9] drm/i915: Add new debugfs file for Displaypor compliance test control Todd Previte
2015-02-19 3:00 ` Todd Previte [this message]
2015-02-19 5:55 ` [PATCH 9/9] drm/i915: Add debugfs write and test param parsing functions for DP " shuang.he
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1424314837-32434-10-git-send-email-tprevite@gmail.com \
--to=tprevite@gmail.com \
--cc=intel-gfx@lists.freedesktop.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox