10c8b7b5c841a7fad5df11b7e02d7cd792cfcc734Naseer Ahmed/* 20c8b7b5c841a7fad5df11b7e02d7cd792cfcc734Naseer Ahmed * Copyright (C) 2010 The Android Open Source Project 356f610dd235b577725198e9341caae92379fdf23Saurabh Shah * Copyright (C) 2012, The Linux Foundation. All rights reserved. 40c8b7b5c841a7fad5df11b7e02d7cd792cfcc734Naseer Ahmed * 50c8b7b5c841a7fad5df11b7e02d7cd792cfcc734Naseer Ahmed * Not a Contribution, Apache license notifications and license are 60c8b7b5c841a7fad5df11b7e02d7cd792cfcc734Naseer Ahmed * retained for attribution purposes only. 70c8b7b5c841a7fad5df11b7e02d7cd792cfcc734Naseer Ahmed 80c8b7b5c841a7fad5df11b7e02d7cd792cfcc734Naseer Ahmed * Licensed under the Apache License, Version 2.0 (the "License"); 90c8b7b5c841a7fad5df11b7e02d7cd792cfcc734Naseer Ahmed * you may not use this file except in compliance with the License. 100c8b7b5c841a7fad5df11b7e02d7cd792cfcc734Naseer Ahmed * You may obtain a copy of the License at 110c8b7b5c841a7fad5df11b7e02d7cd792cfcc734Naseer Ahmed * 120c8b7b5c841a7fad5df11b7e02d7cd792cfcc734Naseer Ahmed * http://www.apache.org/licenses/LICENSE-2.0 130c8b7b5c841a7fad5df11b7e02d7cd792cfcc734Naseer Ahmed * 140c8b7b5c841a7fad5df11b7e02d7cd792cfcc734Naseer Ahmed * Unless required by applicable law or agreed to in writing, software 150c8b7b5c841a7fad5df11b7e02d7cd792cfcc734Naseer Ahmed * distributed under the License is distributed on an "AS IS" BASIS, 160c8b7b5c841a7fad5df11b7e02d7cd792cfcc734Naseer Ahmed * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 170c8b7b5c841a7fad5df11b7e02d7cd792cfcc734Naseer Ahmed * See the License for the specific language governing permissions and 180c8b7b5c841a7fad5df11b7e02d7cd792cfcc734Naseer Ahmed * limitations under the License. 190c8b7b5c841a7fad5df11b7e02d7cd792cfcc734Naseer Ahmed */ 200c8b7b5c841a7fad5df11b7e02d7cd792cfcc734Naseer Ahmed 2172cf9762f84aab07faab86e35fe830b63ec54d72Naseer Ahmed#ifndef HWC_EXTERNAL_DISPLAY_H 2272cf9762f84aab07faab86e35fe830b63ec54d72Naseer Ahmed#define HWC_EXTERNAL_DISPLAY_H 230c8b7b5c841a7fad5df11b7e02d7cd792cfcc734Naseer Ahmed 2456f610dd235b577725198e9341caae92379fdf23Saurabh Shah#include <utils/threads.h> 2556f610dd235b577725198e9341caae92379fdf23Saurabh Shah#include <linux/fb.h> 26f8ec162999478a3f96dd945831f7c2913a4d3cffNaseer Ahmed 270c8b7b5c841a7fad5df11b7e02d7cd792cfcc734Naseer Ahmedstruct hwc_context_t; 280c8b7b5c841a7fad5df11b7e02d7cd792cfcc734Naseer Ahmed 290c8b7b5c841a7fad5df11b7e02d7cd792cfcc734Naseer Ahmednamespace qhwc { 300c8b7b5c841a7fad5df11b7e02d7cd792cfcc734Naseer Ahmed 314012258b6b344adccf19973602c4d092e2403053Arun Kumar K.R//Type of scanning of EDID(Video Capability Data Block) 324012258b6b344adccf19973602c4d092e2403053Arun Kumar K.Renum external_scansupport_type { 334012258b6b344adccf19973602c4d092e2403053Arun Kumar K.R EXT_SCAN_NOT_SUPPORTED = 0, 344012258b6b344adccf19973602c4d092e2403053Arun Kumar K.R EXT_SCAN_ALWAYS_OVERSCANED = 1, 354012258b6b344adccf19973602c4d092e2403053Arun Kumar K.R EXT_SCAN_ALWAYS_UNDERSCANED = 2, 364012258b6b344adccf19973602c4d092e2403053Arun Kumar K.R EXT_SCAN_BOTH_SUPPORTED = 3 374012258b6b344adccf19973602c4d092e2403053Arun Kumar K.R}; 38c9ef1b45b51f4b541da4337cd86dc510654c390bAmara Venkata Mastan Manoj Kumar 3972cf9762f84aab07faab86e35fe830b63ec54d72Naseer Ahmedclass ExternalDisplay 400c8b7b5c841a7fad5df11b7e02d7cd792cfcc734Naseer Ahmed{ 4156f610dd235b577725198e9341caae92379fdf23Saurabh Shahpublic: 4272cf9762f84aab07faab86e35fe830b63ec54d72Naseer Ahmed ExternalDisplay(hwc_context_t* ctx); 4372cf9762f84aab07faab86e35fe830b63ec54d72Naseer Ahmed ~ExternalDisplay(); 4456f610dd235b577725198e9341caae92379fdf23Saurabh Shah int getModeCount() const; 4556f610dd235b577725198e9341caae92379fdf23Saurabh Shah void getEDIDModes(int *out) const; 464012258b6b344adccf19973602c4d092e2403053Arun Kumar K.R bool isCEUnderscanSupported() { return mUnderscanSupported; } 47c9ef1b45b51f4b541da4337cd86dc510654c390bAmara Venkata Mastan Manoj Kumar void setExternalDisplay(bool connected, int extFbNum = 0); 48c9ef1b45b51f4b541da4337cd86dc510654c390bAmara Venkata Mastan Manoj Kumar bool isExternalConnected() { return mConnected;}; 493a85d3e5b8f689cb3a3ef7ef1ce50c1e01afae1aAmara Venkata Mastan Manoj Kumar void setExtDpyNum(int extDpyNum) { mExtDpyNum = extDpyNum;}; 5056f610dd235b577725198e9341caae92379fdf23Saurabh Shah void setHPD(uint32_t startEnd); 5156f610dd235b577725198e9341caae92379fdf23Saurabh Shah void setEDIDMode(int resMode); 5256f610dd235b577725198e9341caae92379fdf23Saurabh Shah void setActionSafeDimension(int w, int h); 53c9ef1b45b51f4b541da4337cd86dc510654c390bAmara Venkata Mastan Manoj Kumar void processUEventOnline(const char *str); 54c9ef1b45b51f4b541da4337cd86dc510654c390bAmara Venkata Mastan Manoj Kumar void processUEventOffline(const char *str); 550c8b7b5c841a7fad5df11b7e02d7cd792cfcc734Naseer Ahmed 5656f610dd235b577725198e9341caae92379fdf23Saurabh Shahprivate: 574012258b6b344adccf19973602c4d092e2403053Arun Kumar K.R void readCEUnderscanInfo(); 5872cf9762f84aab07faab86e35fe830b63ec54d72Naseer Ahmed bool readResolution(); 59c9ef1b45b51f4b541da4337cd86dc510654c390bAmara Venkata Mastan Manoj Kumar int parseResolution(char* edidStr, int* edidModes); 6072cf9762f84aab07faab86e35fe830b63ec54d72Naseer Ahmed void setResolution(int ID); 61c9ef1b45b51f4b541da4337cd86dc510654c390bAmara Venkata Mastan Manoj Kumar bool openFrameBuffer(int fbNum); 62f8ec162999478a3f96dd945831f7c2913a4d3cffNaseer Ahmed bool closeFrameBuffer(); 6372cf9762f84aab07faab86e35fe830b63ec54d72Naseer Ahmed bool writeHPDOption(int userOption) const; 6472cf9762f84aab07faab86e35fe830b63ec54d72Naseer Ahmed bool isValidMode(int ID); 6572cf9762f84aab07faab86e35fe830b63ec54d72Naseer Ahmed void handleUEvent(char* str, int len); 66c9ef1b45b51f4b541da4337cd86dc510654c390bAmara Venkata Mastan Manoj Kumar int getModeOrder(int mode); 67f402f149587c185267504f6eec780eb3fe010a55Arun Kumar K.R int getUserMode(); 68c9ef1b45b51f4b541da4337cd86dc510654c390bAmara Venkata Mastan Manoj Kumar int getBestMode(); 69f402f149587c185267504f6eec780eb3fe010a55Arun Kumar K.R bool isInterlacedMode(int mode); 70f8ec162999478a3f96dd945831f7c2913a4d3cffNaseer Ahmed void resetInfo(); 71c9ef1b45b51f4b541da4337cd86dc510654c390bAmara Venkata Mastan Manoj Kumar void setDpyHdmiAttr(); 72c9ef1b45b51f4b541da4337cd86dc510654c390bAmara Venkata Mastan Manoj Kumar void setDpyWfdAttr(); 733e858ebde3f2b4e762af8f7f2808d45ba59b890dSaurabh Shah void getAttrForMode(int& width, int& height, int& fps); 74c9ef1b45b51f4b541da4337cd86dc510654c390bAmara Venkata Mastan Manoj Kumar void updateExtDispDevFbIndex(); 75c9ef1b45b51f4b541da4337cd86dc510654c390bAmara Venkata Mastan Manoj Kumar int configureHDMIDisplay(); 76c9ef1b45b51f4b541da4337cd86dc510654c390bAmara Venkata Mastan Manoj Kumar int configureWFDDisplay(); 77c9ef1b45b51f4b541da4337cd86dc510654c390bAmara Venkata Mastan Manoj Kumar int teardownHDMIDisplay(); 78c9ef1b45b51f4b541da4337cd86dc510654c390bAmara Venkata Mastan Manoj Kumar int teardownWFDDisplay(); 79c9ef1b45b51f4b541da4337cd86dc510654c390bAmara Venkata Mastan Manoj Kumar int getExtFbNum(int &fbNum); 800c8b7b5c841a7fad5df11b7e02d7cd792cfcc734Naseer Ahmed 8156f610dd235b577725198e9341caae92379fdf23Saurabh Shah mutable android::Mutex mExtDispLock; 82f8ec162999478a3f96dd945831f7c2913a4d3cffNaseer Ahmed int mFd; 83f8ec162999478a3f96dd945831f7c2913a4d3cffNaseer Ahmed int mCurrentMode; 84c9ef1b45b51f4b541da4337cd86dc510654c390bAmara Venkata Mastan Manoj Kumar int mConnected; 85c9ef1b45b51f4b541da4337cd86dc510654c390bAmara Venkata Mastan Manoj Kumar int mConnectedFbNum; 8656f610dd235b577725198e9341caae92379fdf23Saurabh Shah int mResolutionMode; 8772cf9762f84aab07faab86e35fe830b63ec54d72Naseer Ahmed char mEDIDs[128]; 8872cf9762f84aab07faab86e35fe830b63ec54d72Naseer Ahmed int mEDIDModes[64]; 8972cf9762f84aab07faab86e35fe830b63ec54d72Naseer Ahmed int mModeCount; 904012258b6b344adccf19973602c4d092e2403053Arun Kumar K.R bool mUnderscanSupported; 9172cf9762f84aab07faab86e35fe830b63ec54d72Naseer Ahmed hwc_context_t *mHwcContext; 92f8ec162999478a3f96dd945831f7c2913a4d3cffNaseer Ahmed fb_var_screeninfo mVInfo; 93c9ef1b45b51f4b541da4337cd86dc510654c390bAmara Venkata Mastan Manoj Kumar int mHdmiFbNum; 94c9ef1b45b51f4b541da4337cd86dc510654c390bAmara Venkata Mastan Manoj Kumar int mWfdFbNum; 953a85d3e5b8f689cb3a3ef7ef1ce50c1e01afae1aAmara Venkata Mastan Manoj Kumar int mExtDpyNum; 960c8b7b5c841a7fad5df11b7e02d7cd792cfcc734Naseer Ahmed}; 970c8b7b5c841a7fad5df11b7e02d7cd792cfcc734Naseer Ahmed 980c8b7b5c841a7fad5df11b7e02d7cd792cfcc734Naseer Ahmed}; //qhwc 990c8b7b5c841a7fad5df11b7e02d7cd792cfcc734Naseer Ahmed// --------------------------------------------------------------------------- 10072cf9762f84aab07faab86e35fe830b63ec54d72Naseer Ahmed#endif //HWC_EXTERNAL_DISPLAY_H 101