diff options
Diffstat (limited to 'drivers/scsi/scsi_transport_spi.c')
| -rw-r--r-- | drivers/scsi/scsi_transport_spi.c | 30 | 
1 files changed, 27 insertions, 3 deletions
diff --git a/drivers/scsi/scsi_transport_spi.c b/drivers/scsi/scsi_transport_spi.c index 8a172d4f456..cf08071a9b6 100644 --- a/drivers/scsi/scsi_transport_spi.c +++ b/drivers/scsi/scsi_transport_spi.c @@ -597,6 +597,28 @@ static DEVICE_ATTR(signalling, S_IRUGO,  		   show_spi_host_signalling,  		   store_spi_host_signalling); +static ssize_t show_spi_host_width(struct device *cdev, +				      struct device_attribute *attr, +				      char *buf) +{ +	struct Scsi_Host *shost = transport_class_to_shost(cdev); + +	return sprintf(buf, "%s\n", shost->max_id == 16 ? "wide" : "narrow"); +} +static DEVICE_ATTR(host_width, S_IRUGO, +		   show_spi_host_width, NULL); + +static ssize_t show_spi_host_hba_id(struct device *cdev, +				    struct device_attribute *attr, +				    char *buf) +{ +	struct Scsi_Host *shost = transport_class_to_shost(cdev); + +	return sprintf(buf, "%d\n", shost->this_id); +} +static DEVICE_ATTR(hba_id, S_IRUGO, +		   show_spi_host_hba_id, NULL); +  #define DV_SET(x, y)			\  	if(i->f->set_##x)		\  		i->f->set_##x(sdev->sdev_target, y) @@ -988,10 +1010,10 @@ spi_dv_device(struct scsi_device *sdev)  	u8 *buffer;  	const int len = SPI_MAX_ECHO_BUFFER_SIZE*2; -	if (unlikely(scsi_device_get(sdev))) +	if (unlikely(spi_dv_in_progress(starget)))  		return; -	if (unlikely(spi_dv_in_progress(starget))) +	if (unlikely(scsi_device_get(sdev)))  		return;  	spi_dv_in_progress(starget) = 1; @@ -1380,6 +1402,8 @@ static DECLARE_ANON_TRANSPORT_CLASS(spi_device_class,  static struct attribute *host_attributes[] = {  	&dev_attr_signalling.attr, +	&dev_attr_host_width.attr, +	&dev_attr_hba_id.attr,  	NULL  }; @@ -1410,7 +1434,7 @@ static int spi_host_configure(struct transport_container *tc,  	(si->f->show_##name ? S_IRUGO : 0) | \  	(si->f->set_##name ? S_IWUSR : 0) -static mode_t target_attribute_is_visible(struct kobject *kobj, +static umode_t target_attribute_is_visible(struct kobject *kobj,  					  struct attribute *attr, int i)  {  	struct device *cdev = container_of(kobj, struct device, kobj);  | 
