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