usb: chipidea: introduce ci_platform_configure
authorPeter Chen <peter.chen@freescale.com>
Tue, 17 Mar 2015 02:40:50 +0000 (10:40 +0800)
committerPeter Chen <peter.chen@freescale.com>
Fri, 14 Aug 2015 01:13:11 +0000 (09:13 +0800)
It is used to configure controller parameters according to
platform data, like speed, stream mode, etc, both host and
device's initialization need it, most of code are the
same for both roles, with this new interface, it can reduce
the duplicated code and be easy to maintain in future.

Signed-off-by: Peter Chen <peter.chen@freescale.com>
drivers/usb/chipidea/ci.h
drivers/usb/chipidea/core.c
drivers/usb/chipidea/host.c

index df57e49ed4ef7082f6446931ac5d8141d376f595..1320a4dbbcd5a7ec9d160032b84e2613d36c6b33 100644 (file)
@@ -427,4 +427,6 @@ u8 hw_port_test_get(struct ci_hdrc *ci);
 int hw_wait_reg(struct ci_hdrc *ci, enum ci_hw_regs reg, u32 mask,
                                u32 value, unsigned int timeout_ms);
 
+void ci_platform_configure(struct ci_hdrc *ci);
+
 #endif /* __DRIVERS_USB_CHIPIDEA_CI_H */
index b0d01f26cd5e7b8ff46cd01ebec8e71a3e1e46aa..1b1dd80897f75d09e13acbf2102f1c19c020dcc7 100644 (file)
@@ -405,6 +405,28 @@ static int ci_usb_phy_init(struct ci_hdrc *ci)
        return ret;
 }
 
+
+/**
+ * ci_platform_configure: do controller configure
+ * @ci: the controller
+ *
+ */
+void ci_platform_configure(struct ci_hdrc *ci)
+{
+       if (ci->platdata->flags & CI_HDRC_DISABLE_STREAMING)
+               hw_write(ci, OP_USBMODE, USBMODE_CI_SDIS, USBMODE_CI_SDIS);
+
+       if (ci->platdata->flags & CI_HDRC_FORCE_FULLSPEED) {
+               if (ci->hw_bank.lpm)
+                       hw_write(ci, OP_DEVLC, DEVLC_PFSC, DEVLC_PFSC);
+               else
+                       hw_write(ci, OP_PORTSC, PORTSC_PFSC, PORTSC_PFSC);
+       }
+
+       if (ci->platdata->flags & CI_HDRC_SET_NON_ZERO_TTHA)
+               hw_write(ci, OP_TTCTRL, TTCTRL_TTHA_MASK, TTCTRL_TTHA);
+}
+
 /**
  * hw_controller_reset: do controller reset
  * @ci: the controller
@@ -449,16 +471,6 @@ int hw_device_reset(struct ci_hdrc *ci)
                ci->platdata->notify_event(ci,
                        CI_HDRC_CONTROLLER_RESET_EVENT);
 
-       if (ci->platdata->flags & CI_HDRC_DISABLE_STREAMING)
-               hw_write(ci, OP_USBMODE, USBMODE_CI_SDIS, USBMODE_CI_SDIS);
-
-       if (ci->platdata->flags & CI_HDRC_FORCE_FULLSPEED) {
-               if (ci->hw_bank.lpm)
-                       hw_write(ci, OP_DEVLC, DEVLC_PFSC, DEVLC_PFSC);
-               else
-                       hw_write(ci, OP_PORTSC, PORTSC_PFSC, PORTSC_PFSC);
-       }
-
        /* USBMODE should be configured step by step */
        hw_write(ci, OP_USBMODE, USBMODE_CM, USBMODE_CM_IDLE);
        hw_write(ci, OP_USBMODE, USBMODE_CM, USBMODE_CM_DC);
@@ -471,6 +483,8 @@ int hw_device_reset(struct ci_hdrc *ci)
                return -ENODEV;
        }
 
+       ci_platform_configure(ci);
+
        return 0;
 }
 
index b01716c8c66b456fb8f000bc744e08648987fdf9..44554318db8a76e07331a62a4c4c8fd0cf42450d 100644 (file)
@@ -153,14 +153,7 @@ static int host_start(struct ci_hdrc *ci)
                }
        }
 
-       if (ci->platdata->flags & CI_HDRC_DISABLE_STREAMING)
-               hw_write(ci, OP_USBMODE, USBMODE_CI_SDIS, USBMODE_CI_SDIS);
-
-       if (ci->platdata->flags & CI_HDRC_FORCE_FULLSPEED)
-               hw_write(ci, OP_PORTSC, PORTSC_PFSC, PORTSC_PFSC);
-
-       if (ci->platdata->flags & CI_HDRC_SET_NON_ZERO_TTHA)
-               hw_write(ci, OP_TTCTRL, TTCTRL_TTHA_MASK, TTCTRL_TTHA);
+       ci_platform_configure(ci);
 
        return ret;