mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-09 05:39:54 -04:00
disp: msm: sde: add sysfs node to give panel power state
Add sysfs node on connecter to get the panel power state. This node is used by the HAL to read display power state. Change-Id: I717e4b87513a845c867871f93876fc7c88ff7b2f Signed-off-by: osaisruj <osaisruj@codeaurora.org>
This commit is contained in:
parent
b71e9dc15f
commit
0dd45aa272
3 changed files with 78 additions and 0 deletions
|
|
@ -1026,6 +1026,9 @@ void sde_connector_destroy(struct drm_connector *connector)
|
|||
|
||||
c_conn = to_sde_connector(connector);
|
||||
|
||||
if (c_conn->sysfs_dev)
|
||||
device_unregister(c_conn->sysfs_dev);
|
||||
|
||||
/* cancel if any pending esd work */
|
||||
sde_connector_schedule_status_work(connector, false);
|
||||
|
||||
|
|
@ -2845,6 +2848,65 @@ static int _sde_connector_install_properties(struct drm_device *dev,
|
|||
return 0;
|
||||
}
|
||||
|
||||
static ssize_t panel_power_state_show(struct device *device,
|
||||
struct device_attribute *attr, char *buf)
|
||||
{
|
||||
struct drm_connector *conn;
|
||||
struct sde_connector *sde_conn;
|
||||
|
||||
conn = dev_get_drvdata(device);
|
||||
sde_conn = to_sde_connector(conn);
|
||||
|
||||
return scnprintf(buf, PAGE_SIZE, "%d\n", sde_conn->last_panel_power_mode);
|
||||
}
|
||||
|
||||
static DEVICE_ATTR_RO(panel_power_state);
|
||||
|
||||
static struct attribute *sde_connector_dev_attrs[] = {
|
||||
&dev_attr_panel_power_state.attr,
|
||||
NULL
|
||||
};
|
||||
|
||||
static const struct attribute_group sde_connector_attr_group = {
|
||||
.attrs = sde_connector_dev_attrs,
|
||||
};
|
||||
static const struct attribute_group *sde_connector_attr_groups[] = {
|
||||
&sde_connector_attr_group,
|
||||
NULL,
|
||||
};
|
||||
|
||||
int sde_connector_post_init(struct drm_device *dev, struct drm_connector *conn)
|
||||
{
|
||||
struct sde_connector *c_conn;
|
||||
int rc = 0;
|
||||
|
||||
if (!dev || !dev->primary || !dev->primary->kdev || !conn) {
|
||||
SDE_ERROR("invalid input param(s)\n");
|
||||
rc = -EINVAL;
|
||||
return rc;
|
||||
}
|
||||
|
||||
c_conn = to_sde_connector(conn);
|
||||
|
||||
if (conn->connector_type != DRM_MODE_CONNECTOR_DSI)
|
||||
return rc;
|
||||
|
||||
c_conn->sysfs_dev =
|
||||
device_create_with_groups(dev->primary->kdev->class, dev->primary->kdev, 0,
|
||||
conn, sde_connector_attr_groups, "sde-conn-%d-%s", conn->index,
|
||||
conn->name);
|
||||
if (IS_ERR_OR_NULL(c_conn->sysfs_dev)) {
|
||||
SDE_ERROR("connector:%d sysfs create failed rc:%ld\n", &c_conn->base.index,
|
||||
PTR_ERR(c_conn->sysfs_dev));
|
||||
if (!c_conn->sysfs_dev)
|
||||
rc = -EINVAL;
|
||||
else
|
||||
rc = PTR_ERR(c_conn->sysfs_dev);
|
||||
}
|
||||
|
||||
return rc;
|
||||
}
|
||||
|
||||
struct drm_connector *sde_connector_init(struct drm_device *dev,
|
||||
struct drm_encoder *encoder,
|
||||
struct drm_panel *panel,
|
||||
|
|
|
|||
|
|
@ -511,6 +511,7 @@ struct sde_connector {
|
|||
int dpms_mode;
|
||||
int lp_mode;
|
||||
int last_panel_power_mode;
|
||||
struct device *sysfs_dev;
|
||||
|
||||
struct msm_property_info property_info;
|
||||
struct msm_property_data property_data[CONNECTOR_PROP_COUNT];
|
||||
|
|
@ -753,6 +754,15 @@ int sde_connector_set_property_for_commit(struct drm_connector *connector,
|
|||
struct drm_atomic_state *atomic_state,
|
||||
uint32_t property_idx, uint64_t value);
|
||||
|
||||
/**
|
||||
* sde_connector_post_init - update connector object with post initialization.
|
||||
* It can update the debugfs, sysfs, entries
|
||||
* @dev: Pointer to drm device struct
|
||||
* @conn: Pointer to drm connector
|
||||
* Returns: Zero on success
|
||||
*/
|
||||
int sde_connector_post_init(struct drm_device *dev, struct drm_connector *conn);
|
||||
|
||||
/**
|
||||
* sde_connector_init - create drm connector object for a given display
|
||||
* @dev: Pointer to drm device struct
|
||||
|
|
|
|||
|
|
@ -2176,6 +2176,8 @@ static int sde_kms_postinit(struct msm_kms *kms)
|
|||
struct sde_kms *sde_kms = to_sde_kms(kms);
|
||||
struct drm_device *dev;
|
||||
struct drm_crtc *crtc;
|
||||
struct drm_connector *conn;
|
||||
struct drm_connector_list_iter conn_iter;
|
||||
int rc;
|
||||
|
||||
if (!sde_kms || !sde_kms->dev || !sde_kms->dev->dev) {
|
||||
|
|
@ -2192,6 +2194,10 @@ static int sde_kms_postinit(struct msm_kms *kms)
|
|||
drm_for_each_crtc(crtc, dev)
|
||||
sde_crtc_post_init(dev, crtc);
|
||||
|
||||
drm_connector_list_iter_begin(dev, &conn_iter);
|
||||
drm_for_each_connector_iter(conn, &conn_iter)
|
||||
sde_connector_post_init(dev, conn);
|
||||
drm_connector_list_iter_end(&conn_iter);
|
||||
return rc;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue