Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit b60066c1 authored by David Vrabel's avatar David Vrabel Committed by David Vrabel
Browse files

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: default avatarDavid Vrabel <david.vrabel@csr.com>
parent b63795fa
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -26,6 +26,9 @@ int wusbhc_pal_register(struct wusbhc *wusbhc)
{
	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);
}

+9 −7
Original line number Diff line number Diff line
@@ -192,13 +192,8 @@ int wusbhc_create(struct wusbhc *wusbhc)
	result = wusbhc_sec_create(wusbhc);
	if (result < 0)
		goto error_sec_create;
	result = wusbhc_pal_register(wusbhc);
	if (result < 0)
		goto error_pal_register;
	return 0;

error_pal_register:
	wusbhc_sec_destroy(wusbhc);
error_sec_create:
	wusbhc_rh_destroy(wusbhc);
error_rh_create:
@@ -235,7 +230,14 @@ int wusbhc_b_create(struct wusbhc *wusbhc)
		dev_err(dev, "Cannot register WUSBHC attributes: %d\n", result);
		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:
	return result;
}
@@ -243,13 +245,13 @@ EXPORT_SYMBOL_GPL(wusbhc_b_create);

void wusbhc_b_destroy(struct wusbhc *wusbhc)
{
	wusbhc_pal_unregister(wusbhc);
	sysfs_remove_group(wusbhc_kobj(wusbhc), &wusbhc_attr_group);
}
EXPORT_SYMBOL_GPL(wusbhc_b_destroy);

void wusbhc_destroy(struct wusbhc *wusbhc)
{
	wusbhc_pal_unregister(wusbhc);
	wusbhc_sec_destroy(wusbhc);
	wusbhc_rh_destroy(wusbhc);
	wusbhc_devconnect_destroy(wusbhc);
+20 −0
Original line number Diff line number Diff line
@@ -39,6 +39,21 @@ EXPORT_SYMBOL_GPL(uwb_pal_init);
 */
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);
	list_add(&pal->node, &rc->pals);
	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);
	list_del(&pal->node);
	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);

+5 −1
Original line number Diff line number Diff line
@@ -361,6 +361,9 @@ struct uwb_rc {

/**
 * 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
 *           the PAL cannot accept reservation requests).
 *
@@ -379,7 +382,8 @@ struct uwb_rc {
 */
struct uwb_pal {
	struct list_head node;

	const char *name;
	struct device *device;
	void (*new_rsv)(struct uwb_rsv *rsv);
};