191094Sdes// Copyright 2018 The Fuchsia Authors. All rights reserved. 291094Sdes// Use of this source code is governed by a BSD-style license that can be 391094Sdes// found in the LICENSE file. 491094Sdes 591094Sdes#pragma once 691094Sdes 791094Sdes#include <zircon/compiler.h> 891094Sdes#include <ddk/protocol/platform-device.h> 991094Sdes#include <fbl/unique_ptr.h> 1091094Sdes#include <hwreg/mmio.h> 1191094Sdes#include "vpu-regs.h" 1291094Sdes#include "common.h" 1391094Sdes 1491094Sdes 1591094Sdesnamespace astro_display { 1691094Sdes 1791094Sdesclass Vpu { 1891094Sdespublic: 1991094Sdes Vpu() {} 2091094Sdes ~Vpu() { 2191094Sdes io_buffer_release(&mmio_vpu_); 2291094Sdes io_buffer_release(&mmio_hhi_); 2391094Sdes } 2491094Sdes zx_status_t Init(zx_device_t* parent); 2591094Sdes // This function powers on VPU related blocks. The function contains undocumented 2691094Sdes // register and/or power-on sequences. 2791094Sdes void PowerOn(); 2891094Sdes // This function powers off VPU related blocks. The function contains undocumented 2991094Sdes // register and/or power-off sequences. 3091094Sdes void PowerOff(); 3191094Sdes // This function sets up default video post processing unit. It contains undocumented 3291094Sdes // registers and/or initialization sequences 3391094Sdes void VppInit(); 3491094Sdesprivate: 3591094Sdes // This function configures the VPU-related clocks. It contains undocumented registers 3691094Sdes // and/or clock initialization sequences 3791094Sdes void ConfigureClock(); 3891094Sdes 3991100Sdes io_buffer_t mmio_vpu_; 4091100Sdes io_buffer_t mmio_hhi_; 4191100Sdes io_buffer_t mmio_aobus_; 4291100Sdes io_buffer_t mmio_cbus_; 4391100Sdes platform_device_protocol_t pdev_ = {}; 4491100Sdes fbl::unique_ptr<hwreg::RegisterIo> vpu_regs_; 4591100Sdes fbl::unique_ptr<hwreg::RegisterIo> hhi_regs_; 4691094Sdes fbl::unique_ptr<hwreg::RegisterIo> aobus_regs_; 4791094Sdes fbl::unique_ptr<hwreg::RegisterIo> cbus_regs_; 4891094Sdes 4991094Sdes bool initialized_ = false; 5091094Sdes 5191094Sdes}; 5291094Sdes} // namespace astro_display 5391094Sdes