cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

i2c.h (2857B)


      1/* SPDX-License-Identifier: GPL-2.0-or-later */
      2#ifndef __SOUND_I2C_H
      3#define __SOUND_I2C_H
      4
      5/*
      6 */
      7
      8#define SND_I2C_DEVICE_ADDRTEN	(1<<0)	/* 10-bit I2C address */
      9
     10struct snd_i2c_device {
     11	struct list_head list;
     12	struct snd_i2c_bus *bus;	/* I2C bus */
     13	char name[32];		/* some useful device name */
     14	unsigned short flags;	/* device flags */
     15	unsigned short addr;	/* device address (might be 10-bit) */
     16	unsigned long private_value;
     17	void *private_data;
     18	void (*private_free)(struct snd_i2c_device *device);
     19};
     20
     21#define snd_i2c_device(n) list_entry(n, struct snd_i2c_device, list)
     22
     23struct snd_i2c_bit_ops {
     24	void (*start)(struct snd_i2c_bus *bus);	/* transfer start */
     25	void (*stop)(struct snd_i2c_bus *bus);	/* transfer stop */
     26	void (*direction)(struct snd_i2c_bus *bus, int clock, int data);  /* set line direction (0 = write, 1 = read) */
     27	void (*setlines)(struct snd_i2c_bus *bus, int clock, int data);
     28	int (*getclock)(struct snd_i2c_bus *bus);
     29	int (*getdata)(struct snd_i2c_bus *bus, int ack);
     30};
     31
     32struct snd_i2c_ops {
     33	int (*sendbytes)(struct snd_i2c_device *device, unsigned char *bytes, int count);
     34	int (*readbytes)(struct snd_i2c_device *device, unsigned char *bytes, int count);
     35	int (*probeaddr)(struct snd_i2c_bus *bus, unsigned short addr);
     36};
     37
     38struct snd_i2c_bus {
     39	struct snd_card *card;	/* card which I2C belongs to */
     40	char name[32];		/* some useful label */
     41
     42	struct mutex lock_mutex;
     43
     44	struct snd_i2c_bus *master;	/* master bus when SCK/SCL is shared */
     45	struct list_head buses;	/* master: slave buses sharing SCK/SCL, slave: link list */
     46
     47	struct list_head devices; /* attached devices to this bus */
     48
     49	union {
     50		struct snd_i2c_bit_ops *bit;
     51		void *ops;
     52	} hw_ops;		/* lowlevel operations */
     53	const struct snd_i2c_ops *ops;	/* midlevel operations */
     54
     55	unsigned long private_value;
     56	void *private_data;
     57	void (*private_free)(struct snd_i2c_bus *bus);
     58};
     59
     60#define snd_i2c_slave_bus(n) list_entry(n, struct snd_i2c_bus, buses)
     61
     62int snd_i2c_bus_create(struct snd_card *card, const char *name,
     63		       struct snd_i2c_bus *master, struct snd_i2c_bus **ri2c);
     64int snd_i2c_device_create(struct snd_i2c_bus *bus, const char *name,
     65			  unsigned char addr, struct snd_i2c_device **rdevice);
     66int snd_i2c_device_free(struct snd_i2c_device *device);
     67
     68static inline void snd_i2c_lock(struct snd_i2c_bus *bus)
     69{
     70	if (bus->master)
     71		mutex_lock(&bus->master->lock_mutex);
     72	else
     73		mutex_lock(&bus->lock_mutex);
     74}
     75
     76static inline void snd_i2c_unlock(struct snd_i2c_bus *bus)
     77{
     78	if (bus->master)
     79		mutex_unlock(&bus->master->lock_mutex);
     80	else
     81		mutex_unlock(&bus->lock_mutex);
     82}
     83
     84int snd_i2c_sendbytes(struct snd_i2c_device *device, unsigned char *bytes, int count);
     85int snd_i2c_readbytes(struct snd_i2c_device *device, unsigned char *bytes, int count);
     86int snd_i2c_probeaddr(struct snd_i2c_bus *bus, unsigned short addr);
     87
     88#endif /* __SOUND_I2C_H */