diff mbox

[4/4] usb: chipidea: msm: Use USB PHY API to control PHY state

Message ID 1384176937-1658-5-git-send-email-iivanov@mm-sol.com (mailing list archive)
State Superseded, archived
Headers show

Commit Message

Ivan T. Ivanov Nov. 11, 2013, 1:35 p.m. UTC
From: "Ivan T. Ivanov" <iivanov@mm-sol.com>

PHY drivers keep track of the current state of the hardware,
so don't change PHY settings under it.

Signed-off-by: Ivan T. Ivanov <iivanov@mm-sol.com>
---
 drivers/usb/chipidea/ci_hdrc_msm.c |    9 ++-------
 1 file changed, 2 insertions(+), 7 deletions(-)

Comments

Peter Chen Nov. 11, 2013, 1:59 p.m. UTC | #1
On Mon, Nov 11, 2013 at 03:35:37PM +0200, Ivan T. Ivanov wrote:
> From: "Ivan T. Ivanov" <iivanov@mm-sol.com>
> 
> PHY drivers keep track of the current state of the hardware,
> so don't change PHY settings under it.
> 
> Signed-off-by: Ivan T. Ivanov <iivanov@mm-sol.com>
> ---
>  drivers/usb/chipidea/ci_hdrc_msm.c |    9 ++-------
>  1 file changed, 2 insertions(+), 7 deletions(-)
> 
> diff --git a/drivers/usb/chipidea/ci_hdrc_msm.c b/drivers/usb/chipidea/ci_hdrc_msm.c
> index e9624f3..338b209 100644
> --- a/drivers/usb/chipidea/ci_hdrc_msm.c
> +++ b/drivers/usb/chipidea/ci_hdrc_msm.c
> @@ -20,13 +20,11 @@
>  static void ci_hdrc_msm_notify_event(struct ci_hdrc *ci, unsigned event)
>  {
>  	struct device *dev = ci->gadget.dev.parent;
> -	int val;
>  
>  	switch (event) {
>  	case CI_HDRC_CONTROLLER_RESET_EVENT:
>  		dev_dbg(dev, "CI_HDRC_CONTROLLER_RESET_EVENT received\n");
> -		writel(0, USB_AHBBURST);
> -		writel(0, USB_AHBMODE);
> +		usb_phy_init(ci->transceiver);

It will reset the PHY,  but your comment is "don't change PHY settings under it"

>  		break;
>  	case CI_HDRC_CONTROLLER_STOPPED_EVENT:
>  		dev_dbg(dev, "CI_HDRC_CONTROLLER_STOPPED_EVENT received\n");
> @@ -34,10 +32,7 @@ static void ci_hdrc_msm_notify_event(struct ci_hdrc *ci, unsigned event)
>  		 * Put the transceiver in non-driving mode. Otherwise host
>  		 * may not detect soft-disconnection.
>  		 */
> -		val = usb_phy_io_read(ci->transceiver, ULPI_FUNC_CTRL);
> -		val &= ~ULPI_FUNC_CTRL_OPMODE_MASK;
> -		val |= ULPI_FUNC_CTRL_OPMODE_NONDRIVING;
> -		usb_phy_io_write(ci->transceiver, val, ULPI_FUNC_CTRL);
> +		usb_phy_notify_disconnect(ci->transceiver, USB_SPEED_UNKNOWN);

Where you have implemented .notify_disconnect?
I have not found it at your phy driver.
Ivan T. Ivanov Nov. 11, 2013, 2:36 p.m. UTC | #2
Hi Peter,

On Mon, 2013-11-11 at 21:59 +0800, Peter Chen wrote: 
> On Mon, Nov 11, 2013 at 03:35:37PM +0200, Ivan T. Ivanov wrote:
> > From: "Ivan T. Ivanov" <iivanov@mm-sol.com>
> > 
> > PHY drivers keep track of the current state of the hardware,
> > so don't change PHY settings under it.
> > 
> > Signed-off-by: Ivan T. Ivanov <iivanov@mm-sol.com>
> > ---
> >  drivers/usb/chipidea/ci_hdrc_msm.c |    9 ++-------
> >  1 file changed, 2 insertions(+), 7 deletions(-)
> > 
> > diff --git a/drivers/usb/chipidea/ci_hdrc_msm.c b/drivers/usb/chipidea/ci_hdrc_msm.c
> > index e9624f3..338b209 100644
> > --- a/drivers/usb/chipidea/ci_hdrc_msm.c
> > +++ b/drivers/usb/chipidea/ci_hdrc_msm.c
> > @@ -20,13 +20,11 @@
> >  static void ci_hdrc_msm_notify_event(struct ci_hdrc *ci, unsigned event)
> >  {
> >  	struct device *dev = ci->gadget.dev.parent;
> > -	int val;
> >  
> >  	switch (event) {
> >  	case CI_HDRC_CONTROLLER_RESET_EVENT:
> >  		dev_dbg(dev, "CI_HDRC_CONTROLLER_RESET_EVENT received\n");
> > -		writel(0, USB_AHBBURST);
> > -		writel(0, USB_AHBMODE);
> > +		usb_phy_init(ci->transceiver);
> 
> It will reset the PHY,  but your comment is "don't change PHY settings under it"

:-). This function is exported by PHY drivers, so they will know how
to handle this change.

> 
> >  		break;
> >  	case CI_HDRC_CONTROLLER_STOPPED_EVENT:
> >  		dev_dbg(dev, "CI_HDRC_CONTROLLER_STOPPED_EVENT received\n");
> > @@ -34,10 +32,7 @@ static void ci_hdrc_msm_notify_event(struct ci_hdrc *ci, unsigned event)
> >  		 * Put the transceiver in non-driving mode. Otherwise host
> >  		 * may not detect soft-disconnection.
> >  		 */
> > -		val = usb_phy_io_read(ci->transceiver, ULPI_FUNC_CTRL);
> > -		val &= ~ULPI_FUNC_CTRL_OPMODE_MASK;
> > -		val |= ULPI_FUNC_CTRL_OPMODE_NONDRIVING;
> > -		usb_phy_io_write(ci->transceiver, val, ULPI_FUNC_CTRL);
> > +		usb_phy_notify_disconnect(ci->transceiver, USB_SPEED_UNKNOWN);
> 
> Where you have implemented .notify_disconnect?
> I have not found it at your phy driver.

Yep, I will post PHY driver changes shortly. Meanwhile this should
not break existing board file based platforms, because not of them
could be compiled (HTC Dream, Halibut Board) and DT based platforms 
are sill work in progress.

Regards,
Ivan


--
To unsubscribe from this list: send the line "unsubscribe linux-arm-msm" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Peter Chen Dec. 4, 2013, 5:37 a.m. UTC | #3
On Mon, Nov 11, 2013 at 04:36:09PM +0200, Ivan T. Ivanov wrote:
> 
> Hi Peter,
> 
> On Mon, 2013-11-11 at 21:59 +0800, Peter Chen wrote: 
> > On Mon, Nov 11, 2013 at 03:35:37PM +0200, Ivan T. Ivanov wrote:
> > > From: "Ivan T. Ivanov" <iivanov@mm-sol.com>
> > > 
> > > PHY drivers keep track of the current state of the hardware,
> > > so don't change PHY settings under it.
> > > 
> > > Signed-off-by: Ivan T. Ivanov <iivanov@mm-sol.com>
> > > ---
> > >  drivers/usb/chipidea/ci_hdrc_msm.c |    9 ++-------
> > >  1 file changed, 2 insertions(+), 7 deletions(-)
> > > 
> > > diff --git a/drivers/usb/chipidea/ci_hdrc_msm.c b/drivers/usb/chipidea/ci_hdrc_msm.c
> > > index e9624f3..338b209 100644
> > > --- a/drivers/usb/chipidea/ci_hdrc_msm.c
> > > +++ b/drivers/usb/chipidea/ci_hdrc_msm.c
> > > @@ -20,13 +20,11 @@
> > >  static void ci_hdrc_msm_notify_event(struct ci_hdrc *ci, unsigned event)
> > >  {
> > >  	struct device *dev = ci->gadget.dev.parent;
> > > -	int val;
> > >  
> > >  	switch (event) {
> > >  	case CI_HDRC_CONTROLLER_RESET_EVENT:
> > >  		dev_dbg(dev, "CI_HDRC_CONTROLLER_RESET_EVENT received\n");
> > > -		writel(0, USB_AHBBURST);
> > > -		writel(0, USB_AHBMODE);
> > > +		usb_phy_init(ci->transceiver);
> > 
> > It will reset the PHY,  but your comment is "don't change PHY settings under it"
> 
> :-). This function is exported by PHY drivers, so they will know how
> to handle this change.
> 
> > 
> > >  		break;
> > >  	case CI_HDRC_CONTROLLER_STOPPED_EVENT:
> > >  		dev_dbg(dev, "CI_HDRC_CONTROLLER_STOPPED_EVENT received\n");
> > > @@ -34,10 +32,7 @@ static void ci_hdrc_msm_notify_event(struct ci_hdrc *ci, unsigned event)
> > >  		 * Put the transceiver in non-driving mode. Otherwise host
> > >  		 * may not detect soft-disconnection.
> > >  		 */
> > > -		val = usb_phy_io_read(ci->transceiver, ULPI_FUNC_CTRL);
> > > -		val &= ~ULPI_FUNC_CTRL_OPMODE_MASK;
> > > -		val |= ULPI_FUNC_CTRL_OPMODE_NONDRIVING;
> > > -		usb_phy_io_write(ci->transceiver, val, ULPI_FUNC_CTRL);
> > > +		usb_phy_notify_disconnect(ci->transceiver, USB_SPEED_UNKNOWN);
> > 
> > Where you have implemented .notify_disconnect?
> > I have not found it at your phy driver.
> 
> Yep, I will post PHY driver changes shortly. Meanwhile this should
> not break existing board file based platforms, because not of them
> could be compiled (HTC Dream, Halibut Board) and DT based platforms 
> are sill work in progress.
> 

Hi Ivan, I am going to apply this msm chipidea patchset, but the change
in this file is different with its original meaning. Have you
tested at existing platforms?
Ivan T. Ivanov Dec. 4, 2013, 9:35 a.m. UTC | #4
Hi Peter, 

On Wed, 2013-12-04 at 13:37 +0800, Peter Chen wrote: 
> On Mon, Nov 11, 2013 at 04:36:09PM +0200, Ivan T. Ivanov wrote:
> > 
> > Hi Peter,
> > 
> > On Mon, 2013-11-11 at 21:59 +0800, Peter Chen wrote: 
> > > On Mon, Nov 11, 2013 at 03:35:37PM +0200, Ivan T. Ivanov wrote:
> > > > From: "Ivan T. Ivanov" <iivanov@mm-sol.com>
> > > > 
> > > > PHY drivers keep track of the current state of the hardware,
> > > > so don't change PHY settings under it.
> > > > 
> > > > Signed-off-by: Ivan T. Ivanov <iivanov@mm-sol.com>
> > > > ---
> > > >  drivers/usb/chipidea/ci_hdrc_msm.c |    9 ++-------
> > > >  1 file changed, 2 insertions(+), 7 deletions(-)
> > > > 
> > > > diff --git a/drivers/usb/chipidea/ci_hdrc_msm.c b/drivers/usb/chipidea/ci_hdrc_msm.c
> > > > index e9624f3..338b209 100644
> > > > --- a/drivers/usb/chipidea/ci_hdrc_msm.c
> > > > +++ b/drivers/usb/chipidea/ci_hdrc_msm.c
> > > > @@ -20,13 +20,11 @@
> > > >  static void ci_hdrc_msm_notify_event(struct ci_hdrc *ci, unsigned event)
> > > >  {
> > > >  	struct device *dev = ci->gadget.dev.parent;
> > > > -	int val;
> > > >  
> > > >  	switch (event) {
> > > >  	case CI_HDRC_CONTROLLER_RESET_EVENT:
> > > >  		dev_dbg(dev, "CI_HDRC_CONTROLLER_RESET_EVENT received\n");
> > > > -		writel(0, USB_AHBBURST);
> > > > -		writel(0, USB_AHBMODE);
> > > > +		usb_phy_init(ci->transceiver);
> > > 
> > > It will reset the PHY,  but your comment is "don't change PHY settings under it"
> > 
> > :-). This function is exported by PHY drivers, so they will know how
> > to handle this change.
> > 
> > > 
> > > >  		break;
> > > >  	case CI_HDRC_CONTROLLER_STOPPED_EVENT:
> > > >  		dev_dbg(dev, "CI_HDRC_CONTROLLER_STOPPED_EVENT received\n");
> > > > @@ -34,10 +32,7 @@ static void ci_hdrc_msm_notify_event(struct ci_hdrc *ci, unsigned event)
> > > >  		 * Put the transceiver in non-driving mode. Otherwise host
> > > >  		 * may not detect soft-disconnection.
> > > >  		 */
> > > > -		val = usb_phy_io_read(ci->transceiver, ULPI_FUNC_CTRL);
> > > > -		val &= ~ULPI_FUNC_CTRL_OPMODE_MASK;
> > > > -		val |= ULPI_FUNC_CTRL_OPMODE_NONDRIVING;
> > > > -		usb_phy_io_write(ci->transceiver, val, ULPI_FUNC_CTRL);
> > > > +		usb_phy_notify_disconnect(ci->transceiver, USB_SPEED_UNKNOWN);
> > > 
> > > Where you have implemented .notify_disconnect?
> > > I have not found it at your phy driver.
> > 
> > Yep, I will post PHY driver changes shortly. Meanwhile this should
> > not break existing board file based platforms, because not of them
> > could be compiled (HTC Dream, Halibut Board) and DT based platforms 
> > are sill work in progress.
> > 
> 
> Hi Ivan, I am going to apply this msm chipidea patchset, but the change
> in this file is different with its original meaning. 

What did you mean?

CI_HDRC_CONTROLLER_RESET_EVENT -> usb_phy_init()
Take wherever actions are needed to put device in known state. ?

CI_HDRC_CONTROLLER_STOPPED_EVENT -> usb_phy_notify_disconnect() 
Emitted after ci->driver->disconnect(&ci->gadget);

Probably I am missing something.


> Have you
> tested at existing platforms?


I have 8074 based DragonBoard which I used for testing. 
CV Test Suite engine "Chapter 9 tests" are passing except
"Halt Endpoint Test". 

Regards,
Ivan


> 


--
To unsubscribe from this list: send the line "unsubscribe linux-arm-msm" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Peter Chen Dec. 4, 2013, 1:38 p.m. UTC | #5
On Wed, Dec 04, 2013 at 11:35:54AM +0200, Ivan T. Ivanov wrote:
> 
> Hi Peter, 
> 
> On Wed, 2013-12-04 at 13:37 +0800, Peter Chen wrote: 
> > On Mon, Nov 11, 2013 at 04:36:09PM +0200, Ivan T. Ivanov wrote:
> > > 
> > > Hi Peter,
> > > 
> > > On Mon, 2013-11-11 at 21:59 +0800, Peter Chen wrote: 
> > > > On Mon, Nov 11, 2013 at 03:35:37PM +0200, Ivan T. Ivanov wrote:
> > > > > From: "Ivan T. Ivanov" <iivanov@mm-sol.com>
> > > > > 
> > > > > PHY drivers keep track of the current state of the hardware,
> > > > > so don't change PHY settings under it.
> > > > > 
> > > > > Signed-off-by: Ivan T. Ivanov <iivanov@mm-sol.com>
> > > > > ---
> > > > >  drivers/usb/chipidea/ci_hdrc_msm.c |    9 ++-------
> > > > >  1 file changed, 2 insertions(+), 7 deletions(-)
> > > > > 
> > > > > diff --git a/drivers/usb/chipidea/ci_hdrc_msm.c b/drivers/usb/chipidea/ci_hdrc_msm.c
> > > > > index e9624f3..338b209 100644
> > > > > --- a/drivers/usb/chipidea/ci_hdrc_msm.c
> > > > > +++ b/drivers/usb/chipidea/ci_hdrc_msm.c
> > > > > @@ -20,13 +20,11 @@
> > > > >  static void ci_hdrc_msm_notify_event(struct ci_hdrc *ci, unsigned event)
> > > > >  {
> > > > >  	struct device *dev = ci->gadget.dev.parent;
> > > > > -	int val;
> > > > >  
> > > > >  	switch (event) {
> > > > >  	case CI_HDRC_CONTROLLER_RESET_EVENT:
> > > > >  		dev_dbg(dev, "CI_HDRC_CONTROLLER_RESET_EVENT received\n");
> > > > > -		writel(0, USB_AHBBURST);
> > > > > -		writel(0, USB_AHBMODE);
> > > > > +		usb_phy_init(ci->transceiver);
> > > > 
> > > > It will reset the PHY,  but your comment is "don't change PHY settings under it"
> > > 
> > > :-). This function is exported by PHY drivers, so they will know how
> > > to handle this change.
> > > 
> > > > 
> > > > >  		break;
> > > > >  	case CI_HDRC_CONTROLLER_STOPPED_EVENT:
> > > > >  		dev_dbg(dev, "CI_HDRC_CONTROLLER_STOPPED_EVENT received\n");
> > > > > @@ -34,10 +32,7 @@ static void ci_hdrc_msm_notify_event(struct ci_hdrc *ci, unsigned event)
> > > > >  		 * Put the transceiver in non-driving mode. Otherwise host
> > > > >  		 * may not detect soft-disconnection.
> > > > >  		 */
> > > > > -		val = usb_phy_io_read(ci->transceiver, ULPI_FUNC_CTRL);
> > > > > -		val &= ~ULPI_FUNC_CTRL_OPMODE_MASK;
> > > > > -		val |= ULPI_FUNC_CTRL_OPMODE_NONDRIVING;
> > > > > -		usb_phy_io_write(ci->transceiver, val, ULPI_FUNC_CTRL);
> > > > > +		usb_phy_notify_disconnect(ci->transceiver, USB_SPEED_UNKNOWN);
> > > > 
> > > > Where you have implemented .notify_disconnect?
> > > > I have not found it at your phy driver.
> > > 
> > > Yep, I will post PHY driver changes shortly. Meanwhile this should
> > > not break existing board file based platforms, because not of them
> > > could be compiled (HTC Dream, Halibut Board) and DT based platforms 
> > > are sill work in progress.
> > > 
> > 
> > Hi Ivan, I am going to apply this msm chipidea patchset, but the change
> > in this file is different with its original meaning. 
> 
> What did you mean?
> 
> CI_HDRC_CONTROLLER_RESET_EVENT -> usb_phy_init()
> Take wherever actions are needed to put device in known state. ?

At current code, it only sets two AHB parameters which should be only related
to controller but your patch init the whole PHY, look at msm_otg_reset,
it does many other things, like phy reset, controller reset, etc.

Does the partial otg fsm at msm_otg_sm_work will be called or not? If it is
not called, then, it is OK you just use msm_otg_reset here.

> 
> CI_HDRC_CONTROLLER_STOPPED_EVENT -> usb_phy_notify_disconnect() 
> Emitted after ci->driver->disconnect(&ci->gadget);

I just see your [PATCH v4 14/15] usb: phy: msm: Handle disconnect events,
then, it is ok now. By the way, do I need to wait your phy patches are queued,
otherwise, it may not work?

> 
> Probably I am missing something.
> 
> 
> > Have you
> > tested at existing platforms?
> 
> 
> I have 8074 based DragonBoard which I used for testing. 
> CV Test Suite engine "Chapter 9 tests" are passing except
> "Halt Endpoint Test". 

I mean with your patch, the old non-dt platform can work or not?
Ivan T. Ivanov Dec. 11, 2013, 10:26 a.m. UTC | #6
Hi,

On Wed, 2013-12-04 at 21:38 +0800, Peter Chen wrote: 
> On Wed, Dec 04, 2013 at 11:35:54AM +0200, Ivan T. Ivanov wrote:
> > 
> > Hi Peter, 
> > 
> > On Wed, 2013-12-04 at 13:37 +0800, Peter Chen wrote: 
> > > On Mon, Nov 11, 2013 at 04:36:09PM +0200, Ivan T. Ivanov wrote:
> > > > 
> > > > Hi Peter,
> > > > 
> > > > On Mon, 2013-11-11 at 21:59 +0800, Peter Chen wrote: 
> > > > > On Mon, Nov 11, 2013 at 03:35:37PM +0200, Ivan T. Ivanov wrote:
> > > > > > From: "Ivan T. Ivanov" <iivanov@mm-sol.com>
> > > > > > 
> > > > > > PHY drivers keep track of the current state of the hardware,
> > > > > > so don't change PHY settings under it.
> > > > > > 
> > > > > > Signed-off-by: Ivan T. Ivanov <iivanov@mm-sol.com>
> > > > > > ---
> > > > > >  drivers/usb/chipidea/ci_hdrc_msm.c |    9 ++-------
> > > > > >  1 file changed, 2 insertions(+), 7 deletions(-)
> > > > > > 
> > > > > > diff --git a/drivers/usb/chipidea/ci_hdrc_msm.c b/drivers/usb/chipidea/ci_hdrc_msm.c
> > > > > > index e9624f3..338b209 100644
> > > > > > --- a/drivers/usb/chipidea/ci_hdrc_msm.c
> > > > > > +++ b/drivers/usb/chipidea/ci_hdrc_msm.c
> > > > > > @@ -20,13 +20,11 @@
> > > > > >  static void ci_hdrc_msm_notify_event(struct ci_hdrc *ci, unsigned event)
> > > > > >  {
> > > > > >  	struct device *dev = ci->gadget.dev.parent;
> > > > > > -	int val;
> > > > > >  
> > > > > >  	switch (event) {
> > > > > >  	case CI_HDRC_CONTROLLER_RESET_EVENT:
> > > > > >  		dev_dbg(dev, "CI_HDRC_CONTROLLER_RESET_EVENT received\n");
> > > > > > -		writel(0, USB_AHBBURST);
> > > > > > -		writel(0, USB_AHBMODE);
> > > > > > +		usb_phy_init(ci->transceiver);
> > > > > 
> > > > > It will reset the PHY,  but your comment is "don't change PHY settings under it"
> > > > 
> > > > :-). This function is exported by PHY drivers, so they will know how
> > > > to handle this change.
> > > > 
> > > > > 
> > > > > >  		break;
> > > > > >  	case CI_HDRC_CONTROLLER_STOPPED_EVENT:
> > > > > >  		dev_dbg(dev, "CI_HDRC_CONTROLLER_STOPPED_EVENT received\n");
> > > > > > @@ -34,10 +32,7 @@ static void ci_hdrc_msm_notify_event(struct ci_hdrc *ci, unsigned event)
> > > > > >  		 * Put the transceiver in non-driving mode. Otherwise host
> > > > > >  		 * may not detect soft-disconnection.
> > > > > >  		 */
> > > > > > -		val = usb_phy_io_read(ci->transceiver, ULPI_FUNC_CTRL);
> > > > > > -		val &= ~ULPI_FUNC_CTRL_OPMODE_MASK;
> > > > > > -		val |= ULPI_FUNC_CTRL_OPMODE_NONDRIVING;
> > > > > > -		usb_phy_io_write(ci->transceiver, val, ULPI_FUNC_CTRL);
> > > > > > +		usb_phy_notify_disconnect(ci->transceiver, USB_SPEED_UNKNOWN);
> > > > > 
> > > > > Where you have implemented .notify_disconnect?
> > > > > I have not found it at your phy driver.
> > > > 
> > > > Yep, I will post PHY driver changes shortly. Meanwhile this should
> > > > not break existing board file based platforms, because not of them
> > > > could be compiled (HTC Dream, Halibut Board) and DT based platforms 
> > > > are sill work in progress.
> > > > 
> > > 
> > > Hi Ivan, I am going to apply this msm chipidea patchset, but the change
> > > in this file is different with its original meaning. 
> > 
> > What did you mean?
> > 
> > CI_HDRC_CONTROLLER_RESET_EVENT -> usb_phy_init()
> > Take wherever actions are needed to put device in known state. ?
> 
> At current code, it only sets two AHB parameters which should be only related
> to controller but your patch init the whole PHY, look at msm_otg_reset,
> it does many other things, like phy reset, controller reset, etc.
> 
> Does the partial otg fsm at msm_otg_sm_work will be called or not? If it is
> not called, then, it is OK you just use msm_otg_reset here.
> 
> > 
> > CI_HDRC_CONTROLLER_STOPPED_EVENT -> usb_phy_notify_disconnect() 
> > Emitted after ci->driver->disconnect(&ci->gadget);
> 
> I just see your [PATCH v4 14/15] usb: phy: msm: Handle disconnect events,
> then, it is ok now. By the way, do I need to wait your phy patches are queued,
> otherwise, it may not work?

This driver is not working on MSM platforms more than year now, 
since "usb: gadget: ci13xxx: convert to platform device"

Lets postpone this patch after changes to phy-drivers are ready. 
I will post rest of the patches with fixes for your comments
shortly.

> 
> > 
> > Probably I am missing something.
> > 
> > 
> > > Have you
> > > tested at existing platforms?
> > 
> > 
> > I have 8074 based DragonBoard which I used for testing. 
> > CV Test Suite engine "Chapter 9 tests" are passing except
> > "Halt Endpoint Test". 
> 
> I mean with your patch, the old non-dt platform can work or not?


Regards,
Ivan



--
To unsubscribe from this list: send the line "unsubscribe linux-arm-msm" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
diff mbox

Patch

diff --git a/drivers/usb/chipidea/ci_hdrc_msm.c b/drivers/usb/chipidea/ci_hdrc_msm.c
index e9624f3..338b209 100644
--- a/drivers/usb/chipidea/ci_hdrc_msm.c
+++ b/drivers/usb/chipidea/ci_hdrc_msm.c
@@ -20,13 +20,11 @@ 
 static void ci_hdrc_msm_notify_event(struct ci_hdrc *ci, unsigned event)
 {
 	struct device *dev = ci->gadget.dev.parent;
-	int val;
 
 	switch (event) {
 	case CI_HDRC_CONTROLLER_RESET_EVENT:
 		dev_dbg(dev, "CI_HDRC_CONTROLLER_RESET_EVENT received\n");
-		writel(0, USB_AHBBURST);
-		writel(0, USB_AHBMODE);
+		usb_phy_init(ci->transceiver);
 		break;
 	case CI_HDRC_CONTROLLER_STOPPED_EVENT:
 		dev_dbg(dev, "CI_HDRC_CONTROLLER_STOPPED_EVENT received\n");
@@ -34,10 +32,7 @@  static void ci_hdrc_msm_notify_event(struct ci_hdrc *ci, unsigned event)
 		 * Put the transceiver in non-driving mode. Otherwise host
 		 * may not detect soft-disconnection.
 		 */
-		val = usb_phy_io_read(ci->transceiver, ULPI_FUNC_CTRL);
-		val &= ~ULPI_FUNC_CTRL_OPMODE_MASK;
-		val |= ULPI_FUNC_CTRL_OPMODE_NONDRIVING;
-		usb_phy_io_write(ci->transceiver, val, ULPI_FUNC_CTRL);
+		usb_phy_notify_disconnect(ci->transceiver, USB_SPEED_UNKNOWN);
 		break;
 	default:
 		dev_dbg(dev, "unknown ci_hdrc event\n");