summaryrefslogtreecommitdiff
path: root/drivers/dahdi/xpp/xbus-sysfs.c
diff options
context:
space:
mode:
authorTzafrir Cohen <tzafrir.cohen@xorcom.com>2010-07-13 15:10:30 +0000
committerTzafrir Cohen <tzafrir.cohen@xorcom.com>2010-07-13 15:10:30 +0000
commitfe0081acc9a07f762121338e9e3f523b240ed178 (patch)
treee8e2174cb2e859ef0e22b987a0f9544e26d44628 /drivers/dahdi/xpp/xbus-sysfs.c
parent921654884fd0ad506e7f7f6a34760a905f96b2ea (diff)
Keep SYSFS objects after disconnect
When the USB device disconnects, we keep references to them to make sure they don't disappear. git-svn-id: http://svn.asterisk.org/svn/dahdi/linux/trunk@8900 a0bf4364-ded3-4de4-8d8a-66a801d63aff
Diffstat (limited to 'drivers/dahdi/xpp/xbus-sysfs.c')
-rw-r--r--drivers/dahdi/xpp/xbus-sysfs.c39
1 files changed, 28 insertions, 11 deletions
diff --git a/drivers/dahdi/xpp/xbus-sysfs.c b/drivers/dahdi/xpp/xbus-sysfs.c
index d107f39..0a15a1d 100644
--- a/drivers/dahdi/xpp/xbus-sysfs.c
+++ b/drivers/dahdi/xpp/xbus-sysfs.c
@@ -781,8 +781,6 @@ int xpd_device_register(xbus_t *xbus, xpd_t *xpd)
XPD_ERR(xpd, "%s: device_register failed: %d\n", __FUNCTION__, ret);
return ret;
}
- xpd = get_xpd(__func__, xpd); /* Released in xbus_release_xpds() */
- BUG_ON(!xpd);
return 0;
}
@@ -804,7 +802,7 @@ void xpd_device_unregister(xpd_t *xpd)
/*--------- Sysfs Device handling ----*/
-void xbus_sysfs_remove(xbus_t *xbus)
+void xbus_sysfs_transport_remove(xbus_t *xbus)
{
struct device *astribank;
@@ -812,6 +810,33 @@ void xbus_sysfs_remove(xbus_t *xbus)
XBUS_DBG(DEVICES, xbus, "\n");
astribank = &xbus->astribank;
sysfs_remove_link(&astribank->kobj, "transport");
+}
+
+int xbus_sysfs_transport_create(xbus_t *xbus)
+{
+ struct device *astribank;
+ int ret = 0;
+
+ BUG_ON(!xbus);
+ XBUS_DBG(DEVICES, xbus, "\n");
+ astribank = &xbus->astribank;
+ ret = sysfs_create_link(&astribank->kobj, &astribank->parent->kobj,
+ "transport");
+ if (ret < 0) {
+ XBUS_ERR(xbus, "%s: sysfs_create_link failed: %d\n",
+ __func__, ret);
+ dev_set_drvdata(astribank, NULL);
+ }
+ return ret;
+}
+
+void xbus_sysfs_remove(xbus_t *xbus)
+{
+ struct device *astribank;
+
+ BUG_ON(!xbus);
+ XBUS_DBG(DEVICES, xbus, "\n");
+ astribank = &xbus->astribank;
if(!dev_get_drvdata(astribank))
return;
BUG_ON(dev_get_drvdata(astribank) != xbus);
@@ -836,15 +861,7 @@ int xbus_sysfs_create(xbus_t *xbus)
if(ret) {
XBUS_ERR(xbus, "%s: device_register failed: %d\n", __FUNCTION__, ret);
dev_set_drvdata(astribank, NULL);
- goto out;
- }
- ret = sysfs_create_link(&astribank->kobj, &astribank->parent->kobj, "transport");
- if(ret < 0) {
- XBUS_ERR(xbus, "%s: sysfs_create_link failed: %d\n", __FUNCTION__, ret);
- dev_set_drvdata(astribank, NULL);
- goto out;
}
-out:
return ret;
}