uwb: create a uwb bus type and add in-range peer devices to it
Documentation/usb/WUSB-Design-overview.txt states that UWB devices seen by a UWB radio controller are added to /sys/bus/uwb/devices, but this was not actually being done. This functionality is needed in order for UWB peer devices to be enumerated by user mode tools. This patch creates a uwb bus type and adds UWB peer devices to it as they are discovered by the radio controller. Signed-off-by: Thomas Pugliese <thomas.pugliese@gmail.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
58e4ab3eb0
commit
848879340a
drivers/uwb
@ -121,9 +121,19 @@ static int __init uwb_subsys_init(void)
|
|||||||
result = class_register(&uwb_rc_class);
|
result = class_register(&uwb_rc_class);
|
||||||
if (result < 0)
|
if (result < 0)
|
||||||
goto error_uwb_rc_class_register;
|
goto error_uwb_rc_class_register;
|
||||||
|
|
||||||
|
/* Register the UWB bus */
|
||||||
|
result = bus_register(&uwb_bus_type);
|
||||||
|
if (result) {
|
||||||
|
pr_err("%s - registering bus driver failed\n", __func__);
|
||||||
|
goto exit_bus;
|
||||||
|
}
|
||||||
|
|
||||||
uwb_dbg_init();
|
uwb_dbg_init();
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
exit_bus:
|
||||||
|
class_unregister(&uwb_rc_class);
|
||||||
error_uwb_rc_class_register:
|
error_uwb_rc_class_register:
|
||||||
uwb_est_destroy();
|
uwb_est_destroy();
|
||||||
error_est_init:
|
error_est_init:
|
||||||
@ -134,6 +144,7 @@ module_init(uwb_subsys_init);
|
|||||||
static void __exit uwb_subsys_exit(void)
|
static void __exit uwb_subsys_exit(void)
|
||||||
{
|
{
|
||||||
uwb_dbg_exit();
|
uwb_dbg_exit();
|
||||||
|
bus_unregister(&uwb_bus_type);
|
||||||
class_unregister(&uwb_rc_class);
|
class_unregister(&uwb_rc_class);
|
||||||
uwb_est_destroy();
|
uwb_est_destroy();
|
||||||
return;
|
return;
|
||||||
|
@ -255,6 +255,12 @@ static struct attribute *uwb_dev_attrs[] = {
|
|||||||
};
|
};
|
||||||
ATTRIBUTE_GROUPS(uwb_dev);
|
ATTRIBUTE_GROUPS(uwb_dev);
|
||||||
|
|
||||||
|
/* UWB bus type. */
|
||||||
|
struct bus_type uwb_bus_type = {
|
||||||
|
.name = "uwb",
|
||||||
|
.dev_groups = uwb_dev_groups,
|
||||||
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Device SYSFS registration
|
* Device SYSFS registration
|
||||||
*/
|
*/
|
||||||
@ -263,10 +269,6 @@ static int __uwb_dev_sys_add(struct uwb_dev *uwb_dev, struct device *parent_dev)
|
|||||||
struct device *dev;
|
struct device *dev;
|
||||||
|
|
||||||
dev = &uwb_dev->dev;
|
dev = &uwb_dev->dev;
|
||||||
/* Device sysfs files are only useful for neighbor devices not
|
|
||||||
local radio controllers. */
|
|
||||||
if (&uwb_dev->rc->uwb_dev != uwb_dev)
|
|
||||||
dev->groups = uwb_dev_groups;
|
|
||||||
dev->parent = parent_dev;
|
dev->parent = parent_dev;
|
||||||
dev_set_drvdata(dev, uwb_dev);
|
dev_set_drvdata(dev, uwb_dev);
|
||||||
|
|
||||||
@ -428,6 +430,7 @@ void uwbd_dev_onair(struct uwb_rc *rc, struct uwb_beca_e *bce)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
uwb_dev_init(uwb_dev); /* This sets refcnt to one, we own it */
|
uwb_dev_init(uwb_dev); /* This sets refcnt to one, we own it */
|
||||||
|
uwb_dev->dev.bus = &uwb_bus_type;
|
||||||
uwb_dev->mac_addr = *bce->mac_addr;
|
uwb_dev->mac_addr = *bce->mac_addr;
|
||||||
uwb_dev->dev_addr = bce->dev_addr;
|
uwb_dev->dev_addr = bce->dev_addr;
|
||||||
dev_set_name(&uwb_dev->dev, "%s", macbuf);
|
dev_set_name(&uwb_dev->dev, "%s", macbuf);
|
||||||
|
@ -314,6 +314,7 @@ int uwb_radio_force_channel(struct uwb_rc *rc, int channel);
|
|||||||
|
|
||||||
/* -- UWB Sysfs representation */
|
/* -- UWB Sysfs representation */
|
||||||
extern struct class uwb_rc_class;
|
extern struct class uwb_rc_class;
|
||||||
|
extern struct bus_type uwb_bus_type;
|
||||||
extern struct device_attribute dev_attr_mac_address;
|
extern struct device_attribute dev_attr_mac_address;
|
||||||
extern struct device_attribute dev_attr_beacon;
|
extern struct device_attribute dev_attr_beacon;
|
||||||
extern struct device_attribute dev_attr_scan;
|
extern struct device_attribute dev_attr_scan;
|
||||||
|
Loading…
Reference in New Issue
Block a user