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