int musb_register(struct musb_hdrc_platform_data *plat, void *bdata, void *ctl_regs) { struct musb **musbp; switch (plat->mode) { #ifdef CONFIG_MUSB_HOST case MUSB_HOST: musbp = &host; break; #endif #ifdef CONFIG_MUSB_GADGET case MUSB_PERIPHERAL: musbp = &gadget; break; #endif default: return -EINVAL; } *musbp = musb_init_controller(plat, (struct device *)bdata, ctl_regs); if (!musbp) { printf("Failed to init the controller\n"); return -EIO; } 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 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; }
static int dsps_set_mode(struct param_d *param, void *priv) { struct dsps_glue *glue = priv; if (glue->pdata.mode != MUSB_PORT_MODE_DUAL_ROLE) return -EBUSY; switch (glue->otgmode) { case 0: default: return -EINVAL; case 1: glue->pdata.mode = MUSB_PORT_MODE_HOST; break; case 2: glue->pdata.mode = MUSB_PORT_MODE_GADGET; break; } return musb_init_controller(&glue->musb, &glue->pdata); }
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; if (!host->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 == 0) printf("MUSB OTG\n"); return ret; }
static int ti_musb_host_probe(struct udevice *dev) { struct musb_host_data *host = dev_get_priv(dev); struct ti_musb_platdata *platdata = dev_get_platdata(dev); struct usb_bus_priv *priv = dev_get_uclass_priv(dev); struct omap_musb_board_data *otg_board_data; int ret; priv->desc_before_addr = true; otg_board_data = &platdata->otg_board_data; host->host = musb_init_controller(&platdata->plat, (struct device *)otg_board_data, platdata->base); if (!host->host) return -EIO; ret = musb_lowlevel_init(host); return ret; }
static int dsps_probe(struct device_d *dev) { struct musb_hdrc_platform_data *pdata; struct musb_hdrc_config *config; struct device_node *dn = dev->device_node; const struct dsps_musb_wrapper *wrp; struct dsps_glue *glue; int ret; ret = dev_get_drvdata(dev, (unsigned long *)&wrp); if (ret) return ret; if (!IS_ENABLED(CONFIG_USB_MUSB_HOST) && !IS_ENABLED(CONFIG_USB_MUSB_GADGET)) { dev_err(dev, "Both host and device driver disabled.\n"); return -ENODEV; } /* allocate glue */ glue = kzalloc(sizeof(*glue), GFP_KERNEL); if (!glue) { dev_err(dev, "unable to allocate glue memory\n"); return -ENOMEM; } glue->dev = dev; glue->wrp = wrp; dev->priv = glue; pdata = &glue->pdata; glue->musb.mregs = dev_request_mem_region(dev, 0); if (IS_ERR(glue->musb.mregs)) return PTR_ERR(glue->musb.mregs); glue->musb.ctrl_base = dev_request_mem_region(dev, 1); if (IS_ERR(glue->musb.ctrl_base)) return PTR_ERR(glue->musb.ctrl_base); glue->musb.controller = dev; config = &glue->config; pdata->config = config; pdata->platform_ops = &dsps_ops; config->num_eps = get_int_prop(dn, "mentor,num-eps"); config->ram_bits = get_int_prop(dn, "mentor,ram-bits"); pdata->mode = get_musb_port_mode(dev); /* DT keeps this entry in mA, musb expects it as per USB spec */ pdata->power = get_int_prop(dn, "mentor,power") / 2; config->multipoint = of_property_read_bool(dn, "mentor,multipoint"); if (pdata->mode == MUSB_PORT_MODE_DUAL_ROLE) { ret = dsps_register_otg_device(glue); if (ret) return ret; return 0; } return musb_init_controller(&glue->musb, pdata); }