On 01/10/2014 03:08 AM, Peter Chen wrote: > On Thu, Jan 09, 2014 at 02:45:24PM +0100, Marc Kleine-Budde wrote: >> On 01/08/2014 10:06 AM, Li Jun wrote: >>> Add OTG HNP and SRP operation functions implementation: >>> - charge vbus >>> - drive vbus >>> - connection signaling >>> - drive sof >>> - start data pulse >>> - add fsm timer >>> - delete fsm timer >>> - start host >>> - start gadget >>> >>> Signed-off-by: Li Jun <b47624@xxxxxxxxxxxxx> >>> --- >>> drivers/usb/chipidea/bits.h | 11 ++ >>> drivers/usb/chipidea/otg_fsm.c | 311 ++++++++++++++++++++++++++++++++++++++++ >>> drivers/usb/chipidea/otg_fsm.h | 8 + >>> 3 files changed, 330 insertions(+), 0 deletions(-) >>> >>> diff --git a/drivers/usb/chipidea/bits.h b/drivers/usb/chipidea/bits.h >>> index a857131..4347414 100644 >>> --- a/drivers/usb/chipidea/bits.h >>> +++ b/drivers/usb/chipidea/bits.h >>> @@ -44,9 +44,14 @@ >>> #define DEVICEADDR_USBADR (0x7FUL << 25) >>> >>> /* PORTSC */ >>> +#define PORTSC_CCS BIT(0) >>> +#define PORTSC_CSC BIT(1) >>> +#define PORTSC_PEC BIT(3) >>> +#define PORTSC_OCC BIT(5) >>> #define PORTSC_FPR BIT(6) >>> #define PORTSC_SUSP BIT(7) >>> #define PORTSC_HSP BIT(9) >>> +#define PORTSC_PP BIT(12) >>> #define PORTSC_PTC (0x0FUL << 16) >>> #define PORTSC_PHCD(d) ((d) ? BIT(22) : BIT(23)) >>> /* PTS and PTW for non lpm version only */ >>> @@ -55,6 +60,9 @@ >>> #define PORTSC_PTW BIT(28) >>> #define PORTSC_STS BIT(29) >>> >>> +#define PORTSC_W1C_BITS \ >>> + (PORTSC_CSC | PORTSC_PEC | PORTSC_OCC) >>> + >>> /* DEVLC */ >>> #define DEVLC_PSPD (0x03UL << 25) >>> #define DEVLC_PSPD_HS (0x02UL << 25) >>> @@ -69,7 +77,10 @@ >>> #define PTS_HSIC 4 >>> >>> /* OTGSC */ >>> +#define OTGSC_VD BIT(0) >>> +#define OTGSC_VC BIT(1) >>> #define OTGSC_IDPU BIT(5) >>> +#define OTGSC_HADP BIT(6) >>> #define OTGSC_ID BIT(8) >>> #define OTGSC_AVV BIT(9) >>> #define OTGSC_ASV BIT(10) >>> diff --git a/drivers/usb/chipidea/otg_fsm.c b/drivers/usb/chipidea/otg_fsm.c >>> index 1f8907d..31a046d 100644 >>> --- a/drivers/usb/chipidea/otg_fsm.c >>> +++ b/drivers/usb/chipidea/otg_fsm.c >>> @@ -19,12 +19,322 @@ >>> #include <linux/usb/otg-fsm.h> >>> #include <linux/usb/gadget.h> >>> #include <linux/usb/chipidea.h> >>> +#include <linux/regulator/consumer.h> >>> >>> #include "ci.h" >>> #include "bits.h" >>> #include "otg.h" >>> #include "otg_fsm.h" >>> >>> +static struct list_head active_timers; >>> + >>> +#define HA_DATA_PULSE 1 >>> + >>> +/* FSM timers */ >>> +struct ci_otg_fsm_timer *a_wait_vrise_tmr, *a_wait_vfall_tmr, *a_wait_bcon_tmr, >>> + *a_aidl_bdis_tmr, *a_bidl_adis_tmr, *b_ase0_brst_tmr, >>> + *b_se0_srp_tmr, *b_srp_fail_tmr, *b_data_pulse_tmr; >> >> IIRC the USB spec says there is only one OTG port per machine, but I >> think you shouldn't add new code that uses so many global variables, >> better embed these into a per device struct. >> > > Hi Marc, would you please list the spec (or link) that there is only > one OTG port per machine? Sorry I cannot find it quickly. However my motivation of this comment is that a new a subsystem/code should not be written with that "just a single otg is in a system" use-case in mind, as we've stumbled over the same problem in the past already[1]. Marc [1] There was a global usb phy. -- Pengutronix e.K. | Marc Kleine-Budde | Industrial Linux Solutions | Phone: +49-231-2826-924 | Vertretung West/Dortmund | Fax: +49-5121-206917-5555 | Amtsgericht Hildesheim, HRA 2686 | http://www.pengutronix.de |
Attachment:
signature.asc
Description: OpenPGP digital signature