Lines Matching refs:dd

60  * @dd: the qlogic_ib device
67 static void i2c_wait_for_writes(struct qib_devdata *dd)
74 dd->f_gpio_mod(dd, 0, 0, 0);
89 static void scl_out(struct qib_devdata *dd, u8 bit)
95 mask = 1UL << dd->gpio_scl_num;
98 dd->f_gpio_mod(dd, 0, bit ? 0 : mask, mask);
110 if (mask & dd->f_gpio_mod(dd, 0, 0, 0))
115 qib_dev_err(dd, "SCL interface stuck low > %d uSec\n",
118 i2c_wait_for_writes(dd);
121 static void sda_out(struct qib_devdata *dd, u8 bit)
125 mask = 1UL << dd->gpio_sda_num;
128 dd->f_gpio_mod(dd, 0, bit ? 0 : mask, mask);
130 i2c_wait_for_writes(dd);
134 static u8 sda_in(struct qib_devdata *dd, int wait)
139 bnum = dd->gpio_sda_num;
142 dd->f_gpio_mod(dd, 0, 0, mask);
143 read_val = dd->f_gpio_mod(dd, 0, 0, 0);
145 i2c_wait_for_writes(dd);
151 * @dd: the qlogic_ib device
153 static int i2c_ackrcv(struct qib_devdata *dd)
159 ack_received = sda_in(dd, 1);
160 scl_out(dd, 1);
161 ack_received = sda_in(dd, 1) == 0;
162 scl_out(dd, 0);
166 static void stop_cmd(struct qib_devdata *dd);
170 * @dd: the qlogic_ib device
174 static int rd_byte(struct qib_devdata *dd, int last)
182 scl_out(dd, 1);
183 data |= sda_in(dd, 0);
184 scl_out(dd, 0);
187 scl_out(dd, 1);
188 stop_cmd(dd);
190 sda_out(dd, 0);
191 scl_out(dd, 1);
192 scl_out(dd, 0);
193 sda_out(dd, 1);
200 * @dd: the qlogic_ib device
205 static int wr_byte(struct qib_devdata *dd, u8 data)
212 sda_out(dd, bit);
213 scl_out(dd, 1);
214 scl_out(dd, 0);
216 return (!i2c_ackrcv(dd)) ? 1 : 0;
223 static void start_seq(struct qib_devdata *dd)
225 sda_out(dd, 1);
226 scl_out(dd, 1);
227 sda_out(dd, 0);
229 scl_out(dd, 0);
234 * @dd: the qlogic_ib device
238 static void stop_seq(struct qib_devdata *dd)
240 scl_out(dd, 0);
241 sda_out(dd, 0);
242 scl_out(dd, 1);
243 sda_out(dd, 1);
248 * @dd: the qlogic_ib device
252 static void stop_cmd(struct qib_devdata *dd)
254 stop_seq(dd);
260 * @dd: the qlogic_ib device
263 int qib_twsi_reset(struct qib_devdata *dd)
272 mask = (1UL << dd->gpio_scl_num) | (1UL << dd->gpio_sda_num);
279 dd->f_gpio_mod(dd, 0, 0, mask);
292 scl_out(dd, 0);
293 scl_out(dd, 1);
295 was_high |= sda_in(dd, 0);
304 pins = dd->f_gpio_mod(dd, 0, 0, 0);
306 qib_dev_err(dd, "GPIO pins not at rest: %d\n",
310 sda_out(dd, 0);
313 sda_out(dd, 1);
327 static int qib_twsi_wr(struct qib_devdata *dd, int data, int flags)
332 start_seq(dd);
334 ret = wr_byte(dd, data); /* Leaves SCL low (from i2c_ackrcv()) */
337 stop_cmd(dd);
356 int qib_twsi_blk_rd(struct qib_devdata *dd, int dev, int addr,
367 ret = qib_twsi_wr(dd, addr, QIB_TWSI_START);
370 ret = qib_twsi_wr(dd, dev | WRITE_CMD, QIB_TWSI_START);
372 stop_cmd(dd);
383 ret = qib_twsi_wr(dd, addr, 0);
387 qib_dev_err(dd,
393 ret = qib_twsi_wr(dd, dev | READ_CMD, QIB_TWSI_START);
396 stop_cmd(dd);
413 *bp++ = rd_byte(dd, !len);
434 int qib_twsi_blk_wr(struct qib_devdata *dd, int dev, int addr,
444 if (qib_twsi_wr(dd, (addr << 1) | WRITE_CMD,
450 if (qib_twsi_wr(dd, dev | WRITE_CMD, QIB_TWSI_START))
452 ret = qib_twsi_wr(dd, addr, 0);
454 qib_dev_err(dd,
466 if (qib_twsi_wr(dd, *bp++, 0))
469 stop_cmd(dd);
483 while (qib_twsi_wr(dd, dev | READ_CMD, QIB_TWSI_START)) {
484 stop_cmd(dd);
489 rd_byte(dd, 1);
496 stop_cmd(dd);