Merge master.kernel.org:/pub/scm/linux/kernel/git/gregkh/driver-2.6
This commit is contained in:
@@ -2125,7 +2125,7 @@ static int NCR_700_change_queue_type(struct scsi_device *SDp, int tag_type)
|
||||
}
|
||||
|
||||
static ssize_t
|
||||
NCR_700_show_active_tags(struct device *dev, char *buf)
|
||||
NCR_700_show_active_tags(struct device *dev, struct device_attribute *attr, char *buf)
|
||||
{
|
||||
struct scsi_device *SDp = to_scsi_device(dev);
|
||||
|
||||
|
@@ -466,7 +466,7 @@ int eesoxscsi_proc_info(struct Scsi_Host *host, char *buffer, char **start, off_
|
||||
return pos;
|
||||
}
|
||||
|
||||
static ssize_t eesoxscsi_show_term(struct device *dev, char *buf)
|
||||
static ssize_t eesoxscsi_show_term(struct device *dev, struct device_attribute *attr, char *buf)
|
||||
{
|
||||
struct expansion_card *ec = ECARD_DEV(dev);
|
||||
struct Scsi_Host *host = ecard_get_drvdata(ec);
|
||||
@@ -475,7 +475,7 @@ static ssize_t eesoxscsi_show_term(struct device *dev, char *buf)
|
||||
return sprintf(buf, "%d\n", info->control & EESOX_TERM_ENABLE ? 1 : 0);
|
||||
}
|
||||
|
||||
static ssize_t eesoxscsi_store_term(struct device *dev, const char *buf, size_t len)
|
||||
static ssize_t eesoxscsi_store_term(struct device *dev, struct device_attribute *attr, const char *buf, size_t len)
|
||||
{
|
||||
struct expansion_card *ec = ECARD_DEV(dev);
|
||||
struct Scsi_Host *host = ecard_get_drvdata(ec);
|
||||
|
@@ -269,7 +269,7 @@ int powertecscsi_proc_info(struct Scsi_Host *host, char *buffer, char **start, o
|
||||
return pos;
|
||||
}
|
||||
|
||||
static ssize_t powertecscsi_show_term(struct device *dev, char *buf)
|
||||
static ssize_t powertecscsi_show_term(struct device *dev, struct device_attribute *attr, char *buf)
|
||||
{
|
||||
struct expansion_card *ec = ECARD_DEV(dev);
|
||||
struct Scsi_Host *host = ecard_get_drvdata(ec);
|
||||
@@ -279,7 +279,7 @@ static ssize_t powertecscsi_show_term(struct device *dev, char *buf)
|
||||
}
|
||||
|
||||
static ssize_t
|
||||
powertecscsi_store_term(struct device *dev, const char *buf, size_t len)
|
||||
powertecscsi_store_term(struct device *dev, struct device_attribute *attr, const char *buf, size_t len)
|
||||
{
|
||||
struct expansion_card *ec = ECARD_DEV(dev);
|
||||
struct Scsi_Host *host = ecard_get_drvdata(ec);
|
||||
|
@@ -2716,7 +2716,7 @@ static int ipr_change_queue_type(struct scsi_device *sdev, int tag_type)
|
||||
* Return value:
|
||||
* number of bytes printed to buffer
|
||||
**/
|
||||
static ssize_t ipr_show_adapter_handle(struct device *dev, char *buf)
|
||||
static ssize_t ipr_show_adapter_handle(struct device *dev, struct device_attribute *attr, char *buf)
|
||||
{
|
||||
struct scsi_device *sdev = to_scsi_device(dev);
|
||||
struct ipr_ioa_cfg *ioa_cfg = (struct ipr_ioa_cfg *)sdev->host->hostdata;
|
||||
|
@@ -124,7 +124,7 @@ static irqreturn_t megaraid_isr(int, void *, struct pt_regs *);
|
||||
static void megaraid_mbox_dpc(unsigned long);
|
||||
|
||||
static ssize_t megaraid_sysfs_show_app_hndl(struct class_device *, char *);
|
||||
static ssize_t megaraid_sysfs_show_ldnum(struct device *, char *);
|
||||
static ssize_t megaraid_sysfs_show_ldnum(struct device *, struct device_attribute *attr, char *);
|
||||
|
||||
static int megaraid_cmm_register(adapter_t *);
|
||||
static int megaraid_cmm_unregister(adapter_t *);
|
||||
@@ -4145,7 +4145,7 @@ megaraid_sysfs_show_app_hndl(struct class_device *cdev, char *buf)
|
||||
* @param buf : buffer to send data to
|
||||
*/
|
||||
static ssize_t
|
||||
megaraid_sysfs_show_ldnum(struct device *dev, char *buf)
|
||||
megaraid_sysfs_show_ldnum(struct device *dev, struct device_attribute *attr, char *buf)
|
||||
{
|
||||
struct scsi_device *sdev = to_scsi_device(dev);
|
||||
adapter_t *adapter = (adapter_t *)SCSIHOST2ADAP(sdev->host);
|
||||
|
@@ -5608,13 +5608,13 @@ static ssize_t osst_filemark_cnt_show(struct class_device *class_dev, char *buf)
|
||||
|
||||
CLASS_DEVICE_ATTR(file_count, S_IRUGO, osst_filemark_cnt_show, NULL);
|
||||
|
||||
static struct class_simple * osst_sysfs_class;
|
||||
static struct class *osst_sysfs_class;
|
||||
|
||||
static int osst_sysfs_valid = 0;
|
||||
|
||||
static void osst_sysfs_init(void)
|
||||
{
|
||||
osst_sysfs_class = class_simple_create(THIS_MODULE, "onstream_tape");
|
||||
osst_sysfs_class = class_create(THIS_MODULE, "onstream_tape");
|
||||
if ( IS_ERR(osst_sysfs_class) )
|
||||
printk(KERN_WARNING "osst :W: Unable to register sysfs class\n");
|
||||
else
|
||||
@@ -5627,7 +5627,7 @@ static void osst_sysfs_add(dev_t dev, struct device *device, struct osst_tape *
|
||||
|
||||
if (!osst_sysfs_valid) return;
|
||||
|
||||
osst_class_member = class_simple_device_add(osst_sysfs_class, dev, device, "%s", name);
|
||||
osst_class_member = class_device_create(osst_sysfs_class, dev, device, "%s", name);
|
||||
if (IS_ERR(osst_class_member)) {
|
||||
printk(KERN_WARNING "osst :W: Unable to add sysfs class member %s\n", name);
|
||||
return;
|
||||
@@ -5645,13 +5645,13 @@ static void osst_sysfs_destroy(dev_t dev)
|
||||
{
|
||||
if (!osst_sysfs_valid) return;
|
||||
|
||||
class_simple_device_remove(dev);
|
||||
class_device_destroy(osst_sysfs_class, dev);
|
||||
}
|
||||
|
||||
static void osst_sysfs_cleanup(void)
|
||||
{
|
||||
if (osst_sysfs_valid) {
|
||||
class_simple_destroy(osst_sysfs_class);
|
||||
class_destroy(osst_sysfs_class);
|
||||
osst_sysfs_valid = 0;
|
||||
}
|
||||
}
|
||||
|
@@ -230,7 +230,7 @@ void scsi_sysfs_unregister(void)
|
||||
*/
|
||||
#define sdev_show_function(field, format_string) \
|
||||
static ssize_t \
|
||||
sdev_show_##field (struct device *dev, char *buf) \
|
||||
sdev_show_##field (struct device *dev, struct device_attribute *attr, char *buf) \
|
||||
{ \
|
||||
struct scsi_device *sdev; \
|
||||
sdev = to_scsi_device(dev); \
|
||||
@@ -254,7 +254,7 @@ static DEVICE_ATTR(field, S_IRUGO, sdev_show_##field, NULL);
|
||||
sdev_show_function(field, format_string) \
|
||||
\
|
||||
static ssize_t \
|
||||
sdev_store_##field (struct device *dev, const char *buf, size_t count) \
|
||||
sdev_store_##field (struct device *dev, struct device_attribute *attr, const char *buf, size_t count) \
|
||||
{ \
|
||||
struct scsi_device *sdev; \
|
||||
sdev = to_scsi_device(dev); \
|
||||
@@ -274,7 +274,7 @@ static DEVICE_ATTR(field, S_IRUGO | S_IWUSR, sdev_show_##field, sdev_store_##fie
|
||||
sdev_show_function(field, "%d\n") \
|
||||
\
|
||||
static ssize_t \
|
||||
sdev_store_##field (struct device *dev, const char *buf, size_t count) \
|
||||
sdev_store_##field (struct device *dev, struct device_attribute *attr, const char *buf, size_t count) \
|
||||
{ \
|
||||
int ret; \
|
||||
struct scsi_device *sdev; \
|
||||
@@ -317,7 +317,7 @@ sdev_rd_attr (model, "%.16s\n");
|
||||
sdev_rd_attr (rev, "%.4s\n");
|
||||
|
||||
static ssize_t
|
||||
sdev_show_timeout (struct device *dev, char *buf)
|
||||
sdev_show_timeout (struct device *dev, struct device_attribute *attr, char *buf)
|
||||
{
|
||||
struct scsi_device *sdev;
|
||||
sdev = to_scsi_device(dev);
|
||||
@@ -325,7 +325,7 @@ sdev_show_timeout (struct device *dev, char *buf)
|
||||
}
|
||||
|
||||
static ssize_t
|
||||
sdev_store_timeout (struct device *dev, const char *buf, size_t count)
|
||||
sdev_store_timeout (struct device *dev, struct device_attribute *attr, const char *buf, size_t count)
|
||||
{
|
||||
struct scsi_device *sdev;
|
||||
int timeout;
|
||||
@@ -337,14 +337,14 @@ sdev_store_timeout (struct device *dev, const char *buf, size_t count)
|
||||
static DEVICE_ATTR(timeout, S_IRUGO | S_IWUSR, sdev_show_timeout, sdev_store_timeout);
|
||||
|
||||
static ssize_t
|
||||
store_rescan_field (struct device *dev, const char *buf, size_t count)
|
||||
store_rescan_field (struct device *dev, struct device_attribute *attr, const char *buf, size_t count)
|
||||
{
|
||||
scsi_rescan_device(dev);
|
||||
return count;
|
||||
}
|
||||
static DEVICE_ATTR(rescan, S_IWUSR, NULL, store_rescan_field);
|
||||
|
||||
static ssize_t sdev_store_delete(struct device *dev, const char *buf,
|
||||
static ssize_t sdev_store_delete(struct device *dev, struct device_attribute *attr, const char *buf,
|
||||
size_t count)
|
||||
{
|
||||
scsi_remove_device(to_scsi_device(dev));
|
||||
@@ -353,7 +353,7 @@ static ssize_t sdev_store_delete(struct device *dev, const char *buf,
|
||||
static DEVICE_ATTR(delete, S_IWUSR, NULL, sdev_store_delete);
|
||||
|
||||
static ssize_t
|
||||
store_state_field(struct device *dev, const char *buf, size_t count)
|
||||
store_state_field(struct device *dev, struct device_attribute *attr, const char *buf, size_t count)
|
||||
{
|
||||
int i;
|
||||
struct scsi_device *sdev = to_scsi_device(dev);
|
||||
@@ -376,7 +376,7 @@ store_state_field(struct device *dev, const char *buf, size_t count)
|
||||
}
|
||||
|
||||
static ssize_t
|
||||
show_state_field(struct device *dev, char *buf)
|
||||
show_state_field(struct device *dev, struct device_attribute *attr, char *buf)
|
||||
{
|
||||
struct scsi_device *sdev = to_scsi_device(dev);
|
||||
const char *name = scsi_device_state_name(sdev->sdev_state);
|
||||
@@ -390,7 +390,7 @@ show_state_field(struct device *dev, char *buf)
|
||||
static DEVICE_ATTR(state, S_IRUGO | S_IWUSR, show_state_field, store_state_field);
|
||||
|
||||
static ssize_t
|
||||
show_queue_type_field(struct device *dev, char *buf)
|
||||
show_queue_type_field(struct device *dev, struct device_attribute *attr, char *buf)
|
||||
{
|
||||
struct scsi_device *sdev = to_scsi_device(dev);
|
||||
const char *name = "none";
|
||||
@@ -406,7 +406,7 @@ show_queue_type_field(struct device *dev, char *buf)
|
||||
static DEVICE_ATTR(queue_type, S_IRUGO, show_queue_type_field, NULL);
|
||||
|
||||
static ssize_t
|
||||
show_iostat_counterbits(struct device *dev, char *buf)
|
||||
show_iostat_counterbits(struct device *dev, struct device_attribute *attr, char *buf)
|
||||
{
|
||||
return snprintf(buf, 20, "%d\n", (int)sizeof(atomic_t) * 8);
|
||||
}
|
||||
@@ -415,7 +415,7 @@ static DEVICE_ATTR(iocounterbits, S_IRUGO, show_iostat_counterbits, NULL);
|
||||
|
||||
#define show_sdev_iostat(field) \
|
||||
static ssize_t \
|
||||
show_iostat_##field(struct device *dev, char *buf) \
|
||||
show_iostat_##field(struct device *dev, struct device_attribute *attr, char *buf) \
|
||||
{ \
|
||||
struct scsi_device *sdev = to_scsi_device(dev); \
|
||||
unsigned long long count = atomic_read(&sdev->field); \
|
||||
@@ -449,7 +449,7 @@ static struct device_attribute *scsi_sysfs_sdev_attrs[] = {
|
||||
NULL
|
||||
};
|
||||
|
||||
static ssize_t sdev_store_queue_depth_rw(struct device *dev, const char *buf,
|
||||
static ssize_t sdev_store_queue_depth_rw(struct device *dev, struct device_attribute *attr, const char *buf,
|
||||
size_t count)
|
||||
{
|
||||
int depth, retval;
|
||||
@@ -475,7 +475,7 @@ static struct device_attribute sdev_attr_queue_depth_rw =
|
||||
__ATTR(queue_depth, S_IRUGO | S_IWUSR, sdev_show_queue_depth,
|
||||
sdev_store_queue_depth_rw);
|
||||
|
||||
static ssize_t sdev_store_queue_type_rw(struct device *dev, const char *buf,
|
||||
static ssize_t sdev_store_queue_type_rw(struct device *dev, struct device_attribute *attr, const char *buf,
|
||||
size_t count)
|
||||
{
|
||||
struct scsi_device *sdev = to_scsi_device(dev);
|
||||
@@ -669,6 +669,13 @@ void __scsi_remove_target(struct scsi_target *starget)
|
||||
scsi_target_reap(starget);
|
||||
}
|
||||
|
||||
static int __remove_child (struct device * dev, void * data)
|
||||
{
|
||||
if (scsi_is_target_device(dev))
|
||||
__scsi_remove_target(to_scsi_target(dev));
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* scsi_remove_target - try to remove a target and all its devices
|
||||
* @dev: generic starget or parent of generic stargets to be removed
|
||||
@@ -679,7 +686,7 @@ void __scsi_remove_target(struct scsi_target *starget)
|
||||
*/
|
||||
void scsi_remove_target(struct device *dev)
|
||||
{
|
||||
struct device *rdev, *idev, *next;
|
||||
struct device *rdev;
|
||||
|
||||
if (scsi_is_target_device(dev)) {
|
||||
__scsi_remove_target(to_scsi_target(dev));
|
||||
@@ -687,10 +694,7 @@ void scsi_remove_target(struct device *dev)
|
||||
}
|
||||
|
||||
rdev = get_device(dev);
|
||||
list_for_each_entry_safe(idev, next, &dev->children, node) {
|
||||
if (scsi_is_target_device(idev))
|
||||
__scsi_remove_target(to_scsi_target(idev));
|
||||
}
|
||||
device_for_each_child(dev, NULL, __remove_child);
|
||||
put_device(rdev);
|
||||
}
|
||||
EXPORT_SYMBOL(scsi_remove_target);
|
||||
|
@@ -348,17 +348,21 @@ spi_transport_rd_attr(rd_strm, "%d\n");
|
||||
spi_transport_rd_attr(rti, "%d\n");
|
||||
spi_transport_rd_attr(pcomp_en, "%d\n");
|
||||
|
||||
/* we only care about the first child device so we return 1 */
|
||||
static int child_iter(struct device *dev, void *data)
|
||||
{
|
||||
struct scsi_device *sdev = to_scsi_device(dev);
|
||||
|
||||
spi_dv_device(sdev);
|
||||
return 1;
|
||||
}
|
||||
|
||||
static ssize_t
|
||||
store_spi_revalidate(struct class_device *cdev, const char *buf, size_t count)
|
||||
{
|
||||
struct scsi_target *starget = transport_class_to_starget(cdev);
|
||||
|
||||
/* FIXME: we're relying on an awful lot of device internals
|
||||
* here. We really need a function to get the first available
|
||||
* child */
|
||||
struct device *dev = container_of(starget->dev.children.next, struct device, node);
|
||||
struct scsi_device *sdev = to_scsi_device(dev);
|
||||
spi_dv_device(sdev);
|
||||
device_for_each_child(&starget->dev, NULL, child_iter);
|
||||
return count;
|
||||
}
|
||||
static CLASS_DEVICE_ATTR(revalidate, S_IWUSR, NULL, store_spi_revalidate);
|
||||
|
@@ -1430,7 +1430,7 @@ static struct file_operations sg_fops = {
|
||||
.fasync = sg_fasync,
|
||||
};
|
||||
|
||||
static struct class_simple * sg_sysfs_class;
|
||||
static struct class *sg_sysfs_class;
|
||||
|
||||
static int sg_sysfs_valid = 0;
|
||||
|
||||
@@ -1551,13 +1551,13 @@ sg_add(struct class_device *cl_dev)
|
||||
if (sg_sysfs_valid) {
|
||||
struct class_device * sg_class_member;
|
||||
|
||||
sg_class_member = class_simple_device_add(sg_sysfs_class,
|
||||
sg_class_member = class_device_create(sg_sysfs_class,
|
||||
MKDEV(SCSI_GENERIC_MAJOR, k),
|
||||
cl_dev->dev, "%s",
|
||||
disk->disk_name);
|
||||
if (IS_ERR(sg_class_member))
|
||||
printk(KERN_WARNING "sg_add: "
|
||||
"class_simple_device_add failed\n");
|
||||
"class_device_create failed\n");
|
||||
class_set_devdata(sg_class_member, sdp);
|
||||
error = sysfs_create_link(&scsidp->sdev_gendev.kobj,
|
||||
&sg_class_member->kobj, "generic");
|
||||
@@ -1636,7 +1636,7 @@ sg_remove(struct class_device *cl_dev)
|
||||
|
||||
if (sdp) {
|
||||
sysfs_remove_link(&scsidp->sdev_gendev.kobj, "generic");
|
||||
class_simple_device_remove(MKDEV(SCSI_GENERIC_MAJOR, k));
|
||||
class_device_destroy(sg_sysfs_class, MKDEV(SCSI_GENERIC_MAJOR, k));
|
||||
cdev_del(sdp->cdev);
|
||||
sdp->cdev = NULL;
|
||||
devfs_remove("%s/generic", scsidp->devfs_name);
|
||||
@@ -1677,7 +1677,7 @@ init_sg(void)
|
||||
SG_MAX_DEVS, "sg");
|
||||
if (rc)
|
||||
return rc;
|
||||
sg_sysfs_class = class_simple_create(THIS_MODULE, "scsi_generic");
|
||||
sg_sysfs_class = class_create(THIS_MODULE, "scsi_generic");
|
||||
if ( IS_ERR(sg_sysfs_class) ) {
|
||||
rc = PTR_ERR(sg_sysfs_class);
|
||||
goto err_out;
|
||||
@@ -1690,7 +1690,7 @@ init_sg(void)
|
||||
#endif /* CONFIG_SCSI_PROC_FS */
|
||||
return 0;
|
||||
}
|
||||
class_simple_destroy(sg_sysfs_class);
|
||||
class_destroy(sg_sysfs_class);
|
||||
err_out:
|
||||
unregister_chrdev_region(MKDEV(SCSI_GENERIC_MAJOR, 0), SG_MAX_DEVS);
|
||||
return rc;
|
||||
@@ -1703,7 +1703,7 @@ exit_sg(void)
|
||||
sg_proc_cleanup();
|
||||
#endif /* CONFIG_SCSI_PROC_FS */
|
||||
scsi_unregister_interface(&sg_interface);
|
||||
class_simple_destroy(sg_sysfs_class);
|
||||
class_destroy(sg_sysfs_class);
|
||||
sg_sysfs_valid = 0;
|
||||
unregister_chrdev_region(MKDEV(SCSI_GENERIC_MAJOR, 0),
|
||||
SG_MAX_DEVS);
|
||||
|
@@ -84,7 +84,7 @@ static int try_wdio = 1;
|
||||
static int st_dev_max;
|
||||
static int st_nr_dev;
|
||||
|
||||
static struct class_simple *st_sysfs_class;
|
||||
static struct class *st_sysfs_class;
|
||||
|
||||
MODULE_AUTHOR("Kai Makisara");
|
||||
MODULE_DESCRIPTION("SCSI Tape Driver");
|
||||
@@ -4024,8 +4024,9 @@ out_free_tape:
|
||||
if (STm->cdevs[j]) {
|
||||
if (cdev == STm->cdevs[j])
|
||||
cdev = NULL;
|
||||
class_simple_device_remove(MKDEV(SCSI_TAPE_MAJOR,
|
||||
TAPE_MINOR(i, mode, j)));
|
||||
class_device_destroy(st_sysfs_class,
|
||||
MKDEV(SCSI_TAPE_MAJOR,
|
||||
TAPE_MINOR(i, mode, j)));
|
||||
cdev_del(STm->cdevs[j]);
|
||||
}
|
||||
}
|
||||
@@ -4068,8 +4069,9 @@ static int st_remove(struct device *dev)
|
||||
devfs_remove("%s/mt%s", SDp->devfs_name, st_formats[j]);
|
||||
devfs_remove("%s/mt%sn", SDp->devfs_name, st_formats[j]);
|
||||
for (j=0; j < 2; j++) {
|
||||
class_simple_device_remove(MKDEV(SCSI_TAPE_MAJOR,
|
||||
TAPE_MINOR(i, mode, j)));
|
||||
class_device_destroy(st_sysfs_class,
|
||||
MKDEV(SCSI_TAPE_MAJOR,
|
||||
TAPE_MINOR(i, mode, j)));
|
||||
cdev_del(tpnt->modes[mode].cdevs[j]);
|
||||
tpnt->modes[mode].cdevs[j] = NULL;
|
||||
}
|
||||
@@ -4134,7 +4136,7 @@ static int __init init_st(void)
|
||||
"st: Version %s, fixed bufsize %d, s/g segs %d\n",
|
||||
verstr, st_fixed_buffer_size, st_max_sg_segs);
|
||||
|
||||
st_sysfs_class = class_simple_create(THIS_MODULE, "scsi_tape");
|
||||
st_sysfs_class = class_create(THIS_MODULE, "scsi_tape");
|
||||
if (IS_ERR(st_sysfs_class)) {
|
||||
st_sysfs_class = NULL;
|
||||
printk(KERN_ERR "Unable create sysfs class for SCSI tapes\n");
|
||||
@@ -4148,7 +4150,7 @@ static int __init init_st(void)
|
||||
return 0;
|
||||
}
|
||||
if (st_sysfs_class)
|
||||
class_simple_destroy(st_sysfs_class);
|
||||
class_destroy(st_sysfs_class);
|
||||
unregister_chrdev_region(MKDEV(SCSI_TAPE_MAJOR, 0),
|
||||
|
||||
ST_MAX_TAPE_ENTRIES);
|
||||
@@ -4161,7 +4163,7 @@ static int __init init_st(void)
|
||||
static void __exit exit_st(void)
|
||||
{
|
||||
if (st_sysfs_class)
|
||||
class_simple_destroy(st_sysfs_class);
|
||||
class_destroy(st_sysfs_class);
|
||||
st_sysfs_class = NULL;
|
||||
do_remove_driverfs_files();
|
||||
scsi_unregister_driver(&st_template.gendrv);
|
||||
@@ -4284,12 +4286,12 @@ static void do_create_class_files(struct scsi_tape *STp, int dev_num, int mode)
|
||||
snprintf(name, 10, "%s%s%s", rew ? "n" : "",
|
||||
STp->disk->disk_name, st_formats[i]);
|
||||
st_class_member =
|
||||
class_simple_device_add(st_sysfs_class,
|
||||
MKDEV(SCSI_TAPE_MAJOR,
|
||||
TAPE_MINOR(dev_num, mode, rew)),
|
||||
&STp->device->sdev_gendev, "%s", name);
|
||||
class_device_create(st_sysfs_class,
|
||||
MKDEV(SCSI_TAPE_MAJOR,
|
||||
TAPE_MINOR(dev_num, mode, rew)),
|
||||
&STp->device->sdev_gendev, "%s", name);
|
||||
if (IS_ERR(st_class_member)) {
|
||||
printk(KERN_WARNING "st%d: class_simple_device_add failed\n",
|
||||
printk(KERN_WARNING "st%d: class_device_create failed\n",
|
||||
dev_num);
|
||||
goto out;
|
||||
}
|
||||
|
Reference in New Issue
Block a user