2
0
mirror of https://github.com/edk2-porting/linux-next.git synced 2024-12-19 02:34:01 +08:00
linux-next/include/linux/platform_data/mv_usb.h
Neil Zhang dde34cc501 usb: gadget: mv_udc: refine the driver structure
This patch do the following things:

1. Add header and Copyright for marvell usb driver.
2. Add mv_usb.h in include/linux/platform_data, make the driver
   fits all the marvell platform using the same ChipIdea usb ip.
3. Some SOC may has mutiple clock sources, so let me define it
   in mv_usb_platform_data and give two helper functions named
   udc_clock_enable/udc_clock_disable to deal with the clocks.
4. Different SOCs will have some difference in PHY initialization,
   so we will remove file mv_udc_phy.c and add two funtions in
   mv_usb_platform_data, let the platform relative driver to realize it.
5. Rewrite probe function according to the modification list above. Find
   it will kernel panic when probe failed. The root cause is as follows:
	When probe failed, the error handle may call device_unregister()
	which in return will call gadget_release.In current code,
	gadget_release have two issues:
		1: the_controller is a NULL pointer.
		2: if we free udc here, then the following code in probe
		   will access NULL pointer.

Signed-off-by: Neil Zhang <zhangwm@marvell.com>
Signed-off-by: Felipe Balbi <balbi@ti.com>
2011-10-13 20:41:56 +03:00

51 lines
1.1 KiB
C

/*
* Copyright (C) 2011 Marvell International Ltd. All rights reserved.
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
* Free Software Foundation; either version 2 of the License, or (at your
* option) any later version.
*/
#ifndef __MV_PLATFORM_USB_H
#define __MV_PLATFORM_USB_H
enum pxa_ehci_type {
EHCI_UNDEFINED = 0,
PXA_U2OEHCI, /* pxa 168, 9xx */
PXA_SPH, /* pxa 168, 9xx SPH */
MMP3_HSIC, /* mmp3 hsic */
MMP3_FSIC, /* mmp3 fsic */
};
enum {
MV_USB_MODE_OTG,
MV_USB_MODE_HOST,
};
enum {
VBUS_LOW = 0,
VBUS_HIGH = 1 << 0,
};
struct mv_usb_addon_irq {
unsigned int irq;
int (*poll)(void);
};
struct mv_usb_platform_data {
unsigned int clknum;
char **clkname;
struct mv_usb_addon_irq *id; /* Only valid for OTG. ID pin change*/
struct mv_usb_addon_irq *vbus; /* valid for OTG/UDC. VBUS change*/
/* only valid for HCD. OTG or Host only*/
unsigned int mode;
int (*phy_init)(unsigned int regbase);
void (*phy_deinit)(unsigned int regbase);
int (*set_vbus)(unsigned int vbus);
};
#endif