diff options
author | Ondrej Zary <linux@zary.sk> | 2023-10-05 22:55:59 +0200 |
---|---|---|
committer | Damien Le Moal <dlemoal@kernel.org> | 2023-10-10 14:42:22 +0900 |
commit | 0c1e81d0b5ebd5813536dd5fcf5966ad043f37dc (patch) | |
tree | 2fffbe3fee79306b4c165753e204c228eb8cc7c6 | |
parent | f343e578fef99a69b3322aca38b94a6d8ded2ce7 (diff) | |
download | linux-0c1e81d0b5ebd5813536dd5fcf5966ad043f37dc.tar.gz |
ata: pata_parport: fit3: implement IDE command set registers
fit3 protocol driver does not support accessing IDE control registers
(device control/altstatus). The DOS driver does not use these registers
either (as observed from DOSEMU trace). But the HW seems to be capable
of accessing these registers - I simply tried bit 3 and it works!
The control register is required to properly reset ATAPI devices or
they will be detected only once (after a power cycle).
Tested with EXP Computer CD-865 with MC-1285B EPP cable and
TransDisk 3000.
Signed-off-by: Ondrej Zary <linux@zary.sk>
Reviewed-by: Sergey Shtylyov <s.shtylyov@omp.ru>
Signed-off-by: Damien Le Moal <dlemoal@kernel.org>
-rw-r--r-- | drivers/ata/pata_parport/fit3.c | 14 |
1 files changed, 2 insertions, 12 deletions
diff --git a/drivers/ata/pata_parport/fit3.c b/drivers/ata/pata_parport/fit3.c index bad7aa920cdca6..d2b81cf2e16d26 100644 --- a/drivers/ata/pata_parport/fit3.c +++ b/drivers/ata/pata_parport/fit3.c @@ -9,11 +9,6 @@ * * The TD-2000 and certain older devices use a different protocol. * Try the fit2 protocol module with them. - * - * NB: The FIT adapters do not appear to support the control - * registers. So, we map ALT_STATUS to STATUS and NO-OP writes - * to the device control register - this means that IDE reset - * will not work on these devices. */ #include <linux/module.h> @@ -37,8 +32,7 @@ static void fit3_write_regr(struct pi_adapter *pi, int cont, int regr, int val) { - if (cont == 1) - return; + regr += cont << 3; switch (pi->mode) { case 0: @@ -59,11 +53,7 @@ static int fit3_read_regr(struct pi_adapter *pi, int cont, int regr) { int a, b; - if (cont) { - if (regr != 6) - return 0xff; - regr = 7; - } + regr += cont << 3; switch (pi->mode) { case 0: |