diff options
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/char/rocket.c | 3 | ||||
-rw-r--r-- | drivers/char/vt.c | 2 | ||||
-rw-r--r-- | drivers/firmware/pcdp.h | 2 | ||||
-rw-r--r-- | drivers/ieee1394/ohci1394.c | 3 | ||||
-rw-r--r-- | drivers/input/joystick/amijoy.c | 2 | ||||
-rw-r--r-- | drivers/md/bitmap.c | 9 | ||||
-rw-r--r-- | drivers/md/raid0.c | 8 | ||||
-rw-r--r-- | drivers/md/raid1.c | 37 | ||||
-rw-r--r-- | drivers/media/dvb/frontends/lgdt3302.c | 16 | ||||
-rw-r--r-- | drivers/media/video/cx88/cx88-cards.c | 8 | ||||
-rw-r--r-- | drivers/media/video/cx88/cx88-dvb.c | 4 | ||||
-rw-r--r-- | drivers/media/video/cx88/cx88-video.c | 7 | ||||
-rw-r--r-- | drivers/media/video/cx88/cx88.h | 6 | ||||
-rw-r--r-- | drivers/media/video/tea5767.c | 34 | ||||
-rw-r--r-- | drivers/media/video/tuner-core.c | 33 | ||||
-rw-r--r-- | drivers/mtd/chips/Kconfig | 2 | ||||
-rw-r--r-- | drivers/mtd/chips/cfi_cmdset_0020.c | 5 | ||||
-rw-r--r-- | drivers/mtd/nand/nand_base.c | 22 | ||||
-rw-r--r-- | drivers/mtd/nand/nand_bbt.c | 20 | ||||
-rw-r--r-- | drivers/serial/crisv10.c | 2 | ||||
-rw-r--r-- | drivers/serial/icom.c | 1 | ||||
-rw-r--r-- | drivers/serial/jsm/jsm.h | 1 | ||||
-rw-r--r-- | drivers/usb/serial/option.c | 228 |
23 files changed, 231 insertions, 224 deletions
diff --git a/drivers/char/rocket.c b/drivers/char/rocket.c index f463d6baa685..5b1d3680c8ab 100644 --- a/drivers/char/rocket.c +++ b/drivers/char/rocket.c | |||
@@ -355,7 +355,7 @@ static void rp_do_receive(struct r_port *info, | |||
355 | ToRecv = space; | 355 | ToRecv = space; |
356 | 356 | ||
357 | if (ToRecv <= 0) | 357 | if (ToRecv <= 0) |
358 | return; | 358 | goto done; |
359 | 359 | ||
360 | /* | 360 | /* |
361 | * if status indicates there are errored characters in the | 361 | * if status indicates there are errored characters in the |
@@ -437,6 +437,7 @@ static void rp_do_receive(struct r_port *info, | |||
437 | } | 437 | } |
438 | /* Push the data up to the tty layer */ | 438 | /* Push the data up to the tty layer */ |
439 | ld->receive_buf(tty, tty->flip.char_buf, tty->flip.flag_buf, count); | 439 | ld->receive_buf(tty, tty->flip.char_buf, tty->flip.flag_buf, count); |
440 | done: | ||
440 | tty_ldisc_deref(ld); | 441 | tty_ldisc_deref(ld); |
441 | } | 442 | } |
442 | 443 | ||
diff --git a/drivers/char/vt.c b/drivers/char/vt.c index d7aa7a29f67e..30d96739fb23 100644 --- a/drivers/char/vt.c +++ b/drivers/char/vt.c | |||
@@ -2796,7 +2796,7 @@ void do_blank_screen(int entering_gfx) | |||
2796 | return; | 2796 | return; |
2797 | 2797 | ||
2798 | if (vesa_off_interval) { | 2798 | if (vesa_off_interval) { |
2799 | blank_state = blank_vesa_wait, | 2799 | blank_state = blank_vesa_wait; |
2800 | mod_timer(&console_timer, jiffies + vesa_off_interval); | 2800 | mod_timer(&console_timer, jiffies + vesa_off_interval); |
2801 | } | 2801 | } |
2802 | 2802 | ||
diff --git a/drivers/firmware/pcdp.h b/drivers/firmware/pcdp.h index e72cc47de33b..ce910d68bd19 100644 --- a/drivers/firmware/pcdp.h +++ b/drivers/firmware/pcdp.h | |||
@@ -52,6 +52,8 @@ struct pcdp_uart { | |||
52 | u32 clock_rate; | 52 | u32 clock_rate; |
53 | u8 pci_prog_intfc; | 53 | u8 pci_prog_intfc; |
54 | u8 flags; | 54 | u8 flags; |
55 | u16 conout_index; | ||
56 | u32 reserved; | ||
55 | } __attribute__((packed)); | 57 | } __attribute__((packed)); |
56 | 58 | ||
57 | #define PCDP_IF_PCI 1 | 59 | #define PCDP_IF_PCI 1 |
diff --git a/drivers/ieee1394/ohci1394.c b/drivers/ieee1394/ohci1394.c index a485f47bb21e..b12a970cc9a3 100644 --- a/drivers/ieee1394/ohci1394.c +++ b/drivers/ieee1394/ohci1394.c | |||
@@ -1084,7 +1084,8 @@ static int ohci_devctl(struct hpsb_host *host, enum devctl_cmd cmd, int arg) | |||
1084 | 1084 | ||
1085 | initialize_dma_rcv_ctx(&ohci->ir_legacy_context, 1); | 1085 | initialize_dma_rcv_ctx(&ohci->ir_legacy_context, 1); |
1086 | 1086 | ||
1087 | PRINT(KERN_ERR, "IR legacy activated"); | 1087 | if (printk_ratelimit()) |
1088 | PRINT(KERN_ERR, "IR legacy activated"); | ||
1088 | } | 1089 | } |
1089 | 1090 | ||
1090 | spin_lock_irqsave(&ohci->IR_channel_lock, flags); | 1091 | spin_lock_irqsave(&ohci->IR_channel_lock, flags); |
diff --git a/drivers/input/joystick/amijoy.c b/drivers/input/joystick/amijoy.c index 033456bb9fe0..e996183c5b06 100644 --- a/drivers/input/joystick/amijoy.c +++ b/drivers/input/joystick/amijoy.c | |||
@@ -105,7 +105,7 @@ out: | |||
105 | 105 | ||
106 | static void amijoy_close(struct input_dev *dev) | 106 | static void amijoy_close(struct input_dev *dev) |
107 | { | 107 | { |
108 | down(&amijoysem); | 108 | down(&amijoy_sem); |
109 | if (!--amijoy_used) | 109 | if (!--amijoy_used) |
110 | free_irq(IRQ_AMIGA_VERTB, amijoy_interrupt); | 110 | free_irq(IRQ_AMIGA_VERTB, amijoy_interrupt); |
111 | up(&amijoy_sem); | 111 | up(&amijoy_sem); |
diff --git a/drivers/md/bitmap.c b/drivers/md/bitmap.c index 95980ad6b27b..0c2ed99a3832 100644 --- a/drivers/md/bitmap.c +++ b/drivers/md/bitmap.c | |||
@@ -1345,7 +1345,8 @@ void bitmap_endwrite(struct bitmap *bitmap, sector_t offset, unsigned long secto | |||
1345 | } | 1345 | } |
1346 | } | 1346 | } |
1347 | 1347 | ||
1348 | int bitmap_start_sync(struct bitmap *bitmap, sector_t offset, int *blocks) | 1348 | int bitmap_start_sync(struct bitmap *bitmap, sector_t offset, int *blocks, |
1349 | int degraded) | ||
1349 | { | 1350 | { |
1350 | bitmap_counter_t *bmc; | 1351 | bitmap_counter_t *bmc; |
1351 | int rv; | 1352 | int rv; |
@@ -1362,8 +1363,10 @@ int bitmap_start_sync(struct bitmap *bitmap, sector_t offset, int *blocks) | |||
1362 | rv = 1; | 1363 | rv = 1; |
1363 | else if (NEEDED(*bmc)) { | 1364 | else if (NEEDED(*bmc)) { |
1364 | rv = 1; | 1365 | rv = 1; |
1365 | *bmc |= RESYNC_MASK; | 1366 | if (!degraded) { /* don't set/clear bits if degraded */ |
1366 | *bmc &= ~NEEDED_MASK; | 1367 | *bmc |= RESYNC_MASK; |
1368 | *bmc &= ~NEEDED_MASK; | ||
1369 | } | ||
1367 | } | 1370 | } |
1368 | } | 1371 | } |
1369 | spin_unlock_irq(&bitmap->lock); | 1372 | spin_unlock_irq(&bitmap->lock); |
diff --git a/drivers/md/raid0.c b/drivers/md/raid0.c index e11dd14d0b43..2120710172c5 100644 --- a/drivers/md/raid0.c +++ b/drivers/md/raid0.c | |||
@@ -314,16 +314,16 @@ static int raid0_run (mddev_t *mddev) | |||
314 | sector_t space = conf->hash_spacing; | 314 | sector_t space = conf->hash_spacing; |
315 | int round; | 315 | int round; |
316 | conf->preshift = 0; | 316 | conf->preshift = 0; |
317 | if (sizeof(sector_t) > sizeof(unsigned long)) { | 317 | if (sizeof(sector_t) > sizeof(u32)) { |
318 | /*shift down space and s so that sector_div will work */ | 318 | /*shift down space and s so that sector_div will work */ |
319 | while (space > (sector_t) (~(unsigned long)0)) { | 319 | while (space > (sector_t) (~(u32)0)) { |
320 | s >>= 1; | 320 | s >>= 1; |
321 | space >>= 1; | 321 | space >>= 1; |
322 | s += 1; /* force round-up */ | 322 | s += 1; /* force round-up */ |
323 | conf->preshift++; | 323 | conf->preshift++; |
324 | } | 324 | } |
325 | } | 325 | } |
326 | round = sector_div(s, (unsigned long)space) ? 1 : 0; | 326 | round = sector_div(s, (u32)space) ? 1 : 0; |
327 | nb_zone = s + round; | 327 | nb_zone = s + round; |
328 | } | 328 | } |
329 | printk("raid0 : nb_zone is %d.\n", nb_zone); | 329 | printk("raid0 : nb_zone is %d.\n", nb_zone); |
@@ -443,7 +443,7 @@ static int raid0_make_request (request_queue_t *q, struct bio *bio) | |||
443 | volatile | 443 | volatile |
444 | #endif | 444 | #endif |
445 | sector_t x = block >> conf->preshift; | 445 | sector_t x = block >> conf->preshift; |
446 | sector_div(x, (unsigned long)conf->hash_spacing); | 446 | sector_div(x, (u32)conf->hash_spacing); |
447 | zone = conf->hash_table[x]; | 447 | zone = conf->hash_table[x]; |
448 | } | 448 | } |
449 | 449 | ||
diff --git a/drivers/md/raid1.c b/drivers/md/raid1.c index ff1dbec864af..5f253ee536bb 100644 --- a/drivers/md/raid1.c +++ b/drivers/md/raid1.c | |||
@@ -1126,21 +1126,19 @@ static sector_t sync_request(mddev_t *mddev, sector_t sector_nr, int *skipped, i | |||
1126 | * only be one in raid1 resync. | 1126 | * only be one in raid1 resync. |
1127 | * We can find the current addess in mddev->curr_resync | 1127 | * We can find the current addess in mddev->curr_resync |
1128 | */ | 1128 | */ |
1129 | if (!conf->fullsync) { | 1129 | if (mddev->curr_resync < max_sector) /* aborted */ |
1130 | if (mddev->curr_resync < max_sector) | 1130 | bitmap_end_sync(mddev->bitmap, mddev->curr_resync, |
1131 | bitmap_end_sync(mddev->bitmap, | ||
1132 | mddev->curr_resync, | ||
1133 | &sync_blocks, 1); | 1131 | &sync_blocks, 1); |
1134 | bitmap_close_sync(mddev->bitmap); | 1132 | else /* completed sync */ |
1135 | } | ||
1136 | if (mddev->curr_resync >= max_sector) | ||
1137 | conf->fullsync = 0; | 1133 | conf->fullsync = 0; |
1134 | |||
1135 | bitmap_close_sync(mddev->bitmap); | ||
1138 | close_sync(conf); | 1136 | close_sync(conf); |
1139 | return 0; | 1137 | return 0; |
1140 | } | 1138 | } |
1141 | 1139 | ||
1142 | if (!conf->fullsync && | 1140 | if (!bitmap_start_sync(mddev->bitmap, sector_nr, &sync_blocks, mddev->degraded) && |
1143 | !bitmap_start_sync(mddev->bitmap, sector_nr, &sync_blocks)) { | 1141 | !conf->fullsync) { |
1144 | /* We can skip this block, and probably several more */ | 1142 | /* We can skip this block, and probably several more */ |
1145 | *skipped = 1; | 1143 | *skipped = 1; |
1146 | return sync_blocks; | 1144 | return sync_blocks; |
@@ -1243,15 +1241,15 @@ static sector_t sync_request(mddev_t *mddev, sector_t sector_nr, int *skipped, i | |||
1243 | len = (max_sector - sector_nr) << 9; | 1241 | len = (max_sector - sector_nr) << 9; |
1244 | if (len == 0) | 1242 | if (len == 0) |
1245 | break; | 1243 | break; |
1246 | if (!conf->fullsync) { | 1244 | if (sync_blocks == 0) { |
1247 | if (sync_blocks == 0) { | 1245 | if (!bitmap_start_sync(mddev->bitmap, sector_nr, |
1248 | if (!bitmap_start_sync(mddev->bitmap, | 1246 | &sync_blocks, mddev->degraded) && |
1249 | sector_nr, &sync_blocks)) | 1247 | !conf->fullsync) |
1250 | break; | 1248 | break; |
1251 | if (sync_blocks < (PAGE_SIZE>>9)) | 1249 | if (sync_blocks < (PAGE_SIZE>>9)) |
1252 | BUG(); | 1250 | BUG(); |
1253 | if (len > (sync_blocks<<9)) len = sync_blocks<<9; | 1251 | if (len > (sync_blocks<<9)) |
1254 | } | 1252 | len = sync_blocks<<9; |
1255 | } | 1253 | } |
1256 | 1254 | ||
1257 | for (i=0 ; i < conf->raid_disks; i++) { | 1255 | for (i=0 ; i < conf->raid_disks; i++) { |
@@ -1264,7 +1262,8 @@ static sector_t sync_request(mddev_t *mddev, sector_t sector_nr, int *skipped, i | |||
1264 | while (i > 0) { | 1262 | while (i > 0) { |
1265 | i--; | 1263 | i--; |
1266 | bio = r1_bio->bios[i]; | 1264 | bio = r1_bio->bios[i]; |
1267 | if (bio->bi_end_io==NULL) continue; | 1265 | if (bio->bi_end_io==NULL) |
1266 | continue; | ||
1268 | /* remove last page from this bio */ | 1267 | /* remove last page from this bio */ |
1269 | bio->bi_vcnt--; | 1268 | bio->bi_vcnt--; |
1270 | bio->bi_size -= len; | 1269 | bio->bi_size -= len; |
diff --git a/drivers/media/dvb/frontends/lgdt3302.c b/drivers/media/dvb/frontends/lgdt3302.c index 2eea03d218cd..c85a2a99df42 100644 --- a/drivers/media/dvb/frontends/lgdt3302.c +++ b/drivers/media/dvb/frontends/lgdt3302.c | |||
@@ -217,13 +217,11 @@ static int lgdt3302_set_parameters(struct dvb_frontend* fe, | |||
217 | static u8 demux_ctrl_cfg[] = { DEMUX_CONTROL, 0xfb }; | 217 | static u8 demux_ctrl_cfg[] = { DEMUX_CONTROL, 0xfb }; |
218 | static u8 agc_rf_cfg[] = { AGC_RF_BANDWIDTH0, 0x40, 0x93, 0x00 }; | 218 | static u8 agc_rf_cfg[] = { AGC_RF_BANDWIDTH0, 0x40, 0x93, 0x00 }; |
219 | static u8 agc_ctrl_cfg[] = { AGC_FUNC_CTRL2, 0xc6, 0x40 }; | 219 | static u8 agc_ctrl_cfg[] = { AGC_FUNC_CTRL2, 0xc6, 0x40 }; |
220 | static u8 agc_delay_cfg[] = { AGC_DELAY0, 0x00, 0x00, 0x00 }; | 220 | static u8 agc_delay_cfg[] = { AGC_DELAY0, 0x07, 0x00, 0xfe }; |
221 | static u8 agc_loop_cfg[] = { AGC_LOOP_BANDWIDTH0, 0x08, 0x9a }; | 221 | static u8 agc_loop_cfg[] = { AGC_LOOP_BANDWIDTH0, 0x08, 0x9a }; |
222 | 222 | ||
223 | /* Change only if we are actually changing the modulation */ | 223 | /* Change only if we are actually changing the modulation */ |
224 | if (state->current_modulation != param->u.vsb.modulation) { | 224 | if (state->current_modulation != param->u.vsb.modulation) { |
225 | int value; | ||
226 | |||
227 | switch(param->u.vsb.modulation) { | 225 | switch(param->u.vsb.modulation) { |
228 | case VSB_8: | 226 | case VSB_8: |
229 | dprintk("%s: VSB_8 MODE\n", __FUNCTION__); | 227 | dprintk("%s: VSB_8 MODE\n", __FUNCTION__); |
@@ -276,16 +274,8 @@ static int lgdt3302_set_parameters(struct dvb_frontend* fe, | |||
276 | recovery center frequency register */ | 274 | recovery center frequency register */ |
277 | i2c_writebytes(state, state->config->demod_address, | 275 | i2c_writebytes(state, state->config->demod_address, |
278 | vsb_freq_cfg, sizeof(vsb_freq_cfg)); | 276 | vsb_freq_cfg, sizeof(vsb_freq_cfg)); |
279 | /* Set the value of 'INLVTHD' register 0x2a/0x2c | 277 | |
280 | to value from 'IFACC' register 0x39/0x3b -1 */ | 278 | /* Set the value of 'INLVTHD' register 0x2a/0x2c to 0x7fe */ |
281 | i2c_selectreadbytes(state, AGC_RFIF_ACC0, | ||
282 | &agc_delay_cfg[1], 3); | ||
283 | value = ((agc_delay_cfg[1] & 0x0f) << 8) | agc_delay_cfg[3]; | ||
284 | value = value -1; | ||
285 | dprintk("%s IFACC -1 = 0x%03x\n", __FUNCTION__, value); | ||
286 | agc_delay_cfg[1] = (value >> 8) & 0x0f; | ||
287 | agc_delay_cfg[2] = 0x00; | ||
288 | agc_delay_cfg[3] = value & 0xff; | ||
289 | i2c_writebytes(state, state->config->demod_address, | 279 | i2c_writebytes(state, state->config->demod_address, |
290 | agc_delay_cfg, sizeof(agc_delay_cfg)); | 280 | agc_delay_cfg, sizeof(agc_delay_cfg)); |
291 | 281 | ||
diff --git a/drivers/media/video/cx88/cx88-cards.c b/drivers/media/video/cx88/cx88-cards.c index b0b47c3cde3c..3d0c784b376f 100644 --- a/drivers/media/video/cx88/cx88-cards.c +++ b/drivers/media/video/cx88/cx88-cards.c | |||
@@ -1,5 +1,5 @@ | |||
1 | /* | 1 | /* |
2 | * $Id: cx88-cards.c,v 1.85 2005/07/04 19:35:05 mkrufky Exp $ | 2 | * $Id: cx88-cards.c,v 1.86 2005/07/14 03:06:43 mchehab Exp $ |
3 | * | 3 | * |
4 | * device driver for Conexant 2388x based TV cards | 4 | * device driver for Conexant 2388x based TV cards |
5 | * card-specific stuff. | 5 | * card-specific stuff. |
@@ -682,9 +682,9 @@ struct cx88_board cx88_boards[] = { | |||
682 | .name = "PixelView PlayTV Ultra Pro (Stereo)", | 682 | .name = "PixelView PlayTV Ultra Pro (Stereo)", |
683 | /* May be also TUNER_YMEC_TVF_5533MF for NTSC/M or PAL/M */ | 683 | /* May be also TUNER_YMEC_TVF_5533MF for NTSC/M or PAL/M */ |
684 | .tuner_type = TUNER_PHILIPS_FM1216ME_MK3, | 684 | .tuner_type = TUNER_PHILIPS_FM1216ME_MK3, |
685 | .radio_type = TUNER_TEA5767, | 685 | .radio_type = UNSET, |
686 | .tuner_addr = 0xc2>>1, | 686 | .tuner_addr = ADDR_UNSET, |
687 | .radio_addr = 0xc0>>1, | 687 | .radio_addr = ADDR_UNSET, |
688 | .input = {{ | 688 | .input = {{ |
689 | .type = CX88_VMUX_TELEVISION, | 689 | .type = CX88_VMUX_TELEVISION, |
690 | .vmux = 0, | 690 | .vmux = 0, |
diff --git a/drivers/media/video/cx88/cx88-dvb.c b/drivers/media/video/cx88/cx88-dvb.c index 8db68f2d1351..6ad1458ab652 100644 --- a/drivers/media/video/cx88/cx88-dvb.c +++ b/drivers/media/video/cx88/cx88-dvb.c | |||
@@ -1,5 +1,5 @@ | |||
1 | /* | 1 | /* |
2 | * $Id: cx88-dvb.c,v 1.41 2005/07/04 19:35:05 mkrufky Exp $ | 2 | * $Id: cx88-dvb.c,v 1.42 2005/07/12 15:44:55 mkrufky Exp $ |
3 | * | 3 | * |
4 | * device driver for Conexant 2388x based TV cards | 4 | * device driver for Conexant 2388x based TV cards |
5 | * MPEG Transport Stream (DVB) routines | 5 | * MPEG Transport Stream (DVB) routines |
@@ -180,12 +180,14 @@ static struct mt352_config dntv_live_dvbt_config = { | |||
180 | #if CONFIG_DVB_CX22702 | 180 | #if CONFIG_DVB_CX22702 |
181 | static struct cx22702_config connexant_refboard_config = { | 181 | static struct cx22702_config connexant_refboard_config = { |
182 | .demod_address = 0x43, | 182 | .demod_address = 0x43, |
183 | .output_mode = CX22702_SERIAL_OUTPUT, | ||
183 | .pll_address = 0x60, | 184 | .pll_address = 0x60, |
184 | .pll_desc = &dvb_pll_thomson_dtt7579, | 185 | .pll_desc = &dvb_pll_thomson_dtt7579, |
185 | }; | 186 | }; |
186 | 187 | ||
187 | static struct cx22702_config hauppauge_novat_config = { | 188 | static struct cx22702_config hauppauge_novat_config = { |
188 | .demod_address = 0x43, | 189 | .demod_address = 0x43, |
190 | .output_mode = CX22702_SERIAL_OUTPUT, | ||
189 | .pll_address = 0x61, | 191 | .pll_address = 0x61, |
190 | .pll_desc = &dvb_pll_thomson_dtt759x, | 192 | .pll_desc = &dvb_pll_thomson_dtt759x, |
191 | }; | 193 | }; |
diff --git a/drivers/media/video/cx88/cx88-video.c b/drivers/media/video/cx88/cx88-video.c index c44a079d08c0..5588a3aeecb4 100644 --- a/drivers/media/video/cx88/cx88-video.c +++ b/drivers/media/video/cx88/cx88-video.c | |||
@@ -1,5 +1,5 @@ | |||
1 | /* | 1 | /* |
2 | * $Id: cx88-video.c,v 1.79 2005/07/07 14:17:47 mchehab Exp $ | 2 | * $Id: cx88-video.c,v 1.80 2005/07/13 08:49:08 mchehab Exp $ |
3 | * | 3 | * |
4 | * device driver for Conexant 2388x based TV cards | 4 | * device driver for Conexant 2388x based TV cards |
5 | * video4linux video interface | 5 | * video4linux video interface |
@@ -1346,6 +1346,11 @@ static int video_do_ioctl(struct inode *inode, struct file *file, | |||
1346 | dev->freq = f->frequency; | 1346 | dev->freq = f->frequency; |
1347 | cx88_newstation(core); | 1347 | cx88_newstation(core); |
1348 | cx88_call_i2c_clients(dev->core,VIDIOC_S_FREQUENCY,f); | 1348 | cx88_call_i2c_clients(dev->core,VIDIOC_S_FREQUENCY,f); |
1349 | |||
1350 | /* When changing channels it is required to reset TVAUDIO */ | ||
1351 | msleep (10); | ||
1352 | cx88_set_tvaudio(core); | ||
1353 | |||
1349 | up(&dev->lock); | 1354 | up(&dev->lock); |
1350 | return 0; | 1355 | return 0; |
1351 | } | 1356 | } |
diff --git a/drivers/media/video/cx88/cx88.h b/drivers/media/video/cx88/cx88.h index 307beae04f2a..b008f7db6dfd 100644 --- a/drivers/media/video/cx88/cx88.h +++ b/drivers/media/video/cx88/cx88.h | |||
@@ -1,5 +1,5 @@ | |||
1 | /* | 1 | /* |
2 | * $Id: cx88.h,v 1.68 2005/07/07 14:17:47 mchehab Exp $ | 2 | * $Id: cx88.h,v 1.69 2005/07/13 17:25:25 mchehab Exp $ |
3 | * | 3 | * |
4 | * v4l2 device driver for cx2388x based TV cards | 4 | * v4l2 device driver for cx2388x based TV cards |
5 | * | 5 | * |
@@ -35,8 +35,8 @@ | |||
35 | #include "btcx-risc.h" | 35 | #include "btcx-risc.h" |
36 | #include "cx88-reg.h" | 36 | #include "cx88-reg.h" |
37 | 37 | ||
38 | #include <linux/version.h> | 38 | #include <linux/utsname.h> |
39 | #define CX88_VERSION_CODE KERNEL_VERSION(0,0,4) | 39 | #define CX88_VERSION_CODE KERNEL_VERSION(0,0,5) |
40 | 40 | ||
41 | #ifndef TRUE | 41 | #ifndef TRUE |
42 | # define TRUE (1==1) | 42 | # define TRUE (1==1) |
diff --git a/drivers/media/video/tea5767.c b/drivers/media/video/tea5767.c index b53c748caf2a..4d27ac1b7fb8 100644 --- a/drivers/media/video/tea5767.c +++ b/drivers/media/video/tea5767.c | |||
@@ -2,7 +2,7 @@ | |||
2 | * For Philips TEA5767 FM Chip used on some TV Cards like Prolink Pixelview | 2 | * For Philips TEA5767 FM Chip used on some TV Cards like Prolink Pixelview |
3 | * I2C address is allways 0xC0. | 3 | * I2C address is allways 0xC0. |
4 | * | 4 | * |
5 | * $Id: tea5767.c,v 1.18 2005/07/07 03:02:55 mchehab Exp $ | 5 | * $Id: tea5767.c,v 1.21 2005/07/14 03:06:43 mchehab Exp $ |
6 | * | 6 | * |
7 | * Copyright (c) 2005 Mauro Carvalho Chehab (mchehab@brturbo.com.br) | 7 | * Copyright (c) 2005 Mauro Carvalho Chehab (mchehab@brturbo.com.br) |
8 | * This code is placed under the terms of the GNU General Public License | 8 | * This code is placed under the terms of the GNU General Public License |
@@ -153,17 +153,17 @@ static void tea5767_status_dump(unsigned char *buffer) | |||
153 | 153 | ||
154 | switch (TEA5767_HIGH_LO_32768) { | 154 | switch (TEA5767_HIGH_LO_32768) { |
155 | case TEA5767_HIGH_LO_13MHz: | 155 | case TEA5767_HIGH_LO_13MHz: |
156 | frq = 1000 * (div * 50 - 700 - 225) / 4; /* Freq in KHz */ | 156 | frq = (div * 50000 - 700000 - 225000) / 4; /* Freq in KHz */ |
157 | break; | 157 | break; |
158 | case TEA5767_LOW_LO_13MHz: | 158 | case TEA5767_LOW_LO_13MHz: |
159 | frq = 1000 * (div * 50 + 700 + 225) / 4; /* Freq in KHz */ | 159 | frq = (div * 50000 + 700000 + 225000) / 4; /* Freq in KHz */ |
160 | break; | 160 | break; |
161 | case TEA5767_LOW_LO_32768: | 161 | case TEA5767_LOW_LO_32768: |
162 | frq = 1000 * (div * 32768 / 1000 + 700 + 225) / 4; /* Freq in KHz */ | 162 | frq = (div * 32768 + 700000 + 225000) / 4; /* Freq in KHz */ |
163 | break; | 163 | break; |
164 | case TEA5767_HIGH_LO_32768: | 164 | case TEA5767_HIGH_LO_32768: |
165 | default: | 165 | default: |
166 | frq = 1000 * (div * 32768 / 1000 - 700 - 225) / 4; /* Freq in KHz */ | 166 | frq = (div * 32768 - 700000 - 225000) / 4; /* Freq in KHz */ |
167 | break; | 167 | break; |
168 | } | 168 | } |
169 | buffer[0] = (div >> 8) & 0x3f; | 169 | buffer[0] = (div >> 8) & 0x3f; |
@@ -196,7 +196,7 @@ static void set_radio_freq(struct i2c_client *c, unsigned int frq) | |||
196 | unsigned div; | 196 | unsigned div; |
197 | int rc; | 197 | int rc; |
198 | 198 | ||
199 | tuner_dbg (PREFIX "radio freq counter %d\n", frq); | 199 | tuner_dbg (PREFIX "radio freq = %d.%03d MHz\n", frq/16000,(frq/16)%1000); |
200 | 200 | ||
201 | /* Rounds freq to next decimal value - for 62.5 KHz step */ | 201 | /* Rounds freq to next decimal value - for 62.5 KHz step */ |
202 | /* frq = 20*(frq/16)+radio_frq[frq%16]; */ | 202 | /* frq = 20*(frq/16)+radio_frq[frq%16]; */ |
@@ -224,19 +224,19 @@ static void set_radio_freq(struct i2c_client *c, unsigned int frq) | |||
224 | tuner_dbg ("TEA5767 radio HIGH LO inject xtal @ 13 MHz\n"); | 224 | tuner_dbg ("TEA5767 radio HIGH LO inject xtal @ 13 MHz\n"); |
225 | buffer[2] |= TEA5767_HIGH_LO_INJECT; | 225 | buffer[2] |= TEA5767_HIGH_LO_INJECT; |
226 | buffer[4] |= TEA5767_PLLREF_ENABLE; | 226 | buffer[4] |= TEA5767_PLLREF_ENABLE; |
227 | div = (frq * 4 / 16 + 700 + 225 + 25) / 50; | 227 | div = (frq * 4000 / 16 + 700000 + 225000 + 25000) / 50000; |
228 | break; | 228 | break; |
229 | case TEA5767_LOW_LO_13MHz: | 229 | case TEA5767_LOW_LO_13MHz: |
230 | tuner_dbg ("TEA5767 radio LOW LO inject xtal @ 13 MHz\n"); | 230 | tuner_dbg ("TEA5767 radio LOW LO inject xtal @ 13 MHz\n"); |
231 | 231 | ||
232 | buffer[4] |= TEA5767_PLLREF_ENABLE; | 232 | buffer[4] |= TEA5767_PLLREF_ENABLE; |
233 | div = (frq * 4 / 16 - 700 - 225 + 25) / 50; | 233 | div = (frq * 4000 / 16 - 700000 - 225000 + 25000) / 50000; |
234 | break; | 234 | break; |
235 | case TEA5767_LOW_LO_32768: | 235 | case TEA5767_LOW_LO_32768: |
236 | tuner_dbg ("TEA5767 radio LOW LO inject xtal @ 32,768 MHz\n"); | 236 | tuner_dbg ("TEA5767 radio LOW LO inject xtal @ 32,768 MHz\n"); |
237 | buffer[3] |= TEA5767_XTAL_32768; | 237 | buffer[3] |= TEA5767_XTAL_32768; |
238 | /* const 700=4000*175 Khz - to adjust freq to right value */ | 238 | /* const 700=4000*175 Khz - to adjust freq to right value */ |
239 | div = (1000 * (frq * 4 / 16 - 700 - 225) + 16384) >> 15; | 239 | div = ((frq * 4000 / 16 - 700000 - 225000) + 16384) >> 15; |
240 | break; | 240 | break; |
241 | case TEA5767_HIGH_LO_32768: | 241 | case TEA5767_HIGH_LO_32768: |
242 | default: | 242 | default: |
@@ -244,17 +244,21 @@ static void set_radio_freq(struct i2c_client *c, unsigned int frq) | |||
244 | 244 | ||
245 | buffer[2] |= TEA5767_HIGH_LO_INJECT; | 245 | buffer[2] |= TEA5767_HIGH_LO_INJECT; |
246 | buffer[3] |= TEA5767_XTAL_32768; | 246 | buffer[3] |= TEA5767_XTAL_32768; |
247 | div = (1000 * (frq * 4 / 16 + 700 + 225) + 16384) >> 15; | 247 | div = ((frq * (4000 / 16) + 700000 + 225000) + 16384) >> 15; |
248 | break; | 248 | break; |
249 | } | 249 | } |
250 | buffer[0] = (div >> 8) & 0x3f; | 250 | buffer[0] = (div >> 8) & 0x3f; |
251 | buffer[1] = div & 0xff; | 251 | buffer[1] = div & 0xff; |
252 | 252 | ||
253 | if (tuner_debug) | ||
254 | tea5767_status_dump(buffer); | ||
255 | |||
256 | if (5 != (rc = i2c_master_send(c, buffer, 5))) | 253 | if (5 != (rc = i2c_master_send(c, buffer, 5))) |
257 | tuner_warn("i2c i/o error: rc == %d (should be 5)\n", rc); | 254 | tuner_warn("i2c i/o error: rc == %d (should be 5)\n", rc); |
255 | |||
256 | if (tuner_debug) { | ||
257 | if (5 != (rc = i2c_master_recv(c, buffer, 5))) | ||
258 | tuner_warn("i2c i/o error: rc == %d (should be 5)\n", rc); | ||
259 | else | ||
260 | tea5767_status_dump(buffer); | ||
261 | } | ||
258 | } | 262 | } |
259 | 263 | ||
260 | static int tea5767_signal(struct i2c_client *c) | 264 | static int tea5767_signal(struct i2c_client *c) |
@@ -294,7 +298,7 @@ int tea5767_autodetection(struct i2c_client *c) | |||
294 | struct tuner *t = i2c_get_clientdata(c); | 298 | struct tuner *t = i2c_get_clientdata(c); |
295 | 299 | ||
296 | if (5 != (rc = i2c_master_recv(c, buffer, 5))) { | 300 | if (5 != (rc = i2c_master_recv(c, buffer, 5))) { |
297 | tuner_warn("it is not a TEA5767. Received %i chars.\n", rc); | 301 | tuner_warn("It is not a TEA5767. Received %i bytes.\n", rc); |
298 | return EINVAL; | 302 | return EINVAL; |
299 | } | 303 | } |
300 | 304 | ||
@@ -310,11 +314,11 @@ int tea5767_autodetection(struct i2c_client *c) | |||
310 | * bit 0 : internally set to 0 | 314 | * bit 0 : internally set to 0 |
311 | * Byte 5: bit 7:0 : == 0 | 315 | * Byte 5: bit 7:0 : == 0 |
312 | */ | 316 | */ |
313 | |||
314 | if (!((buffer[3] & 0x0f) == 0x00) && (buffer[4] == 0x00)) { | 317 | if (!((buffer[3] & 0x0f) == 0x00) && (buffer[4] == 0x00)) { |
315 | tuner_warn("Chip ID is not zero. It is not a TEA5767\n"); | 318 | tuner_warn("Chip ID is not zero. It is not a TEA5767\n"); |
316 | return EINVAL; | 319 | return EINVAL; |
317 | } | 320 | } |
321 | |||
318 | tuner_warn("TEA5767 detected.\n"); | 322 | tuner_warn("TEA5767 detected.\n"); |
319 | return 0; | 323 | return 0; |
320 | } | 324 | } |
diff --git a/drivers/media/video/tuner-core.c b/drivers/media/video/tuner-core.c index de190630babb..b25a9c08ac02 100644 --- a/drivers/media/video/tuner-core.c +++ b/drivers/media/video/tuner-core.c | |||
@@ -1,5 +1,5 @@ | |||
1 | /* | 1 | /* |
2 | * $Id: tuner-core.c,v 1.55 2005/07/08 13:20:33 mchehab Exp $ | 2 | * $Id: tuner-core.c,v 1.58 2005/07/14 03:06:43 mchehab Exp $ |
3 | * | 3 | * |
4 | * i2c tv tuner chip device driver | 4 | * i2c tv tuner chip device driver |
5 | * core core, i.e. kernel interfaces, registering and so on | 5 | * core core, i.e. kernel interfaces, registering and so on |
@@ -39,6 +39,9 @@ I2C_CLIENT_INSMOD; | |||
39 | static unsigned int addr = 0; | 39 | static unsigned int addr = 0; |
40 | module_param(addr, int, 0444); | 40 | module_param(addr, int, 0444); |
41 | 41 | ||
42 | static unsigned int no_autodetect = 0; | ||
43 | module_param(no_autodetect, int, 0444); | ||
44 | |||
42 | /* insmod options used at runtime => read/write */ | 45 | /* insmod options used at runtime => read/write */ |
43 | unsigned int tuner_debug = 0; | 46 | unsigned int tuner_debug = 0; |
44 | module_param(tuner_debug, int, 0644); | 47 | module_param(tuner_debug, int, 0644); |
@@ -318,17 +321,19 @@ static int tuner_attach(struct i2c_adapter *adap, int addr, int kind) | |||
318 | tuner_info("chip found @ 0x%x (%s)\n", addr << 1, adap->name); | 321 | tuner_info("chip found @ 0x%x (%s)\n", addr << 1, adap->name); |
319 | 322 | ||
320 | /* TEA5767 autodetection code - only for addr = 0xc0 */ | 323 | /* TEA5767 autodetection code - only for addr = 0xc0 */ |
321 | if (addr == 0x60) { | 324 | if (!no_autodetect) { |
322 | if (tea5767_autodetection(&t->i2c) != EINVAL) { | 325 | if (addr == 0x60) { |
323 | t->type = TUNER_TEA5767; | 326 | if (tea5767_autodetection(&t->i2c) != EINVAL) { |
324 | t->mode_mask = T_RADIO; | 327 | t->type = TUNER_TEA5767; |
325 | t->mode = T_STANDBY; | 328 | t->mode_mask = T_RADIO; |
326 | t->freq = 87.5 * 16; /* Sets freq to FM range */ | 329 | t->mode = T_STANDBY; |
327 | default_mode_mask &= ~T_RADIO; | 330 | t->freq = 87.5 * 16; /* Sets freq to FM range */ |
328 | 331 | default_mode_mask &= ~T_RADIO; | |
329 | i2c_attach_client (&t->i2c); | 332 | |
330 | set_type(&t->i2c,t->type, t->mode_mask); | 333 | i2c_attach_client (&t->i2c); |
331 | return 0; | 334 | set_type(&t->i2c,t->type, t->mode_mask); |
335 | return 0; | ||
336 | } | ||
332 | } | 337 | } |
333 | } | 338 | } |
334 | 339 | ||
@@ -631,7 +636,9 @@ static int tuner_command(struct i2c_client *client, unsigned int cmd, void *arg) | |||
631 | break; | 636 | break; |
632 | } | 637 | } |
633 | default: | 638 | default: |
634 | tuner_dbg("Unimplemented IOCTL 0x%08x called to tuner.\n", cmd); | 639 | tuner_dbg("Unimplemented IOCTL 0x%08x(dir=%d,tp=0x%02x,nr=%d,sz=%d)\n", |
640 | cmd, _IOC_DIR(cmd), _IOC_TYPE(cmd), | ||
641 | _IOC_NR(cmd), _IOC_SIZE(cmd)); | ||
635 | break; | 642 | break; |
636 | } | 643 | } |
637 | 644 | ||
diff --git a/drivers/mtd/chips/Kconfig b/drivers/mtd/chips/Kconfig index b5dc59389bb3..df95d2158b16 100644 --- a/drivers/mtd/chips/Kconfig +++ b/drivers/mtd/chips/Kconfig | |||
@@ -300,7 +300,7 @@ config MTD_JEDEC | |||
300 | 300 | ||
301 | config MTD_XIP | 301 | config MTD_XIP |
302 | bool "XIP aware MTD support" | 302 | bool "XIP aware MTD support" |
303 | depends on !SMP && (MTD_CFI_INTELEXT || MTD_CFI_AMDSTD) && EXPERIMENTAL | 303 | depends on !SMP && (MTD_CFI_INTELEXT || MTD_CFI_AMDSTD) && EXPERIMENTAL && ARM |
304 | default y if XIP_KERNEL | 304 | default y if XIP_KERNEL |
305 | help | 305 | help |
306 | This allows MTD support to work with flash memory which is also | 306 | This allows MTD support to work with flash memory which is also |
diff --git a/drivers/mtd/chips/cfi_cmdset_0020.c b/drivers/mtd/chips/cfi_cmdset_0020.c index 8c24e18db3b4..c894f8801578 100644 --- a/drivers/mtd/chips/cfi_cmdset_0020.c +++ b/drivers/mtd/chips/cfi_cmdset_0020.c | |||
@@ -4,7 +4,7 @@ | |||
4 | * | 4 | * |
5 | * (C) 2000 Red Hat. GPL'd | 5 | * (C) 2000 Red Hat. GPL'd |
6 | * | 6 | * |
7 | * $Id: cfi_cmdset_0020.c,v 1.17 2004/11/20 12:49:04 dwmw2 Exp $ | 7 | * $Id: cfi_cmdset_0020.c,v 1.19 2005/07/13 15:52:45 dwmw2 Exp $ |
8 | * | 8 | * |
9 | * 10/10/2000 Nicolas Pitre <nico@cam.org> | 9 | * 10/10/2000 Nicolas Pitre <nico@cam.org> |
10 | * - completely revamped method functions so they are aware and | 10 | * - completely revamped method functions so they are aware and |
@@ -16,6 +16,8 @@ | |||
16 | * - modified Intel Command Set 0x0001 to support ST Advanced Architecture | 16 | * - modified Intel Command Set 0x0001 to support ST Advanced Architecture |
17 | * (command set 0x0020) | 17 | * (command set 0x0020) |
18 | * - added a writev function | 18 | * - added a writev function |
19 | * 07/13/2005 Joern Engel <joern@wh.fh-wedel.de> | ||
20 | * - Plugged memory leak in cfi_staa_writev(). | ||
19 | */ | 21 | */ |
20 | 22 | ||
21 | #include <linux/version.h> | 23 | #include <linux/version.h> |
@@ -719,6 +721,7 @@ cfi_staa_writev(struct mtd_info *mtd, const struct kvec *vecs, | |||
719 | write_error: | 721 | write_error: |
720 | if (retlen) | 722 | if (retlen) |
721 | *retlen = totlen; | 723 | *retlen = totlen; |
724 | kfree(buffer); | ||
722 | return ret; | 725 | return ret; |
723 | } | 726 | } |
724 | 727 | ||
diff --git a/drivers/mtd/nand/nand_base.c b/drivers/mtd/nand/nand_base.c index 1bd71a598c79..eee5115658c8 100644 --- a/drivers/mtd/nand/nand_base.c +++ b/drivers/mtd/nand/nand_base.c | |||
@@ -59,7 +59,7 @@ | |||
59 | * The AG-AND chips have nice features for speed improvement, | 59 | * The AG-AND chips have nice features for speed improvement, |
60 | * which are not supported yet. Read / program 4 pages in one go. | 60 | * which are not supported yet. Read / program 4 pages in one go. |
61 | * | 61 | * |
62 | * $Id: nand_base.c,v 1.146 2005/06/17 15:02:06 gleixner Exp $ | 62 | * $Id: nand_base.c,v 1.147 2005/07/15 07:18:06 gleixner Exp $ |
63 | * | 63 | * |
64 | * This program is free software; you can redistribute it and/or modify | 64 | * This program is free software; you can redistribute it and/or modify |
65 | * it under the terms of the GNU General Public License version 2 as | 65 | * it under the terms of the GNU General Public License version 2 as |
@@ -1409,16 +1409,6 @@ static int nand_read_oob (struct mtd_info *mtd, loff_t from, size_t len, size_t | |||
1409 | thislen = min_t(int, thislen, len); | 1409 | thislen = min_t(int, thislen, len); |
1410 | this->read_buf(mtd, &buf[i], thislen); | 1410 | this->read_buf(mtd, &buf[i], thislen); |
1411 | i += thislen; | 1411 | i += thislen; |
1412 | |||
1413 | /* Apply delay or wait for ready/busy pin | ||
1414 | * Do this before the AUTOINCR check, so no problems | ||
1415 | * arise if a chip which does auto increment | ||
1416 | * is marked as NOAUTOINCR by the board driver. | ||
1417 | */ | ||
1418 | if (!this->dev_ready) | ||
1419 | udelay (this->chip_delay); | ||
1420 | else | ||
1421 | nand_wait_ready(mtd); | ||
1422 | 1412 | ||
1423 | /* Read more ? */ | 1413 | /* Read more ? */ |
1424 | if (i < len) { | 1414 | if (i < len) { |
@@ -1432,6 +1422,16 @@ static int nand_read_oob (struct mtd_info *mtd, loff_t from, size_t len, size_t | |||
1432 | this->select_chip(mtd, chipnr); | 1422 | this->select_chip(mtd, chipnr); |
1433 | } | 1423 | } |
1434 | 1424 | ||
1425 | /* Apply delay or wait for ready/busy pin | ||
1426 | * Do this before the AUTOINCR check, so no problems | ||
1427 | * arise if a chip which does auto increment | ||
1428 | * is marked as NOAUTOINCR by the board driver. | ||
1429 | */ | ||
1430 | if (!this->dev_ready) | ||
1431 | udelay (this->chip_delay); | ||
1432 | else | ||
1433 | nand_wait_ready(mtd); | ||
1434 | |||
1435 | /* Check, if the chip supports auto page increment | 1435 | /* Check, if the chip supports auto page increment |
1436 | * or if we have hit a block boundary. | 1436 | * or if we have hit a block boundary. |
1437 | */ | 1437 | */ |
diff --git a/drivers/mtd/nand/nand_bbt.c b/drivers/mtd/nand/nand_bbt.c index 5ac2d2962220..7535ef53685e 100644 --- a/drivers/mtd/nand/nand_bbt.c +++ b/drivers/mtd/nand/nand_bbt.c | |||
@@ -6,7 +6,7 @@ | |||
6 | * | 6 | * |
7 | * Copyright (C) 2004 Thomas Gleixner (tglx@linutronix.de) | 7 | * Copyright (C) 2004 Thomas Gleixner (tglx@linutronix.de) |
8 | * | 8 | * |
9 | * $Id: nand_bbt.c,v 1.33 2005/06/14 15:47:56 gleixner Exp $ | 9 | * $Id: nand_bbt.c,v 1.35 2005/07/15 13:53:47 gleixner Exp $ |
10 | * | 10 | * |
11 | * This program is free software; you can redistribute it and/or modify | 11 | * This program is free software; you can redistribute it and/or modify |
12 | * it under the terms of the GNU General Public License version 2 as | 12 | * it under the terms of the GNU General Public License version 2 as |
@@ -109,24 +109,21 @@ static int check_pattern (uint8_t *buf, int len, int paglen, struct nand_bbt_des | |||
109 | /** | 109 | /** |
110 | * check_short_pattern - [GENERIC] check if a pattern is in the buffer | 110 | * check_short_pattern - [GENERIC] check if a pattern is in the buffer |
111 | * @buf: the buffer to search | 111 | * @buf: the buffer to search |
112 | * @len: the length of buffer to search | ||
113 | * @paglen: the pagelength | ||
114 | * @td: search pattern descriptor | 112 | * @td: search pattern descriptor |
115 | * | 113 | * |
116 | * Check for a pattern at the given place. Used to search bad block | 114 | * Check for a pattern at the given place. Used to search bad block |
117 | * tables and good / bad block identifiers. Same as check_pattern, but | 115 | * tables and good / bad block identifiers. Same as check_pattern, but |
118 | * no optional empty check and the pattern is expected to start | 116 | * no optional empty check |
119 | * at offset 0. | ||
120 | * | 117 | * |
121 | */ | 118 | */ |
122 | static int check_short_pattern (uint8_t *buf, int len, int paglen, struct nand_bbt_descr *td) | 119 | static int check_short_pattern (uint8_t *buf, struct nand_bbt_descr *td) |
123 | { | 120 | { |
124 | int i; | 121 | int i; |
125 | uint8_t *p = buf; | 122 | uint8_t *p = buf; |
126 | 123 | ||
127 | /* Compare the pattern */ | 124 | /* Compare the pattern */ |
128 | for (i = 0; i < td->len; i++) { | 125 | for (i = 0; i < td->len; i++) { |
129 | if (p[i] != td->pattern[i]) | 126 | if (p[td->offs + i] != td->pattern[i]) |
130 | return -1; | 127 | return -1; |
131 | } | 128 | } |
132 | return 0; | 129 | return 0; |
@@ -337,13 +334,14 @@ static int create_bbt (struct mtd_info *mtd, uint8_t *buf, struct nand_bbt_descr | |||
337 | if (!(bd->options & NAND_BBT_SCANEMPTY)) { | 334 | if (!(bd->options & NAND_BBT_SCANEMPTY)) { |
338 | size_t retlen; | 335 | size_t retlen; |
339 | 336 | ||
340 | /* No need to read pages fully, just read required OOB bytes */ | 337 | /* Read the full oob until read_oob is fixed to |
341 | ret = mtd->read_oob(mtd, from + j * mtd->oobblock + bd->offs, | 338 | * handle single byte reads for 16 bit buswidth */ |
342 | readlen, &retlen, &buf[0]); | 339 | ret = mtd->read_oob(mtd, from + j * mtd->oobblock, |
340 | mtd->oobsize, &retlen, buf); | ||
343 | if (ret) | 341 | if (ret) |
344 | return ret; | 342 | return ret; |
345 | 343 | ||
346 | if (check_short_pattern (&buf[j * scanlen], scanlen, mtd->oobblock, bd)) { | 344 | if (check_short_pattern (buf, bd)) { |
347 | this->bbt[i >> 3] |= 0x03 << (i & 0x6); | 345 | this->bbt[i >> 3] |= 0x03 << (i & 0x6); |
348 | printk (KERN_WARNING "Bad eraseblock %d at 0x%08x\n", | 346 | printk (KERN_WARNING "Bad eraseblock %d at 0x%08x\n", |
349 | i >> 1, (unsigned int) from); | 347 | i >> 1, (unsigned int) from); |
diff --git a/drivers/serial/crisv10.c b/drivers/serial/crisv10.c index 3da5494953af..23b8871e74cc 100644 --- a/drivers/serial/crisv10.c +++ b/drivers/serial/crisv10.c | |||
@@ -426,8 +426,6 @@ | |||
426 | static char *serial_version = "$Revision: 1.25 $"; | 426 | static char *serial_version = "$Revision: 1.25 $"; |
427 | 427 | ||
428 | #include <linux/config.h> | 428 | #include <linux/config.h> |
429 | #include <linux/version.h> | ||
430 | |||
431 | #include <linux/types.h> | 429 | #include <linux/types.h> |
432 | #include <linux/errno.h> | 430 | #include <linux/errno.h> |
433 | #include <linux/signal.h> | 431 | #include <linux/signal.h> |
diff --git a/drivers/serial/icom.c b/drivers/serial/icom.c index 546a0bc77e1e..c112b32764e8 100644 --- a/drivers/serial/icom.c +++ b/drivers/serial/icom.c | |||
@@ -25,7 +25,6 @@ | |||
25 | #define SERIAL_DO_RESTART | 25 | #define SERIAL_DO_RESTART |
26 | #include <linux/module.h> | 26 | #include <linux/module.h> |
27 | #include <linux/config.h> | 27 | #include <linux/config.h> |
28 | #include <linux/version.h> | ||
29 | #include <linux/kernel.h> | 28 | #include <linux/kernel.h> |
30 | #include <linux/errno.h> | 29 | #include <linux/errno.h> |
31 | #include <linux/signal.h> | 30 | #include <linux/signal.h> |
diff --git a/drivers/serial/jsm/jsm.h b/drivers/serial/jsm/jsm.h index 777829fa3300..5bf3c45521f4 100644 --- a/drivers/serial/jsm/jsm.h +++ b/drivers/serial/jsm/jsm.h | |||
@@ -28,7 +28,6 @@ | |||
28 | #define __JSM_DRIVER_H | 28 | #define __JSM_DRIVER_H |
29 | 29 | ||
30 | #include <linux/kernel.h> | 30 | #include <linux/kernel.h> |
31 | #include <linux/version.h> | ||
32 | #include <linux/types.h> /* To pick up the varions Linux types */ | 31 | #include <linux/types.h> /* To pick up the varions Linux types */ |
33 | #include <linux/tty.h> | 32 | #include <linux/tty.h> |
34 | #include <linux/serial_core.h> | 33 | #include <linux/serial_core.h> |
diff --git a/drivers/usb/serial/option.c b/drivers/usb/serial/option.c index b722175f108f..e9256408757f 100644 --- a/drivers/usb/serial/option.c +++ b/drivers/usb/serial/option.c | |||
@@ -12,14 +12,25 @@ | |||
12 | History: | 12 | History: |
13 | 13 | ||
14 | 2005-05-19 v0.1 Initial version, based on incomplete docs | 14 | 2005-05-19 v0.1 Initial version, based on incomplete docs |
15 | and analysis of misbehavior of the standard driver | 15 | and analysis of misbehavior with the standard driver |
16 | 2005-05-20 v0.2 Extended the input buffer to avoid losing | 16 | 2005-05-20 v0.2 Extended the input buffer to avoid losing |
17 | random 64-byte chunks of data | 17 | random 64-byte chunks of data |
18 | 2005-05-21 v0.3 implemented chars_in_buffer() | 18 | 2005-05-21 v0.3 implemented chars_in_buffer() |
19 | turned on low_latency | 19 | turned on low_latency |
20 | simplified the code somewhat | 20 | simplified the code somewhat |
21 | 2005-05-24 v0.4 option_write() sometimes deadlocked under heavy load | ||
22 | removed some dead code | ||
23 | added sponsor notice | ||
24 | coding style clean-up | ||
25 | 2005-06-20 v0.4.1 add missing braces :-/ | ||
26 | killed end-of-line whitespace | ||
27 | 2005-07-15 v0.4.2 rename WLAN product to FUSION, add FUSION2 | ||
28 | |||
29 | Work sponsored by: Sigos GmbH, Germany <info@sigos.de> | ||
30 | |||
21 | */ | 31 | */ |
22 | #define DRIVER_VERSION "v0.3" | 32 | |
33 | #define DRIVER_VERSION "v0.4" | ||
23 | #define DRIVER_AUTHOR "Matthias Urlichs <smurf@smurf.noris.de>" | 34 | #define DRIVER_AUTHOR "Matthias Urlichs <smurf@smurf.noris.de>" |
24 | #define DRIVER_DESC "Option Card (PC-Card to) USB to Serial Driver" | 35 | #define DRIVER_DESC "Option Card (PC-Card to) USB to Serial Driver" |
25 | 36 | ||
@@ -44,7 +55,6 @@ static int option_write_room (struct usb_serial_port *port); | |||
44 | 55 | ||
45 | static void option_instat_callback(struct urb *urb, struct pt_regs *regs); | 56 | static void option_instat_callback(struct urb *urb, struct pt_regs *regs); |
46 | 57 | ||
47 | |||
48 | static int option_write (struct usb_serial_port *port, | 58 | static int option_write (struct usb_serial_port *port, |
49 | const unsigned char *buf, int count); | 59 | const unsigned char *buf, int count); |
50 | 60 | ||
@@ -60,14 +70,17 @@ static int option_tiocmset (struct usb_serial_port *port, struct file *file, | |||
60 | static int option_send_setup (struct usb_serial_port *port); | 70 | static int option_send_setup (struct usb_serial_port *port); |
61 | 71 | ||
62 | /* Vendor and product IDs */ | 72 | /* Vendor and product IDs */ |
63 | #define OPTION_VENDOR_ID 0x0AF0 | 73 | #define OPTION_VENDOR_ID 0x0AF0 |
74 | |||
75 | #define OPTION_PRODUCT_OLD 0x5000 | ||
76 | #define OPTION_PRODUCT_FUSION 0x6000 | ||
77 | #define OPTION_PRODUCT_FUSION2 0x6300 | ||
64 | 78 | ||
65 | #define OPTION_PRODUCT_OLD 0x5000 | ||
66 | #define OPTION_PRODUCT_WLAN 0x6000 | ||
67 | 79 | ||
68 | static struct usb_device_id option_ids[] = { | 80 | static struct usb_device_id option_ids[] = { |
69 | { USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_OLD) }, | 81 | { USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_OLD) }, |
70 | { USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_WLAN) }, | 82 | { USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_FUSION) }, |
83 | { USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_FUSION2) }, | ||
71 | { } /* Terminating entry */ | 84 | { } /* Terminating entry */ |
72 | }; | 85 | }; |
73 | 86 | ||
@@ -85,58 +98,62 @@ static struct usb_driver option_driver = { | |||
85 | * recognizes separately, thus num_port=1. | 98 | * recognizes separately, thus num_port=1. |
86 | */ | 99 | */ |
87 | static struct usb_serial_device_type option_3port_device = { | 100 | static struct usb_serial_device_type option_3port_device = { |
88 | .owner = THIS_MODULE, | 101 | .owner = THIS_MODULE, |
89 | .name = "Option 3-port card", | 102 | .name = "Option 3G data card", |
90 | .short_name = "option", | 103 | .short_name = "option", |
91 | .id_table = option_ids, | 104 | .id_table = option_ids, |
92 | .num_interrupt_in = NUM_DONT_CARE, | 105 | .num_interrupt_in = NUM_DONT_CARE, |
93 | .num_bulk_in = NUM_DONT_CARE, | 106 | .num_bulk_in = NUM_DONT_CARE, |
94 | .num_bulk_out = NUM_DONT_CARE, | 107 | .num_bulk_out = NUM_DONT_CARE, |
95 | .num_ports = 1, /* 3 */ | 108 | .num_ports = 1, /* 3, but the card reports its ports separately */ |
96 | .open = option_open, | 109 | .open = option_open, |
97 | .close = option_close, | 110 | .close = option_close, |
98 | .write = option_write, | 111 | .write = option_write, |
99 | .write_room = option_write_room, | 112 | .write_room = option_write_room, |
100 | .chars_in_buffer = option_chars_in_buffer, | 113 | .chars_in_buffer = option_chars_in_buffer, |
101 | .throttle = option_rx_throttle, | 114 | .throttle = option_rx_throttle, |
102 | .unthrottle = option_rx_unthrottle, | 115 | .unthrottle = option_rx_unthrottle, |
103 | .ioctl = option_ioctl, | 116 | .ioctl = option_ioctl, |
104 | .set_termios = option_set_termios, | 117 | .set_termios = option_set_termios, |
105 | .break_ctl = option_break_ctl, | 118 | .break_ctl = option_break_ctl, |
106 | .tiocmget = option_tiocmget, | 119 | .tiocmget = option_tiocmget, |
107 | .tiocmset = option_tiocmset, | 120 | .tiocmset = option_tiocmset, |
108 | .attach = option_startup, | 121 | .attach = option_startup, |
109 | .shutdown = option_shutdown, | 122 | .shutdown = option_shutdown, |
110 | .read_int_callback = option_instat_callback, | 123 | .read_int_callback = option_instat_callback, |
111 | }; | 124 | }; |
112 | 125 | ||
126 | #ifdef CONFIG_USB_DEBUG | ||
113 | static int debug; | 127 | static int debug; |
128 | #else | ||
129 | #define debug 0 | ||
130 | #endif | ||
131 | |||
114 | 132 | ||
115 | /* per port private data */ | 133 | /* per port private data */ |
116 | 134 | ||
117 | #define N_IN_URB 4 | 135 | #define N_IN_URB 4 |
118 | #define N_OUT_URB 1 | 136 | #define N_OUT_URB 1 |
119 | #define IN_BUFLEN 1024 | 137 | #define IN_BUFLEN 1024 |
120 | #define OUT_BUFLEN 1024 | 138 | #define OUT_BUFLEN 128 |
121 | 139 | ||
122 | struct option_port_private { | 140 | struct option_port_private { |
123 | /* Input endpoints and buffer for this port */ | 141 | /* Input endpoints and buffer for this port */ |
124 | struct urb *in_urbs[N_IN_URB]; | 142 | struct urb *in_urbs[N_IN_URB]; |
125 | char in_buffer[N_IN_URB][IN_BUFLEN]; | 143 | char in_buffer[N_IN_URB][IN_BUFLEN]; |
126 | /* Output endpoints and buffer for this port */ | 144 | /* Output endpoints and buffer for this port */ |
127 | struct urb *out_urbs[N_OUT_URB]; | 145 | struct urb *out_urbs[N_OUT_URB]; |
128 | char out_buffer[N_OUT_URB][OUT_BUFLEN]; | 146 | char out_buffer[N_OUT_URB][OUT_BUFLEN]; |
129 | 147 | ||
130 | /* Settings for the port */ | 148 | /* Settings for the port */ |
131 | int rts_state; /* Handshaking pins (outputs) */ | 149 | int rts_state; /* Handshaking pins (outputs) */ |
132 | int dtr_state; | 150 | int dtr_state; |
133 | int cts_state; /* Handshaking pins (inputs) */ | 151 | int cts_state; /* Handshaking pins (inputs) */ |
134 | int dsr_state; | 152 | int dsr_state; |
135 | int dcd_state; | 153 | int dcd_state; |
136 | int ri_state; | 154 | int ri_state; |
137 | // int break_on; | 155 | |
138 | 156 | unsigned long tx_start_time[N_OUT_URB]; | |
139 | unsigned long tx_start_time[N_OUT_URB]; | ||
140 | }; | 157 | }; |
141 | 158 | ||
142 | 159 | ||
@@ -190,13 +207,13 @@ static void | |||
190 | option_break_ctl (struct usb_serial_port *port, int break_state) | 207 | option_break_ctl (struct usb_serial_port *port, int break_state) |
191 | { | 208 | { |
192 | /* Unfortunately, I don't know how to send a break */ | 209 | /* Unfortunately, I don't know how to send a break */ |
193 | dbg("%s", __FUNCTION__); | 210 | dbg("%s", __FUNCTION__); |
194 | } | 211 | } |
195 | 212 | ||
196 | 213 | ||
197 | static void | 214 | static void |
198 | option_set_termios (struct usb_serial_port *port, | 215 | option_set_termios (struct usb_serial_port *port, |
199 | struct termios *old_termios) | 216 | struct termios *old_termios) |
200 | { | 217 | { |
201 | dbg("%s", __FUNCTION__); | 218 | dbg("%s", __FUNCTION__); |
202 | 219 | ||
@@ -204,10 +221,10 @@ option_set_termios (struct usb_serial_port *port, | |||
204 | } | 221 | } |
205 | 222 | ||
206 | static int | 223 | static int |
207 | option_tiocmget(struct usb_serial_port *port, struct file *file) | 224 | option_tiocmget (struct usb_serial_port *port, struct file *file) |
208 | { | 225 | { |
209 | unsigned int value; | 226 | unsigned int value; |
210 | struct option_port_private *portdata; | 227 | struct option_port_private *portdata; |
211 | 228 | ||
212 | portdata = usb_get_serial_port_data(port); | 229 | portdata = usb_get_serial_port_data(port); |
213 | 230 | ||
@@ -225,7 +242,7 @@ static int | |||
225 | option_tiocmset (struct usb_serial_port *port, struct file *file, | 242 | option_tiocmset (struct usb_serial_port *port, struct file *file, |
226 | unsigned int set, unsigned int clear) | 243 | unsigned int set, unsigned int clear) |
227 | { | 244 | { |
228 | struct option_port_private *portdata; | 245 | struct option_port_private *portdata; |
229 | 246 | ||
230 | portdata = usb_get_serial_port_data(port); | 247 | portdata = usb_get_serial_port_data(port); |
231 | 248 | ||
@@ -250,71 +267,50 @@ option_ioctl (struct usb_serial_port *port, struct file *file, | |||
250 | 267 | ||
251 | /* Write */ | 268 | /* Write */ |
252 | static int | 269 | static int |
253 | option_write(struct usb_serial_port *port, | 270 | option_write (struct usb_serial_port *port, |
254 | const unsigned char *buf, int count) | 271 | const unsigned char *buf, int count) |
255 | { | 272 | { |
256 | struct option_port_private *portdata; | 273 | struct option_port_private *portdata; |
257 | int i; | 274 | int i; |
258 | int left, todo; | 275 | int left, todo; |
259 | struct urb *this_urb = NULL; /* spurious */ | 276 | struct urb *this_urb = NULL; /* spurious */ |
260 | int err; | 277 | int err; |
261 | 278 | ||
262 | portdata = usb_get_serial_port_data(port); | 279 | portdata = usb_get_serial_port_data(port); |
263 | 280 | ||
264 | dbg("%s: write (%d chars)", __FUNCTION__, count); | 281 | dbg("%s: write (%d chars)", __FUNCTION__, count); |
265 | 282 | ||
266 | #if 0 | ||
267 | spin_lock(&port->lock); | ||
268 | if (port->write_urb_busy) { | ||
269 | spin_unlock(&port->lock); | ||
270 | dbg("%s: already writing", __FUNCTION__); | ||
271 | return 0; | ||
272 | } | ||
273 | port->write_urb_busy = 1; | ||
274 | spin_unlock(&port->lock); | ||
275 | #endif | ||
276 | |||
277 | i = 0; | 283 | i = 0; |
278 | left = count; | 284 | left = count; |
279 | while (left>0) { | 285 | for (i=0; left > 0 && i < N_OUT_URB; i++) { |
280 | todo = left; | 286 | todo = left; |
281 | if (todo > OUT_BUFLEN) | 287 | if (todo > OUT_BUFLEN) |
282 | todo = OUT_BUFLEN; | 288 | todo = OUT_BUFLEN; |
283 | 289 | ||
284 | for (;i < N_OUT_URB; i++) { | 290 | this_urb = portdata->out_urbs[i]; |
285 | /* Check we have a valid urb/endpoint before we use it... */ | 291 | if (this_urb->status == -EINPROGRESS) { |
286 | this_urb = portdata->out_urbs[i]; | ||
287 | if (this_urb->status != -EINPROGRESS) | ||
288 | break; | ||
289 | if (this_urb->transfer_flags & URB_ASYNC_UNLINK) | 292 | if (this_urb->transfer_flags & URB_ASYNC_UNLINK) |
290 | continue; | 293 | continue; |
291 | if (time_before(jiffies, portdata->tx_start_time[i] + 10 * HZ)) | 294 | if (time_before(jiffies, portdata->tx_start_time[i] + 10 * HZ)) |
292 | continue; | 295 | continue; |
293 | this_urb->transfer_flags |= URB_ASYNC_UNLINK; | 296 | this_urb->transfer_flags |= URB_ASYNC_UNLINK; |
294 | usb_unlink_urb(this_urb); | 297 | usb_unlink_urb(this_urb); |
298 | continue; | ||
295 | } | 299 | } |
296 | 300 | if (this_urb->status != 0) | |
297 | if (i == N_OUT_URB) { | 301 | dbg("usb_write %p failed (err=%d)", this_urb, this_urb->status); |
298 | /* no bulk out free! */ | ||
299 | dbg("%s: no output urb -- left %d", __FUNCTION__,count-left); | ||
300 | #if 0 | ||
301 | port->write_urb_busy = 0; | ||
302 | #endif | ||
303 | return count-left; | ||
304 | } | ||
305 | 302 | ||
306 | dbg("%s: endpoint %d buf %d", __FUNCTION__, usb_pipeendpoint(this_urb->pipe), i); | 303 | dbg("%s: endpoint %d buf %d", __FUNCTION__, usb_pipeendpoint(this_urb->pipe), i); |
307 | 304 | ||
305 | /* send the data */ | ||
308 | memcpy (this_urb->transfer_buffer, buf, todo); | 306 | memcpy (this_urb->transfer_buffer, buf, todo); |
309 | |||
310 | /* send the data out the bulk port */ | ||
311 | this_urb->transfer_buffer_length = todo; | 307 | this_urb->transfer_buffer_length = todo; |
312 | 308 | ||
313 | this_urb->transfer_flags &= ~URB_ASYNC_UNLINK; | 309 | this_urb->transfer_flags &= ~URB_ASYNC_UNLINK; |
314 | this_urb->dev = port->serial->dev; | 310 | this_urb->dev = port->serial->dev; |
315 | err = usb_submit_urb(this_urb, GFP_ATOMIC); | 311 | err = usb_submit_urb(this_urb, GFP_ATOMIC); |
316 | if (err) { | 312 | if (err) { |
317 | dbg("usb_submit_urb %p (write bulk) failed (%d,, has %d)", this_urb, err, this_urb->status); | 313 | dbg("usb_submit_urb %p (write bulk) failed (%d, has %d)", this_urb, err, this_urb->status); |
318 | continue; | 314 | continue; |
319 | } | 315 | } |
320 | portdata->tx_start_time[i] = jiffies; | 316 | portdata->tx_start_time[i] = jiffies; |
@@ -323,9 +319,6 @@ option_write(struct usb_serial_port *port, | |||
323 | } | 319 | } |
324 | 320 | ||
325 | count -= left; | 321 | count -= left; |
326 | #if 0 | ||
327 | port->write_urb_busy = 0; | ||
328 | #endif | ||
329 | dbg("%s: wrote (did %d)", __FUNCTION__, count); | 322 | dbg("%s: wrote (did %d)", __FUNCTION__, count); |
330 | return count; | 323 | return count; |
331 | } | 324 | } |
@@ -333,7 +326,7 @@ option_write(struct usb_serial_port *port, | |||
333 | static void | 326 | static void |
334 | option_indat_callback (struct urb *urb, struct pt_regs *regs) | 327 | option_indat_callback (struct urb *urb, struct pt_regs *regs) |
335 | { | 328 | { |
336 | int i, err; | 329 | int i, err; |
337 | int endpoint; | 330 | int endpoint; |
338 | struct usb_serial_port *port; | 331 | struct usb_serial_port *port; |
339 | struct tty_struct *tty; | 332 | struct tty_struct *tty; |
@@ -444,10 +437,11 @@ option_write_room (struct usb_serial_port *port) | |||
444 | 437 | ||
445 | portdata = usb_get_serial_port_data(port); | 438 | portdata = usb_get_serial_port_data(port); |
446 | 439 | ||
447 | for (i=0; i < N_OUT_URB; i++) | 440 | for (i=0; i < N_OUT_URB; i++) { |
448 | this_urb = portdata->out_urbs[i]; | 441 | this_urb = portdata->out_urbs[i]; |
449 | if (this_urb && this_urb->status != -EINPROGRESS) | 442 | if (this_urb && this_urb->status != -EINPROGRESS) |
450 | data_len += OUT_BUFLEN; | 443 | data_len += OUT_BUFLEN; |
444 | } | ||
451 | 445 | ||
452 | dbg("%s: %d", __FUNCTION__, data_len); | 446 | dbg("%s: %d", __FUNCTION__, data_len); |
453 | return data_len; | 447 | return data_len; |
@@ -464,11 +458,11 @@ option_chars_in_buffer (struct usb_serial_port *port) | |||
464 | 458 | ||
465 | portdata = usb_get_serial_port_data(port); | 459 | portdata = usb_get_serial_port_data(port); |
466 | 460 | ||
467 | for (i=0; i < N_OUT_URB; i++) | 461 | for (i=0; i < N_OUT_URB; i++) { |
468 | this_urb = portdata->out_urbs[i]; | 462 | this_urb = portdata->out_urbs[i]; |
469 | if (this_urb && this_urb->status == -EINPROGRESS) | 463 | if (this_urb && this_urb->status == -EINPROGRESS) |
470 | data_len += this_urb->transfer_buffer_length; | 464 | data_len += this_urb->transfer_buffer_length; |
471 | 465 | } | |
472 | dbg("%s: %d", __FUNCTION__, data_len); | 466 | dbg("%s: %d", __FUNCTION__, data_len); |
473 | return data_len; | 467 | return data_len; |
474 | } | 468 | } |
@@ -477,10 +471,10 @@ option_chars_in_buffer (struct usb_serial_port *port) | |||
477 | static int | 471 | static int |
478 | option_open (struct usb_serial_port *port, struct file *filp) | 472 | option_open (struct usb_serial_port *port, struct file *filp) |
479 | { | 473 | { |
480 | struct option_port_private *portdata; | 474 | struct option_port_private *portdata; |
481 | struct usb_serial *serial = port->serial; | 475 | struct usb_serial *serial = port->serial; |
482 | int i, err; | 476 | int i, err; |
483 | struct urb *urb; | 477 | struct urb *urb; |
484 | 478 | ||
485 | portdata = usb_get_serial_port_data(port); | 479 | portdata = usb_get_serial_port_data(port); |
486 | 480 | ||
@@ -528,7 +522,7 @@ option_open (struct usb_serial_port *port, struct file *filp) | |||
528 | } | 522 | } |
529 | 523 | ||
530 | static inline void | 524 | static inline void |
531 | stop_urb(struct urb *urb) | 525 | stop_urb (struct urb *urb) |
532 | { | 526 | { |
533 | if (urb && urb->status == -EINPROGRESS) { | 527 | if (urb && urb->status == -EINPROGRESS) { |
534 | urb->transfer_flags &= ~URB_ASYNC_UNLINK; | 528 | urb->transfer_flags &= ~URB_ASYNC_UNLINK; |
@@ -537,11 +531,11 @@ stop_urb(struct urb *urb) | |||
537 | } | 531 | } |
538 | 532 | ||
539 | static void | 533 | static void |
540 | option_close(struct usb_serial_port *port, struct file *filp) | 534 | option_close (struct usb_serial_port *port, struct file *filp) |
541 | { | 535 | { |
542 | int i; | 536 | int i; |
543 | struct usb_serial *serial = port->serial; | 537 | struct usb_serial *serial = port->serial; |
544 | struct option_port_private *portdata; | 538 | struct option_port_private *portdata; |
545 | 539 | ||
546 | dbg("%s", __FUNCTION__); | 540 | dbg("%s", __FUNCTION__); |
547 | portdata = usb_get_serial_port_data(port); | 541 | portdata = usb_get_serial_port_data(port); |
@@ -589,11 +583,11 @@ option_setup_urb (struct usb_serial *serial, int endpoint, | |||
589 | 583 | ||
590 | /* Setup urbs */ | 584 | /* Setup urbs */ |
591 | static void | 585 | static void |
592 | option_setup_urbs(struct usb_serial *serial) | 586 | option_setup_urbs (struct usb_serial *serial) |
593 | { | 587 | { |
594 | int j; | 588 | int j; |
595 | struct usb_serial_port *port; | 589 | struct usb_serial_port *port; |
596 | struct option_port_private *portdata; | 590 | struct option_port_private *portdata; |
597 | 591 | ||
598 | dbg("%s", __FUNCTION__); | 592 | dbg("%s", __FUNCTION__); |
599 | 593 | ||
@@ -617,7 +611,7 @@ option_setup_urbs(struct usb_serial *serial) | |||
617 | 611 | ||
618 | 612 | ||
619 | static int | 613 | static int |
620 | option_send_setup(struct usb_serial_port *port) | 614 | option_send_setup (struct usb_serial_port *port) |
621 | { | 615 | { |
622 | struct usb_serial *serial = port->serial; | 616 | struct usb_serial *serial = port->serial; |
623 | struct option_port_private *portdata; | 617 | struct option_port_private *portdata; |
@@ -644,9 +638,9 @@ option_send_setup(struct usb_serial_port *port) | |||
644 | static int | 638 | static int |
645 | option_startup (struct usb_serial *serial) | 639 | option_startup (struct usb_serial *serial) |
646 | { | 640 | { |
647 | int i, err; | 641 | int i, err; |
648 | struct usb_serial_port *port; | 642 | struct usb_serial_port *port; |
649 | struct option_port_private *portdata; | 643 | struct option_port_private *portdata; |
650 | 644 | ||
651 | dbg("%s", __FUNCTION__); | 645 | dbg("%s", __FUNCTION__); |
652 | 646 | ||
@@ -677,9 +671,9 @@ option_startup (struct usb_serial *serial) | |||
677 | static void | 671 | static void |
678 | option_shutdown (struct usb_serial *serial) | 672 | option_shutdown (struct usb_serial *serial) |
679 | { | 673 | { |
680 | int i, j; | 674 | int i, j; |
681 | struct usb_serial_port *port; | 675 | struct usb_serial_port *port; |
682 | struct option_port_private *portdata; | 676 | struct option_port_private *portdata; |
683 | 677 | ||
684 | dbg("%s", __FUNCTION__); | 678 | dbg("%s", __FUNCTION__); |
685 | 679 | ||
@@ -724,6 +718,8 @@ MODULE_DESCRIPTION(DRIVER_DESC); | |||
724 | MODULE_VERSION(DRIVER_VERSION); | 718 | MODULE_VERSION(DRIVER_VERSION); |
725 | MODULE_LICENSE("GPL"); | 719 | MODULE_LICENSE("GPL"); |
726 | 720 | ||
721 | #ifdef CONFIG_USB_DEBUG | ||
727 | module_param(debug, bool, S_IRUGO | S_IWUSR); | 722 | module_param(debug, bool, S_IRUGO | S_IWUSR); |
728 | MODULE_PARM_DESC(debug, "Debug messages"); | 723 | MODULE_PARM_DESC(debug, "Debug messages"); |
724 | #endif | ||
729 | 725 | ||