Lines Matching full:port
39 struct nouveau_i2c_chan *port = data; in i2c_drive_scl() local
40 if (port->type == 0) { in i2c_drive_scl()
41 u8 val = NVReadVgaCrtc(port->dev, 0, port->drive); in i2c_drive_scl()
44 NVWriteVgaCrtc(port->dev, 0, port->drive, val | 0x01); in i2c_drive_scl()
46 if (port->type == 4) { in i2c_drive_scl()
47 nv_mask(port->dev, port->drive, 0x2f, state ? 0x21 : 0x01); in i2c_drive_scl()
49 if (port->type == 5) { in i2c_drive_scl()
50 if (state) port->state |= 0x01; in i2c_drive_scl()
51 else port->state &= 0xfe; in i2c_drive_scl()
52 nv_wr32(port->dev, port->drive, 4 | port->state); in i2c_drive_scl()
59 struct nouveau_i2c_chan *port = data; in i2c_drive_sda() local
60 if (port->type == 0) { in i2c_drive_sda()
61 u8 val = NVReadVgaCrtc(port->dev, 0, port->drive); in i2c_drive_sda()
64 NVWriteVgaCrtc(port->dev, 0, port->drive, val | 0x01); in i2c_drive_sda()
66 if (port->type == 4) { in i2c_drive_sda()
67 nv_mask(port->dev, port->drive, 0x1f, state ? 0x11 : 0x01); in i2c_drive_sda()
69 if (port->type == 5) { in i2c_drive_sda()
70 if (state) port->state |= 0x02; in i2c_drive_sda()
71 else port->state &= 0xfd; in i2c_drive_sda()
72 nv_wr32(port->dev, port->drive, 4 | port->state); in i2c_drive_sda()
79 struct nouveau_i2c_chan *port = data; in i2c_sense_scl() local
80 struct drm_nouveau_private *dev_priv = port->dev->dev_private; in i2c_sense_scl()
81 if (port->type == 0) { in i2c_sense_scl()
82 return !!(NVReadVgaCrtc(port->dev, 0, port->sense) & 0x04); in i2c_sense_scl()
84 if (port->type == 4) { in i2c_sense_scl()
85 return !!(nv_rd32(port->dev, port->sense) & 0x00040000); in i2c_sense_scl()
87 if (port->type == 5) { in i2c_sense_scl()
89 return !!(nv_rd32(port->dev, port->sense) & 0x01); in i2c_sense_scl()
91 return !!(nv_rd32(port->dev, port->sense) & 0x10); in i2c_sense_scl()
99 struct nouveau_i2c_chan *port = data; in i2c_sense_sda() local
100 struct drm_nouveau_private *dev_priv = port->dev->dev_private; in i2c_sense_sda()
101 if (port->type == 0) { in i2c_sense_sda()
102 return !!(NVReadVgaCrtc(port->dev, 0, port->sense) & 0x08); in i2c_sense_sda()
104 if (port->type == 4) { in i2c_sense_sda()
105 return !!(nv_rd32(port->dev, port->sense) & 0x00080000); in i2c_sense_sda()
107 if (port->type == 5) { in i2c_sense_sda()
109 return !!(nv_rd32(port->dev, port->sense) & 0x02); in i2c_sense_sda()
111 return !!(nv_rd32(port->dev, port->sense) & 0x20); in i2c_sense_sda()
117 i2c_delay(struct nouveau_i2c_chan *port, u32 nsec) in i2c_delay() argument
123 i2c_raise_scl(struct nouveau_i2c_chan *port) in i2c_raise_scl() argument
127 i2c_drive_scl(port, 1); in i2c_raise_scl()
129 i2c_delay(port, T_RISEFALL); in i2c_raise_scl()
130 } while (!i2c_sense_scl(port) && --timeout); in i2c_raise_scl()
136 i2c_start(struct nouveau_i2c_chan *port) in i2c_start() argument
140 port->state = i2c_sense_scl(port); in i2c_start()
141 port->state |= i2c_sense_sda(port) << 1; in i2c_start()
142 if (port->state != 3) { in i2c_start()
143 i2c_drive_scl(port, 0); in i2c_start()
144 i2c_drive_sda(port, 1); in i2c_start()
145 if (!i2c_raise_scl(port)) in i2c_start()
149 i2c_drive_sda(port, 0); in i2c_start()
150 i2c_delay(port, T_HOLD); in i2c_start()
151 i2c_drive_scl(port, 0); in i2c_start()
152 i2c_delay(port, T_HOLD); in i2c_start()
157 i2c_stop(struct nouveau_i2c_chan *port) in i2c_stop() argument
159 i2c_drive_scl(port, 0); in i2c_stop()
160 i2c_drive_sda(port, 0); in i2c_stop()
161 i2c_delay(port, T_RISEFALL); in i2c_stop()
163 i2c_drive_scl(port, 1); in i2c_stop()
164 i2c_delay(port, T_HOLD); in i2c_stop()
165 i2c_drive_sda(port, 1); in i2c_stop()
166 i2c_delay(port, T_HOLD); in i2c_stop()
170 i2c_bitw(struct nouveau_i2c_chan *port, int sda) in i2c_bitw() argument
172 i2c_drive_sda(port, sda); in i2c_bitw()
173 i2c_delay(port, T_RISEFALL); in i2c_bitw()
175 if (!i2c_raise_scl(port)) in i2c_bitw()
177 i2c_delay(port, T_HOLD); in i2c_bitw()
179 i2c_drive_scl(port, 0); in i2c_bitw()
180 i2c_delay(port, T_HOLD); in i2c_bitw()
185 i2c_bitr(struct nouveau_i2c_chan *port) in i2c_bitr() argument
189 i2c_drive_sda(port, 1); in i2c_bitr()
190 i2c_delay(port, T_RISEFALL); in i2c_bitr()
192 if (!i2c_raise_scl(port)) in i2c_bitr()
194 i2c_delay(port, T_HOLD); in i2c_bitr()
196 sda = i2c_sense_sda(port); in i2c_bitr()
198 i2c_drive_scl(port, 0); in i2c_bitr()
199 i2c_delay(port, T_HOLD); in i2c_bitr()
204 i2c_get_byte(struct nouveau_i2c_chan *port, u8 *byte, bool last) in i2c_get_byte() argument
210 bit = i2c_bitr(port); in i2c_get_byte()
216 return i2c_bitw(port, last ? 1 : 0); in i2c_get_byte()
220 i2c_put_byte(struct nouveau_i2c_chan *port, u8 byte) in i2c_put_byte() argument
224 ret = i2c_bitw(port, !!(byte & (1 << i))); in i2c_put_byte()
229 ret = i2c_bitr(port); in i2c_put_byte()
236 i2c_addr(struct nouveau_i2c_chan *port, struct i2c_msg *msg) in i2c_addr() argument
241 return i2c_put_byte(port, addr); in i2c_addr()
247 struct nouveau_i2c_chan *port = (struct nouveau_i2c_chan *)adap; in i2c_bit_xfer() local
255 ret = i2c_start(port); in i2c_bit_xfer()
257 ret = i2c_addr(port, msg); in i2c_bit_xfer()
261 ret = i2c_get_byte(port, ptr++, !remaining); in i2c_bit_xfer()
264 ret = i2c_put_byte(port, *ptr++); in i2c_bit_xfer()
270 i2c_stop(port); in i2c_bit_xfer()
317 struct nouveau_i2c_chan *port; in nouveau_i2c_init() local
365 port = kzalloc(sizeof(*port), GFP_KERNEL); in nouveau_i2c_init()
366 if (port == NULL) { in nouveau_i2c_init()
371 port->type = entry[3]; in nouveau_i2c_init()
373 port->type &= 0x07; in nouveau_i2c_init()
374 if (port->type == 0x07) in nouveau_i2c_init()
375 port->type = 0xff; in nouveau_i2c_init()
378 if (port->type == 0xff) { in nouveau_i2c_init()
379 kfree(port); in nouveau_i2c_init()
383 switch (port->type) { in nouveau_i2c_init()
385 port->drive = entry[0]; in nouveau_i2c_init()
386 port->sense = entry[1]; in nouveau_i2c_init()
387 port->adapter.algo = &i2c_bit_algo; in nouveau_i2c_init()
390 port->drive = 0x600800 + entry[1]; in nouveau_i2c_init()
391 port->sense = port->drive; in nouveau_i2c_init()
392 port->adapter.algo = &i2c_bit_algo; in nouveau_i2c_init()
395 port->drive = entry[0] & 0x0f; in nouveau_i2c_init()
397 if (port->drive >= ARRAY_SIZE(nv50_i2c_port)) in nouveau_i2c_init()
399 port->drive = nv50_i2c_port[port->drive]; in nouveau_i2c_init()
400 port->sense = port->drive; in nouveau_i2c_init()
402 port->drive = 0x00d014 + (port->drive * 0x20); in nouveau_i2c_init()
403 port->sense = port->drive; in nouveau_i2c_init()
405 port->adapter.algo = &i2c_bit_algo; in nouveau_i2c_init()
408 port->drive = entry[0]; in nouveau_i2c_init()
409 port->sense = port->drive; in nouveau_i2c_init()
410 port->adapter.algo = &nouveau_dp_i2c_algo; in nouveau_i2c_init()
416 if (!port->adapter.algo) { in nouveau_i2c_init()
418 i, port->type, port->drive, port->sense); in nouveau_i2c_init()
419 kfree(port); in nouveau_i2c_init()
423 snprintf(port->adapter.name, sizeof(port->adapter.name), in nouveau_i2c_init()
425 port->adapter.owner = THIS_MODULE; in nouveau_i2c_init()
426 port->adapter.dev.parent = &dev->pdev->dev; in nouveau_i2c_init()
427 port->dev = dev; in nouveau_i2c_init()
428 port->index = i; in nouveau_i2c_init()
429 port->dcb = ROM32(entry[0]); in nouveau_i2c_init()
430 i2c_set_adapdata(&port->adapter, i2c); in nouveau_i2c_init()
432 ret = i2c_add_adapter(&port->adapter); in nouveau_i2c_init()
435 kfree(port); in nouveau_i2c_init()
439 list_add_tail(&port->head, &dev_priv->i2c_ports); in nouveau_i2c_init()
449 struct nouveau_i2c_chan *port, *tmp; in nouveau_i2c_fini() local
451 list_for_each_entry_safe(port, tmp, &dev_priv->i2c_ports, head) { in nouveau_i2c_fini()
452 i2c_del_adapter(&port->adapter); in nouveau_i2c_fini()
453 kfree(port); in nouveau_i2c_fini()
461 struct nouveau_i2c_chan *port; in nouveau_i2c_find() local
476 list_for_each_entry(port, &dev_priv->i2c_ports, head) { in nouveau_i2c_find()
477 if (port->index == index) in nouveau_i2c_find()
481 if (&port->head == &dev_priv->i2c_ports) in nouveau_i2c_find()
484 if (dev_priv->card_type >= NV_50 && (port->dcb & 0x00000100)) { in nouveau_i2c_find()
486 if (port->type == 6) { in nouveau_i2c_find()
487 reg += port->drive * 0x50; in nouveau_i2c_find()
490 reg += ((port->dcb & 0x1e00) >> 9) * 0x50; in nouveau_i2c_find()
500 return port; in nouveau_i2c_find()