On Wed, Oct 2, 2019 at 7:09 AM Thierry Reding <thierry.reding@xxxxxxxxx> wrote: > > On Tue, Oct 01, 2019 at 09:41:51PM -0400, Peter Geis wrote: > > As the tegra-udc driver does not yet support all modes, add dr_mode > > checking capability. > > Warn about invalid configurations and explicitly assign dr_mode before > > handing off to the chipidea core driver. > > > > Signed-off-by: Peter Geis <pgwipeout@xxxxxxxxx> > > --- > > drivers/usb/chipidea/ci_hdrc_tegra.c | 24 +++++++++++++++++++++++- > > 1 file changed, 23 insertions(+), 1 deletion(-) > > > > diff --git a/drivers/usb/chipidea/ci_hdrc_tegra.c b/drivers/usb/chipidea/ci_hdrc_tegra.c > > index 0c9911d44ee5..29415c3a2f48 100644 > > --- a/drivers/usb/chipidea/ci_hdrc_tegra.c > > +++ b/drivers/usb/chipidea/ci_hdrc_tegra.c > > @@ -25,7 +25,7 @@ struct tegra_udc_soc_info { > > }; > > > > static const struct tegra_udc_soc_info tegra_udc_soc_info = { > > - .flags = CI_HDRC_REQUIRES_ALIGNED_DMA, > > + .flags = CI_HDRC_REQUIRES_ALIGNED_DMA | CI_HDRC_TEGRA_HOST, > > This seems to be not at all related to the rest of this patch. Also, I > think this patch makes sense standalone, so it may be worth sending it > out separately, perhaps marked for integration into stable branches if > you think it worth it. > > Thierry Considering I wrote this because host mode caused me issues, I'll split this out as a separate patch. > > > }; > > > > static const struct of_device_id tegra_udc_of_match[] = { > > @@ -63,6 +63,28 @@ static int tegra_udc_probe(struct platform_device *pdev) > > return -EINVAL; > > } > > > > + /* check the dual mode and warn about bad configurations */ > > + switch (usb_get_dr_mode(&pdev->dev)) { > > + case USB_DR_MODE_HOST: > > + dev_dbg(&pdev->dev, "dr_mode is set to host\n"); > > + udc->data.dr_mode = USB_DR_MODE_HOST; > > + break; > > + > > + case USB_DR_MODE_UNKNOWN: > > + dev_warn(&pdev->dev, "dr_mode is unset or unknown, setting host mode\n"); > > + udc->data.dr_mode = USB_DR_MODE_HOST; > > + break; > > + > > + case USB_DR_MODE_PERIPHERAL: > > + dev_dbg(&pdev->dev, "dr_mode is set to peripheral\n"); > > + udc->data.dr_mode = USB_DR_MODE_PERIPHERAL; > > + break; > > + > > + case USB_DR_MODE_OTG: > > + dev_err(&pdev->dev, "dr_mode is otg, tegra-udc does not support otg at this time\n"); > > + return -EINVAL; > > + } > > + > > udc->phy = devm_usb_get_phy_by_phandle(&pdev->dev, "nvidia,phy", 0); > > if (IS_ERR(udc->phy)) { > > err = PTR_ERR(udc->phy); > > -- > > 2.17.1 > >