1 /* 2 * Copyright (c) 2013 - 2016 The Linux Foundation. All rights reserved. 3 * 4 * Redistribution and use in source and binary forms, with or without 5 * modification, are permitted provided that the following conditions are 6 * met: 7 * * Redistributions of source code must retain the above copyright 8 * notice, this list of conditions and the following disclaimer. 9 * * Redistributions in binary form must reproduce the above 10 * copyright notice, this list of conditions and the following 11 * disclaimer in the documentation and/or other materials provided 12 * with the distribution. 13 * * Neither the name of The Linux Foundation. nor the names of its 14 * contributors may be used to endorse or promote products derived 15 * from this software without specific prior written permission. 16 * 17 * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED 18 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 19 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT 20 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS 21 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 22 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 23 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR 24 * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 25 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE 26 * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN 27 * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 28 */ 29 30 #ifndef _DISPLAY_CONFIG_H 31 #define _DISPLAY_CONFIG_H 32 33 #include <gralloc_priv.h> 34 #include <qdMetaData.h> 35 #include <hardware/hwcomposer.h> 36 37 // This header is for clients to use to set/get global display configuration. 38 // Only primary and external displays are supported here. 39 40 namespace qdutils { 41 42 43 /* TODO: Have all the common enums that need be exposed to clients and which 44 * are also needed in hwc defined here. Remove such definitions we have in 45 * hwc_utils.h 46 */ 47 48 // Use this enum to specify the dpy parameters where needed 49 enum { 50 DISPLAY_PRIMARY = HWC_DISPLAY_PRIMARY, 51 DISPLAY_EXTERNAL = HWC_DISPLAY_EXTERNAL, 52 #ifdef QTI_BSP 53 DISPLAY_TERTIARY = HWC_DISPLAY_TERTIARY, 54 #endif 55 DISPLAY_VIRTUAL = HWC_DISPLAY_VIRTUAL, 56 }; 57 58 // External Display states - used in setSecondaryDisplayStatus() 59 // To be consistent with the same defined in hwc_utils.h 60 enum { 61 EXTERNAL_OFFLINE = 0, 62 EXTERNAL_ONLINE, 63 EXTERNAL_PAUSE, 64 EXTERNAL_RESUME, 65 }; 66 67 enum { 68 DISABLE_METADATA_DYN_REFRESH_RATE = 0, 69 ENABLE_METADATA_DYN_REFRESH_RATE, 70 SET_BINDER_DYN_REFRESH_RATE, 71 }; 72 73 enum { 74 DEFAULT_MODE = 0, 75 VIDEO_MODE, 76 COMMAND_MODE, 77 }; 78 79 // Display Attributes that are available to clients of this library 80 // Not to be confused with a similar struct in hwc_utils (in the hwc namespace) 81 typedef struct DisplayAttributes { 82 uint32_t vsync_period; //nanoseconds 83 uint32_t xres; 84 uint32_t yres; 85 float xdpi; 86 float ydpi; 87 char panel_type; 88 bool is_yuv; DisplayAttributesDisplayAttributes89 DisplayAttributes() : vsync_period(0), xres(0), yres(0), xdpi(0.0f), 90 ydpi(0.0f), panel_type(0), is_yuv(false) {} 91 } DisplayAttributes_t; 92 93 //============================================================================= 94 // The functions below run in the client process and wherever necessary 95 // do a binder call to HWC to get/set data. 96 97 // Check if external display is connected. Useful to check before making 98 // calls for external displays 99 // Returns 1 if connected, 0 if disconnected, negative values on errors 100 int isExternalConnected(void); 101 102 // Get display vsync period which is in nanoseconds 103 // i.e vsync_period = 1000000000l / fps 104 // Returns 0 on success, negative values on errors 105 int getDisplayAttributes(int dpy, DisplayAttributes_t& dpyattr); 106 107 // Set HSIC data on a given display ID 108 // Returns 0 on success, negative values on errors 109 int setHSIC(int dpy, const HSICData_t& hsic_data); 110 111 // get the active visible region for the display 112 // Returns 0 on success, negative values on errors 113 int getDisplayVisibleRegion(int dpy, hwc_rect_t &rect); 114 115 // set the view frame information in hwc context from surfaceflinger 116 int setViewFrame(int dpy, int l, int t, int r, int b); 117 118 // Set the secondary display status(pause/resume/offline etc.,) 119 int setSecondaryDisplayStatus(int dpy, uint32_t status); 120 121 // Enable/Disable/Set refresh rate dynamically 122 int configureDynRefreshRate(uint32_t op, uint32_t refreshRate); 123 124 // Returns the number of configs supported for the display on success. 125 // Returns -1 on error. 126 // Only primary display supported for now, value of dpy ignored. 127 int getConfigCount(int dpy); 128 129 // Returns the index of config that is current set for the display on success. 130 // Returns -1 on error. 131 // Only primary display supported for now, value of dpy ignored. 132 int getActiveConfig(int dpy); 133 134 // Sets the config for the display on success and returns 0. 135 // Returns -1 on error. 136 // Only primary display supported for now, value of dpy ignored 137 int setActiveConfig(int configIndex, int dpy); 138 139 // Returns the attributes for the specified config for the display on success. 140 // Returns xres and yres as 0 on error. 141 // Only primary display supported for now, value of dpy ignored 142 DisplayAttributes getDisplayAttributes(int configIndex, int dpy); 143 144 // Set the primary display mode to command or video mode 145 int setDisplayMode(int mode); 146 147 // Sets the panel brightness of the primary display 148 int setPanelBrightness(int level); 149 150 // Retrieves the current panel brightness value 151 int getPanelBrightness(); 152 153 }; //namespace 154 155 #endif 156