1/*
2 * Copyright 2004-2015 Haiku, Inc. All rights reserved.
3 * Distributed under the terms of the MIT License.
4 *
5 * Authors:
6 *		Jérôme Duval, jerome.duval@free.fr
7 *		Marcus Overhagen, marcus@overhagen.de
8 *		Jérôme Lévêque, leveque.jerome@gmail.com
9 */
10
11
12#ifndef _IO_H_
13#define _IO_H_
14
15#include "ice1712.h"
16
17#include <SupportDefs.h>
18
19//Address are [PCI_10] + xx
20uint8 read_ccs_uint8(ice1712 *ice, int8 regno);
21uint16 read_ccs_uint16(ice1712 *ice, int8 regno);
22uint32 read_ccs_uint32(ice1712 *ice, int8 regno);
23void write_ccs_uint8(ice1712 *ice, int8 regno, uint8 value);
24void write_ccs_uint16(ice1712 *ice, int8 regno, uint16 value);
25void write_ccs_uint32(ice1712 *ice, int8 regno, uint32 value);
26
27uint8 read_cci_uint8(ice1712 *ice, int8 index);
28void write_cci_uint8(ice1712 *ice, int8 index, uint8 value);
29
30//Address are [PCI_14] + xx
31uint8 read_ddma_uint8(ice1712 *ice, int8 regno);
32uint16 read_ddma_uint16(ice1712 *ice, int8 regno);
33uint32 read_ddma_uint32(ice1712 *ice, int8 regno);
34
35void write_ddma_uint8(ice1712 *ice, int8 regno, uint8 value);
36void write_ddma_uint16(ice1712 *ice, int8 regno, uint16 value);
37void write_ddma_uint32(ice1712 *ice, int8 regno, uint32 value);
38
39//Address are [PCI_18] + x
40uint8 read_ds_uint8(ice1712 *ice, int8 regno);
41uint16 read_ds_uint16(ice1712 *ice, int8 regno);
42uint32 read_ds_uint32(ice1712 *ice, int8 regno);
43
44void write_ds_uint8(ice1712 *ice, int8 regno, uint8 value);
45void write_ds_uint16(ice1712 *ice, int8 regno, uint16 value);
46void write_ds_uint32(ice1712 *ice, int8 regno, uint32 value);
47
48typedef enum {
49	DS8_REGISTER_BUFFER_0_BASE_ADDRESS = 0,
50	DS8_REGISTER_BUFFER_0_BASE_COUNT,
51	DS8_REGISTER_BUFFER_1_BASE_ADDRESS,
52	DS8_REGISTER_BUFFER_1_BASE_COUNT,
53	DS8_REGISTER_CONTROL_AND_STATUS,
54	DS8_REGISTER_SAMPLING_RATE,
55	DS8_REGISTER_LEFT_RIGHT_VOLUME,
56} ds8_register;
57
58uint32 read_ds_channel_data(ice1712 *ice, uint8 channel, ds8_register index);
59void write_ds_channel_data(ice1712 *ice, uint8 channel, ds8_register index,
60	uint32 data);
61
62//Address are [PCI_1C] + xx
63uint8 read_mt_uint8(ice1712 *ice, int8 regno);
64uint16 read_mt_uint16(ice1712 *ice, int8 regno);
65uint32 read_mt_uint32(ice1712 *ice, int8 regno);
66
67void write_mt_uint8(ice1712 *ice, int8 regno, uint8 value);
68void write_mt_uint16(ice1712 *ice, int8 regno, uint16 value);
69void write_mt_uint32(ice1712 *ice, int8 regno, uint32 value);
70
71int16 read_i2c(ice1712 *ice, uint8 dev_addr, uint8 byte_addr);
72//return -1 if error else return an uint8
73
74int16 write_i2c(ice1712 *ice, uint8 dev_addr, uint8 byte_addr, uint8 value);
75//return -1 if error else return 0
76
77//------------------------------------------------------
78
79int16 read_eeprom(ice1712 *ice, uint8 eeprom[32]);
80
81//------------------------------------------------------
82
83void codec_write(ice1712 *ice, uint8 reg_addr, uint8 data);
84void spdif_write(ice1712 *ice, uint8 reg_addr, uint8 data);
85void codec_write_mult(ice1712 *ice, uint8 reg_addr, uint8 datas[], uint8 size);
86void spdif_write_mult(ice1712 *ice, uint8 reg_addr, uint8 datas[], uint8 size);
87
88uint8 codec_read(ice1712 *ice, uint8 reg_addr);
89uint8 spdif_read(ice1712 *ice, uint8 reg_addr);
90uint8 codec_read_mult(ice1712 *ice, uint8 reg_addr, uint8 datas[], uint8 size);
91uint8 spdif_read_mult(ice1712 *ice, uint8 reg_addr, uint8 datas[], uint8 size);
92
93//------------------------------------------------------
94
95uint8 read_gpio(ice1712 *ice);
96//return -1 if error else return an uint8
97
98void write_gpio(ice1712 *ice, uint8 value);
99
100#endif
101