Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 95608
b: refs/heads/master
c: 4356d73
h: refs/heads/master
v: v3
  • Loading branch information
David Brownell authored and Greg Kroah-Hartman committed Apr 30, 2008
1 parent 0d877f0 commit dae36cc
Show file tree
Hide file tree
Showing 4 changed files with 29 additions and 41 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 4f452e8aa492c0b8028ca9b4bdb4d018ba28c6c7
refs/heads/master: 4356d73d028ad0726cfaf31ad30c5d28fcd98795
13 changes: 5 additions & 8 deletions trunk/drivers/pcmcia/cs.c
Original file line number Diff line number Diff line change
Expand Up @@ -652,6 +652,9 @@ static int pccardd(void *__skt)
complete(&skt->thread_done);
return 0;
}
ret = pccard_sysfs_add_socket(&skt->dev);
if (ret)
dev_warn(&skt->dev, "err %d adding socket attributes\n", ret);

add_wait_queue(&skt->thread_wait, &wait);
complete(&skt->thread_done);
Expand Down Expand Up @@ -694,6 +697,7 @@ static int pccardd(void *__skt)
remove_wait_queue(&skt->thread_wait, &wait);

/* remove from the device core */
pccard_sysfs_remove_socket(&skt->dev);
device_unregister(&skt->dev);

return 0;
Expand Down Expand Up @@ -940,20 +944,13 @@ EXPORT_SYMBOL(pcmcia_socket_class);

static int __init init_pcmcia_cs(void)
{
int ret;

init_completion(&pcmcia_unload);
ret = class_register(&pcmcia_socket_class);
if (ret)
return (ret);
return class_interface_register(&pccard_sysfs_interface);
return class_register(&pcmcia_socket_class);
}

static void __exit exit_pcmcia_cs(void)
{
class_interface_unregister(&pccard_sysfs_interface);
class_unregister(&pcmcia_socket_class);

wait_for_completion(&pcmcia_unload);
}

Expand Down
3 changes: 2 additions & 1 deletion trunk/drivers/pcmcia/cs_internal.h
Original file line number Diff line number Diff line change
Expand Up @@ -121,7 +121,8 @@ struct resource *pcmcia_find_mem_region(u_long base, u_long num, u_long align,
void release_resource_db(struct pcmcia_socket *s);

/* In socket_sysfs.c */
extern struct class_interface pccard_sysfs_interface;
extern int pccard_sysfs_add_socket(struct device *dev);
extern void pccard_sysfs_remove_socket(struct device *dev);

/* In cs.c */
extern struct rw_semaphore pcmcia_socket_list_rwsem;
Expand Down
52 changes: 21 additions & 31 deletions trunk/drivers/pcmcia/socket_sysfs.c
Original file line number Diff line number Diff line change
Expand Up @@ -356,55 +356,45 @@ static ssize_t pccard_store_cis(struct kobject *kobj,
}


static struct device_attribute *pccard_socket_attributes[] = {
&dev_attr_card_type,
&dev_attr_card_voltage,
&dev_attr_card_vpp,
&dev_attr_card_vcc,
&dev_attr_card_insert,
&dev_attr_card_pm_state,
&dev_attr_card_eject,
&dev_attr_card_irq_mask,
&dev_attr_available_resources_setup_done,
static struct attribute *pccard_socket_attributes[] = {
&dev_attr_card_type.attr,
&dev_attr_card_voltage.attr,
&dev_attr_card_vpp.attr,
&dev_attr_card_vcc.attr,
&dev_attr_card_insert.attr,
&dev_attr_card_pm_state.attr,
&dev_attr_card_eject.attr,
&dev_attr_card_irq_mask.attr,
&dev_attr_available_resources_setup_done.attr,
NULL,
};

static const struct attribute_group socket_attrs = {
.attrs = pccard_socket_attributes,
};

static struct bin_attribute pccard_cis_attr = {
.attr = { .name = "cis", .mode = S_IRUGO | S_IWUSR },
.size = 0x200,
.read = pccard_show_cis,
.write = pccard_store_cis,
};

static int __devinit pccard_sysfs_add_socket(struct device *dev,
struct class_interface *class_intf)
int pccard_sysfs_add_socket(struct device *dev)
{
struct device_attribute **attr;
int ret = 0;

for (attr = pccard_socket_attributes; *attr; attr++) {
ret = device_create_file(dev, *attr);
ret = sysfs_create_group(&dev->kobj, &socket_attrs);
if (!ret) {
ret = sysfs_create_bin_file(&dev->kobj, &pccard_cis_attr);
if (ret)
break;
sysfs_remove_group(&dev->kobj, &socket_attrs);
}
if (!ret)
ret = sysfs_create_bin_file(&dev->kobj, &pccard_cis_attr);

return ret;
}

static void __devexit pccard_sysfs_remove_socket(struct device *dev,
struct class_interface *class_intf)
void pccard_sysfs_remove_socket(struct device *dev)
{
struct device_attribute **attr;

sysfs_remove_bin_file(&dev->kobj, &pccard_cis_attr);
for (attr = pccard_socket_attributes; *attr; attr++)
device_remove_file(dev, *attr);
sysfs_remove_group(&dev->kobj, &socket_attrs);
}

struct class_interface pccard_sysfs_interface = {
.class = &pcmcia_socket_class,
.add_dev = &pccard_sysfs_add_socket,
.remove_dev = __devexit_p(&pccard_sysfs_remove_socket),
};

0 comments on commit dae36cc

Please sign in to comment.