static int tve_switch_fb(const struct fb_videomode *modedb, int enable)
{
	struct rk_screen *screen = &rk3036_tve->screen;

	if (modedb == NULL)
		return -1;

	memset(screen, 0, sizeof(struct rk_screen));
	/* screen type & face */
	if (rk3036_tve->test_mode)
		screen->type = SCREEN_TVOUT_TEST;
	else
		screen->type = SCREEN_TVOUT;
	screen->face = OUT_P888;
	screen->color_mode = COLOR_YCBCR;
	screen->mode = *modedb;

	/* Pin polarity */
	if (FB_SYNC_HOR_HIGH_ACT & modedb->sync)
		screen->pin_hsync = 1;
	else
		screen->pin_hsync = 0;
	if (FB_SYNC_VERT_HIGH_ACT & modedb->sync)
		screen->pin_vsync = 1;
	else
		screen->pin_vsync = 0;

	screen->pin_den = 0;
	screen->pin_dclk = 0;
	screen->pixelrepeat = 1;

	/* Swap rule */
	screen->swap_rb = 0;
	screen->swap_rg = 0;
	screen->swap_gb = 0;
	screen->swap_delta = 0;
	screen->swap_dumy = 0;

	/* Operation function*/
	screen->init = NULL;
	screen->standby = NULL;
	rk_fb_switch_screen(screen, enable, 0);

	if (enable) {
		if (screen->mode.yres == 480)
			tve_set_mode(TVOUT_CVBS_NTSC);
		else
			tve_set_mode(TVOUT_CVBS_PAL);
	}
	return 0;
}
Beispiel #2
0
int rk3036_tve_init(vidinfo_t *panel)
{
	int val = 0;
	int node = 0;

#if defined(CONFIG_RKCHIP_RK3036)
	tve_s.reg_phy_base = 0x10118000 + 0x200;
	tve_s.soctype = SOC_RK3036;
//	printf("%s start soc is 3036\n", __func__);
#elif defined(CONFIG_RKCHIP_RK3128)
	tve_s.reg_phy_base = 0x1010e000 + 0x200;
	tve_s.soctype = SOC_RK312X;
	tve_s.saturation = 0;

	if (gd->fdt_blob)
	{
		node = fdt_node_offset_by_compatible(gd->fdt_blob,
			0, "rockchip,rk312x-tve");
		if (node < 0) {
			printf("can't find dts node for rk312x-tve\n");
			return -ENODEV;
		}

		if (!fdt_device_is_available(gd->fdt_blob, node)) {
			printf("rk312x-tve is disabled\n");
			return -EPERM;
		}

		tve_s.test_mode = fdtdec_get_int(gd->fdt_blob, node, "test_mode", 0);
		tve_s.saturation = fdtdec_get_int(gd->fdt_blob, node, "saturation", 0);

	}
	printf("test_mode=%d,saturation=0x%x\n", tve_s.test_mode, tve_s.saturation);
//	printf("%s start soc is 3128\n", __func__);
#endif

	rk3036_tve_init_panel(panel);

	if(g_tve_pos < 0)
	{
		g_tve_pos = TVOUT_DEAULT;
		printf("%s:use default config g_tve_pos = %d \n", __func__,g_tve_pos);
	}
	else
	{
		printf("%s:use baseparamer config g_tve_pos = %d \n", __func__,g_tve_pos);
	}

	if(g_tve_pos < 0)
	{
		g_tve_pos = TVOUT_DEAULT;
		printf("%s:use default config g_tve_pos = %d \n", __func__,g_tve_pos);
	}
	else
	{
		printf("%s:use baseparamer config g_tve_pos = %d \n", __func__,g_tve_pos);
	}

	dac_enable(0);
	tve_set_mode(g_tve_pos);
	dac_enable(1);


//	rk3036_tve_show_reg();
}