diff options
author | Bartlomiej Zolnierkiewicz <bzolnier@gmail.com> | 2008-02-02 13:56:31 -0500 |
---|---|---|
committer | Bartlomiej Zolnierkiewicz <bzolnier@gmail.com> | 2008-02-02 13:56:31 -0500 |
commit | bfa14b42a3bd671f0287b3db42e703e86ef27b48 (patch) | |
tree | ad902a99aa59232832d8e663be8d86a615e24114 /drivers/ide/pci/it8213.c | |
parent | c413b9b94d9a8e7548cc4b2e04b7df0439ce76fd (diff) |
ide: add ->cable_detect method to ide_hwif_t
* Add ->cable_detect method to ide_hwif_t.
* Call the new method in ide_init_port() if:
- the host supports UDMA modes > UDMA2 ('hwif->ultra_mask & 78')
- DMA initialization was successful (if hwif->dma_base is not set
ide_init_port() sets hwif->ultra_mask to zero)
- "idex=ata66" is not used ('hwif->cbl != ATA_CBL_PATA40_SHORT')
* Convert PCI host drivers to use ->cable_detect method.
While at it:
* Factor out cable detection to separate functions (if not already done).
* hpt366.c/it8213.c/slc90e66.c:
- don't check cable type if "idex=ata66" is used
* pdc202xx_new.c:
- add __devinit tag to pdcnew_cable_detect()
* pdc202xx_old.c:
- rename pdc202xx_old_cable_detect() to pdc2026x_old_cable_detect()
- add __devinit tag to pdc2026x_old_cable_detect()
Reviewed-by: Sergei Shtylyov <sshtylyov@ru.mvista.com>
Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
Diffstat (limited to 'drivers/ide/pci/it8213.c')
-rw-r--r-- | drivers/ide/pci/it8213.c | 21 |
1 files changed, 11 insertions, 10 deletions
diff --git a/drivers/ide/pci/it8213.c b/drivers/ide/pci/it8213.c index df74e588a530..c781ea6502d6 100644 --- a/drivers/ide/pci/it8213.c +++ b/drivers/ide/pci/it8213.c | |||
@@ -143,6 +143,16 @@ static void it8213_set_dma_mode(ide_drive_t *drive, const u8 speed) | |||
143 | } | 143 | } |
144 | } | 144 | } |
145 | 145 | ||
146 | static u8 __devinit it8213_cable_detect(ide_hwif_t *hwif) | ||
147 | { | ||
148 | struct pci_dev *dev = to_pci_dev(hwif->dev); | ||
149 | u8 reg42h = 0; | ||
150 | |||
151 | pci_read_config_byte(dev, 0x42, ®42h); | ||
152 | |||
153 | return (reg42h & 0x02) ? ATA_CBL_PATA40 : ATA_CBL_PATA80; | ||
154 | } | ||
155 | |||
146 | /** | 156 | /** |
147 | * init_hwif_it8213 - set up hwif structs | 157 | * init_hwif_it8213 - set up hwif structs |
148 | * @hwif: interface to set up | 158 | * @hwif: interface to set up |
@@ -152,19 +162,10 @@ static void it8213_set_dma_mode(ide_drive_t *drive, const u8 speed) | |||
152 | 162 | ||
153 | static void __devinit init_hwif_it8213(ide_hwif_t *hwif) | 163 | static void __devinit init_hwif_it8213(ide_hwif_t *hwif) |
154 | { | 164 | { |
155 | struct pci_dev *dev = to_pci_dev(hwif->dev); | ||
156 | u8 reg42h = 0; | ||
157 | |||
158 | hwif->set_dma_mode = &it8213_set_dma_mode; | 165 | hwif->set_dma_mode = &it8213_set_dma_mode; |
159 | hwif->set_pio_mode = &it8213_set_pio_mode; | 166 | hwif->set_pio_mode = &it8213_set_pio_mode; |
160 | 167 | ||
161 | if (!hwif->dma_base) | 168 | hwif->cable_detect = it8213_cable_detect; |
162 | return; | ||
163 | |||
164 | pci_read_config_byte(dev, 0x42, ®42h); | ||
165 | |||
166 | if (hwif->cbl != ATA_CBL_PATA40_SHORT) | ||
167 | hwif->cbl = (reg42h & 0x02) ? ATA_CBL_PATA40 : ATA_CBL_PATA80; | ||
168 | } | 169 | } |
169 | 170 | ||
170 | 171 | ||