14a1efd0680d2e9b61739e1eaeffd89174d6d2605Alain Vongsouvanh/* 24a1efd0680d2e9b61739e1eaeffd89174d6d2605Alain Vongsouvanh* Copyright (c) 2014 - 2017, The Linux Foundation. All rights reserved. 34a1efd0680d2e9b61739e1eaeffd89174d6d2605Alain Vongsouvanh* 44a1efd0680d2e9b61739e1eaeffd89174d6d2605Alain Vongsouvanh* Redistribution and use in source and binary forms, with or without modification, are permitted 54a1efd0680d2e9b61739e1eaeffd89174d6d2605Alain Vongsouvanh* provided that the following conditions are met: 64a1efd0680d2e9b61739e1eaeffd89174d6d2605Alain Vongsouvanh* * Redistributions of source code must retain the above copyright notice, this list of 74a1efd0680d2e9b61739e1eaeffd89174d6d2605Alain Vongsouvanh* conditions and the following disclaimer. 84a1efd0680d2e9b61739e1eaeffd89174d6d2605Alain Vongsouvanh* * Redistributions in binary form must reproduce the above copyright notice, this list of 94a1efd0680d2e9b61739e1eaeffd89174d6d2605Alain Vongsouvanh* conditions and the following disclaimer in the documentation and/or other materials provided 104a1efd0680d2e9b61739e1eaeffd89174d6d2605Alain Vongsouvanh* with the distribution. 114a1efd0680d2e9b61739e1eaeffd89174d6d2605Alain Vongsouvanh* * Neither the name of The Linux Foundation nor the names of its contributors may be used to 124a1efd0680d2e9b61739e1eaeffd89174d6d2605Alain Vongsouvanh* endorse or promote products derived from this software without specific prior written 134a1efd0680d2e9b61739e1eaeffd89174d6d2605Alain Vongsouvanh* permission. 144a1efd0680d2e9b61739e1eaeffd89174d6d2605Alain Vongsouvanh* 154a1efd0680d2e9b61739e1eaeffd89174d6d2605Alain Vongsouvanh* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 164a1efd0680d2e9b61739e1eaeffd89174d6d2605Alain Vongsouvanh* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 174a1efd0680d2e9b61739e1eaeffd89174d6d2605Alain Vongsouvanh* NON-INFRINGEMENT ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE 184a1efd0680d2e9b61739e1eaeffd89174d6d2605Alain Vongsouvanh* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, 194a1efd0680d2e9b61739e1eaeffd89174d6d2605Alain Vongsouvanh* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; 204a1efd0680d2e9b61739e1eaeffd89174d6d2605Alain Vongsouvanh* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 214a1efd0680d2e9b61739e1eaeffd89174d6d2605Alain Vongsouvanh* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 224a1efd0680d2e9b61739e1eaeffd89174d6d2605Alain Vongsouvanh* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 234a1efd0680d2e9b61739e1eaeffd89174d6d2605Alain Vongsouvanh*/ 244a1efd0680d2e9b61739e1eaeffd89174d6d2605Alain Vongsouvanh 254a1efd0680d2e9b61739e1eaeffd89174d6d2605Alain Vongsouvanh#ifndef __DISPLAY_PRIMARY_H__ 264a1efd0680d2e9b61739e1eaeffd89174d6d2605Alain Vongsouvanh#define __DISPLAY_PRIMARY_H__ 274a1efd0680d2e9b61739e1eaeffd89174d6d2605Alain Vongsouvanh 284a1efd0680d2e9b61739e1eaeffd89174d6d2605Alain Vongsouvanh#include <vector> 294a1efd0680d2e9b61739e1eaeffd89174d6d2605Alain Vongsouvanh 304a1efd0680d2e9b61739e1eaeffd89174d6d2605Alain Vongsouvanh#include "display_base.h" 314a1efd0680d2e9b61739e1eaeffd89174d6d2605Alain Vongsouvanh#include "dump_impl.h" 324a1efd0680d2e9b61739e1eaeffd89174d6d2605Alain Vongsouvanh#include "hw_events_interface.h" 334a1efd0680d2e9b61739e1eaeffd89174d6d2605Alain Vongsouvanh 344a1efd0680d2e9b61739e1eaeffd89174d6d2605Alain Vongsouvanhnamespace sdm { 354a1efd0680d2e9b61739e1eaeffd89174d6d2605Alain Vongsouvanh 364a1efd0680d2e9b61739e1eaeffd89174d6d2605Alain Vongsouvanhclass HWPrimaryInterface; 374a1efd0680d2e9b61739e1eaeffd89174d6d2605Alain Vongsouvanh 384a1efd0680d2e9b61739e1eaeffd89174d6d2605Alain Vongsouvanhclass DisplayPrimary : public DisplayBase, HWEventHandler { 394a1efd0680d2e9b61739e1eaeffd89174d6d2605Alain Vongsouvanh public: 404a1efd0680d2e9b61739e1eaeffd89174d6d2605Alain Vongsouvanh DisplayPrimary(DisplayEventHandler *event_handler, HWInfoInterface *hw_info_intf, 414a1efd0680d2e9b61739e1eaeffd89174d6d2605Alain Vongsouvanh BufferSyncHandler *buffer_sync_handler, BufferAllocator *buffer_allocator, 424a1efd0680d2e9b61739e1eaeffd89174d6d2605Alain Vongsouvanh CompManager *comp_manager); 434a1efd0680d2e9b61739e1eaeffd89174d6d2605Alain Vongsouvanh virtual DisplayError Init(); 444a1efd0680d2e9b61739e1eaeffd89174d6d2605Alain Vongsouvanh virtual DisplayError Prepare(LayerStack *layer_stack); 454a1efd0680d2e9b61739e1eaeffd89174d6d2605Alain Vongsouvanh virtual DisplayError Commit(LayerStack *layer_stack); 464a1efd0680d2e9b61739e1eaeffd89174d6d2605Alain Vongsouvanh virtual DisplayError ControlPartialUpdate(bool enable, uint32_t *pending); 474a1efd0680d2e9b61739e1eaeffd89174d6d2605Alain Vongsouvanh virtual DisplayError DisablePartialUpdateOneFrame(); 484a1efd0680d2e9b61739e1eaeffd89174d6d2605Alain Vongsouvanh virtual DisplayError SetDisplayState(DisplayState state); 494a1efd0680d2e9b61739e1eaeffd89174d6d2605Alain Vongsouvanh virtual void SetIdleTimeoutMs(uint32_t active_ms); 504a1efd0680d2e9b61739e1eaeffd89174d6d2605Alain Vongsouvanh virtual DisplayError SetDisplayMode(uint32_t mode); 514a1efd0680d2e9b61739e1eaeffd89174d6d2605Alain Vongsouvanh virtual DisplayError GetRefreshRateRange(uint32_t *min_refresh_rate, uint32_t *max_refresh_rate); 524a1efd0680d2e9b61739e1eaeffd89174d6d2605Alain Vongsouvanh virtual DisplayError SetRefreshRate(uint32_t refresh_rate); 534a1efd0680d2e9b61739e1eaeffd89174d6d2605Alain Vongsouvanh virtual DisplayError SetPanelBrightness(int level); 544a1efd0680d2e9b61739e1eaeffd89174d6d2605Alain Vongsouvanh virtual DisplayError GetPanelBrightness(int *level); 554a1efd0680d2e9b61739e1eaeffd89174d6d2605Alain Vongsouvanh virtual DisplayError CachePanelBrightness(int level); 564a1efd0680d2e9b61739e1eaeffd89174d6d2605Alain Vongsouvanh 574a1efd0680d2e9b61739e1eaeffd89174d6d2605Alain Vongsouvanh // Implement the HWEventHandlers 584a1efd0680d2e9b61739e1eaeffd89174d6d2605Alain Vongsouvanh virtual DisplayError VSync(int64_t timestamp); 594a1efd0680d2e9b61739e1eaeffd89174d6d2605Alain Vongsouvanh virtual DisplayError Blank(bool blank) { return kErrorNone; } 604a1efd0680d2e9b61739e1eaeffd89174d6d2605Alain Vongsouvanh virtual void IdleTimeout(); 614a1efd0680d2e9b61739e1eaeffd89174d6d2605Alain Vongsouvanh virtual void ThermalEvent(int64_t thermal_level); 624a1efd0680d2e9b61739e1eaeffd89174d6d2605Alain Vongsouvanh virtual void IdlePowerCollapse(); 634a1efd0680d2e9b61739e1eaeffd89174d6d2605Alain Vongsouvanh 644a1efd0680d2e9b61739e1eaeffd89174d6d2605Alain Vongsouvanh private: 654a1efd0680d2e9b61739e1eaeffd89174d6d2605Alain Vongsouvanh bool NeedsAVREnable(); 664a1efd0680d2e9b61739e1eaeffd89174d6d2605Alain Vongsouvanh 674a1efd0680d2e9b61739e1eaeffd89174d6d2605Alain Vongsouvanh std::vector<HWEvent> event_list_ = { HWEvent::VSYNC, HWEvent::EXIT, HWEvent::IDLE_NOTIFY, 684a1efd0680d2e9b61739e1eaeffd89174d6d2605Alain Vongsouvanh HWEvent::SHOW_BLANK_EVENT, HWEvent::THERMAL_LEVEL, HWEvent::IDLE_POWER_COLLAPSE }; 694a1efd0680d2e9b61739e1eaeffd89174d6d2605Alain Vongsouvanh bool avr_prop_disabled_ = false; 704a1efd0680d2e9b61739e1eaeffd89174d6d2605Alain Vongsouvanh bool switch_to_cmd_ = false; 714a1efd0680d2e9b61739e1eaeffd89174d6d2605Alain Vongsouvanh}; 724a1efd0680d2e9b61739e1eaeffd89174d6d2605Alain Vongsouvanh 734a1efd0680d2e9b61739e1eaeffd89174d6d2605Alain Vongsouvanh} // namespace sdm 744a1efd0680d2e9b61739e1eaeffd89174d6d2605Alain Vongsouvanh 754a1efd0680d2e9b61739e1eaeffd89174d6d2605Alain Vongsouvanh#endif // __DISPLAY_PRIMARY_H__ 764a1efd0680d2e9b61739e1eaeffd89174d6d2605Alain Vongsouvanh 77