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

Commit efa3d35b authored by Linux Build Service Account's avatar Linux Build Service Account Committed by Gerrit - the friendly Code Review server
Browse files

Merge "msm: mdss: Add debugfs support for panel command data type"

parents 9becc710 1ab9a551
Loading
Loading
Loading
Loading
+43 −28
Original line number Diff line number Diff line
@@ -125,32 +125,22 @@ static ssize_t panel_debug_base_reg_write(struct file *file,
		const char __user *user_buf, size_t count, loff_t *ppos)
{
	struct mdss_debug_base *dbg = file->private_data;

	u32 cnt, tmp, i;
	u32 len = 0;
	char buf[PANEL_TX_MAX_BUF] = {0x0};
	char *p = NULL;
	char reg[PANEL_TX_MAX_BUF] = {0x0};
	u32 len = 0, step = 0, value = 0;
	char *bufp;

	struct mdss_data_type *mdata = mdss_res;
	struct mdss_mdp_ctl *ctl = mdata->ctl_off + 0;
	struct mdss_panel_data *panel_data = ctl->panel_data;
	struct mdss_dsi_ctrl_pdata *ctrl_pdata = container_of(panel_data,
					struct mdss_dsi_ctrl_pdata, panel_data);

	struct mdss_mdp_ctl *ctl;
	struct mdss_dsi_ctrl_pdata *ctrl_pdata;
	struct dsi_cmd_desc dsi_write_cmd = {
		{DTYPE_GEN_LWRITE, 1, 0, 0, 0, 0/*len*/}, reg};
		{0/*data type*/, 1, 0, 0, 0, 0/* len */}, reg};
	struct dcs_cmd_req cmdreq;

	cmdreq.cmds = &dsi_write_cmd;
	cmdreq.cmds_cnt = 1;
	cmdreq.flags = CMD_REQ_COMMIT;
	cmdreq.rlen = 0;
	cmdreq.cb = NULL;

	if (!dbg || !mdata)
		return -ENODEV;

	/* get command string from user */
	if (count >= sizeof(buf))
		return -EFAULT;

@@ -159,26 +149,38 @@ static ssize_t panel_debug_base_reg_write(struct file *file,

	buf[count] = 0;	/* end of string */

	len = count / 3;

	bufp = buf;
	while (sscanf(bufp, "%x%n", &value, &step) > 0) {
		reg[len++] = value;
		if (len >= PANEL_TX_MAX_BUF) {
			pr_err("wrong input reg len\n");
			return -EFAULT;
		}
		bufp += step;
	}
	if (len < PANEL_CMD_MIN_TX_COUNT) {
		pr_err("wrong input reg len\n");
		return -EFAULT;
	}

	for (i = 0; i < len; i++) {
		p = buf + i * 3;
		p[2] = 0;
		pr_debug("p[%d] = %p:%s\n", i, p, p);
		cnt = sscanf(p, "%x", &tmp);
		reg[i] = tmp;
		pr_debug("reg[%d] = %x\n", i, (int)reg[i]);
	}
	/* put command to cmdlist */
	dsi_write_cmd.dchdr.dtype = dbg->cmd_data_type;
	dsi_write_cmd.dchdr.dlen = len;
	dsi_write_cmd.payload = reg;

	cmdreq.cmds = &dsi_write_cmd;
	cmdreq.cmds_cnt = 1;
	cmdreq.flags = CMD_REQ_COMMIT;
	cmdreq.rlen = 0;
	cmdreq.cb = NULL;

	ctl = mdata->ctl_off + 0;
	ctrl_pdata = container_of(ctl->panel_data,
		struct mdss_dsi_ctrl_pdata, panel_data);

	if (mdata->debug_inf.debug_enable_clock)
		mdata->debug_inf.debug_enable_clock(1);

	dsi_write_cmd.dchdr.dlen = len;
	mdss_dsi_cmdlist_put(ctrl_pdata, &cmdreq);

	if (mdata->debug_inf.debug_enable_clock)
@@ -275,7 +277,7 @@ int panel_debug_register_base(const char *name, void __iomem *base,
	struct mdss_data_type *mdata = mdss_res;
	struct mdss_debug_data *mdd;
	struct mdss_debug_base *dbg;
	struct dentry *ent_off, *ent_reg;
	struct dentry *ent_off, *ent_reg, *ent_type;
	char dn[PANEL_DATA_NODE_LEN] = "";
	int prefix_len = 0;

@@ -292,10 +294,20 @@ int panel_debug_register_base(const char *name, void __iomem *base,
	dbg->max_offset = max_offset;
	dbg->off = 0x0a;
	dbg->cnt = 0x01;
	dbg->cmd_data_type = DTYPE_DCS_LWRITE;

	if (name)
		prefix_len = snprintf(dn, sizeof(dn), "%s_", name);

	strlcpy(dn + prefix_len, "cmd_data_type", sizeof(dn) - prefix_len);
	ent_type = debugfs_create_x8(dn, 0644, mdd->root,
		(u8 *)&dbg->cmd_data_type);

	if (IS_ERR_OR_NULL(ent_type)) {
		pr_err("debugfs_create_file: data_type fail\n");
		goto type_fail;
	}

	strlcpy(dn + prefix_len, "off", sizeof(dn) - prefix_len);
	ent_off = debugfs_create_file(dn, 0644, mdd->root,
					dbg, &panel_off_fops);
@@ -319,9 +331,12 @@ int panel_debug_register_base(const char *name, void __iomem *base,
	list_add(&dbg->head, &mdd->base_list);

	return 0;

reg_fail:
	debugfs_remove(ent_off);
off_fail:
	debugfs_remove(ent_type);
type_fail:
	kfree(dbg);
	return -ENODEV;
}
+1 −0
Original line number Diff line number Diff line
@@ -97,6 +97,7 @@ struct mdss_debug_base {
	void __iomem *base;
	size_t off;
	size_t cnt;
	u8 cmd_data_type;
	size_t max_offset;
	char *buf;
	size_t buf_len;