diff options
-rw-r--r-- | drivers/staging/comedi/comedi_fops.c | 58 |
1 files changed, 48 insertions, 10 deletions
diff --git a/drivers/staging/comedi/comedi_fops.c b/drivers/staging/comedi/comedi_fops.c index d06b13a0ed57..95a418b3fa00 100644 --- a/drivers/staging/comedi/comedi_fops.c +++ b/drivers/staging/comedi/comedi_fops.c @@ -275,11 +275,16 @@ static int resize_async_buffer(struct comedi_device *dev, static ssize_t show_max_read_buffer_kb(struct device *csdev, struct device_attribute *attr, char *buf) { - struct comedi_file_info *info = dev_get_drvdata(csdev); + unsigned int minor = MINOR(csdev->devt); + struct comedi_file_info *info; struct comedi_device *dev; struct comedi_subdevice *s; unsigned int size = 0; + info = comedi_file_info_from_minor(minor); + if (!info) + return -ENODEV; + dev = info->device; mutex_lock(&dev->mutex); s = comedi_read_subdevice(info); @@ -294,7 +299,8 @@ static ssize_t store_max_read_buffer_kb(struct device *csdev, struct device_attribute *attr, const char *buf, size_t count) { - struct comedi_file_info *info = dev_get_drvdata(csdev); + unsigned int minor = MINOR(csdev->devt); + struct comedi_file_info *info; struct comedi_device *dev; struct comedi_subdevice *s; unsigned int size; @@ -307,6 +313,10 @@ static ssize_t store_max_read_buffer_kb(struct device *csdev, return -EINVAL; size *= 1024; + info = comedi_file_info_from_minor(minor); + if (!info) + return -ENODEV; + dev = info->device; mutex_lock(&dev->mutex); s = comedi_read_subdevice(info); @@ -322,11 +332,16 @@ static ssize_t store_max_read_buffer_kb(struct device *csdev, static ssize_t show_read_buffer_kb(struct device *csdev, struct device_attribute *attr, char *buf) { - struct comedi_file_info *info = dev_get_drvdata(csdev); + unsigned int minor = MINOR(csdev->devt); + struct comedi_file_info *info; struct comedi_device *dev; struct comedi_subdevice *s; unsigned int size = 0; + info = comedi_file_info_from_minor(minor); + if (!info) + return -ENODEV; + dev = info->device; mutex_lock(&dev->mutex); s = comedi_read_subdevice(info); @@ -341,7 +356,8 @@ static ssize_t store_read_buffer_kb(struct device *csdev, struct device_attribute *attr, const char *buf, size_t count) { - struct comedi_file_info *info = dev_get_drvdata(csdev); + unsigned int minor = MINOR(csdev->devt); + struct comedi_file_info *info; struct comedi_device *dev; struct comedi_subdevice *s; unsigned int size; @@ -354,6 +370,10 @@ static ssize_t store_read_buffer_kb(struct device *csdev, return -EINVAL; size *= 1024; + info = comedi_file_info_from_minor(minor); + if (!info) + return -ENODEV; + dev = info->device; mutex_lock(&dev->mutex); s = comedi_read_subdevice(info); @@ -370,11 +390,16 @@ static ssize_t show_max_write_buffer_kb(struct device *csdev, struct device_attribute *attr, char *buf) { - struct comedi_file_info *info = dev_get_drvdata(csdev); + unsigned int minor = MINOR(csdev->devt); + struct comedi_file_info *info; struct comedi_device *dev; struct comedi_subdevice *s; unsigned int size = 0; + info = comedi_file_info_from_minor(minor); + if (!info) + return -ENODEV; + dev = info->device; mutex_lock(&dev->mutex); s = comedi_write_subdevice(info); @@ -389,7 +414,8 @@ static ssize_t store_max_write_buffer_kb(struct device *csdev, struct device_attribute *attr, const char *buf, size_t count) { - struct comedi_file_info *info = dev_get_drvdata(csdev); + unsigned int minor = MINOR(csdev->devt); + struct comedi_file_info *info; struct comedi_device *dev; struct comedi_subdevice *s; unsigned int size; @@ -402,6 +428,10 @@ static ssize_t store_max_write_buffer_kb(struct device *csdev, return -EINVAL; size *= 1024; + info = comedi_file_info_from_minor(minor); + if (!info) + return -ENODEV; + dev = info->device; mutex_lock(&dev->mutex); s = comedi_write_subdevice(info); @@ -417,11 +447,16 @@ static ssize_t store_max_write_buffer_kb(struct device *csdev, static ssize_t show_write_buffer_kb(struct device *csdev, struct device_attribute *attr, char *buf) { - struct comedi_file_info *info = dev_get_drvdata(csdev); + unsigned int minor = MINOR(csdev->devt); + struct comedi_file_info *info; struct comedi_device *dev; struct comedi_subdevice *s; unsigned int size = 0; + info = comedi_file_info_from_minor(minor); + if (!info) + return -ENODEV; + dev = info->device; mutex_lock(&dev->mutex); s = comedi_write_subdevice(info); @@ -436,7 +471,8 @@ static ssize_t store_write_buffer_kb(struct device *csdev, struct device_attribute *attr, const char *buf, size_t count) { - struct comedi_file_info *info = dev_get_drvdata(csdev); + unsigned int minor = MINOR(csdev->devt); + struct comedi_file_info *info; struct comedi_device *dev; struct comedi_subdevice *s; unsigned int size; @@ -449,6 +485,10 @@ static ssize_t store_write_buffer_kb(struct device *csdev, return -EINVAL; size *= 1024; + info = comedi_file_info_from_minor(minor); + if (!info) + return -ENODEV; + dev = info->device; mutex_lock(&dev->mutex); s = comedi_write_subdevice(info); @@ -2416,7 +2456,6 @@ struct comedi_device *comedi_alloc_board_minor(struct device *hardware_device) MKDEV(COMEDI_MAJOR, i), NULL, "comedi%i", i); if (!IS_ERR(csdev)) dev->class_dev = csdev; - dev_set_drvdata(csdev, info); /* Note: dev->mutex needs to be unlocked by the caller. */ return dev; @@ -2482,7 +2521,6 @@ int comedi_alloc_subdevice_minor(struct comedi_subdevice *s) dev->minor, s->index); if (!IS_ERR(csdev)) s->class_dev = csdev; - dev_set_drvdata(csdev, info); return 0; } |