pata_atp867x: PIO support fixes
PATCH 3/4 pata_atp867x: PIO support fixes
From: Bartlomiej Zolnierkiewicz <[email protected]>
Subject: [PATCH] pata_atp867x: PIO support fixes
* use 8 clk setting for active clocks == 7 (was 12 clk)
* use 12 clk setting for active clocks > 12 (was 8 clk)
* do 66MHz bus fixup before mapping active clocks
* fix setup of PIO command timings
Signed-off-by Bartlomiej Zolnierkiewicz <[email protected]>
--- drivers/ata/pata_atp867x.c | 36 +++++++++++++++++++----------------- 1 file changed, 19 insertions(+), 17 deletions(-)
drivers/ata/pata_atp867x.c +19 -17
@@ -155,30 +155,31 @@ static int atp867x_get_active_clocks_shistruct atp867x_priv *dp = ap->private_data;unsigned char clocks = clk; +/* +* Doc 6.6.9: increase the clock value by 1 for safer PIO speed +* on 66MHz bus +*/ +if (dp->pci66mhz) + clocks++; +switch (clocks) {case 0 : clocks =1 ;break ; - case 1 ... 7: -break ; - case 9 ... 12: - clocks =7 ; + case 1 ... 6:break ;default :printk (KERN_WARNING "ATP867X: active %dclk is invalid. " -"Using default 8clk.\n" , clk); +"Using 12clk.\n" , clk); + case 9 ... 12: + clocks =7 ;/* 12 clk */ +break ; +case 7 :case 8 :/* default 8 clk */ clocks =0 ; goto active_clock_shift_done; } -/* -* Doc 6.6.9: increase the clock value by 1 for safer PIO speed -* on 66MHz bus -*/ -if (dp->pci66mhz && clocks <7 ) - clocks++; - active_clock_shift_done:return clocks <<ATP867X_IO_PIOSPD_ACTIVE_SHIFT ; }
@@ -193,7 +194,8 @@ static int atp867x_get_recover_clocks_shbreak ; case 1 ... 11:break ; -case 13 :case 14 : +case 13 : +case 14 : --clocks;/* by the spec */ break ;case 15 :
@@ -235,16 +237,16 @@ static void atp867x_set_piomode(struct aiowrite8 (b, dp->dma_mode); b =atp867x_get_active_clocks_shifted (ap, t.active) | -atp867x_get_recover_clocks_shifted (t.recover); +atp867x_get_recover_clocks_shifted (t.recover);if (adev->devno &1 )iowrite8 (b, dp->slave_piospd);else iowrite8 (b, dp->mstr_piospd); -/* -* use the same value for comand timing as for PIO timimg -*/ + b =atp867x_get_active_clocks_shifted (ap, t.act8b) | +atp867x_get_recover_clocks_shifted (t.rec8b); +iowrite8 (b, dp->eightb_piospd); }