Details | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
170 | giacomo | 1 | #ifndef _GPIO_HEADER_INCLUDED_ |
2 | #define _GPIO_HEADER_INCLUDED_ |
||
3 | |||
4 | #include <linux/list.h> |
||
5 | #include "drivers/compbttv.h" |
||
6 | #include <sys/types.h> |
||
7 | |||
8 | /* base "class" for dispatch requests */ |
||
9 | struct gpio_request { |
||
10 | struct list_head list; /* linked list of requests */ |
||
11 | }; |
||
12 | |||
13 | /* request queues */ |
||
14 | typedef struct _request_queue_s { |
||
15 | struct list_head list; /* list of pending requests */ |
||
16 | } request_queue_t; |
||
17 | |||
18 | #define init_request_queue(rq) \ |
||
19 | do { \ |
||
20 | INIT_LIST_HEAD(&((rq)->list)); \ |
||
21 | } while(0) |
||
22 | |||
23 | struct gpio_adapter { |
||
24 | /* overlapped data members: see "struct bttv" */ |
||
25 | struct pci_dev *dev; |
||
26 | unsigned char *bt848_mem; /* pointer to mapped IO memory */ |
||
27 | |||
28 | /* gpio async management variables */ |
||
29 | unsigned long state; //GPIO_HW_LOCKED == someone has exclusive hw access |
||
30 | //GPIO_ASYNC_MOD == change is pending |
||
31 | //GPIO_TASK_ACTIVE == request service task running |
||
32 | |||
33 | __u32 sync_bits; // current sync state (when hardware not locked) |
||
34 | __u32 async_mask; // mask of bits allocated to async control |
||
35 | __u32 async_bits; // current (or pending) state. see: async_change |
||
36 | |||
37 | /* gpio sync management variables */ |
||
38 | request_queue_t request_queue; |
||
39 | request_queue_t free_queue; |
||
40 | |||
41 | void *private_data; |
||
42 | }; |
||
43 | |||
44 | extern void init_gpio_adapter ( struct gpio_adapter * ); |
||
45 | |||
46 | /* gpio state bits */ |
||
47 | #define GPIO_HW_LOCKED 0 |
||
48 | #define GPIO_ASYNC_MOD 1 |
||
49 | #define GPIO_TASK_ACTIVE 2 |
||
50 | #define GPIO_USER_STATE 3 /* the base for user defined status */ |
||
51 | |||
52 | /* gpio async methods */ |
||
53 | extern void gpio_set ( struct gpio_adapter *, __u32 data ); |
||
54 | extern void gpio_and ( struct gpio_adapter *, __u32 and_data ); |
||
55 | extern void gpio_or ( struct gpio_adapter *, __u32 or_data ); |
||
56 | extern void gpio_andor ( struct gpio_adapter *, __u32 and_data, __u32 or_data ); |
||
57 | |||
58 | /* request queueing methods */ |
||
59 | extern void gpio_commit_request( struct gpio_adapter *, struct gpio_request * ); |
||
60 | extern void gpio_commit_transaction( struct gpio_adapter *, struct list_head * ); |
||
61 | |||
62 | #endif /* _GPIO_HEADER_INCLUDED_ */ |