MFC r257556:
Arrange for uart_cpu_fdt's probe() routine to use the same table of compat strings as uart_bus_fdt's probe().
This commit is contained in:
parent
2b338fd3cf
commit
cee3a0f503
@ -76,6 +76,11 @@ extern struct uart_class uart_pl011_class __attribute__((weak));
|
||||
extern struct uart_class uart_cdnc_class __attribute__((weak));
|
||||
extern struct uart_class uart_ti8250_class __attribute__((weak));
|
||||
|
||||
#ifdef FDT
|
||||
struct ofw_compat_data;
|
||||
extern const struct ofw_compat_data *uart_fdt_compat_data;
|
||||
#endif
|
||||
|
||||
#ifdef PC98
|
||||
struct uart_class *uart_pc98_getdev(u_long port);
|
||||
#endif
|
||||
|
@ -30,6 +30,8 @@
|
||||
#include <sys/cdefs.h>
|
||||
__FBSDID("$FreeBSD$");
|
||||
|
||||
#include "opt_platform.h"
|
||||
|
||||
#include <sys/param.h>
|
||||
#include <sys/bus.h>
|
||||
#include <sys/kernel.h>
|
||||
@ -85,6 +87,9 @@ static struct ofw_compat_data compat_data[] = {
|
||||
{NULL, (uintptr_t)NULL},
|
||||
};
|
||||
|
||||
/* Export the compat_data table for use by the uart_cpu_fdt.c probe routine. */
|
||||
const struct ofw_compat_data *uart_fdt_compat_data = compat_data;
|
||||
|
||||
static int
|
||||
uart_fdt_get_clock(phandle_t node, pcell_t *cell)
|
||||
{
|
||||
|
@ -30,6 +30,8 @@
|
||||
#include <sys/cdefs.h>
|
||||
__FBSDID("$FreeBSD$");
|
||||
|
||||
#include "opt_platform.h"
|
||||
|
||||
#include <sys/param.h>
|
||||
#include <sys/bus.h>
|
||||
#include <sys/kernel.h>
|
||||
@ -93,6 +95,7 @@ int
|
||||
uart_cpu_getdev(int devtype, struct uart_devinfo *di)
|
||||
{
|
||||
char buf[64];
|
||||
const struct ofw_compat_data *cd;
|
||||
struct uart_class *class;
|
||||
phandle_t node, chosen;
|
||||
pcell_t shift, br, rclk;
|
||||
@ -139,22 +142,13 @@ uart_cpu_getdev(int devtype, struct uart_devinfo *di)
|
||||
/*
|
||||
* Finalize configuration.
|
||||
*/
|
||||
if (fdt_is_compatible(node, "fsl,imx-uart"))
|
||||
class = &uart_imx_class;
|
||||
else if (fdt_is_compatible(node, "quicc"))
|
||||
class = &uart_quicc_class;
|
||||
else if (fdt_is_compatible(node, "lpc"))
|
||||
class = &uart_lpc_class;
|
||||
else if (fdt_is_compatible(node, "arm,pl011"))
|
||||
class = &uart_pl011_class;
|
||||
else if (fdt_is_compatible(node, "exynos"))
|
||||
class = &uart_s3c2410_class;
|
||||
else if (fdt_is_compatible(node, "cadence,uart"))
|
||||
class = &uart_cdnc_class;
|
||||
else if (fdt_is_compatible(node, "ti,ns16550"))
|
||||
class = &uart_ti8250_class;
|
||||
else if (fdt_is_compatible(node, "ns16550"))
|
||||
class = &uart_ns8250_class;
|
||||
for (cd = uart_fdt_compat_data; cd->ocd_str != NULL; ++cd) {
|
||||
if (fdt_is_compatible(node, cd->ocd_str))
|
||||
break;
|
||||
}
|
||||
if (cd->ocd_str == NULL)
|
||||
return (ENXIO);
|
||||
class = (struct uart_class *)cd->ocd_data;
|
||||
|
||||
di->bas.chan = 0;
|
||||
di->bas.regshft = (u_int)shift;
|
||||
|
Loading…
Reference in New Issue
Block a user