示例#1
0
int usb_open(struct usb *usb, int init,
				struct proc_specific_functions *proc_ops)
{
	struct per_handle *boot;
	u32 device;
	u16 options = 1;
	int n;

	/*clear global usb structure*/
	memset(usb, 0, sizeof(*usb));

	local_proc_ops = proc_ops;

	if (init) {
		device = DEVICE_USB;
		usb->dread.config_object = NULL;
		usb->dread.options = &options;
		usb->dread.device_type = DEVICE_USB;

		usb->dwrite.config_object = NULL;
		usb->dwrite.options = &options;
		usb->dwrite.device_type = DEVICE_USB;

#if defined(CONFIG_IS_OMAP4)
		/* Bulk transfers default to DMA mode */
		usb->dread.xfer_mode = XFER_MODE_DMA;
		usb->dwrite.xfer_mode = XFER_MODE_DMA;
#endif

		n = rom_get_device_data((void *)&usb->dread.device_data);
		if (n)
			return n;

		usb->dwrite.device_data = usb->dread.device_data;
	} else {
		/* get peripheral device descriptor
		that was used during rom usb boot */
		n = rom_get_per_device(&boot);
		if (n)
			return n;

		device = boot->device_type;
		memcpy(&usb->dread, boot, sizeof(struct per_handle));
		memcpy(&usb->dwrite, boot, sizeof(struct per_handle));
	}


	/* get rom usb driver */
	n = rom_get_per_driver(&usb->io, device);
	if (n)
		return n;

	if (init)
		usb_init(usb);

	return 0;
}
示例#2
0
int usb_open(struct usb *usb)
{
	int (*rom_get_per_driver)(struct per_driver **io, u32 device_type);
	int (*rom_get_per_device)(struct per_handle **rh);
	struct per_handle *boot;
	int n;
        u32 base;

	memset(usb, 0, sizeof(*usb));


        if (get_omap_rev() >= OMAP_4460_ES1_DOT_0)
                base = PUBLIC_API_BASE_4460;
        else
                base = PUBLIC_API_BASE_4430;

	rom_get_per_driver = API(base + PUBLIC_GET_DRIVER_PER_OFFSET);
	rom_get_per_device = API(base + PUBLIC_GET_DEVICE_PER_OFFSET);

	n = rom_get_per_device(&boot);
	if (n)
		return n;

	if ((boot->device_type != DEVICE_USB) &&
	    (boot->device_type != DEVICE_USBEXT))
		return -1;

	n = rom_get_per_driver(&usb->io, boot->device_type);
	if (n)
		return n;

	usb->dread.xfer_mode = boot->xfer_mode;
	usb->dread.options = boot->options;
	usb->dread.device_type = boot->device_type;

	usb->dwrite.xfer_mode = boot->xfer_mode;
	usb->dwrite.options = boot->options;
	usb->dwrite.device_type = boot->device_type;

	return 0;
}