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 #pragma once
6 
7 #include <zircon/types.h>
8 
9 #include "a113-audio-device.h"
10 
11 __BEGIN_CDECLS;
12 
13 // DDR types. From A113G datasheet.
14 enum ddr_types {
15     LJ_8BITS,
16     LJ_16BITS,
17     RJ_16BITS,
18     LJ_32BITS,
19     RJ_32BITS,
20 };
21 
22 // TODDR sources. From A113G datasheet.
23 enum toddr_src {
24     TDMIN_A,
25     TDMIN_B,
26     TDMIN_C,
27     SPDIFIN,
28     PDMIN,
29     NONE,
30     TDMIN_LB,
31     LOOPBACK,
32 };
33 
34 void a113_audio_register_toddr(a113_audio_device_t* audio_device);
35 void a113_audio_unregister_toddr(a113_audio_device_t* audio_device);
36 
37 void a113_toddr_set_buf(a113_audio_device_t* audio_device, uint32_t start,
38                         uint32_t end);
39 void a113_toddr_set_intrpt(a113_audio_device_t* audio_device, uint32_t intrpt);
40 void a113_toddr_enable(a113_audio_device_t* audio_device, bool enable);
41 void a113_toddr_select_src(a113_audio_device_t* audio_device,
42                            enum toddr_src src);
43 void a113_toddr_set_fifos(a113_audio_device_t* audio_device, uint32_t thresh);
44 void a113_toddr_set_format(a113_audio_device_t* audio_device, uint32_t type,
45                            uint32_t msb, uint32_t lsb);
46 
47 uint32_t a113_toddr_get_position(a113_audio_device_t* audio_device);
48 uint32_t a113_toddr_get_int_status(a113_audio_device_t* audio_device);
49 
50 void a113_toddr_clear_interrupt(a113_audio_device_t* audio_device,
51                                 uint32_t interrupt_mask);
52 
53 __END_CDECLS;
54