2005-04-17 02:20:36 +04:00
# ifndef _BBC_I2C_H
# define _BBC_I2C_H
2008-08-30 09:34:14 +04:00
# include <linux/of.h>
# include <linux/of_device.h>
# include <linux/list.h>
2005-04-17 02:20:36 +04:00
2008-08-30 09:34:14 +04:00
struct bbc_i2c_client {
struct bbc_i2c_bus * bp ;
2010-08-06 19:25:50 +04:00
struct platform_device * op ;
2008-08-30 09:34:14 +04:00
int bus ;
int address ;
} ;
enum fan_action { FAN_SLOWER , FAN_SAME , FAN_FASTER , FAN_FULLBLAST , FAN_STATE_MAX } ;
struct bbc_cpu_temperature {
struct list_head bp_list ;
struct list_head glob_list ;
struct bbc_i2c_client * client ;
int index ;
/* Current readings, and history. */
s8 curr_cpu_temp ;
s8 curr_amb_temp ;
s8 prev_cpu_temp ;
s8 prev_amb_temp ;
s8 avg_cpu_temp ;
s8 avg_amb_temp ;
int sample_tick ;
enum fan_action fan_todo [ 2 ] ;
# define FAN_AMBIENT 0
# define FAN_CPU 1
} ;
struct bbc_fan_control {
struct list_head bp_list ;
struct list_head glob_list ;
struct bbc_i2c_client * client ;
int index ;
int psupply_fan_on ;
int cpu_fan_speed ;
int system_fan_speed ;
} ;
# define NUM_CHILDREN 8
struct bbc_i2c_bus {
struct bbc_i2c_bus * next ;
int index ;
spinlock_t lock ;
void __iomem * i2c_bussel_reg ;
void __iomem * i2c_control_regs ;
unsigned char own , clock ;
wait_queue_head_t wq ;
volatile int waiting ;
struct list_head temps ;
struct list_head fans ;
2010-08-06 19:25:50 +04:00
struct platform_device * op ;
2008-08-30 09:34:14 +04:00
struct {
2010-08-06 19:25:50 +04:00
struct platform_device * device ;
2008-08-30 09:34:14 +04:00
int client_claimed ;
} devs [ NUM_CHILDREN ] ;
} ;
2005-04-17 02:20:36 +04:00
/* Probing and attachment. */
2010-08-06 19:25:50 +04:00
extern struct platform_device * bbc_i2c_getdev ( struct bbc_i2c_bus * , int ) ;
extern struct bbc_i2c_client * bbc_i2c_attach ( struct bbc_i2c_bus * bp , struct platform_device * ) ;
2005-04-17 02:20:36 +04:00
extern void bbc_i2c_detach ( struct bbc_i2c_client * ) ;
/* Register read/write. NOTE: Blocking! */
extern int bbc_i2c_writeb ( struct bbc_i2c_client * , unsigned char val , int off ) ;
extern int bbc_i2c_readb ( struct bbc_i2c_client * , unsigned char * byte , int off ) ;
extern int bbc_i2c_write_buf ( struct bbc_i2c_client * , char * buf , int len , int off ) ;
extern int bbc_i2c_read_buf ( struct bbc_i2c_client * , char * buf , int len , int off ) ;
# endif /* _BBC_I2C_H */