Re: [PATCH 05/10] usb: chipidea: add OTG fsm operation functions implemenation.

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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


[Index of Archives]     [Linux Media]     [Linux Input]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Old Linux USB Devel Archive]

  Powered by Linux