Blame view
include/sound/i2c.h
3.47 KB
1da177e4c Linux-2.6.12-rc2 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
#ifndef __SOUND_I2C_H #define __SOUND_I2C_H /* * * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * */ |
1da177e4c Linux-2.6.12-rc2 |
23 |
#define SND_I2C_DEVICE_ADDRTEN (1<<0) /* 10-bit I2C address */ |
97f02e05f [ALSA] Remove xxx... |
24 |
struct snd_i2c_device { |
1da177e4c Linux-2.6.12-rc2 |
25 |
struct list_head list; |
97f02e05f [ALSA] Remove xxx... |
26 |
struct snd_i2c_bus *bus; /* I2C bus */ |
1da177e4c Linux-2.6.12-rc2 |
27 28 29 30 31 |
char name[32]; /* some useful device name */ unsigned short flags; /* device flags */ unsigned short addr; /* device address (might be 10-bit) */ unsigned long private_value; void *private_data; |
97f02e05f [ALSA] Remove xxx... |
32 33 34 35 36 37 38 39 40 41 42 43 |
void (*private_free)(struct snd_i2c_device *device); }; #define snd_i2c_device(n) list_entry(n, struct snd_i2c_device, list) struct snd_i2c_bit_ops { void (*start)(struct snd_i2c_bus *bus); /* transfer start */ void (*stop)(struct snd_i2c_bus *bus); /* transfer stop */ void (*direction)(struct snd_i2c_bus *bus, int clock, int data); /* set line direction (0 = write, 1 = read) */ void (*setlines)(struct snd_i2c_bus *bus, int clock, int data); int (*getclock)(struct snd_i2c_bus *bus); int (*getdata)(struct snd_i2c_bus *bus, int ack); |
1da177e4c Linux-2.6.12-rc2 |
44 |
}; |
97f02e05f [ALSA] Remove xxx... |
45 46 47 48 49 50 51 52 |
struct snd_i2c_ops { int (*sendbytes)(struct snd_i2c_device *device, unsigned char *bytes, int count); int (*readbytes)(struct snd_i2c_device *device, unsigned char *bytes, int count); int (*probeaddr)(struct snd_i2c_bus *bus, unsigned short addr); }; struct snd_i2c_bus { struct snd_card *card; /* card which I2C belongs to */ |
1da177e4c Linux-2.6.12-rc2 |
53 |
char name[32]; /* some useful label */ |
ef9f0a42d [ALSA] semaphore ... |
54 |
struct mutex lock_mutex; |
1da177e4c Linux-2.6.12-rc2 |
55 |
|
97f02e05f [ALSA] Remove xxx... |
56 |
struct snd_i2c_bus *master; /* master bus when SCK/SCL is shared */ |
1da177e4c Linux-2.6.12-rc2 |
57 58 59 60 61 |
struct list_head buses; /* master: slave buses sharing SCK/SCL, slave: link list */ struct list_head devices; /* attached devices to this bus */ union { |
97f02e05f [ALSA] Remove xxx... |
62 |
struct snd_i2c_bit_ops *bit; |
1da177e4c Linux-2.6.12-rc2 |
63 64 |
void *ops; } hw_ops; /* lowlevel operations */ |
97f02e05f [ALSA] Remove xxx... |
65 |
struct snd_i2c_ops *ops; /* midlevel operations */ |
1da177e4c Linux-2.6.12-rc2 |
66 67 68 |
unsigned long private_value; void *private_data; |
97f02e05f [ALSA] Remove xxx... |
69 |
void (*private_free)(struct snd_i2c_bus *bus); |
1da177e4c Linux-2.6.12-rc2 |
70 |
}; |
97f02e05f [ALSA] Remove xxx... |
71 |
#define snd_i2c_slave_bus(n) list_entry(n, struct snd_i2c_bus, buses) |
1da177e4c Linux-2.6.12-rc2 |
72 |
|
97f02e05f [ALSA] Remove xxx... |
73 74 75 76 77 |
int snd_i2c_bus_create(struct snd_card *card, const char *name, struct snd_i2c_bus *master, struct snd_i2c_bus **ri2c); int snd_i2c_device_create(struct snd_i2c_bus *bus, const char *name, unsigned char addr, struct snd_i2c_device **rdevice); int snd_i2c_device_free(struct snd_i2c_device *device); |
1da177e4c Linux-2.6.12-rc2 |
78 |
|
97f02e05f [ALSA] Remove xxx... |
79 80 |
static inline void snd_i2c_lock(struct snd_i2c_bus *bus) { |
1da177e4c Linux-2.6.12-rc2 |
81 |
if (bus->master) |
ef9f0a42d [ALSA] semaphore ... |
82 |
mutex_lock(&bus->master->lock_mutex); |
1da177e4c Linux-2.6.12-rc2 |
83 |
else |
ef9f0a42d [ALSA] semaphore ... |
84 |
mutex_lock(&bus->lock_mutex); |
1da177e4c Linux-2.6.12-rc2 |
85 |
} |
97f02e05f [ALSA] Remove xxx... |
86 87 88 |
static inline void snd_i2c_unlock(struct snd_i2c_bus *bus) { |
1da177e4c Linux-2.6.12-rc2 |
89 |
if (bus->master) |
ef9f0a42d [ALSA] semaphore ... |
90 |
mutex_unlock(&bus->master->lock_mutex); |
1da177e4c Linux-2.6.12-rc2 |
91 |
else |
ef9f0a42d [ALSA] semaphore ... |
92 |
mutex_unlock(&bus->lock_mutex); |
1da177e4c Linux-2.6.12-rc2 |
93 |
} |
97f02e05f [ALSA] Remove xxx... |
94 95 96 |
int snd_i2c_sendbytes(struct snd_i2c_device *device, unsigned char *bytes, int count); int snd_i2c_readbytes(struct snd_i2c_device *device, unsigned char *bytes, int count); int snd_i2c_probeaddr(struct snd_i2c_bus *bus, unsigned short addr); |
1da177e4c Linux-2.6.12-rc2 |
97 98 |
#endif /* __SOUND_I2C_H */ |