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: Heikki Krogerus <heikki.krogerus@linux.intel.com> Acked-by: Igor Grinberg <grinberg@compulab.co.il> Acked-by: Sascha Hauer <s.hauer@pengutronix.de> Reviewed-by: Marek Vasut <marek.vasut@gmail.com> Signed-off-by: Felipe Balbi <balbi@ti.com>
This commit is contained in:
parent
46b8f6b0eb
commit
298b083cf9
6 changed files with 72 additions and 60 deletions
|
@ -111,7 +111,7 @@ static int pxa310_ulpi_write(struct usb_phy *otg, u32 val, u32 reg)
|
|||
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,
|
||||
.write = pxa310_ulpi_write,
|
||||
};
|
||||
|
@ -139,7 +139,7 @@ static int pxa310_start_otg_host_transcvr(struct usb_bus *host)
|
|||
|
||||
pxa310_otg_transceiver_rtsm();
|
||||
|
||||
err = otg_init(u2d->otg);
|
||||
err = usb_phy_init(u2d->otg);
|
||||
if (err) {
|
||||
pr_err("OTG transceiver init failed");
|
||||
return err;
|
||||
|
@ -191,7 +191,7 @@ static void pxa310_stop_otg_hc(void)
|
|||
|
||||
otg_set_host(u2d->otg, NULL);
|
||||
otg_set_vbus(u2d->otg, 0);
|
||||
otg_shutdown(u2d->otg);
|
||||
usb_phy_shutdown(u2d->otg);
|
||||
}
|
||||
|
||||
static void pxa310_u2d_setup_otg_hc(void)
|
||||
|
|
|
@ -10,7 +10,7 @@ static inline struct usb_phy *imx_otg_ulpi_create(unsigned int flags)
|
|||
}
|
||||
#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 */
|
||||
|
||||
|
|
|
@ -106,7 +106,7 @@ static int ulpi_write(struct usb_phy *otg, u32 val, u32 reg)
|
|||
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,
|
||||
.write = ulpi_write,
|
||||
};
|
||||
|
|
|
@ -49,31 +49,31 @@ static struct ulpi_info ulpi_ids[] = {
|
|||
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 |
|
||||
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;
|
||||
|
||||
/*
|
||||
* ULPI Specification rev.1.1 default
|
||||
* 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;
|
||||
|
||||
if (otg->flags & ULPI_OTG_DM_PULLDOWN_DIS)
|
||||
if (phy->flags & ULPI_OTG_DM_PULLDOWN_DIS)
|
||||
flags &= ~ULPI_OTG_CTRL_DM_PULLDOWN;
|
||||
|
||||
if (otg->flags & ULPI_OTG_EXTVBUSIND)
|
||||
if (phy->flags & ULPI_OTG_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;
|
||||
|
||||
|
@ -81,27 +81,27 @@ static int ulpi_set_fc_flags(struct usb_phy *otg)
|
|||
* ULPI Specification rev.1.1 default
|
||||
* for XcvrSelect is Full Speed.
|
||||
*/
|
||||
if (otg->flags & ULPI_FC_HS)
|
||||
if (phy->flags & ULPI_FC_HS)
|
||||
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;
|
||||
else if (otg->flags & ULPI_FC_FS4LS)
|
||||
else if (phy->flags & ULPI_FC_FS4LS)
|
||||
flags |= ULPI_FUNC_CTRL_FS4LS;
|
||||
else
|
||||
flags |= ULPI_FUNC_CTRL_FULL_SPEED;
|
||||
|
||||
if (otg->flags & ULPI_FC_TERMSEL)
|
||||
if (phy->flags & ULPI_FC_TERMSEL)
|
||||
flags |= ULPI_FUNC_CTRL_TERMSELECT;
|
||||
|
||||
/*
|
||||
* ULPI Specification rev.1.1 default
|
||||
* 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;
|
||||
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;
|
||||
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;
|
||||
else
|
||||
flags |= ULPI_FUNC_CTRL_OPMODE_NORMAL;
|
||||
|
@ -112,54 +112,54 @@ static int ulpi_set_fc_flags(struct usb_phy *otg)
|
|||
*/
|
||||
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;
|
||||
|
||||
if (otg->flags & ULPI_IC_AUTORESUME)
|
||||
if (phy->flags & ULPI_IC_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;
|
||||
|
||||
if (otg->flags & ULPI_IC_IND_PASSTHRU)
|
||||
if (phy->flags & ULPI_IC_IND_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;
|
||||
|
||||
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;
|
||||
|
||||
ret = ulpi_set_otg_flags(otg);
|
||||
ret = ulpi_set_otg_flags(phy);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
ret = ulpi_set_ic_flags(otg);
|
||||
ret = ulpi_set_ic_flags(phy);
|
||||
if (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;
|
||||
unsigned int val = 0x55;
|
||||
|
||||
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)
|
||||
return ret;
|
||||
|
||||
ret = otg_io_read(otg, ULPI_SCRATCH);
|
||||
ret = usb_phy_io_read(phy, ULPI_SCRATCH);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
|
||||
|
@ -175,13 +175,13 @@ static int ulpi_check_integrity(struct usb_phy *otg)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int ulpi_init(struct usb_phy *otg)
|
||||
static int ulpi_init(struct usb_phy *phy)
|
||||
{
|
||||
int i, vid, pid, ret;
|
||||
u32 ulpi_id = 0;
|
||||
|
||||
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)
|
||||
return ret;
|
||||
ulpi_id = (ulpi_id << 8) | ret;
|
||||
|
@ -199,16 +199,17 @@ static int ulpi_init(struct usb_phy *otg)
|
|||
}
|
||||
}
|
||||
|
||||
ret = ulpi_check_integrity(otg);
|
||||
ret = ulpi_check_integrity(phy);
|
||||
if (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) {
|
||||
otg->host = NULL;
|
||||
|
@ -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_CARKITMODE);
|
||||
|
||||
if (otg->flags & ULPI_IC_6PIN_SERIAL)
|
||||
if (phy->flags & ULPI_IC_6PIN_SERIAL)
|
||||
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;
|
||||
else if (otg->flags & ULPI_IC_CARKIT)
|
||||
else if (phy->flags & ULPI_IC_CARKIT)
|
||||
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);
|
||||
|
||||
if (on) {
|
||||
if (otg->flags & ULPI_OTG_DRVVBUS)
|
||||
if (phy->flags & ULPI_OTG_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;
|
||||
}
|
||||
|
||||
return otg_io_write(otg, flags, ULPI_OTG_CTRL);
|
||||
return usb_phy_io_write(phy, flags, ULPI_OTG_CTRL);
|
||||
}
|
||||
|
||||
struct usb_phy *
|
||||
otg_ulpi_create(struct otg_io_access_ops *ops,
|
||||
otg_ulpi_create(struct usb_phy_io_ops *ops,
|
||||
unsigned int flags)
|
||||
{
|
||||
struct usb_phy *otg;
|
||||
struct usb_phy *phy;
|
||||
struct usb_otg *otg;
|
||||
|
||||
otg = kzalloc(sizeof(*otg), GFP_KERNEL);
|
||||
if (!otg)
|
||||
phy = kzalloc(sizeof(*phy), GFP_KERNEL);
|
||||
if (!phy)
|
||||
return NULL;
|
||||
|
||||
otg->label = "ULPI";
|
||||
otg->flags = flags;
|
||||
otg->io_ops = ops;
|
||||
otg->init = ulpi_init;
|
||||
otg = kzalloc(sizeof(*otg), GFP_KERNEL);
|
||||
if (!otg) {
|
||||
kfree(phy);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
phy->label = "ULPI";
|
||||
phy->flags = flags;
|
||||
phy->io_ops = ops;
|
||||
phy->otg = otg;
|
||||
phy->init = ulpi_init;
|
||||
|
||||
otg->phy = phy;
|
||||
otg->set_host = ulpi_set_host;
|
||||
otg->set_vbus = ulpi_set_vbus;
|
||||
|
||||
return otg;
|
||||
return phy;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(otg_ulpi_create);
|
||||
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
||||
struct otg_io_access_ops ulpi_viewport_access_ops = {
|
||||
struct usb_phy_io_ops ulpi_viewport_access_ops = {
|
||||
.read = ulpi_viewport_read,
|
||||
.write = ulpi_viewport_write,
|
||||
};
|
||||
|
|
|
@ -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);
|
||||
|
||||
#ifdef CONFIG_USB_ULPI_VIEWPORT
|
||||
/* 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 /* __LINUX_USB_ULPI_H */
|
||||
|
|
Loading…
Reference in a new issue