提交 298b083c 编写于 作者: H Heikki Krogerus 提交者: Felipe Balbi

usb: otg: ulpi: Start using struct usb_otg

Use struct usb_otg members with OTG specific functions instead
of usb_phy members.
Signed-off-by: NHeikki Krogerus <heikki.krogerus@linux.intel.com>
Acked-by: NIgor Grinberg <grinberg@compulab.co.il>
Acked-by: NSascha Hauer <s.hauer@pengutronix.de>
Reviewed-by: NMarek Vasut <marek.vasut@gmail.com>
Signed-off-by: NFelipe Balbi <balbi@ti.com>
上级 46b8f6b0
...@@ -111,7 +111,7 @@ static int pxa310_ulpi_write(struct usb_phy *otg, u32 val, u32 reg) ...@@ -111,7 +111,7 @@ static int pxa310_ulpi_write(struct usb_phy *otg, u32 val, u32 reg)
return pxa310_ulpi_poll(); return pxa310_ulpi_poll();
} }
struct otg_io_access_ops pxa310_ulpi_access_ops = { struct usb_phy_io_ops pxa310_ulpi_access_ops = {
.read = pxa310_ulpi_read, .read = pxa310_ulpi_read,
.write = pxa310_ulpi_write, .write = pxa310_ulpi_write,
}; };
...@@ -139,7 +139,7 @@ static int pxa310_start_otg_host_transcvr(struct usb_bus *host) ...@@ -139,7 +139,7 @@ static int pxa310_start_otg_host_transcvr(struct usb_bus *host)
pxa310_otg_transceiver_rtsm(); pxa310_otg_transceiver_rtsm();
err = otg_init(u2d->otg); err = usb_phy_init(u2d->otg);
if (err) { if (err) {
pr_err("OTG transceiver init failed"); pr_err("OTG transceiver init failed");
return err; return err;
...@@ -191,7 +191,7 @@ static void pxa310_stop_otg_hc(void) ...@@ -191,7 +191,7 @@ static void pxa310_stop_otg_hc(void)
otg_set_host(u2d->otg, NULL); otg_set_host(u2d->otg, NULL);
otg_set_vbus(u2d->otg, 0); otg_set_vbus(u2d->otg, 0);
otg_shutdown(u2d->otg); usb_phy_shutdown(u2d->otg);
} }
static void pxa310_u2d_setup_otg_hc(void) static void pxa310_u2d_setup_otg_hc(void)
......
...@@ -10,7 +10,7 @@ static inline struct usb_phy *imx_otg_ulpi_create(unsigned int flags) ...@@ -10,7 +10,7 @@ static inline struct usb_phy *imx_otg_ulpi_create(unsigned int flags)
} }
#endif #endif
extern struct otg_io_access_ops mxc_ulpi_access_ops; extern struct usb_phy_io_ops mxc_ulpi_access_ops;
#endif /* __MACH_ULPI_H */ #endif /* __MACH_ULPI_H */
...@@ -106,7 +106,7 @@ static int ulpi_write(struct usb_phy *otg, u32 val, u32 reg) ...@@ -106,7 +106,7 @@ static int ulpi_write(struct usb_phy *otg, u32 val, u32 reg)
return ulpi_poll(view, ULPIVW_RUN); return ulpi_poll(view, ULPIVW_RUN);
} }
struct otg_io_access_ops mxc_ulpi_access_ops = { struct usb_phy_io_ops mxc_ulpi_access_ops = {
.read = ulpi_read, .read = ulpi_read,
.write = ulpi_write, .write = ulpi_write,
}; };
......
...@@ -49,31 +49,31 @@ static struct ulpi_info ulpi_ids[] = { ...@@ -49,31 +49,31 @@ static struct ulpi_info ulpi_ids[] = {
ULPI_INFO(ULPI_ID(0x0424, 0x0006), "SMSC USB331x"), ULPI_INFO(ULPI_ID(0x0424, 0x0006), "SMSC USB331x"),
}; };
static int ulpi_set_otg_flags(struct usb_phy *otg) static int ulpi_set_otg_flags(struct usb_phy *phy)
{ {
unsigned int flags = ULPI_OTG_CTRL_DP_PULLDOWN | unsigned int flags = ULPI_OTG_CTRL_DP_PULLDOWN |
ULPI_OTG_CTRL_DM_PULLDOWN; ULPI_OTG_CTRL_DM_PULLDOWN;
if (otg->flags & ULPI_OTG_ID_PULLUP) if (phy->flags & ULPI_OTG_ID_PULLUP)
flags |= ULPI_OTG_CTRL_ID_PULLUP; flags |= ULPI_OTG_CTRL_ID_PULLUP;
/* /*
* ULPI Specification rev.1.1 default * ULPI Specification rev.1.1 default
* for Dp/DmPulldown is enabled. * for Dp/DmPulldown is enabled.
*/ */
if (otg->flags & ULPI_OTG_DP_PULLDOWN_DIS) if (phy->flags & ULPI_OTG_DP_PULLDOWN_DIS)
flags &= ~ULPI_OTG_CTRL_DP_PULLDOWN; flags &= ~ULPI_OTG_CTRL_DP_PULLDOWN;
if (otg->flags & ULPI_OTG_DM_PULLDOWN_DIS) if (phy->flags & ULPI_OTG_DM_PULLDOWN_DIS)
flags &= ~ULPI_OTG_CTRL_DM_PULLDOWN; flags &= ~ULPI_OTG_CTRL_DM_PULLDOWN;
if (otg->flags & ULPI_OTG_EXTVBUSIND) if (phy->flags & ULPI_OTG_EXTVBUSIND)
flags |= ULPI_OTG_CTRL_EXTVBUSIND; flags |= ULPI_OTG_CTRL_EXTVBUSIND;
return otg_io_write(otg, flags, ULPI_OTG_CTRL); return usb_phy_io_write(phy, flags, ULPI_OTG_CTRL);
} }
static int ulpi_set_fc_flags(struct usb_phy *otg) static int ulpi_set_fc_flags(struct usb_phy *phy)
{ {
unsigned int flags = 0; unsigned int flags = 0;
...@@ -81,27 +81,27 @@ static int ulpi_set_fc_flags(struct usb_phy *otg) ...@@ -81,27 +81,27 @@ static int ulpi_set_fc_flags(struct usb_phy *otg)
* ULPI Specification rev.1.1 default * ULPI Specification rev.1.1 default
* for XcvrSelect is Full Speed. * for XcvrSelect is Full Speed.
*/ */
if (otg->flags & ULPI_FC_HS) if (phy->flags & ULPI_FC_HS)
flags |= ULPI_FUNC_CTRL_HIGH_SPEED; flags |= ULPI_FUNC_CTRL_HIGH_SPEED;
else if (otg->flags & ULPI_FC_LS) else if (phy->flags & ULPI_FC_LS)
flags |= ULPI_FUNC_CTRL_LOW_SPEED; flags |= ULPI_FUNC_CTRL_LOW_SPEED;
else if (otg->flags & ULPI_FC_FS4LS) else if (phy->flags & ULPI_FC_FS4LS)
flags |= ULPI_FUNC_CTRL_FS4LS; flags |= ULPI_FUNC_CTRL_FS4LS;
else else
flags |= ULPI_FUNC_CTRL_FULL_SPEED; flags |= ULPI_FUNC_CTRL_FULL_SPEED;
if (otg->flags & ULPI_FC_TERMSEL) if (phy->flags & ULPI_FC_TERMSEL)
flags |= ULPI_FUNC_CTRL_TERMSELECT; flags |= ULPI_FUNC_CTRL_TERMSELECT;
/* /*
* ULPI Specification rev.1.1 default * ULPI Specification rev.1.1 default
* for OpMode is Normal Operation. * for OpMode is Normal Operation.
*/ */
if (otg->flags & ULPI_FC_OP_NODRV) if (phy->flags & ULPI_FC_OP_NODRV)
flags |= ULPI_FUNC_CTRL_OPMODE_NONDRIVING; flags |= ULPI_FUNC_CTRL_OPMODE_NONDRIVING;
else if (otg->flags & ULPI_FC_OP_DIS_NRZI) else if (phy->flags & ULPI_FC_OP_DIS_NRZI)
flags |= ULPI_FUNC_CTRL_OPMODE_DISABLE_NRZI; flags |= ULPI_FUNC_CTRL_OPMODE_DISABLE_NRZI;
else if (otg->flags & ULPI_FC_OP_NSYNC_NEOP) else if (phy->flags & ULPI_FC_OP_NSYNC_NEOP)
flags |= ULPI_FUNC_CTRL_OPMODE_NOSYNC_NOEOP; flags |= ULPI_FUNC_CTRL_OPMODE_NOSYNC_NOEOP;
else else
flags |= ULPI_FUNC_CTRL_OPMODE_NORMAL; flags |= ULPI_FUNC_CTRL_OPMODE_NORMAL;
...@@ -112,54 +112,54 @@ static int ulpi_set_fc_flags(struct usb_phy *otg) ...@@ -112,54 +112,54 @@ static int ulpi_set_fc_flags(struct usb_phy *otg)
*/ */
flags |= ULPI_FUNC_CTRL_SUSPENDM; flags |= ULPI_FUNC_CTRL_SUSPENDM;
return otg_io_write(otg, flags, ULPI_FUNC_CTRL); return usb_phy_io_write(phy, flags, ULPI_FUNC_CTRL);
} }
static int ulpi_set_ic_flags(struct usb_phy *otg) static int ulpi_set_ic_flags(struct usb_phy *phy)
{ {
unsigned int flags = 0; unsigned int flags = 0;
if (otg->flags & ULPI_IC_AUTORESUME) if (phy->flags & ULPI_IC_AUTORESUME)
flags |= ULPI_IFC_CTRL_AUTORESUME; flags |= ULPI_IFC_CTRL_AUTORESUME;
if (otg->flags & ULPI_IC_EXTVBUS_INDINV) if (phy->flags & ULPI_IC_EXTVBUS_INDINV)
flags |= ULPI_IFC_CTRL_EXTERNAL_VBUS; flags |= ULPI_IFC_CTRL_EXTERNAL_VBUS;
if (otg->flags & ULPI_IC_IND_PASSTHRU) if (phy->flags & ULPI_IC_IND_PASSTHRU)
flags |= ULPI_IFC_CTRL_PASSTHRU; flags |= ULPI_IFC_CTRL_PASSTHRU;
if (otg->flags & ULPI_IC_PROTECT_DIS) if (phy->flags & ULPI_IC_PROTECT_DIS)
flags |= ULPI_IFC_CTRL_PROTECT_IFC_DISABLE; flags |= ULPI_IFC_CTRL_PROTECT_IFC_DISABLE;
return otg_io_write(otg, flags, ULPI_IFC_CTRL); return usb_phy_io_write(phy, flags, ULPI_IFC_CTRL);
} }
static int ulpi_set_flags(struct usb_phy *otg) static int ulpi_set_flags(struct usb_phy *phy)
{ {
int ret; int ret;
ret = ulpi_set_otg_flags(otg); ret = ulpi_set_otg_flags(phy);
if (ret) if (ret)
return ret; return ret;
ret = ulpi_set_ic_flags(otg); ret = ulpi_set_ic_flags(phy);
if (ret) if (ret)
return ret; return ret;
return ulpi_set_fc_flags(otg); return ulpi_set_fc_flags(phy);
} }
static int ulpi_check_integrity(struct usb_phy *otg) static int ulpi_check_integrity(struct usb_phy *phy)
{ {
int ret, i; int ret, i;
unsigned int val = 0x55; unsigned int val = 0x55;
for (i = 0; i < 2; i++) { for (i = 0; i < 2; i++) {
ret = otg_io_write(otg, val, ULPI_SCRATCH); ret = usb_phy_io_write(phy, val, ULPI_SCRATCH);
if (ret < 0) if (ret < 0)
return ret; return ret;
ret = otg_io_read(otg, ULPI_SCRATCH); ret = usb_phy_io_read(phy, ULPI_SCRATCH);
if (ret < 0) if (ret < 0)
return ret; return ret;
...@@ -175,13 +175,13 @@ static int ulpi_check_integrity(struct usb_phy *otg) ...@@ -175,13 +175,13 @@ static int ulpi_check_integrity(struct usb_phy *otg)
return 0; return 0;
} }
static int ulpi_init(struct usb_phy *otg) static int ulpi_init(struct usb_phy *phy)
{ {
int i, vid, pid, ret; int i, vid, pid, ret;
u32 ulpi_id = 0; u32 ulpi_id = 0;
for (i = 0; i < 4; i++) { for (i = 0; i < 4; i++) {
ret = otg_io_read(otg, ULPI_PRODUCT_ID_HIGH - i); ret = usb_phy_io_read(phy, ULPI_PRODUCT_ID_HIGH - i);
if (ret < 0) if (ret < 0)
return ret; return ret;
ulpi_id = (ulpi_id << 8) | ret; ulpi_id = (ulpi_id << 8) | ret;
...@@ -199,16 +199,17 @@ static int ulpi_init(struct usb_phy *otg) ...@@ -199,16 +199,17 @@ static int ulpi_init(struct usb_phy *otg)
} }
} }
ret = ulpi_check_integrity(otg); ret = ulpi_check_integrity(phy);
if (ret) if (ret)
return ret; return ret;
return ulpi_set_flags(otg); return ulpi_set_flags(phy);
} }
static int ulpi_set_host(struct usb_phy *otg, struct usb_bus *host) static int ulpi_set_host(struct usb_otg *otg, struct usb_bus *host)
{ {
unsigned int flags = otg_io_read(otg, ULPI_IFC_CTRL); struct usb_phy *phy = otg->phy;
unsigned int flags = usb_phy_io_read(phy, ULPI_IFC_CTRL);
if (!host) { if (!host) {
otg->host = NULL; otg->host = NULL;
...@@ -221,51 +222,62 @@ static int ulpi_set_host(struct usb_phy *otg, struct usb_bus *host) ...@@ -221,51 +222,62 @@ static int ulpi_set_host(struct usb_phy *otg, struct usb_bus *host)
ULPI_IFC_CTRL_3_PIN_SERIAL_MODE | ULPI_IFC_CTRL_3_PIN_SERIAL_MODE |
ULPI_IFC_CTRL_CARKITMODE); ULPI_IFC_CTRL_CARKITMODE);
if (otg->flags & ULPI_IC_6PIN_SERIAL) if (phy->flags & ULPI_IC_6PIN_SERIAL)
flags |= ULPI_IFC_CTRL_6_PIN_SERIAL_MODE; flags |= ULPI_IFC_CTRL_6_PIN_SERIAL_MODE;
else if (otg->flags & ULPI_IC_3PIN_SERIAL) else if (phy->flags & ULPI_IC_3PIN_SERIAL)
flags |= ULPI_IFC_CTRL_3_PIN_SERIAL_MODE; flags |= ULPI_IFC_CTRL_3_PIN_SERIAL_MODE;
else if (otg->flags & ULPI_IC_CARKIT) else if (phy->flags & ULPI_IC_CARKIT)
flags |= ULPI_IFC_CTRL_CARKITMODE; flags |= ULPI_IFC_CTRL_CARKITMODE;
return otg_io_write(otg, flags, ULPI_IFC_CTRL); return usb_phy_io_write(phy, flags, ULPI_IFC_CTRL);
} }
static int ulpi_set_vbus(struct usb_phy *otg, bool on) static int ulpi_set_vbus(struct usb_otg *otg, bool on)
{ {
unsigned int flags = otg_io_read(otg, ULPI_OTG_CTRL); struct usb_phy *phy = otg->phy;
unsigned int flags = usb_phy_io_read(phy, ULPI_OTG_CTRL);
flags &= ~(ULPI_OTG_CTRL_DRVVBUS | ULPI_OTG_CTRL_DRVVBUS_EXT); flags &= ~(ULPI_OTG_CTRL_DRVVBUS | ULPI_OTG_CTRL_DRVVBUS_EXT);
if (on) { if (on) {
if (otg->flags & ULPI_OTG_DRVVBUS) if (phy->flags & ULPI_OTG_DRVVBUS)
flags |= ULPI_OTG_CTRL_DRVVBUS; flags |= ULPI_OTG_CTRL_DRVVBUS;
if (otg->flags & ULPI_OTG_DRVVBUS_EXT) if (phy->flags & ULPI_OTG_DRVVBUS_EXT)
flags |= ULPI_OTG_CTRL_DRVVBUS_EXT; flags |= ULPI_OTG_CTRL_DRVVBUS_EXT;
} }
return otg_io_write(otg, flags, ULPI_OTG_CTRL); return usb_phy_io_write(phy, flags, ULPI_OTG_CTRL);
} }
struct usb_phy * struct usb_phy *
otg_ulpi_create(struct otg_io_access_ops *ops, otg_ulpi_create(struct usb_phy_io_ops *ops,
unsigned int flags) unsigned int flags)
{ {
struct usb_phy *otg; struct usb_phy *phy;
struct usb_otg *otg;
phy = kzalloc(sizeof(*phy), GFP_KERNEL);
if (!phy)
return NULL;
otg = kzalloc(sizeof(*otg), GFP_KERNEL); otg = kzalloc(sizeof(*otg), GFP_KERNEL);
if (!otg) if (!otg) {
kfree(phy);
return NULL; return NULL;
}
phy->label = "ULPI";
phy->flags = flags;
phy->io_ops = ops;
phy->otg = otg;
phy->init = ulpi_init;
otg->label = "ULPI"; otg->phy = phy;
otg->flags = flags;
otg->io_ops = ops;
otg->init = ulpi_init;
otg->set_host = ulpi_set_host; otg->set_host = ulpi_set_host;
otg->set_vbus = ulpi_set_vbus; otg->set_vbus = ulpi_set_vbus;
return otg; return phy;
} }
EXPORT_SYMBOL_GPL(otg_ulpi_create); EXPORT_SYMBOL_GPL(otg_ulpi_create);
...@@ -74,7 +74,7 @@ static int ulpi_viewport_write(struct usb_phy *otg, u32 val, u32 reg) ...@@ -74,7 +74,7 @@ static int ulpi_viewport_write(struct usb_phy *otg, u32 val, u32 reg)
return ulpi_viewport_wait(view, ULPI_VIEW_RUN); return ulpi_viewport_wait(view, ULPI_VIEW_RUN);
} }
struct otg_io_access_ops ulpi_viewport_access_ops = { struct usb_phy_io_ops ulpi_viewport_access_ops = {
.read = ulpi_viewport_read, .read = ulpi_viewport_read,
.write = ulpi_viewport_write, .write = ulpi_viewport_write,
}; };
...@@ -181,12 +181,12 @@ ...@@ -181,12 +181,12 @@
/*-------------------------------------------------------------------------*/ /*-------------------------------------------------------------------------*/
struct usb_phy *otg_ulpi_create(struct otg_io_access_ops *ops, struct usb_phy *otg_ulpi_create(struct usb_phy_io_ops *ops,
unsigned int flags); unsigned int flags);
#ifdef CONFIG_USB_ULPI_VIEWPORT #ifdef CONFIG_USB_ULPI_VIEWPORT
/* access ops for controllers with a viewport register */ /* access ops for controllers with a viewport register */
extern struct otg_io_access_ops ulpi_viewport_access_ops; extern struct usb_phy_io_ops ulpi_viewport_access_ops;
#endif #endif
#endif /* __LINUX_USB_ULPI_H */ #endif /* __LINUX_USB_ULPI_H */
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册