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 <zircon/types.h> 9#include <ddk/protocol/platform-device.h> 10 11__BEGIN_CDECLS 12struct vim2_display; // fwd decl 13__END_CDECLS 14 15#ifdef __cplusplus 16 17#include <fbl/macros.h> 18#include <lib/fzl/pinned-vmo.h> 19#include <lib/zx/bti.h> 20#include <lib/zx/vmo.h> 21 22#include "vim-audio-utils.h" 23#include "vim-spdif-audio-stream.h" 24 25namespace audio { 26namespace vim2 { 27 28class Vim2Audio { 29 public: 30 Vim2Audio() = default; 31 ~Vim2Audio(); 32 DISALLOW_COPY_ASSIGN_AND_MOVE(Vim2Audio); 33 34 // Ddk Hooks 35 static zx_status_t DriverBind(zx_device_t* parent); 36 void DdkUnbind(); 37 void DdkRelease(); 38 39 // Display driver hooks 40 zx_status_t Init(const platform_device_protocol_t* pdev); 41 void OnDisplayAdded(const struct vim2_display* display, uint64_t display_id); 42 void OnDisplayRemoved(uint64_t display_id); 43 44 private: 45 zx::bti audio_bti_; 46 fbl::RefPtr<Registers> regs_; 47 fbl::RefPtr<RefCountedVmo> spdif_rb_vmo_; 48 fbl::RefPtr<Vim2SpdifAudioStream> spdif_stream_; 49}; 50 51} // namespace vim2 52} // namespace audio 53 54#endif // __cplusplus 55 56__BEGIN_CDECLS 57typedef struct vim2_audio vim2_audio_t; 58 59zx_status_t vim2_audio_create(const platform_device_protocol_t* pdev, 60 vim2_audio_t **out_audio); 61void vim2_audio_shutdown(vim2_audio_t** inout_audio); 62 63void vim2_audio_on_display_added(const struct vim2_display* display, uint64_t display_id); 64void vim2_audio_on_display_removed(const struct vim2_display* display, uint64_t display_id); 65__END_CDECLS 66