void CEGLNativeTypeAmlogic::DisableFreeScale() { // turn off frame buffer freescale aml_set_sysfs_int("/sys/class/graphics/fb0/free_scale", 0); aml_set_sysfs_int("/sys/class/graphics/fb1/free_scale", 0); aml_set_sysfs_str("/sys/class/graphics/fb0/free_scale_axis", "0 0 1279 719"); aml_set_sysfs_int("/sys/class/ppmgr/ppscaler", 0); aml_set_sysfs_int("/sys/class/video/disable_video", 0); // now default video display to off aml_set_sysfs_int("/sys/class/video/disable_video", 1); // revert display axis int fd0; std::string framebuffer = "/dev/" + m_framebuffer_name; if ((fd0 = open(framebuffer.c_str(), O_RDWR)) >= 0) { struct fb_var_screeninfo vinfo; if (ioctl(fd0, FBIOGET_VSCREENINFO, &vinfo) == 0) { char daxis_str[255] = {0}; sprintf(daxis_str, "%d %d %d %d 0 0 0 0", 0, 0, vinfo.xres-1, vinfo.yres-1); aml_set_sysfs_str("/sys/class/display/axis", daxis_str); } close(fd0); } }
void CEGLNativeTypeAmlogic::DisableFreeScale() { // turn off frame buffer freescale aml_set_sysfs_int("/sys/class/graphics/fb0/free_scale", 0); aml_set_sysfs_int("/sys/class/graphics/fb1/free_scale", 0); aml_set_sysfs_str("/sys/class/graphics/fb0/free_scale_axis", "0 0 1279 719"); // revert to default video paths aml_set_sysfs_str("/sys/class/vfm/map", "rm all"); aml_set_sysfs_str("/sys/class/vfm/map", "add default_osd osd amvideo"); aml_set_sysfs_str("/sys/class/vfm/map", "add default decoder ppmgr amvideo"); // disable post processing scaler and disable_video special mode aml_set_sysfs_int("/sys/class/ppmgr/ppscaler", 0); aml_set_sysfs_int("/sys/class/video/disable_video", 0); aml_set_sysfs_int("/sys/class/video/disable_video", 1); // revert display axis int fd0; std::string framebuffer = "/dev/" + m_framebuffer_name; if ((fd0 = open(framebuffer.c_str(), O_RDWR)) >= 0) { struct fb_var_screeninfo vinfo; if (ioctl(fd0, FBIOGET_VSCREENINFO, &vinfo) == 0) { char daxis_str[255] = {0}; sprintf(daxis_str, "%d %d %d %d 0 0 0 0", 0, 0, vinfo.xres, vinfo.yres); aml_set_sysfs_str("/sys/class/display/axis", daxis_str); } close(fd0); } }
void CEGLNativeTypeAmlogic::EnableFreeScale() { // enable OSD free scale using frame buffer size of 720p aml_set_sysfs_int("/sys/class/graphics/fb0/free_scale", 0); aml_set_sysfs_int("/sys/class/graphics/fb1/free_scale", 0); aml_set_sysfs_int("/sys/class/graphics/fb0/scale_width", 1280); aml_set_sysfs_int("/sys/class/graphics/fb0/scale_height", 720); aml_set_sysfs_int("/sys/class/graphics/fb1/scale_width", 1280); aml_set_sysfs_int("/sys/class/graphics/fb1/scale_height", 720); // enable video free scale (scaling to 1920x1080 with frame buffer size 1280x720) aml_set_sysfs_int("/sys/class/ppmgr/ppscaler", 0); aml_set_sysfs_int("/sys/class/video/disable_video", 1); aml_set_sysfs_int("/sys/class/ppmgr/ppscaler", 1); aml_set_sysfs_str("/sys/class/ppmgr/ppscaler_rect", "0 0 1919 1079 0"); aml_set_sysfs_str("/sys/class/ppmgr/disp", "1280 720"); // aml_set_sysfs_int("/sys/class/graphics/fb0/scale_width", 1280); aml_set_sysfs_int("/sys/class/graphics/fb0/scale_height", 720); aml_set_sysfs_int("/sys/class/graphics/fb1/scale_width", 1280); aml_set_sysfs_int("/sys/class/graphics/fb1/scale_height", 720); // aml_set_sysfs_int("/sys/class/video/disable_video", 2); aml_set_sysfs_str("/sys/class/display/axis", "0 0 1279 719 0 0 0 0"); aml_set_sysfs_str("/sys/class/ppmgr/ppscaler_rect", "0 0 1279 719 1"); // aml_set_sysfs_int("/sys/class/graphics/fb0/free_scale", 1); aml_set_sysfs_int("/sys/class/graphics/fb1/free_scale", 1); aml_set_sysfs_str("/sys/class/graphics/fb0/free_scale_axis", "0 0 1279 719"); }
bool CEGLNativeTypeAmlogic::SetDisplayResolution(const char *resolution) { CStdString mode = resolution; // switch display resolution aml_set_sysfs_str("/sys/class/display/mode", mode.c_str()); SetupVideoScaling(mode.c_str()); return true; }
void CEGLNativeTypeAmlogic::SetupVideoScaling(const char *mode) { aml_set_sysfs_int("/sys/class/graphics/fb0/blank", 1); aml_set_sysfs_int("/sys/class/graphics/fb0/free_scale", 0); aml_set_sysfs_int("/sys/class/graphics/fb1/free_scale", 0); aml_set_sysfs_int("/sys/class/ppmgr/ppscaler", 0); if (strstr(mode, "1080")) { aml_set_sysfs_str("/sys/class/graphics/fb0/request2XScale", "8"); aml_set_sysfs_str("/sys/class/graphics/fb1/scale_axis", "1280 720 1920 1080"); aml_set_sysfs_str("/sys/class/graphics/fb1/scale", "0x10001"); } else { aml_set_sysfs_str("/sys/class/graphics/fb0/request2XScale", "16 1280 720"); } aml_set_sysfs_int("/sys/class/graphics/fb0/blank", 0); }
void CEGLNativeTypeAmlogic::EnableFreeScale() { // remove default OSD and video path (default_osd default) aml_set_sysfs_str("/sys/class/vfm/map", "rm all"); // add OSD path aml_set_sysfs_str("/sys/class/vfm/map", "add osdpath osd amvideo"); // enable OSD free scale using frame buffer size of 720p aml_set_sysfs_int("/sys/class/graphics/fb0/free_scale", 0); aml_set_sysfs_int("/sys/class/graphics/fb1/free_scale", 0); aml_set_sysfs_int("/sys/class/graphics/fb0/scale_width", 1280); aml_set_sysfs_int("/sys/class/graphics/fb0/scale_height", 720); aml_set_sysfs_int("/sys/class/graphics/fb1/scale_width", 1280); aml_set_sysfs_int("/sys/class/graphics/fb1/scale_height", 720); aml_set_sysfs_int("/sys/class/graphics/fb0/free_scale", 1); aml_set_sysfs_int("/sys/class/graphics/fb1/free_scale", 1); // remove OSD path aml_set_sysfs_int("/sys/class/graphics/fb0/free_scale", 0); aml_set_sysfs_int("/sys/class/graphics/fb1/free_scale", 0); aml_set_sysfs_str("/sys/class/vfm/map", "rm osdpath"); // add video path aml_set_sysfs_str("/sys/class/vfm/map", "add videopath decoder ppmgr amvideo"); // enable video free scale (scaling to 1920x1080 with frame buffer size 1280x720) aml_set_sysfs_int("/sys/class/ppmgr/ppscaler", 0); aml_set_sysfs_int("/sys/class/video/disable_video", 1); aml_set_sysfs_int("/sys/class/ppmgr/ppscaler", 1); aml_set_sysfs_str("/sys/class/ppmgr/ppscaler_rect", "0 0 1919 1079 0"); aml_set_sysfs_str("/sys/class/ppmgr/disp", "1280 720"); // aml_set_sysfs_int("/sys/class/graphics/fb0/free_scale", 0); aml_set_sysfs_int("/sys/class/graphics/fb1/free_scale", 0); aml_set_sysfs_int("/sys/class/graphics/fb0/scale_width", 1280); aml_set_sysfs_int("/sys/class/graphics/fb0/scale_height", 720); aml_set_sysfs_int("/sys/class/graphics/fb1/scale_width", 1280); aml_set_sysfs_int("/sys/class/graphics/fb1/scale_height", 720); // aml_set_sysfs_int("/sys/class/video/disable_video", 2); aml_set_sysfs_str("/sys/class/display/axis", "0 0 1279 719 0 0 0 0"); aml_set_sysfs_str("/sys/class/ppmgr/ppscaler_rect", "0 0 1279 719 1"); // aml_set_sysfs_int("/sys/class/graphics/fb0/free_scale", 1); aml_set_sysfs_int("/sys/class/graphics/fb1/free_scale", 1); aml_set_sysfs_str("/sys/class/graphics/fb0/free_scale_axis", "0 0 1279 719"); }
void aml_cpufreq_max(bool limit) { if (!aml_wired_present() && aml_get_cputype() > 3) { // this is a MX Stick, they cannot substain 1GHz // operation without overheating so limit them to 800MHz. int cpufreq = 1000000; if (limit) cpufreq = 800000; aml_set_sysfs_int("/sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq", cpufreq); aml_set_sysfs_str("/sys/devices/system/cpu/cpu0/cpufreq/scaling_governor", "ondemand"); } }
bool CEGLNativeTypeAmlogic::SetDisplayResolution(const char *resolution) { CStdString modestr = resolution; // switch display resolution aml_set_sysfs_str("/sys/class/display/mode", modestr.c_str()); // setup gui freescale depending on display resolution DisableFreeScale(); if (modestr.Left(4).Equals("1080")) { EnableFreeScale(); } return true; }
bool CPivosPowerSyscall::PumpPowerEvents(IPowerEventsCallback *callback) { if (m_OnSuspend) { // do the CPowerManager::OnSleep() callback callback->OnSleep(); m_OnResume = true; m_OnSuspend = false; // wait for all our threads to do their thing usleep(1 * 1000 * 1000); aml_set_sysfs_str("/sys/power/state", "mem"); usleep(100 * 1000); } else if (m_OnResume) { // do the CPowerManager::OnWake() callback callback->OnWake(); m_OnResume = false; } return true; }