Commit 7c53cb3d authored by Peter Hurley's avatar Peter Hurley Committed by Greg Kroah-Hartman
Browse files

serial: earlycon: Refactor earlycon registration



Separate earlycon matching from registration; add register_earlycon
which initializes and registers the matched earlycon.

Acked-by: default avatarRob Herring <robh@kernel.org>
Signed-off-by: default avatarPeter Hurley <peter@hurleysoftware.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 60846880
Loading
Loading
Loading
Loading
+25 −17
Original line number Diff line number Diff line
@@ -96,27 +96,13 @@ static int __init parse_options(struct earlycon_device *device, char *options)
	return 0;
}

int __init setup_earlycon(char *buf, const char *match,
			  int (*setup)(struct earlycon_device *, const char *))

static int __init
register_earlycon(char *buf, int (*setup)(struct earlycon_device *, const char *))
{
	int err;
	size_t len;
	struct uart_port *port = &early_console_dev.port;

	if (!buf || !match || !setup)
		return 0;

	len = strlen(match);
	if (strncmp(buf, match, len))
		return 0;

	if (buf[len]) {
		if (buf[len] != ',')
			return 0;
		buf += len + 1;
	} else
		buf = NULL;

	/* On parsing error, pass the options buf to the setup function */
	if (buf && !parse_options(&early_console_dev, buf))
		buf = NULL;
@@ -136,6 +122,28 @@ int __init setup_earlycon(char *buf, const char *match,
	return 0;
}

int __init setup_earlycon(char *buf, const char *match,
			  int (*setup)(struct earlycon_device *, const char *))
{
	size_t len;

	if (!buf || !match || !setup)
		return 0;

	len = strlen(match);
	if (strncmp(buf, match, len))
		return 0;

	if (buf[len]) {
		if (buf[len] != ',')
			return 0;
		buf += len + 1;
	} else
		buf = NULL;

	return register_earlycon(buf, setup);
}

int __init of_setup_earlycon(unsigned long addr,
			     int (*setup)(struct earlycon_device *, const char *))
{