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_ */ |