drm: Expose panel_info sysfs node

Change-Id: Ifafb2f5da69aa1e23cec3c9b7868afc32fee4970
Signed-off-by: Pranav Vashi <neobuddy89@gmail.com>
This commit is contained in:
Arian
2020-09-09 19:31:17 +02:00
committed by Pranav Vashi
parent 5a8df3787e
commit 81629044da
4 changed files with 65 additions and 0 deletions

View File

@@ -369,6 +369,19 @@ void drm_bridge_pre_enable(struct drm_bridge *bridge)
}
EXPORT_SYMBOL(drm_bridge_pre_enable);
int drm_get_panel_info(struct drm_bridge *bridge, char *buf)
{
int rc = 0;
if (!bridge)
return rc;
if (bridge->funcs->disp_get_panel_info)
return bridge->funcs->disp_get_panel_info(bridge, buf);
return rc;
}
EXPORT_SYMBOL(drm_get_panel_info);
/**
* drm_bridge_enable - enables all bridges in the encoder chain
* @bridge: bridge control structure

View File

@@ -18,6 +18,7 @@
#include <linux/err.h>
#include <linux/export.h>
#include <drm/drm_encoder.h>
#include <drm/drm_sysfs.h>
#include <drm/drmP.h>
#include "drm_internal.h"
@@ -229,16 +230,48 @@ static ssize_t modes_show(struct device *device,
return written;
}
extern int drm_get_panel_info(struct drm_bridge *bridge, char *name);
static ssize_t panel_info_show(struct device *device,
struct device_attribute *attr,
char *buf)
{
int written = 0;
char pname[128] = {0};
struct drm_connector *connector = NULL;
struct drm_encoder *encoder = NULL;
struct drm_bridge *bridge = NULL;
connector = to_drm_connector(device);
if (!connector)
return written;
encoder = connector->encoder;
if (!encoder)
return written;
bridge = encoder->bridge;
if (!bridge)
return written;
written = drm_get_panel_info(bridge, pname);
if (written)
return snprintf(buf, PAGE_SIZE, "panel_name=%s\n", pname);
return written;
}
static DEVICE_ATTR_RW(status);
static DEVICE_ATTR_RO(enabled);
static DEVICE_ATTR_RO(dpms);
static DEVICE_ATTR_RO(modes);
static DEVICE_ATTR_RO(panel_info);
static struct attribute *connector_dev_attrs[] = {
&dev_attr_status.attr,
&dev_attr_enabled.attr,
&dev_attr_dpms.attr,
&dev_attr_modes.attr,
&dev_attr_panel_info.attr,
NULL
};

View File

@@ -296,6 +296,22 @@ int dsi_bridge_interface_enable(int timeout)
}
EXPORT_SYMBOL(dsi_bridge_interface_enable);
static int dsi_bridge_get_panel_info(struct drm_bridge *bridge, char *buf)
{
int rc = 0;
struct dsi_bridge *c_bridge = to_dsi_bridge(bridge);
if (!c_bridge) {
pr_err("Invalid params\n");
return rc;
}
if (c_bridge->display->name)
return snprintf(buf, PAGE_SIZE, c_bridge->display->name);
return rc;
}
static void dsi_bridge_enable(struct drm_bridge *bridge)
{
int rc = 0;
@@ -654,6 +670,7 @@ static const struct drm_bridge_funcs dsi_bridge_ops = {
.disable = dsi_bridge_disable,
.post_disable = dsi_bridge_post_disable,
.mode_set = dsi_bridge_mode_set,
.disp_get_panel_info = dsi_bridge_get_panel_info,
};
int dsi_conn_set_info_blob(struct drm_connector *connector,

View File

@@ -236,6 +236,8 @@ struct drm_bridge_funcs {
* The enable callback is optional.
*/
void (*enable)(struct drm_bridge *bridge);
int (*disp_get_panel_info)(struct drm_bridge *bridge, char *name);
};
/**