drm: Expose panel_info sysfs node
Change-Id: Ifafb2f5da69aa1e23cec3c9b7868afc32fee4970 Signed-off-by: Pranav Vashi <neobuddy89@gmail.com>
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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
|
||||
};
|
||||
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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);
|
||||
};
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user