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