Skip to content

Commit da7bf20

Browse files
Shubhrajyoti Dattagregkh
authored andcommitted
tty: serial: uartlite: Add structure for private data
Add struct uartlite_data, to store the private data of the Uartlite driver. Signed-off-by: Tanvi Desai <[email protected]> Signed-off-by: Shubhrajyoti Datta <[email protected]> Signed-off-by: Greg Kroah-Hartman <[email protected]>
1 parent 628c534 commit da7bf20

File tree

1 file changed

+21
-8
lines changed

1 file changed

+21
-8
lines changed

drivers/tty/serial/uartlite.c

Lines changed: 21 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,10 @@
5454
#define ULITE_CONTROL_RST_RX 0x02
5555
#define ULITE_CONTROL_IE 0x10
5656

57+
struct uartlite_data {
58+
const struct uartlite_reg_ops *reg_ops;
59+
};
60+
5761
struct uartlite_reg_ops {
5862
u32 (*in)(void __iomem *addr);
5963
void (*out)(u32 val, void __iomem *addr);
@@ -91,16 +95,16 @@ static const struct uartlite_reg_ops uartlite_le = {
9195

9296
static inline u32 uart_in32(u32 offset, struct uart_port *port)
9397
{
94-
const struct uartlite_reg_ops *reg_ops = port->private_data;
98+
struct uartlite_data *pdata = port->private_data;
9599

96-
return reg_ops->in(port->membase + offset);
100+
return pdata->reg_ops->in(port->membase + offset);
97101
}
98102

99103
static inline void uart_out32(u32 val, u32 offset, struct uart_port *port)
100104
{
101-
const struct uartlite_reg_ops *reg_ops = port->private_data;
105+
struct uartlite_data *pdata = port->private_data;
102106

103-
reg_ops->out(val, port->membase + offset);
107+
pdata->reg_ops->out(val, port->membase + offset);
104108
}
105109

106110
static struct uart_port ulite_ports[ULITE_NR_UARTS];
@@ -325,6 +329,7 @@ static void ulite_release_port(struct uart_port *port)
325329

326330
static int ulite_request_port(struct uart_port *port)
327331
{
332+
struct uartlite_data *pdata = port->private_data;
328333
int ret;
329334

330335
pr_debug("ulite console: port=%p; port->mapbase=%llx\n",
@@ -342,13 +347,13 @@ static int ulite_request_port(struct uart_port *port)
342347
return -EBUSY;
343348
}
344349

345-
port->private_data = (void *)&uartlite_be;
350+
pdata->reg_ops = &uartlite_be;
346351
ret = uart_in32(ULITE_CONTROL, port);
347352
uart_out32(ULITE_CONTROL_RST_TX, ULITE_CONTROL, port);
348353
ret = uart_in32(ULITE_STATUS, port);
349354
/* Endianess detection */
350355
if ((ret & ULITE_STATUS_TXEMPTY) != ULITE_STATUS_TXEMPTY)
351-
port->private_data = (void *)&uartlite_le;
356+
pdata->reg_ops = &uartlite_le;
352357

353358
return 0;
354359
}
@@ -585,10 +590,12 @@ static struct uart_driver ulite_uart_driver = {
585590
* @id: requested id number. Pass -1 for automatic port assignment
586591
* @base: base address of uartlite registers
587592
* @irq: irq number for uartlite
593+
* @pdata: private data for uartlite
588594
*
589595
* Returns: 0 on success, <0 otherwise
590596
*/
591-
static int ulite_assign(struct device *dev, int id, u32 base, int irq)
597+
static int ulite_assign(struct device *dev, int id, u32 base, int irq,
598+
struct uartlite_data *pdata)
592599
{
593600
struct uart_port *port;
594601
int rc;
@@ -625,6 +632,7 @@ static int ulite_assign(struct device *dev, int id, u32 base, int irq)
625632
port->dev = dev;
626633
port->type = PORT_UNKNOWN;
627634
port->line = id;
635+
port->private_data = pdata;
628636

629637
dev_set_drvdata(dev, port);
630638

@@ -675,6 +683,7 @@ MODULE_DEVICE_TABLE(of, ulite_of_match);
675683
static int ulite_probe(struct platform_device *pdev)
676684
{
677685
struct resource *res;
686+
struct uartlite_data *pdata;
678687
int irq;
679688
int id = pdev->id;
680689
#ifdef CONFIG_OF
@@ -684,6 +693,10 @@ static int ulite_probe(struct platform_device *pdev)
684693
if (prop)
685694
id = be32_to_cpup(prop);
686695
#endif
696+
pdata = devm_kzalloc(&pdev->dev, sizeof(struct uartlite_data),
697+
GFP_KERNEL);
698+
if (!pdata)
699+
return -ENOMEM;
687700

688701
res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
689702
if (!res)
@@ -693,7 +706,7 @@ static int ulite_probe(struct platform_device *pdev)
693706
if (irq <= 0)
694707
return -ENXIO;
695708

696-
return ulite_assign(&pdev->dev, id, res->start, irq);
709+
return ulite_assign(&pdev->dev, id, res->start, irq, pdata);
697710
}
698711

699712
static int ulite_remove(struct platform_device *pdev)

0 commit comments

Comments
 (0)