summaryrefslogtreecommitdiff
path: root/common/fdt_decode.c
diff options
context:
space:
mode:
authorSimon Glass <sjg@chromium.org>2011-06-08 15:54:38 -0700
committerSimon Glass <sjg@chromium.org>2011-08-29 10:39:20 -0700
commitca099194d8738dc7e1938911eff2d9b62d339bd3 (patch)
tree40c3a05a170b1354cdfdeb434c86296fe04cb112 /common/fdt_decode.c
parentd14d93d41effdee008e4b0ef623853339b00c61c (diff)
fdt: tegra2: Support USB config through FDT
This adds FDT configuration of USB ports. BUG=chromium-os:11623 TEST=Build and boot u-boot; usb start; network boot Change-Id: Ia3ea9f7ce816575dc0d99900a163d20e9cb65ecc Reviewed-on: http://gerrit.chromium.org/gerrit/2348 Tested-by: Simon Glass <sjg@chromium.org> Reviewed-by: Anton Staaf <robotboy@chromium.org>
Diffstat (limited to 'common/fdt_decode.c')
-rw-r--r--common/fdt_decode.c27
1 files changed, 27 insertions, 0 deletions
diff --git a/common/fdt_decode.c b/common/fdt_decode.c
index 932cceb921f..e5a3ed5e59f 100644
--- a/common/fdt_decode.c
+++ b/common/fdt_decode.c
@@ -37,6 +37,7 @@ static const char *compat_names[COMPAT_COUNT] = {
COMPAT(UNKNOWN, "<none>"),
COMPAT(NVIDIA_SPI_UART_SWITCH, "nvidia,spi-uart-switch"),
COMPAT(SERIAL_NS16550, "ns16550"),
+ COMPAT(NVIDIA_TEGRA20_USB, "nvidia,tegra250-usb"),
};
/**
@@ -387,3 +388,29 @@ int fdt_decode_lcd(const void *blob, struct fdt_lcd *config)
config->frame_buffer = get_addr(blob, node, "frame-buffer");
return decode_gpios(blob, node, "gpios", config->gpios, FDT_LCD_GPIOS);
}
+
+int fdt_decode_usb(const void *blob, int node, unsigned osc_frequency_mhz,
+ struct fdt_usb *config)
+{
+ int clk_node = 0, rate;
+
+ /* Find the parameters for our oscillator frequency */
+ do {
+ clk_node = fdt_node_offset_by_compatible(blob, clk_node,
+ "nvidia,tegra250-usbparams");
+ if (clk_node < 0)
+ return -FDT_ERR_MISSING;
+ rate = get_int(blob, clk_node, "osc-frequency", 0);
+ } while (rate != osc_frequency_mhz);
+
+ config->reg = (struct usb_ctlr *)get_addr(blob, node, "reg");
+ config->host_mode = get_int(blob, node, "host-mode", 0);
+ config->utmi = lookup_phandle(blob, node, "utmi") >= 0;
+ config->enabled = get_is_enabled(blob, node, 1);
+ config->periph_id = get_int(blob, node, "periph-id", -1);
+ if (config->periph_id == -1)
+ return -FDT_ERR_MISSING;
+
+ return get_int_array(blob, clk_node, "params", config->params,
+ PARAM_COUNT);
+}