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