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);