Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit a0fcdc02 authored by Jeff Garzik's avatar Jeff Garzik
Browse files

[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
Loading
Loading
Loading
Loading
+20 −9
Original line number Diff line number Diff line
@@ -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,
+5 −28
Original line number Diff line number Diff line
@@ -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,
+2 −1
Original line number Diff line number Diff line
@@ -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,
+2 −2
Original line number Diff line number Diff line
@@ -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,
+3 −3
Original line number Diff line number Diff line
@@ -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,
Loading