diff options
| author | Adrian Salido-Moreno <adrianm@codeaurora.org> | 2013-07-11 21:11:02 -0700 |
|---|---|---|
| committer | David Keitel <dkeitel@codeaurora.org> | 2016-03-23 20:19:57 -0700 |
| commit | 18ffde2b6cc09a760bef13fa4d5362998ea87e50 (patch) | |
| tree | b2deb53ff34f89ae006334efc94284a08709179d /drivers | |
| parent | 5338f4df646c71be7dc5c693dc25c19c4079f64b (diff) | |
msm: mdss: expose MDP capabilities through sysfs
User space applications currently rely on special private ioctl to query
capabilities of MDP driver. As more capabilities are added it becomes
more difficult to have to extend and maintain header file compatibility.
Provide a sysfs node which can be queried for MDP capabilities.
Change-Id: I59efb29bf465083a1ef65c0419226788b44085b1
Signed-off-by: Adrian Salido-Moreno <adrianm@codeaurora.org>
Signed-off-by: Shalabh Jain <shalabhj@codeaurora.org>
Diffstat (limited to 'drivers')
| -rw-r--r-- | drivers/video/fbdev/msm/mdss_mdp.c | 53 | ||||
| -rw-r--r-- | drivers/video/fbdev/msm/mdss_mdp_overlay.c | 5 |
2 files changed, 58 insertions, 0 deletions
diff --git a/drivers/video/fbdev/msm/mdss_mdp.c b/drivers/video/fbdev/msm/mdss_mdp.c index ea382efde65a..3487c5d6e526 100644 --- a/drivers/video/fbdev/msm/mdss_mdp.c +++ b/drivers/video/fbdev/msm/mdss_mdp.c @@ -976,6 +976,55 @@ void mdss_mdp_footswitch_ctrl_splash(int on) } } +static ssize_t mdss_mdp_show_capabilities(struct device *dev, + struct device_attribute *attr, char *buf) +{ + struct mdss_data_type *mdata = dev_get_drvdata(dev); + size_t len = PAGE_SIZE; + int cnt = 0; + +#define SPRINT(fmt, ...) \ + (cnt += scnprintf(buf + cnt, len - cnt, fmt, ##__VA_ARGS__)) + + SPRINT("mdp_version=5 hw_rev=%d\n", mdata->mdp_rev); + SPRINT("rgb_pipes=%d\n", mdata->nrgb_pipes); + SPRINT("vig_pipes=%d\n", mdata->nvig_pipes); + SPRINT("dma_pipes=%d\n", mdata->ndma_pipes); + SPRINT("smp_count=%d\n", mdata->smp_mb_cnt); + SPRINT("smp_size=%d\n", mdata->smp_mb_size); + SPRINT("max downscale ratio=%d\n", MAX_DOWNSCALE_RATIO); + SPRINT("max upscale ratio=%d\n", MAX_UPSCALE_RATIO); + SPRINT("features:"); + if (mdata->has_bwc) + SPRINT(" bwc"); + if (mdata->has_decimation) + SPRINT(" decimation"); + SPRINT("\n"); + + return cnt; +} + +static DEVICE_ATTR(caps, S_IRUGO, mdss_mdp_show_capabilities, NULL); + +static struct attribute *mdp_fs_attrs[] = { + &dev_attr_caps.attr, + NULL +}; + +static struct attribute_group mdp_fs_attr_group = { + .attrs = mdp_fs_attrs +}; + +static int mdss_mdp_register_sysfs(struct mdss_data_type *mdata) +{ + struct device *dev = &mdata->pdev->dev; + int rc; + + rc = sysfs_create_group(&dev->kobj, &mdp_fs_attr_group); + + return rc; +} + static int mdss_mdp_probe(struct platform_device *pdev) { struct resource *res; @@ -1082,6 +1131,10 @@ static int mdss_mdp_probe(struct platform_device *pdev) if (!pm_runtime_enabled(&pdev->dev)) mdss_mdp_footswitch_ctrl(mdata, true); + rc = mdss_mdp_register_sysfs(mdata); + if (rc) + pr_err("unable to register mdp sysfs nodes\n"); + rc = mdss_fb_register_mdp_instance(&mdp5); if (rc) pr_err("unable to register mdp instance\n"); diff --git a/drivers/video/fbdev/msm/mdss_mdp_overlay.c b/drivers/video/fbdev/msm/mdss_mdp_overlay.c index cf6bd615e90d..cbd59060cb18 100644 --- a/drivers/video/fbdev/msm/mdss_mdp_overlay.c +++ b/drivers/video/fbdev/msm/mdss_mdp_overlay.c @@ -2158,6 +2158,11 @@ int mdss_mdp_overlay_init(struct msm_fb_data_type *mfd) goto init_fail; } + rc = sysfs_create_link_nowarn(&dev->kobj, + &mdp5_data->mdata->pdev->dev.kobj, "mdp"); + if (rc) + pr_warn("problem creating link to mdp sysfs\n"); + pm_runtime_set_suspended(&mfd->pdev->dev); pm_runtime_enable(&mfd->pdev->dev); |
