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