Пример #1
0
static int
sharp10x19_cmd_set_brightness( struct mdfld_dsi_config *dsi_config, int level)
{
	struct mdfld_dsi_pkg_sender *sender =
		mdfld_dsi_get_pkg_sender(dsi_config);
	u8 duty_val = 0;
	struct drm_device *dev = dsi_config->dev;

	PSB_DEBUG_ENTRY("level = %d\n", level);

	if (!sender) {
		DRM_ERROR("Failed to get DSI packet sender\n");
		return -EINVAL;
	}

	duty_val = (0xFF * level) / 255;
	mdfld_dsi_send_mcs_short_hs(sender,
			write_display_brightness, duty_val, 1,
			MDFLD_DSI_SEND_PACKAGE);
	if (is_dual_panel(dev)) {
		sender->work_for_slave_panel = true;
		mdfld_dsi_send_mcs_short_hs(sender,
				write_display_brightness, duty_val, 1,
				MDFLD_DSI_SEND_PACKAGE);
		sender->work_for_slave_panel = false;
	}
	return 0;
}
static int samsungWQHD_cmd_power_off(struct mdfld_dsi_config *dsi_config)
{
	struct mdfld_dsi_pkg_sender *sender =
		mdfld_dsi_get_pkg_sender(dsi_config);
	int err;

	printk("[DISP] %s\n", __func__);
	if (!sender) {
		DRM_ERROR("Failed to get DSI packet sender\n");
		return -EINVAL;
	}

	usleep_range(1000, 1500);
	/* Send power off command*/
	err = mdfld_dsi_send_mcs_short_hs(sender, 0x28, 0, 0, MDFLD_DSI_SEND_PACKAGE);
	if (err) {
		DRM_ERROR("Failed to Set Display Off\n");
		return err;
	}
	usleep_range(35000, 35500);
	err = mdfld_dsi_send_mcs_short_hs(sender, 0x10, 0, 0, MDFLD_DSI_SEND_PACKAGE);
	if (err) {
		DRM_ERROR("Failed to Enter Sleep Mode\n");
		return err;
	}
	usleep_range(150000, 150500);

	/* Turn off VBAT*/
	gpio_set_value_cansleep(stb1_en_gpio, 0);
	gpio_set_value_cansleep(stb2_en_gpio, 0);
	return 0;
}
static int otm1284a_vid_power_off(struct mdfld_dsi_config *dsi_config)
{
	struct mdfld_dsi_pkg_sender *sender =
		mdfld_dsi_get_pkg_sender(dsi_config);
	int err;

	printk("[DISP] %s\n", __func__);
	if (!sender) {
		DRM_ERROR("Failed to get DSI packet sender\n");
		return -EINVAL;
	}
	cancel_delayed_work_sync(&orise1284a_panel_reset_delay_work);
	usleep_range(1000, 1500);
	/* Send power off command*/
	err = mdfld_dsi_send_mcs_short_hs(sender, MIPI_DCS_SET_DISPLAY_OFF, 0,
					  0, MDFLD_DSI_SEND_PACKAGE);
	if (err) {
		DRM_ERROR("Failed to Set Display Off\n");
		return err;
	}

	err = mdfld_dsi_send_mcs_short_hs(sender, MIPI_DCS_ENTER_SLEEP_MODE, 0,
					  0, MDFLD_DSI_SEND_PACKAGE);
	if (err) {
		DRM_ERROR("Failed to Enter Sleep Mode\n");
		return err;
	}

	usleep_range(50000, 55000);

	return 0;
}
static int mdfld_dsi_sharp10x19_drv_ic_init(struct mdfld_dsi_config *dsi_config)
{

	struct mdfld_dsi_pkg_sender *sender =
		mdfld_dsi_get_pkg_sender(dsi_config);
	int err = 0;

	if (!sender) {
		DRM_ERROR("Cannot get sender\n");
		return -EINVAL;
	}

	PSB_DEBUG_ENTRY("\n");

	err = mdfld_dsi_send_mcs_short_hs(sender,
		access_protect,
		0x4, 1 , 0);
	if (err) {
		DRM_ERROR("%s: %d: Set access_protect off\n", __func__, __LINE__);
		goto ic_init_err;
	}
	err = mdfld_dsi_send_mcs_short_hs(sender,
		0xd6,
		0x01, 1 , 0);
	if (err) {
		DRM_ERROR("%s: %d: Remove NVM reload\n", __func__, __LINE__);
		goto ic_init_err;
	}

	err = mdfld_dsi_send_mcs_short_hs(sender,
		write_ctrl_display,
		0xc, 1 , 0);
	if (err) {
		DRM_ERROR("%s: %d: Set backlight\n", __func__, __LINE__);
		goto ic_init_err;
	}

	err = mdfld_dsi_send_mcs_short_hs(sender,
		write_ctrl_cabc, dsi_config->cabc_mode, 1,
		MDFLD_DSI_SEND_PACKAGE);
	if (err) {
		DRM_ERROR("%s: %d: write_ctrl_cabc\n", __func__, __LINE__);
		goto ic_init_err;
	}
	err = mdfld_dsi_send_mcs_short_hs(sender,
						  set_pixel_format, 0x77, 1,
						  MDFLD_DSI_SEND_PACKAGE);
	if (err) {
		DRM_ERROR("%s: %d: set_pixel_format\n", __func__, __LINE__);
		goto ic_init_err;
	}

	return 0;
ic_init_err:
	err = -EIO;
	return err;

}
static int mdfld_dsi_jdi_power_off(struct mdfld_dsi_config *dsi_config)
{
	struct mdfld_dsi_pkg_sender *sender =
		mdfld_dsi_get_pkg_sender(dsi_config);
	int err;

	PSB_DEBUG_ENTRY("\n");

	if (!sender) {
		DRM_ERROR("Failed to get DSI packet sender\n");
		return -EINVAL;
	}

	/*send SHUT_DOWN packet */
	err = mdfld_dsi_send_dpi_spk_pkg_hs(sender,
			MDFLD_DSI_DPI_SPK_SHUT_DOWN);
	if (err) {
		DRM_ERROR("Failed to send turn off packet\n");
		goto power_off_err;
	}
	/* According HW DSI spec, need to wait for 100ms. */
	msleep(100);

	/* Set Display off */
	err = mdfld_dsi_send_mcs_short_hs(sender, set_display_off, 0, 0,
			MDFLD_DSI_SEND_PACKAGE);
	if (err) {
		DRM_ERROR("%s: %d: Set Display On\n", __func__, __LINE__);
		goto power_off_err;
	}
	/* Wait for 1 frame after set_display_on. */
	msleep(20);

	/* Sleep In */
	err = mdfld_dsi_send_mcs_short_hs(sender, enter_sleep_mode, 0, 0,
			MDFLD_DSI_SEND_PACKAGE);
	if (err) {
		DRM_ERROR("%s: %d: Exit Sleep Mode\n", __func__, __LINE__);
		goto power_off_err;
	}
	/* Wait for 3 frames after enter_sleep_mode. */
	msleep(51);

	/* Can not poweroff VPROG2, because many other module related to
	 * this power supply, such as PSH sensor. */
	/*__vpro2_power_ctrl(false);*/
	if (bias_en_gpio)
		gpio_set_value_cansleep(bias_en_gpio, 0);

	return 0;

power_off_err:
	err = -EIO;
	return err;
}
static
int sharp25x16_cmd_power_on(
	struct mdfld_dsi_config *dsi_config)
{

	struct mdfld_dsi_pkg_sender *sender =
		mdfld_dsi_get_pkg_sender(dsi_config);
	int err = 0;

	PSB_DEBUG_ENTRY("\n");
	if (!sender) {
		DRM_ERROR("Failed to get DSI packet sender\n");
		return -EINVAL;
	}
	err = mdfld_dsi_send_mcs_short_hs(sender,
		set_address_mode, 0x0, 1,
		MDFLD_DSI_SEND_PACKAGE);
	if (err) {
		DRM_ERROR("%s: %d: Set Address Mode\n",
		__func__, __LINE__);
		goto power_err;
	}
//	usleep_range(20000, 20100);

	err = mdfld_dsi_send_mcs_short_hs(sender,
			set_pixel_format, 0x77, 1,
			MDFLD_DSI_SEND_PACKAGE);
	if (err) {
		DRM_ERROR("%s: %d: Set Pixel format\n",
		__func__, __LINE__);
		goto power_err;
	}

	/* Sleep Out */
	err = mdfld_dsi_send_mcs_short_hs(sender, exit_sleep_mode, 0, 0,
			MDFLD_DSI_SEND_PACKAGE);
	if (err) {
		DRM_ERROR("%s: %d: Exit Sleep Mode\n", __func__, __LINE__);
		goto power_err;
	}

	msleep(20);
	/* Set Display on 0x29 */
	err = mdfld_dsi_send_mcs_short_hs(sender, set_display_on, 0, 0,
			MDFLD_DSI_SEND_PACKAGE);
	if (err) {
		DRM_ERROR("%s: %d: Set Display On\n", __func__, __LINE__);
		goto power_err;
	}
	msleep(150);

power_err:
	return err;
}
Пример #7
0
static int sharp10x19_cmd_power_on(struct mdfld_dsi_config *dsi_config)
{
	struct mdfld_dsi_pkg_sender *sender =
		mdfld_dsi_get_pkg_sender(dsi_config);
	struct drm_device *dev = dsi_config->dev;
	int ret;
	u8 cmd;
	int i;
	int loop = 1;

	PSB_DEBUG_ENTRY("\n");

	if (!sender) {
		DRM_ERROR("Failed to get DSI packet sender\n");
		return -EINVAL;
	}
	if (is_dual_panel(dev))
		loop = 2;
	for(i = 0; i < loop; i++) {
		if (i == 0)
			sender->work_for_slave_panel = false;
		else
			sender->work_for_slave_panel = true;
		/* address mode */
		cmd = set_address_mode;
		ret = mdfld_dsi_send_mcs_short_hs(sender,
						  cmd, 0x0, 1, MDFLD_DSI_SEND_PACKAGE);
		if (ret)
			goto err_out;

		/* pixel format*/
		cmd = set_pixel_format;
		ret = mdfld_dsi_send_mcs_short_hs(sender,
						  cmd, 0x77, 1, MDFLD_DSI_SEND_PACKAGE);
		if (ret)
			goto err_out;

		/* display on */
		cmd = set_display_on;
		ret = mdfld_dsi_send_mcs_short_hs(sender,
						  cmd, 0, 0, MDFLD_DSI_SEND_PACKAGE);
		if (ret)
			goto err_out;
	}
	sender->work_for_slave_panel = false;
	return 0;

err_out:
	sender->work_for_slave_panel = false;
	DRM_ERROR("failed to send command %#x\n", cmd);
	return ret;
}
Пример #8
0
static int mdfld_dsi_sharp25x16_power_off(struct mdfld_dsi_config *dsi_config)
{
	struct mdfld_dsi_pkg_sender *sender =
		mdfld_dsi_get_pkg_sender(dsi_config);
	int err;

	PSB_DEBUG_ENTRY("\n");

	if (!sender) {
		DRM_ERROR("Failed to get DSI packet sender\n");
		return -EINVAL;
	}

	/*send SHUT_DOWN packet */
	err = mdfld_dsi_send_dpi_spk_pkg_hs(sender,
			MDFLD_DSI_DPI_SPK_SHUT_DOWN);
	if (err) {
		DRM_ERROR("Failed to send turn off packet\n");
		goto power_off_err;
	}
	/* According HW DSI spec, need to wait for 100ms. */
	msleep(100);

	/* Set Display off */
	err = mdfld_dsi_send_mcs_short_hs(sender, set_display_off, 0, 0,
			MDFLD_DSI_SEND_PACKAGE);
	if (err) {
		DRM_ERROR("%s: %d: Set Display On\n", __func__, __LINE__);
		goto power_off_err;
	}
	/* Wait for 1 frame after set_display_on. */
	msleep(20);

	/* Sleep In */
	err = mdfld_dsi_send_mcs_short_hs(sender, enter_sleep_mode, 0, 0,
			MDFLD_DSI_SEND_PACKAGE);
	if (err) {
		DRM_ERROR("%s: %d: Exit Sleep Mode\n", __func__, __LINE__);
		goto power_off_err;
	}
	/* Wait for 3 frames after enter_sleep_mode. */
	msleep(51);

	/* enable it after AOB re-work
	* gpio_set_value_cansleep(mipi_reset_gpio, 0);
	*/
	return 0;

power_off_err:
	err = -EIO;
	return err;
}
Пример #9
0
int mdfld_mot_cmn_send_cmd_list(struct mdfld_dsi_config *dsi_config,
				struct mdfld_dsi_pkg_sender *sender,
				struct dsi_cmd_entry *list, int num_entry)
{
	struct dsi_cmd_entry *entry;
	u8 *mcs_short_data;
	int i;
	int err = 0;

	for (i = 0; i < num_entry; i++) {
		entry = &list[i];
		PSB_DEBUG_INIT("Sending command # %d, type = %d\n",
			i, entry->type);

		if (entry->type == CMD_MCS_LONG) {
			err = mdfld_dsi_send_mcs_long_hs(sender,
							entry->data,
							entry->len,
							MDFLD_DSI_SEND_PACKAGE);
		} else if ((entry->type == CMD_MCS_SHORT1) &&
			(entry->len == 2)) {
			mcs_short_data = entry->data;
			err = mdfld_dsi_send_mcs_short_hs(sender,
							entry->data[0],
							entry->data[1],
							1,
							MDFLD_DSI_SEND_PACKAGE);
		} else if (entry->type == CMD_MCS_SHORT0) {
			mcs_short_data = entry->data;
			err = mdfld_dsi_send_mcs_short_hs(sender,
							entry->data[0],
							0,
							0,
							MDFLD_DSI_SEND_PACKAGE);
		} else if (entry->type == CMD_SLEEP_MS) {
			msleep(entry->len);
		} else {
			DRM_ERROR("Invalid command entry type %d\n",
				entry->type);
			err = -EINVAL;
		}

		if (err) {
			DRM_ERROR("Failed sending command entry # %d\n", i);
			break;
		}
	}

	return err;
}
static int handle_dsi_init_commands(struct mdfld_dsi_pkg_sender *sender,
				struct dsi_init_command *command)
{
	int r = 0;

	if (!sender)
		return -EINVAL;

	while (command->type != DONE_CMD && r == 0) {
		switch (command->type) {
		case GEN_LONG_LP_CMD:
			r = mdfld_dsi_send_gen_long_lp(sender, command->param,
				command->count, MDFLD_DSI_SEND_PACKAGE);
			break;
		case GEN_SHORT_LP_CMD:
			r = mdfld_dsi_send_gen_short_lp(sender,
				command->param[0],
				command->count > 1 ? command->param[1] : 0,
				command->count, MDFLD_DSI_SEND_PACKAGE);
			break;
		case MCS_LONG_LP_CMD:
			r = mdfld_dsi_send_mcs_long_lp(sender, command->param,
				command->count, MDFLD_DSI_SEND_PACKAGE);
			break;
		case MCS_SHORT_LP_CMD:
			r = mdfld_dsi_send_mcs_short_lp(sender,
				command->param[0],
				command->count > 1 ? command->param[1] : 0,
				command->count - 1, MDFLD_DSI_SEND_PACKAGE);
			break;
		case GEN_LONG_HS_CMD:
			r = mdfld_dsi_send_gen_long_hs(sender, command->param,
				command->count, MDFLD_DSI_SEND_PACKAGE);
			break;
		case GEN_SHORT_HS_CMD:
			r = mdfld_dsi_send_gen_short_hs(sender,
				command->param[0],
				command->count > 1 ? command->param[1] : 0,
				command->count, MDFLD_DSI_SEND_PACKAGE);
			break;
		case MCS_LONG_HS_CMD:
			r = mdfld_dsi_send_mcs_long_hs(sender, command->param,
				command->count, MDFLD_DSI_SEND_PACKAGE);
			break;
		case MCS_SHORT_HS_CMD:
			r = mdfld_dsi_send_mcs_short_hs(sender,
				command->param[0],
				command->count > 1 ? command->param[1] : 0,
				command->count - 1, MDFLD_DSI_SEND_PACKAGE);
			break;
		case DELAY_CMD:
			usleep_range(command->count, command->count * 3 / 2);
			break;
		case DONE_CMD:
			break;
		}
		command++;
	}
	return r;
}
Пример #11
0
static
int jdi25x16_cmd_set_brightness(
		struct mdfld_dsi_config *dsi_config,
		int level)
{
	struct mdfld_dsi_pkg_sender *sender =
		mdfld_dsi_get_pkg_sender(dsi_config);
	u8 duty_val = 0;
	int i;

	PSB_DEBUG_ENTRY("level = %d\n", level);

	if (!sender) {
		DRM_ERROR("Failed to get DSI packet sender\n");
		return -EINVAL;
	}

	duty_val = (0xFF * level) / 255;
	for (i = 0; i < 2; i++) {
		if (i == 0)
			sender->work_for_slave_panel = false;
		else
			sender->work_for_slave_panel = true;
		/*
		*	Set maximum brightness here. AOB needs to be modified
		*	to get real brightness setting
		*/
		mdfld_dsi_send_mcs_short_hs(sender,
				write_display_brightness, 0x90, 1,
				MDFLD_DSI_SEND_PACKAGE);
	}
	sender->work_for_slave_panel = false;
	return 0;
}
Пример #12
0
static int mdfld_dsi_sharp25x16_power_on(struct mdfld_dsi_config *dsi_config)
{
	struct mdfld_dsi_pkg_sender *sender =
		mdfld_dsi_get_pkg_sender(dsi_config);
	int err;

	PSB_DEBUG_ENTRY("\n");

	if (!sender) {
		DRM_ERROR("Failed to get DSI packet sender\n");
		return -EINVAL;
	}
	/* Sleep Out */
	err = mdfld_dsi_send_mcs_short_hs(sender, exit_sleep_mode, 0, 0,
			MDFLD_DSI_SEND_PACKAGE);
	if (err) {
		DRM_ERROR("%s: %d: Exit Sleep Mode\n", __func__, __LINE__);
		goto power_on_err;
	}
	/* Wait for 6 frames after exit_sleep_mode. */
	msleep(100);

	/* Set Display on */
	err = mdfld_dsi_send_mcs_short_hs(sender, set_display_on, 0, 0,
			MDFLD_DSI_SEND_PACKAGE);
	if (err) {
		DRM_ERROR("%s: %d: Set Display On\n", __func__, __LINE__);
		goto power_on_err;
	}
	/* Wait for 1 frame after set_display_on. */
	msleep(20);

	/* Send TURN_ON packet */
	err = mdfld_dsi_send_dpi_spk_pkg_hs(sender, MDFLD_DSI_DPI_SPK_TURN_ON);
	if (err) {
		DRM_ERROR("Failed to send turn on packet\n");
		goto power_on_err;
	}
	return 0;

power_on_err:
	err = -EIO;
	return err;
}
static int sharp5_cmd_power_on(struct mdfld_dsi_config *dsi_config)
{
	struct mdfld_dsi_pkg_sender *sender =
		mdfld_dsi_get_pkg_sender(dsi_config);
	int ret;
	u8 cmd;

	PSB_DEBUG_ENTRY("\n");

	if (!sender) {
		DRM_ERROR("Failed to get DSI packet sender\n");
		return -EINVAL;
	}

	/* address mode */
	cmd = set_address_mode;
	ret = mdfld_dsi_send_mcs_short_hs(sender,
					  cmd, 0x0, 1, MDFLD_DSI_SEND_PACKAGE);
	if (ret)
		goto err_out;

	/* pixel format*/
	cmd = set_pixel_format;
	ret = mdfld_dsi_send_mcs_short_hs(sender,
					  cmd, 0x77, 1, MDFLD_DSI_SEND_PACKAGE);
	if (ret)
		goto err_out;

	/* display on */
	cmd = set_display_on;
	ret = mdfld_dsi_send_mcs_short_hs(sender,
					  cmd, 0, 0, MDFLD_DSI_SEND_PACKAGE);
	if (ret)
		goto err_out;

	return 0;

err_out:
	DRM_ERROR("failed to send command %#x\n", cmd);
	return ret;
}
static int sharp25x16_cmd_power_off(
		struct mdfld_dsi_config *dsi_config)
{
	struct mdfld_dsi_pkg_sender *sender =
		mdfld_dsi_get_pkg_sender(dsi_config);
	int err;

	PSB_DEBUG_ENTRY("\n");

	msleep(100);
	if (!sender) {
		DRM_ERROR("Failed to get DSI packet sender\n");
		return -EINVAL;
	}
	err = mdfld_dsi_send_mcs_short_hs(sender,
			set_display_off, 0, 0,
			MDFLD_DSI_SEND_PACKAGE);
	if (err) {
		DRM_ERROR("%s: %d: Set Display Off\n",
		__func__, __LINE__);
		goto power_off_err;
	}
//	usleep_range(20000, 20100);

	err = mdfld_dsi_send_mcs_short_hs(sender,
			enter_sleep_mode, 0, 0,
			MDFLD_DSI_SEND_PACKAGE);
	if (err) {
		DRM_ERROR("%s: %d: Enter Sleep Mode\n",
		__func__, __LINE__);
		goto power_off_err;
	}

//	usleep_range(1000, 1500);
	return 0;
power_off_err:
	err = -EIO;
	return err;
}
int smd_qhd_amoled_cmd_acl_update(struct mdfld_dsi_config *dsi_config)
{
	int err;
	struct mdfld_dsi_pkg_sender *sender =
		mdfld_dsi_get_pkg_sender(dsi_config);
	int data = ((mdfld_mot_cmn_acl_mode_get() == 1) ? 1 : 0);
	err = mdfld_dsi_send_mcs_short_hs(sender, 0xc0, data, 1,
					MDFLD_DSI_SEND_PACKAGE);
	if (err)
		DRM_ERROR("Failed to set panel to ACL mode %d\n", data);
	else
		PSB_DEBUG_ENTRY("Panel ACL mode set to %d\n", data);

	return err;
}
static int
sharp5_cmd_set_brightness( struct mdfld_dsi_config *dsi_config, int level)
{
	struct mdfld_dsi_pkg_sender *sender =
		mdfld_dsi_get_pkg_sender(dsi_config);
	u8 duty_val = 0;

	PSB_DEBUG_ENTRY("level = %d\n", level);

	if (!sender) {
		DRM_ERROR("Failed to get DSI packet sender\n");
		return -EINVAL;
	}

	duty_val = (0xFF * level) / 255;
	mdfld_dsi_send_mcs_short_hs(sender,
			write_display_brightness, duty_val, 1,
			MDFLD_DSI_SEND_PACKAGE);
	return 0;
}
int mdfld_dsi_sharp10x19_set_brightness(struct mdfld_dsi_config *dsi_config,
					int level)
{
	struct mdfld_dsi_pkg_sender *sender =
		mdfld_dsi_get_pkg_sender(dsi_config);

	PSB_DEBUG_ENTRY("level = %d\n", level);

	if (!sender) {
		DRM_ERROR("Failed to get DSI packet sender\n");
		return -EINVAL;
	}
	mdfld_dsi_send_mcs_short_hs(sender,
		write_display_brightness, level, 1,
		MDFLD_DSI_SEND_PACKAGE);

	/* give some time for new backlight value to take effect */
	msleep(20);

	return 0;
}
static int samsungWQHD_cmd_set_brightness(struct mdfld_dsi_config *dsi_config,
					 int level)
{
	struct mdfld_dsi_pkg_sender *sender =
			mdfld_dsi_get_pkg_sender(dsi_config);
	u8 duty_val = 0;

	if (!sender) {
		DRM_ERROR("Failed to get DSI packet sender\n");
		return -EINVAL;
	}

	duty_val = (0xFF * level) / 255;
	mdfld_dsi_send_mcs_short_hs(sender,
				0x51, duty_val, 1,
				MDFLD_DSI_SEND_PACKAGE);

	printk("[DISP] brightness level = %d\n", level);

	return 0;
}
Пример #19
0
static
int jdi25x16_cmd_power_on(
	struct mdfld_dsi_config *dsi_config)
{

	struct mdfld_dsi_pkg_sender *sender =
		mdfld_dsi_get_pkg_sender(dsi_config);
	int err;
	int i;

	PSB_DEBUG_ENTRY("\n");

	if (!sender) {
		DRM_ERROR("Failed to get DSI packet sender\n");
		return -EINVAL;
	}
	for (i = 0; i < 2; i++) {
		if (i == 0)
			sender->work_for_slave_panel = false;
		else
			sender->work_for_slave_panel = true;

		/* Sleep Out */
		err = mdfld_dsi_send_mcs_short_hs(sender, exit_sleep_mode, 0, 0,
				MDFLD_DSI_SEND_PACKAGE);
		if (err) {
			DRM_ERROR("%s: %d: Exit Sleep Mode\n", __func__, __LINE__);
			goto power_on_err;
		}
		msleep(120);
	}
	sender->work_for_slave_panel = false;
	return 0;

power_on_err:
	sender->work_for_slave_panel = false;
	err = -EIO;
	return err;
}
Пример #20
0
static
int jdi_cmd_drv_ic_init(struct mdfld_dsi_config *dsi_config)
{
	struct mdfld_dsi_pkg_sender *sender
		= mdfld_dsi_get_pkg_sender(dsi_config);
	int err = 0;

	PSB_DEBUG_ENTRY("\n");

	if (!sender) {
		DRM_ERROR("Cannot get sender\n");
		return -EINVAL;
	}
	err = mdfld_dsi_send_mcs_short_hs(sender,
			exit_sleep_mode, 0, 0,
			MDFLD_DSI_SEND_PACKAGE);
	if (err) {
		DRM_ERROR("%s: %d: Exit Sleep Mode\n",
		__func__, __LINE__);
		goto ic_init_err;
	}

	msleep(120);
	err = mdfld_dsi_send_mcs_short_hs(sender,
			write_display_brightness, 0x0, 1,
			MDFLD_DSI_SEND_PACKAGE);
	if (err) {
		DRM_ERROR("%s: %d: Set Brightness\n",
		__func__, __LINE__);
		goto ic_init_err;
	}

	err = mdfld_dsi_send_mcs_short_hs(sender,
			write_ctrl_display, 0x24, 1,
			MDFLD_DSI_SEND_PACKAGE);
	if (err) {
		DRM_ERROR("%s: %d: Write Control Display\n",
		__func__, __LINE__);
		goto ic_init_err;
	}

	err = mdfld_dsi_send_mcs_short_hs(sender,
			write_ctrl_cabc, STILL_IMAGE, 1,
			MDFLD_DSI_SEND_PACKAGE);
	if (err) {
		DRM_ERROR("%s: %d: Write Control CABC\n",
		__func__, __LINE__);
		goto ic_init_err;
	}

	if (!IS_ANN(dev)) {
		err = mdfld_dsi_send_mcs_short_hs(sender,
				write_cabc_min_bright, 51, 1,
				MDFLD_DSI_SEND_PACKAGE);
		if (err) {
			DRM_ERROR("%s: %d: Write CABC minimum brightness\n",
					__func__, __LINE__);
			goto ic_init_err;
		}
	}

	err = mdfld_dsi_send_gen_short_hs(sender,
			access_protect, 4, 2,
			MDFLD_DSI_SEND_PACKAGE);
	if (err) {
		DRM_ERROR("%s: %d: Manufacture command protect on\n",
				__func__, __LINE__);
		goto ic_init_err;
	}

	err = mdfld_dsi_send_gen_long_lp(sender,
			jdi_timing_control,
			21, MDFLD_DSI_SEND_PACKAGE);
	if (err) {
		DRM_ERROR("%s: %d: Set panel timing\n",
				__func__, __LINE__);
		goto ic_init_err;
	}
	msleep(20);

	err = mdfld_dsi_send_mcs_short_hs(sender,
			set_tear_on, 0x00, 1,
			MDFLD_DSI_SEND_PACKAGE);
	if (err) {
		DRM_ERROR("%s: %d: Set Tear On\n",
		__func__, __LINE__);
		goto ic_init_err;
	}

	err = mdfld_dsi_send_mcs_long_hs(sender,
			jdi_mcs_clumn_addr,
			5, MDFLD_DSI_SEND_PACKAGE);
	if (err) {
		DRM_ERROR("%s: %d: Set Clumn Address\n",
		__func__, __LINE__);
		goto ic_init_err;
	}

	err = mdfld_dsi_send_mcs_long_hs(sender,
			jdi_mcs_page_addr,
			5, MDFLD_DSI_SEND_PACKAGE);
	if (err) {
		DRM_ERROR("%s: %d: Set Page Address\n",
		__func__, __LINE__);
		goto ic_init_err;
	}

	return 0;

ic_init_err:
	err = -EIO;
	return err;
}
static int mdfld_dsi_sharp10x19_power_off(
			struct mdfld_dsi_config *dsi_config)
{

	struct mdfld_dsi_pkg_sender *sender =
		mdfld_dsi_get_pkg_sender(dsi_config);
	int err;

	PSB_DEBUG_ENTRY("Turn off video mode TMD panel...\n");
	if (!sender) {
		DRM_ERROR("Failed to get DSI packet sender\n");
		return -EINVAL;
	}
	/*send SHUT_DOWN packet*/
	err = mdfld_dsi_send_dpi_spk_pkg_hs(sender,
				MDFLD_DSI_DPI_SPK_SHUT_DOWN);
	if (err) {
		DRM_ERROR("Failed to send turn off packet\n");
		goto power_off_err;
	}
	msleep(100);

	/* Set Display off */
	err = mdfld_dsi_send_mcs_short_hs(sender, set_display_off, 0, 0,
			MDFLD_DSI_SEND_PACKAGE);
	if (err) {
		DRM_ERROR("%s: %d: Set Display Off\n", __func__, __LINE__);
		goto power_off_err;
	}
	/* Wait for 1 frame after set_display_on. */
	msleep(20);

	/* Sleep In */
	err = mdfld_dsi_send_mcs_short_hs(sender, enter_sleep_mode, 0, 0,
			MDFLD_DSI_SEND_PACKAGE);
	if (err) {
		DRM_ERROR("%s: %d: Enter Sleep Mode\n", __func__, __LINE__);
		goto power_off_err;
	}
	msleep(60);
	err = mdfld_dsi_send_gen_short_hs(sender,
		access_protect, 4, 2,
		MDFLD_DSI_SEND_PACKAGE);
	if (err) {
		DRM_ERROR("%s: %d: Set Access Protect\n", __func__, __LINE__);
		goto power_off_err;
	}
	err = mdfld_dsi_send_gen_short_hs(sender, low_power_mode, 1, 2,
					  MDFLD_DSI_SEND_PACKAGE);
	if (err) {
		DRM_ERROR("%s: %d: Set Low Power Mode\n", __func__, __LINE__);
		goto power_off_err;
	}
	if (bias_en_gpio)
		gpio_set_value_cansleep(bias_en_gpio, 0);
	if (mipi_reset_gpio)
		gpio_set_value_cansleep(mipi_reset_gpio, 0);
	usleep_range(1000, 1500);
	return 0;

power_off_err:
	return -EIO;
}
Пример #22
0
static
int jdi25x16_cmd_drv_ic_init(struct mdfld_dsi_config *dsi_config)
{
	struct mdfld_dsi_pkg_sender *sender
		= mdfld_dsi_get_pkg_sender(dsi_config);
	int err = 0;
	int i = 0;

	PSB_DEBUG_ENTRY("\n");
	if (!sender) {
		DRM_ERROR("Cannot get sender\n");
		return -EINVAL;
	}
	for(i = 0; i < 2; i++) {
		if (i == 0)
			sender->work_for_slave_panel = false;
		else
			sender->work_for_slave_panel = true;
		err = mdfld_dsi_send_mcs_short_hs(sender, soft_reset, 0, 0,
		        MDFLD_DSI_SEND_PACKAGE);
		if (err) {
		    DRM_ERROR("%s: %d: Panel software reset\n", __func__, __LINE__);
		    goto ic_init_err;
		}
		mdelay(25);
		err = mdfld_dsi_send_mcs_short_hs(sender, jdi25x16_pixel_format[0],
				jdi25x16_pixel_format[1], 1, 0);
		if (err) {
		    DRM_ERROR("%s: %d: Set pixel format\n", __func__, __LINE__);
		    goto ic_init_err;
		}

		err = mdfld_dsi_send_mcs_long_hs(sender,
		        jdi25x16_clumn_addr,
				5, MDFLD_DSI_SEND_PACKAGE);
		if (err) {
			DRM_ERROR("%s: %d: Set Clumn Address\n",
			__func__, __LINE__);
			goto ic_init_err;
		}

		err = mdfld_dsi_send_mcs_long_hs(sender,
		        jdi25x16_page_addr,
				5, MDFLD_DSI_SEND_PACKAGE);
		if (err) {
			DRM_ERROR("%s: %d: Set Page Address\n",
			__func__, __LINE__);
			goto ic_init_err;
		}
		err = mdfld_dsi_send_mcs_short_hs(sender, jdi25x16_set_tear_on[0],
				jdi25x16_set_tear_on[1], 1, 0);
		if (err) {
		    DRM_ERROR("%s: %d: Set tear on\n", __func__, __LINE__);
		    goto ic_init_err;
		}
		err = mdfld_dsi_send_mcs_long_hs(sender,
		        jdi25x16_tear_scanline,
				3, MDFLD_DSI_SEND_PACKAGE);
		if (err) {
			DRM_ERROR("%s: %d: Set tear scanline\n",
			__func__, __LINE__);
			goto ic_init_err;
		}
		err = mdfld_dsi_send_mcs_short_hs(sender, jdi25x16_set_brightness[0],
				jdi25x16_set_brightness[1], 1, 0);
		if (err) {
		    DRM_ERROR("%s: %d: Set brightness\n", __func__, __LINE__);
		    goto ic_init_err;
		}
		err = mdfld_dsi_send_mcs_short_hs(sender, jdi25x16_turn_on_backlight[0],
				jdi25x16_turn_on_backlight[1], 1, 0);
		if (err) {
		    DRM_ERROR("%s: %d: Turn on backlight\n", __func__, __LINE__);
		    goto ic_init_err;
		}
	}
	sender->work_for_slave_panel = false;
	return 0;

ic_init_err:
	sender->work_for_slave_panel = false;
	err = -EIO;
	return err;
}
static int orise1284a_vid_drv_ic_reset_workaround(struct mdfld_dsi_config *dsi_config) {

	struct mdfld_dsi_pkg_sender *sender =
		mdfld_dsi_get_pkg_sender(dsi_config);
	int i;

	sender->status = MDFLD_DSI_PKG_SENDER_FREE;

	mdfld_dsi_send_mcs_short_hs(sender, 0x11, 0, 0, MDFLD_DSI_SEND_PACKAGE);
	mdelay(5);
	mdfld_dsi_send_mcs_short_hs(sender, 0x29, 0, 0, MDFLD_DSI_SEND_PACKAGE);

	mdfld_dsi_send_mcs_short_hs(sender, 0x00, 0x80, 1, MDFLD_DSI_SEND_PACKAGE);
	mdfld_dsi_send_mcs_short_hs(sender, 0xFF, 0x12, 1, MDFLD_DSI_SEND_PACKAGE);
	mdfld_dsi_send_mcs_short_hs(sender, 0xFF, 0x84, 1, MDFLD_DSI_SEND_PACKAGE);

	mdfld_dsi_send_mcs_short_hs(sender, 0x00, 0x90, 1, MDFLD_DSI_SEND_PACKAGE);
	mdfld_dsi_send_mcs_short_hs(sender, 0xB6, 0xB6, 1, MDFLD_DSI_SEND_PACKAGE);
	mdfld_dsi_send_mcs_short_hs(sender, 0x00, 0x92, 1, MDFLD_DSI_SEND_PACKAGE);
	mdfld_dsi_send_mcs_short_hs(sender, 0xB3, 0x06, 1, MDFLD_DSI_SEND_PACKAGE);

	mdfld_dsi_send_mcs_short_hs(sender, 0x00, 0x80, 1, MDFLD_DSI_SEND_PACKAGE);
	mdfld_dsi_send_mcs_short_hs(sender, 0xFF, 0x00, 1, MDFLD_DSI_SEND_PACKAGE);
	mdfld_dsi_send_mcs_short_hs(sender, 0xFF, 0x00, 1, MDFLD_DSI_SEND_PACKAGE);

	if (sender->status == MDFLD_DSI_CONTROL_ABNORMAL) {
		printk("[DISP] %s MDFLD_DSI_CONTROL_ABNORMAL !!\n", __func__);
		return -EIO;
	}

	return 0;
}
Пример #24
0
static int jdi25x16_cmd_power_off(
		struct mdfld_dsi_config *dsi_config)
{
	struct mdfld_dsi_pkg_sender *sender =
		mdfld_dsi_get_pkg_sender(dsi_config);
	int err;
	int i;

	PSB_DEBUG_ENTRY("\n");

	if (!sender) {
		DRM_ERROR("Failed to get DSI packet sender\n");
		return -EINVAL;
	}
	for (i = 0; i < 2; i++) {
		if (i == 0)
			sender->work_for_slave_panel = false;
		else
			sender->work_for_slave_panel = true;
		mdelay(20);
		err = mdfld_dsi_send_gen_short_hs(sender,
			access_protect, 0, 2,
			MDFLD_DSI_SEND_PACKAGE);
		if (err) {
			DRM_ERROR("%s: %d: Set MCAP\n",
			__func__, __LINE__);
			goto power_off_err;
		}
		err = mdfld_dsi_send_gen_long_hs(sender, jdi25x16_set_normal_mode,
				2,
				MDFLD_DSI_SEND_PACKAGE);
		if (err) {
			DRM_ERROR("%s: %d: Set Mode\n", __func__, __LINE__);
			goto power_off_err;
		}
		err = mdfld_dsi_send_gen_short_hs(sender,
			access_protect, 3, 2,
			MDFLD_DSI_SEND_PACKAGE);
		if (err) {
			DRM_ERROR("%s: %d: Set MCAP\n",
			__func__, __LINE__);
			goto power_off_err;
		}
	}
	for (i = 0; i < 2; i++) {
		if (i == 0)
			sender->work_for_slave_panel = false;
		else
			sender->work_for_slave_panel = true;
		/* Set Display off */
		err = mdfld_dsi_send_mcs_short_hs(sender, set_display_off, 0, 0,
				MDFLD_DSI_SEND_PACKAGE);
		if (err) {
			DRM_ERROR("%s: %d: Set Display On\n", __func__, __LINE__);
			goto power_off_err;
		}
		msleep(20);
		/* Sleep In */
		err = mdfld_dsi_send_mcs_short_hs(sender, enter_sleep_mode, 0, 0,
				MDFLD_DSI_SEND_PACKAGE);
		if (err) {
			DRM_ERROR("%s: %d: Exit Sleep Mode\n", __func__, __LINE__);
			goto power_off_err;
		}
		msleep(80);
	}
	gpio_set_value_cansleep(bias_en_gpio, 0);
	msleep(10);

	for (i = 0; i < 2; i++) {
		if (i == 0)
			sender->work_for_slave_panel = false;
		else
			sender->work_for_slave_panel = true;
		err = mdfld_dsi_send_gen_short_hs(sender,
				access_protect, 0, 2,
				MDFLD_DSI_SEND_PACKAGE);
			if (err) {
				DRM_ERROR("%s: %d: Set MCAP\n",
				__func__, __LINE__);
				goto power_off_err;
			}
		err = mdfld_dsi_send_gen_short_hs(sender,
				low_power_mode, 1, 2,
				MDFLD_DSI_SEND_PACKAGE);
			if (err) {
				DRM_ERROR("%s: %d: Set MCAP\n",
				__func__, __LINE__);
				goto power_off_err;
			}
	}
	sender->work_for_slave_panel = false;
	return 0;
power_off_err:
	sender->work_for_slave_panel = false;
	err = -EIO;
	return err;
}
Пример #25
0
int jdi25x16_cmd_set_mode(struct mdfld_dsi_config *dsi_config)
{

	struct mdfld_dsi_pkg_sender *sender =
		mdfld_dsi_get_pkg_sender(dsi_config);
	int err;
	int i = 0;

	PSB_DEBUG_ENTRY("\n");

	if (!sender) {
		DRM_ERROR("Failed to get DSI packet sender\n");
		return -EINVAL;
	}
	for (i = 0; i < 2; i++) {
		if (i == 0)
			sender->work_for_slave_panel = false;
		else
			sender->work_for_slave_panel = true;
		mdelay(20);
		err = mdfld_dsi_send_gen_short_hs(sender,
			access_protect, 0, 2,
			MDFLD_DSI_SEND_PACKAGE);
		if (err) {
			DRM_ERROR("%s: %d: Set MCAP\n",
			__func__, __LINE__);
			goto set_mode_err;
		}

		err = mdfld_dsi_send_gen_long_hs(sender, jdi25x16_set_vid_mode,
				2,
				MDFLD_DSI_SEND_PACKAGE);
		if (err) {
			DRM_ERROR("%s: %d: Set Mode\n", __func__, __LINE__);
			goto set_mode_err;
		}
		err = mdfld_dsi_send_gen_short_hs(sender,
			access_protect, 3, 2,
			MDFLD_DSI_SEND_PACKAGE);
		if (err) {
			DRM_ERROR("%s: %d: Set MCAP\n",
			__func__, __LINE__);
			goto set_mode_err;
		}
		/* Set Display on 0x29 */
		err = mdfld_dsi_send_mcs_short_hs(sender, set_display_on, 0, 0,
				MDFLD_DSI_SEND_PACKAGE);
		if (err) {
			DRM_ERROR("%s: %d: Set Display On\n", __func__, __LINE__);
			goto set_mode_err;
		}
	}

	for (i = 0; i < 2; i++) {
		if (i == 0)
			sender->work_for_slave_panel = false;
		else
			sender->work_for_slave_panel = true;
		mdelay(20);
		err = mdfld_dsi_send_gen_short_hs(sender,
			access_protect, 0, 2,
			MDFLD_DSI_SEND_PACKAGE);
		if (err) {
			DRM_ERROR("%s: %d: Set MCAP\n",
			__func__, __LINE__);
			goto set_mode_err;
		}
		err = mdfld_dsi_send_gen_long_hs(sender, jdi25x16_set_cmd_mode,
				2,
				MDFLD_DSI_SEND_PACKAGE);
		if (err) {
			DRM_ERROR("%s: %d: Set Mode\n", __func__, __LINE__);
			goto set_mode_err;
		}
		err = mdfld_dsi_send_gen_short_hs(sender,
			access_protect, 3, 2,
			MDFLD_DSI_SEND_PACKAGE);
		if (err) {
			DRM_ERROR("%s: %d: Set MCAP\n",
			__func__, __LINE__);
			goto set_mode_err;
		}
	}
	sender->work_for_slave_panel = false;
	return 0;

set_mode_err:
	sender->work_for_slave_panel = false;
	err = -EIO;
	return err;
}
static int sharp5_cmd_drv_ic_init(struct mdfld_dsi_config *dsi_config)
{
	struct mdfld_dsi_pkg_sender *sender =
		mdfld_dsi_get_pkg_sender(dsi_config);
	int ret;
	u8 cmd;

	/* exit sleep */
	cmd = exit_sleep_mode;
	ret = mdfld_dsi_send_mcs_short_hs(sender,
					  cmd, 0, 0, MDFLD_DSI_SEND_PACKAGE);
	if (ret)
		goto err_out;
	msleep(120);

	/* unlock MCW */
	cmd = access_protect;
	ret = mdfld_dsi_send_mcs_short_hs(sender,
					  cmd, 0x0, 1, MDFLD_DSI_SEND_PACKAGE);
	if (ret)
		goto err_out;

	/* reload NVM */
	cmd = sharp5_remove_nvm_reload;
	ret = mdfld_dsi_send_mcs_short_hs(sender,
					  cmd, 0x1, 1, MDFLD_DSI_SEND_PACKAGE);
	if (ret)
		goto err_out;

	/* send display brightness */
	cmd = write_display_brightness;
	ret = mdfld_dsi_send_mcs_short_hs(sender,
					  cmd, 0xff, 1, MDFLD_DSI_SEND_PACKAGE);
	if (ret)
		goto err_out;

	/* display control */
	cmd = write_ctrl_display;
	ret = mdfld_dsi_send_mcs_short_hs(sender,
					  cmd, 0x0c, 1, MDFLD_DSI_SEND_PACKAGE);
	if (ret)
		goto err_out;

	/* CABC */
	cmd = 0x55;
	ret = mdfld_dsi_send_mcs_short_hs(sender,
					  cmd, 0x0, 1, MDFLD_DSI_SEND_PACKAGE);
	if (ret)
		goto err_out;

	/* tear on*/
	cmd = set_tear_on;
	ret = mdfld_dsi_send_mcs_short_hs(sender,
					  cmd, 0x0, 1, MDFLD_DSI_SEND_PACKAGE);
	if (ret)
		goto err_out;

	/* column address */
	cmd = 0x2a;
	ret = mdfld_dsi_send_mcs_long_hs(sender, sharp5_mcs_column_addr, 5,
					 MDFLD_DSI_SEND_PACKAGE);
	if (ret)
		goto err_out;

	/* page address */
	cmd = 0x2b;
	ret = mdfld_dsi_send_mcs_long_hs(sender, sharp5_mcs_page_addr, 5,
					 MDFLD_DSI_SEND_PACKAGE);
	if (ret)
		goto err_out;

	return 0;

err_out:
	DRM_ERROR("failed to send command %#x\n", cmd);
	return ret;
}
static int mdfld_dsi_jdi_power_on(struct mdfld_dsi_config *dsi_config)
{
	struct mdfld_dsi_pkg_sender *sender =
		mdfld_dsi_get_pkg_sender(dsi_config);
	int err;

	PSB_DEBUG_ENTRY("\n");

	if (!sender) {
		DRM_ERROR("Failed to get DSI packet sender\n");
		return -EINVAL;
	}

	/* Sleep Out */
	err = mdfld_dsi_send_mcs_short_hs(sender, exit_sleep_mode, 0, 0,
			MDFLD_DSI_SEND_PACKAGE);
	if (err) {
		DRM_ERROR("%s: %d: Exit Sleep Mode\n", __func__, __LINE__);
		goto power_on_err;
	}
	/* Wait for 6 frames after exit_sleep_mode. */
	msleep(100);

	err = mdfld_dsi_send_gen_short_hs(sender,access_protect, 0x4, 2,
                        MDFLD_DSI_SEND_PACKAGE);
	if (err) {
		DRM_ERROR("%s: %d: Set MCAP\n",__func__, __LINE__);
		goto power_on_err;
	}

	err = mdfld_dsi_send_gen_long_hs(sender, jdi_set_mode,2,
			MDFLD_DSI_SEND_PACKAGE);
	if (err) {
		DRM_ERROR("%s: %d: Set Mode\n", __func__, __LINE__);
		goto power_on_err;
	}

	err = mdfld_dsi_send_gen_short_hs(sender,access_protect, 0x3, 2,
                        MDFLD_DSI_SEND_PACKAGE);
	if (err) {
		DRM_ERROR("%s: %d: Set MCAP\n",__func__, __LINE__);
		goto power_on_err;
	}

	/* Set Display on */
	err = mdfld_dsi_send_mcs_short_hs(sender, set_display_on, 0, 0,
			MDFLD_DSI_SEND_PACKAGE);
	if (err) {
		DRM_ERROR("%s: %d: Set Display On\n", __func__, __LINE__);
		goto power_on_err;
	}
	/* Wait for 1 frame after set_display_on. */
	msleep(20);

	/* Send TURN_ON packet */
	err = mdfld_dsi_send_dpi_spk_pkg_hs(sender, MDFLD_DSI_DPI_SPK_TURN_ON);
	if (err) {
		DRM_ERROR("Failed to send turn on packet\n");
		goto power_on_err;
	}

	/* Write control display */
	err = mdfld_dsi_send_mcs_short_hs(sender, write_ctrl_display, 0x24, 1,
			MDFLD_DSI_SEND_PACKAGE);
	if (err) {
		DRM_ERROR("%s: %d: Write Control Display\n", __func__,
				__LINE__);
		goto power_on_err;
	}

	return 0;

power_on_err:
	err = -EIO;
	return err;
}
static int sharp5_cmd_power_off(struct mdfld_dsi_config *dsi_config)
{
	struct mdfld_dsi_pkg_sender *sender =
		mdfld_dsi_get_pkg_sender(dsi_config);
	int err;

	PSB_DEBUG_ENTRY("\n");

	if (!sender) {
		DRM_ERROR("Failed to get DSI packet sender\n");
		return -EINVAL;
	}

	err = mdfld_dsi_send_mcs_short_hs(sender,
			set_display_off, 0, 0,
			MDFLD_DSI_SEND_PACKAGE);
	if (err) {
		DRM_ERROR("%s: %d: Set Display Off\n", __func__, __LINE__);
		goto power_off_err;
	}
	usleep_range(20000, 20100);

	err = mdfld_dsi_send_mcs_short_hs(sender,
			set_tear_off, 0, 0,
			MDFLD_DSI_SEND_PACKAGE);
	if (err) {
		DRM_ERROR("%s: %d: Set Tear Off\n", __func__, __LINE__);
		goto power_off_err;
	}

	err = mdfld_dsi_send_mcs_short_hs(sender,
			enter_sleep_mode, 0, 0,
			MDFLD_DSI_SEND_PACKAGE);
	if (err) {
		DRM_ERROR("%s: %d: Enter Sleep Mode\n", __func__, __LINE__);
		goto power_off_err;
	}

	msleep(60);

	err = mdfld_dsi_send_gen_short_hs(sender,
		access_protect, 4, 2,
		MDFLD_DSI_SEND_PACKAGE);
	if (err) {
		DRM_ERROR("%s: %d: Set Access Protect\n", __func__, __LINE__);
		goto power_off_err;
	}

	err = mdfld_dsi_send_gen_short_hs(sender, low_power_mode, 1, 2,
					  MDFLD_DSI_SEND_PACKAGE);
	if (err) {
		DRM_ERROR("%s: %d: Set Low Power Mode\n", __func__, __LINE__);
		goto power_off_err;
	}
	if (bias_en_gpio)
		gpio_set_value_cansleep(bias_en_gpio, 0);
	usleep_range(1000, 1500);

	return 0;
power_off_err:
	err = -EIO;
	return err;
}
int mdfld_dsi_jdi_ic_init(struct mdfld_dsi_config *dsi_config)
{
	struct mdfld_dsi_pkg_sender *sender
		= mdfld_dsi_get_pkg_sender(dsi_config);
	int err = 0;

	PSB_DEBUG_ENTRY("\n");

	if (!sender) {
		DRM_ERROR("Cannot get sender\n");
		return -EINVAL;
	}

	/* Set Address Mode */
	err = mdfld_dsi_send_mcs_long_hs(sender, jdi_set_address_mode,
			4,
			MDFLD_DSI_SEND_PACKAGE);
	if (err) {
		DRM_ERROR("%s: %d: Set Address Mode\n", __func__, __LINE__);
		goto ic_init_err;
	}

	/* Set Pixel format */
	err = mdfld_dsi_send_mcs_short_hs(sender, set_pixel_format, 0x70, 1,
			MDFLD_DSI_SEND_PACKAGE);
	if (err) {
		DRM_ERROR("%s: %d: Set Pixel format\n", __func__, __LINE__);
		goto ic_init_err;
	}

	/* change "ff0f" according to the brightness desired. */
	err = mdfld_dsi_send_mcs_long_hs(sender, jdi_write_display_brightness,
			4, MDFLD_DSI_SEND_PACKAGE);
	if (err) {
		DRM_ERROR("%s: %d: Set Brightness\n", __func__, __LINE__);
		goto ic_init_err;
	}

	/* Write control CABC */
	err = mdfld_dsi_send_mcs_short_hs(sender,
		write_ctrl_cabc, dsi_config->cabc_mode, 1,
		MDFLD_DSI_SEND_PACKAGE);
	if (err) {
		DRM_ERROR("%s: %d: Write Control CABC\n", __func__, __LINE__);
		goto ic_init_err;
	}
	err = mdfld_dsi_send_mcs_long_hs(sender,jdi_mcs_clumn_addr,
			5, MDFLD_DSI_SEND_PACKAGE);
	if (err) {
		DRM_ERROR("%s: %d: Set Clumn Address\n",__func__, __LINE__);
		goto ic_init_err;
	}

	err = mdfld_dsi_send_mcs_long_hs(sender,jdi_mcs_page_addr,
			5, MDFLD_DSI_SEND_PACKAGE);
	if (err) {
		DRM_ERROR("%s: %d: Set Page Address\n",__func__, __LINE__);
		goto ic_init_err;
	}
	return 0;

ic_init_err:
	err = -EIO;
	return err;
}
Пример #30
0
static
void jdi_cmd_controller_init(
		struct mdfld_dsi_config *dsi_config)
{

	struct mdfld_dsi_hw_context *hw_ctx =
				&dsi_config->dsi_hw_context;
#ifdef ENABLE_CSC_GAMMA /*FIXME*/
	struct drm_device *dev = dsi_config->dev;

	struct csc_setting csc = {
			.pipe = 0,
			.type = CSC_REG_SETTING,
			.enable_state = true,
			.data_len = CSC_REG_COUNT,
			.data.csc_reg_data = {
			0xFFB0424, 0xFDF, 0x4320FF1,
			0xFDC, 0xFF50FF5, 0x415}
		 };
	struct gamma_setting gamma = {
		.pipe = 0,
		.type = GAMMA_REG_SETTING,
		.enable_state = true,
		.data_len = GAMMA_10_BIT_TABLE_COUNT,
		.gamma_tableX100 = {
			0x000000, 0x030303, 0x050505, 0x070707,
			0x090909, 0x0C0C0C, 0x0E0E0E, 0x101010,
			0x121212, 0x141414, 0x171717, 0x191919,
			0x1B1B1B, 0x1D1D1D, 0x1F1F1F, 0x212121,
			0x232323, 0x252525, 0x282828, 0x2A2A2A,
			0x2C2C2C, 0x2E2E2E, 0x303030, 0x323232,
			0x343434, 0x363636, 0x383838, 0x3A3A3A,
			0x3C3C3C, 0x3E3E3E, 0x404040, 0x424242,
			0x444444, 0x464646, 0x484848, 0x4A4A4A,
			0x4C4C4C, 0x4E4E4E, 0x505050, 0x525252,
			0x545454, 0x565656, 0x585858, 0x5A5A5A,
			0x5C5C5C, 0x5E5E5E, 0x606060, 0x626262,
			0x646464, 0x666666, 0x686868, 0x6A6A6A,
			0x6C6C6C, 0x6E6E6E, 0x707070, 0x727272,
			0x747474, 0x767676, 0x787878, 0x7A7A7A,
			0x7C7C7C, 0x7E7E7E, 0x808080, 0x828282,
			0x848484, 0x868686, 0x888888, 0x8A8A8A,
			0x8C8C8C, 0x8E8E8E, 0x909090, 0x929292,
			0x949494, 0x969696, 0x989898, 0x999999,
			0x9B9B9B, 0x9D9D9D, 0x9F9F9F, 0xA1A1A1,
			0xA3A3A3, 0xA5A5A5, 0xA7A7A7, 0xA9A9A9,
			0xABABAB, 0xADADAD, 0xAFAFAF, 0xB1B1B1,
			0xB3B3B3, 0xB5B5B5, 0xB6B6B6, 0xB8B8B8,
			0xBABABA, 0xBCBCBC, 0xBEBEBE, 0xC0C0C0,
			0xC2C2C2, 0xC4C4C4, 0xC6C6C6, 0xC8C8C8,
			0xCACACA, 0xCCCCCC, 0xCECECE, 0xCFCFCF,
			0xD1D1D1, 0xD3D3D3, 0xD5D5D5, 0xD7D7D7,
			0xD9D9D9, 0xDBDBDB, 0xDDDDDD, 0xDFDFDF,
			0xE1E1E1, 0xE3E3E3, 0xE4E4E4, 0xE6E6E6,
			0xE8E8E8, 0xEAEAEA, 0xECECEC, 0xEEEEEE,
			0xF0F0F0, 0xF2F2F2, 0xF4F4F4, 0xF6F6F6,
			0xF7F7F7, 0xF9F9F9, 0xFBFBFB, 0xFDFDFD}
	 };
#endif

	PSB_DEBUG_ENTRY("\n");

	/*reconfig lane configuration*/
	dsi_config->lane_count = 3;
	dsi_config->lane_config = MDFLD_DSI_DATA_LANE_4_0;
	/* FIXME: enable CSC and GAMMA */
	/*dsi_config->enable_gamma_csc = ENABLE_GAMMA | ENABLE_CSC;*/
	/* This is for 400 mhz.  Set it to 0 for 800mhz */
	hw_ctx->cck_div = 1;
	hw_ctx->pll_bypass_mode = 0;

	if (IS_ANN(dev)) {
		hw_ctx->mipi_control = 0x18;
		hw_ctx->intr_en = 0xFFFFFFFF;
		hw_ctx->hs_tx_timeout = 0xFFFFFF;
		hw_ctx->lp_rx_timeout = 0xFFFFFF;
		hw_ctx->device_reset_timer = 0xff;
		hw_ctx->turn_around_timeout = 0xffff;
		hw_ctx->high_low_switch_count = 0x20;
		hw_ctx->clk_lane_switch_time_cnt = 0x21000e;
		hw_ctx->lp_byteclk = 0x4;
		hw_ctx->dphy_param = 0x1b104315;
		hw_ctx->eot_disable = 0x1;
		hw_ctx->init_count = 0x7d0;
		hw_ctx->dbi_bw_ctrl = 1390;
		hw_ctx->hs_ls_dbi_enable = 0x0;
		hw_ctx->dsi_func_prg = ((DBI_DATA_WIDTH_OPT2 << 13) |
				dsi_config->lane_count);
		hw_ctx->mipi = SEL_FLOPPED_HSTX	| PASS_FROM_SPHY_TO_AFE |
			BANDGAP_CHICKEN_BIT | TE_TRIGGER_GPIO_PIN;
	} else {
		hw_ctx->mipi_control = 0x0;
		hw_ctx->intr_en = 0xFFFFFFFF;
		hw_ctx->hs_tx_timeout = 0xFFFFFF;
		hw_ctx->lp_rx_timeout = 0xFFFFFF;
		hw_ctx->device_reset_timer = 0xffff;
		hw_ctx->turn_around_timeout = 0x1a;
		hw_ctx->high_low_switch_count = 0x21;
		hw_ctx->clk_lane_switch_time_cnt = 0x21000f;
		hw_ctx->lp_byteclk = 0x5;
		hw_ctx->dphy_param = 0x25155b1e;
		hw_ctx->eot_disable = 0x3;
		hw_ctx->init_count = 0xf0;
		hw_ctx->dbi_bw_ctrl = 1390;
		hw_ctx->hs_ls_dbi_enable = 0x0;
		hw_ctx->dsi_func_prg = ((DBI_DATA_WIDTH_OPT2 << 13) |
				dsi_config->lane_count);
		hw_ctx->mipi = PASS_FROM_SPHY_TO_AFE |
			BANDGAP_CHICKEN_BIT |
			TE_TRIGGER_GPIO_PIN;
	}
	hw_ctx->video_mode_format = 0xf;

#ifdef ENABLE_CSC_GAMMA /*FIXME*/
	if (dsi_config->enable_gamma_csc & ENABLE_CSC) {
		/* setting the tuned csc setting */
		drm_psb_enable_color_conversion = 1;
		mdfld_intel_crtc_set_color_conversion(dev, &csc);
	}

	if (dsi_config->enable_gamma_csc & ENABLE_GAMMA) {
		/* setting the tuned gamma setting */
		drm_psb_enable_gamma = 1;
		mdfld_intel_crtc_set_gamma(dev, &gamma);
	}
#endif

}
static
int jdi_cmd_panel_connection_detect(
	struct mdfld_dsi_config *dsi_config)
{
	int status;
	int pipe = dsi_config->pipe;

	PSB_DEBUG_ENTRY("\n");

	if (pipe == 0) {
		status = MDFLD_DSI_PANEL_CONNECTED;
	} else {
		DRM_INFO("%s: do NOT support dual panel\n",
		__func__);
		status = MDFLD_DSI_PANEL_DISCONNECTED;
	}

	return status;
}

static
int jdi_cmd_power_on(
	struct mdfld_dsi_config *dsi_config)
{

	struct mdfld_dsi_pkg_sender *sender =
		mdfld_dsi_get_pkg_sender(dsi_config);
	int err = 0;

	PSB_DEBUG_ENTRY("\n");

	if (!sender) {
		DRM_ERROR("Failed to get DSI packet sender\n");
		return -EINVAL;
	}

	err = mdfld_dsi_send_mcs_short_hs(sender,
			set_address_mode, 0x0, 1,
			MDFLD_DSI_SEND_PACKAGE);
	if (err) {
		DRM_ERROR("%s: %d: Set Address Mode\n",
		__func__, __LINE__);
		goto power_err;
	}
	usleep_range(20000, 20100);

	err = mdfld_dsi_send_mcs_short_hs(sender,
			set_pixel_format, 0x77, 1,
			MDFLD_DSI_SEND_PACKAGE);
	if (err) {
		DRM_ERROR("%s: %d: Set Pixel format\n",
		__func__, __LINE__);
		goto power_err;
	}

	/*turn on display*/
	err = mdfld_dsi_send_dcs(sender,
		 set_display_on,
		 NULL,
		 0,
		 CMD_DATA_SRC_SYSTEM_MEM,
		 MDFLD_DSI_SEND_PACKAGE);
	if (err) {
		DRM_ERROR("faild to set_display_on mode\n");
		goto power_err;
	}
	usleep_range(20000, 20100);

power_err:
	return err;
}

static void __vpro2_power_ctrl(bool on)
{
	u8 addr, value;
	addr = 0xad;
	if (intel_scu_ipc_ioread8(addr, &value))
		DRM_ERROR("%s: %d: failed to read vPro2\n",
		__func__, __LINE__);

	/* Control vPROG2 power rail with 2.85v. */
	if (on)
		value |= 0x1;
	else
		value &= ~0x1;

	if (intel_scu_ipc_iowrite8(addr, value))
		DRM_ERROR("%s: %d: failed to write vPro2\n",
				__func__, __LINE__);
}