123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100 |
- /*
- * 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>
- #include <linux/debugfs.h>
- #include <linux/uwb.h>
- #include <linux/export.h>
- #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
- * @pal: the PAL
- *
- * The PAL must be initialized with uwb_pal_init().
- */
- int uwb_pal_register(struct uwb_pal *pal)
- {
- struct uwb_rc *rc = pal->rc;
- 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;
- }
- }
- pal->debugfs_dir = uwb_dbg_create_pal_dir(pal);
- mutex_lock(&rc->uwb_dev.mutex);
- list_add(&pal->node, &rc->pals);
- mutex_unlock(&rc->uwb_dev.mutex);
- return 0;
- }
- EXPORT_SYMBOL_GPL(uwb_pal_register);
- /**
- * uwb_pal_register - unregister a UWB PAL
- * @pal: the PAL
- */
- void uwb_pal_unregister(struct uwb_pal *pal)
- {
- struct uwb_rc *rc = pal->rc;
- uwb_radio_stop(pal);
- mutex_lock(&rc->uwb_dev.mutex);
- list_del(&pal->node);
- mutex_unlock(&rc->uwb_dev.mutex);
- debugfs_remove(pal->debugfs_dir);
- 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);
- /**
- * 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)
- {
- INIT_LIST_HEAD(&rc->pals);
- }
|