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; }
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(); }