Ejemplo n.º 1
0
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;
}
Ejemplo n.º 2
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;
}
Ejemplo n.º 3
0
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;
}
Ejemplo n.º 4
0
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);
}
Ejemplo n.º 5
0
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;
}
Ejemplo n.º 6
0
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;
}
Ejemplo n.º 7
0
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);
}