void mdfld_dsi_dpi_set_color_mode(struct mdfld_dsi_config *dsi_config , bool on)
{
	struct mdfld_dsi_pkg_sender *sender =
		mdfld_dsi_get_pkg_sender(dsi_config);
	int err;
	u32  spk_pkg =  (on == true) ? MDFLD_DSI_DPI_SPK_COLOR_MODE_ON :
		MDFLD_DSI_DPI_SPK_COLOR_MODE_OFF;


	PSB_DEBUG_ENTRY("Turn  color mode %s  pkg value= %d...\n",
			(on ? "on" : "off"), spk_pkg);

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

	/*send turn on/off color mode packet*/
	err = mdfld_dsi_send_dpi_spk_pkg_hs(sender,
			spk_pkg);
	if (err) {
		DRM_ERROR("Failed to send turn on packet\n");
		return ;
	}
	PSB_DEBUG_ENTRY("Turn  color mode %s successful.\n",
			(on ? "on" : "off"));
	return;
}
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 mdfld_dsi_pr2_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;
	}

	/*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");
		return err;
	}
	/**
	 * According HW DSI spec, here need wait for 100ms. This is
	 * not necessary as the code is anyway sleeping 141 ms later
	 * in this function
	 */

	mdfld_dsi_send_gen_long_hs(sender, pr2_mcs_protect_off, 2, 0);
	/*change power state*/
	mdfld_dsi_send_mcs_long_hs(sender, pr2_exit_sleep_mode, 4, 0);

	/*120ms delay is needed between enter and exit sleep mode per spec*/
	msleep(120);

	/*enable PWMON*/
	pr2_backlight_control_2[1] |= 0x01;
	mdfld_dsi_send_mcs_long_hs(sender,
			pr2_backlight_control_2, 8, 0);

	/*set display on*/
	mdfld_dsi_send_mcs_long_hs(sender, pr2_set_display_on, 4, 0);
	/* Per panel spec, 21ms delay is needed */
	msleep(21);

	/*Enable BLON , CABC*/
	if (drm_psb_enable_cabc) {
		pr2_backlight_control_1[1] |= 0x01;
		mdfld_dsi_send_gen_long_hs(sender,
				pr2_backlight_control_1, 24, 0);
		DRM_INFO("%s: enable pr2 cabc\n", __func__);
	}

	return 0;
}
Esempio n. 4
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;
}
static
int mdfld_dsi_pr2_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");
		return err;
	}
	/*according HW DSI spec, need wait for 100ms*/
	msleep(100);

	mdfld_dsi_send_gen_long_hs(sender, pr2_mcs_protect_off, 2, 0);
	/*change power state here*/
	mdfld_dsi_send_mcs_long_hs(sender, pr2_set_display_off, 4, 0);

	/*disable BLCON, disable CABC*/
	pr2_backlight_control_1[1] &= ~0x01;
	mdfld_dsi_send_gen_long_hs(sender,
			pr2_backlight_control_1, 6, 0);
	/* Per panel spec, 21ms delay is needed */
	msleep(21);

	mdfld_dsi_send_mcs_long_hs(sender, pr2_enter_sleep_mode, 4, 0);
	/*120ms delay is needed between enter and exit sleep mode per spec*/
	msleep(120);

	/*put panel into deep standby mode*/
	mdfld_dsi_send_gen_long_hs(sender,
			pr2_enter_low_power_mode, 4, 0);

	mdfld_dsi_send_gen_long_hs(sender, pr2_mcs_protect_on, 4, 0);

	return 0;
}
Esempio n. 6
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;
}
/**
 * Send TURN_ON package to dpi panel to turn it on
 */
static int mdfld_dsi_dpi_panel_turn_on(struct mdfld_dsi_config *dsi_config,
		struct panel_funcs *p_funcs)
{
	struct mdfld_dsi_pkg_sender *sender =
		mdfld_dsi_get_pkg_sender(dsi_config);
	struct mdfld_dsi_hw_context *ctx;
	int err = 0;

	err = mdfld_dsi_send_dpi_spk_pkg_hs(sender,
			MDFLD_DSI_DPI_SPK_TURN_ON);
	/*According HW DSI spec, here need wait for 100ms*/
	/*To optimize dpms flow, move sleep out of mutex*/
	/* msleep(100); */

	ctx = &dsi_config->dsi_hw_context;
	if (p_funcs->set_brightness(dsi_config, ctx->lastbrightnesslevel))
		DRM_ERROR("Failed to set panel brightness\n");

	return err;
}
Esempio n. 8
0
static int mdfld_dsi_h8c7_power_off(struct mdfld_dsi_config *dsi_config)
{
	struct mdfld_dsi_pkg_sender *sender =
		mdfld_dsi_get_pkg_sender(dsi_config);
	unsigned long wait_timeout;
	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");
		return err;
	}

	/* FIXME disable CABC later*/

	/*set display off*/
	mdfld_dsi_send_mcs_long_hs(sender, h8c7_set_display_off, 4, 0);
	wait_timeout = jiffies + (HZ / 100);
	while (time_before_eq(jiffies, wait_timeout))
		cpu_relax();

	/* sleep in and wait for 150ms. */
	mdfld_dsi_send_mcs_long_hs(sender, h8c7_enter_sleep_mode, 4, 0);
	wait_timeout = jiffies + (3 * HZ / 20);
	while (time_before_eq(jiffies, wait_timeout))
		cpu_relax();

	return 0;
}
/**
 * Send SHUT_DOWN package to dpi panel to turn if off
 */
static int mdfld_dsi_dpi_panel_shut_down(struct mdfld_dsi_config *dsi_config,
        struct panel_funcs *p_funcs)
{
    struct mdfld_dsi_pkg_sender *sender =
        mdfld_dsi_get_pkg_sender(dsi_config);
    struct mdfld_dsi_hw_context *ctx;
    int err = 0;

    ctx = &dsi_config->dsi_hw_context;
    ctx->lastbrightnesslevel = psb_brightness;
    if (!dpms_bl_flag)
        dpms_bl_flag = true;
    if (p_funcs->set_brightness(dsi_config, 0))
        DRM_ERROR("Failed to set panel brightness\n");

    err = mdfld_dsi_send_dpi_spk_pkg_hs(sender,
                                        MDFLD_DSI_DPI_SPK_SHUT_DOWN);
    /*According HW DSI spec, here need wait for 100ms*/
    /*To optimize dpms flow, move sleep out of mutex*/
    /* msleep(100); */

    return err;
}
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 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;
}
static int mdfld_dsi_sharp10x19_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("Turn on video mode TMD panel...\n");

	if (!sender) {
		DRM_ERROR("Failed to get DSI packet 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 power_on_err;
	}
	msleep(120);

	/* 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_on_err;
	}

	/*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");
		return err;
	}

	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, sharp10x19_set_mode, 2,
			MDFLD_DSI_SEND_PACKAGE);
	if (err) {
		DRM_ERROR("%s: %d: Set Mode\n", __func__, __LINE__);
		goto power_on_err;
	}

	msleep(20);

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

	return 0;
power_on_err:
	err = -EIO;
	return err;
}