setenv_hex("fdtsize", fdt_totalsize(fdt));
}
-static int karo_load_part(const char *part, void *addr, size_t len)
-{
- int ret;
- struct mtd_device *dev;
- struct part_info *part_info;
- u8 part_num;
- size_t actual;
-
- debug("Initializing mtd_parts\n");
- ret = mtdparts_init();
- if (ret)
- return ret;
-
- debug("Trying to find NAND partition '%s'\n", part);
- ret = find_dev_and_part(part, &dev, &part_num, &part_info);
- if (ret) {
- printf("Failed to find flash partition '%s': %d\n",
- part, ret);
-
- return ret;
- }
- debug("Found partition '%s': offset=%08x size=%08x\n",
- part, part_info->offset, part_info->size);
- if (part_info->size < len) {
- printf("Warning: partition '%s' smaller than requested size: %u; truncating data to %u byte\n",
- part, len, part_info->size);
- len = part_info->size;
- }
- debug("Reading NAND partition '%s' to %p\n", part, addr);
- ret = nand_read_skip_bad(&nand_info[0], part_info->offset, &len,
- &actual, len, addr);
- if (ret) {
- printf("Failed to load partition '%s' to %p\n", part, addr);
- return ret;
- }
- if (actual < len)
- printf("Read only %u of %u bytes due to bad blocks\n",
- actual, len);
-
- debug("Read %u byte from partition '%s' @ offset %08x\n",
- len, part, part_info->offset);
- return 0;
-}
-
static void *karo_fdt_load_dtb(void)
{
int ret;
ph = fdt_getprop(blob, off, name, NULL);
if (ph == NULL) {
- printf("Failed to find '%s' phandle in node '%s'\n", name,
+ debug("Failed to find '%s' phandle in node '%s'\n", name,
fdt_get_name(blob, off, NULL));
return -FDT_ERR_NOTFOUND;
}
} else if (otg_mode && strcmp(otg_mode, "otg") == 0) {
debug("Setting dr_mode to 'host'\n");
ret = fdt_setprop_string(blob, off, "dr_mode", "otg");
+ disable_phy_pins = 0;
} else {
if (otg_mode && strcmp(otg_mode, "none") != 0)
printf("Invalid 'otg_mode' setting '%s'; disabling usbotg port\n",
goto out;
ret = karo_fdt_disable_node_phandle(blob, node, phy);
+ } else if (disable_phy_pins) {
+ debug("Removing 'vbus-supply' from usbotg node\n");
+ fdt_delprop(blob, off, "vbus-supply");
}
+
out:
if (ret)
printf("Failed to update usbotg: %s\n", fdt_strerror(ret));
void karo_fdt_fixup_flexcan(void *blob, int xcvr_present)
{
int ret;
- const char *xcvr_status = xcvr_present ? "disabled" : NULL;
+ const char *xcvr_status = "disabled";
const char *otg_mode = getenv("otg_mode");
-#ifndef CONFIG_SYS_LVDS_IF
if (xcvr_present) {
if (karo_fdt_flexcan_enabled(blob)) {
- karo_fdt_set_lcd_pins(blob, "lcdif_23bit_pins_a");
- xcvr_status = NULL;
- } else {
+ if (!is_lvds()) {
+ debug("Changing LCD to use 23bits only\n");
+ karo_fdt_set_lcd_pins(blob, "lcdif_23bit_pins_a");
+ xcvr_status = NULL;
+ }
+ } else if (!is_lvds()) {
+ debug("Changing LCD to use 24bits\n");
karo_fdt_set_lcd_pins(blob, "lcdif_24bit_pins_a");
}
} else {
- karo_fdt_set_lcd_pins(blob, "lcdif_24bit_pins_a");
+ int off = fdt_path_offset(blob, "can0");
+
+ if (off >= 0)
+ fdt_delprop(blob, off, "xceiver-supply");
+ off = fdt_path_offset(blob, "can1");
+ if (off >= 0)
+ fdt_delprop(blob, off, "xceiver-supply");
+ if (!is_lvds())
+ karo_fdt_set_lcd_pins(blob, "lcdif_24bit_pins_a");
}
-#endif
+
if (otg_mode && strcmp(otg_mode, "host") == 0)
karo_fdt_enable_node(blob, "can1", 0);
return off;
}
+#ifdef CONFIG_SYS_LVDS_IF
int karo_fdt_get_lcd_bus_width(const void *blob, int default_width)
{
int off = fdt_path_offset(blob, "display");
}
return lvds_chan_mask;
}
+#endif
int karo_fdt_get_backlight_polarity(const void *blob)
{
- int off = fdt_path_offset(blob, "/backlight");
+#ifdef CONFIG_SYS_LVDS_IF
+ const char *backlight_node = "/backlight0";
+#else
+ const char *backlight_node = "/backlight";
+#endif
+ int off = fdt_path_offset(blob, "backlight"); /* first try alias */
const struct fdt_property *prop;
int len;
if (off < 0) {
- printf("/backlight node not found in DT\n");
- return off;
+ /*
+ * if no 'backlight' alias exists try finding '/backlight0'
+ * or '/backlight' depending on LVDS or not
+ */
+ off = fdt_path_offset(blob, backlight_node);
+ if (off < 0) {
+ printf("/backlight node not found in DT\n");
+ return off;
+ }
}
prop = fdt_get_property(blob, off, "pwms", &len);