Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit a16cf08c authored by raghavendra ambadas's avatar raghavendra ambadas
Browse files

msm: mdss: Add sysfs node for bl notification



Add support for bl notification to userspace
using sysfs node for mdp3 driver. Change adds a
bl sysfs node for each framebuffer which will be
utilized to notify the clients.

Change-Id: I5fb57ae749196a5e4af8af08074e818a415c6dd3
Signed-off-by: default avatarRaghavendra Ambadas <rambad@codeaurora.org>
parent 82c22cba
Loading
Loading
Loading
Loading
+26 −0
Original line number Diff line number Diff line
@@ -399,6 +399,22 @@ static int mdp3_ctrl_blit_req(struct msm_fb_data_type *mfd, void __user *p)
	return rc;
}

static ssize_t mdp3_bl_show_event(struct device *dev,
		struct device_attribute *attr, char *buf)
{
	struct fb_info *fbi = dev_get_drvdata(dev);
	struct msm_fb_data_type *mfd = (struct msm_fb_data_type *)fbi->par;
	struct mdp3_session_data *mdp3_session = NULL;
	int ret;

	if (!mfd || !mfd->mdp.private1)
		return -EAGAIN;

	mdp3_session = (struct mdp3_session_data *)mfd->mdp.private1;
	ret = scnprintf(buf, PAGE_SIZE, "%d\n", mdp3_session->bl_events);
	return ret;
}

static ssize_t mdp3_hist_show_event(struct device *dev,
		struct device_attribute *attr, char *buf)
{
@@ -505,6 +521,7 @@ static ssize_t mdp3_dyn_pu_store(struct device *dev,
}

static DEVICE_ATTR(hist_event, S_IRUGO, mdp3_hist_show_event, NULL);
static DEVICE_ATTR(bl_event, S_IRUGO, mdp3_bl_show_event, NULL);
static DEVICE_ATTR(vsync_event, S_IRUGO, mdp3_vsync_show_event, NULL);
static DEVICE_ATTR(packpattern, S_IRUGO, mdp3_packpattern_show, NULL);
static DEVICE_ATTR(dyn_pu, S_IRUGO | S_IWUSR | S_IWGRP, mdp3_dyn_pu_show,
@@ -514,6 +531,7 @@ static struct attribute *generic_attrs[] = {
	&dev_attr_packpattern.attr,
	&dev_attr_dyn_pu.attr,
	&dev_attr_hist_event.attr,
	&dev_attr_bl_event.attr,
	NULL,
};

@@ -2914,6 +2932,14 @@ int mdp3_ctrl_init(struct msm_fb_data_type *mfd)
		goto init_done;
	}

	mdp3_session->bl_event_sd = sysfs_get_dirent(dev->kobj.sd,
							"bl_event");
	if (!mdp3_session->bl_event_sd) {
		pr_err("bl_event sysfs lookup failed\n");
		rc = -ENODEV;
		goto init_done;
	}

	rc = mdp3_create_sysfs_link(dev);
	if (rc)
		pr_warn("problem creating link to mdp sysfs\n");
+2 −0
Original line number Diff line number Diff line
@@ -47,6 +47,7 @@ struct mdp3_session_data {
	struct timer_list vsync_timer;
	int vsync_period;
	struct kernfs_node *vsync_event_sd;
	struct kernfs_node *bl_event_sd;
	struct mdp_overlay overlay;
	struct mdp_overlay req_overlay;
	struct mdp3_buffer_queue bufq_in;
@@ -71,6 +72,7 @@ struct mdp3_session_data {
	bool in_splash_screen;
	bool esd_recovery;
	int dyn_pu_state; /* dynamic partial update status */
	u32 bl_events;

	bool dma_active;
	struct completion dma_completion;
+12 −0
Original line number Diff line number Diff line
@@ -54,6 +54,7 @@
#include "mdss_debug.h"
#include "mdss_smmu.h"
#include "mdss_mdp.h"
#include "mdp3_ctrl.h"

#ifdef CONFIG_FB_MSM_TRIPLE_BUFFER
#define MDSS_FB_NUM 3
@@ -137,6 +138,9 @@ void mdss_fb_bl_update_notify(struct msm_fb_data_type *mfd,
{
#ifndef TARGET_HW_MDSS_MDP3
	struct mdss_overlay_private *mdp5_data = NULL;
#endif
#ifdef TARGET_HW_MDSS_MDP3
	struct mdp3_session_data *mdp3_session = NULL;
#endif
	if (!mfd) {
		pr_err("%s mfd NULL\n", __func__);
@@ -175,6 +179,14 @@ void mdss_fb_bl_update_notify(struct msm_fb_data_type *mfd,
		}
	}
#endif
#ifdef TARGET_HW_MDSS_MDP3
	mdp3_session = (struct mdp3_session_data *)mfd->mdp.private1;
	if (mdp3_session) {
		mdp3_session->bl_events++;
		sysfs_notify_dirent(mdp3_session->bl_event_sd);
		pr_debug("bl_event = %u\n", mdp3_session->bl_events);
	}
#endif
}

static int mdss_fb_notify_update(struct msm_fb_data_type *mfd,