Blame view
drivers/uwb/pal.c
3.2 KB
183b9b592
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
/* * UWB PAL support. * * Copyright (C) 2008 Cambridge Silicon Radio Ltd. * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License version * 2 as published by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <linux/kernel.h> |
dcc7461ee
|
19 |
#include <linux/debugfs.h> |
183b9b592
|
20 |
#include <linux/uwb.h> |
475c0a6b2
|
21 |
#include <linux/export.h> |
183b9b592
|
22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
#include "uwb-internal.h" /** * uwb_pal_init - initialize a UWB PAL * @pal: the PAL to initialize */ void uwb_pal_init(struct uwb_pal *pal) { INIT_LIST_HEAD(&pal->node); } EXPORT_SYMBOL_GPL(uwb_pal_init); /** * uwb_pal_register - register a UWB PAL |
183b9b592
|
37 38 39 40 |
* @pal: the PAL * * The PAL must be initialized with uwb_pal_init(). */ |
6fae35f9c
|
41 |
int uwb_pal_register(struct uwb_pal *pal) |
183b9b592
|
42 |
{ |
6fae35f9c
|
43 |
struct uwb_rc *rc = pal->rc; |
b60066c14
|
44 45 46 |
int ret; if (pal->device) { |
a89957519
|
47 |
/* create a link to the uwb_rc in the PAL device's directory. */ |
b60066c14
|
48 49 50 51 |
ret = sysfs_create_link(&pal->device->kobj, &rc->uwb_dev.dev.kobj, "uwb_rc"); if (ret < 0) return ret; |
a89957519
|
52 |
/* create a link to the PAL in the UWB device's directory. */ |
b60066c14
|
53 54 55 56 57 58 59 |
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; } } |
dcc7461ee
|
60 |
pal->debugfs_dir = uwb_dbg_create_pal_dir(pal); |
6fae35f9c
|
61 |
mutex_lock(&rc->uwb_dev.mutex); |
183b9b592
|
62 |
list_add(&pal->node, &rc->pals); |
6fae35f9c
|
63 |
mutex_unlock(&rc->uwb_dev.mutex); |
183b9b592
|
64 65 66 67 |
return 0; } EXPORT_SYMBOL_GPL(uwb_pal_register); |
fbbde074a
|
68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 |
static int find_rc(struct device *dev, const void *data) { const struct uwb_rc *target_rc = data; struct uwb_rc *rc = dev_get_drvdata(dev); if (rc == NULL) { WARN_ON(1); return 0; } if (rc == target_rc) { if (rc->ready == 0) return 0; else return 1; } return 0; } /** * Given a radio controller descriptor see if it is registered. * * @returns false if the rc does not exist or is quiescing; true otherwise. */ static bool uwb_rc_class_device_exists(struct uwb_rc *target_rc) { struct device *dev; dev = class_find_device(&uwb_rc_class, NULL, target_rc, find_rc); return (dev != NULL); } |
183b9b592
|
99 |
/** |
fbbde074a
|
100 |
* uwb_pal_unregister - unregister a UWB PAL |
183b9b592
|
101 102 |
* @pal: the PAL */ |
6fae35f9c
|
103 |
void uwb_pal_unregister(struct uwb_pal *pal) |
183b9b592
|
104 |
{ |
6fae35f9c
|
105 106 107 108 109 |
struct uwb_rc *rc = pal->rc; uwb_radio_stop(pal); mutex_lock(&rc->uwb_dev.mutex); |
183b9b592
|
110 |
list_del(&pal->node); |
6fae35f9c
|
111 |
mutex_unlock(&rc->uwb_dev.mutex); |
b60066c14
|
112 |
|
dcc7461ee
|
113 |
debugfs_remove(pal->debugfs_dir); |
b60066c14
|
114 |
if (pal->device) { |
fbbde074a
|
115 116 117 118 119 |
/* remove link to the PAL in the UWB device's directory. */ if (uwb_rc_class_device_exists(rc)) sysfs_remove_link(&rc->uwb_dev.dev.kobj, pal->name); /* remove link to uwb_rc in the PAL device's directory. */ |
b60066c14
|
120 121 |
sysfs_remove_link(&pal->device->kobj, "uwb_rc"); } |
183b9b592
|
122 123 124 125 126 127 128 129 130 |
} EXPORT_SYMBOL_GPL(uwb_pal_unregister); /** * uwb_rc_pal_init - initialize the PAL related parts of a radio controller * @rc: the radio controller */ void uwb_rc_pal_init(struct uwb_rc *rc) { |
183b9b592
|
131 132 |
INIT_LIST_HEAD(&rc->pals); } |