1ccf943e44f9e9d615a6019459625148830039f8dNaseer Ahmed/* 2ccf943e44f9e9d615a6019459625148830039f8dNaseer Ahmed * Copyright (C) 2010 The Android Open Source Project 356e7f2675db48df98bff43b6e8d0e0828875e04fArun Kumar K.R * Copyright (C) 2012-2013, The Linux Foundation. All rights reserved. 4ccf943e44f9e9d615a6019459625148830039f8dNaseer Ahmed * 5ccf943e44f9e9d615a6019459625148830039f8dNaseer Ahmed * Not a Contribution, Apache license notifications and license are 6ccf943e44f9e9d615a6019459625148830039f8dNaseer Ahmed * retained for attribution purposes only. 7ccf943e44f9e9d615a6019459625148830039f8dNaseer Ahmed 8ccf943e44f9e9d615a6019459625148830039f8dNaseer Ahmed * Licensed under the Apache License, Version 2.0 (the "License"); 9ccf943e44f9e9d615a6019459625148830039f8dNaseer Ahmed * you may not use this file except in compliance with the License. 10ccf943e44f9e9d615a6019459625148830039f8dNaseer Ahmed * You may obtain a copy of the License at 11ccf943e44f9e9d615a6019459625148830039f8dNaseer Ahmed * 12ccf943e44f9e9d615a6019459625148830039f8dNaseer Ahmed * http://www.apache.org/licenses/LICENSE-2.0 13ccf943e44f9e9d615a6019459625148830039f8dNaseer Ahmed * 14ccf943e44f9e9d615a6019459625148830039f8dNaseer Ahmed * Unless required by applicable law or agreed to in writing, software 15ccf943e44f9e9d615a6019459625148830039f8dNaseer Ahmed * distributed under the License is distributed on an "AS IS" BASIS, 16ccf943e44f9e9d615a6019459625148830039f8dNaseer Ahmed * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 17ccf943e44f9e9d615a6019459625148830039f8dNaseer Ahmed * See the License for the specific language governing permissions and 18ccf943e44f9e9d615a6019459625148830039f8dNaseer Ahmed * limitations under the License. 19ccf943e44f9e9d615a6019459625148830039f8dNaseer Ahmed */ 20ccf943e44f9e9d615a6019459625148830039f8dNaseer Ahmed 211589dee5c27293d278d3e549af8a4bda27e080f8Naseer Ahmed#ifndef HWC_EXTERNAL_DISPLAY_H 221589dee5c27293d278d3e549af8a4bda27e080f8Naseer Ahmed#define HWC_EXTERNAL_DISPLAY_H 23ccf943e44f9e9d615a6019459625148830039f8dNaseer Ahmed 24bbee5b1c3475b630caa5061fbf535f87f21743f7Saurabh Shah#include <linux/fb.h> 25080cfcaf2e972513fc09a0207d034ef5dcc975d8Naseer Ahmed 26ccf943e44f9e9d615a6019459625148830039f8dNaseer Ahmedstruct hwc_context_t; 2756e7f2675db48df98bff43b6e8d0e0828875e04fArun Kumar K.Rstruct msm_hdmi_mode_timing_info; 28ccf943e44f9e9d615a6019459625148830039f8dNaseer Ahmed 29ccf943e44f9e9d615a6019459625148830039f8dNaseer Ahmednamespace qhwc { 30ccf943e44f9e9d615a6019459625148830039f8dNaseer Ahmed 310ae34e340382b0b3b767b844305db19e91257eddArun Kumar K.R//Type of scanning of EDID(Video Capability Data Block) 320ae34e340382b0b3b767b844305db19e91257eddArun Kumar K.Renum external_scansupport_type { 330ae34e340382b0b3b767b844305db19e91257eddArun Kumar K.R EXT_SCAN_NOT_SUPPORTED = 0, 340ae34e340382b0b3b767b844305db19e91257eddArun Kumar K.R EXT_SCAN_ALWAYS_OVERSCANED = 1, 350ae34e340382b0b3b767b844305db19e91257eddArun Kumar K.R EXT_SCAN_ALWAYS_UNDERSCANED = 2, 360ae34e340382b0b3b767b844305db19e91257eddArun Kumar K.R EXT_SCAN_BOTH_SUPPORTED = 3 370ae34e340382b0b3b767b844305db19e91257eddArun Kumar K.R}; 38620fc1f5f84e968c2e9b803e8580ee718c3c3f65Amara Venkata Mastan Manoj Kumar 391589dee5c27293d278d3e549af8a4bda27e080f8Naseer Ahmedclass ExternalDisplay 40ccf943e44f9e9d615a6019459625148830039f8dNaseer Ahmed{ 41bbee5b1c3475b630caa5061fbf535f87f21743f7Saurabh Shahpublic: 421589dee5c27293d278d3e549af8a4bda27e080f8Naseer Ahmed ExternalDisplay(hwc_context_t* ctx); 431589dee5c27293d278d3e549af8a4bda27e080f8Naseer Ahmed ~ExternalDisplay(); 44bbee5b1c3475b630caa5061fbf535f87f21743f7Saurabh Shah void setHPD(uint32_t startEnd); 45bbee5b1c3475b630caa5061fbf535f87f21743f7Saurabh Shah void setActionSafeDimension(int w, int h); 46361900d9a618d2c4d2276a10ca76919214f6759fJeykumar Sankaran bool isCEUnderscanSupported() { return mUnderscanSupported; } 47361900d9a618d2c4d2276a10ca76919214f6759fJeykumar Sankaran int configure(); 48fea63d61337f1efeb2d1c7a7a4fafe472611704cAmara Venkata Mastan Manoj Kumar void getAttributes(int& width, int& height); 49361900d9a618d2c4d2276a10ca76919214f6759fJeykumar Sankaran int teardown(); 50361900d9a618d2c4d2276a10ca76919214f6759fJeykumar Sankaran bool isConnected() { 51361900d9a618d2c4d2276a10ca76919214f6759fJeykumar Sankaran return mHwcContext->dpyAttr[HWC_DISPLAY_EXTERNAL].connected; 52361900d9a618d2c4d2276a10ca76919214f6759fJeykumar Sankaran } 53ccf943e44f9e9d615a6019459625148830039f8dNaseer Ahmed 54bbee5b1c3475b630caa5061fbf535f87f21743f7Saurabh Shahprivate: 55361900d9a618d2c4d2276a10ca76919214f6759fJeykumar Sankaran int getModeCount() const; 56361900d9a618d2c4d2276a10ca76919214f6759fJeykumar Sankaran void getEDIDModes(int *out) const; 57361900d9a618d2c4d2276a10ca76919214f6759fJeykumar Sankaran void setEDIDMode(int resMode); 589d2cf700ca8ae9be23b549f3d4432fa0850e2572Arun Kumar K.R void setSPDInfo(const char* node, const char* property); 590ae34e340382b0b3b767b844305db19e91257eddArun Kumar K.R void readCEUnderscanInfo(); 601589dee5c27293d278d3e549af8a4bda27e080f8Naseer Ahmed bool readResolution(); 61620fc1f5f84e968c2e9b803e8580ee718c3c3f65Amara Venkata Mastan Manoj Kumar int parseResolution(char* edidStr, int* edidModes); 621589dee5c27293d278d3e549af8a4bda27e080f8Naseer Ahmed void setResolution(int ID); 63361900d9a618d2c4d2276a10ca76919214f6759fJeykumar Sankaran bool openFrameBuffer(); 64080cfcaf2e972513fc09a0207d034ef5dcc975d8Naseer Ahmed bool closeFrameBuffer(); 651589dee5c27293d278d3e549af8a4bda27e080f8Naseer Ahmed bool writeHPDOption(int userOption) const; 661589dee5c27293d278d3e549af8a4bda27e080f8Naseer Ahmed bool isValidMode(int ID); 67620fc1f5f84e968c2e9b803e8580ee718c3c3f65Amara Venkata Mastan Manoj Kumar int getModeOrder(int mode); 68c5bb51f047f080f2920994cfbd788d27800a8e89Arun Kumar K.R int getUserMode(); 69620fc1f5f84e968c2e9b803e8580ee718c3c3f65Amara Venkata Mastan Manoj Kumar int getBestMode(); 70c5bb51f047f080f2920994cfbd788d27800a8e89Arun Kumar K.R bool isInterlacedMode(int mode); 71080cfcaf2e972513fc09a0207d034ef5dcc975d8Naseer Ahmed void resetInfo(); 72361900d9a618d2c4d2276a10ca76919214f6759fJeykumar Sankaran void setAttributes(); 732e449280f98f003bb5831c274fc07ab722ac1a94Saurabh Shah void getAttrForMode(int& width, int& height, int& fps); 74ccf943e44f9e9d615a6019459625148830039f8dNaseer Ahmed 75080cfcaf2e972513fc09a0207d034ef5dcc975d8Naseer Ahmed int mFd; 76361900d9a618d2c4d2276a10ca76919214f6759fJeykumar Sankaran int mFbNum; 77080cfcaf2e972513fc09a0207d034ef5dcc975d8Naseer Ahmed int mCurrentMode; 781589dee5c27293d278d3e549af8a4bda27e080f8Naseer Ahmed int mEDIDModes[64]; 791589dee5c27293d278d3e549af8a4bda27e080f8Naseer Ahmed int mModeCount; 800ae34e340382b0b3b767b844305db19e91257eddArun Kumar K.R bool mUnderscanSupported; 811589dee5c27293d278d3e549af8a4bda27e080f8Naseer Ahmed hwc_context_t *mHwcContext; 82080cfcaf2e972513fc09a0207d034ef5dcc975d8Naseer Ahmed fb_var_screeninfo mVInfo; 8356e7f2675db48df98bff43b6e8d0e0828875e04fArun Kumar K.R // Holds all the HDMI modes and timing info supported by driver 8456e7f2675db48df98bff43b6e8d0e0828875e04fArun Kumar K.R msm_hdmi_mode_timing_info* supported_video_mode_lut; 85ccf943e44f9e9d615a6019459625148830039f8dNaseer Ahmed}; 86ccf943e44f9e9d615a6019459625148830039f8dNaseer Ahmed 87ccf943e44f9e9d615a6019459625148830039f8dNaseer Ahmed}; //qhwc 88ccf943e44f9e9d615a6019459625148830039f8dNaseer Ahmed// --------------------------------------------------------------------------- 891589dee5c27293d278d3e549af8a4bda27e080f8Naseer Ahmed#endif //HWC_EXTERNAL_DISPLAY_H 90