1 /* 2 * Copyright (C) 2010 The Android Open Source Project 3 * Copyright (C) 2012-2014, The Linux Foundation. All rights reserved. 4 * 5 * Not a Contribution, Apache license notifications and license are 6 * retained for attribution purposes only. 7 8 * Licensed under the Apache License, Version 2.0 (the "License"); 9 * you may not use this file except in compliance with the License. 10 * You may obtain a copy of the License at 11 * 12 * http://www.apache.org/licenses/LICENSE-2.0 13 * 14 * Unless required by applicable law or agreed to in writing, software 15 * distributed under the License is distributed on an "AS IS" BASIS, 16 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 17 * See the License for the specific language governing permissions and 18 * limitations under the License. 19 */ 20 21 #ifndef HWC_HDMI_DISPLAY_H 22 #define HWC_HDMI_DISPLAY_H 23 24 #include <linux/fb.h> 25 26 struct msm_hdmi_mode_timing_info; 27 28 namespace qhwc { 29 30 //Type of scanning of EDID(Video Capability Data Block) 31 enum hdmi_scansupport_type { 32 HDMI_SCAN_NOT_SUPPORTED = 0, 33 HDMI_SCAN_ALWAYS_OVERSCANED = 1, 34 HDMI_SCAN_ALWAYS_UNDERSCANED = 2, 35 HDMI_SCAN_BOTH_SUPPORTED = 3 36 }; 37 38 // Structure to store EDID related data 39 struct EDIDData { 40 int mMode, mWidth, mHeight, mFps; 41 // Predetermined ordering for each mode 42 int mModeOrder; EDIDDataEDIDData43 EDIDData(int mode, int width, int height, int fps, int order) 44 : mMode(mode), mWidth(width), mHeight(height), mFps(fps), mModeOrder(order) 45 { } 46 }; 47 48 class HDMIDisplay 49 { 50 public: 51 HDMIDisplay(); 52 ~HDMIDisplay(); 53 void setHPD(uint32_t startEnd); 54 void setActionSafeDimension(int w, int h); isCEUnderscanSupported()55 bool isCEUnderscanSupported() { return mUnderscanSupported; } 56 int configure(); 57 void getAttributes(uint32_t& width, uint32_t& height); 58 int teardown(); getWidth()59 uint32_t getWidth() const { return mXres; }; getHeight()60 uint32_t getHeight() const { return mYres; }; getVsyncPeriod()61 uint32_t getVsyncPeriod() const { return mVsyncPeriod; }; getFd()62 int getFd() const { return mFd; }; getMDPScalingMode()63 bool getMDPScalingMode() const { return mMDPScalingMode; } 64 void activateDisplay(); 65 /* Returns true if HDMI is the PRIMARY display device*/ 66 bool isHDMIPrimaryDisplay(); 67 int getConnectedState(); 68 /* when HDMI is an EXTERNAL display, PRIMARY display attributes are needed 69 for scaling mode */ 70 void setPrimaryAttributes(uint32_t primaryWidth, uint32_t primaryHeight); 71 72 private: 73 int getModeCount() const; 74 void setSPDInfo(const char* node, const char* property); 75 void readCEUnderscanInfo(); 76 bool readResolution(); 77 int parseResolution(char* edidMode); 78 bool openFrameBuffer(); 79 bool closeFrameBuffer(); 80 bool writeHPDOption(int userOption) const; 81 bool isValidMode(int mode); 82 int getModeOrder(int mode); 83 int getUserMode(); 84 int getBestMode(); 85 bool isInterlacedMode(int mode); 86 void resetInfo(); 87 void setAttributes(); 88 void getAttrForMode(uint32_t& width, uint32_t& height, uint32_t& fps); 89 int openDeviceNode(const char* node, int fileMode) const; 90 91 int mFd; 92 int mFbNum; 93 int mCurrentMode; 94 int mEDIDModes[64]; 95 int mModeCount; 96 fb_var_screeninfo mVInfo; 97 // Holds all the HDMI modes and timing info supported by driver 98 msm_hdmi_mode_timing_info* supported_video_mode_lut; 99 uint32_t mXres, mYres, mVsyncPeriod, mPrimaryWidth, mPrimaryHeight; 100 bool mMDPScalingMode; 101 bool mUnderscanSupported; 102 // Downscale feature switch, set via system property 103 // sys.hwc.mdp_downscale_enabled 104 bool mMDPDownscaleEnabled; 105 int mDisplayId; 106 }; 107 108 }; //qhwc 109 // --------------------------------------------------------------------------- 110 #endif //HWC_HDMI_DISPLAY_H 111