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
175 static int rd_byte(struct qib_devdata *dd, int last)
183 scl_out(dd, 1);
184 data |= sda_in(dd, 0);
185 scl_out(dd, 0);
188 scl_out(dd, 1);
189 stop_cmd(dd);
191 sda_out(dd, 0);
192 scl_out(dd, 1);
193 scl_out(dd, 0);
194 sda_out(dd, 1);
201 * @dd: the qlogic_ib device
206 static int wr_byte(struct qib_devdata *dd, u8 data)
213 sda_out(dd, bit);
214 scl_out(dd, 1);
215 scl_out(dd, 0);
217 return (!i2c_ackrcv(dd)) ? 1 : 0;
224 static void start_seq(struct qib_devdata *dd)
226 sda_out(dd, 1);
227 scl_out(dd, 1);
228 sda_out(dd, 0);
230 scl_out(dd, 0);
235 * @dd: the qlogic_ib device
239 static void stop_seq(struct qib_devdata *dd)
241 scl_out(dd, 0);
242 sda_out(dd, 0);
243 scl_out(dd, 1);
244 sda_out(dd, 1);
249 * @dd: the qlogic_ib device
253 static void stop_cmd(struct qib_devdata *dd)
255 stop_seq(dd);
261 * @dd: the qlogic_ib device
264 int qib_twsi_reset(struct qib_devdata *dd)
273 mask = (1UL << dd->gpio_scl_num) | (1UL << dd->gpio_sda_num);
280 dd->f_gpio_mod(dd, 0, 0, mask);
293 scl_out(dd, 0);
294 scl_out(dd, 1);
296 was_high |= sda_in(dd, 0);
305 pins = dd->f_gpio_mod(dd, 0, 0, 0);
307 qib_dev_err(dd, "GPIO pins not at rest: %d\n",
311 sda_out(dd, 0);
314 sda_out(dd, 1);
328 static int qib_twsi_wr(struct qib_devdata *dd, int data, int flags)
333 start_seq(dd);
335 ret = wr_byte(dd, data); /* Leaves SCL low (from i2c_ackrcv()) */
338 stop_cmd(dd);
357 int qib_twsi_blk_rd(struct qib_devdata *dd, int dev, int addr,
368 ret = qib_twsi_wr(dd, addr, QIB_TWSI_START);
371 ret = qib_twsi_wr(dd, dev | WRITE_CMD, QIB_TWSI_START);
373 stop_cmd(dd);
384 ret = qib_twsi_wr(dd, addr, 0);
388 qib_dev_err(dd,
394 ret = qib_twsi_wr(dd, dev | READ_CMD, QIB_TWSI_START);
397 stop_cmd(dd);
414 *bp++ = rd_byte(dd, !len);
435 int qib_twsi_blk_wr(struct qib_devdata *dd, int dev, int addr,
445 if (qib_twsi_wr(dd, (addr << 1) | WRITE_CMD,
451 if (qib_twsi_wr(dd, dev | WRITE_CMD, QIB_TWSI_START))
453 ret = qib_twsi_wr(dd, addr, 0);
455 qib_dev_err(dd,
467 if (qib_twsi_wr(dd, *bp++, 0))
470 stop_cmd(dd);
484 while (qib_twsi_wr(dd, dev | READ_CMD, QIB_TWSI_START)) {
485 stop_cmd(dd);
490 rd_byte(dd, 1);
497 stop_cmd(dd);