1// Copyright 2018 The Fuchsia Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#pragma once 6 7#include <zircon/compiler.h> 8#include <ddk/protocol/platform-device.h> 9#include <fbl/unique_ptr.h> 10#include <hwreg/mmio.h> 11#include "vpu-regs.h" 12#include "common.h" 13 14 15namespace astro_display { 16 17class Vpu { 18public: 19 Vpu() {} 20 ~Vpu() { 21 io_buffer_release(&mmio_vpu_); 22 io_buffer_release(&mmio_hhi_); 23 } 24 zx_status_t Init(zx_device_t* parent); 25 // This function powers on VPU related blocks. The function contains undocumented 26 // register and/or power-on sequences. 27 void PowerOn(); 28 // This function powers off VPU related blocks. The function contains undocumented 29 // register and/or power-off sequences. 30 void PowerOff(); 31 // This function sets up default video post processing unit. It contains undocumented 32 // registers and/or initialization sequences 33 void VppInit(); 34private: 35 // This function configures the VPU-related clocks. It contains undocumented registers 36 // and/or clock initialization sequences 37 void ConfigureClock(); 38 39 io_buffer_t mmio_vpu_; 40 io_buffer_t mmio_hhi_; 41 io_buffer_t mmio_aobus_; 42 io_buffer_t mmio_cbus_; 43 platform_device_protocol_t pdev_ = {}; 44 fbl::unique_ptr<hwreg::RegisterIo> vpu_regs_; 45 fbl::unique_ptr<hwreg::RegisterIo> hhi_regs_; 46 fbl::unique_ptr<hwreg::RegisterIo> aobus_regs_; 47 fbl::unique_ptr<hwreg::RegisterIo> cbus_regs_; 48 49 bool initialized_ = false; 50 51}; 52} // namespace astro_display 53