79: WaitUsec(1);
80: if ((in_w(addr) & mask) == value) break;
81: }
114: /* generate start condition */
115: out_w(IIC_IICC(ch), in_w(IIC_IICC(ch)) & ~IICC_ACKE);
116: out_w(IIC_IICC(ch), in_w(IIC_IICC(ch)) | IICC_STT);
117:
133: /* error check */
134: sts = in_w(IIC_IICSE(ch));
135: if ((sts & IICSE_ALD) || !(sts & IICSE_ACKD)) {
151: /* generate stop condition */
152: out_w(IIC_IICC(ch), in_w(IIC_IICC(ch)) | IICC_SPT);
153:
177: /* checking NAK */
178: sts = in_w(IIC_IICSE(ch));
179: if (!(sts & IICSE_ACKD)) {
197: if (cmd & IIC_TOPDATA) {
198: out_w(IIC_IICC(ch), in_w(IIC_IICC(ch)) & ~IICC_WTIM);
199: out_w(IIC_IICC(ch), in_w(IIC_IICC(ch)) | IICC_ACKE);
200: }
202: /* initiate data receive */
203: out_w(IIC_IICC(ch), in_w(IIC_IICC(ch)) | IICC_WREL);
204: er = wait_int();
210: /* read data */
211: *cmddata = (cmd & 0xff00) | (in_w(IIC_IIC(ch)) & 0xff);
212: er = E_OK;
215: if ((cmd & IIC_LASTDATA) || er < E_OK) {
216: out_w(IIC_IICC(ch), in_w(IIC_IICC(ch)) | IICC_WTIM);
217: out_w(IIC_IICC(ch), in_w(IIC_IICC(ch)) & ~IICC_ACKE);
218: out_w(IIC_IICC(ch), in_w(IIC_IICC(ch)) | IICC_WREL);
219: wait_int();