Lines Matching refs:bus
39 static int snd_i2c_bit_probeaddr(struct snd_i2c_bus *bus,
48 static int snd_i2c_bus_free(struct snd_i2c_bus *bus) in snd_i2c_bus_free() argument
53 if (snd_BUG_ON(!bus)) in snd_i2c_bus_free()
55 while (!list_empty(&bus->devices)) { in snd_i2c_bus_free()
56 device = snd_i2c_device(bus->devices.next); in snd_i2c_bus_free()
59 if (bus->master) in snd_i2c_bus_free()
60 list_del(&bus->buses); in snd_i2c_bus_free()
62 while (!list_empty(&bus->buses)) { in snd_i2c_bus_free()
63 slave = snd_i2c_slave_bus(bus->buses.next); in snd_i2c_bus_free()
64 snd_device_free(bus->card, slave); in snd_i2c_bus_free()
67 if (bus->private_free) in snd_i2c_bus_free()
68 bus->private_free(bus); in snd_i2c_bus_free()
69 kfree(bus); in snd_i2c_bus_free()
75 struct snd_i2c_bus *bus = device->device_data; in snd_i2c_bus_dev_free() local
76 return snd_i2c_bus_free(bus); in snd_i2c_bus_dev_free()
82 struct snd_i2c_bus *bus; in snd_i2c_bus_create() local
89 bus = kzalloc(sizeof(*bus), GFP_KERNEL); in snd_i2c_bus_create()
90 if (bus == NULL) in snd_i2c_bus_create()
92 mutex_init(&bus->lock_mutex); in snd_i2c_bus_create()
93 INIT_LIST_HEAD(&bus->devices); in snd_i2c_bus_create()
94 INIT_LIST_HEAD(&bus->buses); in snd_i2c_bus_create()
95 bus->card = card; in snd_i2c_bus_create()
96 bus->ops = &snd_i2c_bit_ops; in snd_i2c_bus_create()
98 list_add_tail(&bus->buses, &master->buses); in snd_i2c_bus_create()
99 bus->master = master; in snd_i2c_bus_create()
101 strlcpy(bus->name, name, sizeof(bus->name)); in snd_i2c_bus_create()
102 err = snd_device_new(card, SNDRV_DEV_BUS, bus, &ops); in snd_i2c_bus_create()
104 snd_i2c_bus_free(bus); in snd_i2c_bus_create()
107 *ri2c = bus; in snd_i2c_bus_create()
113 int snd_i2c_device_create(struct snd_i2c_bus *bus, const char *name, in snd_i2c_device_create() argument
119 if (snd_BUG_ON(!bus)) in snd_i2c_device_create()
126 list_add_tail(&device->list, &bus->devices); in snd_i2c_device_create()
127 device->bus = bus; in snd_i2c_device_create()
136 if (device->bus) in snd_i2c_device_free()
148 return device->bus->ops->sendbytes(device, bytes, count); in snd_i2c_sendbytes()
155 return device->bus->ops->readbytes(device, bytes, count); in snd_i2c_readbytes()
160 int snd_i2c_probeaddr(struct snd_i2c_bus *bus, unsigned short addr) in snd_i2c_probeaddr() argument
162 return bus->ops->probeaddr(bus, addr); in snd_i2c_probeaddr()
171 static inline void snd_i2c_bit_hw_start(struct snd_i2c_bus *bus) in snd_i2c_bit_hw_start() argument
173 if (bus->hw_ops.bit->start) in snd_i2c_bit_hw_start()
174 bus->hw_ops.bit->start(bus); in snd_i2c_bit_hw_start()
177 static inline void snd_i2c_bit_hw_stop(struct snd_i2c_bus *bus) in snd_i2c_bit_hw_stop() argument
179 if (bus->hw_ops.bit->stop) in snd_i2c_bit_hw_stop()
180 bus->hw_ops.bit->stop(bus); in snd_i2c_bit_hw_stop()
183 static void snd_i2c_bit_direction(struct snd_i2c_bus *bus, int clock, int data) in snd_i2c_bit_direction() argument
185 if (bus->hw_ops.bit->direction) in snd_i2c_bit_direction()
186 bus->hw_ops.bit->direction(bus, clock, data); in snd_i2c_bit_direction()
189 static void snd_i2c_bit_set(struct snd_i2c_bus *bus, int clock, int data) in snd_i2c_bit_set() argument
191 bus->hw_ops.bit->setlines(bus, clock, data); in snd_i2c_bit_set()
195 static int snd_i2c_bit_clock(struct snd_i2c_bus *bus)
197 if (bus->hw_ops.bit->getclock)
198 return bus->hw_ops.bit->getclock(bus);
203 static int snd_i2c_bit_data(struct snd_i2c_bus *bus, int ack) in snd_i2c_bit_data() argument
205 return bus->hw_ops.bit->getdata(bus, ack); in snd_i2c_bit_data()
208 static void snd_i2c_bit_start(struct snd_i2c_bus *bus) in snd_i2c_bit_start() argument
210 snd_i2c_bit_hw_start(bus); in snd_i2c_bit_start()
211 snd_i2c_bit_direction(bus, 1, 1); /* SCL - wr, SDA - wr */ in snd_i2c_bit_start()
212 snd_i2c_bit_set(bus, 1, 1); in snd_i2c_bit_start()
213 snd_i2c_bit_set(bus, 1, 0); in snd_i2c_bit_start()
214 snd_i2c_bit_set(bus, 0, 0); in snd_i2c_bit_start()
217 static void snd_i2c_bit_stop(struct snd_i2c_bus *bus) in snd_i2c_bit_stop() argument
219 snd_i2c_bit_set(bus, 0, 0); in snd_i2c_bit_stop()
220 snd_i2c_bit_set(bus, 1, 0); in snd_i2c_bit_stop()
221 snd_i2c_bit_set(bus, 1, 1); in snd_i2c_bit_stop()
222 snd_i2c_bit_hw_stop(bus); in snd_i2c_bit_stop()
225 static void snd_i2c_bit_send(struct snd_i2c_bus *bus, int data) in snd_i2c_bit_send() argument
227 snd_i2c_bit_set(bus, 0, data); in snd_i2c_bit_send()
228 snd_i2c_bit_set(bus, 1, data); in snd_i2c_bit_send()
229 snd_i2c_bit_set(bus, 0, data); in snd_i2c_bit_send()
232 static int snd_i2c_bit_ack(struct snd_i2c_bus *bus) in snd_i2c_bit_ack() argument
236 snd_i2c_bit_set(bus, 0, 1); in snd_i2c_bit_ack()
237 snd_i2c_bit_set(bus, 1, 1); in snd_i2c_bit_ack()
238 snd_i2c_bit_direction(bus, 1, 0); /* SCL - wr, SDA - rd */ in snd_i2c_bit_ack()
239 ack = snd_i2c_bit_data(bus, 1); in snd_i2c_bit_ack()
240 snd_i2c_bit_direction(bus, 1, 1); /* SCL - wr, SDA - wr */ in snd_i2c_bit_ack()
241 snd_i2c_bit_set(bus, 0, 1); in snd_i2c_bit_ack()
245 static int snd_i2c_bit_sendbyte(struct snd_i2c_bus *bus, unsigned char data) in snd_i2c_bit_sendbyte() argument
250 snd_i2c_bit_send(bus, !!(data & (1 << i))); in snd_i2c_bit_sendbyte()
251 err = snd_i2c_bit_ack(bus); in snd_i2c_bit_sendbyte()
257 static int snd_i2c_bit_readbyte(struct snd_i2c_bus *bus, int last) in snd_i2c_bit_readbyte() argument
262 snd_i2c_bit_set(bus, 0, 1); in snd_i2c_bit_readbyte()
263 snd_i2c_bit_direction(bus, 1, 0); /* SCL - wr, SDA - rd */ in snd_i2c_bit_readbyte()
265 snd_i2c_bit_set(bus, 1, 1); in snd_i2c_bit_readbyte()
266 if (snd_i2c_bit_data(bus, 0)) in snd_i2c_bit_readbyte()
268 snd_i2c_bit_set(bus, 0, 1); in snd_i2c_bit_readbyte()
270 snd_i2c_bit_direction(bus, 1, 1); /* SCL - wr, SDA - wr */ in snd_i2c_bit_readbyte()
271 snd_i2c_bit_send(bus, !!last); in snd_i2c_bit_readbyte()
278 struct snd_i2c_bus *bus = device->bus; in snd_i2c_bit_sendbytes() local
283 snd_i2c_bit_start(bus); in snd_i2c_bit_sendbytes()
284 err = snd_i2c_bit_sendbyte(bus, device->addr << 1); in snd_i2c_bit_sendbytes()
286 snd_i2c_bit_hw_stop(bus); in snd_i2c_bit_sendbytes()
290 err = snd_i2c_bit_sendbyte(bus, *bytes++); in snd_i2c_bit_sendbytes()
292 snd_i2c_bit_hw_stop(bus); in snd_i2c_bit_sendbytes()
297 snd_i2c_bit_stop(bus); in snd_i2c_bit_sendbytes()
304 struct snd_i2c_bus *bus = device->bus; in snd_i2c_bit_readbytes() local
309 snd_i2c_bit_start(bus); in snd_i2c_bit_readbytes()
310 err = snd_i2c_bit_sendbyte(bus, (device->addr << 1) | 1); in snd_i2c_bit_readbytes()
312 snd_i2c_bit_hw_stop(bus); in snd_i2c_bit_readbytes()
316 err = snd_i2c_bit_readbyte(bus, count == 0); in snd_i2c_bit_readbytes()
318 snd_i2c_bit_hw_stop(bus); in snd_i2c_bit_readbytes()
324 snd_i2c_bit_stop(bus); in snd_i2c_bit_readbytes()
328 static int snd_i2c_bit_probeaddr(struct snd_i2c_bus *bus, unsigned short addr) in snd_i2c_bit_probeaddr() argument
336 snd_i2c_bit_start(bus); in snd_i2c_bit_probeaddr()
337 err = snd_i2c_bit_sendbyte(bus, addr << 1); in snd_i2c_bit_probeaddr()
338 snd_i2c_bit_stop(bus); in snd_i2c_bit_probeaddr()