brintos

brintos / linux-shallow public Read only

0
0
Text · 2.1 KiB · 6c74883 Raw
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