1*8acfcfc3SJia-Ju Bai #ifndef _SDR_H 2*8acfcfc3SJia-Ju Bai #define _SDR_H 3*8acfcfc3SJia-Ju Bai /* ======= General Parameter ======= */ 4*8acfcfc3SJia-Ju Bai /* Global configure */ 5*8acfcfc3SJia-Ju Bai #define DMA_LENGTH_BY_FRAME 6*8acfcfc3SJia-Ju Bai #define DMA_BASE_IOMAP 7*8acfcfc3SJia-Ju Bai #define MIXER_AC97 8*8acfcfc3SJia-Ju Bai 9*8acfcfc3SJia-Ju Bai #include <minix/audio_fw.h> 10*8acfcfc3SJia-Ju Bai #include <sys/types.h> 11*8acfcfc3SJia-Ju Bai #include <sys/ioc_sound.h> 12*8acfcfc3SJia-Ju Bai #include <minix/sound.h> 13*8acfcfc3SJia-Ju Bai #include <machine/pci.h> 14*8acfcfc3SJia-Ju Bai #include <sys/mman.h> 15*8acfcfc3SJia-Ju Bai #include "io.h" 16*8acfcfc3SJia-Ju Bai 17*8acfcfc3SJia-Ju Bai /* Subdevice type */ 18*8acfcfc3SJia-Ju Bai #define DAC 0 19*8acfcfc3SJia-Ju Bai #define ADC 1 20*8acfcfc3SJia-Ju Bai #define MIX 2 21*8acfcfc3SJia-Ju Bai 22*8acfcfc3SJia-Ju Bai /* PCI number and driver name */ 23*8acfcfc3SJia-Ju Bai #define VENDOR_ID 0x1013 24*8acfcfc3SJia-Ju Bai #define DEVICE_ID 0x6005 25*8acfcfc3SJia-Ju Bai #define DRIVER_NAME "CS4281" 26*8acfcfc3SJia-Ju Bai 27*8acfcfc3SJia-Ju Bai /* Volume option */ 28*8acfcfc3SJia-Ju Bai #define GET_VOL 0 29*8acfcfc3SJia-Ju Bai #define SET_VOL 1 30*8acfcfc3SJia-Ju Bai 31*8acfcfc3SJia-Ju Bai /* Interrupt control */ 32*8acfcfc3SJia-Ju Bai #define INTR_ENABLE 1 33*8acfcfc3SJia-Ju Bai #define INTR_DISABLE 0 34*8acfcfc3SJia-Ju Bai 35*8acfcfc3SJia-Ju Bai /* Interrupt status */ 36*8acfcfc3SJia-Ju Bai #define INTR_STS_DAC 0x0100 37*8acfcfc3SJia-Ju Bai #define INTR_STS_ADC 0x0200 38*8acfcfc3SJia-Ju Bai 39*8acfcfc3SJia-Ju Bai /* ======= Self-defined Parameter ======= */ 40*8acfcfc3SJia-Ju Bai #define REG_INTR_STS 0x0000 41*8acfcfc3SJia-Ju Bai #define REG_INTR_CTRL 0x0008 42*8acfcfc3SJia-Ju Bai #define REG_INTR_MASK 0x000c 43*8acfcfc3SJia-Ju Bai 44*8acfcfc3SJia-Ju Bai #define REG_CONF_WRITE 0x03e0 45*8acfcfc3SJia-Ju Bai #define REG_POWER_EXT 0x03e4 46*8acfcfc3SJia-Ju Bai #define REG_SPOWER_CTRL 0x03ec 47*8acfcfc3SJia-Ju Bai #define REG_CONF_LOAD 0x03f0 48*8acfcfc3SJia-Ju Bai #define REG_CLK_CTRL 0x0400 49*8acfcfc3SJia-Ju Bai #define REG_MASTER_CTRL 0x0420 50*8acfcfc3SJia-Ju Bai #define REG_CODEC_CTRL 0x0460 51*8acfcfc3SJia-Ju Bai #define REG_CODEC_STATUS 0x0464 52*8acfcfc3SJia-Ju Bai #define REG_CODEC_OSV 0x0468 53*8acfcfc3SJia-Ju Bai #define REG_CODEC_ADDR 0x046c 54*8acfcfc3SJia-Ju Bai #define REG_CODEC_DATA 0x0470 55*8acfcfc3SJia-Ju Bai #define REG_CODEC_SDA 0x047c 56*8acfcfc3SJia-Ju Bai #define REG_SOUND_POWER 0x0740 57*8acfcfc3SJia-Ju Bai #define REG_DAC_SAMPLE_RATE 0x0744 58*8acfcfc3SJia-Ju Bai #define REG_ADC_SAMPLE_RATE 0x0748 59*8acfcfc3SJia-Ju Bai #define REG_SRC_SLOT 0x075c 60*8acfcfc3SJia-Ju Bai #define REG_PCM_LVOL 0x0760 61*8acfcfc3SJia-Ju Bai #define REG_PCM_RVOL 0x0764 62*8acfcfc3SJia-Ju Bai 63*8acfcfc3SJia-Ju Bai #define REG_DAC_HDSR 0x00f0 64*8acfcfc3SJia-Ju Bai #define REG_DAC_DCC 0x0114 65*8acfcfc3SJia-Ju Bai #define REG_DAC_DMR 0x0150 66*8acfcfc3SJia-Ju Bai #define REG_DAC_DCR 0x0154 67*8acfcfc3SJia-Ju Bai #define REG_DAC_FCR 0x0180 68*8acfcfc3SJia-Ju Bai #define REG_DAC_FSIC 0x0214 69*8acfcfc3SJia-Ju Bai #define REG_ADC_HDSR 0x00f4 70*8acfcfc3SJia-Ju Bai #define REG_ADC_DCC 0x0124 71*8acfcfc3SJia-Ju Bai #define REG_ADC_DMR 0x0158 72*8acfcfc3SJia-Ju Bai #define REG_ADC_DCR 0x015c 73*8acfcfc3SJia-Ju Bai #define REG_ADC_FCR 0x0184 74*8acfcfc3SJia-Ju Bai #define REG_ADC_FSIC 0x0214 75*8acfcfc3SJia-Ju Bai 76*8acfcfc3SJia-Ju Bai #define REG_DAC_DMA_ADDR 0x0118 77*8acfcfc3SJia-Ju Bai #define REG_DAC_DMA_LEN 0x011c 78*8acfcfc3SJia-Ju Bai #define REG_ADC_DMA_ADDR 0x0128 79*8acfcfc3SJia-Ju Bai #define REG_ADC_DMA_LEN 0x012c 80*8acfcfc3SJia-Ju Bai 81*8acfcfc3SJia-Ju Bai #define CODEC_REG_POWER 0x26 82*8acfcfc3SJia-Ju Bai 83*8acfcfc3SJia-Ju Bai #define STS_CODEC_DONE 0x0008 84*8acfcfc3SJia-Ju Bai #define STS_CODEC_VALID 0x0002 85*8acfcfc3SJia-Ju Bai 86*8acfcfc3SJia-Ju Bai #define CMD_POWER_DOWN (1 << 14) 87*8acfcfc3SJia-Ju Bai #define CMD_PORT_TIMING (1 << 16) 88*8acfcfc3SJia-Ju Bai #define CMD_AC97_MODE (1 << 1) 89*8acfcfc3SJia-Ju Bai #define CMD_MASTER_SERIAL (1 << 0) 90*8acfcfc3SJia-Ju Bai #define CMD_INTR_ENABLE 0x03 91*8acfcfc3SJia-Ju Bai #define CMD_INTR_DMA 0x00040000 92*8acfcfc3SJia-Ju Bai #define CMD_INTR_DMA0 0x0100 93*8acfcfc3SJia-Ju Bai #define CMD_INTR_DMA1 0x0200 94*8acfcfc3SJia-Ju Bai #define CMD_DMR_INIT 0x50 95*8acfcfc3SJia-Ju Bai #define CMD_DMR_WRITE 0x08 96*8acfcfc3SJia-Ju Bai #define CMD_DMR_READ 0x04 97*8acfcfc3SJia-Ju Bai #define CMD_DMR_BIT8 (1 << 16) 98*8acfcfc3SJia-Ju Bai #define CMD_DMR_MONO (1 << 17) 99*8acfcfc3SJia-Ju Bai #define CMD_DMR_UNSIGN (1 << 19) 100*8acfcfc3SJia-Ju Bai #define CMD_DMR_BIT32 (1 << 20) 101*8acfcfc3SJia-Ju Bai #define CMD_DMR_SWAP (1 << 22) 102*8acfcfc3SJia-Ju Bai #define CMD_DMR_POLL (1 << 28) 103*8acfcfc3SJia-Ju Bai #define CMD_DMR_DMA (1 << 29) 104*8acfcfc3SJia-Ju Bai #define CMD_DCR_MASK (1 << 0) 105*8acfcfc3SJia-Ju Bai #define CMD_FCR_FEN (1 << 31) 106*8acfcfc3SJia-Ju Bai #define CMD_DAC_FCR_INIT 0x01002000 107*8acfcfc3SJia-Ju Bai #define CMD_ADC_FCR_INIT 0x0b0a2020 108*8acfcfc3SJia-Ju Bai 109*8acfcfc3SJia-Ju Bai static u32_t dcr_data, dmr_data, fcr_data; 110*8acfcfc3SJia-Ju Bai static u32_t g_sample_rate[] = { 111*8acfcfc3SJia-Ju Bai 48000, 44100, 22050, 16000, 11025, 8000 112*8acfcfc3SJia-Ju Bai }; 113*8acfcfc3SJia-Ju Bai 114*8acfcfc3SJia-Ju Bai /* Driver Data Structure */ 115*8acfcfc3SJia-Ju Bai typedef struct aud_sub_dev_conf_t { 116*8acfcfc3SJia-Ju Bai u32_t stereo; 117*8acfcfc3SJia-Ju Bai u16_t sample_rate; 118*8acfcfc3SJia-Ju Bai u32_t nr_of_bits; 119*8acfcfc3SJia-Ju Bai u32_t sign; 120*8acfcfc3SJia-Ju Bai u32_t busy; 121*8acfcfc3SJia-Ju Bai u32_t fragment_size; 122*8acfcfc3SJia-Ju Bai u8_t format; 123*8acfcfc3SJia-Ju Bai } aud_sub_dev_conf_t; 124*8acfcfc3SJia-Ju Bai 125*8acfcfc3SJia-Ju Bai typedef struct DEV_STRUCT { 126*8acfcfc3SJia-Ju Bai char *name; 127*8acfcfc3SJia-Ju Bai u16_t vid; 128*8acfcfc3SJia-Ju Bai u16_t did; 129*8acfcfc3SJia-Ju Bai u32_t devind; 130*8acfcfc3SJia-Ju Bai u32_t base[6]; 131*8acfcfc3SJia-Ju Bai char irq; 132*8acfcfc3SJia-Ju Bai char revision; 133*8acfcfc3SJia-Ju Bai u32_t intr_status; 134*8acfcfc3SJia-Ju Bai } DEV_STRUCT; 135*8acfcfc3SJia-Ju Bai 136*8acfcfc3SJia-Ju Bai void dev_mixer_write(u32_t *base, u32_t reg, u32_t val); 137*8acfcfc3SJia-Ju Bai u32_t dev_mixer_read(u32_t *base, u32_t reg); 138*8acfcfc3SJia-Ju Bai 139*8acfcfc3SJia-Ju Bai #endif 140