89 lines · c
1/* SPDX-License-Identifier: GPL-2.0 */2#ifndef _BBC_I2C_H3#define _BBC_I2C_H4 5#include <linux/of.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 036#define FAN_CPU 137};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 852 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 85extern int bbc_envctrl_init(struct bbc_i2c_bus *bp);86extern void bbc_envctrl_cleanup(struct bbc_i2c_bus *bp);87 88#endif /* _BBC_I2C_H */89