| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 1 | /****************************************************************************/ | 
 | 2 | /* | 
 | 3 |  *  linux/include/asm-arm/arch-l7200/sib.h | 
 | 4 |  * | 
 | 5 |  *  Registers and helper functions for the Serial Interface Bus. | 
 | 6 |  * | 
 | 7 |  *  (C) Copyright 2000, S A McConnell  (samcconn@cotw.com) | 
 | 8 |  * | 
 | 9 |  *  This file is subject to the terms and conditions of the GNU General Public | 
 | 10 |  *  License. See the file COPYING in the main directory of this archive for | 
 | 11 |  *  more details. | 
 | 12 |  */ | 
 | 13 |  | 
 | 14 | /****************************************************************************/ | 
 | 15 |  | 
 | 16 | #define SIB_OFF   0x00040000  /* Offset from IO_START to the SIB reg's. */ | 
 | 17 |  | 
 | 18 | /* IO_START and IO_BASE are defined in hardware.h */ | 
 | 19 |  | 
 | 20 | #define SIB_START (IO_START + SIB_OFF) /* Physical addr of the SIB reg. */ | 
 | 21 | #define SIB_BASE  (IO_BASE  + SIB_OFF) /* Virtual addr of the SIB reg.  */ | 
 | 22 |  | 
 | 23 | /* Offsets from the start of the SIB for all the registers. */ | 
 | 24 |  | 
 | 25 | /* Define the SIB registers for use by device drivers and the kernel. */ | 
 | 26 |  | 
 | 27 | typedef struct | 
 | 28 | { | 
 | 29 |      unsigned int MCCR;    /* SIB Control Register           Offset: 0x00 */ | 
 | 30 |      unsigned int RES1;    /* Reserved                       Offset: 0x04 */ | 
 | 31 |      unsigned int MCDR0;   /* SIB Data Register 0            Offset: 0x08 */ | 
 | 32 |      unsigned int MCDR1;   /* SIB Data Register 1            Offset: 0x0c */ | 
 | 33 |      unsigned int MCDR2;   /* SIB Data Register 2 (UCB1x00)  Offset: 0x10 */ | 
 | 34 |      unsigned int RES2;    /* Reserved                       Offset: 0x14 */ | 
 | 35 |      unsigned int MCSR;    /* SIB Status Register            Offset: 0x18 */ | 
 | 36 | } SIB_Interface; | 
 | 37 |  | 
 | 38 | #define SIB ((volatile SIB_Interface *) (SIB_BASE)) | 
 | 39 |  | 
 | 40 | /* MCCR */ | 
 | 41 |  | 
 | 42 | #define INTERNAL_FREQ   9216000  /* Hertz */ | 
 | 43 | #define AUDIO_FREQ         5000  /* Hertz */ | 
 | 44 | #define TELECOM_FREQ       5000  /* Hertz */ | 
 | 45 |  | 
 | 46 | #define AUDIO_DIVIDE    (INTERNAL_FREQ / (32 * AUDIO_FREQ)) | 
 | 47 | #define TELECOM_DIVIDE  (INTERNAL_FREQ / (32 * TELECOM_FREQ)) | 
 | 48 |  | 
 | 49 | #define MCCR_ASD57      AUDIO_DIVIDE | 
 | 50 | #define MCCR_TSD57      (TELECOM_DIVIDE << 8) | 
 | 51 | #define MCCR_MCE        (1 << 16)             /* SIB enable */ | 
 | 52 | #define MCCR_ECS        (1 << 17)             /* External Clock Select */ | 
 | 53 | #define MCCR_ADM        (1 << 18)             /* A/D Data Sampling */ | 
 | 54 | #define MCCR_PMC        (1 << 26)             /* PIN Multiplexer Control */ | 
 | 55 |  | 
 | 56 |  | 
 | 57 | #define GET_ASD ((SIB->MCCR >>  0) & 0x3f) /* Audio Sample Rate Div. */ | 
 | 58 | #define GET_TSD ((SIB->MCCR >>  8) & 0x3f) /* Telcom Sample Rate Div. */ | 
 | 59 | #define GET_MCE ((SIB->MCCR >> 16) & 0x01) /* SIB Enable */ | 
 | 60 | #define GET_ECS ((SIB->MCCR >> 17) & 0x01) /* External Clock Select */ | 
 | 61 | #define GET_ADM ((SIB->MCCR >> 18) & 0x01) /* A/D Data Sampling Mode */ | 
 | 62 | #define GET_TTM ((SIB->MCCR >> 19) & 0x01) /* Telco Trans. FIFO I mask */  | 
 | 63 | #define GET_TRM ((SIB->MCCR >> 20) & 0x01) /* Telco Recv. FIFO I mask */ | 
 | 64 | #define GET_ATM ((SIB->MCCR >> 21) & 0x01) /* Audio Trans. FIFO I mask */  | 
 | 65 | #define GET_ARM ((SIB->MCCR >> 22) & 0x01) /* Audio Recv. FIFO I mask */ | 
 | 66 | #define GET_LBM ((SIB->MCCR >> 23) & 0x01) /* Loop Back Mode */ | 
 | 67 | #define GET_ECP ((SIB->MCCR >> 24) & 0x03) /* Extern. Clck Prescale sel */ | 
 | 68 | #define GET_PMC ((SIB->MCCR >> 26) & 0x01) /* PIN Multiplexer Control */ | 
 | 69 | #define GET_ERI ((SIB->MCCR >> 27) & 0x01) /* External Read Interrupt */ | 
 | 70 | #define GET_EWI ((SIB->MCCR >> 28) & 0x01) /* External Write Interrupt */ | 
 | 71 |  | 
 | 72 | /* MCDR0 */ | 
 | 73 |  | 
 | 74 | #define AUDIO_RECV     ((SIB->MCDR0 >> 4) & 0xfff) | 
 | 75 | #define AUDIO_WRITE(v) ((SIB->MCDR0 = (v & 0xfff) << 4)) | 
 | 76 |  | 
 | 77 | /* MCDR1 */ | 
 | 78 |  | 
 | 79 | #define TELECOM_RECV     ((SIB->MCDR1 >> 2) & 032fff) | 
 | 80 | #define TELECOM_WRITE(v) ((SIB->MCDR1 = (v & 0x3fff) << 2)) | 
 | 81 |  | 
 | 82 |  | 
 | 83 | /* MCSR */ | 
 | 84 |  | 
 | 85 | #define MCSR_ATU (1 << 4)  /* Audio Transmit FIFO Underrun */ | 
 | 86 | #define MCSR_ARO (1 << 5)  /* Audio Receive  FIFO Underrun */ | 
 | 87 | #define MCSR_TTU (1 << 6)  /* TELECOM Transmit FIFO Underrun */ | 
 | 88 | #define MCSR_TRO (1 << 7)  /* TELECOM Receive  FIFO Underrun */ | 
 | 89 |  | 
 | 90 | #define MCSR_CLEAR_UNDERUN_BITS (MCSR_ATU | MCSR_ARO | MCSR_TTU | MCSR_TRO) | 
 | 91 |  | 
 | 92 |  | 
 | 93 | #define GET_ATS ((SIB->MCSR >>  0) & 0x01) /* Audio Transmit FIFO Service Req*/ | 
 | 94 | #define GET_ARS ((SIB->MCSR >>  1) & 0x01) /* Audio Recv FIFO Service Request*/ | 
 | 95 | #define GET_TTS ((SIB->MCSR >>  2) & 0x01) /* TELECOM Transmit FIFO  Flag */ | 
 | 96 | #define GET_TRS ((SIB->MCSR >>  3) & 0x01) /* TELECOM Recv FIFO Service Req. */ | 
 | 97 | #define GET_ATU ((SIB->MCSR >>  4) & 0x01) /* Audio Transmit FIFO Underrun */ | 
 | 98 | #define GET_ARO ((SIB->MCSR >>  5) & 0x01) /* Audio Receive  FIFO Underrun */ | 
 | 99 | #define GET_TTU ((SIB->MCSR >>  6) & 0x01) /* TELECOM Transmit FIFO Underrun */ | 
 | 100 | #define GET_TRO ((SIB->MCSR >>  7) & 0x01) /* TELECOM Receive  FIFO Underrun */ | 
 | 101 | #define GET_ANF ((SIB->MCSR >>  8) & 0x01) /* Audio Transmit FIFO not full */ | 
 | 102 | #define GET_ANE ((SIB->MCSR >>  9) & 0x01) /* Audio Receive FIFO not empty */ | 
 | 103 | #define GET_TNF ((SIB->MCSR >> 10) & 0x01) /* Telecom Transmit FIFO not full */ | 
 | 104 | #define GET_TNE ((SIB->MCSR >> 11) & 0x01) /* Telecom Receive FIFO not empty */ | 
 | 105 | #define GET_CWC ((SIB->MCSR >> 12) & 0x01) /* Codec Write Complete */ | 
 | 106 | #define GET_CRC ((SIB->MCSR >> 13) & 0x01) /* Codec Read Complete */ | 
 | 107 | #define GET_ACE ((SIB->MCSR >> 14) & 0x01) /* Audio Codec Enabled */ | 
 | 108 | #define GET_TCE ((SIB->MCSR >> 15) & 0x01) /* Telecom Codec Enabled */ | 
 | 109 |  | 
 | 110 | /* MCDR2 */ | 
 | 111 |  | 
 | 112 | #define MCDR2_rW               (1 << 16) | 
 | 113 |  | 
 | 114 | #define WRITE_MCDR2(reg, data) (SIB->MCDR2 =((reg<<17)|MCDR2_rW|(data&0xffff))) | 
 | 115 | #define MCDR2_WRITE_COMPLETE   GET_CWC | 
 | 116 |  | 
 | 117 | #define INITIATE_MCDR2_READ(reg) (SIB->MCDR2 = (reg << 17)) | 
 | 118 | #define MCDR2_READ_COMPLETE      GET_CRC | 
 | 119 | #define MCDR2_READ               (SIB->MCDR2 & 0xffff) |