|
@@ -2539,15 +2539,23 @@ static void ahc_linux_set_iu(struct scsi_target *starget, int iu)
|
|
|
static void ahc_linux_get_signalling(struct Scsi_Host *shost)
|
|
|
{
|
|
|
struct ahc_softc *ahc = *(struct ahc_softc **)shost->hostdata;
|
|
|
- u8 mode = ahc_inb(ahc, SBLKCTL);
|
|
|
+ u8 mode;
|
|
|
|
|
|
- if (mode & ENAB40)
|
|
|
- spi_signalling(shost) = SPI_SIGNAL_LVD;
|
|
|
- else if (mode & ENAB20)
|
|
|
+ if (!(ahc->features & AHC_ULTRA2)) {
|
|
|
+ /* non-LVD chipset, may not have SBLKCTL reg */
|
|
|
spi_signalling(shost) =
|
|
|
ahc->features & AHC_HVD ?
|
|
|
SPI_SIGNAL_HVD :
|
|
|
SPI_SIGNAL_SE;
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ mode = ahc_inb(ahc, SBLKCTL);
|
|
|
+
|
|
|
+ if (mode & ENAB40)
|
|
|
+ spi_signalling(shost) = SPI_SIGNAL_LVD;
|
|
|
+ else if (mode & ENAB20)
|
|
|
+ spi_signalling(shost) = SPI_SIGNAL_SE;
|
|
|
else
|
|
|
spi_signalling(shost) = SPI_SIGNAL_UNKNOWN;
|
|
|
}
|