summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRay Zhang <rayz@codeaurora.org>2015-01-08 14:53:11 +0800
committerDavid Keitel <dkeitel@codeaurora.org>2016-03-23 20:39:10 -0700
commit7937cdefcf8bfc8b8f2ea1c819bfe024560439dc (patch)
treedb4bfa04226a9409214ec75c78b3847d171f01fb
parentcb4fe3d98913db23b825f09d942e60b9c1389eec (diff)
msm: mdss: add sysfs node for panel status
Some tools like MMI need know whether panel is working correctly or not, so add a panel_status node in sysfs. Signed-off-by: Ray Zhang <rayz@codeaurora.org> Change-Id: I2f5da3c850f83230476f0cd66f2bf11b9234ed32
-rw-r--r--drivers/video/fbdev/msm/mdss_dsi.c4
-rw-r--r--drivers/video/fbdev/msm/mdss_fb.c20
-rw-r--r--drivers/video/fbdev/msm/mdss_panel.h4
3 files changed, 27 insertions, 1 deletions
diff --git a/drivers/video/fbdev/msm/mdss_dsi.c b/drivers/video/fbdev/msm/mdss_dsi.c
index bc5a41ba0959..0893149846f4 100644
--- a/drivers/video/fbdev/msm/mdss_dsi.c
+++ b/drivers/video/fbdev/msm/mdss_dsi.c
@@ -1398,6 +1398,10 @@ static int mdss_dsi_event_handler(struct mdss_panel_data *pdata,
rc = mdss_dsi_register_recovery_handler(ctrl_pdata,
(struct mdss_intf_recovery *)arg);
break;
+ case MDSS_EVENT_DSI_PANEL_STATUS:
+ if (ctrl_pdata->check_status)
+ rc = ctrl_pdata->check_status(ctrl_pdata);
+ break;
default:
pr_debug("%s: unhandled event=%d\n", __func__, event);
break;
diff --git a/drivers/video/fbdev/msm/mdss_fb.c b/drivers/video/fbdev/msm/mdss_fb.c
index 2a5845ddc0bb..2787bb98c2d6 100644
--- a/drivers/video/fbdev/msm/mdss_fb.c
+++ b/drivers/video/fbdev/msm/mdss_fb.c
@@ -552,6 +552,22 @@ static ssize_t mdss_fb_get_panel_info(struct device *dev,
return ret;
}
+static ssize_t mdss_fb_get_panel_status(struct device *dev,
+ struct device_attribute *attr, char *buf)
+{
+ struct fb_info *fbi = dev_get_drvdata(dev);
+ struct msm_fb_data_type *mfd = fbi->par;
+ int ret;
+ int panel_status;
+
+ panel_status = mdss_fb_send_panel_event(mfd,
+ MDSS_EVENT_DSI_PANEL_STATUS, NULL);
+ ret = scnprintf(buf, PAGE_SIZE, "panel_status=%s\n",
+ panel_status > 0 ? "alive" : "dead");
+
+ return ret;
+}
+
/*
* mdss_fb_lpm_enable() - Function to Control LowPowerMode
* @mfd: Framebuffer data structure for display
@@ -650,7 +666,8 @@ static DEVICE_ATTR(msm_fb_src_split_info, S_IRUGO, mdss_fb_get_src_split_info,
NULL);
static DEVICE_ATTR(msm_fb_thermal_level, S_IRUGO | S_IWUSR,
mdss_fb_get_thermal_level, mdss_fb_set_thermal_level);
-
+static DEVICE_ATTR(msm_fb_panel_status, S_IRUGO,
+ mdss_fb_get_panel_status, NULL);
static struct attribute *mdss_fb_attrs[] = {
&dev_attr_msm_fb_type.attr,
&dev_attr_msm_fb_split.attr,
@@ -660,6 +677,7 @@ static struct attribute *mdss_fb_attrs[] = {
&dev_attr_msm_fb_panel_info.attr,
&dev_attr_msm_fb_src_split_info.attr,
&dev_attr_msm_fb_thermal_level.attr,
+ &dev_attr_msm_fb_panel_status.attr,
NULL,
};
diff --git a/drivers/video/fbdev/msm/mdss_panel.h b/drivers/video/fbdev/msm/mdss_panel.h
index 62b5e732705a..7e00898cb3e3 100644
--- a/drivers/video/fbdev/msm/mdss_panel.h
+++ b/drivers/video/fbdev/msm/mdss_panel.h
@@ -181,6 +181,9 @@ struct mdss_intf_recovery {
* - 1: update to command mode
* @MDSS_EVENT_REGISTER_RECOVERY_HANDLER: Event to recover the interface in
* case there was any errors detected.
+ * @ MDSS_EVENT_DSI_PANEL_STATUS:Event to check the panel status
+ * <= 0: panel check fail
+ * > 0: panel check success
*/
enum mdss_intf_events {
MDSS_EVENT_RESET = 1,
@@ -203,6 +206,7 @@ enum mdss_intf_events {
MDSS_EVENT_DSI_STREAM_SIZE,
MDSS_EVENT_DSI_DYNAMIC_SWITCH,
MDSS_EVENT_REGISTER_RECOVERY_HANDLER,
+ MDSS_EVENT_DSI_PANEL_STATUS,
};
struct lcd_panel_info {