linux/drivers/sbus/char/bbc_i2c.h
<<
>>
Prefs
   1#ifndef _BBC_I2C_H
   2#define _BBC_I2C_H
   3
   4#include <linux/of.h>
   5#include <linux/of_device.h>
   6#include <linux/list.h>
   7
   8struct bbc_i2c_client {
   9        struct bbc_i2c_bus              *bp;
  10        struct platform_device          *op;
  11        int                             bus;
  12        int                             address;
  13};
  14
  15enum fan_action { FAN_SLOWER, FAN_SAME, FAN_FASTER, FAN_FULLBLAST, FAN_STATE_MAX };
  16
  17struct 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
  39struct 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
  53struct 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
  67        struct platform_device          *op;
  68        struct {
  69                struct platform_device  *device;
  70                int                     client_claimed;
  71        } devs[NUM_CHILDREN];
  72};
  73
  74/* Probing and attachment. */
  75extern struct platform_device *bbc_i2c_getdev(struct bbc_i2c_bus *, int);
  76extern struct bbc_i2c_client *bbc_i2c_attach(struct bbc_i2c_bus *bp, struct platform_device *);
  77extern void bbc_i2c_detach(struct bbc_i2c_client *);
  78
  79/* Register read/write.  NOTE: Blocking! */
  80extern int bbc_i2c_writeb(struct bbc_i2c_client *, unsigned char val, int off);
  81extern int bbc_i2c_readb(struct bbc_i2c_client *, unsigned char *byte, int off);
  82extern int bbc_i2c_write_buf(struct bbc_i2c_client *, char *buf, int len, int off);
  83extern int bbc_i2c_read_buf(struct bbc_i2c_client *, char *buf, int len, int off);
  84
  85#endif /* _BBC_I2C_H */
  86