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