From 27d35284258c596900e0e41c46932ec4abe6a7b1 Mon Sep 17 00:00:00 2001 From: Marcel Holtmann Date: Mon, 3 Jul 2006 10:02:37 +0200 Subject: [Bluetooth] Add platform device for virtual and serial devices This patch adds a generic Bluetooth platform device that can be used as parent device by virtual and serial devices. Signed-off-by: Marcel Holtmann --- net/bluetooth/hci_sysfs.c | 39 +++++++++++++++++++++++++++++++++++++-- 1 file changed, 37 insertions(+), 2 deletions(-) (limited to 'net/bluetooth/hci_sysfs.c') diff --git a/net/bluetooth/hci_sysfs.c b/net/bluetooth/hci_sysfs.c index 89918d2..7789e26 100644 --- a/net/bluetooth/hci_sysfs.c +++ b/net/bluetooth/hci_sysfs.c @@ -3,6 +3,8 @@ #include #include +#include + #include #include @@ -197,9 +199,14 @@ struct class bt_class = { .uevent = bt_uevent, #endif }; - EXPORT_SYMBOL_GPL(bt_class); +static struct bus_type bt_bus = { + .name = "bluetooth", +}; + +static struct platform_device *bt_platform; + int hci_register_sysfs(struct hci_dev *hdev) { struct class_device *cdev = &hdev->class_dev; @@ -211,6 +218,11 @@ int hci_register_sysfs(struct hci_dev *hdev) cdev->class = &bt_class; class_set_devdata(cdev, hdev); + if (!cdev->dev) + cdev->dev = &bt_platform->dev; + + hdev->dev = cdev->dev; + strlcpy(cdev->class_id, hdev->name, BUS_ID_SIZE); err = class_device_register(cdev); if (err < 0) @@ -233,10 +245,33 @@ void hci_unregister_sysfs(struct hci_dev *hdev) int __init bt_sysfs_init(void) { - return class_register(&bt_class); + int err; + + bt_platform = platform_device_register_simple("bluetooth", -1, NULL, 0); + if (IS_ERR(bt_platform)) + return PTR_ERR(bt_platform); + + err = bus_register(&bt_bus); + if (err < 0) { + platform_device_unregister(bt_platform); + return err; + } + + err = class_register(&bt_class); + if (err < 0) { + bus_unregister(&bt_bus); + platform_device_unregister(bt_platform); + return err; + } + + return 0; } void __exit bt_sysfs_cleanup(void) { class_unregister(&bt_class); + + bus_unregister(&bt_bus); + + platform_device_unregister(bt_platform); } -- cgit v1.1