int dsim_reg_set_hs_clock(u32 en)
{
	int ret;

	if (en) {
		dsim_reg_set_cmd_transfer_mode(0);
		dsim_reg_set_data_transfer_mode(0);

		/* 1. change mdclk source to byteclk */
		dsim_reg_set_mdclk(1);

		/* 2. do function rst */
		dsim_reg_function_reset();

		/* 3. do hsclk request */
		dsim_reg_enable_hs_clock(1);

		/* wait hs ready */
		ret = dsim_reg_wait_hs_clk_ready();
		if (ret)
			return ret;

		/* 4. set mdstandby */
		dsim_reg_set_standby(1);

		/* 5. change mdclk source to external clk */
		dsim_reg_set_mdclk(0);
	} else {
		/* MD stand_by off */
		dsim_reg_set_standby(0);
		dsim_reg_enable_hs_clock(0);
	}

	return 0;
}
Esempio n. 2
0
int dsim_reg_set_hs_clock(u32 id, struct decon_lcd *lcd, u32 en)
{
	int ret;
	int is_non = dsim_reg_is_noncontinuous_clk_enabled(id);

	if (en) {
		dsim_reg_set_cmd_transfer_mode(id, 0);
		dsim_reg_set_data_transfer_mode(id, 0);

		dsim_reg_enable_hs_clock(id, 1);

		if (!is_non) {
			ret = dsim_reg_wait_hs_clk_ready(id);
			if (ret)
				return ret;
		}

		dsim_reg_set_standby(id, lcd, 1);

		/* for preventing 2C miss issue */
		dsim_reg_funtion_reset(id);
	} else {
		dsim_reg_set_standby(id, lcd, 0);
		dsim_reg_enable_hs_clock(id, 0);
	}

	return 0;
}
int dsim_reg_set_hs_clock(u32 en)
{
	int ret;

	if (en) {
		dsim_reg_set_cmd_transfer_mode(0);
		dsim_reg_set_data_transfer_mode(0);

		dsim_reg_enable_hs_clock(1);

		ret = dsim_reg_wait_hs_clk_ready();
		if (ret)
			return ret;

		dsim_reg_set_link_standby();
	} else {
		/* MD stand_by off */
		dsim_reg_set_standby(0);
		dsim_reg_enable_hs_clock(0);
	}

	return 0;
}