macintosh/adb-iop: Adopt bus reset algorithm from via-macii driver
authorFinn Thain <fthain@telegraphics.com.au>
Sat, 30 May 2020 23:17:03 +0000 (09:17 +1000)
committerMichael Ellerman <mpe@ellerman.id.au>
Sun, 26 Jul 2020 13:34:24 +0000 (23:34 +1000)
This algorithm is slightly shorter and avoids the surprising
adb_iop_start() call in adb_iop_poll().

Signed-off-by: Finn Thain <fthain@telegraphics.com.au>
Tested-by: Stan Johnson <userm57@yahoo.com>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Link: https://lore.kernel.org/r/b63d56ecb6e75f11a0bf02231f3b2db656a528a3.1590880623.git.fthain@telegraphics.com.au
drivers/macintosh/adb-iop.c

index ca3b411..c3089da 100644 (file)
@@ -238,24 +238,19 @@ int adb_iop_autopoll(int devs)
 
 void adb_iop_poll(void)
 {
-       if (adb_iop_state == idle)
-               adb_iop_start();
        iop_ism_irq_poll(ADB_IOP);
 }
 
 int adb_iop_reset_bus(void)
 {
-       struct adb_request req = {
-               .reply_expected = 0,
-               .nbytes = 2,
-               .data = { ADB_PACKET, 0 },
-       };
-
-       adb_iop_write(&req);
-       while (!req.complete) {
-               adb_iop_poll();
-               schedule();
-       }
+       struct adb_request req;
+
+       /* Command = 0, Address = ignored */
+       adb_request(&req, NULL, ADBREQ_NOSEND, 1, ADB_BUSRESET);
+       adb_iop_send_request(&req, 1);
+
+       /* Don't want any more requests during the Global Reset low time. */
+       mdelay(3);
 
        return 0;
 }