root/include/sound/i2c.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


DEFINITIONS

This source file includes following definitions.
  1. snd_i2c_lock
  2. snd_i2c_unlock

   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 
  10 struct 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 
  23 struct 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 
  32 struct 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 
  38 struct 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 
  62 int snd_i2c_bus_create(struct snd_card *card, const char *name,
  63                        struct snd_i2c_bus *master, struct snd_i2c_bus **ri2c);
  64 int snd_i2c_device_create(struct snd_i2c_bus *bus, const char *name,
  65                           unsigned char addr, struct snd_i2c_device **rdevice);
  66 int snd_i2c_device_free(struct snd_i2c_device *device);
  67 
  68 static 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 
  76 static 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 
  84 int snd_i2c_sendbytes(struct snd_i2c_device *device, unsigned char *bytes, int count);
  85 int snd_i2c_readbytes(struct snd_i2c_device *device, unsigned char *bytes, int count);
  86 int snd_i2c_probeaddr(struct snd_i2c_bus *bus, unsigned short addr);
  87 
  88 #endif /* __SOUND_I2C_H */

/* [<][>][^][v][top][bottom][index][help] */