@@ -3958,14 +3958,76 @@ static int displayport_config_ctl_show(struct seq_file *m, void *data)
static int displayport_config_ctl_open(struct inode *inode,
struct file *file)
{
- return 0;
+ struct drm_device *dev = inode->i_private;
+
+ return single_open(file, displayport_config_ctl_show, dev);
}
static ssize_t displayport_config_ctl_write(struct file *file,
const char __user *ubuf,
size_t len, loff_t *offp)
{
- return 0;
+ char *input_buffer;
+ int status = 0;
+ struct seq_file *m;
+ struct drm_device *dev;
+ struct drm_connector *connector;
+ struct drm_encoder *drm_enc;
+ struct intel_encoder *intel_encoder;
+ struct intel_connector *intel_connector;
+ struct intel_dp *intel_dp;
+
+ m = file->private_data;
+ if (!m) {
+ status = -ENODEV;
+ return status;
+ }
+ dev = m->private;
+
+ if (!dev) {
+ status = -ENODEV;
+ return status;
+ }
+
+ 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, &dev->mode_config.connector_list, head) {
+ intel_connector = to_intel_connector(connector);
+ intel_encoder = intel_connector->encoder;
+ drm_enc = &intel_encoder->base;
+ if (connector->connector_type ==
+ DRM_MODE_CONNECTOR_DisplayPort) {
+ if (intel_encoder->type == INTEL_OUTPUT_DISPLAYPORT ||
+ intel_encoder->type == INTEL_OUTPUT_UNKNOWN) {
+ intel_dp = enc_to_intel_dp(drm_enc);
+ status = displayport_parse_config(input_buffer,
+ len,
+ intel_dp);
+ if (status < 0)
+ goto out;
+ }
+ }
+ }
+out:
+ kfree(input_buffer);
+ if (status < 0)
+ return status;
+
+ *offp += len;
+ return len;
}
static const struct file_operations i915_displayport_config_ctl_fops = {
This patch is a combination of sections out of the following two previous patches: [PATCH 05/10] drm/i915: Add debugfs interface for Displayport debug and compliance testing [PATCH 07/10] drm/i915: Add structures for Displayport compliance testing parameters This patch implements the debugfs functions for 'open' and 'write' as they are specified in the file ops structure. The 'open' function outputs Displayport data to the appropriate debugfs file while the 'write' function handles parsing of user data written to that same file. Signed-off-by: Todd Previte <tprevite@gmail.com> --- drivers/gpu/drm/i915/i915_debugfs.c | 66 +++++++++++++++++++++++++++++++++++-- 1 file changed, 64 insertions(+), 2 deletions(-)