summaryrefslogtreecommitdiffstats
path: root/drivers/usb/gadget/mv_udc.h
diff options
context:
space:
mode:
authorNeil Zhang <zhangwm@marvell.com>2011-10-12 10:49:24 +0200
committerFelipe Balbi <balbi@ti.com>2011-10-13 19:41:56 +0200
commitdde34cc5019b51088c18ca789d4b1a20cf9bc617 (patch)
tree8d9032db3b0ed2a21364c073cd327c46665c383c /drivers/usb/gadget/mv_udc.h
parentusb: gadget: renesas_usbhs: fix compile warning (diff)
downloadlinux-dde34cc5019b51088c18ca789d4b1a20cf9bc617.tar.xz
linux-dde34cc5019b51088c18ca789d4b1a20cf9bc617.zip
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>
Diffstat (limited to 'drivers/usb/gadget/mv_udc.h')
-rw-r--r--drivers/usb/gadget/mv_udc.h17
1 files changed, 14 insertions, 3 deletions
diff --git a/drivers/usb/gadget/mv_udc.h b/drivers/usb/gadget/mv_udc.h
index 65f1f7c3bd4e..d3d26454b8bb 100644
--- a/drivers/usb/gadget/mv_udc.h
+++ b/drivers/usb/gadget/mv_udc.h
@@ -1,3 +1,11 @@
+/*
+ * 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_UDC_H
#define __MV_UDC_H
@@ -201,7 +209,12 @@ struct mv_udc {
remote_wakeup:1,
softconnected:1,
force_fs:1;
- struct clk *clk;
+
+ struct mv_usb_platform_data *pdata;
+
+ /* some SOC has mutiple clock sources for USB*/
+ unsigned int clknum;
+ struct clk *clk[0];
};
/* endpoint data structure */
@@ -289,6 +302,4 @@ struct mv_dtd {
struct mv_dtd *next_dtd_virt;
};
-extern int mv_udc_phy_init(unsigned int base);
-
#endif