diff options
Diffstat (limited to 'sound/oss/aci.h')
-rw-r--r-- | sound/oss/aci.h | 57 |
1 files changed, 57 insertions, 0 deletions
diff --git a/sound/oss/aci.h b/sound/oss/aci.h new file mode 100644 index 000000000000..20102ee088eb --- /dev/null +++ b/sound/oss/aci.h | |||
@@ -0,0 +1,57 @@ | |||
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_ */ | ||