Commit 37f30d88 authored by Hans de Goede's avatar Hans de Goede Committed by Greg Kroah-Hartman

usb: musb: sunxi: Add set_mode platform function

Move the mode handling to the platform_set_mode callback.
Signed-off-by: default avatarHans de Goede <hdegoede@redhat.com>
[b-liu@ti.com: revise subject prefix]
Signed-off-by: default avatarBin Liu <b-liu@ti.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent b6a6631d
...@@ -264,15 +264,6 @@ static int sunxi_musb_init(struct musb *musb) ...@@ -264,15 +264,6 @@ static int sunxi_musb_init(struct musb *musb)
if (ret) if (ret)
goto error_unregister_notifier; goto error_unregister_notifier;
if (musb->port_mode == MUSB_PORT_MODE_HOST) {
ret = phy_power_on(glue->phy);
if (ret)
goto error_phy_exit;
set_bit(SUNXI_MUSB_FL_PHY_ON, &glue->flags);
/* Stop musb work from turning vbus off again */
set_bit(SUNXI_MUSB_FL_VBUS_ON, &glue->flags);
}
musb->isr = sunxi_musb_interrupt; musb->isr = sunxi_musb_interrupt;
/* Stop the musb-core from doing runtime pm (not supported on sunxi) */ /* Stop the musb-core from doing runtime pm (not supported on sunxi) */
...@@ -280,8 +271,6 @@ static int sunxi_musb_init(struct musb *musb) ...@@ -280,8 +271,6 @@ static int sunxi_musb_init(struct musb *musb)
return 0; return 0;
error_phy_exit:
phy_exit(glue->phy);
error_unregister_notifier: error_unregister_notifier:
if (musb->port_mode == MUSB_PORT_MODE_DUAL_ROLE) if (musb->port_mode == MUSB_PORT_MODE_DUAL_ROLE)
extcon_unregister_notifier(glue->extcon, EXTCON_USB_HOST, extcon_unregister_notifier(glue->extcon, EXTCON_USB_HOST,
...@@ -323,6 +312,24 @@ static int sunxi_musb_exit(struct musb *musb) ...@@ -323,6 +312,24 @@ static int sunxi_musb_exit(struct musb *musb)
return 0; return 0;
} }
static int sunxi_set_mode(struct musb *musb, u8 mode)
{
struct sunxi_glue *glue = dev_get_drvdata(musb->controller->parent);
int ret;
if (mode == MUSB_HOST) {
ret = phy_power_on(glue->phy);
if (ret)
return ret;
set_bit(SUNXI_MUSB_FL_PHY_ON, &glue->flags);
/* Stop musb work from turning vbus off again */
set_bit(SUNXI_MUSB_FL_VBUS_ON, &glue->flags);
}
return 0;
}
static void sunxi_musb_enable(struct musb *musb) static void sunxi_musb_enable(struct musb *musb)
{ {
struct sunxi_glue *glue = dev_get_drvdata(musb->controller->parent); struct sunxi_glue *glue = dev_get_drvdata(musb->controller->parent);
...@@ -569,6 +576,7 @@ static const struct musb_platform_ops sunxi_musb_ops = { ...@@ -569,6 +576,7 @@ static const struct musb_platform_ops sunxi_musb_ops = {
.exit = sunxi_musb_exit, .exit = sunxi_musb_exit,
.enable = sunxi_musb_enable, .enable = sunxi_musb_enable,
.disable = sunxi_musb_disable, .disable = sunxi_musb_disable,
.set_mode = sunxi_set_mode,
.fifo_offset = sunxi_musb_fifo_offset, .fifo_offset = sunxi_musb_fifo_offset,
.ep_offset = sunxi_musb_ep_offset, .ep_offset = sunxi_musb_ep_offset,
.busctl_offset = sunxi_musb_busctl_offset, .busctl_offset = sunxi_musb_busctl_offset,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment