Exemple #1
0
static int s6e63m0_write_dcs_vid_cmd(struct mcde_display_device *ddev, u8 cmd, u8* p_data, int len)
{
	int retries = 1;
	int len_to_write;
	u8 *data;
	int write_len;
	int ret = 0;
	u8 globalPara = MAX_DCS_CMD_ALLOWED;

	do {
		len_to_write = len;
		data = p_data;
		write_len = len_to_write;
		if (write_len > MAX_DCS_CMD_ALLOWED)
			write_len = MAX_DCS_CMD_ALLOWED;

		ret = mcde_dsi_dcs_write(ddev->chnl_state, cmd, data, write_len);
		dev_vdbg(&ddev->dev, "Send DCS cmd %x, len %d, ret=%d\n",
			cmd, write_len, ret);

		len_to_write -= write_len;
		data += write_len;

		while ((len_to_write > 0) && (ret == 0)) {

			write_len = len_to_write;
			if (write_len > MAX_DCS_CMD_ALLOWED)
				write_len = MAX_DCS_CMD_ALLOWED;

			ret = mcde_dsi_dcs_write(ddev->chnl_state,
						DCS_CMD_GLOBAL_PARAM,
						&globalPara, 1);
			dev_vdbg(&ddev->dev, "Send DCS GLOBAL_PARAM, data %d, ret=%d\n",
				globalPara, ret);
			ret = mcde_dsi_dcs_write(ddev->chnl_state, cmd, data, write_len);
			dev_vdbg(&ddev->dev, "Send DCS cmd %x, len %d, ret=%d\n",
				cmd, write_len, ret);

			len_to_write-= write_len;
			data += write_len;
			globalPara += write_len;
		}
		if (ret)
			usleep_range(8000,8000);
	}while (ret && --retries);
	if (ret) {
		dev_warn(&ddev->dev, "Failed to send DCS cmd %x, error %d\n",
			cmd, ret);
	}
	return ret;
}
Exemple #2
0
static int hva40wv1_dsi_dcs_write_command(struct mcde_display_device *ddev, u8 cmd, u8* p_data, int len)
{
	int write_len;
	int ret = 0;

	write_len = len;
	if (write_len > MAX_DCS_CMD_ALLOWED)
		write_len = MAX_DCS_CMD_ALLOWED;

	ret = mcde_dsi_dcs_write(ddev->chnl_state, cmd, p_data, write_len);

	len -= write_len;
	p_data += write_len;

	while ((len > 0) && (ret == 0)) {

		write_len = len;
		if (write_len > MAX_DCS_CMD_ALLOWED)
			write_len = MAX_DCS_CMD_ALLOWED;

		ret = mcde_dsi_generic_write(ddev->chnl_state, p_data, write_len);

		len -= write_len;
		p_data += write_len;
	}

	if (ret != 0)
		dev_err(&ddev->dev, "failed to send DCS command (0x%x)\n", cmd);
	else
		dev_vdbg(&ddev->dev, "Sent DCS cmd (0x%x)\n", cmd);

	return ret;
}
static int dsi_dcs_write(struct mcde_chnl_state *chnl, u8 cmd, u8* data, int len)
{
return 0;
	int ret = mcde_dsi_dcs_write(chnl, cmd, data, len);
/*	pr_info("%s: cmd = 0x%X, returned %d\n", __func__, cmd, ret); */
	return ret;
}
Exemple #4
0
static int s6e63m0_dsi_dcs_write_command(struct mcde_display_device *ddev, u8 cmd, u8* p_data, int len)
{
	int retries = 1;
	int len_to_write;
	u8 *data;
	int write_len;
	int ret = 0;
	u8 globalPara = MCDE_MAX_DSI_DIRECT_CMD_WRITE;

	do {
		len_to_write = len;
		data = p_data;
		write_len = len_to_write;
		if (write_len > MCDE_MAX_DSI_DIRECT_CMD_WRITE)
			write_len = MCDE_MAX_DSI_DIRECT_CMD_WRITE;

		ret = mcde_dsi_dcs_write(ddev->chnl_state, cmd, data, write_len);

		len_to_write -= write_len;
		data += write_len;

		while ((len_to_write > 0) && (ret == 0)) {

			write_len = len_to_write;
			if (write_len > MCDE_MAX_DSI_DIRECT_CMD_WRITE)
				write_len = MCDE_MAX_DSI_DIRECT_CMD_WRITE;

			ret = mcde_dsi_dcs_write(ddev->chnl_state,
						DCS_CMD_GLOBAL_PARAM,
						&globalPara, 1);
			ret = mcde_dsi_dcs_write(ddev->chnl_state, cmd, data, write_len);

			len_to_write-= write_len;
			data += write_len;
			globalPara += write_len;
		}
		if (ret)
			usleep_range(8000,8000);
	}while (ret && --retries);
	if (ret) {
		dev_warn(&ddev->dev, "Failed to send DCS cmd %x, error %d\n",
			cmd, ret);
	}
	return ret;
}
static int generic_set_power_mode(struct mcde_display_device *ddev,
	enum mcde_display_power_mode power_mode)
{
	int ret = 0;
	struct mcde_display_generic_platform_data *pdata =
		ddev->dev.platform_data;

	dev_dbg(&ddev->dev, "%s:Set Power mode\n", __func__);

	/* OFF -> STANDBY */
	if (ddev->power_mode == MCDE_DISPLAY_PM_OFF &&
		power_mode != MCDE_DISPLAY_PM_OFF) {

		if (ddev->platform_enable) {
			ret = ddev->platform_enable(ddev);
			if (ret)
				return ret;
		}

		ddev->power_mode = MCDE_DISPLAY_PM_STANDBY;
	}

	/* STANDBY -> ON */
	if (ddev->power_mode == MCDE_DISPLAY_PM_STANDBY &&
		power_mode == MCDE_DISPLAY_PM_ON) {

		ret = mcde_dsi_dcs_write(ddev->chnl_state,
		DCS_CMD_EXIT_SLEEP_MODE, NULL, 0);
		if (ret)
			return ret;

		msleep(pdata->sleep_out_delay);

		ret = mcde_dsi_dcs_write(ddev->chnl_state,
			DCS_CMD_SET_DISPLAY_ON, NULL, 0);
		if (ret)
			return ret;

		ddev->power_mode = MCDE_DISPLAY_PM_ON;
		goto set_power_and_exit;
	}
	/* ON -> STANDBY */
	else if (ddev->power_mode == MCDE_DISPLAY_PM_ON &&
		power_mode <= MCDE_DISPLAY_PM_STANDBY) {
		ret = mcde_dsi_dcs_write(ddev->chnl_state,
			DCS_CMD_SET_DISPLAY_OFF, NULL, 0);
		if (ret)
			return ret;

		ret = mcde_dsi_dcs_write(ddev->chnl_state,
			DCS_CMD_ENTER_SLEEP_MODE, NULL, 0);
		if (ret)
			return ret;

		ddev->power_mode = MCDE_DISPLAY_PM_STANDBY;
	}

	/* SLEEP -> OFF */
	if (ddev->power_mode == MCDE_DISPLAY_PM_STANDBY &&
		power_mode == MCDE_DISPLAY_PM_OFF) {
		if (ddev->platform_disable) {
			ret = ddev->platform_disable(ddev);
			if (ret)
				return ret;
		}
		ddev->power_mode = MCDE_DISPLAY_PM_OFF;
	}

set_power_and_exit:
	mcde_chnl_set_power_mode(ddev->chnl_state, ddev->power_mode);

	return ret;
}
Exemple #6
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;
}
static int mcde_display_set_power_mode_default(struct mcde_display_device *ddev,
	enum mcde_display_power_mode power_mode)
{
	int ret = 0;

	/* OFF -> STANDBY */
	if (ddev->power_mode == MCDE_DISPLAY_PM_OFF &&
		power_mode != MCDE_DISPLAY_PM_OFF) {
		if (ddev->platform_enable) {
			ret = ddev->platform_enable(ddev);
			if (ret)
				return ret;
		}
		ddev->power_mode = MCDE_DISPLAY_PM_STANDBY;
		/* force register settings */
		if (ddev->port->type == MCDE_PORTTYPE_DPI)
			ddev->update_flags = UPDATE_FLAG_VIDEO_MODE |
						UPDATE_FLAG_PIXEL_FORMAT;
	}

	if (ddev->port->type == MCDE_PORTTYPE_DSI) {
		/* STANDBY -> ON */
		if (ddev->power_mode == MCDE_DISPLAY_PM_STANDBY &&
			power_mode == MCDE_DISPLAY_PM_ON) {
			ret = mcde_dsi_dcs_write(ddev->chnl_state,
				DCS_CMD_EXIT_SLEEP_MODE, NULL, 0);
			if (ret)
				return ret;

			ret = mcde_dsi_dcs_write(ddev->chnl_state,
				DCS_CMD_SET_DISPLAY_ON, NULL, 0);
			if (ret)
				return ret;

			ddev->power_mode = MCDE_DISPLAY_PM_ON;
		} else if (ddev->power_mode == MCDE_DISPLAY_PM_ON &&
			power_mode <= MCDE_DISPLAY_PM_STANDBY) {
			/* ON -> STANDBY */
			ret = mcde_dsi_dcs_write(ddev->chnl_state,
				DCS_CMD_SET_DISPLAY_OFF, NULL, 0);
			if (ret)
				return ret;

			ret = mcde_dsi_dcs_write(ddev->chnl_state,
				DCS_CMD_ENTER_SLEEP_MODE, NULL, 0);
			if (ret)
				return ret;

			ddev->power_mode = MCDE_DISPLAY_PM_STANDBY;
		}
	} else if (ddev->port->type == MCDE_PORTTYPE_DPI) {
		ddev->power_mode = power_mode;
	} else if (ddev->power_mode != power_mode) {
		return -EINVAL;
	}

	/* SLEEP -> OFF */
	if (ddev->power_mode == MCDE_DISPLAY_PM_STANDBY &&
		power_mode == MCDE_DISPLAY_PM_OFF) {
		if (ddev->platform_disable) {
			ret = ddev->platform_disable(ddev);
			if (ret)
				return ret;
		}
		ddev->power_mode = MCDE_DISPLAY_PM_OFF;
	}

	mcde_chnl_set_power_mode(ddev->chnl_state, ddev->power_mode);

	return ret;
}