diff options
Diffstat (limited to 'drivers/isdn')
-rw-r--r-- | drivers/isdn/gigaset/bas-gigaset.c | 33 | ||||
-rw-r--r-- | drivers/isdn/gigaset/capi.c | 8 | ||||
-rw-r--r-- | drivers/isdn/gigaset/common.c | 43 | ||||
-rw-r--r-- | drivers/isdn/gigaset/dummyll.c | 2 | ||||
-rw-r--r-- | drivers/isdn/gigaset/ev-layer.c | 16 | ||||
-rw-r--r-- | drivers/isdn/gigaset/gigaset.h | 2 | ||||
-rw-r--r-- | drivers/isdn/gigaset/i4l.c | 12 | ||||
-rw-r--r-- | drivers/isdn/gigaset/isocdata.c | 12 | ||||
-rw-r--r-- | drivers/isdn/gigaset/ser-gigaset.c | 21 | ||||
-rw-r--r-- | drivers/isdn/gigaset/usb-gigaset.c | 19 |
10 files changed, 87 insertions, 81 deletions
diff --git a/drivers/isdn/gigaset/bas-gigaset.c b/drivers/isdn/gigaset/bas-gigaset.c index d6515237c0ec..3b9278b333ba 100644 --- a/drivers/isdn/gigaset/bas-gigaset.c +++ b/drivers/isdn/gigaset/bas-gigaset.c | |||
@@ -2077,16 +2077,14 @@ static int gigaset_brkchars(struct cardstate *cs, const unsigned char buf[6]) | |||
2077 | /* Free hardware dependent part of the B channel structure | 2077 | /* Free hardware dependent part of the B channel structure |
2078 | * parameter: | 2078 | * parameter: |
2079 | * bcs B channel structure | 2079 | * bcs B channel structure |
2080 | * return value: | ||
2081 | * !=0 on success | ||
2082 | */ | 2080 | */ |
2083 | static int gigaset_freebcshw(struct bc_state *bcs) | 2081 | static void gigaset_freebcshw(struct bc_state *bcs) |
2084 | { | 2082 | { |
2085 | struct bas_bc_state *ubc = bcs->hw.bas; | 2083 | struct bas_bc_state *ubc = bcs->hw.bas; |
2086 | int i; | 2084 | int i; |
2087 | 2085 | ||
2088 | if (!ubc) | 2086 | if (!ubc) |
2089 | return 0; | 2087 | return; |
2090 | 2088 | ||
2091 | /* kill URBs and tasklets before freeing - better safe than sorry */ | 2089 | /* kill URBs and tasklets before freeing - better safe than sorry */ |
2092 | ubc->running = 0; | 2090 | ubc->running = 0; |
@@ -2104,14 +2102,13 @@ static int gigaset_freebcshw(struct bc_state *bcs) | |||
2104 | kfree(ubc->isooutbuf); | 2102 | kfree(ubc->isooutbuf); |
2105 | kfree(ubc); | 2103 | kfree(ubc); |
2106 | bcs->hw.bas = NULL; | 2104 | bcs->hw.bas = NULL; |
2107 | return 1; | ||
2108 | } | 2105 | } |
2109 | 2106 | ||
2110 | /* Initialize hardware dependent part of the B channel structure | 2107 | /* Initialize hardware dependent part of the B channel structure |
2111 | * parameter: | 2108 | * parameter: |
2112 | * bcs B channel structure | 2109 | * bcs B channel structure |
2113 | * return value: | 2110 | * return value: |
2114 | * !=0 on success | 2111 | * 0 on success, error code < 0 on failure |
2115 | */ | 2112 | */ |
2116 | static int gigaset_initbcshw(struct bc_state *bcs) | 2113 | static int gigaset_initbcshw(struct bc_state *bcs) |
2117 | { | 2114 | { |
@@ -2121,7 +2118,7 @@ static int gigaset_initbcshw(struct bc_state *bcs) | |||
2121 | bcs->hw.bas = ubc = kmalloc(sizeof(struct bas_bc_state), GFP_KERNEL); | 2118 | bcs->hw.bas = ubc = kmalloc(sizeof(struct bas_bc_state), GFP_KERNEL); |
2122 | if (!ubc) { | 2119 | if (!ubc) { |
2123 | pr_err("out of memory\n"); | 2120 | pr_err("out of memory\n"); |
2124 | return 0; | 2121 | return -ENOMEM; |
2125 | } | 2122 | } |
2126 | 2123 | ||
2127 | ubc->running = 0; | 2124 | ubc->running = 0; |
@@ -2138,7 +2135,7 @@ static int gigaset_initbcshw(struct bc_state *bcs) | |||
2138 | pr_err("out of memory\n"); | 2135 | pr_err("out of memory\n"); |
2139 | kfree(ubc); | 2136 | kfree(ubc); |
2140 | bcs->hw.bas = NULL; | 2137 | bcs->hw.bas = NULL; |
2141 | return 0; | 2138 | return -ENOMEM; |
2142 | } | 2139 | } |
2143 | tasklet_init(&ubc->sent_tasklet, | 2140 | tasklet_init(&ubc->sent_tasklet, |
2144 | write_iso_tasklet, (unsigned long) bcs); | 2141 | write_iso_tasklet, (unsigned long) bcs); |
@@ -2163,7 +2160,7 @@ static int gigaset_initbcshw(struct bc_state *bcs) | |||
2163 | ubc->stolen0s = 0; | 2160 | ubc->stolen0s = 0; |
2164 | tasklet_init(&ubc->rcvd_tasklet, | 2161 | tasklet_init(&ubc->rcvd_tasklet, |
2165 | read_iso_tasklet, (unsigned long) bcs); | 2162 | read_iso_tasklet, (unsigned long) bcs); |
2166 | return 1; | 2163 | return 0; |
2167 | } | 2164 | } |
2168 | 2165 | ||
2169 | static void gigaset_reinitbcshw(struct bc_state *bcs) | 2166 | static void gigaset_reinitbcshw(struct bc_state *bcs) |
@@ -2186,6 +2183,12 @@ static void gigaset_freecshw(struct cardstate *cs) | |||
2186 | cs->hw.bas = NULL; | 2183 | cs->hw.bas = NULL; |
2187 | } | 2184 | } |
2188 | 2185 | ||
2186 | /* Initialize hardware dependent part of the cardstate structure | ||
2187 | * parameter: | ||
2188 | * cs cardstate structure | ||
2189 | * return value: | ||
2190 | * 0 on success, error code < 0 on failure | ||
2191 | */ | ||
2189 | static int gigaset_initcshw(struct cardstate *cs) | 2192 | static int gigaset_initcshw(struct cardstate *cs) |
2190 | { | 2193 | { |
2191 | struct bas_cardstate *ucs; | 2194 | struct bas_cardstate *ucs; |
@@ -2193,13 +2196,13 @@ static int gigaset_initcshw(struct cardstate *cs) | |||
2193 | cs->hw.bas = ucs = kmalloc(sizeof *ucs, GFP_KERNEL); | 2196 | cs->hw.bas = ucs = kmalloc(sizeof *ucs, GFP_KERNEL); |
2194 | if (!ucs) { | 2197 | if (!ucs) { |
2195 | pr_err("out of memory\n"); | 2198 | pr_err("out of memory\n"); |
2196 | return 0; | 2199 | return -ENOMEM; |
2197 | } | 2200 | } |
2198 | ucs->int_in_buf = kmalloc(IP_MSGSIZE, GFP_KERNEL); | 2201 | ucs->int_in_buf = kmalloc(IP_MSGSIZE, GFP_KERNEL); |
2199 | if (!ucs->int_in_buf) { | 2202 | if (!ucs->int_in_buf) { |
2200 | kfree(ucs); | 2203 | kfree(ucs); |
2201 | pr_err("out of memory\n"); | 2204 | pr_err("out of memory\n"); |
2202 | return 0; | 2205 | return -ENOMEM; |
2203 | } | 2206 | } |
2204 | 2207 | ||
2205 | ucs->urb_cmd_in = NULL; | 2208 | ucs->urb_cmd_in = NULL; |
@@ -2218,7 +2221,7 @@ static int gigaset_initcshw(struct cardstate *cs) | |||
2218 | init_waitqueue_head(&ucs->waitqueue); | 2221 | init_waitqueue_head(&ucs->waitqueue); |
2219 | INIT_WORK(&ucs->int_in_wq, int_in_work); | 2222 | INIT_WORK(&ucs->int_in_wq, int_in_work); |
2220 | 2223 | ||
2221 | return 1; | 2224 | return 0; |
2222 | } | 2225 | } |
2223 | 2226 | ||
2224 | /* freeurbs | 2227 | /* freeurbs |
@@ -2378,18 +2381,20 @@ static int gigaset_probe(struct usb_interface *interface, | |||
2378 | /* save address of controller structure */ | 2381 | /* save address of controller structure */ |
2379 | usb_set_intfdata(interface, cs); | 2382 | usb_set_intfdata(interface, cs); |
2380 | 2383 | ||
2381 | if (!gigaset_start(cs)) | 2384 | rc = gigaset_start(cs); |
2385 | if (rc < 0) | ||
2382 | goto error; | 2386 | goto error; |
2383 | 2387 | ||
2384 | return 0; | 2388 | return 0; |
2385 | 2389 | ||
2386 | allocerr: | 2390 | allocerr: |
2387 | dev_err(cs->dev, "could not allocate URBs\n"); | 2391 | dev_err(cs->dev, "could not allocate URBs\n"); |
2392 | rc = -ENOMEM; | ||
2388 | error: | 2393 | error: |
2389 | freeurbs(cs); | 2394 | freeurbs(cs); |
2390 | usb_set_intfdata(interface, NULL); | 2395 | usb_set_intfdata(interface, NULL); |
2391 | gigaset_freecs(cs); | 2396 | gigaset_freecs(cs); |
2392 | return -ENODEV; | 2397 | return rc; |
2393 | } | 2398 | } |
2394 | 2399 | ||
2395 | /* gigaset_disconnect | 2400 | /* gigaset_disconnect |
diff --git a/drivers/isdn/gigaset/capi.c b/drivers/isdn/gigaset/capi.c index 86cee65d2e9f..27e4a3e21d64 100644 --- a/drivers/isdn/gigaset/capi.c +++ b/drivers/isdn/gigaset/capi.c | |||
@@ -2346,7 +2346,7 @@ static const struct file_operations gigaset_proc_fops = { | |||
2346 | * @cs: device descriptor structure. | 2346 | * @cs: device descriptor structure. |
2347 | * @isdnid: device name. | 2347 | * @isdnid: device name. |
2348 | * | 2348 | * |
2349 | * Return value: 1 for success, 0 for failure | 2349 | * Return value: 0 on success, error code < 0 on failure |
2350 | */ | 2350 | */ |
2351 | int gigaset_isdn_regdev(struct cardstate *cs, const char *isdnid) | 2351 | int gigaset_isdn_regdev(struct cardstate *cs, const char *isdnid) |
2352 | { | 2352 | { |
@@ -2356,7 +2356,7 @@ int gigaset_isdn_regdev(struct cardstate *cs, const char *isdnid) | |||
2356 | iif = kmalloc(sizeof(*iif), GFP_KERNEL); | 2356 | iif = kmalloc(sizeof(*iif), GFP_KERNEL); |
2357 | if (!iif) { | 2357 | if (!iif) { |
2358 | pr_err("%s: out of memory\n", __func__); | 2358 | pr_err("%s: out of memory\n", __func__); |
2359 | return 0; | 2359 | return -ENOMEM; |
2360 | } | 2360 | } |
2361 | 2361 | ||
2362 | /* prepare controller structure */ | 2362 | /* prepare controller structure */ |
@@ -2380,12 +2380,12 @@ int gigaset_isdn_regdev(struct cardstate *cs, const char *isdnid) | |||
2380 | if (rc) { | 2380 | if (rc) { |
2381 | pr_err("attach_capi_ctr failed (%d)\n", rc); | 2381 | pr_err("attach_capi_ctr failed (%d)\n", rc); |
2382 | kfree(iif); | 2382 | kfree(iif); |
2383 | return 0; | 2383 | return rc; |
2384 | } | 2384 | } |
2385 | 2385 | ||
2386 | cs->iif = iif; | 2386 | cs->iif = iif; |
2387 | cs->hw_hdr_len = CAPI_DATA_B3_REQ_LEN; | 2387 | cs->hw_hdr_len = CAPI_DATA_B3_REQ_LEN; |
2388 | return 1; | 2388 | return 0; |
2389 | } | 2389 | } |
2390 | 2390 | ||
2391 | /** | 2391 | /** |
diff --git a/drivers/isdn/gigaset/common.c b/drivers/isdn/gigaset/common.c index 6c306d4551dc..aa41485bc594 100644 --- a/drivers/isdn/gigaset/common.c +++ b/drivers/isdn/gigaset/common.c | |||
@@ -194,13 +194,13 @@ int gigaset_get_channel(struct bc_state *bcs) | |||
194 | gig_dbg(DEBUG_CHANNEL, "could not allocate channel %d", | 194 | gig_dbg(DEBUG_CHANNEL, "could not allocate channel %d", |
195 | bcs->channel); | 195 | bcs->channel); |
196 | spin_unlock_irqrestore(&bcs->cs->lock, flags); | 196 | spin_unlock_irqrestore(&bcs->cs->lock, flags); |
197 | return 0; | 197 | return -EBUSY; |
198 | } | 198 | } |
199 | ++bcs->use_count; | 199 | ++bcs->use_count; |
200 | bcs->busy = 1; | 200 | bcs->busy = 1; |
201 | gig_dbg(DEBUG_CHANNEL, "allocated channel %d", bcs->channel); | 201 | gig_dbg(DEBUG_CHANNEL, "allocated channel %d", bcs->channel); |
202 | spin_unlock_irqrestore(&bcs->cs->lock, flags); | 202 | spin_unlock_irqrestore(&bcs->cs->lock, flags); |
203 | return 1; | 203 | return 0; |
204 | } | 204 | } |
205 | 205 | ||
206 | struct bc_state *gigaset_get_free_channel(struct cardstate *cs) | 206 | struct bc_state *gigaset_get_free_channel(struct cardstate *cs) |
@@ -258,7 +258,7 @@ int gigaset_get_channels(struct cardstate *cs) | |||
258 | spin_unlock_irqrestore(&cs->lock, flags); | 258 | spin_unlock_irqrestore(&cs->lock, flags); |
259 | gig_dbg(DEBUG_CHANNEL, | 259 | gig_dbg(DEBUG_CHANNEL, |
260 | "could not allocate all channels"); | 260 | "could not allocate all channels"); |
261 | return 0; | 261 | return -EBUSY; |
262 | } | 262 | } |
263 | for (i = 0; i < cs->channels; ++i) | 263 | for (i = 0; i < cs->channels; ++i) |
264 | ++cs->bcs[i].use_count; | 264 | ++cs->bcs[i].use_count; |
@@ -266,7 +266,7 @@ int gigaset_get_channels(struct cardstate *cs) | |||
266 | 266 | ||
267 | gig_dbg(DEBUG_CHANNEL, "allocated all channels"); | 267 | gig_dbg(DEBUG_CHANNEL, "allocated all channels"); |
268 | 268 | ||
269 | return 1; | 269 | return 0; |
270 | } | 270 | } |
271 | 271 | ||
272 | void gigaset_free_channels(struct cardstate *cs) | 272 | void gigaset_free_channels(struct cardstate *cs) |
@@ -388,8 +388,7 @@ static void gigaset_freebcs(struct bc_state *bcs) | |||
388 | int i; | 388 | int i; |
389 | 389 | ||
390 | gig_dbg(DEBUG_INIT, "freeing bcs[%d]->hw", bcs->channel); | 390 | gig_dbg(DEBUG_INIT, "freeing bcs[%d]->hw", bcs->channel); |
391 | if (!bcs->cs->ops->freebcshw(bcs)) | 391 | bcs->cs->ops->freebcshw(bcs); |
392 | gig_dbg(DEBUG_INIT, "failed"); | ||
393 | 392 | ||
394 | gig_dbg(DEBUG_INIT, "clearing bcs[%d]->at_state", bcs->channel); | 393 | gig_dbg(DEBUG_INIT, "clearing bcs[%d]->at_state", bcs->channel); |
395 | clear_at_state(&bcs->at_state); | 394 | clear_at_state(&bcs->at_state); |
@@ -566,6 +565,8 @@ static void gigaset_inbuf_init(struct inbuf_t *inbuf, struct cardstate *cs) | |||
566 | * @inbuf: buffer structure. | 565 | * @inbuf: buffer structure. |
567 | * @src: received data. | 566 | * @src: received data. |
568 | * @numbytes: number of bytes received. | 567 | * @numbytes: number of bytes received. |
568 | * | ||
569 | * Return value: !=0 if some data was appended | ||
569 | */ | 570 | */ |
570 | int gigaset_fill_inbuf(struct inbuf_t *inbuf, const unsigned char *src, | 571 | int gigaset_fill_inbuf(struct inbuf_t *inbuf, const unsigned char *src, |
571 | unsigned numbytes) | 572 | unsigned numbytes) |
@@ -609,8 +610,8 @@ int gigaset_fill_inbuf(struct inbuf_t *inbuf, const unsigned char *src, | |||
609 | EXPORT_SYMBOL_GPL(gigaset_fill_inbuf); | 610 | EXPORT_SYMBOL_GPL(gigaset_fill_inbuf); |
610 | 611 | ||
611 | /* Initialize the b-channel structure */ | 612 | /* Initialize the b-channel structure */ |
612 | static struct bc_state *gigaset_initbcs(struct bc_state *bcs, | 613 | static int gigaset_initbcs(struct bc_state *bcs, struct cardstate *cs, |
613 | struct cardstate *cs, int channel) | 614 | int channel) |
614 | { | 615 | { |
615 | int i; | 616 | int i; |
616 | 617 | ||
@@ -649,11 +650,7 @@ static struct bc_state *gigaset_initbcs(struct bc_state *bcs, | |||
649 | bcs->apconnstate = 0; | 650 | bcs->apconnstate = 0; |
650 | 651 | ||
651 | gig_dbg(DEBUG_INIT, " setting up bcs[%d]->hw", channel); | 652 | gig_dbg(DEBUG_INIT, " setting up bcs[%d]->hw", channel); |
652 | if (cs->ops->initbcshw(bcs)) | 653 | return cs->ops->initbcshw(bcs); |
653 | return bcs; | ||
654 | |||
655 | gig_dbg(DEBUG_INIT, " failed"); | ||
656 | return NULL; | ||
657 | } | 654 | } |
658 | 655 | ||
659 | /** | 656 | /** |
@@ -752,7 +749,7 @@ struct cardstate *gigaset_initcs(struct gigaset_driver *drv, int channels, | |||
752 | cs->cmdbytes = 0; | 749 | cs->cmdbytes = 0; |
753 | 750 | ||
754 | gig_dbg(DEBUG_INIT, "setting up iif"); | 751 | gig_dbg(DEBUG_INIT, "setting up iif"); |
755 | if (!gigaset_isdn_regdev(cs, modulename)) { | 752 | if (gigaset_isdn_regdev(cs, modulename) < 0) { |
756 | pr_err("error registering ISDN device\n"); | 753 | pr_err("error registering ISDN device\n"); |
757 | goto error; | 754 | goto error; |
758 | } | 755 | } |
@@ -760,7 +757,7 @@ struct cardstate *gigaset_initcs(struct gigaset_driver *drv, int channels, | |||
760 | make_valid(cs, VALID_ID); | 757 | make_valid(cs, VALID_ID); |
761 | ++cs->cs_init; | 758 | ++cs->cs_init; |
762 | gig_dbg(DEBUG_INIT, "setting up hw"); | 759 | gig_dbg(DEBUG_INIT, "setting up hw"); |
763 | if (!cs->ops->initcshw(cs)) | 760 | if (cs->ops->initcshw(cs) < 0) |
764 | goto error; | 761 | goto error; |
765 | 762 | ||
766 | ++cs->cs_init; | 763 | ++cs->cs_init; |
@@ -774,7 +771,7 @@ struct cardstate *gigaset_initcs(struct gigaset_driver *drv, int channels, | |||
774 | /* set up channel data structures */ | 771 | /* set up channel data structures */ |
775 | for (i = 0; i < channels; ++i) { | 772 | for (i = 0; i < channels; ++i) { |
776 | gig_dbg(DEBUG_INIT, "setting up bcs[%d]", i); | 773 | gig_dbg(DEBUG_INIT, "setting up bcs[%d]", i); |
777 | if (!gigaset_initbcs(cs->bcs + i, cs, i)) { | 774 | if (gigaset_initbcs(cs->bcs + i, cs, i) < 0) { |
778 | pr_err("could not allocate channel %d data\n", i); | 775 | pr_err("could not allocate channel %d data\n", i); |
779 | goto error; | 776 | goto error; |
780 | } | 777 | } |
@@ -869,7 +866,7 @@ static void cleanup_cs(struct cardstate *cs) | |||
869 | 866 | ||
870 | for (i = 0; i < cs->channels; ++i) { | 867 | for (i = 0; i < cs->channels; ++i) { |
871 | gigaset_freebcs(cs->bcs + i); | 868 | gigaset_freebcs(cs->bcs + i); |
872 | if (!gigaset_initbcs(cs->bcs + i, cs, i)) | 869 | if (gigaset_initbcs(cs->bcs + i, cs, i) < 0) |
873 | pr_err("could not allocate channel %d data\n", i); | 870 | pr_err("could not allocate channel %d data\n", i); |
874 | } | 871 | } |
875 | 872 | ||
@@ -890,14 +887,14 @@ static void cleanup_cs(struct cardstate *cs) | |||
890 | * waiting for completion of the initialization. | 887 | * waiting for completion of the initialization. |
891 | * | 888 | * |
892 | * Return value: | 889 | * Return value: |
893 | * 1 - success, 0 - error | 890 | * 0 on success, error code < 0 on failure |
894 | */ | 891 | */ |
895 | int gigaset_start(struct cardstate *cs) | 892 | int gigaset_start(struct cardstate *cs) |
896 | { | 893 | { |
897 | unsigned long flags; | 894 | unsigned long flags; |
898 | 895 | ||
899 | if (mutex_lock_interruptible(&cs->mutex)) | 896 | if (mutex_lock_interruptible(&cs->mutex)) |
900 | return 0; | 897 | return -EBUSY; |
901 | 898 | ||
902 | spin_lock_irqsave(&cs->lock, flags); | 899 | spin_lock_irqsave(&cs->lock, flags); |
903 | cs->connected = 1; | 900 | cs->connected = 1; |
@@ -921,11 +918,11 @@ int gigaset_start(struct cardstate *cs) | |||
921 | wait_event(cs->waitqueue, !cs->waiting); | 918 | wait_event(cs->waitqueue, !cs->waiting); |
922 | 919 | ||
923 | mutex_unlock(&cs->mutex); | 920 | mutex_unlock(&cs->mutex); |
924 | return 1; | 921 | return 0; |
925 | 922 | ||
926 | error: | 923 | error: |
927 | mutex_unlock(&cs->mutex); | 924 | mutex_unlock(&cs->mutex); |
928 | return 0; | 925 | return -ENOMEM; |
929 | } | 926 | } |
930 | EXPORT_SYMBOL_GPL(gigaset_start); | 927 | EXPORT_SYMBOL_GPL(gigaset_start); |
931 | 928 | ||
@@ -937,7 +934,7 @@ EXPORT_SYMBOL_GPL(gigaset_start); | |||
937 | * waiting for completion of the shutdown. | 934 | * waiting for completion of the shutdown. |
938 | * | 935 | * |
939 | * Return value: | 936 | * Return value: |
940 | * 0 - success, -1 - error (no device associated) | 937 | * 0 - success, -ENODEV - error (no device associated) |
941 | */ | 938 | */ |
942 | int gigaset_shutdown(struct cardstate *cs) | 939 | int gigaset_shutdown(struct cardstate *cs) |
943 | { | 940 | { |
@@ -945,7 +942,7 @@ int gigaset_shutdown(struct cardstate *cs) | |||
945 | 942 | ||
946 | if (!(cs->flags & VALID_MINOR)) { | 943 | if (!(cs->flags & VALID_MINOR)) { |
947 | mutex_unlock(&cs->mutex); | 944 | mutex_unlock(&cs->mutex); |
948 | return -1; | 945 | return -ENODEV; |
949 | } | 946 | } |
950 | 947 | ||
951 | cs->waiting = 1; | 948 | cs->waiting = 1; |
diff --git a/drivers/isdn/gigaset/dummyll.c b/drivers/isdn/gigaset/dummyll.c index 19b1c779d50f..570c2d53b84e 100644 --- a/drivers/isdn/gigaset/dummyll.c +++ b/drivers/isdn/gigaset/dummyll.c | |||
@@ -60,7 +60,7 @@ void gigaset_isdn_stop(struct cardstate *cs) | |||
60 | 60 | ||
61 | int gigaset_isdn_regdev(struct cardstate *cs, const char *isdnid) | 61 | int gigaset_isdn_regdev(struct cardstate *cs, const char *isdnid) |
62 | { | 62 | { |
63 | return 1; | 63 | return 0; |
64 | } | 64 | } |
65 | 65 | ||
66 | void gigaset_isdn_unregdev(struct cardstate *cs) | 66 | void gigaset_isdn_unregdev(struct cardstate *cs) |
diff --git a/drivers/isdn/gigaset/ev-layer.c b/drivers/isdn/gigaset/ev-layer.c index 8391e09a698a..2e6963dc740e 100644 --- a/drivers/isdn/gigaset/ev-layer.c +++ b/drivers/isdn/gigaset/ev-layer.c | |||
@@ -658,7 +658,7 @@ static inline struct at_state_t *get_free_channel(struct cardstate *cs, | |||
658 | struct at_state_t *ret; | 658 | struct at_state_t *ret; |
659 | 659 | ||
660 | for (i = 0; i < cs->channels; ++i) | 660 | for (i = 0; i < cs->channels; ++i) |
661 | if (gigaset_get_channel(cs->bcs + i)) { | 661 | if (gigaset_get_channel(cs->bcs + i) >= 0) { |
662 | ret = &cs->bcs[i].at_state; | 662 | ret = &cs->bcs[i].at_state; |
663 | ret->cid = cid; | 663 | ret->cid = cid; |
664 | return ret; | 664 | return ret; |
@@ -923,18 +923,18 @@ static void do_stop(struct cardstate *cs) | |||
923 | * channel >= 0: getting cid for the channel failed | 923 | * channel >= 0: getting cid for the channel failed |
924 | * channel < 0: entering cid mode failed | 924 | * channel < 0: entering cid mode failed |
925 | * | 925 | * |
926 | * returns 0 on failure | 926 | * returns 0 on success, <0 on failure |
927 | */ | 927 | */ |
928 | static int reinit_and_retry(struct cardstate *cs, int channel) | 928 | static int reinit_and_retry(struct cardstate *cs, int channel) |
929 | { | 929 | { |
930 | int i; | 930 | int i; |
931 | 931 | ||
932 | if (--cs->retry_count <= 0) | 932 | if (--cs->retry_count <= 0) |
933 | return 0; | 933 | return -EFAULT; |
934 | 934 | ||
935 | for (i = 0; i < cs->channels; ++i) | 935 | for (i = 0; i < cs->channels; ++i) |
936 | if (cs->bcs[i].at_state.cid > 0) | 936 | if (cs->bcs[i].at_state.cid > 0) |
937 | return 0; | 937 | return -EBUSY; |
938 | 938 | ||
939 | if (channel < 0) | 939 | if (channel < 0) |
940 | dev_warn(cs->dev, | 940 | dev_warn(cs->dev, |
@@ -945,7 +945,7 @@ static int reinit_and_retry(struct cardstate *cs, int channel) | |||
945 | cs->bcs[channel].at_state.pending_commands |= PC_CID; | 945 | cs->bcs[channel].at_state.pending_commands |= PC_CID; |
946 | } | 946 | } |
947 | schedule_init(cs, MS_INIT); | 947 | schedule_init(cs, MS_INIT); |
948 | return 1; | 948 | return 0; |
949 | } | 949 | } |
950 | 950 | ||
951 | static int at_state_invalid(struct cardstate *cs, | 951 | static int at_state_invalid(struct cardstate *cs, |
@@ -1016,7 +1016,7 @@ static int do_lock(struct cardstate *cs) | |||
1016 | if (cs->bcs[i].at_state.pending_commands) | 1016 | if (cs->bcs[i].at_state.pending_commands) |
1017 | return -EBUSY; | 1017 | return -EBUSY; |
1018 | 1018 | ||
1019 | if (!gigaset_get_channels(cs)) | 1019 | if (gigaset_get_channels(cs) < 0) |
1020 | return -EBUSY; | 1020 | return -EBUSY; |
1021 | 1021 | ||
1022 | break; | 1022 | break; |
@@ -1125,7 +1125,7 @@ static void do_action(int action, struct cardstate *cs, | |||
1125 | init_failed(cs, M_UNKNOWN); | 1125 | init_failed(cs, M_UNKNOWN); |
1126 | break; | 1126 | break; |
1127 | } | 1127 | } |
1128 | if (!reinit_and_retry(cs, -1)) | 1128 | if (reinit_and_retry(cs, -1) < 0) |
1129 | schedule_init(cs, MS_RECOVER); | 1129 | schedule_init(cs, MS_RECOVER); |
1130 | break; | 1130 | break; |
1131 | case ACT_FAILUMODE: | 1131 | case ACT_FAILUMODE: |
@@ -1268,7 +1268,7 @@ static void do_action(int action, struct cardstate *cs, | |||
1268 | case ACT_FAILCID: | 1268 | case ACT_FAILCID: |
1269 | cs->cur_at_seq = SEQ_NONE; | 1269 | cs->cur_at_seq = SEQ_NONE; |
1270 | channel = cs->curchannel; | 1270 | channel = cs->curchannel; |
1271 | if (!reinit_and_retry(cs, channel)) { | 1271 | if (reinit_and_retry(cs, channel) < 0) { |
1272 | dev_warn(cs->dev, | 1272 | dev_warn(cs->dev, |
1273 | "Could not get a call ID. Cannot dial.\n"); | 1273 | "Could not get a call ID. Cannot dial.\n"); |
1274 | at_state2 = &cs->bcs[channel].at_state; | 1274 | at_state2 = &cs->bcs[channel].at_state; |
diff --git a/drivers/isdn/gigaset/gigaset.h b/drivers/isdn/gigaset/gigaset.h index eae7351a3f42..8e2fc8f31d16 100644 --- a/drivers/isdn/gigaset/gigaset.h +++ b/drivers/isdn/gigaset/gigaset.h | |||
@@ -583,7 +583,7 @@ struct gigaset_ops { | |||
583 | int (*initbcshw)(struct bc_state *bcs); | 583 | int (*initbcshw)(struct bc_state *bcs); |
584 | 584 | ||
585 | /* Called by gigaset_freecs() for freeing bcs->hw.xxx */ | 585 | /* Called by gigaset_freecs() for freeing bcs->hw.xxx */ |
586 | int (*freebcshw)(struct bc_state *bcs); | 586 | void (*freebcshw)(struct bc_state *bcs); |
587 | 587 | ||
588 | /* Called by gigaset_bchannel_down() for resetting bcs->hw.xxx */ | 588 | /* Called by gigaset_bchannel_down() for resetting bcs->hw.xxx */ |
589 | void (*reinitbcshw)(struct bc_state *bcs); | 589 | void (*reinitbcshw)(struct bc_state *bcs); |
diff --git a/drivers/isdn/gigaset/i4l.c b/drivers/isdn/gigaset/i4l.c index 0f13eb1de657..2d75329007f1 100644 --- a/drivers/isdn/gigaset/i4l.c +++ b/drivers/isdn/gigaset/i4l.c | |||
@@ -229,7 +229,7 @@ static int command_from_LL(isdn_ctrl *cntrl) | |||
229 | return -EINVAL; | 229 | return -EINVAL; |
230 | } | 230 | } |
231 | bcs = cs->bcs + ch; | 231 | bcs = cs->bcs + ch; |
232 | if (!gigaset_get_channel(bcs)) { | 232 | if (gigaset_get_channel(bcs) < 0) { |
233 | dev_err(cs->dev, "ISDN_CMD_DIAL: channel not free\n"); | 233 | dev_err(cs->dev, "ISDN_CMD_DIAL: channel not free\n"); |
234 | return -EBUSY; | 234 | return -EBUSY; |
235 | } | 235 | } |
@@ -618,7 +618,7 @@ void gigaset_isdn_stop(struct cardstate *cs) | |||
618 | * @cs: device descriptor structure. | 618 | * @cs: device descriptor structure. |
619 | * @isdnid: device name. | 619 | * @isdnid: device name. |
620 | * | 620 | * |
621 | * Return value: 1 for success, 0 for failure | 621 | * Return value: 0 on success, error code < 0 on failure |
622 | */ | 622 | */ |
623 | int gigaset_isdn_regdev(struct cardstate *cs, const char *isdnid) | 623 | int gigaset_isdn_regdev(struct cardstate *cs, const char *isdnid) |
624 | { | 624 | { |
@@ -627,14 +627,14 @@ int gigaset_isdn_regdev(struct cardstate *cs, const char *isdnid) | |||
627 | iif = kmalloc(sizeof *iif, GFP_KERNEL); | 627 | iif = kmalloc(sizeof *iif, GFP_KERNEL); |
628 | if (!iif) { | 628 | if (!iif) { |
629 | pr_err("out of memory\n"); | 629 | pr_err("out of memory\n"); |
630 | return 0; | 630 | return -ENOMEM; |
631 | } | 631 | } |
632 | 632 | ||
633 | if (snprintf(iif->id, sizeof iif->id, "%s_%u", isdnid, cs->minor_index) | 633 | if (snprintf(iif->id, sizeof iif->id, "%s_%u", isdnid, cs->minor_index) |
634 | >= sizeof iif->id) { | 634 | >= sizeof iif->id) { |
635 | pr_err("ID too long: %s\n", isdnid); | 635 | pr_err("ID too long: %s\n", isdnid); |
636 | kfree(iif); | 636 | kfree(iif); |
637 | return 0; | 637 | return -EINVAL; |
638 | } | 638 | } |
639 | 639 | ||
640 | iif->owner = THIS_MODULE; | 640 | iif->owner = THIS_MODULE; |
@@ -656,13 +656,13 @@ int gigaset_isdn_regdev(struct cardstate *cs, const char *isdnid) | |||
656 | if (!register_isdn(iif)) { | 656 | if (!register_isdn(iif)) { |
657 | pr_err("register_isdn failed\n"); | 657 | pr_err("register_isdn failed\n"); |
658 | kfree(iif); | 658 | kfree(iif); |
659 | return 0; | 659 | return -EINVAL; |
660 | } | 660 | } |
661 | 661 | ||
662 | cs->iif = iif; | 662 | cs->iif = iif; |
663 | cs->myid = iif->channels; /* Set my device id */ | 663 | cs->myid = iif->channels; /* Set my device id */ |
664 | cs->hw_hdr_len = HW_HDR_LEN; | 664 | cs->hw_hdr_len = HW_HDR_LEN; |
665 | return 1; | 665 | return 0; |
666 | } | 666 | } |
667 | 667 | ||
668 | /** | 668 | /** |
diff --git a/drivers/isdn/gigaset/isocdata.c b/drivers/isdn/gigaset/isocdata.c index a351c16705bd..bc29f1d52a2f 100644 --- a/drivers/isdn/gigaset/isocdata.c +++ b/drivers/isdn/gigaset/isocdata.c | |||
@@ -56,7 +56,7 @@ static inline int isowbuf_freebytes(struct isowbuf_t *iwb) | |||
56 | 56 | ||
57 | /* start writing | 57 | /* start writing |
58 | * acquire the write semaphore | 58 | * acquire the write semaphore |
59 | * return true if acquired, false if busy | 59 | * return 0 if acquired, <0 if busy |
60 | */ | 60 | */ |
61 | static inline int isowbuf_startwrite(struct isowbuf_t *iwb) | 61 | static inline int isowbuf_startwrite(struct isowbuf_t *iwb) |
62 | { | 62 | { |
@@ -64,12 +64,12 @@ static inline int isowbuf_startwrite(struct isowbuf_t *iwb) | |||
64 | atomic_inc(&iwb->writesem); | 64 | atomic_inc(&iwb->writesem); |
65 | gig_dbg(DEBUG_ISO, "%s: couldn't acquire iso write semaphore", | 65 | gig_dbg(DEBUG_ISO, "%s: couldn't acquire iso write semaphore", |
66 | __func__); | 66 | __func__); |
67 | return 0; | 67 | return -EBUSY; |
68 | } | 68 | } |
69 | gig_dbg(DEBUG_ISO, | 69 | gig_dbg(DEBUG_ISO, |
70 | "%s: acquired iso write semaphore, data[write]=%02x, nbits=%d", | 70 | "%s: acquired iso write semaphore, data[write]=%02x, nbits=%d", |
71 | __func__, iwb->data[iwb->write], iwb->wbits); | 71 | __func__, iwb->data[iwb->write], iwb->wbits); |
72 | return 1; | 72 | return 0; |
73 | } | 73 | } |
74 | 74 | ||
75 | /* finish writing | 75 | /* finish writing |
@@ -158,7 +158,7 @@ int gigaset_isowbuf_getbytes(struct isowbuf_t *iwb, int size) | |||
158 | /* no wraparound in valid data */ | 158 | /* no wraparound in valid data */ |
159 | if (limit >= write) { | 159 | if (limit >= write) { |
160 | /* append idle frame */ | 160 | /* append idle frame */ |
161 | if (!isowbuf_startwrite(iwb)) | 161 | if (isowbuf_startwrite(iwb) < 0) |
162 | return -EBUSY; | 162 | return -EBUSY; |
163 | /* write position could have changed */ | 163 | /* write position could have changed */ |
164 | write = iwb->write; | 164 | write = iwb->write; |
@@ -403,7 +403,7 @@ static inline int hdlc_buildframe(struct isowbuf_t *iwb, | |||
403 | unsigned char c; | 403 | unsigned char c; |
404 | 404 | ||
405 | if (isowbuf_freebytes(iwb) < count + count / 5 + 6 || | 405 | if (isowbuf_freebytes(iwb) < count + count / 5 + 6 || |
406 | !isowbuf_startwrite(iwb)) { | 406 | isowbuf_startwrite(iwb) < 0) { |
407 | gig_dbg(DEBUG_ISO, "%s: %d bytes free -> -EAGAIN", | 407 | gig_dbg(DEBUG_ISO, "%s: %d bytes free -> -EAGAIN", |
408 | __func__, isowbuf_freebytes(iwb)); | 408 | __func__, isowbuf_freebytes(iwb)); |
409 | return -EAGAIN; | 409 | return -EAGAIN; |
@@ -457,7 +457,7 @@ static inline int trans_buildframe(struct isowbuf_t *iwb, | |||
457 | return iwb->write; | 457 | return iwb->write; |
458 | 458 | ||
459 | if (isowbuf_freebytes(iwb) < count || | 459 | if (isowbuf_freebytes(iwb) < count || |
460 | !isowbuf_startwrite(iwb)) { | 460 | isowbuf_startwrite(iwb) < 0) { |
461 | gig_dbg(DEBUG_ISO, "can't put %d bytes", count); | 461 | gig_dbg(DEBUG_ISO, "can't put %d bytes", count); |
462 | return -EAGAIN; | 462 | return -EAGAIN; |
463 | } | 463 | } |
diff --git a/drivers/isdn/gigaset/ser-gigaset.c b/drivers/isdn/gigaset/ser-gigaset.c index 6f3fd4cf4378..8c91fd5eb6fd 100644 --- a/drivers/isdn/gigaset/ser-gigaset.c +++ b/drivers/isdn/gigaset/ser-gigaset.c | |||
@@ -340,17 +340,16 @@ static int gigaset_initbcshw(struct bc_state *bcs) | |||
340 | { | 340 | { |
341 | /* unused */ | 341 | /* unused */ |
342 | bcs->hw.ser = NULL; | 342 | bcs->hw.ser = NULL; |
343 | return 1; | 343 | return 0; |
344 | } | 344 | } |
345 | 345 | ||
346 | /* | 346 | /* |
347 | * Free B channel structure | 347 | * Free B channel structure |
348 | * Called by "gigaset_freebcs" in common.c | 348 | * Called by "gigaset_freebcs" in common.c |
349 | */ | 349 | */ |
350 | static int gigaset_freebcshw(struct bc_state *bcs) | 350 | static void gigaset_freebcshw(struct bc_state *bcs) |
351 | { | 351 | { |
352 | /* unused */ | 352 | /* unused */ |
353 | return 1; | ||
354 | } | 353 | } |
355 | 354 | ||
356 | /* | 355 | /* |
@@ -398,7 +397,7 @@ static int gigaset_initcshw(struct cardstate *cs) | |||
398 | scs = kzalloc(sizeof(struct ser_cardstate), GFP_KERNEL); | 397 | scs = kzalloc(sizeof(struct ser_cardstate), GFP_KERNEL); |
399 | if (!scs) { | 398 | if (!scs) { |
400 | pr_err("out of memory\n"); | 399 | pr_err("out of memory\n"); |
401 | return 0; | 400 | return -ENOMEM; |
402 | } | 401 | } |
403 | cs->hw.ser = scs; | 402 | cs->hw.ser = scs; |
404 | 403 | ||
@@ -410,13 +409,13 @@ static int gigaset_initcshw(struct cardstate *cs) | |||
410 | pr_err("error %d registering platform device\n", rc); | 409 | pr_err("error %d registering platform device\n", rc); |
411 | kfree(cs->hw.ser); | 410 | kfree(cs->hw.ser); |
412 | cs->hw.ser = NULL; | 411 | cs->hw.ser = NULL; |
413 | return 0; | 412 | return rc; |
414 | } | 413 | } |
415 | dev_set_drvdata(&cs->hw.ser->dev.dev, cs); | 414 | dev_set_drvdata(&cs->hw.ser->dev.dev, cs); |
416 | 415 | ||
417 | tasklet_init(&cs->write_tasklet, | 416 | tasklet_init(&cs->write_tasklet, |
418 | gigaset_modem_fill, (unsigned long) cs); | 417 | gigaset_modem_fill, (unsigned long) cs); |
419 | return 1; | 418 | return 0; |
420 | } | 419 | } |
421 | 420 | ||
422 | /* | 421 | /* |
@@ -503,6 +502,7 @@ static int | |||
503 | gigaset_tty_open(struct tty_struct *tty) | 502 | gigaset_tty_open(struct tty_struct *tty) |
504 | { | 503 | { |
505 | struct cardstate *cs; | 504 | struct cardstate *cs; |
505 | int rc; | ||
506 | 506 | ||
507 | gig_dbg(DEBUG_INIT, "Starting HLL for Gigaset M101"); | 507 | gig_dbg(DEBUG_INIT, "Starting HLL for Gigaset M101"); |
508 | 508 | ||
@@ -515,8 +515,10 @@ gigaset_tty_open(struct tty_struct *tty) | |||
515 | 515 | ||
516 | /* allocate memory for our device state and initialize it */ | 516 | /* allocate memory for our device state and initialize it */ |
517 | cs = gigaset_initcs(driver, 1, 1, 0, cidmode, GIGASET_MODULENAME); | 517 | cs = gigaset_initcs(driver, 1, 1, 0, cidmode, GIGASET_MODULENAME); |
518 | if (!cs) | 518 | if (!cs) { |
519 | rc = -ENODEV; | ||
519 | goto error; | 520 | goto error; |
521 | } | ||
520 | 522 | ||
521 | cs->dev = &cs->hw.ser->dev.dev; | 523 | cs->dev = &cs->hw.ser->dev.dev; |
522 | cs->hw.ser->tty = tty; | 524 | cs->hw.ser->tty = tty; |
@@ -530,7 +532,8 @@ gigaset_tty_open(struct tty_struct *tty) | |||
530 | */ | 532 | */ |
531 | if (startmode == SM_LOCKED) | 533 | if (startmode == SM_LOCKED) |
532 | cs->mstate = MS_LOCKED; | 534 | cs->mstate = MS_LOCKED; |
533 | if (!gigaset_start(cs)) { | 535 | rc = gigaset_start(cs); |
536 | if (rc < 0) { | ||
534 | tasklet_kill(&cs->write_tasklet); | 537 | tasklet_kill(&cs->write_tasklet); |
535 | goto error; | 538 | goto error; |
536 | } | 539 | } |
@@ -542,7 +545,7 @@ error: | |||
542 | gig_dbg(DEBUG_INIT, "Startup of HLL failed"); | 545 | gig_dbg(DEBUG_INIT, "Startup of HLL failed"); |
543 | tty->disc_data = NULL; | 546 | tty->disc_data = NULL; |
544 | gigaset_freecs(cs); | 547 | gigaset_freecs(cs); |
545 | return -ENODEV; | 548 | return rc; |
546 | } | 549 | } |
547 | 550 | ||
548 | /* | 551 | /* |
diff --git a/drivers/isdn/gigaset/usb-gigaset.c b/drivers/isdn/gigaset/usb-gigaset.c index 049da67f6392..bb12d8051732 100644 --- a/drivers/isdn/gigaset/usb-gigaset.c +++ b/drivers/isdn/gigaset/usb-gigaset.c | |||
@@ -549,10 +549,9 @@ static int gigaset_brkchars(struct cardstate *cs, const unsigned char buf[6]) | |||
549 | 0, 0, &buf, 6, 2000); | 549 | 0, 0, &buf, 6, 2000); |
550 | } | 550 | } |
551 | 551 | ||
552 | static int gigaset_freebcshw(struct bc_state *bcs) | 552 | static void gigaset_freebcshw(struct bc_state *bcs) |
553 | { | 553 | { |
554 | /* unused */ | 554 | /* unused */ |
555 | return 1; | ||
556 | } | 555 | } |
557 | 556 | ||
558 | /* Initialize the b-channel structure */ | 557 | /* Initialize the b-channel structure */ |
@@ -560,7 +559,7 @@ static int gigaset_initbcshw(struct bc_state *bcs) | |||
560 | { | 559 | { |
561 | /* unused */ | 560 | /* unused */ |
562 | bcs->hw.usb = NULL; | 561 | bcs->hw.usb = NULL; |
563 | return 1; | 562 | return 0; |
564 | } | 563 | } |
565 | 564 | ||
566 | static void gigaset_reinitbcshw(struct bc_state *bcs) | 565 | static void gigaset_reinitbcshw(struct bc_state *bcs) |
@@ -582,7 +581,7 @@ static int gigaset_initcshw(struct cardstate *cs) | |||
582 | kmalloc(sizeof(struct usb_cardstate), GFP_KERNEL); | 581 | kmalloc(sizeof(struct usb_cardstate), GFP_KERNEL); |
583 | if (!ucs) { | 582 | if (!ucs) { |
584 | pr_err("out of memory\n"); | 583 | pr_err("out of memory\n"); |
585 | return 0; | 584 | return -ENOMEM; |
586 | } | 585 | } |
587 | 586 | ||
588 | ucs->bchars[0] = 0; | 587 | ucs->bchars[0] = 0; |
@@ -597,7 +596,7 @@ static int gigaset_initcshw(struct cardstate *cs) | |||
597 | tasklet_init(&cs->write_tasklet, | 596 | tasklet_init(&cs->write_tasklet, |
598 | gigaset_modem_fill, (unsigned long) cs); | 597 | gigaset_modem_fill, (unsigned long) cs); |
599 | 598 | ||
600 | return 1; | 599 | return 0; |
601 | } | 600 | } |
602 | 601 | ||
603 | /* Send data from current skb to the device. */ | 602 | /* Send data from current skb to the device. */ |
@@ -766,9 +765,9 @@ static int gigaset_probe(struct usb_interface *interface, | |||
766 | if (startmode == SM_LOCKED) | 765 | if (startmode == SM_LOCKED) |
767 | cs->mstate = MS_LOCKED; | 766 | cs->mstate = MS_LOCKED; |
768 | 767 | ||
769 | if (!gigaset_start(cs)) { | 768 | retval = gigaset_start(cs); |
769 | if (retval < 0) { | ||
770 | tasklet_kill(&cs->write_tasklet); | 770 | tasklet_kill(&cs->write_tasklet); |
771 | retval = -ENODEV; | ||
772 | goto error; | 771 | goto error; |
773 | } | 772 | } |
774 | return 0; | 773 | return 0; |
@@ -898,8 +897,10 @@ static int __init usb_gigaset_init(void) | |||
898 | driver = gigaset_initdriver(GIGASET_MINOR, GIGASET_MINORS, | 897 | driver = gigaset_initdriver(GIGASET_MINOR, GIGASET_MINORS, |
899 | GIGASET_MODULENAME, GIGASET_DEVNAME, | 898 | GIGASET_MODULENAME, GIGASET_DEVNAME, |
900 | &ops, THIS_MODULE); | 899 | &ops, THIS_MODULE); |
901 | if (driver == NULL) | 900 | if (driver == NULL) { |
901 | result = -ENOMEM; | ||
902 | goto error; | 902 | goto error; |
903 | } | ||
903 | 904 | ||
904 | /* register this driver with the USB subsystem */ | 905 | /* register this driver with the USB subsystem */ |
905 | result = usb_register(&gigaset_usb_driver); | 906 | result = usb_register(&gigaset_usb_driver); |
@@ -915,7 +916,7 @@ error: | |||
915 | if (driver) | 916 | if (driver) |
916 | gigaset_freedriver(driver); | 917 | gigaset_freedriver(driver); |
917 | driver = NULL; | 918 | driver = NULL; |
918 | return -1; | 919 | return result; |
919 | } | 920 | } |
920 | 921 | ||
921 | /* | 922 | /* |