Commit a0fcdc02 authored by Jeff Garzik's avatar Jeff Garzik

[libata] Update several PATA drivers for new ->cable_detect hook

All patches authored and signed-off-by Alan Cox, sent on Mar 7, 2007.
I merely combined them all into a single patch.
Signed-off-by: default avatarJeff Garzik <jeff@garzik.org>
parent 6a3d586d
...@@ -25,7 +25,7 @@ ...@@ -25,7 +25,7 @@
#include <linux/libata.h> #include <linux/libata.h>
#define DRV_NAME "pata_hpt3x2n" #define DRV_NAME "pata_hpt3x2n"
#define DRV_VERSION "0.3.2" #define DRV_VERSION "0.3.3"
enum { enum {
HPT_PCI_FAST = (1 << 31), HPT_PCI_FAST = (1 << 31),
...@@ -115,14 +115,13 @@ static u32 hpt3x2n_find_mode(struct ata_port *ap, int speed) ...@@ -115,14 +115,13 @@ static u32 hpt3x2n_find_mode(struct ata_port *ap, int speed)
} }
/** /**
* hpt3x2n_pre_reset - reset the hpt3x2n bus * hpt3x2n_cable_detect - Detect the cable type
* @ap: ATA port to reset * @ap: ATA port to detect on
* *
* Perform the initial reset handling for the 3x2n series controllers. * Return the cable type attached to this port
* Reset the hardware and state machine, obtain the cable type.
*/ */
static int hpt3xn_pre_reset(struct ata_port *ap) static int hpt3x2n_cable_detect(struct ata_port *ap)
{ {
u8 scr2, ata66; u8 scr2, ata66;
struct pci_dev *pdev = to_pci_dev(ap->host->dev); struct pci_dev *pdev = to_pci_dev(ap->host->dev);
...@@ -135,15 +134,26 @@ static int hpt3xn_pre_reset(struct ata_port *ap) ...@@ -135,15 +134,26 @@ static int hpt3xn_pre_reset(struct ata_port *ap)
pci_write_config_byte(pdev, 0x5B, scr2); pci_write_config_byte(pdev, 0x5B, scr2);
if (ata66 & (1 << ap->port_no)) if (ata66 & (1 << ap->port_no))
ap->cbl = ATA_CBL_PATA40; return ATA_CBL_PATA40;
else else
ap->cbl = ATA_CBL_PATA80; return ATA_CBL_PATA80;
}
/**
* hpt3x2n_pre_reset - reset the hpt3x2n bus
* @ap: ATA port to reset
*
* Perform the initial reset handling for the 3x2n series controllers.
* Reset the hardware and state machine,
*/
static int hpt3xn_pre_reset(struct ata_port *ap)
{
struct pci_dev *pdev = to_pci_dev(ap->host->dev);
/* Reset the state machine */ /* Reset the state machine */
pci_write_config_byte(pdev, 0x50, 0x37); pci_write_config_byte(pdev, 0x50, 0x37);
pci_write_config_byte(pdev, 0x54, 0x37); pci_write_config_byte(pdev, 0x54, 0x37);
udelay(100); udelay(100);
return ata_std_prereset(ap); return ata_std_prereset(ap);
} }
...@@ -364,6 +374,7 @@ static struct ata_port_operations hpt3x2n_port_ops = { ...@@ -364,6 +374,7 @@ static struct ata_port_operations hpt3x2n_port_ops = {
.thaw = ata_bmdma_thaw, .thaw = ata_bmdma_thaw,
.error_handler = hpt3x2n_error_handler, .error_handler = hpt3x2n_error_handler,
.post_internal_cmd = ata_bmdma_post_internal_cmd, .post_internal_cmd = ata_bmdma_post_internal_cmd,
.cable_detect = hpt3x2n_cable_detect,
.bmdma_setup = ata_bmdma_setup, .bmdma_setup = ata_bmdma_setup,
.bmdma_start = ata_bmdma_start, .bmdma_start = ata_bmdma_start,
......
...@@ -80,7 +80,7 @@ ...@@ -80,7 +80,7 @@
#define DRV_NAME "pata_it821x" #define DRV_NAME "pata_it821x"
#define DRV_VERSION "0.3.4" #define DRV_VERSION "0.3.6"
struct it821x_dev struct it821x_dev
{ {
...@@ -112,31 +112,6 @@ struct it821x_dev ...@@ -112,31 +112,6 @@ struct it821x_dev
static int it8212_noraid; static int it8212_noraid;
/**
* it821x_pre_reset - probe
* @ap: ATA port
*
* Set the cable type
*/
static int it821x_pre_reset(struct ata_port *ap)
{
ap->cbl = ATA_CBL_PATA80;
return ata_std_prereset(ap);
}
/**
* it821x_error_handler - probe/reset
* @ap: ATA port
*
* Set the cable type and trigger a probe
*/
static void it821x_error_handler(struct ata_port *ap)
{
return ata_bmdma_drive_eh(ap, it821x_pre_reset, ata_std_softreset, NULL, ata_std_postreset);
}
/** /**
* it821x_program - program the PIO/MWDMA registers * it821x_program - program the PIO/MWDMA registers
* @ap: ATA port * @ap: ATA port
...@@ -666,8 +641,9 @@ static struct ata_port_operations it821x_smart_port_ops = { ...@@ -666,8 +641,9 @@ static struct ata_port_operations it821x_smart_port_ops = {
.freeze = ata_bmdma_freeze, .freeze = ata_bmdma_freeze,
.thaw = ata_bmdma_thaw, .thaw = ata_bmdma_thaw,
.error_handler = it821x_error_handler, .error_handler = ata_bmdma_error_handler,
.post_internal_cmd = ata_bmdma_post_internal_cmd, .post_internal_cmd = ata_bmdma_post_internal_cmd,
.cable_detect = ata_cable_unknown,
.bmdma_setup = ata_bmdma_setup, .bmdma_setup = ata_bmdma_setup,
.bmdma_start = ata_bmdma_start, .bmdma_start = ata_bmdma_start,
...@@ -702,8 +678,9 @@ static struct ata_port_operations it821x_passthru_port_ops = { ...@@ -702,8 +678,9 @@ static struct ata_port_operations it821x_passthru_port_ops = {
.freeze = ata_bmdma_freeze, .freeze = ata_bmdma_freeze,
.thaw = ata_bmdma_thaw, .thaw = ata_bmdma_thaw,
.error_handler = it821x_error_handler, .error_handler = ata_bmdma_error_handler,
.post_internal_cmd = ata_bmdma_post_internal_cmd, .post_internal_cmd = ata_bmdma_post_internal_cmd,
.cable_detect = ata_cable_unknown,
.bmdma_setup = ata_bmdma_setup, .bmdma_setup = ata_bmdma_setup,
.bmdma_start = it821x_passthru_bmdma_start, .bmdma_start = it821x_passthru_bmdma_start,
......
...@@ -24,7 +24,7 @@ ...@@ -24,7 +24,7 @@
#define DRV_NAME "mpc52xx_ata" #define DRV_NAME "mpc52xx_ata"
#define DRV_VERSION "0.1.0" #define DRV_VERSION "0.1.0ac2"
/* Private structures used by the driver */ /* Private structures used by the driver */
...@@ -297,6 +297,7 @@ static struct ata_port_operations mpc52xx_ata_port_ops = { ...@@ -297,6 +297,7 @@ static struct ata_port_operations mpc52xx_ata_port_ops = {
.freeze = ata_bmdma_freeze, .freeze = ata_bmdma_freeze,
.thaw = ata_bmdma_thaw, .thaw = ata_bmdma_thaw,
.error_handler = mpc52xx_ata_error_handler, .error_handler = mpc52xx_ata_error_handler,
.cable_detect = ata_cable_40wire,
.qc_prep = ata_qc_prep, .qc_prep = ata_qc_prep,
.qc_issue = ata_qc_issue_prot, .qc_issue = ata_qc_issue_prot,
.data_xfer = ata_data_xfer, .data_xfer = ata_data_xfer,
......
...@@ -35,7 +35,7 @@ ...@@ -35,7 +35,7 @@
#include <linux/libata.h> #include <linux/libata.h>
#define DRV_NAME "pata_mpiix" #define DRV_NAME "pata_mpiix"
#define DRV_VERSION "0.7.5" #define DRV_VERSION "0.7.6"
enum { enum {
IDETIM = 0x6C, /* IDE control register */ IDETIM = 0x6C, /* IDE control register */
...@@ -53,7 +53,6 @@ static int mpiix_pre_reset(struct ata_port *ap) ...@@ -53,7 +53,6 @@ static int mpiix_pre_reset(struct ata_port *ap)
if (!pci_test_config_bits(pdev, &mpiix_enable_bits)) if (!pci_test_config_bits(pdev, &mpiix_enable_bits))
return -ENOENT; return -ENOENT;
ap->cbl = ATA_CBL_PATA40;
return ata_std_prereset(ap); return ata_std_prereset(ap);
} }
...@@ -185,6 +184,7 @@ static struct ata_port_operations mpiix_port_ops = { ...@@ -185,6 +184,7 @@ static struct ata_port_operations mpiix_port_ops = {
.thaw = ata_bmdma_thaw, .thaw = ata_bmdma_thaw,
.error_handler = mpiix_error_handler, .error_handler = mpiix_error_handler,
.post_internal_cmd = ata_bmdma_post_internal_cmd, .post_internal_cmd = ata_bmdma_post_internal_cmd,
.cable_detect = ata_cable_40wire,
.qc_prep = ata_qc_prep, .qc_prep = ata_qc_prep,
.qc_issue = mpiix_qc_issue_prot, .qc_issue = mpiix_qc_issue_prot,
......
...@@ -28,13 +28,13 @@ ...@@ -28,13 +28,13 @@
#include <linux/libata.h> #include <linux/libata.h>
#define DRV_NAME "pata_ns87410" #define DRV_NAME "pata_ns87410"
#define DRV_VERSION "0.4.3" #define DRV_VERSION "0.4.6"
/** /**
* ns87410_pre_reset - probe begin * ns87410_pre_reset - probe begin
* @ap: ATA port * @ap: ATA port
* *
* Set up cable type and use generic probe init * Check enabled ports
*/ */
static int ns87410_pre_reset(struct ata_port *ap) static int ns87410_pre_reset(struct ata_port *ap)
...@@ -47,7 +47,6 @@ static int ns87410_pre_reset(struct ata_port *ap) ...@@ -47,7 +47,6 @@ static int ns87410_pre_reset(struct ata_port *ap)
if (!pci_test_config_bits(pdev, &ns87410_enable_bits[ap->port_no])) if (!pci_test_config_bits(pdev, &ns87410_enable_bits[ap->port_no]))
return -ENOENT; return -ENOENT;
ap->cbl = ATA_CBL_PATA40;
return ata_std_prereset(ap); return ata_std_prereset(ap);
} }
...@@ -177,6 +176,7 @@ static struct ata_port_operations ns87410_port_ops = { ...@@ -177,6 +176,7 @@ static struct ata_port_operations ns87410_port_ops = {
.thaw = ata_bmdma_thaw, .thaw = ata_bmdma_thaw,
.error_handler = ns87410_error_handler, .error_handler = ns87410_error_handler,
.post_internal_cmd = ata_bmdma_post_internal_cmd, .post_internal_cmd = ata_bmdma_post_internal_cmd,
.cable_detect = ata_cable_40wire,
.qc_prep = ata_qc_prep, .qc_prep = ata_qc_prep,
.qc_issue = ns87410_qc_issue_prot, .qc_issue = ns87410_qc_issue_prot,
......
...@@ -25,7 +25,7 @@ ...@@ -25,7 +25,7 @@
#include <linux/ata.h> #include <linux/ata.h>
#define DRV_NAME "pata_oldpiix" #define DRV_NAME "pata_oldpiix"
#define DRV_VERSION "0.5.4" #define DRV_VERSION "0.5.5"
/** /**
* oldpiix_pre_reset - probe begin * oldpiix_pre_reset - probe begin
...@@ -44,7 +44,6 @@ static int oldpiix_pre_reset(struct ata_port *ap) ...@@ -44,7 +44,6 @@ static int oldpiix_pre_reset(struct ata_port *ap)
if (!pci_test_config_bits(pdev, &oldpiix_enable_bits[ap->port_no])) if (!pci_test_config_bits(pdev, &oldpiix_enable_bits[ap->port_no]))
return -ENOENT; return -ENOENT;
ap->cbl = ATA_CBL_PATA40;
return ata_std_prereset(ap); return ata_std_prereset(ap);
} }
...@@ -65,7 +64,7 @@ static void oldpiix_pata_error_handler(struct ata_port *ap) ...@@ -65,7 +64,7 @@ static void oldpiix_pata_error_handler(struct ata_port *ap)
/** /**
* oldpiix_set_piomode - Initialize host controller PATA PIO timings * oldpiix_set_piomode - Initialize host controller PATA PIO timings
* @ap: Port whose timings we are configuring * @ap: Port whose timings we are configuring
* @adev: um * @adev: Device whose timings we are configuring
* *
* Set PIO mode for device, in host controller PCI config space. * Set PIO mode for device, in host controller PCI config space.
* *
...@@ -255,6 +254,7 @@ static const struct ata_port_operations oldpiix_pata_ops = { ...@@ -255,6 +254,7 @@ static const struct ata_port_operations oldpiix_pata_ops = {
.thaw = ata_bmdma_thaw, .thaw = ata_bmdma_thaw,
.error_handler = oldpiix_pata_error_handler, .error_handler = oldpiix_pata_error_handler,
.post_internal_cmd = ata_bmdma_post_internal_cmd, .post_internal_cmd = ata_bmdma_post_internal_cmd,
.cable_detect = ata_cable_40wire,
.bmdma_setup = ata_bmdma_setup, .bmdma_setup = ata_bmdma_setup,
.bmdma_start = ata_bmdma_start, .bmdma_start = ata_bmdma_start,
......
...@@ -34,7 +34,7 @@ ...@@ -34,7 +34,7 @@
#include <linux/libata.h> #include <linux/libata.h>
#define DRV_NAME "pata_opti" #define DRV_NAME "pata_opti"
#define DRV_VERSION "0.2.8" #define DRV_VERSION "0.2.9"
enum { enum {
READ_REG = 0, /* index of Read cycle timing register */ READ_REG = 0, /* index of Read cycle timing register */
...@@ -61,8 +61,6 @@ static int opti_pre_reset(struct ata_port *ap) ...@@ -61,8 +61,6 @@ static int opti_pre_reset(struct ata_port *ap)
if (!pci_test_config_bits(pdev, &opti_enable_bits[ap->port_no])) if (!pci_test_config_bits(pdev, &opti_enable_bits[ap->port_no]))
return -ENOENT; return -ENOENT;
ap->cbl = ATA_CBL_PATA40;
return ata_std_prereset(ap); return ata_std_prereset(ap);
} }
...@@ -198,6 +196,7 @@ static struct ata_port_operations opti_port_ops = { ...@@ -198,6 +196,7 @@ static struct ata_port_operations opti_port_ops = {
.thaw = ata_bmdma_thaw, .thaw = ata_bmdma_thaw,
.error_handler = opti_error_handler, .error_handler = opti_error_handler,
.post_internal_cmd = ata_bmdma_post_internal_cmd, .post_internal_cmd = ata_bmdma_post_internal_cmd,
.cable_detect = ata_cable_40wire,
.bmdma_setup = ata_bmdma_setup, .bmdma_setup = ata_bmdma_setup,
.bmdma_start = ata_bmdma_start, .bmdma_start = ata_bmdma_start,
......
...@@ -42,7 +42,7 @@ ...@@ -42,7 +42,7 @@
#define DRV_NAME "pata_pcmcia" #define DRV_NAME "pata_pcmcia"
#define DRV_VERSION "0.3.0" #define DRV_VERSION "0.3.1"
/* /*
* Private data structure to glue stuff together * Private data structure to glue stuff together
...@@ -84,6 +84,7 @@ static struct ata_port_operations pcmcia_port_ops = { ...@@ -84,6 +84,7 @@ static struct ata_port_operations pcmcia_port_ops = {
.thaw = ata_bmdma_thaw, .thaw = ata_bmdma_thaw,
.error_handler = ata_bmdma_error_handler, .error_handler = ata_bmdma_error_handler,
.post_internal_cmd = ata_bmdma_post_internal_cmd, .post_internal_cmd = ata_bmdma_post_internal_cmd,
.cable_detect = ata_cable_40wire,
.qc_prep = ata_qc_prep, .qc_prep = ata_qc_prep,
.qc_issue = ata_qc_issue_prot, .qc_issue = ata_qc_issue_prot,
......
...@@ -22,45 +22,17 @@ ...@@ -22,45 +22,17 @@
#include <linux/libata.h> #include <linux/libata.h>
#define DRV_NAME "pata_pdc202xx_old" #define DRV_NAME "pata_pdc202xx_old"
#define DRV_VERSION "0.4.0" #define DRV_VERSION "0.4.2"
/** static int pdc2026x_cable_detect(struct ata_port *ap)
* pdc2024x_pre_reset - probe begin
* @ap: ATA port
*
* Set up cable type and use generic probe init
*/
static int pdc2024x_pre_reset(struct ata_port *ap)
{
ap->cbl = ATA_CBL_PATA40;
return ata_std_prereset(ap);
}
static void pdc2024x_error_handler(struct ata_port *ap)
{
ata_bmdma_drive_eh(ap, pdc2024x_pre_reset, ata_std_softreset, NULL, ata_std_postreset);
}
static int pdc2026x_pre_reset(struct ata_port *ap)
{ {
struct pci_dev *pdev = to_pci_dev(ap->host->dev); struct pci_dev *pdev = to_pci_dev(ap->host->dev);
u16 cis; u16 cis;
pci_read_config_word(pdev, 0x50, &cis); pci_read_config_word(pdev, 0x50, &cis);
if (cis & (1 << (10 + ap->port_no))) if (cis & (1 << (10 + ap->port_no)))
ap->cbl = ATA_CBL_PATA80; return ATA_CBL_PATA80;
else return ATA_CBL_PATA40;
ap->cbl = ATA_CBL_PATA40;
return ata_std_prereset(ap);
}
static void pdc2026x_error_handler(struct ata_port *ap)
{
ata_bmdma_drive_eh(ap, pdc2026x_pre_reset, ata_std_softreset, NULL, ata_std_postreset);
} }
/** /**
...@@ -291,8 +263,9 @@ static struct ata_port_operations pdc2024x_port_ops = { ...@@ -291,8 +263,9 @@ static struct ata_port_operations pdc2024x_port_ops = {
.freeze = ata_bmdma_freeze, .freeze = ata_bmdma_freeze,
.thaw = ata_bmdma_thaw, .thaw = ata_bmdma_thaw,
.error_handler = pdc2024x_error_handler, .error_handler = ata_bmdma_error_handler,
.post_internal_cmd = ata_bmdma_post_internal_cmd, .post_internal_cmd = ata_bmdma_post_internal_cmd,
.cable_detect = ata_cable_40wire,
.bmdma_setup = ata_bmdma_setup, .bmdma_setup = ata_bmdma_setup,
.bmdma_start = ata_bmdma_start, .bmdma_start = ata_bmdma_start,
...@@ -325,8 +298,9 @@ static struct ata_port_operations pdc2026x_port_ops = { ...@@ -325,8 +298,9 @@ static struct ata_port_operations pdc2026x_port_ops = {
.freeze = ata_bmdma_freeze, .freeze = ata_bmdma_freeze,
.thaw = ata_bmdma_thaw, .thaw = ata_bmdma_thaw,
.error_handler = pdc2026x_error_handler, .error_handler = ata_bmdma_error_handler,
.post_internal_cmd = ata_bmdma_post_internal_cmd, .post_internal_cmd = ata_bmdma_post_internal_cmd,
.cable_detect = pdc2026x_cable_detect,
.bmdma_setup = ata_bmdma_setup, .bmdma_setup = ata_bmdma_setup,
.bmdma_start = pdc2026x_bmdma_start, .bmdma_start = pdc2026x_bmdma_start,
......
/* /*
* ata-serverworks.c - Serverworks PATA for new ATA layer * pata_serverworks.c - Serverworks PATA for new ATA layer
* (C) 2005 Red Hat Inc * (C) 2005 Red Hat Inc
* Alan Cox <alan@redhat.com> * Alan Cox <alan@redhat.com>
* *
...@@ -137,14 +137,14 @@ static struct sv_cable_table cable_detect[] = { ...@@ -137,14 +137,14 @@ static struct sv_cable_table cable_detect[] = {
}; };
/** /**
* serverworks_pre_reset - cable detection * serverworks_cable_detect - cable detection
* @ap: ATA port * @ap: ATA port
* *
* Perform cable detection according to the device and subvendor * Perform cable detection according to the device and subvendor
* identifications * identifications
*/ */
static int serverworks_pre_reset(struct ata_port *ap) { static int serverworks_cable_detect(struct ata_port *ap) {
struct pci_dev *pdev = to_pci_dev(ap->host->dev); struct pci_dev *pdev = to_pci_dev(ap->host->dev);
struct sv_cable_table *cb = cable_detect; struct sv_cable_table *cb = cable_detect;
...@@ -152,8 +152,7 @@ static int serverworks_pre_reset(struct ata_port *ap) { ...@@ -152,8 +152,7 @@ static int serverworks_pre_reset(struct ata_port *ap) {
if (cb->device == pdev->device && if (cb->device == pdev->device &&
(cb->subvendor == pdev->subsystem_vendor || (cb->subvendor == pdev->subsystem_vendor ||
cb->subvendor == PCI_ANY_ID)) { cb->subvendor == PCI_ANY_ID)) {
ap->cbl = cb->cable_detect(ap); return cb->cable_detect(ap);
return ata_std_prereset(ap);
} }
cb++; cb++;
} }
...@@ -162,11 +161,6 @@ static int serverworks_pre_reset(struct ata_port *ap) { ...@@ -162,11 +161,6 @@ static int serverworks_pre_reset(struct ata_port *ap) {
return -1; /* kill compiler warning */ return -1; /* kill compiler warning */
} }
static void serverworks_error_handler(struct ata_port *ap)
{
return ata_bmdma_drive_eh(ap, serverworks_pre_reset, ata_std_softreset, NULL, ata_std_postreset);
}
/** /**
* serverworks_is_csb - Check for CSB or OSB * serverworks_is_csb - Check for CSB or OSB
* @pdev: PCI device to check * @pdev: PCI device to check
...@@ -339,8 +333,9 @@ static struct ata_port_operations serverworks_osb4_port_ops = { ...@@ -339,8 +333,9 @@ static struct ata_port_operations serverworks_osb4_port_ops = {
.freeze = ata_bmdma_freeze, .freeze = ata_bmdma_freeze,
.thaw = ata_bmdma_thaw, .thaw = ata_bmdma_thaw,
.error_handler = serverworks_error_handler, .error_handler = ata_bmdma_error_handler,
.post_internal_cmd = ata_bmdma_post_internal_cmd, .post_internal_cmd = ata_bmdma_post_internal_cmd,
.cable_detect = serverworks_cable_detect,
.bmdma_setup = ata_bmdma_setup, .bmdma_setup = ata_bmdma_setup,
.bmdma_start = ata_bmdma_start, .bmdma_start = ata_bmdma_start,
...@@ -374,8 +369,9 @@ static struct ata_port_operations serverworks_csb_port_ops = { ...@@ -374,8 +369,9 @@ static struct ata_port_operations serverworks_csb_port_ops = {
.freeze = ata_bmdma_freeze, .freeze = ata_bmdma_freeze,
.thaw = ata_bmdma_thaw, .thaw = ata_bmdma_thaw,
.error_handler = serverworks_error_handler, .error_handler = ata_bmdma_error_handler,
.post_internal_cmd = ata_bmdma_post_internal_cmd, .post_internal_cmd = ata_bmdma_post_internal_cmd,
.cable_detect = serverworks_cable_detect,
.bmdma_setup = ata_bmdma_setup, .bmdma_setup = ata_bmdma_setup,
.bmdma_start = ata_bmdma_start, .bmdma_start = ata_bmdma_start,
......
...@@ -33,7 +33,7 @@ ...@@ -33,7 +33,7 @@
#include <linux/libata.h> #include <linux/libata.h>
#define DRV_NAME "pata_sil680" #define DRV_NAME "pata_sil680"
#define DRV_VERSION "0.4.5" #define DRV_VERSION "0.4.6"
/** /**
* sil680_selreg - return register base * sil680_selreg - return register base
...@@ -91,12 +91,6 @@ static int sil680_cable_detect(struct ata_port *ap) { ...@@ -91,12 +91,6 @@ static int sil680_cable_detect(struct ata_port *ap) {
return ATA_CBL_PATA40; return ATA_CBL_PATA40;
} }
static int sil680_pre_reset(struct ata_port *ap)
{
ap->cbl = sil680_cable_detect(ap);
return ata_std_prereset(ap);
}
/** /**
* sil680_bus_reset - reset the SIL680 bus * sil680_bus_reset - reset the SIL680 bus
* @ap: ATA port to reset * @ap: ATA port to reset
...@@ -119,7 +113,7 @@ static int sil680_bus_reset(struct ata_port *ap,unsigned int *classes) ...@@ -119,7 +113,7 @@ static int sil680_bus_reset(struct ata_port *ap,unsigned int *classes)
static void sil680_error_handler(struct ata_port *ap) static void sil680_error_handler(struct ata_port *ap)
{ {
ata_bmdma_drive_eh(ap, sil680_pre_reset, sil680_bus_reset, NULL, ata_std_postreset); ata_bmdma_drive_eh(ap, ata_std_prereset, sil680_bus_reset, NULL, ata_std_postreset);
} }
/** /**
...@@ -257,6 +251,7 @@ static struct ata_port_operations sil680_port_ops = { ...@@ -257,6 +251,7 @@ static struct ata_port_operations sil680_port_ops = {
.thaw = ata_bmdma_thaw, .thaw = ata_bmdma_thaw,
.error_handler = sil680_error_handler, .error_handler = sil680_error_handler,
.post_internal_cmd = ata_bmdma_post_internal_cmd, .post_internal_cmd = ata_bmdma_post_internal_cmd,
.cable_detect = sil680_cable_detect,
.bmdma_setup = ata_bmdma_setup, .bmdma_setup = ata_bmdma_setup,
.bmdma_start = ata_bmdma_start, .bmdma_start = ata_bmdma_start,
......
...@@ -43,7 +43,7 @@ ...@@ -43,7 +43,7 @@
#include <linux/libata.h> #include <linux/libata.h>
#define DRV_NAME "pata_triflex" #define DRV_NAME "pata_triflex"
#define DRV_VERSION "0.2.7" #define DRV_VERSION "0.2.8"
/** /**
* triflex_prereset - probe begin * triflex_prereset - probe begin
...@@ -63,7 +63,6 @@ static int triflex_prereset(struct ata_port *ap) ...@@ -63,7 +63,6 @@ static int triflex_prereset(struct ata_port *ap)
if (!pci_test_config_bits(pdev, &triflex_enable_bits[ap->port_no])) if (!pci_test_config_bits(pdev, &triflex_enable_bits[ap->port_no]))
return -ENOENT; return -ENOENT;
ap->cbl = ATA_CBL_PATA40;
return ata_std_prereset(ap); return ata_std_prereset(ap);
} }
...@@ -214,6 +213,7 @@ static struct ata_port_operations triflex_port_ops = { ...@@ -214,6 +213,7 @@ static struct ata_port_operations triflex_port_ops = {
.thaw = ata_bmdma_thaw, .thaw = ata_bmdma_thaw,
.error_handler = triflex_error_handler, .error_handler = triflex_error_handler,
.post_internal_cmd = ata_bmdma_post_internal_cmd, .post_internal_cmd = ata_bmdma_post_internal_cmd,
.cable_detect = ata_cable_40wire,
.bmdma_setup = ata_bmdma_setup, .bmdma_setup = ata_bmdma_setup,
.bmdma_start = triflex_bmdma_start, .bmdma_start = triflex_bmdma_start,
......
...@@ -78,8 +78,7 @@ static u32 svia_scr_read (struct ata_port *ap, unsigned int sc_reg); ...@@ -78,8 +78,7 @@ 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_scr_write (struct ata_port *ap, unsigned int sc_reg, u32 val);
static void svia_noop_freeze(struct ata_port *ap); static void svia_noop_freeze(struct ata_port *ap);
static void vt6420_error_handler(struct ata_port *ap); static void vt6420_error_handler(struct ata_port *ap);
static void vt6421_sata_error_handler(struct ata_port *ap); static int vt6421_pata_cable_detect(struct ata_port *ap);
static void vt6421_pata_error_handler(struct ata_port *ap);
static void vt6421_set_pio_mode(struct ata_port *ap, struct ata_device *adev); static void vt6421_set_pio_mode(struct ata_port *ap, struct ata_device *adev);
static void vt6421_set_dma_mode(struct ata_port *ap, struct ata_device *adev); static void vt6421_set_dma_mode(struct ata_port *ap, struct ata_device *adev);
static int vt6421_port_start(struct ata_port *ap); static int vt6421_port_start(struct ata_port *ap);
...@@ -172,8 +171,9 @@ static const struct ata_port_operations vt6421_pata_ops = { ...@@ -172,8 +171,9 @@ static const struct ata_port_operations vt6421_pata_ops = {
.freeze = ata_bmdma_freeze, .freeze = ata_bmdma_freeze,
.thaw = ata_bmdma_thaw, .thaw = ata_bmdma_thaw,
.error_handler = vt6421_pata_error_handler, .error_handler = ata_bmdma_error_handler,
.post_internal_cmd = ata_bmdma_post_internal_cmd, .post_internal_cmd = ata_bmdma_post_internal_cmd,
.cable_detect = vt6421_pata_cable_detect,
.irq_handler = ata_interrupt, .irq_handler = ata_interrupt,
.irq_clear = ata_bmdma_irq_clear, .irq_clear = ata_bmdma_irq_clear,
...@@ -203,8 +203,9 @@ static const struct ata_port_operations vt6421_sata_ops = { ...@@ -203,8 +203,9 @@ static const struct ata_port_operations vt6421_sata_ops = {
.freeze = ata_bmdma_freeze, .freeze = ata_bmdma_freeze,
.thaw = ata_bmdma_thaw, .thaw = ata_bmdma_thaw,
.error_handler = vt6421_sata_error_handler, .error_handler = ata_bmdma_error_handler,
.post_internal_cmd = ata_bmdma_post_internal_cmd, .post_internal_cmd = ata_bmdma_post_internal_cmd,
.cable_detect = ata_cable_sata,
.irq_handler = ata_interrupt, .irq_handler = ata_interrupt,
.irq_clear = ata_bmdma_irq_clear, .irq_clear = ata_bmdma_irq_clear,
...@@ -330,35 +331,15 @@ static void vt6420_error_handler(struct ata_port *ap) ...@@ -330,35 +331,15 @@ static void vt6420_error_handler(struct ata_port *ap)
NULL, ata_std_postreset); NULL, ata_std_postreset);
} }
static int vt6421_pata_prereset(struct ata_port *ap) static int vt6421_pata_cable_detect(struct ata_port *ap)
{ {
struct pci_dev *pdev = to_pci_dev(ap->host->dev); struct pci_dev *pdev = to_pci_dev(ap->host->dev);
u8 tmp; u8 tmp;
pci_read_config_byte(pdev, PATA_UDMA_TIMING, &tmp); pci_read_config_byte(pdev, PATA_UDMA_TIMING, &tmp);
if (tmp & 0x10) if (tmp & 0x10)
ap->cbl = ATA_CBL_PATA40; return ATA_CBL_PATA40;
else return ATA_CBL_PATA80;
ap->cbl = ATA_CBL_PATA80;
return 0;
}
static void vt6421_pata_error_handler(struct ata_port *ap)
{
return ata_bmdma_drive_eh(ap, vt6421_pata_prereset, ata_std_softreset,
NULL, ata_std_postreset);
}
static int vt6421_sata_prereset(struct ata_port *ap)
{
ap->cbl = ATA_CBL_SATA;
return 0;
}
static void vt6421_sata_error_handler(struct ata_port *ap)
{
return ata_bmdma_drive_eh(ap, vt6421_sata_prereset, ata_std_softreset,
NULL, ata_std_postreset);
} }
static void vt6421_set_pio_mode(struct ata_port *ap, struct ata_device *adev) static void vt6421_set_pio_mode(struct ata_port *ap, struct ata_device *adev)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment