aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/s390/cio
diff options
context:
space:
mode:
authorBastian Blank <bastian@waldi.eu.org>2005-10-30 18:00:12 -0500
committerLinus Torvalds <torvalds@g5.osdl.org>2005-10-30 20:37:16 -0500
commitf1fc78a8c7f3a784b9fd1e07cc1438a0ea569555 (patch)
tree316c05b4531b8961c59338088642b02e3cccfbd7 /drivers/s390/cio
parent1e8e338325fa0f2bd5c1c800086e900cf188d2cd (diff)
[PATCH] s390, ccw - export modalias
This patch exports modalias for ccw devices. So you can do: modprobe `echo /sys/device/path_to_device/modalias` and the proper driver will automatically be loaded by userspace. Signed-off-by: Bastian Blank <waldi@debian.org> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'drivers/s390/cio')
-rw-r--r--drivers/s390/cio/device.c19
1 files changed, 19 insertions, 0 deletions
diff --git a/drivers/s390/cio/device.c b/drivers/s390/cio/device.c
index 9adc11e8b8bc..1c2659766c09 100644
--- a/drivers/s390/cio/device.c
+++ b/drivers/s390/cio/device.c
@@ -252,6 +252,23 @@ cutype_show (struct device *dev, struct device_attribute *attr, char *buf)
252} 252}
253 253
254static ssize_t 254static ssize_t
255modalias_show (struct device *dev, struct device_attribute *attr, char *buf)
256{
257 struct ccw_device *cdev = to_ccwdev(dev);
258 struct ccw_device_id *id = &(cdev->id);
259 int ret;
260
261 ret = sprintf(buf, "ccw:t%04Xm%02x",
262 id->cu_type, id->cu_model);
263 if (id->dev_type != 0)
264 ret += sprintf(buf + ret, "dt%04Xdm%02X\n",
265 id->dev_type, id->dev_model);
266 else
267 ret += sprintf(buf + ret, "dtdm\n");
268 return ret;
269}
270
271static ssize_t
255online_show (struct device *dev, struct device_attribute *attr, char *buf) 272online_show (struct device *dev, struct device_attribute *attr, char *buf)
256{ 273{
257 struct ccw_device *cdev = to_ccwdev(dev); 274 struct ccw_device *cdev = to_ccwdev(dev);
@@ -448,6 +465,7 @@ static DEVICE_ATTR(chpids, 0444, chpids_show, NULL);
448static DEVICE_ATTR(pimpampom, 0444, pimpampom_show, NULL); 465static DEVICE_ATTR(pimpampom, 0444, pimpampom_show, NULL);
449static DEVICE_ATTR(devtype, 0444, devtype_show, NULL); 466static DEVICE_ATTR(devtype, 0444, devtype_show, NULL);
450static DEVICE_ATTR(cutype, 0444, cutype_show, NULL); 467static DEVICE_ATTR(cutype, 0444, cutype_show, NULL);
468static DEVICE_ATTR(modalias, 0444, modalias_show, NULL);
451static DEVICE_ATTR(online, 0644, online_show, online_store); 469static DEVICE_ATTR(online, 0644, online_show, online_store);
452extern struct device_attribute dev_attr_cmb_enable; 470extern struct device_attribute dev_attr_cmb_enable;
453static DEVICE_ATTR(availability, 0444, available_show, NULL); 471static DEVICE_ATTR(availability, 0444, available_show, NULL);
@@ -471,6 +489,7 @@ subchannel_add_files (struct device *dev)
471static struct attribute * ccwdev_attrs[] = { 489static struct attribute * ccwdev_attrs[] = {
472 &dev_attr_devtype.attr, 490 &dev_attr_devtype.attr,
473 &dev_attr_cutype.attr, 491 &dev_attr_cutype.attr,
492 &dev_attr_modalias.attr,
474 &dev_attr_online.attr, 493 &dev_attr_online.attr,
475 &dev_attr_cmb_enable.attr, 494 &dev_attr_cmb_enable.attr,
476 &dev_attr_availability.attr, 495 &dev_attr_availability.attr,