more changes on original files
[linux-2.4.git] / include / linux / wm97xx.h
1   
2 /*
3  * Register bits for Wolfson WM97xx series of codecs
4  */
5  
6 #ifndef _WM97XX_H_
7 #define _WM97XX_H_
8
9 #include <linux/ac97_codec.h>   /* AC97 control layer */
10
11 /*
12  * WM97xx AC97 Touchscreen registers
13  */
14 #define AC97_WM97XX_DIGITISER1          0x76
15 #define AC97_WM97XX_DIGITISER2          0x78
16 #define AC97_WM97XX_DIGITISER_RD        0x7a
17
18 /*
19  * WM97xx register bits
20  */
21 #define WM97XX_POLL                     0x8000          /* initiate a polling measurement */
22 #define WM97XX_ADCSEL_X         0x1000          /* x coord measurement */
23 #define WM97XX_ADCSEL_Y         0x2000          /* y coord measurement */
24 #define WM97XX_ADCSEL_PRES      0x3000          /* pressure measurement */
25 #define WM97XX_COO                      0x0800          /* enable coordinate mode */
26 #define WM97XX_CTC                      0x0400          /* enable continuous mode */
27 #define WM97XX_CM_RATE_93       0x0000          /* 93.75Hz continuous rate */
28 #define WM97XX_CM_RATE_187      0x0100          /* 187.5Hz continuous rate */
29 #define WM97XX_CM_RATE_375      0x0200          /* 375Hz continuous rate */
30 #define WM97XX_CM_RATE_750      0x0300          /* 750Hz continuous rate */
31 #define WM97XX_CM_RATE_8K       0x00f0          /* 8kHz continuous rate */
32 #define WM97XX_CM_RATE_12K      0x01f0          /* 12kHz continuous rate */
33 #define WM97XX_CM_RATE_24K      0x02f0          /* 24kHz continuous rate */
34 #define WM97XX_CM_RATE_48K      0x03f0          /* 48kHz continuous rate */
35 #define WM97XX_DELAY(i)         ((i << 4) & 0x00f0)     /* sample delay times */
36 #define WM97XX_SLEN                     0x0008          /* slot read back enable */
37 #define WM97XX_SLT(i)           ((i - 5) & 0x7) /* touchpanel slot selection (5-11) */
38 #define WM97XX_PRP_DETW         0x4000          /* pen detect on, digitiser off, wake up */
39 #define WM97XX_PRP_DET          0x8000          /* pen detect on, digitiser off, no wake up */
40 #define WM97XX_PRP_DET_DIG      0xc000          /* pen detect on, digitiser on */
41 #define WM97XX_RPR                      0x2000          /* wake up on pen down */
42 #define WM97XX_PEN_DOWN     0x8000     /* pen is down */
43
44 /* WM9712 Bits */
45 #define WM9712_45W                      0x1000          /* set for 5-wire touchscreen */
46 #define WM9712_PDEN                     0x0800          /* measure only when pen down */
47 #define WM9712_WAIT                     0x0200          /* wait until adc is read before next sample */
48 #define WM9712_PIL                      0x0100          /* current used for pressure measurement. set 400uA else 200uA */ 
49 #define WM9712_MASK_HI          0x0040          /* hi on mask pin (47) stops conversions */
50 #define WM9712_MASK_EDGE        0x0080          /* rising/falling edge on pin delays sample */
51 #define WM9712_MASK_SYNC        0x00c0          /* rising/falling edge on mask initiates sample */
52 #define WM9712_RPU(i)           (i&0x3f)        /* internal pull up on pen detect (64k / rpu) */
53 #define WM9712_ADCSEL_COMP1     0x4000          /* COMP1/AUX1 measurement (pin29) */
54 #define WM9712_ADCSEL_COMP2     0x5000          /* COMP2/AUX2 measurement (pin30) */
55 #define WM9712_ADCSEL_BMON      0x6000          /* BMON/AUX3 measurement (pin31) */
56 #define WM9712_ADCSEL_WIPER     0x7000          /* WIPER/AUX4 measurement (pin12) */
57 #define WM9712_PD(i)            (0x1 << i)  /* power management */ 
58
59 /* WM9712 Registers */
60 #define AC97_WM9712_POWER                       0x24
61 #define AC97_WM9712_REV                         0x58
62
63 /* WM9705 Bits */
64 #define WM9705_PDEN                     0x1000          /* measure only when pen is down */
65 #define WM9705_PINV                     0x0800          /* inverts sense of pen down output */
66 #define WM9705_BSEN                     0x0400          /* BUSY flag enable, pin47 is 1 when busy */
67 #define WM9705_BINV                     0x0200          /* invert BUSY (pin47) output */
68 #define WM9705_WAIT                     0x0100          /* wait until adc is read before next sample */
69 #define WM9705_PIL                      0x0080          /* current used for pressure measurement. set 400uA else 200uA */ 
70 #define WM9705_PHIZ                     0x0040          /* set PHONE and PCBEEP inputs to high impedance */
71 #define WM9705_MASK_HI          0x0010          /* hi on mask stops conversions */
72 #define WM9705_MASK_EDGE        0x0020          /* rising/falling edge on pin delays sample */
73 #define WM9705_MASK_SYNC        0x0030          /* rising/falling edge on mask initiates sample */
74 #define WM9705_PDD(i)           (i & 0x000f) /* pen detect comparator threshold */
75 #define WM9705_ADCSEL_BMON      0x4000          /* BMON measurement */
76 #define WM9705_ADCSEL_AUX       0x5000          /* AUX measurement */
77 #define WM9705_ADCSEL_PHONE     0x6000          /* PHONE measurement */
78 #define WM9705_ADCSEL_PCBEEP 0x7000             /* PCBEEP measurement */
79
80 /* AUX ADC ID's */
81 #define TS_COMP1                        0x0
82 #define TS_COMP2                        0x1
83 #define TS_BMON                         0x2
84 #define TS_WIPER                        0x3
85
86 /* ID numbers */
87 #define WM97XX_ID1                      0x574d
88 #define WM9712_ID2                      0x4c12
89 #define WM9705_ID2                      0x4c05
90
91 #define AC97_LINK_FRAME         21                      /* time in uS for AC97 link frame */
92
93 void register_touchscreen_codec(struct ac97_codec *codec);
94 void unregister_touchscreen_codec(struct ac97_codec *codec);
95
96 #endif