Beispiel #1
0
static int ws_eink_sleep(struct ws_eink_fb_par *par)
{
	int ret;
	ret = ws_eink_send_cmd(par, WS_DEEP_SLEEP_MODE, NULL, 0);
	if (ret)
		return ret;

	wait_until_idle(par);

	return 0;
}
Beispiel #2
0
static int set_memory_pointer(struct ws_eink_fb_par *par, int x, int y)
{
	int ret;
	const u8 x_addr_counter[] = { (x >> 3) & 0xFF };
	const u8 y_addr_counter[] = { y & 0xFF, (y >> 8) & 0xFF };

	ret = ws_eink_send_cmd(par, WS_SET_RAM_X_ADDRESS_COUNTER,
			       x_addr_counter, sizeof(x_addr_counter));
	if (ret)
		return ret;

	ret = ws_eink_send_cmd(par, WS_SET_RAM_Y_ADDRESS_COUNTER,
			       y_addr_counter, sizeof(y_addr_counter));
	if (ret)
		return ret;

	wait_until_idle(par);

	return 0;
}
static uint64_t do_measurement(void (*callback)(void *ptr), void *ptr)
{
	uint64_t tsc, pc;

	wait_until_idle();

	set_alarm(opts.res_warm_time, 0);
	callback(ptr);

	set_alarm(opts.res_calc_time, 0);

	tsc = msr_read(IA32_TIME_STAMP_COUNTER);
	pc = msr_read(deepest_pc_state);

	callback(ptr);

	pc = msr_read(deepest_pc_state) - pc;
	tsc = msr_read(IA32_TIME_STAMP_COUNTER) - tsc;

	return pc * 100 / tsc;
}
Beispiel #4
0
static int display_frame(struct ws_eink_fb_par *par)
{
	int ret;
	const u8 data_display_update_control_2[] = { 0xC4 };
	ret = ws_eink_send_cmd(par, WS_DISPLAY_UPDATE_CONTROL_2,
			       data_display_update_control_2,
			       sizeof(data_display_update_control_2));
	if (ret)
		return ret;

	ret = ws_eink_send_cmd(par, WS_MASTER_ACTIVATION, NULL, 0);
	if (ret)
		return ret;

	ret = ws_eink_send_cmd(par, WS_TERMINATE_FRAME_READ_WRITE, NULL, 0);
	if (ret)
		return ret;

	wait_until_idle(par);

	return 0;
}