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 12 struct 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 25 namespace audio { 26 namespace vim2 { 27 28 class 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 pdev_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 57 typedef struct vim2_audio vim2_audio_t; 58 59 zx_status_t vim2_audio_create(const pdev_protocol_t* pdev, 60 vim2_audio_t **out_audio); 61 void vim2_audio_shutdown(vim2_audio_t** inout_audio); 62 63 void vim2_audio_on_display_added(const struct vim2_display* display, uint64_t display_id); 64 void vim2_audio_on_display_removed(const struct vim2_display* display, uint64_t display_id); 65 __END_CDECLS 66