diff mbox

[RFC,v2,02/13] usb: otg-fsm: support multiple instances

Message ID 1429008120-5395-3-git-send-email-rogerq@ti.com (mailing list archive)
State New, archived
Headers show

Commit Message

Roger Quadros April 14, 2015, 10:41 a.m. UTC
Move the state_changed variable into struct otg_fsm
so that we can support multiple instances.

Signed-off-by: Roger Quadros <rogerq@ti.com>
---
 drivers/usb/common/usb-otg-fsm.c | 10 ++++------
 include/linux/usb/otg-fsm.h      |  1 +
 2 files changed, 5 insertions(+), 6 deletions(-)

Comments

Peter Chen April 16, 2015, 11:36 a.m. UTC | #1
On Tue, Apr 14, 2015 at 01:41:49PM +0300, Roger Quadros wrote:
> Move the state_changed variable into struct otg_fsm
> so that we can support multiple instances.

OTG device has only one port. See 3.1.1.
If you go to pass OTG Certification, the lab requires that there is only
one port at your board.

> 
> Signed-off-by: Roger Quadros <rogerq@ti.com>
> ---
>  drivers/usb/common/usb-otg-fsm.c | 10 ++++------
>  include/linux/usb/otg-fsm.h      |  1 +
>  2 files changed, 5 insertions(+), 6 deletions(-)
> 
> diff --git a/drivers/usb/common/usb-otg-fsm.c b/drivers/usb/common/usb-otg-fsm.c
> index 1736bbe..0caa37b 100644
> --- a/drivers/usb/common/usb-otg-fsm.c
> +++ b/drivers/usb/common/usb-otg-fsm.c
> @@ -61,8 +61,6 @@ static int otg_set_protocol(struct otg_fsm *fsm, int protocol)
>  	return 0;
>  }
>  
> -static int state_changed;
> -
>  /* Called when leaving a state.  Do state clean up jobs here */
>  static void otg_leave_state(struct otg_fsm *fsm, enum usb_otg_state old_state)
>  {
> @@ -123,7 +121,7 @@ static void otg_leave_state(struct otg_fsm *fsm, enum usb_otg_state old_state)
>  /* Called when entering a state */
>  static int otg_set_state(struct otg_fsm *fsm, enum usb_otg_state new_state)
>  {
> -	state_changed = 1;
> +	fsm->state_changed = 1;
>  	if (fsm->otg->state == new_state)
>  		return 0;
>  	VDBG("Set state: %s\n", usb_otg_state_string(new_state));
> @@ -255,7 +253,7 @@ int otg_statemachine(struct otg_fsm *fsm)
>  	mutex_lock(&fsm->lock);
>  
>  	state = fsm->otg->state;
> -	state_changed = 0;
> +	fsm->state_changed = 0;
>  	/* State machine state change judgement */
>  
>  	switch (state) {
> @@ -368,7 +366,7 @@ int otg_statemachine(struct otg_fsm *fsm)
>  	}
>  	mutex_unlock(&fsm->lock);
>  
> -	VDBG("quit statemachine, changed = %d\n", state_changed);
> -	return state_changed;
> +	VDBG("quit statemachine, changed = %d\n", fsm->state_changed);
> +	return fsm->state_changed;
>  }
>  EXPORT_SYMBOL_GPL(otg_statemachine);
> diff --git a/include/linux/usb/otg-fsm.h b/include/linux/usb/otg-fsm.h
> index c5b74c5..85a9150 100644
> --- a/include/linux/usb/otg-fsm.h
> +++ b/include/linux/usb/otg-fsm.h
> @@ -183,6 +183,7 @@ struct otg_fsm {
>  	/* Current usb protocol used: 0:undefine; 1:host; 2:client */
>  	int protocol;
>  	struct mutex lock;
> +	bool state_changed;
>  };
>  
>  struct otg_fsm_ops {
> -- 
> 2.1.0
>
Roger Quadros April 16, 2015, 11:58 a.m. UTC | #2
On 16/04/15 14:36, Peter Chen wrote:
> On Tue, Apr 14, 2015 at 01:41:49PM +0300, Roger Quadros wrote:
>> Move the state_changed variable into struct otg_fsm
>> so that we can support multiple instances.
> 
> OTG device has only one port. See 3.1.1.
> If you go to pass OTG Certification, the lab requires that there is only
> one port at your board.
> 

We're not breaking OTG compliance by this ;).
Moreover this structure is not limited to OTG but for DRD (dual-role) use as well.
We can have multiple DRD ports per board.

cheers,
-roger

>>
>> Signed-off-by: Roger Quadros <rogerq@ti.com>
>> ---
>>  drivers/usb/common/usb-otg-fsm.c | 10 ++++------
>>  include/linux/usb/otg-fsm.h      |  1 +
>>  2 files changed, 5 insertions(+), 6 deletions(-)
>>
>> diff --git a/drivers/usb/common/usb-otg-fsm.c b/drivers/usb/common/usb-otg-fsm.c
>> index 1736bbe..0caa37b 100644
>> --- a/drivers/usb/common/usb-otg-fsm.c
>> +++ b/drivers/usb/common/usb-otg-fsm.c
>> @@ -61,8 +61,6 @@ static int otg_set_protocol(struct otg_fsm *fsm, int protocol)
>>  	return 0;
>>  }
>>  
>> -static int state_changed;
>> -
>>  /* Called when leaving a state.  Do state clean up jobs here */
>>  static void otg_leave_state(struct otg_fsm *fsm, enum usb_otg_state old_state)
>>  {
>> @@ -123,7 +121,7 @@ static void otg_leave_state(struct otg_fsm *fsm, enum usb_otg_state old_state)
>>  /* Called when entering a state */
>>  static int otg_set_state(struct otg_fsm *fsm, enum usb_otg_state new_state)
>>  {
>> -	state_changed = 1;
>> +	fsm->state_changed = 1;
>>  	if (fsm->otg->state == new_state)
>>  		return 0;
>>  	VDBG("Set state: %s\n", usb_otg_state_string(new_state));
>> @@ -255,7 +253,7 @@ int otg_statemachine(struct otg_fsm *fsm)
>>  	mutex_lock(&fsm->lock);
>>  
>>  	state = fsm->otg->state;
>> -	state_changed = 0;
>> +	fsm->state_changed = 0;
>>  	/* State machine state change judgement */
>>  
>>  	switch (state) {
>> @@ -368,7 +366,7 @@ int otg_statemachine(struct otg_fsm *fsm)
>>  	}
>>  	mutex_unlock(&fsm->lock);
>>  
>> -	VDBG("quit statemachine, changed = %d\n", state_changed);
>> -	return state_changed;
>> +	VDBG("quit statemachine, changed = %d\n", fsm->state_changed);
>> +	return fsm->state_changed;
>>  }
>>  EXPORT_SYMBOL_GPL(otg_statemachine);
>> diff --git a/include/linux/usb/otg-fsm.h b/include/linux/usb/otg-fsm.h
>> index c5b74c5..85a9150 100644
>> --- a/include/linux/usb/otg-fsm.h
>> +++ b/include/linux/usb/otg-fsm.h
>> @@ -183,6 +183,7 @@ struct otg_fsm {
>>  	/* Current usb protocol used: 0:undefine; 1:host; 2:client */
>>  	int protocol;
>>  	struct mutex lock;
>> +	bool state_changed;
>>  };
>>  
>>  struct otg_fsm_ops {
>> -- 
>> 2.1.0
>>
> 

--
To unsubscribe from this list: send the line "unsubscribe linux-omap" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Peter Chen April 16, 2015, 12:06 p.m. UTC | #3
On Thu, Apr 16, 2015 at 02:58:20PM +0300, Roger Quadros wrote:
> On 16/04/15 14:36, Peter Chen wrote:
> > On Tue, Apr 14, 2015 at 01:41:49PM +0300, Roger Quadros wrote:
> >> Move the state_changed variable into struct otg_fsm
> >> so that we can support multiple instances.
> > 
> > OTG device has only one port. See 3.1.1.
> > If you go to pass OTG Certification, the lab requires that there is only
> > one port at your board.
> > 
> 
> We're not breaking OTG compliance by this ;).
> Moreover this structure is not limited to OTG but for DRD (dual-role) use as well.
> We can have multiple DRD ports per board.
> 

Ok, the code is ok for keeping multiple instances.

Peter
> 
> >>
> >> Signed-off-by: Roger Quadros <rogerq@ti.com>
> >> ---
> >>  drivers/usb/common/usb-otg-fsm.c | 10 ++++------
> >>  include/linux/usb/otg-fsm.h      |  1 +
> >>  2 files changed, 5 insertions(+), 6 deletions(-)
> >>
> >> diff --git a/drivers/usb/common/usb-otg-fsm.c b/drivers/usb/common/usb-otg-fsm.c
> >> index 1736bbe..0caa37b 100644
> >> --- a/drivers/usb/common/usb-otg-fsm.c
> >> +++ b/drivers/usb/common/usb-otg-fsm.c
> >> @@ -61,8 +61,6 @@ static int otg_set_protocol(struct otg_fsm *fsm, int protocol)
> >>  	return 0;
> >>  }
> >>  
> >> -static int state_changed;
> >> -
> >>  /* Called when leaving a state.  Do state clean up jobs here */
> >>  static void otg_leave_state(struct otg_fsm *fsm, enum usb_otg_state old_state)
> >>  {
> >> @@ -123,7 +121,7 @@ static void otg_leave_state(struct otg_fsm *fsm, enum usb_otg_state old_state)
> >>  /* Called when entering a state */
> >>  static int otg_set_state(struct otg_fsm *fsm, enum usb_otg_state new_state)
> >>  {
> >> -	state_changed = 1;
> >> +	fsm->state_changed = 1;
> >>  	if (fsm->otg->state == new_state)
> >>  		return 0;
> >>  	VDBG("Set state: %s\n", usb_otg_state_string(new_state));
> >> @@ -255,7 +253,7 @@ int otg_statemachine(struct otg_fsm *fsm)
> >>  	mutex_lock(&fsm->lock);
> >>  
> >>  	state = fsm->otg->state;
> >> -	state_changed = 0;
> >> +	fsm->state_changed = 0;
> >>  	/* State machine state change judgement */
> >>  
> >>  	switch (state) {
> >> @@ -368,7 +366,7 @@ int otg_statemachine(struct otg_fsm *fsm)
> >>  	}
> >>  	mutex_unlock(&fsm->lock);
> >>  
> >> -	VDBG("quit statemachine, changed = %d\n", state_changed);
> >> -	return state_changed;
> >> +	VDBG("quit statemachine, changed = %d\n", fsm->state_changed);
> >> +	return fsm->state_changed;
> >>  }
> >>  EXPORT_SYMBOL_GPL(otg_statemachine);
> >> diff --git a/include/linux/usb/otg-fsm.h b/include/linux/usb/otg-fsm.h
> >> index c5b74c5..85a9150 100644
> >> --- a/include/linux/usb/otg-fsm.h
> >> +++ b/include/linux/usb/otg-fsm.h
> >> @@ -183,6 +183,7 @@ struct otg_fsm {
> >>  	/* Current usb protocol used: 0:undefine; 1:host; 2:client */
> >>  	int protocol;
> >>  	struct mutex lock;
> >> +	bool state_changed;
> >>  };
> >>  
> >>  struct otg_fsm_ops {
> >> -- 
> >> 2.1.0
> >>
> > 
>
diff mbox

Patch

diff --git a/drivers/usb/common/usb-otg-fsm.c b/drivers/usb/common/usb-otg-fsm.c
index 1736bbe..0caa37b 100644
--- a/drivers/usb/common/usb-otg-fsm.c
+++ b/drivers/usb/common/usb-otg-fsm.c
@@ -61,8 +61,6 @@  static int otg_set_protocol(struct otg_fsm *fsm, int protocol)
 	return 0;
 }
 
-static int state_changed;
-
 /* Called when leaving a state.  Do state clean up jobs here */
 static void otg_leave_state(struct otg_fsm *fsm, enum usb_otg_state old_state)
 {
@@ -123,7 +121,7 @@  static void otg_leave_state(struct otg_fsm *fsm, enum usb_otg_state old_state)
 /* Called when entering a state */
 static int otg_set_state(struct otg_fsm *fsm, enum usb_otg_state new_state)
 {
-	state_changed = 1;
+	fsm->state_changed = 1;
 	if (fsm->otg->state == new_state)
 		return 0;
 	VDBG("Set state: %s\n", usb_otg_state_string(new_state));
@@ -255,7 +253,7 @@  int otg_statemachine(struct otg_fsm *fsm)
 	mutex_lock(&fsm->lock);
 
 	state = fsm->otg->state;
-	state_changed = 0;
+	fsm->state_changed = 0;
 	/* State machine state change judgement */
 
 	switch (state) {
@@ -368,7 +366,7 @@  int otg_statemachine(struct otg_fsm *fsm)
 	}
 	mutex_unlock(&fsm->lock);
 
-	VDBG("quit statemachine, changed = %d\n", state_changed);
-	return state_changed;
+	VDBG("quit statemachine, changed = %d\n", fsm->state_changed);
+	return fsm->state_changed;
 }
 EXPORT_SYMBOL_GPL(otg_statemachine);
diff --git a/include/linux/usb/otg-fsm.h b/include/linux/usb/otg-fsm.h
index c5b74c5..85a9150 100644
--- a/include/linux/usb/otg-fsm.h
+++ b/include/linux/usb/otg-fsm.h
@@ -183,6 +183,7 @@  struct otg_fsm {
 	/* Current usb protocol used: 0:undefine; 1:host; 2:client */
 	int protocol;
 	struct mutex lock;
+	bool state_changed;
 };
 
 struct otg_fsm_ops {