From mboxrd@z Thu Jan 1 00:00:00 1970 From: moorray3@wp.pl (Jakub =?UTF-8?B?S2ljacWEc2tp?=) Date: Sun, 12 Apr 2015 12:16:22 +0200 Subject: [PATCH v3 05/10] drivers: PL011: refactor pl011_probe() In-Reply-To: <1428578961-6896-6-git-send-email-andre.przywara@arm.com> References: <1428578961-6896-1-git-send-email-andre.przywara@arm.com> <1428578961-6896-6-git-send-email-andre.przywara@arm.com> Message-ID: <20150412121622.2ee92f59@north> To: linux-arm-kernel@lists.infradead.org List-Id: linux-arm-kernel.lists.infradead.org On Thu, 9 Apr 2015 12:29:16 +0100, Andre Przywara wrote: > Currently the pl011_probe() function is relying on some AMBA IDs > and a device tree node to initialize the driver and a port. > Both features are not necessarily required for the driver: > - we lack AMBA IDs in the ARM SBSA generic UART and > - we lack a DT node in ACPI systems. > So lets refactor the function to ease later reuse. > > Signed-off-by: Andre Przywara > --- > drivers/tty/serial/amba-pl011.c | 89 ++++++++++++++++++++++++++------------- > 1 file changed, 60 insertions(+), 29 deletions(-) > > diff --git a/drivers/tty/serial/amba-pl011.c b/drivers/tty/serial/amba-pl011.c > index e1ac2cb..65df5c7 100644 > --- a/drivers/tty/serial/amba-pl011.c > +++ b/drivers/tty/serial/amba-pl011.c > @@ -2174,13 +2174,10 @@ static void pl011_unregister_port(struct uart_amba_port *uap) > uart_unregister_driver(&amba_reg); > } > > - > -static int pl011_probe(struct amba_device *dev, const struct amba_id *id) > +static int pl011_allocate_port(struct device *dev, struct uart_amba_port **_uap) > { > struct uart_amba_port *uap; > - struct vendor_data *vendor = id->data; > - void __iomem *base; > - int i, ret; > + int i; > > for (i = 0; i < ARRAY_SIZE(amba_ports); i++) > if (amba_ports[i] == NULL) > @@ -2189,51 +2186,53 @@ static int pl011_probe(struct amba_device *dev, const struct amba_id *id) > if (i == ARRAY_SIZE(amba_ports)) > return -EBUSY; > > - uap = devm_kzalloc(&dev->dev, sizeof(struct uart_amba_port), > - GFP_KERNEL); > + uap = devm_kzalloc(dev, sizeof(struct uart_amba_port), GFP_KERNEL); > if (uap == NULL) > return -ENOMEM; > > - i = pl011_probe_dt_alias(i, &dev->dev); > + if (_uap) > + *_uap = uap; > + > + return i; > +} Could we please move the allocation out of this function and spare ourselves the "out argument". It's just a matter of personal preference so the final decision is up to you. Also you never pass _uap as NULL so the check is unnecessary.