diff options
| -rw-r--r-- | drivers/uwb/pal.c | 40 |
1 files changed, 38 insertions, 2 deletions
diff --git a/drivers/uwb/pal.c b/drivers/uwb/pal.c index 690577d2a35b..c1304b8d4985 100644 --- a/drivers/uwb/pal.c +++ b/drivers/uwb/pal.c | |||
| @@ -68,8 +68,40 @@ int uwb_pal_register(struct uwb_pal *pal) | |||
| 68 | } | 68 | } |
| 69 | EXPORT_SYMBOL_GPL(uwb_pal_register); | 69 | EXPORT_SYMBOL_GPL(uwb_pal_register); |
| 70 | 70 | ||
| 71 | static int find_rc(struct device *dev, const void *data) | ||
| 72 | { | ||
| 73 | const struct uwb_rc *target_rc = data; | ||
| 74 | struct uwb_rc *rc = dev_get_drvdata(dev); | ||
| 75 | |||
| 76 | if (rc == NULL) { | ||
| 77 | WARN_ON(1); | ||
| 78 | return 0; | ||
| 79 | } | ||
| 80 | if (rc == target_rc) { | ||
| 81 | if (rc->ready == 0) | ||
| 82 | return 0; | ||
| 83 | else | ||
| 84 | return 1; | ||
| 85 | } | ||
| 86 | return 0; | ||
| 87 | } | ||
| 88 | |||
| 89 | /** | ||
| 90 | * Given a radio controller descriptor see if it is registered. | ||
| 91 | * | ||
| 92 | * @returns false if the rc does not exist or is quiescing; true otherwise. | ||
| 93 | */ | ||
| 94 | static bool uwb_rc_class_device_exists(struct uwb_rc *target_rc) | ||
| 95 | { | ||
| 96 | struct device *dev; | ||
| 97 | |||
| 98 | dev = class_find_device(&uwb_rc_class, NULL, target_rc, find_rc); | ||
| 99 | |||
| 100 | return (dev != NULL); | ||
| 101 | } | ||
| 102 | |||
| 71 | /** | 103 | /** |
| 72 | * uwb_pal_register - unregister a UWB PAL | 104 | * uwb_pal_unregister - unregister a UWB PAL |
| 73 | * @pal: the PAL | 105 | * @pal: the PAL |
| 74 | */ | 106 | */ |
| 75 | void uwb_pal_unregister(struct uwb_pal *pal) | 107 | void uwb_pal_unregister(struct uwb_pal *pal) |
| @@ -85,7 +117,11 @@ void uwb_pal_unregister(struct uwb_pal *pal) | |||
| 85 | debugfs_remove(pal->debugfs_dir); | 117 | debugfs_remove(pal->debugfs_dir); |
| 86 | 118 | ||
| 87 | if (pal->device) { | 119 | if (pal->device) { |
| 88 | sysfs_remove_link(&rc->uwb_dev.dev.kobj, pal->name); | 120 | /* remove link to the PAL in the UWB device's directory. */ |
| 121 | if (uwb_rc_class_device_exists(rc)) | ||
| 122 | sysfs_remove_link(&rc->uwb_dev.dev.kobj, pal->name); | ||
| 123 | |||
| 124 | /* remove link to uwb_rc in the PAL device's directory. */ | ||
| 89 | sysfs_remove_link(&pal->device->kobj, "uwb_rc"); | 125 | sysfs_remove_link(&pal->device->kobj, "uwb_rc"); |
| 90 | } | 126 | } |
| 91 | } | 127 | } |
