mirror of
https://github.com/torvalds/linux.git
synced 2024-12-27 05:11:48 +00:00
[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: Jeff Garzik <jeff@garzik.org>
This commit is contained in:
parent
6a3d586d8e
commit
a0fcdc0259
@ -25,7 +25,7 @@
|
||||
#include <linux/libata.h>
|
||||
|
||||
#define DRV_NAME "pata_hpt3x2n"
|
||||
#define DRV_VERSION "0.3.2"
|
||||
#define DRV_VERSION "0.3.3"
|
||||
|
||||
enum {
|
||||
HPT_PCI_FAST = (1 << 31),
|
||||
@ -115,14 +115,13 @@ static u32 hpt3x2n_find_mode(struct ata_port *ap, int speed)
|
||||
}
|
||||
|
||||
/**
|
||||
* hpt3x2n_pre_reset - reset the hpt3x2n bus
|
||||
* @ap: ATA port to reset
|
||||
* hpt3x2n_cable_detect - Detect the cable type
|
||||
* @ap: ATA port to detect on
|
||||
*
|
||||
* Perform the initial reset handling for the 3x2n series controllers.
|
||||
* Reset the hardware and state machine, obtain the cable type.
|
||||
* Return the cable type attached to this port
|
||||
*/
|
||||
|
||||
static int hpt3xn_pre_reset(struct ata_port *ap)
|
||||
static int hpt3x2n_cable_detect(struct ata_port *ap)
|
||||
{
|
||||
u8 scr2, ata66;
|
||||
struct pci_dev *pdev = to_pci_dev(ap->host->dev);
|
||||
@ -135,15 +134,26 @@ static int hpt3xn_pre_reset(struct ata_port *ap)
|
||||
pci_write_config_byte(pdev, 0x5B, scr2);
|
||||
|
||||
if (ata66 & (1 << ap->port_no))
|
||||
ap->cbl = ATA_CBL_PATA40;
|
||||
return ATA_CBL_PATA40;
|
||||
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 */
|
||||
pci_write_config_byte(pdev, 0x50, 0x37);
|
||||
pci_write_config_byte(pdev, 0x54, 0x37);
|
||||
udelay(100);
|
||||
|
||||
return ata_std_prereset(ap);
|
||||
}
|
||||
|
||||
@ -364,6 +374,7 @@ static struct ata_port_operations hpt3x2n_port_ops = {
|
||||
.thaw = ata_bmdma_thaw,
|
||||
.error_handler = hpt3x2n_error_handler,
|
||||
.post_internal_cmd = ata_bmdma_post_internal_cmd,
|
||||
.cable_detect = hpt3x2n_cable_detect,
|
||||
|
||||
.bmdma_setup = ata_bmdma_setup,
|
||||
.bmdma_start = ata_bmdma_start,
|
||||
|
@ -80,7 +80,7 @@
|
||||
|
||||
|
||||
#define DRV_NAME "pata_it821x"
|
||||
#define DRV_VERSION "0.3.4"
|
||||
#define DRV_VERSION "0.3.6"
|
||||
|
||||
struct it821x_dev
|
||||
{
|
||||
@ -112,31 +112,6 @@ struct it821x_dev
|
||||
|
||||
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
|
||||
* @ap: ATA port
|
||||
@ -666,8 +641,9 @@ static struct ata_port_operations it821x_smart_port_ops = {
|
||||
|
||||
.freeze = ata_bmdma_freeze,
|
||||
.thaw = ata_bmdma_thaw,
|
||||
.error_handler = it821x_error_handler,
|
||||
.error_handler = ata_bmdma_error_handler,
|
||||
.post_internal_cmd = ata_bmdma_post_internal_cmd,
|
||||
.cable_detect = ata_cable_unknown,
|
||||
|
||||
.bmdma_setup = ata_bmdma_setup,
|
||||
.bmdma_start = ata_bmdma_start,
|
||||
@ -702,8 +678,9 @@ static struct ata_port_operations it821x_passthru_port_ops = {
|
||||
|
||||
.freeze = ata_bmdma_freeze,
|
||||
.thaw = ata_bmdma_thaw,
|
||||
.error_handler = it821x_error_handler,
|
||||
.error_handler = ata_bmdma_error_handler,
|
||||
.post_internal_cmd = ata_bmdma_post_internal_cmd,
|
||||
.cable_detect = ata_cable_unknown,
|
||||
|
||||
.bmdma_setup = ata_bmdma_setup,
|
||||
.bmdma_start = it821x_passthru_bmdma_start,
|
||||
|
@ -24,7 +24,7 @@
|
||||
|
||||
|
||||
#define DRV_NAME "mpc52xx_ata"
|
||||
#define DRV_VERSION "0.1.0"
|
||||
#define DRV_VERSION "0.1.0ac2"
|
||||
|
||||
|
||||
/* Private structures used by the driver */
|
||||
@ -297,6 +297,7 @@ static struct ata_port_operations mpc52xx_ata_port_ops = {
|
||||
.freeze = ata_bmdma_freeze,
|
||||
.thaw = ata_bmdma_thaw,
|
||||
.error_handler = mpc52xx_ata_error_handler,
|
||||
.cable_detect = ata_cable_40wire,
|
||||
.qc_prep = ata_qc_prep,
|
||||
.qc_issue = ata_qc_issue_prot,
|
||||
.data_xfer = ata_data_xfer,
|
||||
|
@ -35,7 +35,7 @@
|
||||
#include <linux/libata.h>
|
||||
|
||||
#define DRV_NAME "pata_mpiix"
|
||||
#define DRV_VERSION "0.7.5"
|
||||
#define DRV_VERSION "0.7.6"
|
||||
|
||||
enum {
|
||||
IDETIM = 0x6C, /* IDE control register */
|
||||
@ -53,7 +53,6 @@ static int mpiix_pre_reset(struct ata_port *ap)
|
||||
|
||||
if (!pci_test_config_bits(pdev, &mpiix_enable_bits))
|
||||
return -ENOENT;
|
||||
ap->cbl = ATA_CBL_PATA40;
|
||||
return ata_std_prereset(ap);
|
||||
}
|
||||
|
||||
@ -185,6 +184,7 @@ static struct ata_port_operations mpiix_port_ops = {
|
||||
.thaw = ata_bmdma_thaw,
|
||||
.error_handler = mpiix_error_handler,
|
||||
.post_internal_cmd = ata_bmdma_post_internal_cmd,
|
||||
.cable_detect = ata_cable_40wire,
|
||||
|
||||
.qc_prep = ata_qc_prep,
|
||||
.qc_issue = mpiix_qc_issue_prot,
|
||||
|
@ -28,13 +28,13 @@
|
||||
#include <linux/libata.h>
|
||||
|
||||
#define DRV_NAME "pata_ns87410"
|
||||
#define DRV_VERSION "0.4.3"
|
||||
#define DRV_VERSION "0.4.6"
|
||||
|
||||
/**
|
||||
* ns87410_pre_reset - probe begin
|
||||
* @ap: ATA port
|
||||
*
|
||||
* Set up cable type and use generic probe init
|
||||
* Check enabled ports
|
||||
*/
|
||||
|
||||
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]))
|
||||
return -ENOENT;
|
||||
ap->cbl = ATA_CBL_PATA40;
|
||||
return ata_std_prereset(ap);
|
||||
}
|
||||
|
||||
@ -177,6 +176,7 @@ static struct ata_port_operations ns87410_port_ops = {
|
||||
.thaw = ata_bmdma_thaw,
|
||||
.error_handler = ns87410_error_handler,
|
||||
.post_internal_cmd = ata_bmdma_post_internal_cmd,
|
||||
.cable_detect = ata_cable_40wire,
|
||||
|
||||
.qc_prep = ata_qc_prep,
|
||||
.qc_issue = ns87410_qc_issue_prot,
|
||||
|
@ -25,7 +25,7 @@
|
||||
#include <linux/ata.h>
|
||||
|
||||
#define DRV_NAME "pata_oldpiix"
|
||||
#define DRV_VERSION "0.5.4"
|
||||
#define DRV_VERSION "0.5.5"
|
||||
|
||||
/**
|
||||
* oldpiix_pre_reset - probe begin
|
||||
@ -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]))
|
||||
return -ENOENT;
|
||||
ap->cbl = ATA_CBL_PATA40;
|
||||
return ata_std_prereset(ap);
|
||||
}
|
||||
|
||||
@ -65,7 +64,7 @@ static void oldpiix_pata_error_handler(struct ata_port *ap)
|
||||
/**
|
||||
* oldpiix_set_piomode - Initialize host controller PATA PIO timings
|
||||
* @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.
|
||||
*
|
||||
@ -255,6 +254,7 @@ static const struct ata_port_operations oldpiix_pata_ops = {
|
||||
.thaw = ata_bmdma_thaw,
|
||||
.error_handler = oldpiix_pata_error_handler,
|
||||
.post_internal_cmd = ata_bmdma_post_internal_cmd,
|
||||
.cable_detect = ata_cable_40wire,
|
||||
|
||||
.bmdma_setup = ata_bmdma_setup,
|
||||
.bmdma_start = ata_bmdma_start,
|
||||
|
@ -34,7 +34,7 @@
|
||||
#include <linux/libata.h>
|
||||
|
||||
#define DRV_NAME "pata_opti"
|
||||
#define DRV_VERSION "0.2.8"
|
||||
#define DRV_VERSION "0.2.9"
|
||||
|
||||
enum {
|
||||
READ_REG = 0, /* index of Read cycle timing register */
|
||||
@ -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]))
|
||||
return -ENOENT;
|
||||
|
||||
ap->cbl = ATA_CBL_PATA40;
|
||||
return ata_std_prereset(ap);
|
||||
}
|
||||
|
||||
@ -198,6 +196,7 @@ static struct ata_port_operations opti_port_ops = {
|
||||
.thaw = ata_bmdma_thaw,
|
||||
.error_handler = opti_error_handler,
|
||||
.post_internal_cmd = ata_bmdma_post_internal_cmd,
|
||||
.cable_detect = ata_cable_40wire,
|
||||
|
||||
.bmdma_setup = ata_bmdma_setup,
|
||||
.bmdma_start = ata_bmdma_start,
|
||||
|
@ -42,7 +42,7 @@
|
||||
|
||||
|
||||
#define DRV_NAME "pata_pcmcia"
|
||||
#define DRV_VERSION "0.3.0"
|
||||
#define DRV_VERSION "0.3.1"
|
||||
|
||||
/*
|
||||
* Private data structure to glue stuff together
|
||||
@ -84,6 +84,7 @@ static struct ata_port_operations pcmcia_port_ops = {
|
||||
.thaw = ata_bmdma_thaw,
|
||||
.error_handler = ata_bmdma_error_handler,
|
||||
.post_internal_cmd = ata_bmdma_post_internal_cmd,
|
||||
.cable_detect = ata_cable_40wire,
|
||||
|
||||
.qc_prep = ata_qc_prep,
|
||||
.qc_issue = ata_qc_issue_prot,
|
||||
|
@ -22,45 +22,17 @@
|
||||
#include <linux/libata.h>
|
||||
|
||||
#define DRV_NAME "pata_pdc202xx_old"
|
||||
#define DRV_VERSION "0.4.0"
|
||||
#define DRV_VERSION "0.4.2"
|
||||
|
||||
/**
|
||||
* 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)
|
||||
static int pdc2026x_cable_detect(struct ata_port *ap)
|
||||
{
|
||||
struct pci_dev *pdev = to_pci_dev(ap->host->dev);
|
||||
u16 cis;
|
||||
|
||||
pci_read_config_word(pdev, 0x50, &cis);
|
||||
if (cis & (1 << (10 + ap->port_no)))
|
||||
ap->cbl = ATA_CBL_PATA80;
|
||||
else
|
||||
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);
|
||||
return ATA_CBL_PATA80;
|
||||
return ATA_CBL_PATA40;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -291,8 +263,9 @@ static struct ata_port_operations pdc2024x_port_ops = {
|
||||
|
||||
.freeze = ata_bmdma_freeze,
|
||||
.thaw = ata_bmdma_thaw,
|
||||
.error_handler = pdc2024x_error_handler,
|
||||
.error_handler = ata_bmdma_error_handler,
|
||||
.post_internal_cmd = ata_bmdma_post_internal_cmd,
|
||||
.cable_detect = ata_cable_40wire,
|
||||
|
||||
.bmdma_setup = ata_bmdma_setup,
|
||||
.bmdma_start = ata_bmdma_start,
|
||||
@ -325,8 +298,9 @@ static struct ata_port_operations pdc2026x_port_ops = {
|
||||
|
||||
.freeze = ata_bmdma_freeze,
|
||||
.thaw = ata_bmdma_thaw,
|
||||
.error_handler = pdc2026x_error_handler,
|
||||
.error_handler = ata_bmdma_error_handler,
|
||||
.post_internal_cmd = ata_bmdma_post_internal_cmd,
|
||||
.cable_detect = pdc2026x_cable_detect,
|
||||
|
||||
.bmdma_setup = ata_bmdma_setup,
|
||||
.bmdma_start = pdc2026x_bmdma_start,
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* ata-serverworks.c - Serverworks PATA for new ATA layer
|
||||
* pata_serverworks.c - Serverworks PATA for new ATA layer
|
||||
* (C) 2005 Red Hat Inc
|
||||
* Alan Cox <alan@redhat.com>
|
||||
*
|
||||
@ -137,14 +137,14 @@ static struct sv_cable_table cable_detect[] = {
|
||||
};
|
||||
|
||||
/**
|
||||
* serverworks_pre_reset - cable detection
|
||||
* serverworks_cable_detect - cable detection
|
||||
* @ap: ATA port
|
||||
*
|
||||
* Perform cable detection according to the device and subvendor
|
||||
* 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 sv_cable_table *cb = cable_detect;
|
||||
|
||||
@ -152,8 +152,7 @@ static int serverworks_pre_reset(struct ata_port *ap) {
|
||||
if (cb->device == pdev->device &&
|
||||
(cb->subvendor == pdev->subsystem_vendor ||
|
||||
cb->subvendor == PCI_ANY_ID)) {
|
||||
ap->cbl = cb->cable_detect(ap);
|
||||
return ata_std_prereset(ap);
|
||||
return cb->cable_detect(ap);
|
||||
}
|
||||
cb++;
|
||||
}
|
||||
@ -162,11 +161,6 @@ static int serverworks_pre_reset(struct ata_port *ap) {
|
||||
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
|
||||
* @pdev: PCI device to check
|
||||
@ -339,8 +333,9 @@ static struct ata_port_operations serverworks_osb4_port_ops = {
|
||||
|
||||
.freeze = ata_bmdma_freeze,
|
||||
.thaw = ata_bmdma_thaw,
|
||||
.error_handler = serverworks_error_handler,
|
||||
.error_handler = ata_bmdma_error_handler,
|
||||
.post_internal_cmd = ata_bmdma_post_internal_cmd,
|
||||
.cable_detect = serverworks_cable_detect,
|
||||
|
||||
.bmdma_setup = ata_bmdma_setup,
|
||||
.bmdma_start = ata_bmdma_start,
|
||||
@ -374,8 +369,9 @@ static struct ata_port_operations serverworks_csb_port_ops = {
|
||||
|
||||
.freeze = ata_bmdma_freeze,
|
||||
.thaw = ata_bmdma_thaw,
|
||||
.error_handler = serverworks_error_handler,
|
||||
.error_handler = ata_bmdma_error_handler,
|
||||
.post_internal_cmd = ata_bmdma_post_internal_cmd,
|
||||
.cable_detect = serverworks_cable_detect,
|
||||
|
||||
.bmdma_setup = ata_bmdma_setup,
|
||||
.bmdma_start = ata_bmdma_start,
|
||||
|
@ -33,7 +33,7 @@
|
||||
#include <linux/libata.h>
|
||||
|
||||
#define DRV_NAME "pata_sil680"
|
||||
#define DRV_VERSION "0.4.5"
|
||||
#define DRV_VERSION "0.4.6"
|
||||
|
||||
/**
|
||||
* sil680_selreg - return register base
|
||||
@ -91,12 +91,6 @@ static int sil680_cable_detect(struct ata_port *ap) {
|
||||
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
|
||||
* @ap: ATA port to reset
|
||||
@ -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)
|
||||
{
|
||||
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 = {
|
||||
.thaw = ata_bmdma_thaw,
|
||||
.error_handler = sil680_error_handler,
|
||||
.post_internal_cmd = ata_bmdma_post_internal_cmd,
|
||||
.cable_detect = sil680_cable_detect,
|
||||
|
||||
.bmdma_setup = ata_bmdma_setup,
|
||||
.bmdma_start = ata_bmdma_start,
|
||||
|
@ -43,7 +43,7 @@
|
||||
#include <linux/libata.h>
|
||||
|
||||
#define DRV_NAME "pata_triflex"
|
||||
#define DRV_VERSION "0.2.7"
|
||||
#define DRV_VERSION "0.2.8"
|
||||
|
||||
/**
|
||||
* triflex_prereset - probe begin
|
||||
@ -63,7 +63,6 @@ static int triflex_prereset(struct ata_port *ap)
|
||||
|
||||
if (!pci_test_config_bits(pdev, &triflex_enable_bits[ap->port_no]))
|
||||
return -ENOENT;
|
||||
ap->cbl = ATA_CBL_PATA40;
|
||||
return ata_std_prereset(ap);
|
||||
}
|
||||
|
||||
@ -214,6 +213,7 @@ static struct ata_port_operations triflex_port_ops = {
|
||||
.thaw = ata_bmdma_thaw,
|
||||
.error_handler = triflex_error_handler,
|
||||
.post_internal_cmd = ata_bmdma_post_internal_cmd,
|
||||
.cable_detect = ata_cable_40wire,
|
||||
|
||||
.bmdma_setup = ata_bmdma_setup,
|
||||
.bmdma_start = triflex_bmdma_start,
|
||||
|
@ -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_noop_freeze(struct ata_port *ap);
|
||||
static void vt6420_error_handler(struct ata_port *ap);
|
||||
static void vt6421_sata_error_handler(struct ata_port *ap);
|
||||
static void vt6421_pata_error_handler(struct ata_port *ap);
|
||||
static int vt6421_pata_cable_detect(struct ata_port *ap);
|
||||
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 int vt6421_port_start(struct ata_port *ap);
|
||||
@ -172,8 +171,9 @@ static const struct ata_port_operations vt6421_pata_ops = {
|
||||
|
||||
.freeze = ata_bmdma_freeze,
|
||||
.thaw = ata_bmdma_thaw,
|
||||
.error_handler = vt6421_pata_error_handler,
|
||||
.error_handler = ata_bmdma_error_handler,
|
||||
.post_internal_cmd = ata_bmdma_post_internal_cmd,
|
||||
.cable_detect = vt6421_pata_cable_detect,
|
||||
|
||||
.irq_handler = ata_interrupt,
|
||||
.irq_clear = ata_bmdma_irq_clear,
|
||||
@ -203,8 +203,9 @@ static const struct ata_port_operations vt6421_sata_ops = {
|
||||
|
||||
.freeze = ata_bmdma_freeze,
|
||||
.thaw = ata_bmdma_thaw,
|
||||
.error_handler = vt6421_sata_error_handler,
|
||||
.error_handler = ata_bmdma_error_handler,
|
||||
.post_internal_cmd = ata_bmdma_post_internal_cmd,
|
||||
.cable_detect = ata_cable_sata,
|
||||
|
||||
.irq_handler = ata_interrupt,
|
||||
.irq_clear = ata_bmdma_irq_clear,
|
||||
@ -330,35 +331,15 @@ static void vt6420_error_handler(struct ata_port *ap)
|
||||
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);
|
||||
u8 tmp;
|
||||
|
||||
pci_read_config_byte(pdev, PATA_UDMA_TIMING, &tmp);
|
||||
if (tmp & 0x10)
|
||||
ap->cbl = ATA_CBL_PATA40;
|
||||
else
|
||||
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);
|
||||
return ATA_CBL_PATA40;
|
||||
return ATA_CBL_PATA80;
|
||||
}
|
||||
|
||||
static void vt6421_set_pio_mode(struct ata_port *ap, struct ata_device *adev)
|
||||
|
Loading…
Reference in New Issue
Block a user