Lines Matching refs:i2c
116 struct nvkm_i2c *i2c = nvkm_i2c(parent); in nvkm_i2c_port_create_() local
161 list_add_tail(&port->head, &i2c->ports); in nvkm_i2c_port_create_()
170 nvkm_i2c_find(struct nvkm_i2c *i2c, u8 index) in nvkm_i2c_find() argument
172 struct nvkm_bios *bios = nvkm_bios(i2c); in nvkm_i2c_find()
178 u16 i2c = dcb_i2c_table(bios, &ver, &hdr, &cnt, &len); in nvkm_i2c_find() local
179 if (i2c && ver >= 0x30) { in nvkm_i2c_find()
180 u8 auxidx = nv_ro08(bios, i2c + 4); in nvkm_i2c_find()
190 list_for_each_entry(port, &i2c->ports, head) { in nvkm_i2c_find()
199 nvkm_i2c_find_type(struct nvkm_i2c *i2c, u16 type) in nvkm_i2c_find_type() argument
203 list_for_each_entry(port, &i2c->ports, head) { in nvkm_i2c_find_type()
215 struct nvkm_i2c *i2c = nvkm_i2c(port); in nvkm_i2c_release_pad() local
219 wake_up_all(&i2c->wait); in nvkm_i2c_release_pad()
247 struct nvkm_i2c *i2c = nvkm_i2c(port); in nvkm_i2c_acquire_pad() local
250 if (wait_event_timeout(i2c->wait, in nvkm_i2c_acquire_pad()
255 wait_event(i2c->wait, nvkm_i2c_try_acquire_pad(port) == 0); in nvkm_i2c_acquire_pad()
281 nvkm_i2c_identify(struct nvkm_i2c *i2c, int index, const char *what, in nvkm_i2c_identify() argument
286 struct nvkm_i2c_port *port = nvkm_i2c_find(i2c, index); in nvkm_i2c_identify()
290 nv_debug(i2c, "no bus when probing %s on %d\n", what, index); in nvkm_i2c_identify()
294 nv_debug(i2c, "probing %ss on bus: %d\n", what, port->index); in nvkm_i2c_identify()
301 nv_debug(i2c, "using custom udelay %d instead of %d\n", in nvkm_i2c_identify()
309 nv_info(i2c, "detected %s: %s\n", what, in nvkm_i2c_identify()
320 nv_debug(i2c, "no devices found.\n"); in nvkm_i2c_identify()
327 struct nvkm_i2c *i2c = container_of(event, typeof(*i2c), event); in nvkm_i2c_intr_fini() local
328 struct nvkm_i2c_port *port = i2c->find(i2c, index); in nvkm_i2c_intr_fini()
329 const struct nvkm_i2c_impl *impl = (void *)nv_object(i2c)->oclass; in nvkm_i2c_intr_fini()
331 impl->aux_mask(i2c, type, 1 << port->aux, 0); in nvkm_i2c_intr_fini()
337 struct nvkm_i2c *i2c = container_of(event, typeof(*i2c), event); in nvkm_i2c_intr_init() local
338 struct nvkm_i2c_port *port = i2c->find(i2c, index); in nvkm_i2c_intr_init()
339 const struct nvkm_i2c_impl *impl = (void *)nv_object(i2c)->oclass; in nvkm_i2c_intr_init()
341 impl->aux_mask(i2c, type, 1 << port->aux, 1 << port->aux); in nvkm_i2c_intr_init()
362 struct nvkm_i2c *i2c = nvkm_i2c(subdev); in nvkm_i2c_intr() local
367 impl->aux_stat(i2c, &hi, &lo, &rq, &tx); in nvkm_i2c_intr()
369 list_for_each_entry(port, &i2c->ports, head) { in nvkm_i2c_intr()
381 nvkm_event_send(&i2c->event, rep.mask, in nvkm_i2c_intr()
401 struct nvkm_i2c *i2c = (void *)object; in _nvkm_i2c_fini() local
406 list_for_each_entry(port, &i2c->ports, head) { in _nvkm_i2c_fini()
413 impl->aux_mask(i2c, NVKM_I2C_ANY, mask, 0); in _nvkm_i2c_fini()
414 impl->aux_stat(i2c, &mask, &mask, &mask, &mask); in _nvkm_i2c_fini()
417 return nvkm_subdev_fini(&i2c->base, suspend); in _nvkm_i2c_fini()
419 list_for_each_entry_continue_reverse(port, &i2c->ports, head) { in _nvkm_i2c_fini()
429 struct nvkm_i2c *i2c = (void *)object; in _nvkm_i2c_init() local
433 ret = nvkm_subdev_init(&i2c->base); in _nvkm_i2c_init()
435 list_for_each_entry(port, &i2c->ports, head) { in _nvkm_i2c_init()
444 list_for_each_entry_continue_reverse(port, &i2c->ports, head) { in _nvkm_i2c_init()
454 struct nvkm_i2c *i2c = (void *)object; in _nvkm_i2c_dtor() local
457 nvkm_event_fini(&i2c->event); in _nvkm_i2c_dtor()
459 list_for_each_entry_safe(port, temp, &i2c->ports, head) { in _nvkm_i2c_dtor()
463 nvkm_subdev_destroy(&i2c->base); in _nvkm_i2c_dtor()
472 nvkm_i2c_create_port(struct nvkm_i2c *i2c, int index, u8 type, in nvkm_i2c_create_port() argument
475 const struct nvkm_i2c_impl *impl = (void *)nv_oclass(i2c); in nvkm_i2c_create_port()
492 ret = nvkm_object_ctor(nv_object(i2c), NULL, oclass, in nvkm_i2c_create_port()
514 struct nvkm_i2c *i2c; in nvkm_i2c_create_() local
522 ret = nvkm_subdev_create(parent, engine, oclass, 0, "I2C", "i2c", &i2c); in nvkm_i2c_create_()
523 *pobject = nv_object(i2c); in nvkm_i2c_create_()
527 nv_subdev(i2c)->intr = nvkm_i2c_intr; in nvkm_i2c_create_()
528 i2c->find = nvkm_i2c_find; in nvkm_i2c_create_()
529 i2c->find_type = nvkm_i2c_find_type; in nvkm_i2c_create_()
530 i2c->acquire_pad = nvkm_i2c_acquire_pad; in nvkm_i2c_create_()
531 i2c->release_pad = nvkm_i2c_release_pad; in nvkm_i2c_create_()
532 i2c->acquire = nvkm_i2c_acquire; in nvkm_i2c_create_()
533 i2c->release = nvkm_i2c_release; in nvkm_i2c_create_()
534 i2c->identify = nvkm_i2c_identify; in nvkm_i2c_create_()
535 init_waitqueue_head(&i2c->wait); in nvkm_i2c_create_()
536 INIT_LIST_HEAD(&i2c->ports); in nvkm_i2c_create_()
543 nvkm_i2c_create_port(i2c, NV_I2C_PORT(index), in nvkm_i2c_create_()
547 nvkm_i2c_create_port(i2c, NV_I2C_AUX(index), in nvkm_i2c_create_()
552 nvkm_i2c_create_port(i2c, NV_I2C_PORT(index), in nvkm_i2c_create_()
556 nvkm_i2c_create_port(i2c, NV_I2C_AUX(index), in nvkm_i2c_create_()
590 parent = nv_object(i2c->find(i2c, outp.i2c_index)); in nvkm_i2c_create_()
601 ret = nvkm_event_init(&nvkm_i2c_intr_func, 4, index, &i2c->event); in nvkm_i2c_create_()
613 struct nvkm_i2c *i2c; in _nvkm_i2c_ctor() local
616 ret = nvkm_i2c_create(parent, engine, oclass, &i2c); in _nvkm_i2c_ctor()
617 *pobject = nv_object(i2c); in _nvkm_i2c_ctor()