From: hdegoede@redhat.com (Hans de Goede)
To: linux-arm-kernel@lists.infradead.org
Subject: [linux-sunxi] Re: [PATCH 1/3] phy-sun4i-usb: Add a sunxi specific function for setting squelch-detect
Date: Mon, 11 May 2015 20:13:35 +0200 [thread overview]
Message-ID: <5550F14F.5050906@redhat.com> (raw)
In-Reply-To: <20150511155547.GG19476@saruman.tx.rr.com>
Hi,
On 11-05-15 17:55, Felipe Balbi wrote:
> Hi,
>
> On Sun, May 10, 2015 at 12:02:54PM +0200, Hans de Goede wrote:
>> Hi,
>>
>> On 08-05-15 18:06, Felipe Balbi wrote:
>>> Hi,
>>>
>>> On Sun, Mar 29, 2015 at 12:50:46PM +0200, Hans de Goede wrote:
>>>> The sunxi otg phy has a bug where it wrongly detects a high speed squelch
>>>> when reset on the root port gets de-asserted with a lo-speed device.
>>>>
>>>> The workaround for this is to disable squelch detect before de-asserting
>>>> reset, and re-enabling it after the reset de-assert is done. Add a sunxi
>>>> specific phy function to allow the sunxi-musb glue to do this.
>>>>
>>>> Signed-off-by: Hans de Goede <hdegoede@redhat.com>
>>>> ---
>>>> drivers/phy/phy-sun4i-usb.c | 9 +++++++++
>>>> include/linux/phy/phy-sun4i-usb.h | 26 ++++++++++++++++++++++++++
>>>> 2 files changed, 35 insertions(+)
>>>> create mode 100644 include/linux/phy/phy-sun4i-usb.h
>>>>
>>>> diff --git a/drivers/phy/phy-sun4i-usb.c b/drivers/phy/phy-sun4i-usb.c
>>>> index 221e8ab..01eb08d 100644
>>>> --- a/drivers/phy/phy-sun4i-usb.c
>>>> +++ b/drivers/phy/phy-sun4i-usb.c
>>>> @@ -33,6 +33,7 @@
>>>> #include <linux/of_address.h>
>>>> #include <linux/of_gpio.h>
>>>> #include <linux/phy/phy.h>
>>>> +#include <linux/phy/phy-sun4i-usb.h>
>>>> #include <linux/platform_device.h>
>>>> #include <linux/regulator/consumer.h>
>>>> #include <linux/reset.h>
>>>> @@ -75,6 +76,7 @@
>>>> #define PHY_OTG_FUNC_EN 0x28
>>>> #define PHY_VBUS_DET_EN 0x29
>>>> #define PHY_DISCON_TH_SEL 0x2a
>>>> +#define PHY_SQUELCH_DETECT 0x3c
>>>>
>>>> #define MAX_PHYS 3
>>>>
>>>> @@ -322,6 +324,13 @@ static int sun4i_usb_phy_power_off(struct phy *_phy)
>>>> return 0;
>>>> }
>>>>
>>>> +void sun4i_usb_phy_set_squelch_detect(struct phy *_phy, bool enabled)
>>>> +{
>>>> + struct sun4i_usb_phy *phy = phy_get_drvdata(_phy);
>>>> +
>>>> + sun4i_usb_phy_write(phy, PHY_SQUELCH_DETECT, enabled ? 0 : 2, 2);
>>>> +}
>>>> +
>>>> static struct phy_ops sun4i_usb_phy_ops = {
>>>> .init = sun4i_usb_phy_init,
>>>> .exit = sun4i_usb_phy_exit,
>>>> diff --git a/include/linux/phy/phy-sun4i-usb.h b/include/linux/phy/phy-sun4i-usb.h
>>>> new file mode 100644
>>>> index 0000000..50aed92
>>>> --- /dev/null
>>>> +++ b/include/linux/phy/phy-sun4i-usb.h
>>>> @@ -0,0 +1,26 @@
>>>> +/*
>>>> + * Copyright (c) 2015 Hans de Goede <hdegoede@redhat.com>
>>>> + *
>>>> + * This program is free software; you can redistribute it and/or modify
>>>> + * it under the terms of the GNU General Public License version 2 and
>>>> + * only version 2 as published by the Free Software Foundation.
>>>> + *
>>>> + * This program is distributed in the hope that it will be useful,
>>>> + * but WITHOUT ANY WARRANTY; without even the implied warranty of
>>>> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
>>>> + * GNU General Public License for more details.
>>>> + */
>>>> +
>>>> +#ifndef PHY_SUN4I_USB_H_
>>>> +#define PHY_SUN4I_USB_H_
>>>> +
>>>> +#include "phy.h"
>>>> +
>>>> +/**
>>>> + * sun4i_usb_phy_set_squelch_detect() - Enable/disable squelch detect
>>>> + * @phy: reference to a sun4i usb phy
>>>> + * @enabled: wether to enable or disable squelch detect
>>>> + */
>>>> +void sun4i_usb_phy_set_squelch_detect(struct phy *phy, bool enabled);
>>>
>>> breaks build if MUSB=y and SUN41_PHY=m
>>
>> Ah, good one. So I assume that it is ok to fix this by doing:
>>
>> --- a/drivers/usb/musb/Kconfig
>> +++ b/drivers/usb/musb/Kconfig
>> @@ -66,6 +66,7 @@ config USB_MUSB_SUNXI
>> tristate "Allwinner (sunxi)"
>> depends on ARCH_SUNXI
>> depends on NOP_USB_XCEIV
>> + depends on PHY_SUN4I_USB
>
> I would prefer not exporting any function from phy to musb. Perhaps
> figure out with Kishon how "set_squelch" can be added to PHY fwk ?
Normally one would never want to mess with these phy settings, this
is just needed on sunxi because the otg phy there is quirky, so I
really do believe that having platform specific phy functions is
the most sensible solution here. As for adding the depends on, that
is needed at a functional level anyways because the musb code cannot
work with the phy code. All the platform specific phy functions do
is add a link time dependency to the already present functional
dependency.
>
>> Also I've not heard anything back from you wrt my other musb
>> sunxi preparation patches and the actual musb-sunxi patch? are
>> those all ready for merging?
>
> I'm a little iffy with all the function rewriting again because of a new
> set of limitations with a new platform.
I actually have done my best to avoid to touching the core code were possible,
e.g. I'm done the translating for the sunxi registers being at different
addresses at the musb_read* / musb_write* level so as to avoid invasive
surgery in the musb-core for this.
Also note that some of the bits of core code which I do change were using a
very non orthogonal API before my changes, and my changes are actually a
nice cleanup.
Regards,
Hans
WARNING: multiple messages have this Message-ID (diff)
From: Hans de Goede <hdegoede-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
To: balbi-l0cyMroinI0@public.gmane.org
Cc: Kishon Vijay Abraham I <kishon-l0cyMroinI0@public.gmane.org>,
Maxime Ripard
<maxime.ripard-wi1+55ScJUtKEb57/3fJTNBPR1lH4CV8@public.gmane.org>,
Chen-Yu Tsai <wens-jdAy2FN1RRM@public.gmane.org>,
Roman Byshko <rbyshko-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>,
linux-usb-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org,
devicetree <devicetree-u79uwXL29TY76Z2rM5mHXA@public.gmane.org>,
linux-sunxi-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org
Subject: Re: Re: [PATCH 1/3] phy-sun4i-usb: Add a sunxi specific function for setting squelch-detect
Date: Mon, 11 May 2015 20:13:35 +0200 [thread overview]
Message-ID: <5550F14F.5050906@redhat.com> (raw)
In-Reply-To: <20150511155547.GG19476-HgARHv6XitJaoMGHk7MhZQC/G2K4zDHf@public.gmane.org>
Hi,
On 11-05-15 17:55, Felipe Balbi wrote:
> Hi,
>
> On Sun, May 10, 2015 at 12:02:54PM +0200, Hans de Goede wrote:
>> Hi,
>>
>> On 08-05-15 18:06, Felipe Balbi wrote:
>>> Hi,
>>>
>>> On Sun, Mar 29, 2015 at 12:50:46PM +0200, Hans de Goede wrote:
>>>> The sunxi otg phy has a bug where it wrongly detects a high speed squelch
>>>> when reset on the root port gets de-asserted with a lo-speed device.
>>>>
>>>> The workaround for this is to disable squelch detect before de-asserting
>>>> reset, and re-enabling it after the reset de-assert is done. Add a sunxi
>>>> specific phy function to allow the sunxi-musb glue to do this.
>>>>
>>>> Signed-off-by: Hans de Goede <hdegoede-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
>>>> ---
>>>> drivers/phy/phy-sun4i-usb.c | 9 +++++++++
>>>> include/linux/phy/phy-sun4i-usb.h | 26 ++++++++++++++++++++++++++
>>>> 2 files changed, 35 insertions(+)
>>>> create mode 100644 include/linux/phy/phy-sun4i-usb.h
>>>>
>>>> diff --git a/drivers/phy/phy-sun4i-usb.c b/drivers/phy/phy-sun4i-usb.c
>>>> index 221e8ab..01eb08d 100644
>>>> --- a/drivers/phy/phy-sun4i-usb.c
>>>> +++ b/drivers/phy/phy-sun4i-usb.c
>>>> @@ -33,6 +33,7 @@
>>>> #include <linux/of_address.h>
>>>> #include <linux/of_gpio.h>
>>>> #include <linux/phy/phy.h>
>>>> +#include <linux/phy/phy-sun4i-usb.h>
>>>> #include <linux/platform_device.h>
>>>> #include <linux/regulator/consumer.h>
>>>> #include <linux/reset.h>
>>>> @@ -75,6 +76,7 @@
>>>> #define PHY_OTG_FUNC_EN 0x28
>>>> #define PHY_VBUS_DET_EN 0x29
>>>> #define PHY_DISCON_TH_SEL 0x2a
>>>> +#define PHY_SQUELCH_DETECT 0x3c
>>>>
>>>> #define MAX_PHYS 3
>>>>
>>>> @@ -322,6 +324,13 @@ static int sun4i_usb_phy_power_off(struct phy *_phy)
>>>> return 0;
>>>> }
>>>>
>>>> +void sun4i_usb_phy_set_squelch_detect(struct phy *_phy, bool enabled)
>>>> +{
>>>> + struct sun4i_usb_phy *phy = phy_get_drvdata(_phy);
>>>> +
>>>> + sun4i_usb_phy_write(phy, PHY_SQUELCH_DETECT, enabled ? 0 : 2, 2);
>>>> +}
>>>> +
>>>> static struct phy_ops sun4i_usb_phy_ops = {
>>>> .init = sun4i_usb_phy_init,
>>>> .exit = sun4i_usb_phy_exit,
>>>> diff --git a/include/linux/phy/phy-sun4i-usb.h b/include/linux/phy/phy-sun4i-usb.h
>>>> new file mode 100644
>>>> index 0000000..50aed92
>>>> --- /dev/null
>>>> +++ b/include/linux/phy/phy-sun4i-usb.h
>>>> @@ -0,0 +1,26 @@
>>>> +/*
>>>> + * Copyright (c) 2015 Hans de Goede <hdegoede-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
>>>> + *
>>>> + * This program is free software; you can redistribute it and/or modify
>>>> + * it under the terms of the GNU General Public License version 2 and
>>>> + * only version 2 as published by the Free Software Foundation.
>>>> + *
>>>> + * This program is distributed in the hope that it will be useful,
>>>> + * but WITHOUT ANY WARRANTY; without even the implied warranty of
>>>> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
>>>> + * GNU General Public License for more details.
>>>> + */
>>>> +
>>>> +#ifndef PHY_SUN4I_USB_H_
>>>> +#define PHY_SUN4I_USB_H_
>>>> +
>>>> +#include "phy.h"
>>>> +
>>>> +/**
>>>> + * sun4i_usb_phy_set_squelch_detect() - Enable/disable squelch detect
>>>> + * @phy: reference to a sun4i usb phy
>>>> + * @enabled: wether to enable or disable squelch detect
>>>> + */
>>>> +void sun4i_usb_phy_set_squelch_detect(struct phy *phy, bool enabled);
>>>
>>> breaks build if MUSB=y and SUN41_PHY=m
>>
>> Ah, good one. So I assume that it is ok to fix this by doing:
>>
>> --- a/drivers/usb/musb/Kconfig
>> +++ b/drivers/usb/musb/Kconfig
>> @@ -66,6 +66,7 @@ config USB_MUSB_SUNXI
>> tristate "Allwinner (sunxi)"
>> depends on ARCH_SUNXI
>> depends on NOP_USB_XCEIV
>> + depends on PHY_SUN4I_USB
>
> I would prefer not exporting any function from phy to musb. Perhaps
> figure out with Kishon how "set_squelch" can be added to PHY fwk ?
Normally one would never want to mess with these phy settings, this
is just needed on sunxi because the otg phy there is quirky, so I
really do believe that having platform specific phy functions is
the most sensible solution here. As for adding the depends on, that
is needed at a functional level anyways because the musb code cannot
work with the phy code. All the platform specific phy functions do
is add a link time dependency to the already present functional
dependency.
>
>> Also I've not heard anything back from you wrt my other musb
>> sunxi preparation patches and the actual musb-sunxi patch¸ are
>> those all ready for merging?
>
> I'm a little iffy with all the function rewriting again because of a new
> set of limitations with a new platform.
I actually have done my best to avoid to touching the core code were possible,
e.g. I'm done the translating for the sunxi registers being at different
addresses at the musb_read* / musb_write* level so as to avoid invasive
surgery in the musb-core for this.
Also note that some of the bits of core code which I do change were using a
very non orthogonal API before my changes, and my changes are actually a
nice cleanup.
Regards,
Hans
--
You received this message because you are subscribed to the Google Groups "linux-sunxi" group.
To unsubscribe from this group and stop receiving emails from it, send an email to linux-sunxi+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org
For more options, visit https://groups.google.com/d/optout.
next prev parent reply other threads:[~2015-05-11 18:13 UTC|newest]
Thread overview: 24+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-03-29 10:50 [PATCH 0/3] Work around sunxi otg usb phy bug which causes lo-speed devices to not work Hans de Goede
2015-03-29 10:50 ` Hans de Goede
2015-03-29 10:50 ` [PATCH 1/3] phy-sun4i-usb: Add a sunxi specific function for setting squelch-detect Hans de Goede
2015-03-29 10:50 ` Hans de Goede
2015-05-08 16:06 ` Felipe Balbi
2015-05-08 16:06 ` Felipe Balbi
2015-05-10 10:02 ` Hans de Goede
2015-05-10 10:02 ` Hans de Goede
2015-05-11 15:55 ` Felipe Balbi
2015-05-11 15:55 ` Felipe Balbi
2015-05-11 18:13 ` Hans de Goede [this message]
2015-05-11 18:13 ` Hans de Goede
2015-05-13 9:22 ` [linux-sunxi] " Kishon Vijay Abraham I
2015-05-13 9:22 ` Kishon Vijay Abraham I
2015-05-13 9:43 ` [linux-sunxi] " Hans de Goede
2015-05-13 9:43 ` Hans de Goede
2015-05-26 15:38 ` Felipe Balbi
2015-05-26 15:38 ` Felipe Balbi
2015-05-27 12:09 ` Kishon Vijay Abraham I
2015-05-27 12:09 ` Kishon Vijay Abraham I
2015-03-29 10:50 ` [PATCH 2/3] musb: Add pre and post root port reset end callbacks Hans de Goede
2015-03-29 10:50 ` Hans de Goede
2015-03-29 10:50 ` [PATCH 3/3] msub: sunxi: Add pre/post root reset end platform functions Hans de Goede
2015-03-29 10:50 ` Hans de Goede
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=5550F14F.5050906@redhat.com \
--to=hdegoede@redhat.com \
--cc=linux-arm-kernel@lists.infradead.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.