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