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

Commit 5eac3aa5 authored by tianrunlong's avatar tianrunlong Committed by lio.chen
Browse files

LCD: Set hbm command after vfp before vsa test

Change-Id: Ie2b285293f8f1d2dd2ae59c9206057fc5f31c384
parent 105976e5
Loading
Loading
Loading
Loading
+3 −3
Original line number Diff line number Diff line
@@ -10818,11 +10818,11 @@ static int mtk_dsi_io_cmd(struct mtk_ddp_comp *comp, struct cmdq_pkt *handle,
	{
		panel_ext = mtk_dsi_get_panel_ext(comp);
		if (!(panel_ext && panel_ext->funcs &&
		      panel_ext->funcs->hbm_set_cmdq))
		      panel_ext->funcs->hbm_set_pack))
			break;

		panel_ext->funcs->hbm_set_cmdq(dsi->panel, dsi,
					       mipi_dsi_dcs_write_gce, handle,
		panel_ext->funcs->hbm_set_pack(dsi->panel, dsi,
					       mtk_dsi_cmdq_pack_gce, handle,
					       *(bool *)params);
		break;
	}
+2 −0
Original line number Diff line number Diff line
@@ -700,6 +700,8 @@ struct mtk_panel_funcs {

	int (*hbm_set_cmdq)(struct drm_panel *panel, void *dsi_drv,
			    dcs_write_gce cb, void *handle, bool en);
	int (*hbm_set_pack)(struct drm_panel *panel, void *dsi, dcs_write_gce_pack cb,
		void *handle, bool en);
	void (*hbm_get_state)(struct drm_panel *panel, bool *state);
	void (*hbm_get_wait_state)(struct drm_panel *panel, bool *wait);
	bool (*hbm_set_wait_state)(struct drm_panel *panel, bool wait);
+53 −30
Original line number Diff line number Diff line
@@ -534,22 +534,37 @@ static int lcm_setbacklight_cmdq(void *dsi,
	return 0;
}

static int panel_hbm_set_cmdq(struct drm_panel *panel, void *dsi,
			      dcs_write_gce cb, void *handle, bool en)
static struct LCM_mtk_setting_table elvssdly_cmd_tb[] = {
	{3, {0xF0, 0x5A, 0x5A}},
	{4, {0xB0, 0x00, 0x0C, 0xB2}},
	{2, {0xB2, 0x30}},
	{2, {0x53, 0xE0}},
	{3, {0x51, 0x05, 0xF4}},
	{2, {0xF7, 0x0B}},
	{3, {0xF0, 0xA5, 0xA5}},
};

static struct LCM_mtk_setting_table hbm_code_cmd_tb[] = {
	{2, {0x53, 0xE0}},
	{3, {0x51, 0x05, 0xF4}},
	{2, {0xF7, 0x0B}},
};

static struct LCM_mtk_setting_table backlight_code_cmd_tb[] = {
	{2, {0x53, 0x20}},
	{3, {0x51, 0x05, 0xF4}},
	{2, {0xF7, 0x0B}},
};

static int panel_set_hbm_pack(struct drm_panel *panel, void *dsi, dcs_write_gce_pack cb,
		void *handle, bool en)
{
		struct lcm *ctx = panel_to_lcm(panel);
	unsigned int level = 0xff;
	char hbm_buf01[] = {0xF0, 0x5A, 0x5A};
	char hbm_buf02[] = {0x53, 0x20};
	char hbm_buf03[] = {0x53, 0xE0};
	char hbm_buf04[] = {0x51, 0x05, 0xF4};
	char hbm_buf05[] = {0xF7, 0x0B};
	char hbm_buf06[] = {0xF0, 0xA5, 0xA5};

	char elvssdly_con[] = {0xB0, 0x00, 0x0C, 0xB2};
	char elvssoff_dlyon [] = {0xB2, 0x30};
	int cmd_cnt = 0;

	if (!cb) {
		pr_info("[LCM]cb is null, panel_hbm_set_cmdq return -1\n");
		pr_info("[LCM]cb is null, %s return -1\n", __func__);
		return 0;
	}

@@ -557,30 +572,23 @@ static int panel_hbm_set_cmdq(struct drm_panel *panel, void *dsi,
		goto done;

	if (en) {
		cb(dsi, handle, hbm_buf01, ARRAY_SIZE(hbm_buf01));
		cb(dsi, handle, elvssdly_con, ARRAY_SIZE(elvssdly_con));
		cb(dsi, handle, elvssoff_dlyon, ARRAY_SIZE(elvssoff_dlyon));
		cb(dsi, handle, hbm_buf03, ARRAY_SIZE(hbm_buf03));
		cb(dsi, handle, hbm_buf04, ARRAY_SIZE(hbm_buf04));
		cb(dsi, handle, hbm_buf05, ARRAY_SIZE(hbm_buf05));
		cb(dsi, handle, hbm_buf06, ARRAY_SIZE(hbm_buf06));
		cmd_cnt = sizeof(elvssdly_cmd_tb) / sizeof(struct LCM_mtk_setting_table);
		panel_send_pack_cmd(dsi, elvssdly_cmd_tb, cmd_cnt, cb, handle);
		pr_info("[LCM]hbm, set to hbm bl!\n");
	} else {
		lcm_hbmoff_state = 1;
		if (g_level > 0x7FF) {
			level = g_level - 0x800;
			hbm_buf04[1] = (level>>8)&0xf;
			hbm_buf04[2] = (level)&0xff;
			cb(dsi, handle, hbm_buf03, ARRAY_SIZE(hbm_buf03));
			cb(dsi, handle, hbm_buf04, ARRAY_SIZE(hbm_buf04));
			cb(dsi, handle, hbm_buf05, ARRAY_SIZE(hbm_buf05));
			hbm_code_cmd_tb[1].para_list[1] = (level>>8)&0xf;
			hbm_code_cmd_tb[1].para_list[2] = (level)&0xff;
			cmd_cnt = sizeof(hbm_code_cmd_tb) / sizeof(struct LCM_mtk_setting_table);
			panel_send_pack_cmd(dsi, hbm_code_cmd_tb, cmd_cnt, cb, handle);
			pr_info("[LCM]hbm, restore hbm bl:%d\n",g_level);
		} else {
			hbm_buf04[1] = (g_level>>8)&0xf;
			hbm_buf04[2] = (g_level)&0xff;
			cb(dsi, handle, hbm_buf02, ARRAY_SIZE(hbm_buf02));
			cb(dsi, handle, hbm_buf04, ARRAY_SIZE(hbm_buf04));
			cb(dsi, handle, hbm_buf05, ARRAY_SIZE(hbm_buf05));
			backlight_code_cmd_tb[1].para_list[1]  = (g_level>>8)&0xf;
			backlight_code_cmd_tb[1].para_list[2]  = (g_level)&0xff;
			cmd_cnt = sizeof(backlight_code_cmd_tb) / sizeof(struct LCM_mtk_setting_table);
			panel_send_pack_cmd(dsi, backlight_code_cmd_tb, cmd_cnt, cb, handle);
			pr_info("[LCM]hbm, restore normal bl:%d\n",g_level);
		}
	}
@@ -593,6 +601,20 @@ static int panel_hbm_set_cmdq(struct drm_panel *panel, void *dsi,
	return 0;
}

static int panel_hbm_set_cmdq(struct drm_panel *panel, void *dsi,
			      dcs_write_gce cb, void *handle, bool en)
{

	pr_info("%s\n", __func__);

	if (!cb) {
		pr_info("[LCM]cb is null, panel_hbm_set_cmdq return -1\n");
		return 0;
	}

	return 0;
}

static void panel_hbm_get_state(struct drm_panel *panel, bool *state)
{
	struct lcm *ctx = panel_to_lcm(panel);
@@ -1315,6 +1337,7 @@ static struct mtk_panel_funcs ext_funcs = {

	.ata_check = panel_ata_check,
	.hbm_set_cmdq = panel_hbm_set_cmdq,
	.hbm_set_pack = panel_set_hbm_pack,
	.hbm_get_state = panel_hbm_get_state,
	.hbm_get_wait_state = panel_hbm_get_wait_state,
	.hbm_set_wait_state = panel_hbm_set_wait_state,