Message ID | 1363136988-3704-1-git-send-email-agraf@suse.de (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On Wed, 13 Mar 2013, Alexander Graf wrote: > On my Exynos 5 based Arndale system, I need to pull the reset line down > and then let it go up again to actually perform a reset. Without that > reset, I can't find any USB hubs on my bus, rendering the USB controller > useless. > > So this patch implements the above logic, making EHCI and OHCI work on > Arndale systems for me. > > Signed-off-by: Alexander Graf <agraf@suse.de> > CC: Vivek Gautam <gautam.vivek@samsung.com> > CC: Jingoo Han <jg1.han@samsung.com> > CC: Alan Stern <stern@rowland.harvard.edu> > CC: Kukjin Kim <kgene.kim@samsung.com> > CC: Felipe Balbi <balbi@ti.com> > CC: Greg Kroah-Hartman <gregkh@linuxfoundation.org> > > --- > > As this affects 3.9, this patch should definitely be considered for inclusion > there. > --- > drivers/usb/host/ehci-s5p.c | 10 ++++++++-- > 1 file changed, 8 insertions(+), 2 deletions(-) > > diff --git a/drivers/usb/host/ehci-s5p.c b/drivers/usb/host/ehci-s5p.c > index 20ebf6a..c6d67e4 100644 > --- a/drivers/usb/host/ehci-s5p.c > +++ b/drivers/usb/host/ehci-s5p.c > @@ -103,9 +103,15 @@ static void s5p_setup_vbus_gpio(struct platform_device *pdev) > if (!gpio_is_valid(gpio)) > return; > > - err = gpio_request_one(gpio, GPIOF_OUT_INIT_HIGH, "ehci_vbus_gpio"); > - if (err) > + /* reset pulls the line down, then up again */ > + err = gpio_request_one(gpio, GPIOF_OUT_INIT_LOW, "ehci_vbus_gpio"); > + if (err) { > dev_err(&pdev->dev, "can't request ehci vbus gpio %d", gpio); > + return; > + } > + mdelay(1); > + __gpio_set_value(gpio, 1); > + gpio_free(gpio); > } > > static u64 ehci_s5p_dma_mask = DMA_BIT_MASK(32); Acked-by: Alan Stern <stern@rowland.harvard.edu> -- To unsubscribe from this list: send the line "unsubscribe linux-samsung-soc" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Alexander, On Tue, Mar 12, 2013 at 6:09 PM, Alexander Graf <agraf@suse.de> wrote: > - err = gpio_request_one(gpio, GPIOF_OUT_INIT_HIGH, "ehci_vbus_gpio"); > - if (err) > + /* reset pulls the line down, then up again */ > + err = gpio_request_one(gpio, GPIOF_OUT_INIT_LOW, "ehci_vbus_gpio"); > + if (err) { > dev_err(&pdev->dev, "can't request ehci vbus gpio %d", gpio); > + return; > + } > + mdelay(1); > + __gpio_set_value(gpio, 1); > + gpio_free(gpio); Freeing the gpio is a little on the iffy side since you actually care about keeping the value. Perhaps you can change this to devm_gpio_request_one() and avoid the free? I was about to submit a patch to do just that (since otherwise you run into trouble if you ever defer the probe) but then ran across your patch. Thanks! -Doug -- To unsubscribe from this list: send the line "unsubscribe linux-samsung-soc" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
On 13.03.2013, at 18:28, Doug Anderson wrote: > Alexander, > > On Tue, Mar 12, 2013 at 6:09 PM, Alexander Graf <agraf@suse.de> wrote: >> - err = gpio_request_one(gpio, GPIOF_OUT_INIT_HIGH, "ehci_vbus_gpio"); >> - if (err) >> + /* reset pulls the line down, then up again */ >> + err = gpio_request_one(gpio, GPIOF_OUT_INIT_LOW, "ehci_vbus_gpio"); >> + if (err) { >> dev_err(&pdev->dev, "can't request ehci vbus gpio %d", gpio); >> + return; >> + } >> + mdelay(1); >> + __gpio_set_value(gpio, 1); >> + gpio_free(gpio); > > Freeing the gpio is a little on the iffy side since you actually care > about keeping the value. Perhaps you can change this to > devm_gpio_request_one() and avoid the free? I was about to submit a > patch to do just that (since otherwise you run into trouble if you > ever defer the probe) but then ran across your patch. I could also just return it when the function exits and only free it when we exit the probe function with a negative value. The reason I put it in here was that on probe deferral, the pin simply gets blocked. However, I could probably also just completely take the gpio_free() out of this patch and resubmit, as it should be pretty much unrelated. Then you can patch it properly. Alex > > Thanks! > > -Doug -- To unsubscribe from this list: send the line "unsubscribe linux-samsung-soc" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Alexander, On Wed, Mar 13, 2013 at 10:45 AM, Alexander Graf <agraf@suse.de> wrote: > >>> + gpio_free(gpio); >> >> Freeing the gpio is a little on the iffy side since you actually care >> about keeping the value. Perhaps you can change this to >> devm_gpio_request_one() and avoid the free? I was about to submit a >> patch to do just that (since otherwise you run into trouble if you >> ever defer the probe) but then ran across your patch. > > I could also just return it when the function exits and only free it when we exit the probe function with a negative value. The reason I put it in here was that on probe deferral, the pin simply gets blocked. > > However, I could probably also just completely take the gpio_free() out of this patch and resubmit, as it should be pretty much unrelated. Then you can patch it properly. Sure, if you want to resubmit without the gpio_free() I'll submit a new patch atop yours with the change to devm and people can see if they like it... -- To unsubscribe from this list: send the line "unsubscribe linux-samsung-soc" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/drivers/usb/host/ehci-s5p.c b/drivers/usb/host/ehci-s5p.c index 20ebf6a..c6d67e4 100644 --- a/drivers/usb/host/ehci-s5p.c +++ b/drivers/usb/host/ehci-s5p.c @@ -103,9 +103,15 @@ static void s5p_setup_vbus_gpio(struct platform_device *pdev) if (!gpio_is_valid(gpio)) return; - err = gpio_request_one(gpio, GPIOF_OUT_INIT_HIGH, "ehci_vbus_gpio"); - if (err) + /* reset pulls the line down, then up again */ + err = gpio_request_one(gpio, GPIOF_OUT_INIT_LOW, "ehci_vbus_gpio"); + if (err) { dev_err(&pdev->dev, "can't request ehci vbus gpio %d", gpio); + return; + } + mdelay(1); + __gpio_set_value(gpio, 1); + gpio_free(gpio); } static u64 ehci_s5p_dma_mask = DMA_BIT_MASK(32);
On my Exynos 5 based Arndale system, I need to pull the reset line down and then let it go up again to actually perform a reset. Without that reset, I can't find any USB hubs on my bus, rendering the USB controller useless. So this patch implements the above logic, making EHCI and OHCI work on Arndale systems for me. Signed-off-by: Alexander Graf <agraf@suse.de> CC: Vivek Gautam <gautam.vivek@samsung.com> CC: Jingoo Han <jg1.han@samsung.com> CC: Alan Stern <stern@rowland.harvard.edu> CC: Kukjin Kim <kgene.kim@samsung.com> CC: Felipe Balbi <balbi@ti.com> CC: Greg Kroah-Hartman <gregkh@linuxfoundation.org> --- As this affects 3.9, this patch should definitely be considered for inclusion there. --- drivers/usb/host/ehci-s5p.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-)