git.openpandora.org
/
pandora-kernel.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Merge branch 'upstream-linus' of master.kernel.org:/pub/scm/linux/kernel/git/jgarzik...
[pandora-kernel.git]
/
net
/
bluetooth
/
hci_sysfs.c
diff --git
a/net/bluetooth/hci_sysfs.c
b/net/bluetooth/hci_sysfs.c
index
954eb74
..
2583540
100644
(file)
--- a/
net/bluetooth/hci_sysfs.c
+++ b/
net/bluetooth/hci_sysfs.c
@@
-237,12
+237,12
@@
static void bt_release(struct device *dev)
kfree(data);
}
kfree(data);
}
-static void add_conn(
void *data
)
+static void add_conn(
struct work_struct *work
)
{
{
- struct hci_conn *conn =
data
;
+ struct hci_conn *conn =
container_of(work, struct hci_conn, work)
;
int i;
int i;
- if (device_
register
(&conn->dev) < 0) {
+ if (device_
add
(&conn->dev) < 0) {
BT_ERR("Failed to register connection device");
return;
}
BT_ERR("Failed to register connection device");
return;
}
@@
-259,7
+259,9
@@
void hci_conn_add_sysfs(struct hci_conn *conn)
BT_DBG("conn %p", conn);
BT_DBG("conn %p", conn);
- conn->dev.parent = &hdev->dev;
+ conn->dev.bus = &bt_bus;
+ conn->dev.parent = &hdev->dev;
+
conn->dev.release = bt_release;
snprintf(conn->dev.bus_id, BUS_ID_SIZE,
conn->dev.release = bt_release;
snprintf(conn->dev.bus_id, BUS_ID_SIZE,
@@
-270,14
+272,16
@@
void hci_conn_add_sysfs(struct hci_conn *conn)
dev_set_drvdata(&conn->dev, conn);
dev_set_drvdata(&conn->dev, conn);
- INIT_WORK(&conn->work, add_conn, (void *) conn);
+ device_initialize(&conn->dev);
+
+ INIT_WORK(&conn->work, add_conn);
schedule_work(&conn->work);
}
schedule_work(&conn->work);
}
-static void del_conn(
void *data
)
+static void del_conn(
struct work_struct *work
)
{
{
- struct hci_conn *conn =
data
;
+ struct hci_conn *conn =
container_of(work, struct hci_conn, work)
;
device_del(&conn->dev);
}
device_del(&conn->dev);
}
@@
-285,7
+289,10
@@
void hci_conn_del_sysfs(struct hci_conn *conn)
{
BT_DBG("conn %p", conn);
{
BT_DBG("conn %p", conn);
- INIT_WORK(&conn->work, del_conn, (void *) conn);
+ if (!device_is_registered(&conn->dev))
+ return;
+
+ INIT_WORK(&conn->work, del_conn);
schedule_work(&conn->work);
}
schedule_work(&conn->work);
}
@@
-298,7
+305,7
@@
int hci_register_sysfs(struct hci_dev *hdev)
BT_DBG("%p name %s type %d", hdev, hdev->name, hdev->type);
BT_DBG("%p name %s type %d", hdev, hdev->name, hdev->type);
- dev->
class = bt_clas
s;
+ dev->
bus = &bt_bu
s;
dev->parent = hdev->parent;
strlcpy(dev->bus_id, hdev->name, BUS_ID_SIZE);
dev->parent = hdev->parent;
strlcpy(dev->bus_id, hdev->name, BUS_ID_SIZE);
@@
-315,6
+322,10
@@
int hci_register_sysfs(struct hci_dev *hdev)
if (device_create_file(dev, bt_attrs[i]) < 0)
BT_ERR("Failed to create device attribute");
if (device_create_file(dev, bt_attrs[i]) < 0)
BT_ERR("Failed to create device attribute");
+ if (sysfs_create_link(&bt_class->subsys.kobj,
+ &dev->kobj, kobject_name(&dev->kobj)) < 0)
+ BT_ERR("Failed to create class symlink");
+
return 0;
}
return 0;
}
@@
-322,6
+333,9
@@
void hci_unregister_sysfs(struct hci_dev *hdev)
{
BT_DBG("%p name %s type %d", hdev, hdev->name, hdev->type);
{
BT_DBG("%p name %s type %d", hdev, hdev->name, hdev->type);
+ sysfs_remove_link(&bt_class->subsys.kobj,
+ kobject_name(&hdev->dev.kobj));
+
device_del(&hdev->dev);
}
device_del(&hdev->dev);
}