tracking-2.6.27-rc2-fix-fiq.patch
[kernel.git] / include / asm-arm / arch-s3c2410 / fiq_ipc_gta02.h
1 #ifndef _LINUX_FIQ_IPC_H
2 #define _LINUX_FIQ_IPC_H
3
4 /*
5  * this defines the struct which is used to communicate between the FIQ
6  * world and the normal linux kernel world.  One of these structs is
7  * statically defined for you in the monolithic kernel so the FIQ ISR code
8  * can safely touch it any any time.
9  *
10  * You also want to include this file in your kernel module that wants to
11  * communicate with your FIQ code.  Add any kinds of vars that are used by
12  * the FIQ ISR and the module in here.
13  *
14  * To get you started there is just an int that is incremented every FIQ
15  * you can remove this when you are ready to customize, but it is useful
16  * for testing
17  */
18
19 #include <asm/arch/pwm.h>
20 #include <asm/plat-s3c/regs-timer.h>
21
22 extern u8 fiq_ready;
23
24 enum hdq_bitbang_states {
25         HDQB_IDLE = 0,
26         HDQB_TX_BREAK,
27         HDQB_TX_BREAK_RECOVERY,
28         HDQB_ADS_CALC,
29         HDQB_ADS_LOW,
30         HDQB_ADS_HIGH,
31         HDQB_WAIT_RX,
32         HDQB_DATA_RX_LOW,
33         HDQB_DATA_RX_HIGH,
34         HDQB_WAIT_TX,
35 };
36
37 struct fiq_ipc {
38         /* vibrator */
39         unsigned long vib_gpio_pin; /* which pin to meddle with */
40         u8 vib_pwm; /* 0 = OFF -- will ensure GPIO deasserted and stop FIQ */
41         u8 vib_pwm_latched;
42
43         /* hdq */
44         u8 hdq_probed; /* nonzero after HDQ driver probed */
45         struct mutex hdq_lock; /* if you want to use hdq, you have to take lock */
46         unsigned long hdq_gpio_pin; /* GTA02 = GPD14 which pin to meddle with */
47         u8 hdq_ads; /* b7..b6 = register address, b0 = r/w */
48         u8 hdq_tx_data; /* data to tx for write action */
49         u8 hdq_rx_data; /* data received in read action */
50         u8 hdq_request_ctr; /* incremented by "user" to request a transfer */
51         u8 hdq_transaction_ctr; /* incremented after each transfer */
52         u8 hdq_error; /* 0 = no error */
53 };
54
55 /* actual definition lives in arch/arm/mach-s3c2440/fiq_c_isr.c */
56 extern struct fiq_ipc fiq_ipc;
57 extern unsigned long _fiq_count_fiqs;
58 extern void fiq_kick(void);  /* provoke a FIQ "immediately" */
59
60 #endif /* _LINUX_FIQ_IPC_H */