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

Commit 7286daaf authored by Adrian Salido-Moreno's avatar Adrian Salido-Moreno Committed by Stephen Boyd
Browse files

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: default avatarAdrian Salido-Moreno <adrianm@codeaurora.org>
Signed-off-by: default avatarShalabh Jain <shalabhj@codeaurora.org>
parent 40d755d8
Loading
Loading
Loading
Loading
+53 −0
Original line number Diff line number Diff line
@@ -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");
+5 −0
Original line number Diff line number Diff line
@@ -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);