aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHannes Reinecke <hare@suse.de>2005-06-28 20:30:38 -0400
committerJeff Garzik <jgarzik@pobox.com>2005-09-08 05:57:23 -0400
commit6a690df5c8b37d4a1c41df40770d42d44fac0e97 (patch)
tree1679862bdfa0e129f4d0feb18b02e7692db3afa3
parent5a2cec83a9bb1b4295aa8ab728fcb8ca1811a33c (diff)
[PATCH] scan all enabled ports on ata_piix
ICH6 spec defines the PORT_ bits as: PORT_ENABLED (R/W): 0 = Disabled. The port is in the off state and cannot detect any devices. 1 = Enabled. The port can transition between the on, partial, and slumber states and can detect devices. PORT_PRESENT (R/O) The status of this bit may change at any time. This bit is cleared when the port is disabled via PORT_ENABLED. This bit is not cleared upon surprise removal of a device. So from a textual view it is not necessary that PORT_PRESENT _must_ be set, especially if a device detection has to be done anyway. And, in fact, this is the view that ACER has been taken with its new Laptops (e.g. Travelmate 4150). And the definition of PORT_ENABLED / PORT_PRESENT is mixed up, btw. Signed-off-by: Hannes Reinecke <hare@suse.de> Signed-off-by: Jens Axboe <axboe@suse.de> Cc: Jeff Garzik <jgarzik@pobox.com> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Jeff Garzik <jgarzik@pobox.com>
-rw-r--r--drivers/scsi/ata_piix.c10
1 files changed, 6 insertions, 4 deletions
diff --git a/drivers/scsi/ata_piix.c b/drivers/scsi/ata_piix.c
index deec0cef88d9..5f8688529041 100644
--- a/drivers/scsi/ata_piix.c
+++ b/drivers/scsi/ata_piix.c
@@ -68,8 +68,8 @@ enum {
68 PIIX_COMB_PATA_P0 = (1 << 1), 68 PIIX_COMB_PATA_P0 = (1 << 1),
69 PIIX_COMB = (1 << 2), /* combined mode enabled? */ 69 PIIX_COMB = (1 << 2), /* combined mode enabled? */
70 70
71 PIIX_PORT_PRESENT = (1 << 0), 71 PIIX_PORT_ENABLED = (1 << 0),
72 PIIX_PORT_ENABLED = (1 << 4), 72 PIIX_PORT_PRESENT = (1 << 4),
73 73
74 PIIX_80C_PRI = (1 << 5) | (1 << 4), 74 PIIX_80C_PRI = (1 << 5) | (1 << 4),
75 PIIX_80C_SEC = (1 << 7) | (1 << 6), 75 PIIX_80C_SEC = (1 << 7) | (1 << 6),
@@ -377,7 +377,9 @@ static void piix_pata_phy_reset(struct ata_port *ap)
377 * None (inherited from caller). 377 * None (inherited from caller).
378 * 378 *
379 * RETURNS: 379 * RETURNS:
380 * Non-zero if device detected, zero otherwise. 380 * Non-zero if port is enabled, it may or may not have a device
381 * attached in that case (PRESENT bit would only be set if BIOS probe
382 * was done). Zero is returned if port is disabled.
381 */ 383 */
382static int piix_sata_probe (struct ata_port *ap) 384static int piix_sata_probe (struct ata_port *ap)
383{ 385{
@@ -401,7 +403,7 @@ static int piix_sata_probe (struct ata_port *ap)
401 */ 403 */
402 404
403 for (i = 0; i < 4; i++) { 405 for (i = 0; i < 4; i++) {
404 mask = (PIIX_PORT_PRESENT << i) | (PIIX_PORT_ENABLED << i); 406 mask = (PIIX_PORT_ENABLED << i);
405 407
406 if ((orig_mask & mask) == mask) 408 if ((orig_mask & mask) == mask)
407 if (combined || (i == ap->hard_port_no)) 409 if (combined || (i == ap->hard_port_no))