| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 1 | #ifndef _ACI_H_ | 
|  | 2 | #define _ACI_H_ | 
|  | 3 |  | 
|  | 4 | extern int aci_port; | 
|  | 5 | extern int aci_version;		/* ACI firmware version	*/ | 
|  | 6 | extern int aci_rw_cmd(int write1, int write2, int write3); | 
|  | 7 |  | 
|  | 8 | #define aci_indexed_cmd(a, b) aci_rw_cmd(a, b, -1) | 
|  | 9 | #define aci_write_cmd(a, b)   aci_rw_cmd(a, b, -1) | 
|  | 10 | #define aci_read_cmd(a)       aci_rw_cmd(a,-1, -1) | 
|  | 11 |  | 
|  | 12 | #define COMMAND_REGISTER    (aci_port)      /* write register */ | 
|  | 13 | #define STATUS_REGISTER     (aci_port + 1)  /* read register */ | 
|  | 14 | #define BUSY_REGISTER       (aci_port + 2)  /* also used for rds */ | 
|  | 15 |  | 
|  | 16 | #define RDS_REGISTER        BUSY_REGISTER | 
|  | 17 |  | 
|  | 18 | #define ACI_SET_MUTE          0x0d | 
|  | 19 | #define ACI_SET_POWERAMP      0x0f | 
|  | 20 | #define ACI_SET_TUNERMUTE     0xa3 | 
|  | 21 | #define ACI_SET_TUNERMONO     0xa4 | 
|  | 22 | #define ACI_SET_IDE           0xd0 | 
|  | 23 | #define ACI_SET_WSS           0xd1 | 
|  | 24 | #define ACI_SET_SOLOMODE      0xd2 | 
|  | 25 | #define ACI_WRITE_IGAIN       0x03 | 
|  | 26 | #define ACI_WRITE_TUNE        0xa7 | 
|  | 27 | #define ACI_READ_TUNERSTEREO  0xa8 | 
|  | 28 | #define ACI_READ_TUNERSTATION 0xa9 | 
|  | 29 | #define ACI_READ_VERSION      0xf1 | 
|  | 30 | #define ACI_READ_IDCODE       0xf2 | 
|  | 31 | #define ACI_INIT              0xff | 
|  | 32 | #define ACI_STATUS            0xf0 | 
|  | 33 | #define     ACI_S_GENERAL     0x00 | 
|  | 34 | #define     ACI_S_READ_IGAIN  0x21 | 
|  | 35 | #define ACI_ERROR_OP          0xdf | 
|  | 36 |  | 
|  | 37 | /* | 
|  | 38 | * The following macro SCALE can be used to scale one integer volume | 
|  | 39 | * value into another one using only integer arithmetic. If the input | 
|  | 40 | * value x is in the range 0 <= x <= xmax, then the result will be in | 
|  | 41 | * the range 0 <= SCALE(xmax,ymax,x) <= ymax. | 
|  | 42 | * | 
|  | 43 | * This macro has for all xmax, ymax > 0 and all 0 <= x <= xmax the | 
|  | 44 | * following nice properties: | 
|  | 45 | * | 
|  | 46 | * - SCALE(xmax,ymax,xmax) = ymax | 
|  | 47 | * - SCALE(xmax,ymax,0) = 0 | 
|  | 48 | * - SCALE(xmax,ymax,SCALE(ymax,xmax,SCALE(xmax,ymax,x))) = SCALE(xmax,ymax,x) | 
|  | 49 | * | 
|  | 50 | * In addition, the rounding error is minimal and nicely distributed. | 
|  | 51 | * The proofs are left as an exercise to the reader. | 
|  | 52 | */ | 
|  | 53 |  | 
|  | 54 | #define SCALE(xmax,ymax,x) (((x)*(ymax)+(xmax)/2)/(xmax)) | 
|  | 55 |  | 
|  | 56 |  | 
|  | 57 | #endif  /* _ACI_H_ */ |