static int xenon_sdhci_ofdata_to_platdata(struct udevice *dev) { struct sdhci_host *host = dev_get_priv(dev); struct xenon_sdhci_priv *priv = dev_get_priv(dev); const char *name; host->name = dev->name; host->ioaddr = (void *)devfdt_get_addr(dev); if (device_is_compatible(dev, "marvell,armada-3700-sdhci")) priv->pad_ctrl_reg = (void *)devfdt_get_addr_index(dev, 1); name = fdt_getprop(gd->fdt_blob, dev_of_offset(dev), "marvell,pad-type", NULL); if (name) { if (0 == strncmp(name, "sd", 2)) { priv->pad_type = SOC_PAD_SD; } else if (0 == strncmp(name, "fixed-1-8v", 10)) { priv->pad_type = SOC_PAD_FIXED_1_8V; } else { printf("Unsupported SOC PHY PAD ctrl type %s\n", name); return -EINVAL; } } return 0; }
static int xhci_usb_probe(struct udevice *dev) { struct mvebu_xhci_platdata *plat = dev_get_platdata(dev); struct mvebu_xhci *ctx = dev_get_priv(dev); struct xhci_hcor *hcor; int len, ret; struct udevice *regulator; ctx->hcd = (struct xhci_hccr *)plat->hcd_base; len = HC_LENGTH(xhci_readl(&ctx->hcd->cr_capbase)); hcor = (struct xhci_hcor *)((uintptr_t)ctx->hcd + len); ret = device_get_supply_regulator(dev, "vbus-supply", ®ulator); if (!ret) { ret = regulator_set_enable(regulator, true); if (ret) { printf("Failed to turn ON the VBUS regulator\n"); return ret; } } /* Enable USB xHCI (VBUS, reset etc) in board specific code */ board_xhci_enable(devfdt_get_addr_index(dev, 1)); return xhci_register(dev, ctx->hcd, hcor); }
fdt_addr_t dev_read_addr_index(struct udevice *dev, int index) { if (ofnode_is_np(dev_ofnode(dev))) return ofnode_get_addr_index(dev_ofnode(dev), index); else return devfdt_get_addr_index(dev, index); }
static void *map_syscon_chipselects(struct udevice *bus) { #if CONFIG_IS_ENABLED(SYSCON) struct udevice *syscon; struct regmap *regmap; const fdt32_t *cell; int len, err; err = uclass_get_device_by_phandle(UCLASS_SYSCON, bus, "syscon-chipselects", &syscon); if (err) { debug("%s: unable to find syscon device (%d)\n", __func__, err); return NULL; } regmap = syscon_get_regmap(syscon); if (IS_ERR(regmap)) { debug("%s: unable to find regmap (%ld)\n", __func__, PTR_ERR(regmap)); return NULL; } cell = fdt_getprop(gd->fdt_blob, dev_of_offset(bus), "syscon-chipselects", &len); if (len < 2*sizeof(fdt32_t)) { debug("%s: offset not available\n", __func__); return NULL; } return fdtdec_get_number(cell + 1, 1) + regmap_get_range(regmap, 0); #else fdt_addr_t addr; addr = devfdt_get_addr_index(bus, 2); return (addr == FDT_ADDR_T_NONE) ? NULL : map_physmem(addr, 0, MAP_NOCACHE); #endif }
static int dwc_ahci_ofdata_to_platdata(struct udevice *dev) { struct dwc_ahci_priv *priv = dev_get_priv(dev); struct scsi_platdata *plat = dev_get_uclass_platdata(dev); fdt_addr_t addr; plat->max_id = fdtdec_get_uint(gd->fdt_blob, dev_of_offset(dev), "max-id", CONFIG_SYS_SCSI_MAX_SCSI_ID); plat->max_lun = fdtdec_get_uint(gd->fdt_blob, dev_of_offset(dev), "max-lun", CONFIG_SYS_SCSI_MAX_LUN); priv->base = map_physmem(devfdt_get_addr(dev), sizeof(void *), MAP_NOCACHE); addr = devfdt_get_addr_index(dev, 1); if (addr != FDT_ADDR_T_NONE) { priv->wrapper_base = map_physmem(addr, sizeof(void *), MAP_NOCACHE); } else { priv->wrapper_base = NULL; } return 0; }
static int ti_musb_ofdata_to_platdata(struct udevice *dev) { struct ti_musb_platdata *platdata = dev_get_platdata(dev); const void *fdt = gd->fdt_blob; int node = dev_of_offset(dev); int phys; int ctrl_mod; int usb_index; platdata->base = (void *)devfdt_get_addr_index(dev, 1); phys = fdtdec_lookup_phandle(fdt, node, "phys"); ctrl_mod = fdtdec_lookup_phandle(fdt, phys, "ti,ctrl_mod"); platdata->ctrl_mod_base = (void *)fdtdec_get_addr(fdt, ctrl_mod, "reg"); usb_index = ti_musb_get_usb_index(node); switch (usb_index) { case 1: platdata->ctrl_mod_base += AM335X_USB1_CTRL; case 0: default: break; } platdata->musb_config.multipoint = fdtdec_get_int(fdt, node, "mentor,multipoint", -1); if (platdata->musb_config.multipoint < 0) { pr_err("MUSB multipoint DT entry missing\n"); return -ENOENT; } platdata->musb_config.dyn_fifo = 1; platdata->musb_config.num_eps = fdtdec_get_int(fdt, node, "mentor,num-eps", -1); if (platdata->musb_config.num_eps < 0) { pr_err("MUSB num-eps DT entry missing\n"); return -ENOENT; } platdata->musb_config.ram_bits = fdtdec_get_int(fdt, node, "mentor,ram-bits", -1); if (platdata->musb_config.ram_bits < 0) { pr_err("MUSB ram-bits DT entry missing\n"); return -ENOENT; } platdata->otg_board_data.set_phy_power = ti_musb_set_phy_power; platdata->otg_board_data.dev = dev; platdata->plat.config = &platdata->musb_config; platdata->plat.power = fdtdec_get_int(fdt, node, "mentor,power", -1); if (platdata->plat.power < 0) { pr_err("MUSB mentor,power DT entry missing\n"); return -ENOENT; } platdata->plat.platform_ops = &musb_dsps_ops; platdata->plat.board_data = &platdata->otg_board_data; return 0; }