1ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson/* 2ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson * Copyright (c) 2012-2013, The Linux Foundation. All rights reserved. 3ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson 4ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson * Redistribution and use in source and binary forms, with or without 5ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson * modification, are permitted provided that the following conditions are 6ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson * met: 7ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson * * Redistributions of source code must retain the above copyright 8ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson * notice, this list of conditions and the following disclaimer. 9ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson * * Redistributions in binary form must reproduce the above 10ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson * copyright notice, this list of conditions and the following 11ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson * disclaimer in the documentation and/or other materials provided 12ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson * with the distribution. 13ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson * * Neither the name of The Linux Foundation nor the names of its 14ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson * contributors may be used to endorse or promote products derived 15ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson * from this software without specific prior written permission. 16ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson * 17ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED 18ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 19ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT 20ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS 21ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 22ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 23ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR 24ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 25ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE 26ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN 27ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 28ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson */ 29ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson 30ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson#ifndef INCLUDE_LIBQCOMUTILS_MDPVER 31ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson#define INCLUDE_LIBQCOMUTILS_MDPVER 32ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson 33ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson#include <stdint.h> 34ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson#include <utils/Singleton.h> 35ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson#include <cutils/properties.h> 36ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson 37ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson/* This class gets the MSM type from the soc info 38ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson*/ 39ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilsonusing namespace android; 40ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilsonnamespace qdutils { 41a653efede03423aa840da24634f1ec6f20796f1eSimon Wilson// These panel definitions are available at mdss_mdp.h which is internal header 42a653efede03423aa840da24634f1ec6f20796f1eSimon Wilson// file and is not available at <linux/mdss_mdp.h>. 43a653efede03423aa840da24634f1ec6f20796f1eSimon Wilson// ToDo: once it is available at linux/mdss_mdp.h, these below definitions can 44a653efede03423aa840da24634f1ec6f20796f1eSimon Wilson// be removed. 45ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilsonenum mdp_version { 46ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson MDP_V_UNKNOWN = 0, 47ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson MDP_V2_2 = 220, 48ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson MDP_V3_0 = 300, 49ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson MDP_V3_0_3 = 303, 50ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson MDP_V3_0_4 = 304, 51ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson MDP_V3_1 = 310, 52ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson MDP_V4_0 = 400, 53ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson MDP_V4_1 = 410, 54ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson MDP_V4_2 = 420, 55ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson MDP_V4_3 = 430, 56ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson MDP_V4_4 = 440, 57ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson MDSS_V5 = 500, 58ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson}; 59ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson 60a653efede03423aa840da24634f1ec6f20796f1eSimon Wilson// chip variants have same major number and minor numbers usually vary 61a653efede03423aa840da24634f1ec6f20796f1eSimon Wilson// for e.g., MDSS_MDP_HW_REV_101 is 0x10010000 62a653efede03423aa840da24634f1ec6f20796f1eSimon Wilson// 1001 - major number 63a653efede03423aa840da24634f1ec6f20796f1eSimon Wilson// 0000 - minor number 64a653efede03423aa840da24634f1ec6f20796f1eSimon Wilson// 8x26 v1 minor number is 0000 65a653efede03423aa840da24634f1ec6f20796f1eSimon Wilson// v2 minor number is 0001 etc.. 66ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson 67ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilsonenum { 68ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson MAX_DISPLAY_DIM = 2048, 69ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson}; 70ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson 71a653efede03423aa840da24634f1ec6f20796f1eSimon Wilson#define NO_PANEL '0' 72ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson#define MDDI_PANEL '1' 73ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson#define EBI2_PANEL '2' 74ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson#define LCDC_PANEL '3' 75ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson#define EXT_MDDI_PANEL '4' 76ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson#define TV_PANEL '5' 77ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson#define DTV_PANEL '7' 78ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson#define MIPI_VIDEO_PANEL '8' 79ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson#define MIPI_CMD_PANEL '9' 80ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson#define WRITEBACK_PANEL 'a' 81ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson#define LVDS_PANEL 'b' 82a653efede03423aa840da24634f1ec6f20796f1eSimon Wilson#define EDP_PANEL 'c' 83ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson 84ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilsonclass MDPVersion; 85ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson 86ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilsonstruct Split { 87ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson int mLeft; 88ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson int mRight; 89ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson Split() : mLeft(0), mRight(0){} 90ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson int left() { return mLeft; } 91ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson int right() { return mRight; } 92ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson friend class MDPVersion; 93ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson}; 94ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson 95962c5d172ef0503585834d4bb037a856dd74bb7fJeykumar Sankaranstruct PanelInfo { 96962c5d172ef0503585834d4bb037a856dd74bb7fJeykumar Sankaran char mType; // Smart or Dumb 97962c5d172ef0503585834d4bb037a856dd74bb7fJeykumar Sankaran int mPartialUpdateEnable; // Partial update feature 98962c5d172ef0503585834d4bb037a856dd74bb7fJeykumar Sankaran int mLeftAlign; // ROI left alignment restriction 99962c5d172ef0503585834d4bb037a856dd74bb7fJeykumar Sankaran int mWidthAlign; // ROI width alignment restriction 100962c5d172ef0503585834d4bb037a856dd74bb7fJeykumar Sankaran int mTopAlign; // ROI top alignment restriction 101962c5d172ef0503585834d4bb037a856dd74bb7fJeykumar Sankaran int mHeightAlign; // ROI height alignment restriction 10229e3491d8c71a426903f0194a9a40a75bde825b3Jeykumar Sankaran int mMinROIWidth; // Min width needed for ROI 10329e3491d8c71a426903f0194a9a40a75bde825b3Jeykumar Sankaran int mMinROIHeight; // Min height needed for ROI 104514cb6b3f43dd8a3d743cbe68f333898d5e981b8Jeykumar Sankaran bool mNeedsROIMerge; // Merge ROI's of both the DSI's 105962c5d172ef0503585834d4bb037a856dd74bb7fJeykumar Sankaran PanelInfo() : mType(NO_PANEL), mPartialUpdateEnable(0), 10629e3491d8c71a426903f0194a9a40a75bde825b3Jeykumar Sankaran mLeftAlign(0), mWidthAlign(0), mTopAlign(0), mHeightAlign(0), 107514cb6b3f43dd8a3d743cbe68f333898d5e981b8Jeykumar Sankaran mMinROIWidth(0), mMinROIHeight(0), mNeedsROIMerge(false){} 108962c5d172ef0503585834d4bb037a856dd74bb7fJeykumar Sankaran friend class MDPVersion; 109962c5d172ef0503585834d4bb037a856dd74bb7fJeykumar Sankaran}; 110962c5d172ef0503585834d4bb037a856dd74bb7fJeykumar Sankaran 111ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilsonclass MDPVersion : public Singleton <MDPVersion> 112ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson{ 113ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilsonpublic: 114ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson MDPVersion(); 115ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson ~MDPVersion(); 116ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson int getMDPVersion() {return mMDPVersion;} 117962c5d172ef0503585834d4bb037a856dd74bb7fJeykumar Sankaran char getPanelType() {return mPanelInfo.mType;} 118ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson bool hasOverlay() {return mHasOverlay;} 119a653efede03423aa840da24634f1ec6f20796f1eSimon Wilson uint8_t getTotalPipes() { 120a653efede03423aa840da24634f1ec6f20796f1eSimon Wilson return (uint8_t)(mRGBPipes + mVGPipes + mDMAPipes); 121a653efede03423aa840da24634f1ec6f20796f1eSimon Wilson } 122ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson uint8_t getRGBPipes() { return mRGBPipes; } 123ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson uint8_t getVGPipes() { return mVGPipes; } 124ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson uint8_t getDMAPipes() { return mDMAPipes; } 125ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson bool supportsDecimation(); 126ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson uint32_t getMaxMDPDownscale(); 127a653efede03423aa840da24634f1ec6f20796f1eSimon Wilson uint32_t getMaxMDPUpscale(); 128ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson bool supportsBWC(); 129a653efede03423aa840da24634f1ec6f20796f1eSimon Wilson bool supportsMacroTile(); 130ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson int getLeftSplit() { return mSplit.left(); } 131ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson int getRightSplit() { return mSplit.right(); } 1326f7634666209698e4835b9f326278a7068834383Jeykumar Sankaran bool isPartialUpdateEnabled() { return mPanelInfo.mPartialUpdateEnable; } 133962c5d172ef0503585834d4bb037a856dd74bb7fJeykumar Sankaran int getLeftAlign() { return mPanelInfo.mLeftAlign; } 134962c5d172ef0503585834d4bb037a856dd74bb7fJeykumar Sankaran int getWidthAlign() { return mPanelInfo.mWidthAlign; } 135962c5d172ef0503585834d4bb037a856dd74bb7fJeykumar Sankaran int getTopAlign() { return mPanelInfo.mTopAlign; } 136962c5d172ef0503585834d4bb037a856dd74bb7fJeykumar Sankaran int getHeightAlign() { return mPanelInfo.mHeightAlign; } 13729e3491d8c71a426903f0194a9a40a75bde825b3Jeykumar Sankaran int getMinROIWidth() { return mPanelInfo.mMinROIWidth; } 13829e3491d8c71a426903f0194a9a40a75bde825b3Jeykumar Sankaran int getMinROIHeight() { return mPanelInfo.mMinROIHeight; } 139514cb6b3f43dd8a3d743cbe68f333898d5e981b8Jeykumar Sankaran bool needsROIMerge() { return mPanelInfo.mNeedsROIMerge; } 140a653efede03423aa840da24634f1ec6f20796f1eSimon Wilson unsigned long getLowBw() { return mLowBw; } 141a653efede03423aa840da24634f1ec6f20796f1eSimon Wilson unsigned long getHighBw() { return mHighBw; } 142afb0630fd38b3db0e01f243d3112d0b67a93976eSaurabh Shah bool isRotDownscaleEnabled() { return mRotDownscale; } 143a653efede03423aa840da24634f1ec6f20796f1eSimon Wilson bool isSrcSplit() const; 144e095244acd6350d0898d5a9b409dff2748553bfcSaurabh Shah bool isSrcSplitAlways() const; 1450fdae193307fb17bb537598ab62682edd5138b72radhakrishna bool isRGBScalarSupported() const; 146a653efede03423aa840da24634f1ec6f20796f1eSimon Wilson bool is8x26(); 147a653efede03423aa840da24634f1ec6f20796f1eSimon Wilson bool is8x74v2(); 148a653efede03423aa840da24634f1ec6f20796f1eSimon Wilson bool is8084(); 149a653efede03423aa840da24634f1ec6f20796f1eSimon Wilson bool is8092(); 15052c40f737665f00bf9ecd486b9896ce256c94fd2Saurabh Shah bool is8994(); 1510fdae193307fb17bb537598ab62682edd5138b72radhakrishna bool is8x16(); 15226ca824f5a1e6adb8038a103c27139c163bb0660Prabhanjan Kandula bool is8x39(); 153a653efede03423aa840da24634f1ec6f20796f1eSimon Wilson 154ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilsonprivate: 155a653efede03423aa840da24634f1ec6f20796f1eSimon Wilson bool updateSysFsInfo(); 156962c5d172ef0503585834d4bb037a856dd74bb7fJeykumar Sankaran void updatePanelInfo(); 157a653efede03423aa840da24634f1ec6f20796f1eSimon Wilson bool updateSplitInfo(); 158a653efede03423aa840da24634f1ec6f20796f1eSimon Wilson int tokenizeParams(char *inputParams, const char *delim, 159a653efede03423aa840da24634f1ec6f20796f1eSimon Wilson char* tokenStr[], int *idx); 160ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson int mFd; 161ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson int mMDPVersion; 162ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson bool mHasOverlay; 163ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson uint32_t mMdpRev; 164ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson uint8_t mRGBPipes; 165ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson uint8_t mVGPipes; 166ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson uint8_t mDMAPipes; 167ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson uint32_t mFeatures; 168ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson uint32_t mMDPDownscale; 169a653efede03423aa840da24634f1ec6f20796f1eSimon Wilson uint32_t mMDPUpscale; 170a653efede03423aa840da24634f1ec6f20796f1eSimon Wilson bool mMacroTileEnabled; 171ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson Split mSplit; 172962c5d172ef0503585834d4bb037a856dd74bb7fJeykumar Sankaran PanelInfo mPanelInfo; 173a653efede03423aa840da24634f1ec6f20796f1eSimon Wilson unsigned long mLowBw; //kbps 174a653efede03423aa840da24634f1ec6f20796f1eSimon Wilson unsigned long mHighBw; //kbps 175a653efede03423aa840da24634f1ec6f20796f1eSimon Wilson bool mSourceSplit; 176e095244acd6350d0898d5a9b409dff2748553bfcSaurabh Shah //Additional property on top of source split 177e095244acd6350d0898d5a9b409dff2748553bfcSaurabh Shah bool mSourceSplitAlways; 1780fdae193307fb17bb537598ab62682edd5138b72radhakrishna bool mRGBHasNoScalar; 179afb0630fd38b3db0e01f243d3112d0b67a93976eSaurabh Shah bool mRotDownscale; 180ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson}; 181ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson}; //namespace qdutils 182ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson#endif //INCLUDE_LIBQCOMUTILS_MDPVER 183