Commit | Line | Data |
---|---|---|
1da177e4 LT |
1 | #ifndef _BBC_I2C_H |
2 | #define _BBC_I2C_H | |
3 | ||
e21e245b DM |
4 | #include <linux/of.h> |
5 | #include <linux/of_device.h> | |
6 | #include <linux/list.h> | |
1da177e4 | 7 | |
e21e245b DM |
8 | struct bbc_i2c_client { |
9 | struct bbc_i2c_bus *bp; | |
2dc11581 | 10 | struct platform_device *op; |
e21e245b DM |
11 | int bus; |
12 | int address; | |
13 | }; | |
14 | ||
15 | enum fan_action { FAN_SLOWER, FAN_SAME, FAN_FASTER, FAN_FULLBLAST, FAN_STATE_MAX }; | |
16 | ||
17 | struct bbc_cpu_temperature { | |
18 | struct list_head bp_list; | |
19 | struct list_head glob_list; | |
20 | ||
21 | struct bbc_i2c_client *client; | |
22 | int index; | |
23 | ||
24 | /* Current readings, and history. */ | |
25 | s8 curr_cpu_temp; | |
26 | s8 curr_amb_temp; | |
27 | s8 prev_cpu_temp; | |
28 | s8 prev_amb_temp; | |
29 | s8 avg_cpu_temp; | |
30 | s8 avg_amb_temp; | |
31 | ||
32 | int sample_tick; | |
33 | ||
34 | enum fan_action fan_todo[2]; | |
35 | #define FAN_AMBIENT 0 | |
36 | #define FAN_CPU 1 | |
37 | }; | |
38 | ||
39 | struct bbc_fan_control { | |
40 | struct list_head bp_list; | |
41 | struct list_head glob_list; | |
42 | ||
43 | struct bbc_i2c_client *client; | |
44 | int index; | |
45 | ||
46 | int psupply_fan_on; | |
47 | int cpu_fan_speed; | |
48 | int system_fan_speed; | |
49 | }; | |
50 | ||
51 | #define NUM_CHILDREN 8 | |
52 | ||
53 | struct bbc_i2c_bus { | |
54 | struct bbc_i2c_bus *next; | |
55 | int index; | |
56 | spinlock_t lock; | |
57 | void __iomem *i2c_bussel_reg; | |
58 | void __iomem *i2c_control_regs; | |
59 | unsigned char own, clock; | |
60 | ||
61 | wait_queue_head_t wq; | |
62 | volatile int waiting; | |
63 | ||
64 | struct list_head temps; | |
65 | struct list_head fans; | |
66 | ||
2dc11581 | 67 | struct platform_device *op; |
e21e245b | 68 | struct { |
2dc11581 | 69 | struct platform_device *device; |
e21e245b DM |
70 | int client_claimed; |
71 | } devs[NUM_CHILDREN]; | |
72 | }; | |
1da177e4 LT |
73 | |
74 | /* Probing and attachment. */ | |
2dc11581 GL |
75 | extern struct platform_device *bbc_i2c_getdev(struct bbc_i2c_bus *, int); |
76 | extern struct bbc_i2c_client *bbc_i2c_attach(struct bbc_i2c_bus *bp, struct platform_device *); | |
1da177e4 LT |
77 | extern void bbc_i2c_detach(struct bbc_i2c_client *); |
78 | ||
79 | /* Register read/write. NOTE: Blocking! */ | |
80 | extern int bbc_i2c_writeb(struct bbc_i2c_client *, unsigned char val, int off); | |
81 | extern int bbc_i2c_readb(struct bbc_i2c_client *, unsigned char *byte, int off); | |
82 | extern int bbc_i2c_write_buf(struct bbc_i2c_client *, char *buf, int len, int off); | |
83 | extern int bbc_i2c_read_buf(struct bbc_i2c_client *, char *buf, int len, int off); | |
84 | ||
85 | #endif /* _BBC_I2C_H */ |