diff options
author | Wlogsky <wlogsky@google.com> | 2023-06-06 02:05:44 +0000 |
---|---|---|
committer | Wlogsky <wlogsky@google.com> | 2023-06-28 02:09:02 +0000 |
commit | d80cf63a737510ca3562a4941717ffb28e47dc8f (patch) | |
tree | fac12150ab8cb37c46901fd3eb06ee188be951ba | |
parent | 4216bb955341b142b326a07a7a2d217450e4cb7f (diff) | |
download | display-drivers-d80cf63a737510ca3562a4941717ffb28e47dc8f.tar.gz |
panel: Add adb command to read panel vendor string
Add adb command that can read vendor string from dtsi. Since we have
done panel detection in the bootloader, we could leverage it and simply
use the panel name in kernel dtsi, so that we don't need to
read 0xDA every time.
And the below is the list of vendor string of the panels.
Eos-BOE-WF012FBM
Eos-SDC-AMB120DD01
P11-BOE-RM690C0
FSE22-BOE-WJ013PGM
FSE22-SDC-AMB127FP01
FL22-BOE-WJ014SGM
Bug: 271373896
Test: adb shell "cat /sys/class/drm/sde-conn-0-DSI-1/vendor_string"
Change-Id: I150acb9c4e85c0d3900f4a84c748ae2d37772f07
Signed-off-by: Wlogsky <wlogsky@google.com>
-rw-r--r-- | msm/dsi/dsi_display.c | 15 | ||||
-rw-r--r-- | msm/dsi/dsi_display.h | 12 | ||||
-rw-r--r-- | msm/sde/sde_connector.c | 31 | ||||
-rw-r--r-- | msm/sde/sde_connector.h | 12 | ||||
-rw-r--r-- | msm/sde/sde_kms.c | 1 |
5 files changed, 66 insertions, 5 deletions
diff --git a/msm/dsi/dsi_display.c b/msm/dsi/dsi_display.c index fabc981a..476b54e8 100644 --- a/msm/dsi/dsi_display.c +++ b/msm/dsi/dsi_display.c @@ -1393,6 +1393,21 @@ int dsi_display_set_hbm(struct drm_connector *connector, bool cmd, void *disp) return rc; } +int dsi_display_get_vendor_string(struct drm_connector *connector, void *display, char *buf, + u32 buf_len) +{ + struct dsi_display *disp = (struct dsi_display *)display; + int len = 0; + + if (!disp || !disp->panel) { + DSI_ERR("Invalid param(s) dsi_display or dsi_panel"); + return -EINVAL; + } + + len = scnprintf(buf, buf_len, "%s", disp->panel->name); + return len; +} + #if IS_ENABLED(CONFIG_DEBUG_FS) static bool dsi_display_is_te_based_esd(struct dsi_display *display) { diff --git a/msm/dsi/dsi_display.h b/msm/dsi/dsi_display.h index 2458fb13..144af668 100644 --- a/msm/dsi/dsi_display.h +++ b/msm/dsi/dsi_display.h @@ -879,4 +879,16 @@ int dsi_display_ctrl_vreg_off(struct dsi_display *display); */ int dsi_display_set_hbm(struct drm_connector *connector, bool cmd, void *disp); +/** + * dsi_display_get_vendor_string() - Get panel's vendor string + * @connector: Pointer to drm connector structure + * @display: Pointer to private display structure + * @buf: String buffer + * @buf_len: String buffer length + * + * Return: Size of string written to buffer + */ +int dsi_display_get_vendor_string(struct drm_connector *connector, void *display, char *buf, + u32 buf_len); + #endif /* _DSI_DISPLAY_H_ */ diff --git a/msm/sde/sde_connector.c b/msm/sde/sde_connector.c index ba3b200d..3e869bae 100644 --- a/msm/sde/sde_connector.c +++ b/msm/sde/sde_connector.c @@ -3386,14 +3386,35 @@ static ssize_t twm_enable_show(struct device *device, return scnprintf(buf, PAGE_SIZE, "%d\n", sde_conn->twm_en); } +static ssize_t vendor_string_show(struct device *device, struct device_attribute *attr, char *buf) +{ + struct drm_connector *conn; + struct sde_connector *sde_conn; + int len = 0; + + conn = dev_get_drvdata(device); + sde_conn = to_sde_connector(conn); + if (!sde_conn->ops.get_vendor_string) { + SDE_ERROR("no cmd get_vendor_string for connector name %s\n", sde_conn->name); + return -EINVAL; + } + + len = sde_conn->ops.get_vendor_string(conn, sde_conn->display, buf, PAGE_SIZE); + if (len <= 0) { + SDE_ERROR("cannot get vendor string %s\n", sde_conn->name); + return -EINVAL; + } + + return len; +} + static DEVICE_ATTR_RO(panel_power_state); static DEVICE_ATTR_RW(twm_enable); +static DEVICE_ATTR_RO(vendor_string); -static struct attribute *sde_connector_dev_attrs[] = { - &dev_attr_panel_power_state.attr, - &dev_attr_twm_enable.attr, - NULL -}; +static struct attribute *sde_connector_dev_attrs[] = { &dev_attr_panel_power_state.attr, + &dev_attr_twm_enable.attr, + &dev_attr_vendor_string.attr, NULL }; static const struct attribute_group sde_connector_attr_group = { .attrs = sde_connector_dev_attrs, diff --git a/msm/sde/sde_connector.h b/msm/sde/sde_connector.h index c155bc68..cd0b2fa1 100644 --- a/msm/sde/sde_connector.h +++ b/msm/sde/sde_connector.h @@ -446,6 +446,18 @@ struct sde_connector_ops { * Return: Zero on Success */ int (*set_hbm)(struct drm_connector *connector, bool cmd, void *disp); + + /** + * get_vendor_string() - Get panel's vendor string + * @connector: Pointer to drm connector structure + * @display: Pointer to private display structure + * @buf: String buffer + * @buf_len: String buffer length + * + * Return: String length written to buffer + */ + int (*get_vendor_string)(struct drm_connector *connector, void *display, char *buf, + u32 buf_len); }; /** diff --git a/msm/sde/sde_kms.c b/msm/sde/sde_kms.c index 2d834db7..5cfe7e24 100644 --- a/msm/sde/sde_kms.c +++ b/msm/sde/sde_kms.c @@ -1830,6 +1830,7 @@ static int _sde_kms_setup_displays(struct drm_device *dev, .get_num_lm_from_mode = dsi_conn_get_lm_from_mode, .update_transfer_time = dsi_display_update_transfer_time, .set_hbm = dsi_display_set_hbm, + .get_vendor_string = dsi_display_get_vendor_string, }; static const struct sde_connector_ops wb_ops = { .post_init = sde_wb_connector_post_init, |