blob: 15819fe6ea6a3631faa565f68eb16f84912ce045 [file] [log] [blame]
// Copyright 2018 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#pragma once
#include <zircon/compiler.h>
#include <zircon/types.h>
#include <ddk/protocol/platform/device.h>
__BEGIN_CDECLS
struct vim2_display; // fwd decl
__END_CDECLS
#ifdef __cplusplus
#include <fbl/macros.h>
#include <lib/fzl/pinned-vmo.h>
#include <lib/zx/bti.h>
#include <lib/zx/vmo.h>
#include "vim-audio-utils.h"
#include "vim-spdif-audio-stream.h"
namespace audio {
namespace vim2 {
class Vim2Audio {
public:
Vim2Audio() = default;
~Vim2Audio();
DISALLOW_COPY_ASSIGN_AND_MOVE(Vim2Audio);
// Ddk Hooks
static zx_status_t DriverBind(zx_device_t* parent);
void DdkUnbind();
void DdkRelease();
// Display driver hooks
zx_status_t Init(const pdev_protocol_t* pdev);
void OnDisplayAdded(const struct vim2_display* display, uint64_t display_id);
void OnDisplayRemoved(uint64_t display_id);
private:
zx::bti audio_bti_;
fbl::RefPtr<Registers> regs_;
fbl::RefPtr<RefCountedVmo> spdif_rb_vmo_;
fbl::RefPtr<Vim2SpdifAudioStream> spdif_stream_;
};
} // namespace vim2
} // namespace audio
#endif // __cplusplus
__BEGIN_CDECLS
typedef struct vim2_audio vim2_audio_t;
zx_status_t vim2_audio_create(const pdev_protocol_t* pdev,
vim2_audio_t **out_audio);
void vim2_audio_shutdown(vim2_audio_t** inout_audio);
void vim2_audio_on_display_added(const struct vim2_display* display, uint64_t display_id);
void vim2_audio_on_display_removed(const struct vim2_display* display, uint64_t display_id);
__END_CDECLS