mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git
synced 2025-01-09 15:29:16 +00:00
uwb: add symlinks in sysfs between radio controllers and PALs
Add a facility for PALs to have symlinks to their radio controller (and vice-versa) and make WUSB host controllers use this. Signed-off-by: David Vrabel <david.vrabel@csr.com>
This commit is contained in:
parent
b63795fa3a
commit
b60066c141
@ -26,6 +26,9 @@ int wusbhc_pal_register(struct wusbhc *wusbhc)
|
|||||||
{
|
{
|
||||||
uwb_pal_init(&wusbhc->pal);
|
uwb_pal_init(&wusbhc->pal);
|
||||||
|
|
||||||
|
wusbhc->pal.name = "wusbhc";
|
||||||
|
wusbhc->pal.device = wusbhc->usb_hcd.self.controller;
|
||||||
|
|
||||||
return uwb_pal_register(wusbhc->uwb_rc, &wusbhc->pal);
|
return uwb_pal_register(wusbhc->uwb_rc, &wusbhc->pal);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -192,13 +192,8 @@ int wusbhc_create(struct wusbhc *wusbhc)
|
|||||||
result = wusbhc_sec_create(wusbhc);
|
result = wusbhc_sec_create(wusbhc);
|
||||||
if (result < 0)
|
if (result < 0)
|
||||||
goto error_sec_create;
|
goto error_sec_create;
|
||||||
result = wusbhc_pal_register(wusbhc);
|
|
||||||
if (result < 0)
|
|
||||||
goto error_pal_register;
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
error_pal_register:
|
|
||||||
wusbhc_sec_destroy(wusbhc);
|
|
||||||
error_sec_create:
|
error_sec_create:
|
||||||
wusbhc_rh_destroy(wusbhc);
|
wusbhc_rh_destroy(wusbhc);
|
||||||
error_rh_create:
|
error_rh_create:
|
||||||
@ -235,7 +230,14 @@ int wusbhc_b_create(struct wusbhc *wusbhc)
|
|||||||
dev_err(dev, "Cannot register WUSBHC attributes: %d\n", result);
|
dev_err(dev, "Cannot register WUSBHC attributes: %d\n", result);
|
||||||
goto error_create_attr_group;
|
goto error_create_attr_group;
|
||||||
}
|
}
|
||||||
/* Yep, I plan to add stuff here... */
|
|
||||||
|
result = wusbhc_pal_register(wusbhc);
|
||||||
|
if (result < 0)
|
||||||
|
goto error_pal_register;
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
error_pal_register:
|
||||||
|
sysfs_remove_group(wusbhc_kobj(wusbhc), &wusbhc_attr_group);
|
||||||
error_create_attr_group:
|
error_create_attr_group:
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
@ -243,13 +245,13 @@ EXPORT_SYMBOL_GPL(wusbhc_b_create);
|
|||||||
|
|
||||||
void wusbhc_b_destroy(struct wusbhc *wusbhc)
|
void wusbhc_b_destroy(struct wusbhc *wusbhc)
|
||||||
{
|
{
|
||||||
|
wusbhc_pal_unregister(wusbhc);
|
||||||
sysfs_remove_group(wusbhc_kobj(wusbhc), &wusbhc_attr_group);
|
sysfs_remove_group(wusbhc_kobj(wusbhc), &wusbhc_attr_group);
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(wusbhc_b_destroy);
|
EXPORT_SYMBOL_GPL(wusbhc_b_destroy);
|
||||||
|
|
||||||
void wusbhc_destroy(struct wusbhc *wusbhc)
|
void wusbhc_destroy(struct wusbhc *wusbhc)
|
||||||
{
|
{
|
||||||
wusbhc_pal_unregister(wusbhc);
|
|
||||||
wusbhc_sec_destroy(wusbhc);
|
wusbhc_sec_destroy(wusbhc);
|
||||||
wusbhc_rh_destroy(wusbhc);
|
wusbhc_rh_destroy(wusbhc);
|
||||||
wusbhc_devconnect_destroy(wusbhc);
|
wusbhc_devconnect_destroy(wusbhc);
|
||||||
|
@ -39,6 +39,21 @@ EXPORT_SYMBOL_GPL(uwb_pal_init);
|
|||||||
*/
|
*/
|
||||||
int uwb_pal_register(struct uwb_rc *rc, struct uwb_pal *pal)
|
int uwb_pal_register(struct uwb_rc *rc, struct uwb_pal *pal)
|
||||||
{
|
{
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
if (pal->device) {
|
||||||
|
ret = sysfs_create_link(&pal->device->kobj,
|
||||||
|
&rc->uwb_dev.dev.kobj, "uwb_rc");
|
||||||
|
if (ret < 0)
|
||||||
|
return ret;
|
||||||
|
ret = sysfs_create_link(&rc->uwb_dev.dev.kobj,
|
||||||
|
&pal->device->kobj, pal->name);
|
||||||
|
if (ret < 0) {
|
||||||
|
sysfs_remove_link(&pal->device->kobj, "uwb_rc");
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
spin_lock(&rc->pal_lock);
|
spin_lock(&rc->pal_lock);
|
||||||
list_add(&pal->node, &rc->pals);
|
list_add(&pal->node, &rc->pals);
|
||||||
spin_unlock(&rc->pal_lock);
|
spin_unlock(&rc->pal_lock);
|
||||||
@ -57,6 +72,11 @@ void uwb_pal_unregister(struct uwb_rc *rc, struct uwb_pal *pal)
|
|||||||
spin_lock(&rc->pal_lock);
|
spin_lock(&rc->pal_lock);
|
||||||
list_del(&pal->node);
|
list_del(&pal->node);
|
||||||
spin_unlock(&rc->pal_lock);
|
spin_unlock(&rc->pal_lock);
|
||||||
|
|
||||||
|
if (pal->device) {
|
||||||
|
sysfs_remove_link(&rc->uwb_dev.dev.kobj, pal->name);
|
||||||
|
sysfs_remove_link(&pal->device->kobj, "uwb_rc");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(uwb_pal_unregister);
|
EXPORT_SYMBOL_GPL(uwb_pal_unregister);
|
||||||
|
|
||||||
|
@ -361,6 +361,9 @@ struct uwb_rc {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* struct uwb_pal - a UWB PAL
|
* struct uwb_pal - a UWB PAL
|
||||||
|
* @name: descriptive name for this PAL (wushc, wlp, etc.).
|
||||||
|
* @device: a device for the PAL. Used to link the PAL and the radio
|
||||||
|
* controller in sysfs.
|
||||||
* @new_rsv: called when a peer requests a reservation (may be NULL if
|
* @new_rsv: called when a peer requests a reservation (may be NULL if
|
||||||
* the PAL cannot accept reservation requests).
|
* the PAL cannot accept reservation requests).
|
||||||
*
|
*
|
||||||
@ -379,7 +382,8 @@ struct uwb_rc {
|
|||||||
*/
|
*/
|
||||||
struct uwb_pal {
|
struct uwb_pal {
|
||||||
struct list_head node;
|
struct list_head node;
|
||||||
|
const char *name;
|
||||||
|
struct device *device;
|
||||||
void (*new_rsv)(struct uwb_rsv *rsv);
|
void (*new_rsv)(struct uwb_rsv *rsv);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user