1befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed/* 26e146950e61327d425750c1de36bfd70d526acadSushil Chauhan * Copyright (c) 2012-2013, The Linux Foundation. All rights reserved. 3befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed 4befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed * Redistribution and use in source and binary forms, with or without 5befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed * modification, are permitted provided that the following conditions are 6befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed * met: 7befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed * * Redistributions of source code must retain the above copyright 8befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed * notice, this list of conditions and the following disclaimer. 9befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed * * Redistributions in binary form must reproduce the above 10befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed * copyright notice, this list of conditions and the following 11befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed * disclaimer in the documentation and/or other materials provided 12befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed * with the distribution. 135070c694011ddc30673ec68a9d1d74dc713c49f2Duy Truong * * Neither the name of The Linux Foundation nor the names of its 14befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed * contributors may be used to endorse or promote products derived 15befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed * from this software without specific prior written permission. 16befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed * 17befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED 18befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 19befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT 20befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS 21befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 22befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 23befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR 24befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 25befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE 26befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN 27befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 28befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed */ 29befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed 300f859f6f0db0e0c05d8c319d8d597ad2731513aeNaseer Ahmed#ifndef INCLUDE_LIBQCOMUTILS_MDPVER 310f859f6f0db0e0c05d8c319d8d597ad2731513aeNaseer Ahmed#define INCLUDE_LIBQCOMUTILS_MDPVER 32befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed 330f859f6f0db0e0c05d8c319d8d597ad2731513aeNaseer Ahmed#include <stdint.h> 340f859f6f0db0e0c05d8c319d8d597ad2731513aeNaseer Ahmed#include <utils/Singleton.h> 350f859f6f0db0e0c05d8c319d8d597ad2731513aeNaseer Ahmed#include <cutils/properties.h> 36befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed 370f859f6f0db0e0c05d8c319d8d597ad2731513aeNaseer Ahmed/* This class gets the MSM type from the soc info 380f859f6f0db0e0c05d8c319d8d597ad2731513aeNaseer Ahmed*/ 390f859f6f0db0e0c05d8c319d8d597ad2731513aeNaseer Ahmedusing namespace android; 400f859f6f0db0e0c05d8c319d8d597ad2731513aeNaseer Ahmednamespace qdutils { 411b66878aec2d36dbc5aa9f8109885448431af236Manoj Kumar AVM// These panel definitions are available at mdss_mdp.h which is internal header 421b66878aec2d36dbc5aa9f8109885448431af236Manoj Kumar AVM// file and is not available at <linux/mdss_mdp.h>. 431b66878aec2d36dbc5aa9f8109885448431af236Manoj Kumar AVM// ToDo: once it is available at linux/mdss_mdp.h, these below definitions can 441b66878aec2d36dbc5aa9f8109885448431af236Manoj Kumar AVM// be removed. 450f859f6f0db0e0c05d8c319d8d597ad2731513aeNaseer Ahmedenum mdp_version { 460f859f6f0db0e0c05d8c319d8d597ad2731513aeNaseer Ahmed MDP_V_UNKNOWN = 0, 470f859f6f0db0e0c05d8c319d8d597ad2731513aeNaseer Ahmed MDP_V2_2 = 220, 480f859f6f0db0e0c05d8c319d8d597ad2731513aeNaseer Ahmed MDP_V3_0 = 300, 490f859f6f0db0e0c05d8c319d8d597ad2731513aeNaseer Ahmed MDP_V3_0_3 = 303, 5066ea016af22283b2dc51ae850841b15a14cacdd0Xiaoming Zhou MDP_V3_0_4 = 304, 510f859f6f0db0e0c05d8c319d8d597ad2731513aeNaseer Ahmed MDP_V3_1 = 310, 520f859f6f0db0e0c05d8c319d8d597ad2731513aeNaseer Ahmed MDP_V4_0 = 400, 530f859f6f0db0e0c05d8c319d8d597ad2731513aeNaseer Ahmed MDP_V4_1 = 410, 540f859f6f0db0e0c05d8c319d8d597ad2731513aeNaseer Ahmed MDP_V4_2 = 420, 550f859f6f0db0e0c05d8c319d8d597ad2731513aeNaseer Ahmed MDP_V4_3 = 430, 560f859f6f0db0e0c05d8c319d8d597ad2731513aeNaseer Ahmed MDP_V4_4 = 440, 570f859f6f0db0e0c05d8c319d8d597ad2731513aeNaseer Ahmed MDSS_V5 = 500, 58befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed}; 59befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed 60b3665b86c4a6307716da3f1148f5dc3128e2679fSaurabh Shah// chip variants have same major number and minor numbers usually vary 61b3665b86c4a6307716da3f1148f5dc3128e2679fSaurabh Shah// for e.g., MDSS_MDP_HW_REV_101 is 0x10010000 62b3665b86c4a6307716da3f1148f5dc3128e2679fSaurabh Shah// 1001 - major number 63b3665b86c4a6307716da3f1148f5dc3128e2679fSaurabh Shah// 0000 - minor number 64b3665b86c4a6307716da3f1148f5dc3128e2679fSaurabh Shah// 8x26 v1 minor number is 0000 65b3665b86c4a6307716da3f1148f5dc3128e2679fSaurabh Shah// v2 minor number is 0001 etc.. 66e188278e86ebb2f7f1ed3762855f15062b7f9d03Saurabh Shah 678fe8c938d27e528fcf7fb4a408711b4b6e405f13Saurabh Shahenum { 688fe8c938d27e528fcf7fb4a408711b4b6e405f13Saurabh Shah MAX_DISPLAY_DIM = 2048, 698fe8c938d27e528fcf7fb4a408711b4b6e405f13Saurabh Shah}; 708fe8c938d27e528fcf7fb4a408711b4b6e405f13Saurabh Shah 711b66878aec2d36dbc5aa9f8109885448431af236Manoj Kumar AVM#define NO_PANEL '0' 72b3c6e058ce1dbc689f27e7d7acbf1529d37307d8Naseer Ahmed#define MDDI_PANEL '1' 73b3c6e058ce1dbc689f27e7d7acbf1529d37307d8Naseer Ahmed#define EBI2_PANEL '2' 74b3c6e058ce1dbc689f27e7d7acbf1529d37307d8Naseer Ahmed#define LCDC_PANEL '3' 75b3c6e058ce1dbc689f27e7d7acbf1529d37307d8Naseer Ahmed#define EXT_MDDI_PANEL '4' 76b3c6e058ce1dbc689f27e7d7acbf1529d37307d8Naseer Ahmed#define TV_PANEL '5' 77b3c6e058ce1dbc689f27e7d7acbf1529d37307d8Naseer Ahmed#define DTV_PANEL '7' 78b3c6e058ce1dbc689f27e7d7acbf1529d37307d8Naseer Ahmed#define MIPI_VIDEO_PANEL '8' 79b3c6e058ce1dbc689f27e7d7acbf1529d37307d8Naseer Ahmed#define MIPI_CMD_PANEL '9' 80b3c6e058ce1dbc689f27e7d7acbf1529d37307d8Naseer Ahmed#define WRITEBACK_PANEL 'a' 81b3c6e058ce1dbc689f27e7d7acbf1529d37307d8Naseer Ahmed#define LVDS_PANEL 'b' 821b66878aec2d36dbc5aa9f8109885448431af236Manoj Kumar AVM#define EDP_PANEL 'c' 83b3c6e058ce1dbc689f27e7d7acbf1529d37307d8Naseer Ahmed 842e474227e216ee37ab84a3c9a22ea1f650626231Saurabh Shahclass MDPVersion; 852e474227e216ee37ab84a3c9a22ea1f650626231Saurabh Shah 862e474227e216ee37ab84a3c9a22ea1f650626231Saurabh Shahstruct Split { 872e474227e216ee37ab84a3c9a22ea1f650626231Saurabh Shah int mLeft; 882e474227e216ee37ab84a3c9a22ea1f650626231Saurabh Shah int mRight; 892e474227e216ee37ab84a3c9a22ea1f650626231Saurabh Shah Split() : mLeft(0), mRight(0){} 902e474227e216ee37ab84a3c9a22ea1f650626231Saurabh Shah int left() { return mLeft; } 912e474227e216ee37ab84a3c9a22ea1f650626231Saurabh Shah int right() { return mRight; } 922e474227e216ee37ab84a3c9a22ea1f650626231Saurabh Shah friend class MDPVersion; 932e474227e216ee37ab84a3c9a22ea1f650626231Saurabh Shah}; 94b3c6e058ce1dbc689f27e7d7acbf1529d37307d8Naseer Ahmed 95c121ec0d0c5d9237cbbdb83a99bf474ed2e5976aJeykumar Sankaranstruct PanelInfo { 96c121ec0d0c5d9237cbbdb83a99bf474ed2e5976aJeykumar Sankaran char mType; // Smart or Dumb 97c121ec0d0c5d9237cbbdb83a99bf474ed2e5976aJeykumar Sankaran int mPartialUpdateEnable; // Partial update feature 98c121ec0d0c5d9237cbbdb83a99bf474ed2e5976aJeykumar Sankaran int mLeftAlign; // ROI left alignment restriction 99c121ec0d0c5d9237cbbdb83a99bf474ed2e5976aJeykumar Sankaran int mWidthAlign; // ROI width alignment restriction 100c121ec0d0c5d9237cbbdb83a99bf474ed2e5976aJeykumar Sankaran int mTopAlign; // ROI top alignment restriction 101c121ec0d0c5d9237cbbdb83a99bf474ed2e5976aJeykumar Sankaran int mHeightAlign; // ROI height alignment restriction 1029e771bed593b11da6e6bcd54b16ade8e80fcda2bJeykumar Sankaran int mMinROIWidth; // Min width needed for ROI 1039e771bed593b11da6e6bcd54b16ade8e80fcda2bJeykumar Sankaran int mMinROIHeight; // Min height needed for ROI 104ecd6f5d93a833293d2fd651069cc2e0e86acc27dJeykumar Sankaran bool mNeedsROIMerge; // Merge ROI's of both the DSI's 105c121ec0d0c5d9237cbbdb83a99bf474ed2e5976aJeykumar Sankaran PanelInfo() : mType(NO_PANEL), mPartialUpdateEnable(0), 1069e771bed593b11da6e6bcd54b16ade8e80fcda2bJeykumar Sankaran mLeftAlign(0), mWidthAlign(0), mTopAlign(0), mHeightAlign(0), 107ecd6f5d93a833293d2fd651069cc2e0e86acc27dJeykumar Sankaran mMinROIWidth(0), mMinROIHeight(0), mNeedsROIMerge(false){} 108c121ec0d0c5d9237cbbdb83a99bf474ed2e5976aJeykumar Sankaran friend class MDPVersion; 109c121ec0d0c5d9237cbbdb83a99bf474ed2e5976aJeykumar Sankaran}; 110c121ec0d0c5d9237cbbdb83a99bf474ed2e5976aJeykumar Sankaran 1110f859f6f0db0e0c05d8c319d8d597ad2731513aeNaseer Ahmedclass MDPVersion : public Singleton <MDPVersion> 1120f859f6f0db0e0c05d8c319d8d597ad2731513aeNaseer Ahmed{ 1130f859f6f0db0e0c05d8c319d8d597ad2731513aeNaseer Ahmedpublic: 1140f859f6f0db0e0c05d8c319d8d597ad2731513aeNaseer Ahmed MDPVersion(); 115da05b4e085dbdd01ffc1c05de4685282e5d4f0e2Xiaoming Zhou ~MDPVersion(); 1160f859f6f0db0e0c05d8c319d8d597ad2731513aeNaseer Ahmed int getMDPVersion() {return mMDPVersion;} 117c121ec0d0c5d9237cbbdb83a99bf474ed2e5976aJeykumar Sankaran char getPanelType() {return mPanelInfo.mType;} 1180f859f6f0db0e0c05d8c319d8d597ad2731513aeNaseer Ahmed bool hasOverlay() {return mHasOverlay;} 119cf40ec929a1ddf18023dad9647e7be08638b659dDileep Kumar Reddi uint8_t getTotalPipes() { 120cf40ec929a1ddf18023dad9647e7be08638b659dDileep Kumar Reddi return (uint8_t)(mRGBPipes + mVGPipes + mDMAPipes); 121cf40ec929a1ddf18023dad9647e7be08638b659dDileep Kumar Reddi } 1226e146950e61327d425750c1de36bfd70d526acadSushil Chauhan uint8_t getRGBPipes() { return mRGBPipes; } 1236e146950e61327d425750c1de36bfd70d526acadSushil Chauhan uint8_t getVGPipes() { return mVGPipes; } 1246e146950e61327d425750c1de36bfd70d526acadSushil Chauhan uint8_t getDMAPipes() { return mDMAPipes; } 1258fe8c938d27e528fcf7fb4a408711b4b6e405f13Saurabh Shah bool supportsDecimation(); 1268fe8c938d27e528fcf7fb4a408711b4b6e405f13Saurabh Shah uint32_t getMaxMDPDownscale(); 127df991ce9e82b63e27859a4c534df4c6c9af2c915Jeykumar Sankaran uint32_t getMaxMDPUpscale(); 12830323b98c1abab90dce91c3d226d4e65a24076fcSushil Chauhan bool supportsBWC(); 129c38cdae859e0ee12ad3284a308eaeef9d2708c74Manoj Kumar AVM bool supportsMacroTile(); 1302e474227e216ee37ab84a3c9a22ea1f650626231Saurabh Shah int getLeftSplit() { return mSplit.left(); } 1312e474227e216ee37ab84a3c9a22ea1f650626231Saurabh Shah int getRightSplit() { return mSplit.right(); } 132c9b4387ff5af60882a032188b64b85bebad3977aJeykumar Sankaran bool isPartialUpdateEnabled() { return mPanelInfo.mPartialUpdateEnable; } 133c121ec0d0c5d9237cbbdb83a99bf474ed2e5976aJeykumar Sankaran int getLeftAlign() { return mPanelInfo.mLeftAlign; } 134c121ec0d0c5d9237cbbdb83a99bf474ed2e5976aJeykumar Sankaran int getWidthAlign() { return mPanelInfo.mWidthAlign; } 135c121ec0d0c5d9237cbbdb83a99bf474ed2e5976aJeykumar Sankaran int getTopAlign() { return mPanelInfo.mTopAlign; } 136c121ec0d0c5d9237cbbdb83a99bf474ed2e5976aJeykumar Sankaran int getHeightAlign() { return mPanelInfo.mHeightAlign; } 1379e771bed593b11da6e6bcd54b16ade8e80fcda2bJeykumar Sankaran int getMinROIWidth() { return mPanelInfo.mMinROIWidth; } 1389e771bed593b11da6e6bcd54b16ade8e80fcda2bJeykumar Sankaran int getMinROIHeight() { return mPanelInfo.mMinROIHeight; } 139ecd6f5d93a833293d2fd651069cc2e0e86acc27dJeykumar Sankaran bool needsROIMerge() { return mPanelInfo.mNeedsROIMerge; } 1401ff95647a2ad38017c7acdfa32a719ffbe5fc116Saurabh Shah unsigned long getLowBw() { return mLowBw; } 1411ff95647a2ad38017c7acdfa32a719ffbe5fc116Saurabh Shah unsigned long getHighBw() { return mHighBw; } 14294b51da4bc46f846fa2f7f0e36d2730b63ae88e2Saurabh Shah bool hasMinCropWidthLimitation() const; 1437dc3e31e2a6de0ee146ad9146c12453ad5ce8fa7Saurabh Shah bool isSrcSplit() const; 1440eb79f8456c2a8bb0f30a2e966f8c9000fe934e9Saurabh Shah bool isSrcSplitAlways() const; 145a85d9f9f2d5cd0555b409b1fc974a9ecec3fee56radhakrishna bool isRGBScalarSupported() const; 146693d5c2fa030ce90b0f8ccd5cffd255525e2305cSaurabh Shah bool is8x26(); 147693d5c2fa030ce90b0f8ccd5cffd255525e2305cSaurabh Shah bool is8x74v2(); 148693d5c2fa030ce90b0f8ccd5cffd255525e2305cSaurabh Shah bool is8084(); 149693d5c2fa030ce90b0f8ccd5cffd255525e2305cSaurabh Shah bool is8092(); 150a85d9f9f2d5cd0555b409b1fc974a9ecec3fee56radhakrishna bool is8x16(); 151b3665b86c4a6307716da3f1148f5dc3128e2679fSaurabh Shah 1520f859f6f0db0e0c05d8c319d8d597ad2731513aeNaseer Ahmedprivate: 153ed2e4f6e223ab95e3d9a8c7c3210324e2fab21f0manoj kumar amara venkata mastan bool updateSysFsInfo(); 154c121ec0d0c5d9237cbbdb83a99bf474ed2e5976aJeykumar Sankaran void updatePanelInfo(); 1551b66878aec2d36dbc5aa9f8109885448431af236Manoj Kumar AVM bool updateSplitInfo(); 156ed2e4f6e223ab95e3d9a8c7c3210324e2fab21f0manoj kumar amara venkata mastan int tokenizeParams(char *inputParams, const char *delim, 157ed2e4f6e223ab95e3d9a8c7c3210324e2fab21f0manoj kumar amara venkata mastan char* tokenStr[], int *idx); 158da05b4e085dbdd01ffc1c05de4685282e5d4f0e2Xiaoming Zhou int mFd; 1590f859f6f0db0e0c05d8c319d8d597ad2731513aeNaseer Ahmed int mMDPVersion; 1600f859f6f0db0e0c05d8c319d8d597ad2731513aeNaseer Ahmed bool mHasOverlay; 1616e146950e61327d425750c1de36bfd70d526acadSushil Chauhan uint32_t mMdpRev; 1626e146950e61327d425750c1de36bfd70d526acadSushil Chauhan uint8_t mRGBPipes; 1636e146950e61327d425750c1de36bfd70d526acadSushil Chauhan uint8_t mVGPipes; 1646e146950e61327d425750c1de36bfd70d526acadSushil Chauhan uint8_t mDMAPipes; 1658fe8c938d27e528fcf7fb4a408711b4b6e405f13Saurabh Shah uint32_t mFeatures; 1668fe8c938d27e528fcf7fb4a408711b4b6e405f13Saurabh Shah uint32_t mMDPDownscale; 167ed2e4f6e223ab95e3d9a8c7c3210324e2fab21f0manoj kumar amara venkata mastan uint32_t mMDPUpscale; 168c38cdae859e0ee12ad3284a308eaeef9d2708c74Manoj Kumar AVM bool mMacroTileEnabled; 1692e474227e216ee37ab84a3c9a22ea1f650626231Saurabh Shah Split mSplit; 170c121ec0d0c5d9237cbbdb83a99bf474ed2e5976aJeykumar Sankaran PanelInfo mPanelInfo; 1711ff95647a2ad38017c7acdfa32a719ffbe5fc116Saurabh Shah unsigned long mLowBw; //kbps 1721ff95647a2ad38017c7acdfa32a719ffbe5fc116Saurabh Shah unsigned long mHighBw; //kbps 1737dc3e31e2a6de0ee146ad9146c12453ad5ce8fa7Saurabh Shah bool mSourceSplit; 1740eb79f8456c2a8bb0f30a2e966f8c9000fe934e9Saurabh Shah //Additional property on top of source split 1750eb79f8456c2a8bb0f30a2e966f8c9000fe934e9Saurabh Shah bool mSourceSplitAlways; 176a85d9f9f2d5cd0555b409b1fc974a9ecec3fee56radhakrishna bool mRGBHasNoScalar; 1770f859f6f0db0e0c05d8c319d8d597ad2731513aeNaseer Ahmed}; 1780f859f6f0db0e0c05d8c319d8d597ad2731513aeNaseer Ahmed}; //namespace qdutils 1790f859f6f0db0e0c05d8c319d8d597ad2731513aeNaseer Ahmed#endif //INCLUDE_LIBQCOMUTILS_MDPVER 180