@@ -277,74 +277,78 @@ static int ni16550_probe(struct platform_device *pdev)
277
277
{
278
278
const struct ni16550_device_info * info ;
279
279
struct device * dev = & pdev -> dev ;
280
- struct uart_8250_port uart = {} ;
280
+ struct uart_8250_port * uart __free ( kfree ) = NULL ;
281
281
unsigned int txfifosz , rxfifosz ;
282
282
unsigned int prescaler ;
283
283
struct ni16550_data * data ;
284
284
const char * portmode ;
285
285
bool rs232_property ;
286
286
int ret ;
287
287
288
+ uart = kzalloc (sizeof (* uart ), GFP_KERNEL );
289
+ if (!uart )
290
+ return - ENOMEM ;
291
+
288
292
data = devm_kzalloc (dev , sizeof (* data ), GFP_KERNEL );
289
293
if (!data )
290
294
return - ENOMEM ;
291
295
292
- spin_lock_init (& uart . port .lock );
296
+ spin_lock_init (& uart -> port .lock );
293
297
294
- ret = ni16550_get_regs (pdev , & uart . port );
298
+ ret = ni16550_get_regs (pdev , & uart -> port );
295
299
if (ret < 0 )
296
300
return ret ;
297
301
298
302
/* early setup so that serial_in()/serial_out() work */
299
- serial8250_set_defaults (& uart );
303
+ serial8250_set_defaults (uart );
300
304
301
305
info = device_get_match_data (dev );
302
306
303
- uart . port .dev = dev ;
304
- uart . port .flags = UPF_BOOT_AUTOCONF | UPF_FIXED_PORT | UPF_FIXED_TYPE ;
305
- uart . port .startup = ni16550_port_startup ;
306
- uart . port .shutdown = ni16550_port_shutdown ;
307
+ uart -> port .dev = dev ;
308
+ uart -> port .flags = UPF_BOOT_AUTOCONF | UPF_FIXED_PORT | UPF_FIXED_TYPE ;
309
+ uart -> port .startup = ni16550_port_startup ;
310
+ uart -> port .shutdown = ni16550_port_shutdown ;
307
311
308
312
/*
309
313
* Hardware instantiation of FIFO sizes are held in registers.
310
314
*/
311
- txfifosz = ni16550_read_fifo_size (& uart , NI16550_TFS_OFFSET );
312
- rxfifosz = ni16550_read_fifo_size (& uart , NI16550_RFS_OFFSET );
315
+ txfifosz = ni16550_read_fifo_size (uart , NI16550_TFS_OFFSET );
316
+ rxfifosz = ni16550_read_fifo_size (uart , NI16550_RFS_OFFSET );
313
317
314
318
dev_dbg (dev , "NI 16550 has TX FIFO size %u, RX FIFO size %u\n" ,
315
319
txfifosz , rxfifosz );
316
320
317
- uart . port .type = PORT_16550A ;
318
- uart . port .fifosize = txfifosz ;
319
- uart . tx_loadsz = txfifosz ;
320
- uart . fcr = UART_FCR_ENABLE_FIFO | UART_FCR_R_TRIG_10 ;
321
- uart . capabilities = UART_CAP_FIFO | UART_CAP_AFE | UART_CAP_EFR ;
321
+ uart -> port .type = PORT_16550A ;
322
+ uart -> port .fifosize = txfifosz ;
323
+ uart -> tx_loadsz = txfifosz ;
324
+ uart -> fcr = UART_FCR_ENABLE_FIFO | UART_FCR_R_TRIG_10 ;
325
+ uart -> capabilities = UART_CAP_FIFO | UART_CAP_AFE | UART_CAP_EFR ;
322
326
323
327
/*
324
328
* Declaration of the base clock frequency can come from one of:
325
329
* - static declaration in this driver (for older ACPI IDs)
326
330
* - a "clock-frequency" ACPI
327
331
*/
328
- uart . port .uartclk = info -> uartclk ;
332
+ uart -> port .uartclk = info -> uartclk ;
329
333
330
- ret = uart_read_port_properties (& uart . port );
334
+ ret = uart_read_port_properties (& uart -> port );
331
335
if (ret )
332
336
return ret ;
333
337
334
- if (!uart . port .uartclk ) {
338
+ if (!uart -> port .uartclk ) {
335
339
data -> clk = devm_clk_get_enabled (dev , NULL );
336
340
if (!IS_ERR (data -> clk ))
337
- uart . port .uartclk = clk_get_rate (data -> clk );
341
+ uart -> port .uartclk = clk_get_rate (data -> clk );
338
342
}
339
343
340
- if (!uart . port .uartclk )
344
+ if (!uart -> port .uartclk )
341
345
return dev_err_probe (dev , - ENODEV , "unable to determine clock frequency!\n" );
342
346
343
347
prescaler = info -> prescaler ;
344
348
device_property_read_u32 (dev , "clock-prescaler" , & prescaler );
345
349
if (prescaler ) {
346
- uart . port .set_mctrl = ni16550_set_mctrl ;
347
- ni16550_config_prescaler (& uart , (u8 )prescaler );
350
+ uart -> port .set_mctrl = ni16550_set_mctrl ;
351
+ ni16550_config_prescaler (uart , (u8 )prescaler );
348
352
}
349
353
350
354
/*
@@ -362,7 +366,7 @@ static int ni16550_probe(struct platform_device *pdev)
362
366
dev_dbg (dev , "port is in %s mode (via device property)\n" ,
363
367
rs232_property ? "RS-232" : "RS-485" );
364
368
} else if (info -> flags & NI_HAS_PMR ) {
365
- rs232_property = is_pmr_rs232_mode (& uart );
369
+ rs232_property = is_pmr_rs232_mode (uart );
366
370
367
371
dev_dbg (dev , "port is in %s mode (via PMR)\n" ,
368
372
rs232_property ? "RS-232" : "RS-485" );
@@ -377,10 +381,10 @@ static int ni16550_probe(struct platform_device *pdev)
377
381
* Neither the 'transceiver' property nor the PMR indicate
378
382
* that this is an RS-232 port, so it must be an RS-485 one.
379
383
*/
380
- ni16550_rs485_setup (& uart . port );
384
+ ni16550_rs485_setup (& uart -> port );
381
385
}
382
386
383
- ret = serial8250_register_8250_port (& uart );
387
+ ret = serial8250_register_8250_port (uart );
384
388
if (ret < 0 )
385
389
return ret ;
386
390
data -> line = ret ;
0 commit comments