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? -- Best Regards, Peter Chen -- To unsubscribe from this list: send the line "unsubscribe linux-usb" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html