diff options
| -rw-r--r-- | sys/dev/atkbdc/psm.c | 9 | ||||
| -rw-r--r-- | sys/isa/psm.c | 9 |
2 files changed, 18 insertions, 0 deletions
diff --git a/sys/dev/atkbdc/psm.c b/sys/dev/atkbdc/psm.c index 02222b572228..e4f14b1e7160 100644 --- a/sys/dev/atkbdc/psm.c +++ b/sys/dev/atkbdc/psm.c @@ -1040,6 +1040,10 @@ psmprobe(device_t dev) /* * NOTE: some controllers appears to hang the `keyboard' when the aux * port doesn't exist and `PSMC_RESET_DEV' is issued. + * + * Attempt to reset the controller twice -- this helps + * pierce through some KVM switches. The second reset + * is non-fatal. */ if (!reset_aux_dev(sc->kbdc)) { recover_from_error(sc->kbdc); @@ -1047,6 +1051,11 @@ psmprobe(device_t dev) if (verbose) printf("psm%d: failed to reset the aux device.\n", unit); endprobe(ENXIO); + } else if (!reset_aux_dev(sc->kbdc)) { + recover_from_error(sc->kbdc); + if (verbose >= 2) + printf("psm%d: failed to reset the aux device (2).\n", + unit); } } diff --git a/sys/isa/psm.c b/sys/isa/psm.c index 02222b572228..e4f14b1e7160 100644 --- a/sys/isa/psm.c +++ b/sys/isa/psm.c @@ -1040,6 +1040,10 @@ psmprobe(device_t dev) /* * NOTE: some controllers appears to hang the `keyboard' when the aux * port doesn't exist and `PSMC_RESET_DEV' is issued. + * + * Attempt to reset the controller twice -- this helps + * pierce through some KVM switches. The second reset + * is non-fatal. */ if (!reset_aux_dev(sc->kbdc)) { recover_from_error(sc->kbdc); @@ -1047,6 +1051,11 @@ psmprobe(device_t dev) if (verbose) printf("psm%d: failed to reset the aux device.\n", unit); endprobe(ENXIO); + } else if (!reset_aux_dev(sc->kbdc)) { + recover_from_error(sc->kbdc); + if (verbose >= 2) + printf("psm%d: failed to reset the aux device (2).\n", + unit); } } |
