On 20-07-01 08:20:04, Pawel Laszczak wrote: > Patch split function cdns3_drd_switch_gadget and > cdns3_drd_switch_host into: > - cdns3_drd_host_on > - cdns3_drd_host_off > - cdns3_drd_gadget_on > - cdns3_drd_gadgett_off > > These functions don't have any shared code so it's better to > have smaller, faster and easier functions. Changes the patch title, otherwise: Reviewed-by: Peter Chen <peter.chen@xxxxxxx> Peter > > Signed-off-by: Pawel Laszczak <pawell@xxxxxxxxxxx> > --- > drivers/usb/cdns3/drd.c | 124 ++++++++++++++++++++----------------- > drivers/usb/cdns3/drd.h | 6 +- > drivers/usb/cdns3/gadget.c | 4 +- > drivers/usb/cdns3/host.c | 4 +- > 4 files changed, 76 insertions(+), 62 deletions(-) > > diff --git a/drivers/usb/cdns3/drd.c b/drivers/usb/cdns3/drd.c > index 8e7673da905e..6234bcd6158a 100644 > --- a/drivers/usb/cdns3/drd.c > +++ b/drivers/usb/cdns3/drd.c > @@ -124,85 +124,97 @@ static void cdns3_otg_enable_irq(struct cdns3 *cdns) > } > > /** > - * cdns3_drd_switch_host - start/stop host > - * @cdns: Pointer to controller context structure > - * @on: 1 for start, 0 for stop > + * cdns3_drd_host_on - start host. > + * @cdns: Pointer to controller context structure. > * > - * Returns 0 on success otherwise negative errno > + * Returns 0 on success otherwise negative errno. > */ > -int cdns3_drd_switch_host(struct cdns3 *cdns, int on) > +int cdns3_drd_host_on(struct cdns3 *cdns) > { > - int ret, val; > + u32 val; > + int ret; > > - /* switch OTG core */ > - if (on) { > - writel(OTGCMD_HOST_BUS_REQ | OTGCMD_OTG_DIS, > - &cdns->otg_regs->cmd); > - > - dev_dbg(cdns->dev, "Waiting till Host mode is turned on\n"); > - ret = readl_poll_timeout_atomic(&cdns->otg_regs->sts, val, > - val & OTGSTS_XHCI_READY, > - 1, 100000); > - if (ret) { > - dev_err(cdns->dev, "timeout waiting for xhci_ready\n"); > - return ret; > - } > - } else { > - writel(OTGCMD_HOST_BUS_DROP | OTGCMD_DEV_BUS_DROP | > - OTGCMD_DEV_POWER_OFF | OTGCMD_HOST_POWER_OFF, > - &cdns->otg_regs->cmd); > - /* Waiting till H_IDLE state.*/ > - readl_poll_timeout_atomic(&cdns->otg_regs->state, val, > - !(val & OTGSTATE_HOST_STATE_MASK), > - 1, 2000000); > - } > + /* Enable host mode. */ > + writel(OTGCMD_HOST_BUS_REQ | OTGCMD_OTG_DIS, > + &cdns->otg_regs->cmd); > > - return 0; > + dev_dbg(cdns->dev, "Waiting till Host mode is turned on\n"); > + ret = readl_poll_timeout_atomic(&cdns->otg_regs->sts, val, > + val & OTGSTS_XHCI_READY, 1, 100000); > + > + if (ret) > + dev_err(cdns->dev, "timeout waiting for xhci_ready\n"); > + > + return ret; > } > > /** > - * cdns3_drd_switch_gadget - start/stop gadget > - * @cdns: Pointer to controller context structure > - * @on: 1 for start, 0 for stop > + * cdns3_drd_host_off - stop host. > + * @cdns: Pointer to controller context structure. > + */ > +void cdns3_drd_host_off(struct cdns3 *cdns) > +{ > + u32 val; > + > + writel(OTGCMD_HOST_BUS_DROP | OTGCMD_DEV_BUS_DROP | > + OTGCMD_DEV_POWER_OFF | OTGCMD_HOST_POWER_OFF, > + &cdns->otg_regs->cmd); > + > + /* Waiting till H_IDLE state.*/ > + readl_poll_timeout_atomic(&cdns->otg_regs->state, val, > + !(val & OTGSTATE_HOST_STATE_MASK), > + 1, 2000000); > +} > + > +/** > + * cdns3_drd_gadget_on - start gadget. > + * @cdns: Pointer to controller context structure. > * > * Returns 0 on success otherwise negative errno > */ > -int cdns3_drd_switch_gadget(struct cdns3 *cdns, int on) > +int cdns3_drd_gadget_on(struct cdns3 *cdns) > { > int ret, val; > u32 reg = OTGCMD_OTG_DIS; > > /* switch OTG core */ > - if (on) { > - writel(OTGCMD_DEV_BUS_REQ | reg, &cdns->otg_regs->cmd); > + writel(OTGCMD_DEV_BUS_REQ | reg, &cdns->otg_regs->cmd); > > - dev_dbg(cdns->dev, "Waiting till Device mode is turned on\n"); > + dev_dbg(cdns->dev, "Waiting till Device mode is turned on\n"); > > - ret = readl_poll_timeout_atomic(&cdns->otg_regs->sts, val, > - val & OTGSTS_DEV_READY, > - 1, 100000); > - if (ret) { > - dev_err(cdns->dev, "timeout waiting for dev_ready\n"); > - return ret; > - } > - } else { > - /* > - * driver should wait at least 10us after disabling Device > - * before turning-off Device (DEV_BUS_DROP) > - */ > - usleep_range(20, 30); > - writel(OTGCMD_HOST_BUS_DROP | OTGCMD_DEV_BUS_DROP | > - OTGCMD_DEV_POWER_OFF | OTGCMD_HOST_POWER_OFF, > - &cdns->otg_regs->cmd); > - /* Waiting till DEV_IDLE state.*/ > - readl_poll_timeout_atomic(&cdns->otg_regs->state, val, > - !(val & OTGSTATE_DEV_STATE_MASK), > - 1, 2000000); > + ret = readl_poll_timeout_atomic(&cdns->otg_regs->sts, val, > + val & OTGSTS_DEV_READY, > + 1, 100000); > + if (ret) { > + dev_err(cdns->dev, "timeout waiting for dev_ready\n"); > + return ret; > } > > return 0; > } > > +/** > + * cdns3_drd_gadget_off - stop gadget. > + * @cdns: Pointer to controller context structure. > + */ > +void cdns3_drd_gadget_off(struct cdns3 *cdns) > +{ > + u32 val; > + > + /* > + * Driver should wait at least 10us after disabling Device > + * before turning-off Device (DEV_BUS_DROP). > + */ > + usleep_range(20, 30); > + writel(OTGCMD_HOST_BUS_DROP | OTGCMD_DEV_BUS_DROP | > + OTGCMD_DEV_POWER_OFF | OTGCMD_HOST_POWER_OFF, > + &cdns->otg_regs->cmd); > + /* Waiting till DEV_IDLE state.*/ > + readl_poll_timeout_atomic(&cdns->otg_regs->state, val, > + !(val & OTGSTATE_DEV_STATE_MASK), > + 1, 2000000); > +} > + > /** > * cdns3_init_otg_mode - initialize drd controller > * @cdns: Pointer to controller context structure > diff --git a/drivers/usb/cdns3/drd.h b/drivers/usb/cdns3/drd.h > index 3889fead9df1..7e7cf7fa2dd3 100644 > --- a/drivers/usb/cdns3/drd.h > +++ b/drivers/usb/cdns3/drd.h > @@ -163,8 +163,10 @@ int cdns3_get_vbus(struct cdns3 *cdns); > int cdns3_drd_init(struct cdns3 *cdns); > int cdns3_drd_exit(struct cdns3 *cdns); > int cdns3_drd_update_mode(struct cdns3 *cdns); > -int cdns3_drd_switch_gadget(struct cdns3 *cdns, int on); > -int cdns3_drd_switch_host(struct cdns3 *cdns, int on); > +int cdns3_drd_gadget_on(struct cdns3 *cdns); > +void cdns3_drd_gadget_off(struct cdns3 *cdns); > +int cdns3_drd_host_on(struct cdns3 *cdns); > +void cdns3_drd_host_off(struct cdns3 *cdns); > int cdns3_set_mode(struct cdns3 *cdns, enum usb_dr_mode mode); > > #endif /* __LINUX_CDNS3_DRD */ > diff --git a/drivers/usb/cdns3/gadget.c b/drivers/usb/cdns3/gadget.c > index c303ab7c62d1..6ea6839a2a8c 100644 > --- a/drivers/usb/cdns3/gadget.c > +++ b/drivers/usb/cdns3/gadget.c > @@ -3014,7 +3014,7 @@ void cdns3_gadget_exit(struct cdns3 *cdns) > kfree(priv_dev->zlp_buf); > kfree(priv_dev); > cdns->gadget_dev = NULL; > - cdns3_drd_switch_gadget(cdns, 0); > + cdns3_drd_gadget_off(cdns); > } > > static int cdns3_gadget_start(struct cdns3 *cdns) > @@ -3145,7 +3145,7 @@ static int __cdns3_gadget_init(struct cdns3 *cdns) > return ret; > } > > - cdns3_drd_switch_gadget(cdns, 1); > + cdns3_drd_gadget_on(cdns); > pm_runtime_get_sync(cdns->dev); > > ret = cdns3_gadget_start(cdns); > diff --git a/drivers/usb/cdns3/host.c b/drivers/usb/cdns3/host.c > index ad788bf3fe4f..36c63d9ecd37 100644 > --- a/drivers/usb/cdns3/host.c > +++ b/drivers/usb/cdns3/host.c > @@ -19,7 +19,7 @@ static int __cdns3_host_init(struct cdns3 *cdns) > struct platform_device *xhci; > int ret; > > - cdns3_drd_switch_host(cdns, 1); > + cdns3_drd_host_on(cdns); > > xhci = platform_device_alloc("xhci-hcd", PLATFORM_DEVID_AUTO); > if (!xhci) { > @@ -53,7 +53,7 @@ static void cdns3_host_exit(struct cdns3 *cdns) > { > platform_device_unregister(cdns->host_dev); > cdns->host_dev = NULL; > - cdns3_drd_switch_host(cdns, 0); > + cdns3_drd_host_off(cdns); > } > > int cdns3_host_init(struct cdns3 *cdns) > -- > 2.17.1 > -- Thanks, Peter Chen