diff options
| -rw-r--r-- | drivers/scsi/scsi_transport_spi.c | 9 | 
1 files changed, 9 insertions, 0 deletions
diff --git a/drivers/scsi/scsi_transport_spi.c b/drivers/scsi/scsi_transport_spi.c index 5829f97a206..ace49d5bd9c 100644 --- a/drivers/scsi/scsi_transport_spi.c +++ b/drivers/scsi/scsi_transport_spi.c @@ -785,6 +785,7 @@ spi_dv_device_internal(struct scsi_device *sdev, u8 *buffer)  {  	struct spi_internal *i = to_spi_internal(sdev->host->transportt);  	struct scsi_target *starget = sdev->sdev_target; +	struct Scsi_Host *shost = sdev->host;  	int len = sdev->inquiry_len;  	/* first set us up for narrow async */  	DV_SET(offset, 0); @@ -844,6 +845,14 @@ spi_dv_device_internal(struct scsi_device *sdev, u8 *buffer)  		if (spi_min_period(starget) == 8)  			DV_SET(pcomp_en, 1);  	} +	/* now that we've done all this, actually check the bus +	 * signal type (if known).  Some devices are stupid on +	 * a SE bus and still claim they can try LVD only settings */ +	if (i->f->get_signalling) +		i->f->get_signalling(shost); +	if (spi_signalling(shost) == SPI_SIGNAL_SE || +	    spi_signalling(shost) == SPI_SIGNAL_HVD) +		DV_SET(dt, 0);  	/* Do the read only INQUIRY tests */  	spi_dv_retrain(sdev, buffer, buffer + sdev->inquiry_len,  		       spi_dv_device_compare_inquiry);  |