aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/pcmcia/socket_sysfs.c
diff options
context:
space:
mode:
authorDavid Brownell <dbrownell@users.sourceforge.net>2008-04-28 04:03:20 -0400
committerGreg Kroah-Hartman <gregkh@suse.de>2008-04-30 19:52:48 -0400
commit4356d73d028ad0726cfaf31ad30c5d28fcd98795 (patch)
tree4ca02a5ac47e6da7857c6a0caf93d06c9916f96c /drivers/pcmcia/socket_sysfs.c
parent4f452e8aa492c0b8028ca9b4bdb4d018ba28c6c7 (diff)
pcmcia: remove pccard_sysfs_interface warnings
Make the PCMCIA core stop using class_interface to hide socket attribute registration. This removes the associated section mismatch warnings, and helps get to the point where that mechanism can finally be removed. Simplify that attribute registration by using an attribute_group. This is a net shrink in object size. Signed-off-by: David Brownell <dbrownell@users.sourceforge.net> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Diffstat (limited to 'drivers/pcmcia/socket_sysfs.c')
-rw-r--r--drivers/pcmcia/socket_sysfs.c52
1 files changed, 21 insertions, 31 deletions
diff --git a/drivers/pcmcia/socket_sysfs.c b/drivers/pcmcia/socket_sysfs.c
index b4409002b7f8..562384d6f321 100644
--- a/drivers/pcmcia/socket_sysfs.c
+++ b/drivers/pcmcia/socket_sysfs.c
@@ -356,19 +356,23 @@ static ssize_t pccard_store_cis(struct kobject *kobj,
356} 356}
357 357
358 358
359static struct device_attribute *pccard_socket_attributes[] = { 359static struct attribute *pccard_socket_attributes[] = {
360 &dev_attr_card_type, 360 &dev_attr_card_type.attr,
361 &dev_attr_card_voltage, 361 &dev_attr_card_voltage.attr,
362 &dev_attr_card_vpp, 362 &dev_attr_card_vpp.attr,
363 &dev_attr_card_vcc, 363 &dev_attr_card_vcc.attr,
364 &dev_attr_card_insert, 364 &dev_attr_card_insert.attr,
365 &dev_attr_card_pm_state, 365 &dev_attr_card_pm_state.attr,
366 &dev_attr_card_eject, 366 &dev_attr_card_eject.attr,
367 &dev_attr_card_irq_mask, 367 &dev_attr_card_irq_mask.attr,
368 &dev_attr_available_resources_setup_done, 368 &dev_attr_available_resources_setup_done.attr,
369 NULL, 369 NULL,
370}; 370};
371 371
372static const struct attribute_group socket_attrs = {
373 .attrs = pccard_socket_attributes,
374};
375
372static struct bin_attribute pccard_cis_attr = { 376static struct bin_attribute pccard_cis_attr = {
373 .attr = { .name = "cis", .mode = S_IRUGO | S_IWUSR }, 377 .attr = { .name = "cis", .mode = S_IRUGO | S_IWUSR },
374 .size = 0x200, 378 .size = 0x200,
@@ -376,35 +380,21 @@ static struct bin_attribute pccard_cis_attr = {
376 .write = pccard_store_cis, 380 .write = pccard_store_cis,
377}; 381};
378 382
379static int __devinit pccard_sysfs_add_socket(struct device *dev, 383int pccard_sysfs_add_socket(struct device *dev)
380 struct class_interface *class_intf)
381{ 384{
382 struct device_attribute **attr;
383 int ret = 0; 385 int ret = 0;
384 386
385 for (attr = pccard_socket_attributes; *attr; attr++) { 387 ret = sysfs_create_group(&dev->kobj, &socket_attrs);
386 ret = device_create_file(dev, *attr); 388 if (!ret) {
389 ret = sysfs_create_bin_file(&dev->kobj, &pccard_cis_attr);
387 if (ret) 390 if (ret)
388 break; 391 sysfs_remove_group(&dev->kobj, &socket_attrs);
389 } 392 }
390 if (!ret)
391 ret = sysfs_create_bin_file(&dev->kobj, &pccard_cis_attr);
392
393 return ret; 393 return ret;
394} 394}
395 395
396static void __devexit pccard_sysfs_remove_socket(struct device *dev, 396void pccard_sysfs_remove_socket(struct device *dev)
397 struct class_interface *class_intf)
398{ 397{
399 struct device_attribute **attr;
400
401 sysfs_remove_bin_file(&dev->kobj, &pccard_cis_attr); 398 sysfs_remove_bin_file(&dev->kobj, &pccard_cis_attr);
402 for (attr = pccard_socket_attributes; *attr; attr++) 399 sysfs_remove_group(&dev->kobj, &socket_attrs);
403 device_remove_file(dev, *attr);
404} 400}
405
406struct class_interface pccard_sysfs_interface = {
407 .class = &pcmcia_socket_class,
408 .add_dev = &pccard_sysfs_add_socket,
409 .remove_dev = __devexit_p(&pccard_sysfs_remove_socket),
410};