129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed/* 244d5282b252fa1db88472542c0b9d794fd915d54Saurabh Shah * Copyright (c) 2012-2013, The Linux Foundation. All rights reserved. 329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed * Redistribution and use in source and binary forms, with or without 529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed * modification, are permitted provided that the following conditions are 629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed * met: 729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed * * Redistributions of source code must retain the above copyright 829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed * notice, this list of conditions and the following disclaimer. 929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed * * Redistributions in binary form must reproduce the above 1029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed * copyright notice, this list of conditions and the following 1129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed * disclaimer in the documentation and/or other materials provided 1229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed * with the distribution. 13a43fb8fce6d9be5577de1e0f49c99bd4fe2f6d44Duy Truong * * Neither the name of The Linux Foundation nor the names of its 1429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed * contributors may be used to endorse or promote products derived 1529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed * from this software without specific prior written permission. 1629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed * 1729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED 1829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 1929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT 2029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS 2129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 2229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 2329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR 2429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 2529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE 2629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN 2729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 2829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed */ 29a87da60090f55b823ee999930b381daa3dbda67eNaseer Ahmed#include <cutils/log.h> 30a87da60090f55b823ee999930b381daa3dbda67eNaseer Ahmed#include <fcntl.h> 3144d5282b252fa1db88472542c0b9d794fd915d54Saurabh Shah#include <sys/ioctl.h> 32a87da60090f55b823ee999930b381daa3dbda67eNaseer Ahmed#include <linux/fb.h> 3344d5282b252fa1db88472542c0b9d794fd915d54Saurabh Shah#include <linux/msm_mdp.h> 34a87da60090f55b823ee999930b381daa3dbda67eNaseer Ahmed#include "mdp_version.h" 3529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 36a87da60090f55b823ee999930b381daa3dbda67eNaseer AhmedANDROID_SINGLETON_STATIC_INSTANCE(qdutils::MDPVersion); 37a87da60090f55b823ee999930b381daa3dbda67eNaseer Ahmednamespace qdutils { 3829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 3996c4c95d48dc075196c601b30a8798a262df9720Naseer AhmedMDPVersion::MDPVersion() 40a87da60090f55b823ee999930b381daa3dbda67eNaseer Ahmed{ 41a87da60090f55b823ee999930b381daa3dbda67eNaseer Ahmed int fb_fd = open("/dev/graphics/fb0", O_RDWR); 42a87da60090f55b823ee999930b381daa3dbda67eNaseer Ahmed int mdp_version = MDP_V_UNKNOWN; 4396c4c95d48dc075196c601b30a8798a262df9720Naseer Ahmed char panel_type = 0; 44a87da60090f55b823ee999930b381daa3dbda67eNaseer Ahmed struct fb_fix_screeninfo fb_finfo; 4544d5282b252fa1db88472542c0b9d794fd915d54Saurabh Shah 4644d5282b252fa1db88472542c0b9d794fd915d54Saurabh Shah mMdpRev = 0; 47513ddc2124abf90c63af41999201f0d2031af0c8Vineeta Srivastava mRGBPipes = mVGPipes = 0; 4844d5282b252fa1db88472542c0b9d794fd915d54Saurabh Shah mDMAPipes = 0; 4944d5282b252fa1db88472542c0b9d794fd915d54Saurabh Shah 50a87da60090f55b823ee999930b381daa3dbda67eNaseer Ahmed if (ioctl(fb_fd, FBIOGET_FSCREENINFO, &fb_finfo) < 0) { 51a87da60090f55b823ee999930b381daa3dbda67eNaseer Ahmed ALOGE("FBIOGET_FSCREENINFO failed"); 52a87da60090f55b823ee999930b381daa3dbda67eNaseer Ahmed mdp_version = MDP_V_UNKNOWN; 53a87da60090f55b823ee999930b381daa3dbda67eNaseer Ahmed } else { 54a87da60090f55b823ee999930b381daa3dbda67eNaseer Ahmed if(!strncmp(fb_finfo.id, "msmfb", 5)) { 55a87da60090f55b823ee999930b381daa3dbda67eNaseer Ahmed char str_ver[4] = { 0 }; 56a87da60090f55b823ee999930b381daa3dbda67eNaseer Ahmed memcpy(str_ver, &fb_finfo.id[5], 3); 57a87da60090f55b823ee999930b381daa3dbda67eNaseer Ahmed str_ver[3] = '\0'; 58a87da60090f55b823ee999930b381daa3dbda67eNaseer Ahmed mdp_version = atoi(str_ver); 5929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 60a87da60090f55b823ee999930b381daa3dbda67eNaseer Ahmed //Normalize MDP version to ease comparison. 61a87da60090f55b823ee999930b381daa3dbda67eNaseer Ahmed //This is needed only because 62a87da60090f55b823ee999930b381daa3dbda67eNaseer Ahmed //MDP 3.0.3 reports value as 303 which 63a87da60090f55b823ee999930b381daa3dbda67eNaseer Ahmed //is more than all the others 64a87da60090f55b823ee999930b381daa3dbda67eNaseer Ahmed if (mdp_version < 100) 65a87da60090f55b823ee999930b381daa3dbda67eNaseer Ahmed mdp_version *= 10; 6629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 6744d5282b252fa1db88472542c0b9d794fd915d54Saurabh Shah mRGBPipes = mVGPipes = 2; 6844d5282b252fa1db88472542c0b9d794fd915d54Saurabh Shah 69a87da60090f55b823ee999930b381daa3dbda67eNaseer Ahmed } else if (!strncmp(fb_finfo.id, "mdssfb", 6)) { 70a87da60090f55b823ee999930b381daa3dbda67eNaseer Ahmed mdp_version = MDSS_V5; 7144d5282b252fa1db88472542c0b9d794fd915d54Saurabh Shah#ifdef MDSS_TARGET 7244d5282b252fa1db88472542c0b9d794fd915d54Saurabh Shah struct msmfb_metadata metadata; 7344d5282b252fa1db88472542c0b9d794fd915d54Saurabh Shah memset(&metadata, 0 , sizeof(metadata)); 7444d5282b252fa1db88472542c0b9d794fd915d54Saurabh Shah metadata.op = metadata_op_get_caps; 7544d5282b252fa1db88472542c0b9d794fd915d54Saurabh Shah if (ioctl(fb_fd, MSMFB_METADATA_GET, &metadata) == -1) { 7644d5282b252fa1db88472542c0b9d794fd915d54Saurabh Shah ALOGE("Error retrieving MDP revision and pipes info"); 7744d5282b252fa1db88472542c0b9d794fd915d54Saurabh Shah mdp_version = MDP_V_UNKNOWN; 7844d5282b252fa1db88472542c0b9d794fd915d54Saurabh Shah } else { 7944d5282b252fa1db88472542c0b9d794fd915d54Saurabh Shah mMdpRev = metadata.data.caps.mdp_rev; 8044d5282b252fa1db88472542c0b9d794fd915d54Saurabh Shah mRGBPipes = metadata.data.caps.rgb_pipes; 8144d5282b252fa1db88472542c0b9d794fd915d54Saurabh Shah mVGPipes = metadata.data.caps.vig_pipes; 8244d5282b252fa1db88472542c0b9d794fd915d54Saurabh Shah mDMAPipes = metadata.data.caps.dma_pipes; 8344d5282b252fa1db88472542c0b9d794fd915d54Saurabh Shah } 8444d5282b252fa1db88472542c0b9d794fd915d54Saurabh Shah#endif 85a87da60090f55b823ee999930b381daa3dbda67eNaseer Ahmed } else { 86a87da60090f55b823ee999930b381daa3dbda67eNaseer Ahmed mdp_version = MDP_V_UNKNOWN; 87a87da60090f55b823ee999930b381daa3dbda67eNaseer Ahmed } 88513ddc2124abf90c63af41999201f0d2031af0c8Vineeta Srivastava int len = strlen("msmfbXX_"); 89513ddc2124abf90c63af41999201f0d2031af0c8Vineeta Srivastava if (mdp_version == MDP_V3_0_3) 90513ddc2124abf90c63af41999201f0d2031af0c8Vineeta Srivastava len++; 91513ddc2124abf90c63af41999201f0d2031af0c8Vineeta Srivastava panel_type = fb_finfo.id[len]; 9296c4c95d48dc075196c601b30a8798a262df9720Naseer Ahmed 93a87da60090f55b823ee999930b381daa3dbda67eNaseer Ahmed } 94a87da60090f55b823ee999930b381daa3dbda67eNaseer Ahmed close(fb_fd); 9596c4c95d48dc075196c601b30a8798a262df9720Naseer Ahmed mMDPVersion = mdp_version; 9696c4c95d48dc075196c601b30a8798a262df9720Naseer Ahmed mHasOverlay = false; 97513ddc2124abf90c63af41999201f0d2031af0c8Vineeta Srivastava if((mMDPVersion >= MDP_V4_0) || (mMDPVersion == MDP_V_UNKNOWN)) 98a87da60090f55b823ee999930b381daa3dbda67eNaseer Ahmed mHasOverlay = true; 9996c4c95d48dc075196c601b30a8798a262df9720Naseer Ahmed mPanelType = panel_type; 100a87da60090f55b823ee999930b381daa3dbda67eNaseer Ahmed} 101a87da60090f55b823ee999930b381daa3dbda67eNaseer Ahmed}; //namespace qdutils 10229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 103