Пример #1
0
/* set 3d clocks to max */
static void reset_3d_clocks(void)
{
	if (clk_get_rate(scale3d.clk_3d) != scale3d.max_rate_3d) {
		if (is_tegra_camera_on())
			clk_set_rate(scale3d.clk_3d, CAMERA_3D_CLK);
		else
			clk_set_rate(scale3d.clk_3d, scale3d.max_rate_3d);
		if (tegra_get_chipid() == TEGRA_CHIPID_TEGRA3) {
			if (is_tegra_camera_on())
				clk_set_rate(scale3d.clk_3d2, CAMERA_3D_CLK);
			else
				clk_set_rate(scale3d.clk_3d2,
							scale3d.max_rate_3d);
		}
		if (scale3d.p_scale_emc) {
			if (is_tegra_camera_on())
				clk_set_rate(scale3d.clk_3d_emc,
					CAMERA_3D_EMC_CLK);
			else
				clk_set_rate(scale3d.clk_3d_emc,
					clk_round_rate(scale3d.clk_3d_emc,
								UINT_MAX));
		}
	}
}
Пример #2
0
static void scale3d_clocks(unsigned long percent)
{
	unsigned long hz, curr;
	int i = 0;
	ktime_t t;

	if (!tegra_is_clk_enabled(scale3d.clk_3d))
		return;

	if (tegra_get_chipid() == TEGRA_CHIPID_TEGRA3)
		if (!tegra_is_clk_enabled(scale3d.clk_3d2))
			return;

	curr = clk_get_rate(scale3d.clk_3d);
	hz = percent * (curr / 100);

	if (!(hz >= scale3d.max_rate_3d && curr == scale3d.max_rate_3d)) {
		if (tegra_get_chipid() == TEGRA_CHIPID_TEGRA3)
			clk_set_rate(scale3d.clk_3d2, 0);

		if (is_tegra_camera_on())
			clk_set_rate(scale3d.clk_3d, CAMERA_3D_CLK);
		else
			clk_set_rate(scale3d.clk_3d, hz);

		if (scale3d.p_scale_emc) {
			long after = (long) clk_get_rate(scale3d.clk_3d);
			hz = after * scale3d.emc_slope + scale3d.emc_offset;
			if (scale3d.p_emc_dip)
				hz -=
					(scale3d.emc_dip_slope *
					POW2(after / 1000 - scale3d.emc_xmid) +
					scale3d.emc_dip_offset);
			if (is_tegra_camera_on())
				clk_set_rate(scale3d.clk_3d_emc, CAMERA_3D_EMC_CLK);
			else
				clk_set_rate(scale3d.clk_3d_emc, hz);
		}
	}
	t = ktime_get();

	hz = clk_get_rate(scale3d.clk_3d);

	if (hz != curr)
	{
		gpu_loading[curr_idx].total_time +=
			ktime_us_delta(t, gpu_loading[curr_idx].last_start);

		for (i=0 ; i<FREQ_LEVEL ; i++) {
			if (gpu_loading[i].freq == hz) {
				curr_idx = i;
				break;
			}
		}

		gpu_loading[curr_idx].last_start = t;
	}
}
Пример #3
0
static void do_scale(int diff)
{
	unsigned long hz, curr;

	if (!tegra_is_clk_enabled(scale3d.clk_3d))
		return;

	if (tegra_get_chipid() == TEGRA_CHIPID_TEGRA3)
		if (!tegra_is_clk_enabled(scale3d.clk_3d2))
			return;

	curr = clk_get_rate(scale3d.clk_3d);
	hz = curr + diff;

	if (hz < scale3d.min_rate_3d)
		hz = scale3d.min_rate_3d;

	if (hz > scale3d.max_rate_3d)
		hz = scale3d.max_rate_3d;

	if (hz == curr) return;

	if (tegra_get_chipid() == TEGRA_CHIPID_TEGRA3)
		clk_set_rate(scale3d.clk_3d2, 0);

	if (is_tegra_camera_on())
		clk_set_rate(scale3d.clk_3d, CAMERA_3D_CLK);
	else
		clk_set_rate(scale3d.clk_3d, hz);

	if (scale3d.p_scale_emc) {
		long after = (long) clk_get_rate(scale3d.clk_3d);
		hz = after * scale3d.emc_slope + scale3d.emc_offset;
		if (scale3d.p_emc_dip)
			hz -=
				(scale3d.emc_dip_slope *
				POW2(after / 1000 - scale3d.emc_xmid) +
				scale3d.emc_dip_offset);
		if (is_tegra_camera_on())
			clk_set_rate(scale3d.clk_3d_emc, CAMERA_3D_EMC_CLK);
		else
			clk_set_rate(scale3d.clk_3d_emc, hz);
	}
}
Пример #4
0
/* set 3d clocks to max */
static void reset_3d_clocks(void)
{
	unsigned long curr = clk_get_rate(scale3d.clk_3d);
	unsigned long hz = 0;
	int i = 0;
	ktime_t t;

	if (clk_get_rate(scale3d.clk_3d) != scale3d.max_rate_3d) {
		if (is_tegra_camera_on())
			clk_set_rate(scale3d.clk_3d, CAMERA_3D_CLK);
		else
			clk_set_rate(scale3d.clk_3d, scale3d.max_rate_3d);
		if (tegra_get_chipid() == TEGRA_CHIPID_TEGRA3) {
			if (is_tegra_camera_on())
				clk_set_rate(scale3d.clk_3d2, CAMERA_3D_CLK);
			else
				clk_set_rate(scale3d.clk_3d2, scale3d.max_rate_3d);
		}
		if (scale3d.p_scale_emc) {
			if(is_tegra_camera_on())
				clk_set_rate(scale3d.clk_3d_emc, CAMERA_3D_EMC_CLK);
			else
				clk_set_rate(scale3d.clk_3d_emc,
					clk_round_rate(scale3d.clk_3d_emc, UINT_MAX));
		}
	}
	t = ktime_get();

	hz = clk_get_rate(scale3d.clk_3d);
	if (hz != curr)
	{
		gpu_loading[curr_idx].total_time +=
			ktime_us_delta(t, gpu_loading[curr_idx].last_start);

		for (i=0 ; i<FREQ_LEVEL ; i++) {
			if (gpu_loading[i].freq == hz) {
				curr_idx = i;
				break;
			}
		}
		gpu_loading[curr_idx].last_start = t;
	}
}