// Copyright 2017 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.

// Thin layer that writes/reads to audio registers in the EE_AUDIO block and
// the PDM block.

#pragma once

__BEGIN_CDECLS

#include <ddk/device.h>
#include <ddk/mmio-buffer.h>
#include <ddk/platform-defs.h>
#include <ddk/protocol/platform/device.h>

#include "a113-audio-regs.h"

typedef struct a113_audio_device {
    pdev_protocol_t pdev;
    mmio_buffer_t ee_audio_mmio;
    mmio_buffer_t pdm_mmio;

    zx_handle_t pdm_irq;
    zx_handle_t bti;
} a113_audio_device_t;

zx_status_t a113_audio_device_init(a113_audio_device_t* audio_device,
                                   zx_device_t* parent);

uint32_t a113_ee_audio_read(a113_audio_device_t* audio_device, uint32_t reg);
void a113_ee_audio_write(a113_audio_device_t* audio_device, uint32_t reg, uint32_t value);
void a113_ee_audio_update_bits(a113_audio_device_t* audio_device, uint32_t reg,
                               uint32_t mask, uint32_t value);

uint32_t a113_pdm_read(a113_audio_device_t* audio_device, uint32_t reg);
void a113_pdm_write(a113_audio_device_t* audio_device, uint32_t reg, uint32_t val);
void a113_pdm_update_bits(a113_audio_device_t* audio_device, uint32_t reg,
                          uint32_t mask, uint32_t val);
__END_CDECLS
