int arch_misc_init(void) { #ifdef CONFIG_AM335X_USB0 musb_register(&otg0_plat, &otg0_board_data, (void *)USB0_OTG_BASE); #endif #ifdef CONFIG_AM335X_USB1 musb_register(&otg1_plat, &otg1_board_data, (void *)USB1_OTG_BASE); #endif return 0; }
int misc_init_r(void) { unsigned char keypad_matrix[64] = { 0 }; char reboot_mode[2] = { 0 }; unsigned char keys[3]; unsigned char data = 0; int rc; /* Power button reset init */ twl4030_power_reset_init(); /* Keypad */ twl4030_keypad_scan((unsigned char *)&keypad_matrix); keys[0] = twl4030_keypad_key((unsigned char *)&keypad_matrix, 0, 0); keys[1] = twl4030_keypad_key((unsigned char *)&keypad_matrix, 0, 1); keys[2] = twl4030_keypad_key((unsigned char *)&keypad_matrix, 0, 2); /* Reboot mode */ rc = omap_reboot_mode(reboot_mode, sizeof(reboot_mode)); if (keys[0]) reboot_mode[0] = 'r'; else if (keys[1]) reboot_mode[0] = 'b'; if (rc < 0 || reboot_mode[0] == 'o') { /* * When not rebooting, valid power on reasons are either the * power button, charger plug or USB plug. */ data |= twl4030_input_power_button(); data |= twl4030_input_charger(); data |= twl4030_input_usb(); if (!data) twl4030_power_off(); } if (reboot_mode[0] > 0 && isascii(reboot_mode[0])) { if (!env_get("reboot-mode")) env_set("reboot-mode", (char *)reboot_mode); } omap_reboot_mode_clear(); /* Serial number */ omap_die_id_serial(); /* MUSB */ musb_register(&musb_platform_data, &musb_board_data, (void *)MUSB_BASE); return 0; }
static int musb_usb_probe(struct udevice *dev) { struct musb_host_data *host = dev_get_priv(dev); struct usb_bus_priv *priv = dev_get_uclass_priv(dev); int ret; priv->desc_before_addr = true; #ifdef CONFIG_USB_MUSB_HOST host->host = musb_init_controller(&musb_plat, NULL, (void *)SUNXI_USB0_BASE); if (!host->host) return -EIO; ret = musb_lowlevel_init(host); if (!ret) printf("Allwinner mUSB OTG (Host)\n"); #else ret = musb_register(&musb_plat, NULL, (void *)SUNXI_USB0_BASE); if (!ret) printf("Allwinner mUSB OTG (Peripheral)\n"); #endif return ret; }
static void am3517_evm_musb_init(void) { /* * Set up USB clock/mode in the DEVCONF2 register. * USB2.0 PHY reference clock is 13 MHz */ clrsetbits_le32(&am35x_scm_general_regs->devconf2, CONF2_REFFREQ | CONF2_OTGMODE | CONF2_PHY_GPIOMODE, CONF2_REFFREQ_13MHZ | CONF2_SESENDEN | CONF2_VBDTCTEN | CONF2_DATPOL); musb_register(&musb_plat, &musb_board_data, (void *)AM35XX_IPSS_USBOTGSS_BASE); }
static void cm_t3517_musb_init(void) { /* * Set up USB clock/mode in the DEVCONF2 register. * USB2.0 PHY reference clock is 13 MHz */ clrsetbits_le32(&am35x_scm_general_regs->devconf2, CONF2_REFFREQ | CONF2_OTGMODE | CONF2_PHY_GPIOMODE, CONF2_REFFREQ_13MHZ | CONF2_SESENDEN | CONF2_VBDTCTEN | CONF2_DATPOL); if (musb_register(&cm_t3517_musb_pdata, &cm_t3517_musb_board_data, (void *)AM35XX_IPSS_USBOTGSS_BASE)) printf("Failed initializing AM35x MUSB!\n"); }
void sunxi_musb_board_init(void) { #ifdef CONFIG_USB_MUSB_HOST struct udevice *dev; /* * Bind the driver directly for now as musb linux kernel support is * still pending upstream so our dts files do not have the necessary * nodes yet. TODO: Remove this as soon as the dts nodes are in place * and bind by compatible instead. */ device_bind_driver(dm_root(), "sunxi-musb", "sunxi-musb", &dev); #else musb_register(&musb_plat, NULL, (void *)SUNXI_USB0_BASE); #endif }
static int musb_usb_probe(struct udevice *dev) { struct usb_bus_priv *priv = dev_get_uclass_priv(dev); struct pic32_musb_data *pdata = dev_get_priv(dev); struct musb_host_data *mdata = &pdata->mdata; struct fdt_resource mc, glue; void *fdt = (void *)gd->fdt_blob; int node = dev->of_offset; void __iomem *mregs; int ret; priv->desc_before_addr = true; ret = fdt_get_named_resource(fdt, node, "reg", "reg-names", "mc", &mc); if (ret < 0) { printf("pic32-musb: resource \"mc\" not found\n"); return ret; } ret = fdt_get_named_resource(fdt, node, "reg", "reg-names", "control", &glue); if (ret < 0) { printf("pic32-musb: resource \"control\" not found\n"); return ret; } mregs = ioremap(mc.start, fdt_resource_size(&mc)); pdata->musb_glue = ioremap(glue.start, fdt_resource_size(&glue)); /* init controller */ #ifdef CONFIG_USB_MUSB_HOST mdata->host = musb_init_controller(&pic32_musb_plat, &pdata->dev, mregs); if (!mdata->host) return -EIO; ret = musb_lowlevel_init(mdata); #else pic32_musb_plat.mode = MUSB_PERIPHERAL; ret = musb_register(&pic32_musb_plat, &pdata->dev, mregs); #endif if (ret == 0) printf("PIC32 MUSB OTG\n"); return ret; }
int misc_init_r(void) { unsigned char keypad_matrix[64] = { 0 }; char serial_string[17] = { 0 }; char reboot_mode[2] = { 0 }; u32 dieid[4] = { 0 }; unsigned char keys[3]; unsigned char data = 0; /* Power button reset init */ twl4030_power_reset_init(); /* Keypad */ twl4030_keypad_scan((unsigned char *)&keypad_matrix); keys[0] = twl4030_keypad_key((unsigned char *)&keypad_matrix, 0, 0); keys[1] = twl4030_keypad_key((unsigned char *)&keypad_matrix, 0, 1); keys[2] = twl4030_keypad_key((unsigned char *)&keypad_matrix, 0, 2); /* Reboot mode */ reboot_mode[0] = omap_reboot_mode(); if (keys[0]) reboot_mode[0] = 'r'; else if (keys[1]) reboot_mode[0] = 'b'; if (reboot_mode[0] > 0 && isascii(reboot_mode[0])) { if (!getenv("reboot-mode")) setenv("reboot-mode", (char *)reboot_mode); omap_reboot_mode_clear(); } else { /* * When not rebooting, valid power on reasons are either the * power button, charger plug or USB plug. */ data |= twl4030_input_power_button(); data |= twl4030_input_charger(); data |= twl4030_input_usb(); if (!data) twl4030_power_off(); } /* Serial number */ get_dieid((u32 *)&dieid); if (!getenv("serial#")) { snprintf(serial_string, sizeof(serial_string), "%08x%08x", dieid[0], dieid[3]); setenv("serial#", serial_string); } /* MUSB */ musb_register(&musb_platform_data, &musb_board_data, (void *)MUSB_BASE); return 0; }
/* * Routine: misc_init_r * Description: Configure board specific parts */ int misc_init_r(void) { struct gpio *gpio5_base = (struct gpio *)OMAP34XX_GPIO5_BASE; struct gpio *gpio6_base = (struct gpio *)OMAP34XX_GPIO6_BASE; struct control_prog_io *prog_io_base = (struct control_prog_io *)OMAP34XX_CTRL_BASE; /* Enable i2c2 pullup resisters */ writel(~(PRG_I2C2_PULLUPRESX), &prog_io_base->io1); switch (get_board_revision()) { case REVISION_AXBX: printf("Beagle Rev Ax/Bx\n"); setenv("beaglerev", "AxBx"); break; case REVISION_CX: printf("Beagle Rev C1/C2/C3\n"); setenv("beaglerev", "Cx"); MUX_BEAGLE_C(); break; case REVISION_C4: printf("Beagle Rev C4\n"); setenv("beaglerev", "C4"); MUX_BEAGLE_C(); /* Set VAUX2 to 1.8V for EHCI PHY */ twl4030_pmrecv_vsel_cfg(TWL4030_PM_RECEIVER_VAUX2_DEDICATED, TWL4030_PM_RECEIVER_VAUX2_VSEL_18, TWL4030_PM_RECEIVER_VAUX2_DEV_GRP, TWL4030_PM_RECEIVER_DEV_GRP_P1); break; case REVISION_XM_AB: printf("Beagle xM Rev A/B\n"); setenv("beaglerev", "xMAB"); MUX_BEAGLE_XM(); /* Set VAUX2 to 1.8V for EHCI PHY */ twl4030_pmrecv_vsel_cfg(TWL4030_PM_RECEIVER_VAUX2_DEDICATED, TWL4030_PM_RECEIVER_VAUX2_VSEL_18, TWL4030_PM_RECEIVER_VAUX2_DEV_GRP, TWL4030_PM_RECEIVER_DEV_GRP_P1); break; case REVISION_XM_C: printf("Beagle xM Rev C\n"); setenv("beaglerev", "xMC"); MUX_BEAGLE_XM(); /* Set VAUX2 to 1.8V for EHCI PHY */ twl4030_pmrecv_vsel_cfg(TWL4030_PM_RECEIVER_VAUX2_DEDICATED, TWL4030_PM_RECEIVER_VAUX2_VSEL_18, TWL4030_PM_RECEIVER_VAUX2_DEV_GRP, TWL4030_PM_RECEIVER_DEV_GRP_P1); break; default: printf("Beagle unknown 0x%02x\n", get_board_revision()); MUX_BEAGLE_XM(); /* Set VAUX2 to 1.8V for EHCI PHY */ twl4030_pmrecv_vsel_cfg(TWL4030_PM_RECEIVER_VAUX2_DEDICATED, TWL4030_PM_RECEIVER_VAUX2_VSEL_18, TWL4030_PM_RECEIVER_VAUX2_DEV_GRP, TWL4030_PM_RECEIVER_DEV_GRP_P1); } switch (get_expansion_id()) { case TINCANTOOLS_ZIPPY: printf("Recognized Tincantools Zippy board (rev %d %s)\n", expansion_config.revision, expansion_config.fab_revision); MUX_TINCANTOOLS_ZIPPY(); setenv("buddy", "zippy"); break; case TINCANTOOLS_ZIPPY2: printf("Recognized Tincantools Zippy2 board (rev %d %s)\n", expansion_config.revision, expansion_config.fab_revision); MUX_TINCANTOOLS_ZIPPY(); setenv("buddy", "zippy2"); break; case TINCANTOOLS_TRAINER: printf("Recognized Tincantools Trainer board (rev %d %s)\n", expansion_config.revision, expansion_config.fab_revision); MUX_TINCANTOOLS_ZIPPY(); MUX_TINCANTOOLS_TRAINER(); setenv("buddy", "trainer"); break; case TINCANTOOLS_SHOWDOG: printf("Recognized Tincantools Showdow board (rev %d %s)\n", expansion_config.revision, expansion_config.fab_revision); /* Place holder for DSS2 definition for showdog lcd */ setenv("defaultdisplay", "showdoglcd"); setenv("buddy", "showdog"); break; case KBADC_BEAGLEFPGA: printf("Recognized KBADC Beagle FPGA board\n"); MUX_KBADC_BEAGLEFPGA(); setenv("buddy", "beaglefpga"); break; case LW_BEAGLETOUCH: printf("Recognized Liquidware BeagleTouch board\n"); setenv("buddy", "beagletouch"); break; case BRAINMUX_LCDOG: printf("Recognized Brainmux LCDog board\n"); setenv("buddy", "lcdog"); break; case BRAINMUX_LCDOGTOUCH: printf("Recognized Brainmux LCDog Touch board\n"); setenv("buddy", "lcdogtouch"); break; case BBTOYS_WIFI: printf("Recognized BeagleBoardToys WiFi board\n"); MUX_BBTOYS_WIFI() setenv("buddy", "bbtoys-wifi"); break;; case BBTOYS_VGA: printf("Recognized BeagleBoardToys VGA board\n"); break;; case BBTOYS_LCD: printf("Recognized BeagleBoardToys LCD board\n"); break;; case BCT_BRETTL3: printf("Recognized bct electronic GmbH brettl3 board\n"); break; case BCT_BRETTL4: printf("Recognized bct electronic GmbH brettl4 board\n"); break; case LSR_COM6L_ADPT: printf("Recognized LSR COM6L Adapter Board\n"); MUX_BBTOYS_WIFI() setenv("buddy", "lsr-com6l-adpt"); break; case BEAGLE_NO_EEPROM: printf("No EEPROM on expansion board\n"); setenv("buddy", "none"); break; default: printf("Unrecognized expansion board: %x\n", expansion_config.device_vendor); setenv("buddy", "unknown"); } if (expansion_config.content == 1) setenv(expansion_config.env_var, expansion_config.env_setting); twl4030_power_init(); switch (get_board_revision()) { case REVISION_XM_AB: twl4030_led_init(TWL4030_LED_LEDEN_LEDBON); break; default: twl4030_led_init(TWL4030_LED_LEDEN_LEDAON | TWL4030_LED_LEDEN_LEDBON); break; } /* Set GPIO states before they are made outputs */ writel(GPIO23 | GPIO10 | GPIO8 | GPIO2 | GPIO1, &gpio6_base->setdataout); writel(GPIO31 | GPIO30 | GPIO29 | GPIO28 | GPIO22 | GPIO21 | GPIO15 | GPIO14 | GPIO13 | GPIO12, &gpio5_base->setdataout); /* Configure GPIOs to output */ writel(~(GPIO23 | GPIO10 | GPIO8 | GPIO2 | GPIO1), &gpio6_base->oe); writel(~(GPIO31 | GPIO30 | GPIO29 | GPIO28 | GPIO22 | GPIO21 | GPIO15 | GPIO14 | GPIO13 | GPIO12), &gpio5_base->oe); dieid_num_r(); #ifdef CONFIG_VIDEO_OMAP3 beagle_dvi_pup(); beagle_display_init(); omap3_dss_enable(); #endif #ifdef CONFIG_USB_MUSB_OMAP2PLUS musb_register(&musb_plat, &musb_board_data, (void *)MUSB_BASE); #endif return 0; }
/* * Routine: misc_init_r * Description: Configure board specific parts */ int misc_init_r(void) { struct gpio *gpio5_base = (struct gpio *)OMAP34XX_GPIO5_BASE; struct gpio *gpio6_base = (struct gpio *)OMAP34XX_GPIO6_BASE; struct control_prog_io *prog_io_base = (struct control_prog_io *)OMAP34XX_CTRL_BASE; bool generate_fake_mac = false; u32 value; /* Enable i2c2 pullup resisters */ value = readl(&prog_io_base->io1); value &= ~(PRG_I2C2_PULLUPRESX); writel(value, &prog_io_base->io1); printf("WINGZ energy \nIoT group \n CDAC Bangalore\n"); setenv("musb", "musb_hdrc.fifo_mode=5"); MUX_WINGZ_C(); /* Set VAUX2 to 1.8V for EHCI PHY */ twl4030_pmrecv_vsel_cfg(TWL4030_PM_RECEIVER_VAUX2_DEDICATED, TWL4030_PM_RECEIVER_VAUX2_VSEL_18, TWL4030_PM_RECEIVER_VAUX2_DEV_GRP, TWL4030_PM_RECEIVER_DEV_GRP_P1); if (expansion_config.content == 1) setenv(expansion_config.env_var, expansion_config.env_setting); twl4030_power_init(); twl4030_led_init(TWL4030_LED_LEDEN_LEDAON | TWL4030_LED_LEDEN_LEDBON); /* Set GPIO states before they are made outputs */ writel(GPIO23 | GPIO10 | GPIO8 | GPIO2 | GPIO1, &gpio6_base->setdataout); writel(GPIO31 | GPIO30 | GPIO29 | GPIO28 | GPIO22 | GPIO21 | GPIO15 | GPIO14 | GPIO13 | GPIO12, &gpio5_base->setdataout); /* Configure GPIOs to output */ writel(~(GPIO23 | GPIO10 | GPIO8 | GPIO2 | GPIO1), &gpio6_base->oe); writel(~(GPIO31 | GPIO30 | GPIO29 | GPIO28 | GPIO22 | GPIO21 | GPIO15 | GPIO14 | GPIO13 | GPIO12), &gpio5_base->oe); dieid_num_r(); #ifdef CONFIG_VIDEO_OMAP3 gpio_request(170, "dvi"); gpio_direction_output(170, 0); gpio_set_value(170, 1); //beagle_display_init(); omap3_dss_venc_config(&venc_config_std_tv, VENC_HEIGHT, VENC_WIDTH); omap3_dss_panel_config(&dvid_cfg); omap3_dss_enable(); #endif #ifdef CONFIG_USB_MUSB_OMAP2PLUS musb_register(&musb_plat, &musb_board_data, (void *)MUSB_BASE); #endif if (generate_fake_mac) { u32 id[4]; get_dieid(id); usb_fake_mac_from_die_id(id); } return 0; }
int board_eth_init(bd_t *bis) { int rv, ret = 0; uint8_t mac_addr[6]; uint32_t mac_hi, mac_lo; /* try reading mac address from efuse */ mac_lo = readl(&cdev->macid0l); mac_hi = readl(&cdev->macid0h); mac_addr[0] = mac_hi & 0xFF; mac_addr[1] = (mac_hi & 0xFF00) >> 8; mac_addr[2] = (mac_hi & 0xFF0000) >> 16; mac_addr[3] = (mac_hi & 0xFF000000) >> 24; mac_addr[4] = mac_lo & 0xFF; mac_addr[5] = (mac_lo & 0xFF00) >> 8; #if (defined(CONFIG_DRIVER_TI_CPSW) && !defined(CONFIG_SPL_BUILD)) || \ (defined(CONFIG_SPL_ETH_SUPPORT) && defined(CONFIG_SPL_BUILD)) if (!getenv("ethaddr")) { debug("<ethaddr> not set. Reading from E-fuse\n"); if (!is_valid_ether_addr(mac_addr)) { u_int32_t i; debug("Did not find a valid mac address in e-fuse. " "Trying the one present in EEPROM\n"); for (i = 0; i < HDR_ETH_ALEN; i++) mac_addr[i] = header.mac_addr[0][i]; } if (is_valid_ether_addr(mac_addr)) eth_setenv_enetaddr("ethaddr", mac_addr); else { printf("Caution: Using hardcoded mac address. " "Set <ethaddr> variable to overcome this.\n"); } } if (board_is_bone()) { writel(MII_MODE_ENABLE, &cdev->miisel); cpsw_slaves[0].phy_if = cpsw_slaves[1].phy_if = PHY_INTERFACE_MODE_MII; } else { writel(RGMII_MODE_ENABLE, &cdev->miisel); cpsw_slaves[0].phy_if = cpsw_slaves[1].phy_if = PHY_INTERFACE_MODE_RGMII; } rv = cpsw_register(&cpsw_data); if (rv < 0) { ret = -1; printf("Error %d registering CPSW switch\n", rv); } #endif #if defined(CONFIG_USB_ETHER) && \ (!defined(CONFIG_SPL_BUILD) || defined(CONFIG_SPL_USB_ETH_SUPPORT)) if (is_valid_ether_addr(mac_addr)) eth_setenv_enetaddr("usbnet_devaddr", mac_addr); /* * SPL does not call arch_misc_init and the ROM only supports using * USB0 for boot. */ #if defined(CONFIG_SPL_BUILD) && defined(CONFIG_SPL_USB_ETH_SUPPORT) rv = musb_register(&otg0_plat, &otg0_board_data, (void *)AM335X_USB0_OTG_BASE); if (rv < 0) { printf("Error %d registering MUSB device\n", rv); return -1; } #endif rv = usb_eth_initialize(bis); if (rv < 0) { printf("Error %d registering USB_ETHER\n", rv); return -1; } #endif return ret; }