aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/isdn/capi/capidrv.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/isdn/capi/capidrv.c')
-rw-r--r--drivers/isdn/capi/capidrv.c22
1 files changed, 16 insertions, 6 deletions
diff --git a/drivers/isdn/capi/capidrv.c b/drivers/isdn/capi/capidrv.c
index 7d8899ad5796..bf55ed5f38e3 100644
--- a/drivers/isdn/capi/capidrv.c
+++ b/drivers/isdn/capi/capidrv.c
@@ -2210,19 +2210,24 @@ static int capidrv_delcontr(u16 contr)
2210} 2210}
2211 2211
2212 2212
2213static void lower_callback(unsigned int cmd, u32 contr, void *data) 2213static int
2214lower_callback(struct notifier_block *nb, unsigned long val, void *v)
2214{ 2215{
2216 capi_profile profile;
2217 u32 contr = (long)v;
2215 2218
2216 switch (cmd) { 2219 switch (val) {
2217 case KCI_CONTRUP: 2220 case CAPICTR_UP:
2218 printk(KERN_INFO "capidrv: controller %hu up\n", contr); 2221 printk(KERN_INFO "capidrv: controller %hu up\n", contr);
2219 (void) capidrv_addcontr(contr, (capi_profile *) data); 2222 if (capi20_get_profile(contr, &profile) == CAPI_NOERROR)
2223 (void) capidrv_addcontr(contr, &profile);
2220 break; 2224 break;
2221 case KCI_CONTRDOWN: 2225 case CAPICTR_DOWN:
2222 printk(KERN_INFO "capidrv: controller %hu down\n", contr); 2226 printk(KERN_INFO "capidrv: controller %hu down\n", contr);
2223 (void) capidrv_delcontr(contr); 2227 (void) capidrv_delcontr(contr);
2224 break; 2228 break;
2225 } 2229 }
2230 return NOTIFY_OK;
2226} 2231}
2227 2232
2228/* 2233/*
@@ -2262,6 +2267,10 @@ static void __exit proc_exit(void)
2262 remove_proc_entry("capi/capidrv", NULL); 2267 remove_proc_entry("capi/capidrv", NULL);
2263} 2268}
2264 2269
2270static struct notifier_block capictr_nb = {
2271 .notifier_call = lower_callback,
2272};
2273
2265static int __init capidrv_init(void) 2274static int __init capidrv_init(void)
2266{ 2275{
2267 capi_profile profile; 2276 capi_profile profile;
@@ -2278,7 +2287,7 @@ static int __init capidrv_init(void)
2278 return -EIO; 2287 return -EIO;
2279 } 2288 }
2280 2289
2281 capi20_set_callback(&global.ap, lower_callback); 2290 register_capictr_notifier(&capictr_nb);
2282 2291
2283 errcode = capi20_get_profile(0, &profile); 2292 errcode = capi20_get_profile(0, &profile);
2284 if (errcode != CAPI_NOERROR) { 2293 if (errcode != CAPI_NOERROR) {
@@ -2300,6 +2309,7 @@ static int __init capidrv_init(void)
2300 2309
2301static void __exit capidrv_exit(void) 2310static void __exit capidrv_exit(void)
2302{ 2311{
2312 unregister_capictr_notifier(&capictr_nb);
2303 capi20_release(&global.ap); 2313 capi20_release(&global.ap);
2304 2314
2305 proc_exit(); 2315 proc_exit();