Lines Matching +full:auto +full:- +full:poll
1 // SPDX-License-Identifier: GPL-2.0
47 #define APD 0x10 /* auto-poll data */
80 .poll = macio_adb_poll,
92 return -ENODEV; in macio_probe()
103 return -ENXIO; in macio_init()
106 return -ENXIO; in macio_init()
110 return -ENOMEM; in macio_init()
113 out_8(&adb->ctrl.r, 0); in macio_init()
114 out_8(&adb->intr.r, 0); in macio_init()
115 out_8(&adb->error.r, 0); in macio_init()
116 out_8(&adb->active_hi.r, 0xff); /* for now, set all devices active */ in macio_init()
117 out_8(&adb->active_lo.r, 0xff); in macio_init()
118 out_8(&adb->autopoll.r, APE); in macio_init()
124 return -EAGAIN; in macio_init()
126 out_8(&adb->intr_enb.r, DFB | TAG); in macio_init()
128 printk("adb: mac-io driver 1.0 for unified ADB\n"); in macio_init()
138 out_8(&adb->active_hi.r, devs >> 8); in macio_adb_autopoll()
139 out_8(&adb->active_lo.r, devs); in macio_adb_autopoll()
140 out_8(&adb->autopoll.r, devs? APE: 0); in macio_adb_autopoll()
156 out_8(&adb->ctrl.r, in_8(&adb->ctrl.r) | ADB_RST); in macio_adb_reset_bus()
157 while ((in_8(&adb->ctrl.r) & ADB_RST) != 0) { in macio_adb_reset_bus()
158 if (--timeout == 0) { in macio_adb_reset_bus()
159 out_8(&adb->ctrl.r, in_8(&adb->ctrl.r) & ~ADB_RST); in macio_adb_reset_bus()
161 return -1; in macio_adb_reset_bus()
174 if (req->data[0] != ADB_PACKET) in macio_send_request()
175 return -EINVAL; in macio_send_request()
177 for (i = 0; i < req->nbytes - 1; ++i) in macio_send_request()
178 req->data[i] = req->data[i+1]; in macio_send_request()
179 --req->nbytes; in macio_send_request()
181 req->next = NULL; in macio_send_request()
182 req->sent = 0; in macio_send_request()
183 req->complete = 0; in macio_send_request()
184 req->reply_len = 0; in macio_send_request()
188 last_req->next = req; in macio_send_request()
192 out_8(&adb->ctrl.r, in_8(&adb->ctrl.r) | TAR); in macio_send_request()
197 while (!req->complete) in macio_send_request()
215 if (in_8(&adb->intr.r) & TAG) { in macio_adb_interrupt()
220 for (i = 0; i < req->nbytes; ++i) in macio_adb_interrupt()
221 out_8(&adb->data[i].r, req->data[i]); in macio_adb_interrupt()
222 out_8(&adb->dcount.r, req->nbytes & HMB); in macio_adb_interrupt()
223 req->sent = 1; in macio_adb_interrupt()
224 if (req->reply_expected) { in macio_adb_interrupt()
225 out_8(&adb->ctrl.r, DTB + CRE); in macio_adb_interrupt()
227 out_8(&adb->ctrl.r, DTB); in macio_adb_interrupt()
228 current_req = req->next; in macio_adb_interrupt()
231 out_8(&adb->ctrl.r, in_8(&adb->ctrl.r) | TAR); in macio_adb_interrupt()
234 out_8(&adb->intr.r, 0); in macio_adb_interrupt()
237 if (in_8(&adb->intr.r) & DFB) { in macio_adb_interrupt()
239 err = in_8(&adb->error.r); in macio_adb_interrupt()
240 if (current_req && current_req->sent) { in macio_adb_interrupt()
244 req->reply_len = in_8(&adb->dcount.r) & HMB; in macio_adb_interrupt()
245 for (i = 0; i < req->reply_len; ++i) in macio_adb_interrupt()
246 req->reply[i] = in_8(&adb->data[i].r); in macio_adb_interrupt()
248 current_req = req->next; in macio_adb_interrupt()
251 out_8(&adb->ctrl.r, in_8(&adb->ctrl.r) | TAR); in macio_adb_interrupt()
254 n = in_8(&adb->dcount.r) & HMB; in macio_adb_interrupt()
256 ibuf[i] = in_8(&adb->data[i].r); in macio_adb_interrupt()
258 autopoll = (in_8(&adb->dcount.r) & APD) != 0; in macio_adb_interrupt()
260 out_8(&adb->error.r, 0); in macio_adb_interrupt()
261 out_8(&adb->intr.r, 0); in macio_adb_interrupt()
265 void (*done)(struct adb_request *) = req->done; in macio_adb_interrupt()
267 req->complete = 1; in macio_adb_interrupt()
269 * struct request will survive to setting req->complete to 1 in macio_adb_interrupt()
285 if (in_8(&adb->intr.r) != 0) in macio_adb_poll()