Skip to content

Commit 24fe86a

Browse files
jwrdegoedeFelipe Balbi
authored andcommitted
phy: sun4i-usb: Add a sunxi specific function for setting squelch-detect
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. Acked-by: Kishon Vijay Abraham I <[email protected]> Signed-off-by: Hans de Goede <[email protected]> Signed-off-by: Felipe Balbi <[email protected]>
1 parent 7a64c72 commit 24fe86a

2 files changed

Lines changed: 35 additions & 0 deletions

File tree

drivers/phy/phy-sun4i-usb.c

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
#include <linux/of.h>
3131
#include <linux/of_address.h>
3232
#include <linux/phy/phy.h>
33+
#include <linux/phy/phy-sun4i-usb.h>
3334
#include <linux/platform_device.h>
3435
#include <linux/regulator/consumer.h>
3536
#include <linux/reset.h>
@@ -58,6 +59,7 @@
5859
#define PHY_OTG_FUNC_EN 0x28
5960
#define PHY_VBUS_DET_EN 0x29
6061
#define PHY_DISCON_TH_SEL 0x2a
62+
#define PHY_SQUELCH_DETECT 0x3c
6163

6264
#define MAX_PHYS 3
6365

@@ -204,6 +206,13 @@ static int sun4i_usb_phy_power_off(struct phy *_phy)
204206
return 0;
205207
}
206208

209+
void sun4i_usb_phy_set_squelch_detect(struct phy *_phy, bool enabled)
210+
{
211+
struct sun4i_usb_phy *phy = phy_get_drvdata(_phy);
212+
213+
sun4i_usb_phy_write(phy, PHY_SQUELCH_DETECT, enabled ? 0 : 2, 2);
214+
}
215+
207216
static struct phy_ops sun4i_usb_phy_ops = {
208217
.init = sun4i_usb_phy_init,
209218
.exit = sun4i_usb_phy_exit,

include/linux/phy/phy-sun4i-usb.h

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
/*
2+
* Copyright (c) 2015 Hans de Goede <[email protected]>
3+
*
4+
* This program is free software; you can redistribute it and/or modify
5+
* it under the terms of the GNU General Public License version 2 and
6+
* only version 2 as published by the Free Software Foundation.
7+
*
8+
* This program is distributed in the hope that it will be useful,
9+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
10+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11+
* GNU General Public License for more details.
12+
*/
13+
14+
#ifndef PHY_SUN4I_USB_H_
15+
#define PHY_SUN4I_USB_H_
16+
17+
#include "phy.h"
18+
19+
/**
20+
* sun4i_usb_phy_set_squelch_detect() - Enable/disable squelch detect
21+
* @phy: reference to a sun4i usb phy
22+
* @enabled: wether to enable or disable squelch detect
23+
*/
24+
void sun4i_usb_phy_set_squelch_detect(struct phy *phy, bool enabled);
25+
26+
#endif

0 commit comments

Comments
 (0)