@@ -131,17 +131,11 @@ static int ch341_control_in(struct usb_device *dev,
131
131
dev_dbg (& dev -> dev , "%s - (%02x,%04x,%04x,%u)\n" , __func__ ,
132
132
request , value , index , bufsize );
133
133
134
- r = usb_control_msg (dev , usb_rcvctrlpipe (dev , 0 ), request ,
135
- USB_TYPE_VENDOR | USB_RECIP_DEVICE | USB_DIR_IN ,
136
- value , index , buf , bufsize , DEFAULT_TIMEOUT );
137
- if (r < (int )bufsize ) {
138
- if (r >= 0 ) {
139
- dev_err (& dev -> dev ,
140
- "short control message received (%d < %u)\n" ,
141
- r , bufsize );
142
- r = - EIO ;
143
- }
144
-
134
+ r = usb_control_msg_recv (dev , 0 , request ,
135
+ USB_TYPE_VENDOR | USB_RECIP_DEVICE | USB_DIR_IN ,
136
+ value , index , buf , bufsize , DEFAULT_TIMEOUT ,
137
+ GFP_KERNEL );
138
+ if (r ) {
145
139
dev_err (& dev -> dev , "failed to receive control message: %d\n" ,
146
140
r );
147
141
return r ;
@@ -287,56 +281,48 @@ static int ch341_set_handshake(struct usb_device *dev, u8 control)
287
281
static int ch341_get_status (struct usb_device * dev , struct ch341_private * priv )
288
282
{
289
283
const unsigned int size = 2 ;
290
- char * buffer ;
284
+ u8 buffer [ 2 ] ;
291
285
int r ;
292
286
unsigned long flags ;
293
287
294
- buffer = kmalloc (size , GFP_KERNEL );
295
- if (!buffer )
296
- return - ENOMEM ;
297
-
298
288
r = ch341_control_in (dev , CH341_REQ_READ_REG , 0x0706 , 0 , buffer , size );
299
- if (r < 0 )
300
- goto out ;
289
+ if (r )
290
+ return r ;
301
291
302
292
spin_lock_irqsave (& priv -> lock , flags );
303
293
priv -> msr = (~(* buffer )) & CH341_BITS_MODEM_STAT ;
304
294
spin_unlock_irqrestore (& priv -> lock , flags );
305
295
306
- out : kfree (buffer );
307
- return r ;
296
+ return 0 ;
308
297
}
309
298
310
299
/* -------------------------------------------------------------------------- */
311
300
312
301
static int ch341_configure (struct usb_device * dev , struct ch341_private * priv )
313
302
{
314
303
const unsigned int size = 2 ;
315
- char * buffer ;
304
+ u8 buffer [ 2 ] ;
316
305
int r ;
317
306
318
- buffer = kmalloc (size , GFP_KERNEL );
319
- if (!buffer )
320
- return - ENOMEM ;
321
-
322
307
/* expect two bytes 0x27 0x00 */
323
308
r = ch341_control_in (dev , CH341_REQ_READ_VERSION , 0 , 0 , buffer , size );
324
- if (r < 0 )
325
- goto out ;
309
+ if (r )
310
+ return r ;
326
311
dev_dbg (& dev -> dev , "Chip version: 0x%02x\n" , buffer [0 ]);
327
312
328
313
r = ch341_control_out (dev , CH341_REQ_SERIAL_INIT , 0 , 0 );
329
314
if (r < 0 )
330
- goto out ;
315
+ return r ;
331
316
332
317
r = ch341_set_baudrate_lcr (dev , priv , priv -> baud_rate , priv -> lcr );
333
318
if (r < 0 )
334
- goto out ;
319
+ return r ;
335
320
336
321
r = ch341_set_handshake (dev , priv -> mcr );
322
+ if (r < 0 )
323
+ return r ;
337
324
338
- out : kfree (buffer );
339
- return r ;
325
+ return 0 ;
340
326
}
341
327
342
328
static int ch341_detect_quirks (struct usb_serial_port * port )
@@ -345,40 +331,27 @@ static int ch341_detect_quirks(struct usb_serial_port *port)
345
331
struct usb_device * udev = port -> serial -> dev ;
346
332
const unsigned int size = 2 ;
347
333
unsigned long quirks = 0 ;
348
- char * buffer ;
334
+ u8 buffer [ 2 ] ;
349
335
int r ;
350
336
351
- buffer = kmalloc (size , GFP_KERNEL );
352
- if (!buffer )
353
- return - ENOMEM ;
354
-
355
337
/*
356
338
* A subset of CH34x devices does not support all features. The
357
339
* prescaler is limited and there is no support for sending a RS232
358
340
* break condition. A read failure when trying to set up the latter is
359
341
* used to detect these devices.
360
342
*/
361
- r = usb_control_msg (udev , usb_rcvctrlpipe (udev , 0 ), CH341_REQ_READ_REG ,
362
- USB_TYPE_VENDOR | USB_RECIP_DEVICE | USB_DIR_IN ,
363
- CH341_REG_BREAK , 0 , buffer , size , DEFAULT_TIMEOUT );
343
+ r = usb_control_msg_recv (udev , 0 , CH341_REQ_READ_REG ,
344
+ USB_TYPE_VENDOR | USB_RECIP_DEVICE | USB_DIR_IN ,
345
+ CH341_REG_BREAK , 0 , & buffer , size ,
346
+ DEFAULT_TIMEOUT , GFP_KERNEL );
364
347
if (r == - EPIPE ) {
365
348
dev_info (& port -> dev , "break control not supported, using simulated break\n" );
366
349
quirks = CH341_QUIRK_LIMITED_PRESCALER | CH341_QUIRK_SIMULATE_BREAK ;
367
350
r = 0 ;
368
- goto out ;
369
- }
370
-
371
- if (r != size ) {
372
- if (r >= 0 )
373
- r = - EIO ;
351
+ } else if (r ) {
374
352
dev_err (& port -> dev , "failed to read break control: %d\n" , r );
375
- goto out ;
376
353
}
377
354
378
- r = 0 ;
379
- out :
380
- kfree (buffer );
381
-
382
355
if (quirks ) {
383
356
dev_dbg (& port -> dev , "enabling quirk flags: 0x%02lx\n" , quirks );
384
357
priv -> quirks |= quirks ;
@@ -647,23 +620,19 @@ static void ch341_break_ctl(struct tty_struct *tty, int break_state)
647
620
struct ch341_private * priv = usb_get_serial_port_data (port );
648
621
int r ;
649
622
uint16_t reg_contents ;
650
- uint8_t * break_reg ;
623
+ uint8_t break_reg [ 2 ] ;
651
624
652
625
if (priv -> quirks & CH341_QUIRK_SIMULATE_BREAK ) {
653
626
ch341_simulate_break (tty , break_state );
654
627
return ;
655
628
}
656
629
657
- break_reg = kmalloc (2 , GFP_KERNEL );
658
- if (!break_reg )
659
- return ;
660
-
661
630
r = ch341_control_in (port -> serial -> dev , CH341_REQ_READ_REG ,
662
631
ch341_break_reg , 0 , break_reg , 2 );
663
- if (r < 0 ) {
632
+ if (r ) {
664
633
dev_err (& port -> dev , "%s - USB control read error (%d)\n" ,
665
634
__func__ , r );
666
- goto out ;
635
+ return ;
667
636
}
668
637
dev_dbg (& port -> dev , "%s - initial ch341 break register contents - reg1: %x, reg2: %x\n" ,
669
638
__func__ , break_reg [0 ], break_reg [1 ]);
@@ -684,8 +653,6 @@ static void ch341_break_ctl(struct tty_struct *tty, int break_state)
684
653
if (r < 0 )
685
654
dev_err (& port -> dev , "%s - USB control write error (%d)\n" ,
686
655
__func__ , r );
687
- out :
688
- kfree (break_reg );
689
656
}
690
657
691
658
static int ch341_tiocmset (struct tty_struct * tty ,
0 commit comments