diff options
| author | Xiaoming Zhou <zhoux@codeaurora.org> | 2013-10-24 13:28:34 -0400 |
|---|---|---|
| committer | David Keitel <dkeitel@codeaurora.org> | 2016-03-23 20:22:43 -0700 |
| commit | 835311a9dee25fb45ea8d7c399db08e596eea7bb (patch) | |
| tree | e45c44e053d16fb638dab3810f78f3646d4920b8 /drivers/video/fbdev | |
| parent | dd648e410f30f4c82dc13e26838a834ec39f3331 (diff) | |
msm: mdss: expose MDP capabilities through sysfs on 8x10
Currently, MDP capabilities are exposed to the client via
a dedicated ioctl. As more capabilities are added, it becomes
difficult to have to extend and maintain header file compatibility.
This change is to add a sysfs node which can be used to get the
MDP capabilities.
Change-Id: I9eb2e5546f708eb3f46c61f9abe4f25f23cd64aa
Signed-off-by: Xiaoming Zhou <zhoux@codeaurora.org>
Diffstat (limited to 'drivers/video/fbdev')
| -rw-r--r-- | drivers/video/fbdev/msm/mdp3.c | 51 | ||||
| -rw-r--r-- | drivers/video/fbdev/msm/mdp3.h | 1 | ||||
| -rw-r--r-- | drivers/video/fbdev/msm/mdp3_ctrl.c | 4 |
3 files changed, 56 insertions, 0 deletions
diff --git a/drivers/video/fbdev/msm/mdp3.c b/drivers/video/fbdev/msm/mdp3.c index 74a91d1dce90..da3c5e04ec3c 100644 --- a/drivers/video/fbdev/msm/mdp3.c +++ b/drivers/video/fbdev/msm/mdp3.c @@ -1936,6 +1936,53 @@ static void mdp3_dma_underrun_intr_handler(int type, void *arg) mdp3_res->underrun_cnt); } +static ssize_t mdp3_show_capabilities(struct device *dev, + struct device_attribute *attr, char *buf) +{ + size_t len = PAGE_SIZE; + int cnt = 0; + +#define SPRINT(fmt, ...) \ + (cnt += scnprintf(buf + cnt, len - cnt, fmt, ##__VA_ARGS__)) + + SPRINT("mdp_version=3\n"); + SPRINT("hw_rev=%d\n", 304); + SPRINT("dma_pipes=%d\n", 1); + SPRINT("\n"); + + return cnt; +} + +static DEVICE_ATTR(caps, S_IRUGO, mdp3_show_capabilities, NULL); + +static struct attribute *mdp3_fs_attrs[] = { + &dev_attr_caps.attr, + NULL +}; + +static struct attribute_group mdp3_fs_attr_group = { + .attrs = mdp3_fs_attrs +}; + +static int mdp3_register_sysfs(struct platform_device *pdev) +{ + struct device *dev = &pdev->dev; + int rc; + + rc = sysfs_create_group(&dev->kobj, &mdp3_fs_attr_group); + + return rc; +} + +int mdp3_create_sysfs_link(struct device *dev) +{ + int rc; + rc = sysfs_create_link_nowarn(&dev->kobj, + &mdp3_res->pdev->dev.kobj, "mdp"); + + return rc; +} + static int mdp3_probe(struct platform_device *pdev) { int rc; @@ -1994,6 +2041,10 @@ static int mdp3_probe(struct platform_device *pdev) goto probe_done; } + rc = mdp3_register_sysfs(pdev); + if (rc) + pr_err("unable to register mdp sysfs nodes\n"); + rc = mdss_fb_register_mdp_instance(&mdp3_interface); if (rc) pr_err("unable to register mdp instance\n"); diff --git a/drivers/video/fbdev/msm/mdp3.h b/drivers/video/fbdev/msm/mdp3.h index c7ad8d367066..7c110fa5be7e 100644 --- a/drivers/video/fbdev/msm/mdp3.h +++ b/drivers/video/fbdev/msm/mdp3.h @@ -188,6 +188,7 @@ int mdp3_iommu_is_attached(int client); void mdp3_free(void); int mdp3_parse_dt_splash(struct msm_fb_data_type *mfd); void mdp3_release_splash_memory(void); +int mdp3_create_sysfs_link(struct device *dev); #define MDP3_REG_WRITE(addr, val) writel_relaxed(val, mdp3_res->mdp_base + addr) #define MDP3_REG_READ(addr) readl_relaxed(mdp3_res->mdp_base + addr) diff --git a/drivers/video/fbdev/msm/mdp3_ctrl.c b/drivers/video/fbdev/msm/mdp3_ctrl.c index dff9b05426fe..c79a17198fd0 100644 --- a/drivers/video/fbdev/msm/mdp3_ctrl.c +++ b/drivers/video/fbdev/msm/mdp3_ctrl.c @@ -1555,6 +1555,10 @@ int mdp3_ctrl_init(struct msm_fb_data_type *mfd) goto init_done; } + rc = mdp3_create_sysfs_link(dev); + if (rc) + pr_warn("problem creating link to mdp sysfs\n"); + kobject_uevent(&dev->kobj, KOBJ_ADD); pr_debug("vsync kobject_uevent(KOBJ_ADD)\n"); |
