Re: [PATCH v3 17/18] USB: phy-mv-usb: use phy-pxa-usb

2018-11-13 Thread Robert Jarzmik
Lubomir Rintel  writes:

> Use a proper PHY driver, instead of hooks to a board support package.
Hi Lubomir,

This specific patch caught my attention, because of its title : I don't see what
phy-pxa-usb stands for, is it a typo ? I don't think anybody implemented so far
a proper phy support for pxa based boards (pxa27x actually), hence my question.

Cheers.

--
Robert


Re: [PATCH v3 17/18] USB: phy-mv-usb: use phy-pxa-usb

2018-11-13 Thread Robert Jarzmik
Lubomir Rintel  writes:

> Use a proper PHY driver, instead of hooks to a board support package.
Hi Lubomir,

This specific patch caught my attention, because of its title : I don't see what
phy-pxa-usb stands for, is it a typo ? I don't think anybody implemented so far
a proper phy support for pxa based boards (pxa27x actually), hence my question.

Cheers.

--
Robert


[PATCH v3 17/18] USB: phy-mv-usb: use phy-pxa-usb

2018-11-11 Thread Lubomir Rintel
Use a proper PHY driver, instead of hooks to a board support package.

Signed-off-by: Lubomir Rintel 
Tested-by: Pavel Machek 
---
 arch/arm/mach-mmp/devices.c  |  11 +---
 drivers/usb/phy/phy-mv-usb.c | 123 ---
 drivers/usb/phy/phy-mv-usb.h |   8 ++-
 3 files changed, 62 insertions(+), 80 deletions(-)

diff --git a/arch/arm/mach-mmp/devices.c b/arch/arm/mach-mmp/devices.c
index 822b8be042b9..eb9b3c34e90a 100644
--- a/arch/arm/mach-mmp/devices.c
+++ b/arch/arm/mach-mmp/devices.c
@@ -325,21 +325,12 @@ struct platform_device pxa168_device_u2oehci = {
 
 #if IS_ENABLED(CONFIG_USB_MV_OTG)
 struct resource pxa168_u2ootg_resources[] = {
-   /* regbase */
[0] = {
-   .start  = PXA168_U2O_REGBASE + U2x_CAPREGS_OFFSET,
+   .start  = PXA168_U2O_REGBASE,
.end= PXA168_U2O_REGBASE + USB_REG_RANGE,
.flags  = IORESOURCE_MEM,
-   .name   = "capregs",
},
-   /* phybase */
[1] = {
-   .start  = PXA168_U2O_PHYBASE,
-   .end= PXA168_U2O_PHYBASE + USB_PHY_RANGE,
-   .flags  = IORESOURCE_MEM,
-   .name   = "phyregs",
-   },
-   [2] = {
.start  = IRQ_PXA168_USB1,
.end= IRQ_PXA168_USB1,
.flags  = IORESOURCE_IRQ,
diff --git a/drivers/usb/phy/phy-mv-usb.c b/drivers/usb/phy/phy-mv-usb.c
index cfd9add10bf4..0f67c5b65fe9 100644
--- a/drivers/usb/phy/phy-mv-usb.c
+++ b/drivers/usb/phy/phy-mv-usb.c
@@ -50,7 +50,7 @@ static char *state_string[] = {
 
 static int mv_otg_set_vbus(struct usb_otg *otg, bool on)
 {
-   struct mv_otg *mvotg = container_of(otg->usb_phy, struct mv_otg, phy);
+   struct mv_otg *mvotg = container_of(otg->usb_phy, struct mv_otg, 
usb_phy);
if (mvotg->pdata->set_vbus == NULL)
return -ENODEV;
 
@@ -193,7 +193,7 @@ static void mv_otg_init_irq(struct mv_otg *mvotg)
 static void mv_otg_start_host(struct mv_otg *mvotg, int on)
 {
 #ifdef CONFIG_USB
-   struct usb_otg *otg = mvotg->phy.otg;
+   struct usb_otg *otg = mvotg->usb_phy.otg;
struct usb_hcd *hcd;
 
if (!otg->host)
@@ -214,12 +214,12 @@ static void mv_otg_start_host(struct mv_otg *mvotg, int 
on)
 
 static void mv_otg_start_periphrals(struct mv_otg *mvotg, int on)
 {
-   struct usb_otg *otg = mvotg->phy.otg;
+   struct usb_otg *otg = mvotg->usb_phy.otg;
 
if (!otg->gadget)
return;
 
-   dev_info(mvotg->phy.dev, "gadget %s\n", on ? "on" : "off");
+   dev_info(mvotg->usb_phy.dev, "gadget %s\n", on ? "on" : "off");
 
if (on)
usb_gadget_vbus_connect(otg->gadget);
@@ -247,14 +247,11 @@ static int mv_otg_enable_internal(struct mv_otg *mvotg)
dev_dbg(>pdev->dev, "otg enabled\n");
 
otg_clock_enable(mvotg);
-   if (mvotg->pdata->phy_init) {
-   retval = mvotg->pdata->phy_init(mvotg->phy_regs);
-   if (retval) {
-   dev_err(>pdev->dev,
-   "init phy error %d\n", retval);
-   otg_clock_disable(mvotg);
-   return retval;
-   }
+   retval = phy_init(mvotg->phy);
+   if (retval) {
+   dev_err(>pdev->dev, "init phy error %d\n", retval);
+   otg_clock_disable(mvotg);
+   return retval;
}
mvotg->active = 1;
 
@@ -274,8 +271,7 @@ static void mv_otg_disable_internal(struct mv_otg *mvotg)
 {
if (mvotg->active) {
dev_dbg(>pdev->dev, "otg disabled\n");
-   if (mvotg->pdata->phy_deinit)
-   mvotg->pdata->phy_deinit(mvotg->phy_regs);
+   phy_exit(mvotg->phy);
otg_clock_disable(mvotg);
mvotg->active = 0;
}
@@ -329,68 +325,68 @@ static void mv_otg_update_inputs(struct mv_otg *mvotg)
 static void mv_otg_update_state(struct mv_otg *mvotg)
 {
struct mv_otg_ctrl *otg_ctrl = >otg_ctrl;
-   int old_state = mvotg->phy.otg->state;
+   int old_state = mvotg->usb_phy.otg->state;
 
switch (old_state) {
case OTG_STATE_UNDEFINED:
-   mvotg->phy.otg->state = OTG_STATE_B_IDLE;
+   mvotg->usb_phy.otg->state = OTG_STATE_B_IDLE;
/* FALL THROUGH */
case OTG_STATE_B_IDLE:
if (otg_ctrl->id == 0)
-   mvotg->phy.otg->state = OTG_STATE_A_IDLE;
+   mvotg->usb_phy.otg->state = OTG_STATE_A_IDLE;
else if (otg_ctrl->b_sess_vld)
-   mvotg->phy.otg->state = OTG_STATE_B_PERIPHERAL;
+   mvotg->usb_phy.otg->state = OTG_STATE_B_PERIPHERAL;
break;
case OTG_STATE_B_PERIPHERAL:
if (!otg_ctrl->b_sess_vld || otg_ctrl->id == 0)
-   mvotg->phy.otg->state = OTG_STATE_B_IDLE;
+   

[PATCH v3 17/18] USB: phy-mv-usb: use phy-pxa-usb

2018-11-11 Thread Lubomir Rintel
Use a proper PHY driver, instead of hooks to a board support package.

Signed-off-by: Lubomir Rintel 
Tested-by: Pavel Machek 
---
 arch/arm/mach-mmp/devices.c  |  11 +---
 drivers/usb/phy/phy-mv-usb.c | 123 ---
 drivers/usb/phy/phy-mv-usb.h |   8 ++-
 3 files changed, 62 insertions(+), 80 deletions(-)

diff --git a/arch/arm/mach-mmp/devices.c b/arch/arm/mach-mmp/devices.c
index 822b8be042b9..eb9b3c34e90a 100644
--- a/arch/arm/mach-mmp/devices.c
+++ b/arch/arm/mach-mmp/devices.c
@@ -325,21 +325,12 @@ struct platform_device pxa168_device_u2oehci = {
 
 #if IS_ENABLED(CONFIG_USB_MV_OTG)
 struct resource pxa168_u2ootg_resources[] = {
-   /* regbase */
[0] = {
-   .start  = PXA168_U2O_REGBASE + U2x_CAPREGS_OFFSET,
+   .start  = PXA168_U2O_REGBASE,
.end= PXA168_U2O_REGBASE + USB_REG_RANGE,
.flags  = IORESOURCE_MEM,
-   .name   = "capregs",
},
-   /* phybase */
[1] = {
-   .start  = PXA168_U2O_PHYBASE,
-   .end= PXA168_U2O_PHYBASE + USB_PHY_RANGE,
-   .flags  = IORESOURCE_MEM,
-   .name   = "phyregs",
-   },
-   [2] = {
.start  = IRQ_PXA168_USB1,
.end= IRQ_PXA168_USB1,
.flags  = IORESOURCE_IRQ,
diff --git a/drivers/usb/phy/phy-mv-usb.c b/drivers/usb/phy/phy-mv-usb.c
index cfd9add10bf4..0f67c5b65fe9 100644
--- a/drivers/usb/phy/phy-mv-usb.c
+++ b/drivers/usb/phy/phy-mv-usb.c
@@ -50,7 +50,7 @@ static char *state_string[] = {
 
 static int mv_otg_set_vbus(struct usb_otg *otg, bool on)
 {
-   struct mv_otg *mvotg = container_of(otg->usb_phy, struct mv_otg, phy);
+   struct mv_otg *mvotg = container_of(otg->usb_phy, struct mv_otg, 
usb_phy);
if (mvotg->pdata->set_vbus == NULL)
return -ENODEV;
 
@@ -193,7 +193,7 @@ static void mv_otg_init_irq(struct mv_otg *mvotg)
 static void mv_otg_start_host(struct mv_otg *mvotg, int on)
 {
 #ifdef CONFIG_USB
-   struct usb_otg *otg = mvotg->phy.otg;
+   struct usb_otg *otg = mvotg->usb_phy.otg;
struct usb_hcd *hcd;
 
if (!otg->host)
@@ -214,12 +214,12 @@ static void mv_otg_start_host(struct mv_otg *mvotg, int 
on)
 
 static void mv_otg_start_periphrals(struct mv_otg *mvotg, int on)
 {
-   struct usb_otg *otg = mvotg->phy.otg;
+   struct usb_otg *otg = mvotg->usb_phy.otg;
 
if (!otg->gadget)
return;
 
-   dev_info(mvotg->phy.dev, "gadget %s\n", on ? "on" : "off");
+   dev_info(mvotg->usb_phy.dev, "gadget %s\n", on ? "on" : "off");
 
if (on)
usb_gadget_vbus_connect(otg->gadget);
@@ -247,14 +247,11 @@ static int mv_otg_enable_internal(struct mv_otg *mvotg)
dev_dbg(>pdev->dev, "otg enabled\n");
 
otg_clock_enable(mvotg);
-   if (mvotg->pdata->phy_init) {
-   retval = mvotg->pdata->phy_init(mvotg->phy_regs);
-   if (retval) {
-   dev_err(>pdev->dev,
-   "init phy error %d\n", retval);
-   otg_clock_disable(mvotg);
-   return retval;
-   }
+   retval = phy_init(mvotg->phy);
+   if (retval) {
+   dev_err(>pdev->dev, "init phy error %d\n", retval);
+   otg_clock_disable(mvotg);
+   return retval;
}
mvotg->active = 1;
 
@@ -274,8 +271,7 @@ static void mv_otg_disable_internal(struct mv_otg *mvotg)
 {
if (mvotg->active) {
dev_dbg(>pdev->dev, "otg disabled\n");
-   if (mvotg->pdata->phy_deinit)
-   mvotg->pdata->phy_deinit(mvotg->phy_regs);
+   phy_exit(mvotg->phy);
otg_clock_disable(mvotg);
mvotg->active = 0;
}
@@ -329,68 +325,68 @@ static void mv_otg_update_inputs(struct mv_otg *mvotg)
 static void mv_otg_update_state(struct mv_otg *mvotg)
 {
struct mv_otg_ctrl *otg_ctrl = >otg_ctrl;
-   int old_state = mvotg->phy.otg->state;
+   int old_state = mvotg->usb_phy.otg->state;
 
switch (old_state) {
case OTG_STATE_UNDEFINED:
-   mvotg->phy.otg->state = OTG_STATE_B_IDLE;
+   mvotg->usb_phy.otg->state = OTG_STATE_B_IDLE;
/* FALL THROUGH */
case OTG_STATE_B_IDLE:
if (otg_ctrl->id == 0)
-   mvotg->phy.otg->state = OTG_STATE_A_IDLE;
+   mvotg->usb_phy.otg->state = OTG_STATE_A_IDLE;
else if (otg_ctrl->b_sess_vld)
-   mvotg->phy.otg->state = OTG_STATE_B_PERIPHERAL;
+   mvotg->usb_phy.otg->state = OTG_STATE_B_PERIPHERAL;
break;
case OTG_STATE_B_PERIPHERAL:
if (!otg_ctrl->b_sess_vld || otg_ctrl->id == 0)
-   mvotg->phy.otg->state = OTG_STATE_B_IDLE;
+