All of lore.kernel.org
 help / color / mirror / Atom feed
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: Wed, 13 May 2015 11:43:40 +0200	[thread overview]
Message-ID: <55531CCC.9020407@redhat.com> (raw)
In-Reply-To: <555317D5.3050003@ti.com>

Hi,

On 13-05-15 11:22, Kishon Vijay Abraham I wrote:
> Hi Felipe,
>
> On Monday 11 May 2015 11:43 PM, Hans de Goede wrote:
>> 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 ?
>
> We don't want to be adding platform specific hooks in PHY framework. While exporting a function from PHY to MUSB is not the best thing, it's still okay since it is from musb sunxi glue only no?

Correct this only gets used by drivers/usb/musb/sunxi.c calling
directly into drivers/phy/phy-sun4i-usb.c

Regards,

Hans

WARNING: multiple messages have this Message-ID (diff)
From: Hans de Goede <hdegoede-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
To: kishon-l0cyMroinI0@public.gmane.org, balbi-l0cyMroinI0@public.gmane.org
Cc: 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: Wed, 13 May 2015 11:43:40 +0200	[thread overview]
Message-ID: <55531CCC.9020407@redhat.com> (raw)
In-Reply-To: <555317D5.3050003-l0cyMroinI0@public.gmane.org>

Hi,

On 13-05-15 11:22, Kishon Vijay Abraham I wrote:
> Hi Felipe,
>
> On Monday 11 May 2015 11:43 PM, Hans de Goede wrote:
>> 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 ?
>
> We don't want to be adding platform specific hooks in PHY framework. While exporting a function from PHY to MUSB is not the best thing, it's still okay since it is from musb sunxi glue only no?

Correct this only gets used by drivers/usb/musb/sunxi.c calling
directly into drivers/phy/phy-sun4i-usb.c

Regards,

Hans

  reply	other threads:[~2015-05-13  9:43 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         ` [linux-sunxi] " Hans de Goede
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             ` Hans de Goede [this message]
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=55531CCC.9020407@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.