Lines Matching refs:i2c
36 nvkm_i2c_pad_find(struct nvkm_i2c *i2c, int id) in nvkm_i2c_pad_find() argument
40 list_for_each_entry(pad, &i2c->pad, head) { in nvkm_i2c_pad_find()
49 nvkm_i2c_bus_find(struct nvkm_i2c *i2c, int id) in nvkm_i2c_bus_find() argument
51 struct nvkm_bios *bios = i2c->subdev.device->bios; in nvkm_i2c_bus_find()
56 u16 i2c = dcb_i2c_table(bios, &ver, &hdr, &cnt, &len); in nvkm_i2c_bus_find() local
57 if (i2c && ver >= 0x30) { in nvkm_i2c_bus_find()
58 u8 auxidx = nvbios_rd08(bios, i2c + 4); in nvkm_i2c_bus_find()
68 list_for_each_entry(bus, &i2c->bus, head) { in nvkm_i2c_bus_find()
77 nvkm_i2c_aux_find(struct nvkm_i2c *i2c, int id) in nvkm_i2c_aux_find() argument
81 list_for_each_entry(aux, &i2c->aux, head) { in nvkm_i2c_aux_find()
92 struct nvkm_i2c *i2c = container_of(event, typeof(*i2c), event); in nvkm_i2c_intr_fini() local
93 struct nvkm_i2c_aux *aux = nvkm_i2c_aux_find(i2c, id); in nvkm_i2c_intr_fini()
95 i2c->func->aux_mask(i2c, type, aux->intr, 0); in nvkm_i2c_intr_fini()
101 struct nvkm_i2c *i2c = container_of(event, typeof(*i2c), event); in nvkm_i2c_intr_init() local
102 struct nvkm_i2c_aux *aux = nvkm_i2c_aux_find(i2c, id); in nvkm_i2c_intr_init()
104 i2c->func->aux_mask(i2c, type, aux->intr, aux->intr); in nvkm_i2c_intr_init()
131 struct nvkm_i2c *i2c = nvkm_i2c(subdev); in nvkm_i2c_intr() local
135 if (!i2c->func->aux_stat) in nvkm_i2c_intr()
138 i2c->func->aux_stat(i2c, &hi, &lo, &rq, &tx); in nvkm_i2c_intr()
142 list_for_each_entry(aux, &i2c->aux, head) { in nvkm_i2c_intr()
152 nvkm_event_send(&i2c->event, rep.mask, aux->id, in nvkm_i2c_intr()
161 struct nvkm_i2c *i2c = nvkm_i2c(subdev); in nvkm_i2c_fini() local
165 if ((mask = (1 << i2c->func->aux) - 1), i2c->func->aux_stat) { in nvkm_i2c_fini()
166 i2c->func->aux_mask(i2c, NVKM_I2C_ANY, mask, 0); in nvkm_i2c_fini()
167 i2c->func->aux_stat(i2c, &mask, &mask, &mask, &mask); in nvkm_i2c_fini()
170 list_for_each_entry(pad, &i2c->pad, head) { in nvkm_i2c_fini()
180 struct nvkm_i2c *i2c = nvkm_i2c(subdev); in nvkm_i2c_init() local
184 list_for_each_entry(pad, &i2c->pad, head) { in nvkm_i2c_init()
188 list_for_each_entry(bus, &i2c->bus, head) { in nvkm_i2c_init()
198 struct nvkm_i2c *i2c = nvkm_i2c(subdev); in nvkm_i2c_dtor() local
200 nvkm_event_fini(&i2c->event); in nvkm_i2c_dtor()
202 while (!list_empty(&i2c->aux)) { in nvkm_i2c_dtor()
204 list_first_entry(&i2c->aux, typeof(*aux), head); in nvkm_i2c_dtor()
208 while (!list_empty(&i2c->bus)) { in nvkm_i2c_dtor()
210 list_first_entry(&i2c->bus, typeof(*bus), head); in nvkm_i2c_dtor()
214 while (!list_empty(&i2c->pad)) { in nvkm_i2c_dtor()
216 list_first_entry(&i2c->pad, typeof(*pad), head); in nvkm_i2c_dtor()
220 return i2c; in nvkm_i2c_dtor()
248 struct nvkm_i2c *i2c; in nvkm_i2c_new_() local
254 if (!(i2c = *pi2c = kzalloc(sizeof(*i2c), GFP_KERNEL))) in nvkm_i2c_new_()
257 nvkm_subdev_ctor(&nvkm_i2c, device, index, 0, &i2c->subdev); in nvkm_i2c_new_()
258 i2c->func = func; in nvkm_i2c_new_()
259 INIT_LIST_HEAD(&i2c->pad); in nvkm_i2c_new_()
260 INIT_LIST_HEAD(&i2c->bus); in nvkm_i2c_new_()
261 INIT_LIST_HEAD(&i2c->aux); in nvkm_i2c_new_()
269 nvkm_debug(&i2c->subdev, "ccb %02x: type %02x drive %02x " in nvkm_i2c_new_()
275 if (!(pad = nvkm_i2c_pad_find(i2c, id))) in nvkm_i2c_new_()
276 ret = func->pad_s_new(i2c, id, &pad); in nvkm_i2c_new_()
280 ret = func->pad_x_new(i2c, NVKM_I2C_PAD_CCB(i), &pad); in nvkm_i2c_new_()
284 nvkm_error(&i2c->subdev, "ccb %02x pad, %d\n", i, ret); in nvkm_i2c_new_()
304 nvkm_error(&i2c->subdev, "ccb %02x bus, %d\n", i, ret); in nvkm_i2c_new_()
319 nvkm_error(&i2c->subdev, "ccb %02x aux, %d\n", i, ret); in nvkm_i2c_new_()
324 nvkm_warn(&i2c->subdev, "ccb %02x was ignored\n", i); in nvkm_i2c_new_()
340 bus = nvkm_i2c_bus_find(i2c, dcbE.i2c_index); in nvkm_i2c_new_()
342 nvkm_debug(&i2c->subdev, "dcb %02x no bus\n", i); in nvkm_i2c_new_()
354 nvkm_debug(&i2c->subdev, "dcb %02x drv %02x unknown\n", in nvkm_i2c_new_()
360 pad = nvkm_i2c_pad_find(i2c, NVKM_I2C_PAD_EXT(dcbE.extdev)); in nvkm_i2c_new_()
365 nvkm_error(&i2c->subdev, "dcb %02x pad, %d\n", in nvkm_i2c_new_()
378 nvkm_error(&i2c->subdev, "dcb %02x aux, %d\n", in nvkm_i2c_new_()
388 nvkm_error(&i2c->subdev, "dcb %02x bus, %d\n", in nvkm_i2c_new_()
395 return nvkm_event_init(&nvkm_i2c_intr_func, 4, i, &i2c->event); in nvkm_i2c_new_()