Exemple #1
0
static int reset(struct file *file, const char __user *ubuf,
						size_t count, loff_t *ppos)
{
	struct seq_file *s = file->private_data;
	struct msm_fb_data_type *mfd = s->private;
	struct device *dev;
	long level;
	int ret = 0;
	char *buf;
	struct mipi_dsi_data *dsi_data;

	reset_res_buf();
	dsi_data = platform_get_drvdata(mfd->panel_pdev);
	dev = &mfd->panel_pdev->dev;
	if (!dsi_data->lcd_reset) {
		ret = -EFAULT;
		goto exit;
	}

	buf = kzalloc(sizeof(char) * count, GFP_KERNEL);
	if (!buf) {
		ret = -ENOMEM;
		goto exit;
	}

	if (copy_from_user(buf, ubuf, count)) {
		ret = -EFAULT;
		goto fail_free_all;
	}

	/* Get parameter */
	if (kstrtol(buf, 10, &level) < 0) {
		update_res_buf("Reset - parameter error\n");
		ret = -EINVAL;
		goto fail_free_all;
	}

	if (level != 0 && level != 1) {
		update_res_buf("Reset - parameter error\n");
		ret = -EINVAL;
		goto fail_free_all;
	}

	ret = dsi_data->lcd_reset(level);
	if (ret)
		goto fail_free_all;
	update_res_buf("Reset succeeded\n");
	dev_info(dev, "%s: Display reset performed.\n", __func__);
fail_free_all:
	kfree(buf);
exit:
	if (ret) {
		dev_err(dev, "%s: Reset failed, ret = 0x%x\n", __func__, ret);
		update_res_buf("Reset failed\n");
	}
	return count;
}
Exemple #2
0
static int setup_reg_access(struct device *dev, struct dsi_buf *rx_buf,
			    struct dsi_buf *tx_buf, char **buf,
			    const char __user *ubuf, size_t count)
{
	int ret = 0;

	reset_res_buf();

	if (rx_buf) {
		ret = mipi_dsi_buf_alloc(rx_buf, DSI_BUF_SIZE);
		if (ret <= 0) {
			dev_err(dev, "mipi_dsi_buf_alloc(rx) failed!\n");
			ret = -ENOMEM;
			goto exit;
		}
	}

	if (tx_buf) {
		ret = mipi_dsi_buf_alloc(tx_buf, DSI_BUF_SIZE);
		if (ret <= 0) {
			dev_err(dev, "mipi_dsi_buf_alloc(tx) failed!\n");
			ret = -ENOMEM;
			goto fail_free_rx;
		}
	}

	*buf = kzalloc(sizeof(char) * count, GFP_KERNEL);
	if (!*buf) {
		dev_err(dev, "%s: Failed to allocate buffer\n", __func__);
		ret = -ENOMEM;
		goto fail_free_all;
	}

	if (copy_from_user(*buf, ubuf, count)) {
		ret = -EFAULT;
                kfree(*buf);
		goto fail_free_all;
	}
	return 0;

fail_free_all:
	if (tx_buf)
		mipi_dsi_buf_release(tx_buf);
fail_free_rx:
	if (rx_buf)
		mipi_dsi_buf_release(rx_buf);
exit:
	return ret;
}
static int setup_reg_access(char **buf, const char __user *ubuf, size_t count)
{
	int ret = 0;

	reset_res_buf();

	*buf = kzalloc(sizeof(char) * count, GFP_KERNEL);
	if (!*buf) {
		pr_err("%s: Failed to allocate buffer\n", __func__);
		ret = -ENOMEM;
		goto exit;
	}

	if (copy_from_user(*buf, ubuf, count)) {
		ret = -EFAULT;
		goto exit;
	}
	return 0;

exit:
	kfree(*buf);
	return ret;
}
Exemple #4
0
static ssize_t reg_write(struct file *file, const char __user *ubuf,
						size_t count, loff_t *ppos)
{
	struct seq_file *s = file->private_data;
	struct mcde_display_device *ddev = s->private;
	struct device *dev;
	struct mcde_chnl_state *chnl;
	char *buf;
	const char *p;
	enum dbg_cmd_type cmd;
	u8 data[MCDE_MAX_DSI_DIRECT_CMD_WRITE + 1]; /* Make room for cmd  */
	int i = 0;
	int ret;
	char tmp[TMP_BUF_SZ];

	if (!ddev || !&ddev->dev) {
		pr_err("%s: no device\n", __func__);
		ret = -ENODEV;
		goto exit;
	}
	chnl = ddev->chnl_state;
	dev = &ddev->dev;

	dev_dbg(dev, "%s\n", __func__);

	reset_res_buf();

	buf = kzalloc(sizeof(char) * count, GFP_KERNEL);
	if (!buf) {
		dev_err(dev, "%s: Failed to allocate buffer\n", __func__);
		ret = -ENOMEM;
		goto exit;
	}

	dev_dbg(dev, "%s: buf = %p, ubuf = %p, count = %d, "
				"sizeof(char) * count = %d, line = %d\n",
		__func__, buf, ubuf, count, sizeof(char) * count, __LINE__);

	if (copy_from_user(buf, ubuf, count)) {
		ret = -EFAULT;
		goto fail_free_mem;
	}

	p = buf;

	if (!strncmp(buf, "dcs", 3)) {
		dev_dbg(dev, "%s: dcs\n", __func__);
		cmd = DCS;
	} else if (!strncmp(buf, "gen", 3)) {
		dev_dbg(dev, "%s: gen\n", __func__);
		cmd = GEN;
	} else {
		update_res_buf("Write - unknown type\n");
		ret = -EFAULT;
		goto fail_free_mem;
	}

	p = p+4;

	/* Get first param, Register */
	if (sscanf(p, "%4hhx", &data[0]) != 1) {
		update_res_buf("Write - parameter error\n");
		ret = -EINVAL;
		goto fail_free_mem;
	}
	i++;

	while (isxdigit(*p) || (*p == 'x'))
		p++;

	/* Get data */
	while (true) {
		if (isspace(*p)) {
			p++;
		} else {
			if (sscanf(p, "%4hhx", &data[i]) == 1) {
				while (isxdigit(*p) || (*p == 'x'))
					p++;
			}
			i++;
		}
		if (iscntrl(*p))
			break;

		if (i > MCDE_MAX_DSI_DIRECT_CMD_WRITE) {
			update_res_buf("Write - Too many parameters\n");
			ret = -EINVAL;
			goto fail_free_mem;
		}
	}

	if (cmd == DCS) {
		if (i == 1)
			ret = mcde_dsi_dcs_write(chnl, data[0], NULL, 0);
		else
			ret = mcde_dsi_dcs_write(chnl, data[0], &data[1],
									i - 1);
	} else {
		ret = mcde_dsi_generic_write(chnl, data, i);
	}

	if (!ret) {
		print_params(cmd, data[0], i - 1, &data[1]);
	} else {
		snprintf(tmp, sizeof(tmp), "Write failed, ret = %d!\n", ret);
		update_res_buf(tmp);
	}

fail_free_mem:
	kfree(buf);
exit:
	return count;
}
Exemple #5
0
static ssize_t reg_read(struct file *file, const char __user *ubuf,
						size_t count, loff_t *ppos)
{
	struct seq_file *s = file->private_data;
	struct mcde_display_device *ddev = s->private;
	struct device *dev;
	u8 reg;
	int len;
	u32 tmp_data;
	u8 data[MCDE_MAX_DSI_DIRECT_CMD_WRITE];
	char *buf;
	int ret;
	struct mcde_chnl_state *chnl;
	char tmp[TMP_BUF_SZ];

	if (!ddev || !&ddev->dev) {
		pr_err("%s: no device\n", __func__);
		ret = -ENODEV;
		goto exit;
	}
	chnl = ddev->chnl_state;
	dev = &ddev->dev;

	dev_dbg(dev, "%s\n", __func__);

	reset_res_buf();

	buf = kzalloc(sizeof(char) * count, GFP_KERNEL);
	if (!buf) {
		dev_err(dev, "%s: Failed to allocate buffer\n", __func__);
		ret = -ENOMEM;
		goto exit;
	}

	dev_dbg(dev, "%s: buf = %p, ubuf = %p, count = %d, "
				"sizeof(char) * count = %d, line = %d\n",
		__func__, buf, ubuf, count, sizeof(char) * count, __LINE__);

	if (copy_from_user(buf, ubuf, count)) {
		ret = -EFAULT;
		goto fail_free_mem;
	}

	if (sscanf(buf, "%4hhx %1u", &reg, &len) != 2) {
		update_res_buf("Read - parameter error\n");
		ret = -EINVAL;
		goto fail_free_mem;
	}

	dev_dbg(dev, "reg=%hx, len=%d\n", reg, len);

	/* length restriction in mcde read function */
	if (len > MCDE_MAX_DCS_READ)
		len = MCDE_MAX_DCS_READ;

	memset(data, 0, sizeof(data));

	ret = mcde_dsi_dcs_read(chnl, reg, &tmp_data, &len);
	if (!ret) {
		memcpy(data, &tmp_data, len);
		print_params(READ_CMD, reg, len, data);
	} else {
		snprintf(tmp, sizeof(tmp), "Read failed, ret = %d!\n", ret);
		update_res_buf(tmp);
	}

fail_free_mem:
	kfree(buf);
exit:
	return count;
}