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