msm/dsi: create debug node for dynamic elvss
The debug node of dynamic elvss. This is for
debugging purpose during the development stage.
Bug: 170783990
Test:
1. Enable/Disable dynamic elvss and read register.
"echo 1 > d/qcom,mdss_dsi_sofef01_sdc_fhd_plus_cmd/
enable_dynamic_elvss"
2. Run over 3000 times by script
Change-Id: I9e55274f1a02109bdbe02b9eb8eb806fd3244f08
Signed-off-by: Lopy Cheng <lopycheng@google.com>
diff --git a/msm/dsi/dsi_backlight.c b/msm/dsi/dsi_backlight.c
index e20aafa..e4cb20c 100644
--- a/msm/dsi/dsi_backlight.c
+++ b/msm/dsi/dsi_backlight.c
@@ -472,7 +472,10 @@
if (!elvss)
return;
- mode = dsi_panel_get_elvss_mode(bd);
+ if (elvss->enable_dynamic_elvss == false)
+ mode = ELVSS_MODE_DISABLE;
+ else
+ mode = dsi_panel_get_elvss_mode(bd);
if ((mode == elvss->cur_mode) && (mode != ELVSS_MODE_ENABLE))
return;
@@ -577,6 +580,17 @@
bl->elvss = NULL;
}
+void dsi_panel_debugfs_create_dynamic_elvss(struct dentry *parent,
+ struct dynamic_elvss_data *elvss)
+{
+ if (!parent || !elvss)
+ return;
+
+ debugfs_create_bool("enable_dynamic_elvss", 0600,
+ parent, &elvss->enable_dynamic_elvss);
+
+}
+
static int dsi_panel_bl_parse_dynamic_elvss(struct device *parent,
struct dsi_backlight_config *bl, struct device_node *of_node)
{
@@ -639,6 +653,8 @@
dsi_panel_bl_elvss_clean_flag(bl);
+ bl->elvss->enable_dynamic_elvss = true;
+
return 0;
exit_free:
@@ -1358,6 +1374,20 @@
debugfs_remove_recursive(r);
}
+void dsi_panel_bl_elvss_debugfs_init(struct dentry *parent,
+ struct dsi_panel *panel)
+{
+ struct dsi_backlight_config *bl = &panel->bl_config;
+ struct dynamic_elvss_data *elvss;
+
+ if (!parent || !bl->elvss)
+ return;
+
+ elvss = bl->elvss;
+
+ dsi_panel_debugfs_create_dynamic_elvss(parent, elvss);
+}
+
static int dsi_panel_binned_lp_register(struct dsi_backlight_config *bl)
{
struct dsi_panel *panel = container_of(bl, struct dsi_panel, bl_config);
diff --git a/msm/dsi/dsi_panel.c b/msm/dsi/dsi_panel.c
index cae05e5..603f4bf 100644
--- a/msm/dsi/dsi_panel.c
+++ b/msm/dsi/dsi_panel.c
@@ -3938,6 +3938,7 @@
dsi_panel_debugfs_create_cmdsets_from_list(dir, panel);
dsi_panel_bl_debugfs_init(dir, panel);
+ dsi_panel_bl_elvss_debugfs_init(dir, panel);
return;
diff --git a/msm/dsi/dsi_panel.h b/msm/dsi/dsi_panel.h
index 459cdc2..524a565 100644
--- a/msm/dsi/dsi_panel.h
+++ b/msm/dsi/dsi_panel.h
@@ -169,6 +169,9 @@
/* Store the elvss data */
struct elvss_range nodes[DYNAMIC_ELVSS_RANGE_MAX];
+
+ /* Enable/Disable dynamic elvss */
+ bool enable_dynamic_elvss;
};
struct hbm_data {
@@ -597,6 +600,8 @@
struct dsi_backlight_config *bl);
int dsi_panel_bl_brightness_handoff(struct dsi_panel *panel);
void dsi_panel_bl_debugfs_init(struct dentry *parent, struct dsi_panel *panel);
+void dsi_panel_bl_elvss_debugfs_init(struct dentry *parent,
+ struct dsi_panel *panel);
/* Set/get high brightness mode */
int dsi_panel_update_hbm(struct dsi_panel *panel, enum hbm_mode_type);