1// Copyright 2017 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// Thin layer that writes/reads to audio registers in the EE_AUDIO block and
6// the PDM block.
7
8#pragma once
9
10__BEGIN_CDECLS;
11
12#include <ddk/device.h>
13#include <ddk/mmio-buffer.h>
14#include <ddk/protocol/platform-defs.h>
15#include <ddk/protocol/platform-device.h>
16
17#include "a113-audio-regs.h"
18
19typedef struct a113_audio_device {
20    platform_device_protocol_t pdev;
21    mmio_buffer_t ee_audio_mmio;
22    mmio_buffer_t pdm_mmio;
23
24    zx_handle_t pdm_irq;
25    zx_handle_t bti;
26} a113_audio_device_t;
27
28zx_status_t a113_audio_device_init(a113_audio_device_t* audio_device,
29                                   zx_device_t* parent);
30
31uint32_t a113_ee_audio_read(a113_audio_device_t* audio_device, uint32_t reg);
32void a113_ee_audio_write(a113_audio_device_t* audio_device, uint32_t reg, uint32_t value);
33void a113_ee_audio_update_bits(a113_audio_device_t* audio_device, uint32_t reg,
34                               uint32_t mask, uint32_t value);
35
36uint32_t a113_pdm_read(a113_audio_device_t* audio_device, uint32_t reg);
37void a113_pdm_write(a113_audio_device_t* audio_device, uint32_t reg, uint32_t val);
38void a113_pdm_update_bits(a113_audio_device_t* audio_device, uint32_t reg,
39                          uint32_t mask, uint32_t val);
40__END_CDECLS;
41