Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

usb: irda: cleanup on ir-usb module

General cleanup on ir-usb module. Introduced
a common header that could be used also on
usb gadget framework.

Lot's of cleanups and now using macros from the header
file.

Signed-off-by: Felipe Balbi <me@felipebalbi.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>

authored by

Felipe Balbi and committed by
Greg Kroah-Hartman
e0d795e4 b9638011

+412 -211
+261 -211
drivers/usb/serial/ir-usb.c
··· 19 19 * was written by Roman Weissgaerber <weissg@vienna.at>, Dag Brattli 20 20 * <dag@brattli.net>, and Jean Tourrilhes <jt@hpl.hp.com> 21 21 * 22 - * See Documentation/usb/usb-serial.txt for more information on using this driver 22 + * See Documentation/usb/usb-serial.txt for more information on using this 23 + * driver 24 + * 25 + * 2008_Jun_02 Felipe Balbi <me@felipebalbi.com> 26 + * Introduced common header to be used also in USB Gadget Framework. 27 + * Still needs some other style fixes. 23 28 * 24 29 * 2007_Jun_21 Alan Cox <alan@redhat.com> 25 30 * Minimal cleanups for some of the driver problens and tty layer abuse. ··· 64 59 #include <linux/tty_flip.h> 65 60 #include <linux/module.h> 66 61 #include <linux/spinlock.h> 67 - #include <asm/uaccess.h> 62 + #include <linux/uaccess.h> 68 63 #include <linux/usb.h> 69 64 #include <linux/usb/serial.h> 65 + #include <linux/usb/irda.h> 70 66 71 67 /* 72 68 * Version Information ··· 76 70 #define DRIVER_AUTHOR "Greg Kroah-Hartman <greg@kroah.com>" 77 71 #define DRIVER_DESC "USB IR Dongle driver" 78 72 79 - /* USB IrDA class spec information */ 80 - #define USB_CLASS_IRDA 0x02 81 - #define USB_DT_IRDA 0x21 82 - #define IU_REQ_GET_CLASS_DESC 0x06 83 - #define SPEED_2400 0x01 84 - #define SPEED_9600 0x02 85 - #define SPEED_19200 0x03 86 - #define SPEED_38400 0x04 87 - #define SPEED_57600 0x05 88 - #define SPEED_115200 0x06 89 - #define SPEED_576000 0x07 90 - #define SPEED_1152000 0x08 91 - #define SPEED_4000000 0x09 92 - 93 - struct irda_class_desc { 94 - u8 bLength; 95 - u8 bDescriptorType; 96 - u16 bcdSpecRevision; 97 - u8 bmDataSize; 98 - u8 bmWindowSize; 99 - u8 bmMinTurnaroundTime; 100 - u16 wBaudRate; 101 - u8 bmAdditionalBOFs; 102 - u8 bIrdaRateSniff; 103 - u8 bMaxUnicastList; 104 - } __attribute__ ((packed)); 105 - 106 73 static int debug; 107 74 108 75 /* if overridden by the user, then use their value for the size of the read and 109 76 * write urbs */ 110 77 static int buffer_size; 78 + 111 79 /* if overridden by the user, then use the specified number of XBOFs */ 112 80 static int xbof = -1; 113 81 114 - static int ir_startup (struct usb_serial *serial); 115 - static int ir_open (struct usb_serial_port *port, struct file *filep); 116 - static void ir_close (struct usb_serial_port *port, struct file *filep); 117 - static int ir_write (struct usb_serial_port *port, const unsigned char *buf, int count); 118 - static void ir_write_bulk_callback (struct urb *urb); 119 - static void ir_read_bulk_callback (struct urb *urb); 120 - static void ir_set_termios (struct usb_serial_port *port, struct ktermios *old_termios); 82 + static int ir_startup(struct usb_serial *serial); 83 + static int ir_open(struct usb_serial_port *port, struct file *filep); 84 + static void ir_close(struct usb_serial_port *port, struct file *filep); 85 + static int ir_write(struct usb_serial_port *port, 86 + const unsigned char *buf, int count); 87 + static void ir_write_bulk_callback(struct urb *urb); 88 + static void ir_read_bulk_callback(struct urb *urb); 89 + static void ir_set_termios(struct usb_serial_port *port, 90 + struct ktermios *old_termios); 121 91 122 92 /* Not that this lot means you can only have one per system */ 123 - static u8 ir_baud = 0; 124 - static u8 ir_xbof = 0; 125 - static u8 ir_add_bof = 0; 93 + static u8 ir_baud; 94 + static u8 ir_xbof; 95 + static u8 ir_add_bof; 126 96 127 - static struct usb_device_id id_table [] = { 97 + static struct usb_device_id ir_id_table[] = { 128 98 { USB_DEVICE(0x050f, 0x0180) }, /* KC Technology, KC-180 */ 129 99 { USB_DEVICE(0x08e9, 0x0100) }, /* XTNDAccess */ 130 100 { USB_DEVICE(0x09c4, 0x0011) }, /* ACTiSys ACT-IR2000U */ 131 - { USB_INTERFACE_INFO (USB_CLASS_APP_SPEC, USB_CLASS_IRDA, 0) }, 101 + { USB_INTERFACE_INFO(USB_CLASS_APP_SPEC, USB_SUBCLASS_IRDA, 0) }, 132 102 { } /* Terminating entry */ 133 103 }; 134 104 135 - MODULE_DEVICE_TABLE (usb, id_table); 105 + MODULE_DEVICE_TABLE(usb, ir_id_table); 136 106 137 107 static struct usb_driver ir_driver = { 138 - .name = "ir-usb", 139 - .probe = usb_serial_probe, 140 - .disconnect = usb_serial_disconnect, 141 - .id_table = id_table, 142 - .no_dynamic_id = 1, 108 + .name = "ir-usb", 109 + .probe = usb_serial_probe, 110 + .disconnect = usb_serial_disconnect, 111 + .id_table = ir_id_table, 112 + .no_dynamic_id = 1, 143 113 }; 144 - 145 114 146 115 static struct usb_serial_driver ir_device = { 147 - .driver = { 148 - .owner = THIS_MODULE, 149 - .name = "ir-usb", 116 + .driver = { 117 + .owner = THIS_MODULE, 118 + .name = "ir-usb", 150 119 }, 151 - .description = "IR Dongle", 152 - .usb_driver = &ir_driver, 153 - .id_table = id_table, 154 - .num_ports = 1, 155 - .set_termios = ir_set_termios, 156 - .attach = ir_startup, 157 - .open = ir_open, 158 - .close = ir_close, 159 - .write = ir_write, 160 - .write_bulk_callback = ir_write_bulk_callback, 161 - .read_bulk_callback = ir_read_bulk_callback, 120 + .description = "IR Dongle", 121 + .usb_driver = &ir_driver, 122 + .id_table = ir_id_table, 123 + .num_ports = 1, 124 + .set_termios = ir_set_termios, 125 + .attach = ir_startup, 126 + .open = ir_open, 127 + .close = ir_close, 128 + .write = ir_write, 129 + .write_bulk_callback = ir_write_bulk_callback, 130 + .read_bulk_callback = ir_read_bulk_callback, 162 131 }; 163 132 164 - static inline void irda_usb_dump_class_desc(struct irda_class_desc *desc) 133 + static inline void irda_usb_dump_class_desc(struct usb_irda_cs_descriptor *desc) 165 134 { 166 135 dbg("bLength=%x", desc->bLength); 167 136 dbg("bDescriptorType=%x", desc->bDescriptorType); 168 - dbg("bcdSpecRevision=%x", desc->bcdSpecRevision); 137 + dbg("bcdSpecRevision=%x", __le16_to_cpu(desc->bcdSpecRevision)); 169 138 dbg("bmDataSize=%x", desc->bmDataSize); 170 139 dbg("bmWindowSize=%x", desc->bmWindowSize); 171 140 dbg("bmMinTurnaroundTime=%d", desc->bmMinTurnaroundTime); 172 - dbg("wBaudRate=%x", desc->wBaudRate); 141 + dbg("wBaudRate=%x", __le16_to_cpu(desc->wBaudRate)); 173 142 dbg("bmAdditionalBOFs=%x", desc->bmAdditionalBOFs); 174 143 dbg("bIrdaRateSniff=%x", desc->bIrdaRateSniff); 175 144 dbg("bMaxUnicastList=%x", desc->bMaxUnicastList); ··· 162 181 * 163 182 * Based on the same function in drivers/net/irda/irda-usb.c 164 183 */ 165 - static struct irda_class_desc *irda_usb_find_class_desc(struct usb_device *dev, unsigned int ifnum) 184 + static struct usb_irda_cs_descriptor * 185 + irda_usb_find_class_desc(struct usb_device *dev, unsigned int ifnum) 166 186 { 167 - struct irda_class_desc *desc; 187 + struct usb_irda_cs_descriptor *desc; 168 188 int ret; 169 - 170 - desc = kzalloc(sizeof (struct irda_class_desc), GFP_KERNEL); 171 - if (desc == NULL) 189 + 190 + desc = kzalloc(sizeof(*desc), GFP_KERNEL); 191 + if (!desc) 172 192 return NULL; 173 - 174 - ret = usb_control_msg(dev, usb_rcvctrlpipe(dev,0), 175 - IU_REQ_GET_CLASS_DESC, 193 + 194 + ret = usb_control_msg(dev, usb_rcvctrlpipe(dev, 0), 195 + USB_REQ_CS_IRDA_GET_CLASS_DESC, 176 196 USB_DIR_IN | USB_TYPE_CLASS | USB_RECIP_INTERFACE, 177 197 0, ifnum, desc, sizeof(*desc), 1000); 178 - 198 + 179 199 dbg("%s - ret=%d", __func__, ret); 180 200 if (ret < sizeof(*desc)) { 181 201 dbg("%s - class descriptor read %s (%d)", 182 202 __func__, 183 - (ret<0) ? "failed" : "too short", 203 + (ret < 0) ? "failed" : "too short", 184 204 ret); 185 205 goto error; 186 206 } 187 - if (desc->bDescriptorType != USB_DT_IRDA) { 207 + if (desc->bDescriptorType != USB_DT_CS_IRDA) { 188 208 dbg("%s - bad class descriptor type", __func__); 189 209 goto error; 190 210 } 191 - 211 + 192 212 irda_usb_dump_class_desc(desc); 193 213 return desc; 214 + 194 215 error: 195 216 kfree(desc); 196 217 return NULL; ··· 202 219 static u8 ir_xbof_change(u8 xbof) 203 220 { 204 221 u8 result; 222 + 205 223 /* reference irda-usb.c */ 206 - switch(xbof) { 207 - case 48: result = 0x10; break; 208 - case 28: 209 - case 24: result = 0x20; break; 210 - default: 211 - case 12: result = 0x30; break; 212 - case 5: 213 - case 6: result = 0x40; break; 214 - case 3: result = 0x50; break; 215 - case 2: result = 0x60; break; 216 - case 1: result = 0x70; break; 217 - case 0: result = 0x80; break; 224 + switch (xbof) { 225 + case 48: 226 + result = 0x10; 227 + break; 228 + case 28: 229 + case 24: 230 + result = 0x20; 231 + break; 232 + default: 233 + case 12: 234 + result = 0x30; 235 + break; 236 + case 5: 237 + case 6: 238 + result = 0x40; 239 + break; 240 + case 3: 241 + result = 0x50; 242 + break; 243 + case 2: 244 + result = 0x60; 245 + break; 246 + case 1: 247 + result = 0x70; 248 + break; 249 + case 0: 250 + result = 0x80; 251 + break; 218 252 } 253 + 219 254 return(result); 220 255 } 221 256 222 257 223 - static int ir_startup (struct usb_serial *serial) 258 + static int ir_startup(struct usb_serial *serial) 224 259 { 225 - struct irda_class_desc *irda_desc; 260 + struct usb_irda_cs_descriptor *irda_desc; 226 261 227 - irda_desc = irda_usb_find_class_desc (serial->dev, 0); 228 - if (irda_desc == NULL) { 229 - dev_err (&serial->dev->dev, "IRDA class descriptor not found, device not bound\n"); 262 + irda_desc = irda_usb_find_class_desc(serial->dev, 0); 263 + if (!irda_desc) { 264 + dev_err(&serial->dev->dev, 265 + "IRDA class descriptor not found, device not bound\n"); 230 266 return -ENODEV; 231 267 } 232 268 233 - dbg ("%s - Baud rates supported:%s%s%s%s%s%s%s%s%s", 269 + dbg("%s - Baud rates supported:%s%s%s%s%s%s%s%s%s", 234 270 __func__, 235 - (irda_desc->wBaudRate & 0x0001) ? " 2400" : "", 236 - (irda_desc->wBaudRate & 0x0002) ? " 9600" : "", 237 - (irda_desc->wBaudRate & 0x0004) ? " 19200" : "", 238 - (irda_desc->wBaudRate & 0x0008) ? " 38400" : "", 239 - (irda_desc->wBaudRate & 0x0010) ? " 57600" : "", 240 - (irda_desc->wBaudRate & 0x0020) ? " 115200" : "", 241 - (irda_desc->wBaudRate & 0x0040) ? " 576000" : "", 242 - (irda_desc->wBaudRate & 0x0080) ? " 1152000" : "", 243 - (irda_desc->wBaudRate & 0x0100) ? " 4000000" : ""); 271 + (irda_desc->wBaudRate & USB_IRDA_BR_2400) ? " 2400" : "", 272 + (irda_desc->wBaudRate & USB_IRDA_BR_9600) ? " 9600" : "", 273 + (irda_desc->wBaudRate & USB_IRDA_BR_19200) ? " 19200" : "", 274 + (irda_desc->wBaudRate & USB_IRDA_BR_38400) ? " 38400" : "", 275 + (irda_desc->wBaudRate & USB_IRDA_BR_57600) ? " 57600" : "", 276 + (irda_desc->wBaudRate & USB_IRDA_BR_115200) ? " 115200" : "", 277 + (irda_desc->wBaudRate & USB_IRDA_BR_576000) ? " 576000" : "", 278 + (irda_desc->wBaudRate & USB_IRDA_BR_1152000) ? " 1152000" : "", 279 + (irda_desc->wBaudRate & USB_IRDA_BR_4000000) ? " 4000000" : ""); 244 280 245 - switch( irda_desc->bmAdditionalBOFs ) { 246 - case 0x01: ir_add_bof = 48; break; 247 - case 0x02: ir_add_bof = 24; break; 248 - case 0x04: ir_add_bof = 12; break; 249 - case 0x08: ir_add_bof = 6; break; 250 - case 0x10: ir_add_bof = 3; break; 251 - case 0x20: ir_add_bof = 2; break; 252 - case 0x40: ir_add_bof = 1; break; 253 - case 0x80: ir_add_bof = 0; break; 254 - default:; 281 + switch (irda_desc->bmAdditionalBOFs) { 282 + case USB_IRDA_AB_48: 283 + ir_add_bof = 48; 284 + break; 285 + case USB_IRDA_AB_24: 286 + ir_add_bof = 24; 287 + break; 288 + case USB_IRDA_AB_12: 289 + ir_add_bof = 12; 290 + break; 291 + case USB_IRDA_AB_6: 292 + ir_add_bof = 6; 293 + break; 294 + case USB_IRDA_AB_3: 295 + ir_add_bof = 3; 296 + break; 297 + case USB_IRDA_AB_2: 298 + ir_add_bof = 2; 299 + break; 300 + case USB_IRDA_AB_1: 301 + ir_add_bof = 1; 302 + break; 303 + case USB_IRDA_AB_0: 304 + ir_add_bof = 0; 305 + break; 306 + default: 307 + break; 255 308 } 256 309 257 - kfree (irda_desc); 310 + kfree(irda_desc); 258 311 259 - return 0; 312 + return 0; 260 313 } 261 314 262 - static int ir_open (struct usb_serial_port *port, struct file *filp) 315 + static int ir_open(struct usb_serial_port *port, struct file *filp) 263 316 { 264 317 char *buffer; 265 318 int result = 0; ··· 304 285 305 286 if (buffer_size) { 306 287 /* override the default buffer sizes */ 307 - buffer = kmalloc (buffer_size, GFP_KERNEL); 288 + buffer = kmalloc(buffer_size, GFP_KERNEL); 308 289 if (!buffer) { 309 - dev_err (&port->dev, "%s - out of memory.\n", __func__); 290 + dev_err(&port->dev, "%s - out of memory.\n", __func__); 310 291 return -ENOMEM; 311 292 } 312 - kfree (port->read_urb->transfer_buffer); 293 + kfree(port->read_urb->transfer_buffer); 313 294 port->read_urb->transfer_buffer = buffer; 314 295 port->read_urb->transfer_buffer_length = buffer_size; 315 296 316 - buffer = kmalloc (buffer_size, GFP_KERNEL); 297 + buffer = kmalloc(buffer_size, GFP_KERNEL); 317 298 if (!buffer) { 318 - dev_err (&port->dev, "%s - out of memory.\n", __func__); 299 + dev_err(&port->dev, "%s - out of memory.\n", __func__); 319 300 return -ENOMEM; 320 301 } 321 - kfree (port->write_urb->transfer_buffer); 302 + kfree(port->write_urb->transfer_buffer); 322 303 port->write_urb->transfer_buffer = buffer; 323 304 port->write_urb->transfer_buffer_length = buffer_size; 324 305 port->bulk_out_size = buffer_size; 325 306 } 326 307 327 308 /* Start reading from the device */ 328 - usb_fill_bulk_urb ( 309 + usb_fill_bulk_urb( 329 310 port->read_urb, 330 - port->serial->dev, 331 - usb_rcvbulkpipe(port->serial->dev, port->bulk_in_endpointAddress), 311 + port->serial->dev, 312 + usb_rcvbulkpipe(port->serial->dev, 313 + port->bulk_in_endpointAddress), 332 314 port->read_urb->transfer_buffer, 333 315 port->read_urb->transfer_buffer_length, 334 316 ir_read_bulk_callback, 335 317 port); 336 318 result = usb_submit_urb(port->read_urb, GFP_KERNEL); 337 319 if (result) 338 - dev_err(&port->dev, "%s - failed submitting read urb, error %d\n", __func__, result); 320 + dev_err(&port->dev, 321 + "%s - failed submitting read urb, error %d\n", 322 + __func__, result); 339 323 340 324 return result; 341 325 } 342 326 343 - static void ir_close (struct usb_serial_port *port, struct file * filp) 327 + static void ir_close(struct usb_serial_port *port, struct file *filp) 344 328 { 345 329 dbg("%s - port %d", __func__, port->number); 346 - 330 + 347 331 /* shutdown our bulk read */ 348 332 usb_kill_urb(port->read_urb); 349 333 } 350 334 351 - static int ir_write (struct usb_serial_port *port, const unsigned char *buf, int count) 335 + static int ir_write(struct usb_serial_port *port, 336 + const unsigned char *buf, int count) 352 337 { 353 338 unsigned char *transfer_buffer; 354 339 int result; ··· 361 338 dbg("%s - port = %d, count = %d", __func__, port->number, count); 362 339 363 340 if (!port->tty) { 364 - dev_err (&port->dev, "%s - no tty???\n", __func__); 341 + dev_err(&port->dev, "%s - no tty???\n", __func__); 365 342 return 0; 366 343 } 367 344 ··· 382 359 383 360 /* 384 361 * The first byte of the packet we send to the device contains an 385 - * inband header which indicates an additional number of BOFs and 362 + * inbound header which indicates an additional number of BOFs and 386 363 * a baud rate change. 387 364 * 388 365 * See section 5.4.2.2 of the USB IrDA spec. ··· 390 367 *transfer_buffer = ir_xbof | ir_baud; 391 368 ++transfer_buffer; 392 369 393 - memcpy (transfer_buffer, buf, transfer_size); 370 + memcpy(transfer_buffer, buf, transfer_size); 394 371 395 - usb_fill_bulk_urb ( 372 + usb_fill_bulk_urb( 396 373 port->write_urb, 397 374 port->serial->dev, 398 375 usb_sndbulkpipe(port->serial->dev, ··· 404 381 405 382 port->write_urb->transfer_flags = URB_ZERO_PACKET; 406 383 407 - result = usb_submit_urb (port->write_urb, GFP_ATOMIC); 384 + result = usb_submit_urb(port->write_urb, GFP_ATOMIC); 408 385 if (result) { 409 386 port->write_urb_busy = 0; 410 - dev_err(&port->dev, "%s - failed submitting write urb, error %d\n", __func__, result); 387 + dev_err(&port->dev, 388 + "%s - failed submitting write urb, error %d\n", 389 + __func__, result); 411 390 } else 412 391 result = transfer_size; 413 392 414 393 return result; 415 394 } 416 395 417 - static void ir_write_bulk_callback (struct urb *urb) 396 + static void ir_write_bulk_callback(struct urb *urb) 418 397 { 419 398 struct usb_serial_port *port = urb->context; 420 399 int status = urb->status; ··· 430 405 return; 431 406 } 432 407 433 - usb_serial_debug_data ( 408 + usb_serial_debug_data( 434 409 debug, 435 410 &port->dev, 436 411 __func__, ··· 440 415 usb_serial_port_softint(port); 441 416 } 442 417 443 - static void ir_read_bulk_callback (struct urb *urb) 418 + static void ir_read_bulk_callback(struct urb *urb) 444 419 { 445 420 struct usb_serial_port *port = urb->context; 446 421 struct tty_struct *tty; ··· 456 431 } 457 432 458 433 switch (status) { 459 - case 0: /* Successful */ 434 + case 0: /* Successful */ 460 435 461 - /* 462 - * The first byte of the packet we get from the device 463 - * contains a busy indicator and baud rate change. 464 - * See section 5.4.1.2 of the USB IrDA spec. 465 - */ 466 - if ((*data & 0x0f) > 0) 467 - ir_baud = *data & 0x0f; 436 + /* 437 + * The first byte of the packet we get from the device 438 + * contains a busy indicator and baud rate change. 439 + * See section 5.4.1.2 of the USB IrDA spec. 440 + */ 441 + if ((*data & 0x0f) > 0) 442 + ir_baud = *data & 0x0f; 468 443 469 - usb_serial_debug_data ( 470 - debug, 471 - &port->dev, 472 - __func__, 473 - urb->actual_length, 474 - data); 444 + usb_serial_debug_data( 445 + debug, 446 + &port->dev, 447 + __func__, 448 + urb->actual_length, 449 + data); 475 450 476 - tty = port->tty; 451 + tty = port->tty; 477 452 478 - if (tty_buffer_request_room(tty, urb->actual_length - 1)) { 479 - tty_insert_flip_string(tty, data+1, urb->actual_length - 1); 480 - tty_flip_buffer_push(tty); 481 - } 453 + if (tty_buffer_request_room(tty, urb->actual_length - 1)) { 454 + tty_insert_flip_string(tty, data + 1, 455 + urb->actual_length - 1); 456 + tty_flip_buffer_push(tty); 457 + } 482 458 483 - /* 484 - * No break here. 485 - * We want to resubmit the urb so we can read 486 - * again. 487 - */ 459 + /* 460 + * No break here. 461 + * We want to resubmit the urb so we can read 462 + * again. 463 + */ 488 464 489 - case -EPROTO: /* taking inspiration from pl2303.c */ 465 + case -EPROTO: /* taking inspiration from pl2303.c */ 490 466 491 - /* Continue trying to always read */ 492 - usb_fill_bulk_urb ( 493 - port->read_urb, 494 - port->serial->dev, 495 - usb_rcvbulkpipe(port->serial->dev, 496 - port->bulk_in_endpointAddress), 497 - port->read_urb->transfer_buffer, 498 - port->read_urb->transfer_buffer_length, 499 - ir_read_bulk_callback, 500 - port); 467 + /* Continue trying to always read */ 468 + usb_fill_bulk_urb( 469 + port->read_urb, 470 + port->serial->dev, 471 + usb_rcvbulkpipe(port->serial->dev, 472 + port->bulk_in_endpointAddress), 473 + port->read_urb->transfer_buffer, 474 + port->read_urb->transfer_buffer_length, 475 + ir_read_bulk_callback, 476 + port); 501 477 502 - result = usb_submit_urb(port->read_urb, GFP_ATOMIC); 503 - if (result) 504 - dev_err(&port->dev, "%s - failed resubmitting read urb, error %d\n", 505 - __func__, result); 478 + result = usb_submit_urb(port->read_urb, GFP_ATOMIC); 479 + if (result) 480 + dev_err(&port->dev, 481 + "%s - failed resubmitting read urb, error %d\n", 482 + __func__, result); 483 + break; 506 484 507 - break ; 508 - 509 - default: 510 - dbg("%s - nonzero read bulk status received: %d", 511 - __func__, 512 - status); 513 - break ; 514 - 485 + default: 486 + dbg("%s - nonzero read bulk status received: %d", 487 + __func__, 488 + status); 489 + break; 515 490 } 516 491 517 492 return; 518 493 } 519 494 520 - static void ir_set_termios (struct usb_serial_port *port, struct ktermios *old_termios) 495 + static void ir_set_termios(struct usb_serial_port *port, 496 + struct ktermios *old_termios) 521 497 { 522 498 unsigned char *transfer_buffer; 523 499 int result; ··· 536 510 */ 537 511 538 512 switch (baud) { 539 - case 2400: ir_baud = SPEED_2400; break; 540 - case 9600: ir_baud = SPEED_9600; break; 541 - case 19200: ir_baud = SPEED_19200; break; 542 - case 38400: ir_baud = SPEED_38400; break; 543 - case 57600: ir_baud = SPEED_57600; break; 544 - case 115200: ir_baud = SPEED_115200; break; 545 - case 576000: ir_baud = SPEED_576000; break; 546 - case 1152000: ir_baud = SPEED_1152000; break; 547 - case 4000000: ir_baud = SPEED_4000000; break; 548 - break; 549 - default: 550 - ir_baud = SPEED_9600; 551 - baud = 9600; 513 + case 2400: 514 + ir_baud = USB_IRDA_BR_2400; 515 + break; 516 + case 9600: 517 + ir_baud = USB_IRDA_BR_9600; 518 + break; 519 + case 19200: 520 + ir_baud = USB_IRDA_BR_19200; 521 + break; 522 + case 38400: 523 + ir_baud = USB_IRDA_BR_38400; 524 + break; 525 + case 57600: 526 + ir_baud = USB_IRDA_BR_57600; 527 + break; 528 + case 115200: 529 + ir_baud = USB_IRDA_BR_115200; 530 + break; 531 + case 576000: 532 + ir_baud = USB_IRDA_BR_576000; 533 + break; 534 + case 1152000: 535 + ir_baud = USB_IRDA_BR_1152000; 536 + break; 537 + case 4000000: 538 + ir_baud = USB_IRDA_BR_4000000; 539 + break; 540 + default: 541 + ir_baud = USB_IRDA_BR_9600; 542 + baud = 9600; 552 543 } 553 544 554 545 if (xbof == -1) ··· 581 538 transfer_buffer = port->write_urb->transfer_buffer; 582 539 *transfer_buffer = ir_xbof | ir_baud; 583 540 584 - usb_fill_bulk_urb ( 541 + usb_fill_bulk_urb( 585 542 port->write_urb, 586 543 port->serial->dev, 587 - usb_sndbulkpipe(port->serial->dev, port->bulk_out_endpointAddress), 544 + usb_sndbulkpipe(port->serial->dev, 545 + port->bulk_out_endpointAddress), 588 546 port->write_urb->transfer_buffer, 589 547 1, 590 548 ir_write_bulk_callback, ··· 593 549 594 550 port->write_urb->transfer_flags = URB_ZERO_PACKET; 595 551 596 - result = usb_submit_urb (port->write_urb, GFP_KERNEL); 552 + result = usb_submit_urb(port->write_urb, GFP_KERNEL); 597 553 if (result) 598 - dev_err(&port->dev, "%s - failed submitting write urb, error %d\n", __func__, result); 554 + dev_err(&port->dev, 555 + "%s - failed submitting write urb, error %d\n", 556 + __func__, result); 599 557 600 558 /* Only speed changes are supported */ 601 559 tty_termios_copy_hw(port->tty->termios, old_termios); 602 560 tty_encode_baud_rate(port->tty, baud, baud); 603 561 } 604 562 605 - 606 - static int __init ir_init (void) 563 + static int __init ir_init(void) 607 564 { 608 565 int retval; 566 + 609 567 retval = usb_serial_register(&ir_device); 610 568 if (retval) 611 569 goto failed_usb_serial_register; 570 + 612 571 retval = usb_register(&ir_driver); 613 - if (retval) 572 + if (retval) 614 573 goto failed_usb_register; 574 + 615 575 info(DRIVER_DESC " " DRIVER_VERSION); 576 + 616 577 return 0; 578 + 617 579 failed_usb_register: 618 580 usb_serial_deregister(&ir_device); 581 + 619 582 failed_usb_serial_register: 620 583 return retval; 621 584 } 622 585 623 - 624 - static void __exit ir_exit (void) 586 + static void __exit ir_exit(void) 625 587 { 626 - usb_deregister (&ir_driver); 627 - usb_serial_deregister (&ir_device); 588 + usb_deregister(&ir_driver); 589 + usb_serial_deregister(&ir_device); 628 590 } 629 591 630 592
+151
include/linux/usb/irda.h
··· 1 + /* 2 + * USB IrDA Bridge Device Definition 3 + */ 4 + 5 + #ifndef __LINUX_USB_IRDA_H 6 + #define __LINUX_USB_IRDA_H 7 + 8 + /* This device should use Application-specific class */ 9 + 10 + #define USB_SUBCLASS_IRDA 0x02 11 + 12 + /*-------------------------------------------------------------------------*/ 13 + 14 + /* Class-Specific requests (bRequest field) */ 15 + 16 + #define USB_REQ_CS_IRDA_RECEIVING 1 17 + #define USB_REQ_CS_IRDA_CHECK_MEDIA_BUSY 3 18 + #define USB_REQ_CS_IRDA_RATE_SNIFF 4 19 + #define USB_REQ_CS_IRDA_UNICAST_LIST 5 20 + #define USB_REQ_CS_IRDA_GET_CLASS_DESC 6 21 + 22 + /*-------------------------------------------------------------------------*/ 23 + 24 + /* Class-Specific descriptor */ 25 + 26 + #define USB_DT_CS_IRDA 0x21 27 + 28 + /*-------------------------------------------------------------------------*/ 29 + 30 + /* Data sizes */ 31 + 32 + #define USB_IRDA_DS_2048 (1 << 5) 33 + #define USB_IRDA_DS_1024 (1 << 4) 34 + #define USB_IRDA_DS_512 (1 << 3) 35 + #define USB_IRDA_DS_256 (1 << 2) 36 + #define USB_IRDA_DS_128 (1 << 1) 37 + #define USB_IRDA_DS_64 (1 << 0) 38 + 39 + /* Window sizes */ 40 + 41 + #define USB_IRDA_WS_7 (1 << 6) 42 + #define USB_IRDA_WS_6 (1 << 5) 43 + #define USB_IRDA_WS_5 (1 << 4) 44 + #define USB_IRDA_WS_4 (1 << 3) 45 + #define USB_IRDA_WS_3 (1 << 2) 46 + #define USB_IRDA_WS_2 (1 << 1) 47 + #define USB_IRDA_WS_1 (1 << 0) 48 + 49 + /* Min turnaround times in usecs */ 50 + 51 + #define USB_IRDA_MTT_0 (1 << 7) 52 + #define USB_IRDA_MTT_10 (1 << 6) 53 + #define USB_IRDA_MTT_50 (1 << 5) 54 + #define USB_IRDA_MTT_100 (1 << 4) 55 + #define USB_IRDA_MTT_500 (1 << 3) 56 + #define USB_IRDA_MTT_1000 (1 << 2) 57 + #define USB_IRDA_MTT_5000 (1 << 1) 58 + #define USB_IRDA_MTT_10000 (1 << 0) 59 + 60 + /* Baud rates */ 61 + 62 + #define USB_IRDA_BR_4000000 (1 << 8) 63 + #define USB_IRDA_BR_1152000 (1 << 7) 64 + #define USB_IRDA_BR_576000 (1 << 6) 65 + #define USB_IRDA_BR_115200 (1 << 5) 66 + #define USB_IRDA_BR_57600 (1 << 4) 67 + #define USB_IRDA_BR_38400 (1 << 3) 68 + #define USB_IRDA_BR_19200 (1 << 2) 69 + #define USB_IRDA_BR_9600 (1 << 1) 70 + #define USB_IRDA_BR_2400 (1 << 0) 71 + 72 + /* Additional BOFs */ 73 + 74 + #define USB_IRDA_AB_0 (1 << 7) 75 + #define USB_IRDA_AB_1 (1 << 6) 76 + #define USB_IRDA_AB_2 (1 << 5) 77 + #define USB_IRDA_AB_3 (1 << 4) 78 + #define USB_IRDA_AB_6 (1 << 3) 79 + #define USB_IRDA_AB_12 (1 << 2) 80 + #define USB_IRDA_AB_24 (1 << 1) 81 + #define USB_IRDA_AB_48 (1 << 0) 82 + 83 + /* IRDA Rate Sniff */ 84 + 85 + #define USB_IRDA_RATE_SNIFF 1 86 + 87 + /*-------------------------------------------------------------------------*/ 88 + 89 + struct usb_irda_cs_descriptor { 90 + __u8 bLength; 91 + __u8 bDescriptorType; 92 + 93 + __le16 bcdSpecRevision; 94 + __u8 bmDataSize; 95 + __u8 bmWindowSize; 96 + __u8 bmMinTurnaroundTime; 97 + __le16 wBaudRate; 98 + __u8 bmAdditionalBOFs; 99 + __u8 bIrdaRateSniff; 100 + __u8 bMaxUnicastList; 101 + } __attribute__ ((packed)); 102 + 103 + /*-------------------------------------------------------------------------*/ 104 + 105 + /* Data Format */ 106 + 107 + #define USB_IRDA_STATUS_MEDIA_BUSY (1 << 7) 108 + 109 + /* The following is a 4-bit value used for both 110 + * inbound and outbound headers: 111 + * 112 + * 0 - speed ignored 113 + * 1 - 2400 bps 114 + * 2 - 9600 bps 115 + * 3 - 19200 bps 116 + * 4 - 38400 bps 117 + * 5 - 57600 bps 118 + * 6 - 115200 bps 119 + * 7 - 576000 bps 120 + * 8 - 1.152 Mbps 121 + * 9 - 5 mbps 122 + * 10..15 - Reserved 123 + */ 124 + #define USB_IRDA_STATUS_LINK_SPEED 0x0f 125 + 126 + /* The following is a 4-bit value used only for 127 + * outbound header: 128 + * 129 + * 0 - No change (BOF ignored) 130 + * 1 - 48 BOFs 131 + * 2 - 24 BOFs 132 + * 3 - 12 BOFs 133 + * 4 - 6 BOFs 134 + * 5 - 3 BOFs 135 + * 6 - 2 BOFs 136 + * 7 - 1 BOFs 137 + * 8 - 0 BOFs 138 + * 9..15 - Reserved 139 + */ 140 + #define USB_IRDA_EXTRA_BOFS 0xf0 141 + 142 + struct usb_irda_inbound_header { 143 + __u8 bmStatus; 144 + }; 145 + 146 + struct usb_irda_outbound_header { 147 + __u8 bmChange; 148 + }; 149 + 150 + #endif /* __LINUX_USB_IRDA_H */ 151 +