diff options
author | David Woodhouse <dwmw2@infradead.org> | 2007-02-05 13:25:21 +0000 |
---|---|---|
committer | David Woodhouse <dwmw2@infradead.org> | 2007-02-05 13:25:21 +0000 |
commit | 4285431fb658263e98942ce2320b0b26eddcc06d (patch) | |
tree | 49bce2d36917cb628ccddee55a47026da2ed90db /drivers/ata/sata_via.c | |
parent | c033a7e3d593554ba5e8a0e63bf7e5874dc3e92f (diff) | |
parent | 62d0cfcb27cf755cebdc93ca95dabc83608007cd (diff) | |
download | blackbird-op-linux-4285431fb658263e98942ce2320b0b26eddcc06d.tar.gz blackbird-op-linux-4285431fb658263e98942ce2320b0b26eddcc06d.zip |
Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6
Diffstat (limited to 'drivers/ata/sata_via.c')
-rw-r--r-- | drivers/ata/sata_via.c | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/drivers/ata/sata_via.c b/drivers/ata/sata_via.c index 88f0565c8883..d3d5c0d57032 100644 --- a/drivers/ata/sata_via.c +++ b/drivers/ata/sata_via.c @@ -74,6 +74,7 @@ enum { static int svia_init_one (struct pci_dev *pdev, const struct pci_device_id *ent); static u32 svia_scr_read (struct ata_port *ap, unsigned int sc_reg); static void svia_scr_write (struct ata_port *ap, unsigned int sc_reg, u32 val); +static void svia_noop_freeze(struct ata_port *ap); static void vt6420_error_handler(struct ata_port *ap); static const struct pci_device_id svia_pci_tbl[] = { @@ -128,7 +129,7 @@ static const struct ata_port_operations vt6420_sata_ops = { .qc_issue = ata_qc_issue_prot, .data_xfer = ata_pio_data_xfer, - .freeze = ata_bmdma_freeze, + .freeze = svia_noop_freeze, .thaw = ata_bmdma_thaw, .error_handler = vt6420_error_handler, .post_internal_cmd = ata_bmdma_post_internal_cmd, @@ -204,6 +205,15 @@ static void svia_scr_write (struct ata_port *ap, unsigned int sc_reg, u32 val) outl(val, ap->ioaddr.scr_addr + (4 * sc_reg)); } +static void svia_noop_freeze(struct ata_port *ap) +{ + /* Some VIA controllers choke if ATA_NIEN is manipulated in + * certain way. Leave it alone and just clear pending IRQ. + */ + ata_chk_status(ap); + ata_bmdma_irq_clear(ap); +} + /** * vt6420_prereset - prereset for vt6420 * @ap: target ATA port |