phy: omap-usb2-phy: Errata and coding style fix
v6 cover phy: omap-usb2-phy: Errata and coding style fix
Hi,
This series addresses silicon errata
i2075 - "USB2PHY: USB2PHY Charger Detect is Enabled by Default Without VBUS Presence"
It also fixes coding style issues.
cheers,
-roger
Changelog:
v6
- move coding style fixes to separate patch
v5
- don't use dt property to enable workaround.
Use soc_device_match() instead.
v4
- fix example to fix dt_binding_check warnings
- '#phy-cells' -> "#phy-cells"
- Add 'oneOf' to compatible logic to allow just "ti,omap-usb2" as valid
v3
- Removed quotes from compatibles
- changed property to "ti,disable-charger-det"
v2
- Address Rob's comments on YAML schema.
Roger Quadros (2):
phy: omap-usb2-phy: disable PHY charger detect
phy: omap-usb2-phy: fix coding style issues
drivers/phy/ti/phy-omap-usb2.c | 83 +++++++++++++++++++++++----------- 1 file changed, 57 insertions(+), 26 deletions(-)
Signature · 2 lines
Texas Instruments Finland Oy, Porkkalankatu 22, 00180 Helsinki. Y-tunnus/Business ID: 0615521-4. Kotipaikka/Domicile: Helsinki
PATCH v6 1/2 phy: omap-usb2-phy: disable PHY charger detect
AM654x PG1.0 has a silicon bug that D+ is pulled high after POR, which could cause enumeration failure with some USB hubs. Disabling the USB2_PHY Charger Detect function will put D+ into the normal state.
This addresses Silicon Errata:
i2075 - "USB2PHY: USB2PHY Charger Detect is Enabled by Default Without VBUS Presence"
--- drivers/phy/ti/phy-omap-usb2.c | 47 +++++++++++++++++++++++++++++----- 1 file changed, 40 insertions(+), 7 deletions(-)
drivers/phy/ti/phy-omap-usb2.c +40 -7
@@ -22,10 +22,15 @@#include <linux/mfd/syscon.h> #include <linux/regmap.h> #include <linux/of_platform.h> +#include <linux/sys_soc.h> #define USB2PHY_ANA_CONFIG1 0x4c#define USB2PHY_DISCON_BYP_LATCH BIT(31) +#define USB2PHY_CHRG_DET 0x14 +#define USB2PHY_CHRG_DET_USE_CHG_DET_REG BIT(29) +#define USB2PHY_CHRG_DET_DIS_CHG_DET BIT(28) +/* SoC Specific USB2_OTG register definitions */ #define AM654_USB2_OTG_PD BIT(8)#define AM654_USB2_VBUS_DET_EN BIT(5)
@@ -43,6 +48,7 @@#define OMAP_USB2_HAS_START_SRP BIT(0)#define OMAP_USB2_HAS_SET_VBUS BIT(1)#define OMAP_USB2_CALIBRATE_FALSE_DISCONNECT BIT(2) +#define OMAP_USB2_DISABLE_CHRG_DET BIT(3)struct omap_usb {struct usb_phy phy;
@@ -236,6 +242,13 @@ static int omap_usb_init(struct phy *x)omap_usb_writel (phy->phy_base,USB2PHY_ANA_CONFIG1 , val); } +if (phy->flags &OMAP_USB2_DISABLE_CHRG_DET ) { + val =omap_usb_readl (phy->phy_base,USB2PHY_CHRG_DET ); + val |=USB2PHY_CHRG_DET_USE_CHG_DET_REG | +USB2PHY_CHRG_DET_DIS_CHG_DET ; +omap_usb_writel (phy->phy_base,USB2PHY_CHRG_DET , val); + } +return 0 ; }
@@ -329,6 +342,26 @@ static const struct of_device_id omap_usb2_id_table[] = { };MODULE_DEVICE_TABLE (of, omap_usb2_id_table); +static void omap_usb2_init_errata (struct omap_usb *phy) +{ +static const struct soc_device_attribute am65x_sr10_soc_devices[] = { + { .family ="AM65X" , .revision ="SR1.0" }, + {/* sentinel */ } + }; + +/* +* Errata i2075: USB2PHY: USB2PHY Charger Detect is Enabled by +* Default Without VBUS Presence. +* +* AM654x SR1.0 has a silicon bug due to which D+ is pulled high after +* POR, which could cause enumeration failure with some USB hubs. +* Disabling the USB2_PHY Charger Detect function will put D+ +* into the normal state. +*/ +if (soc_device_match (am65x_sr10_soc_devices)) + phy->flags |=OMAP_USB2_DISABLE_CHRG_DET ; +} +static int omap_usb2_probe (struct platform_device *pdev) {struct omap_usb *phy;
@@ -366,14 +399,14 @@ static int omap_usb2_probe(struct platform_device *pdev) phy->mask = phy_data->mask; phy->power_on = phy_data->power_on; phy->power_off = phy_data->power_off; + phy->flags = phy_data->flags; -if (phy_data->flags &OMAP_USB2_CALIBRATE_FALSE_DISCONNECT ) { - res =platform_get_resource (pdev,IORESOURCE_MEM ,0 ); - phy->phy_base =devm_ioremap_resource (&pdev->dev, res); -if (IS_ERR (phy->phy_base)) -return PTR_ERR (phy->phy_base); - phy->flags |=OMAP_USB2_CALIBRATE_FALSE_DISCONNECT ; - } +omap_usb2_init_errata (phy); + + res =platform_get_resource (pdev,IORESOURCE_MEM ,0 ); + phy->phy_base =devm_ioremap_resource (&pdev->dev, res); +if (IS_ERR (phy->phy_base)) +return PTR_ERR (phy->phy_base); phy->syscon_phy_power =syscon_regmap_lookup_by_phandle (node,"syscon-phy-power" );
Signature · 2 lines
Texas Instruments Finland Oy, Porkkalankatu 22, 00180 Helsinki. Y-tunnus/Business ID: 0615521-4. Kotipaikka/Domicile: Helsinki
PATCH v6 2/2 phy: omap-usb2-phy: fix coding style issues
In reply to Roger QuadrosFix checkpatch warnings and sort the include files alphabetically.
--- drivers/phy/ti/phy-omap-usb2.c | 36 ++++++++++++++++------------------ 1 file changed, 17 insertions(+), 19 deletions(-)
drivers/phy/ti/phy-omap-usb2.c +17 -19
@@ -6,23 +6,23 @@* Author: Kishon Vijay Abraham I <[email protected]> */ -#include <linux/module.h> -#include <linux/platform_device.h> -#include <linux/slab.h> -#include <linux/of.h> -#include <linux/io.h> -#include <linux/phy/omap_usb.h> -#include <linux/usb/phy_companion.h> #include <linux/clk.h> -#include <linux/err.h> -#include <linux/pm_runtime.h> #include <linux/delay.h> +#include <linux/err.h> +#include <linux/io.h> +#include <linux/mfd/syscon.h> +#include <linux/module.h> +#include <linux/of.h> +#include <linux/of_platform.h> #include <linux/phy/omap_control_phy.h> +#include <linux/phy/omap_usb.h> #include <linux/phy/phy.h> -#include <linux/mfd/syscon.h> +#include <linux/platform_device.h> +#include <linux/pm_runtime.h> #include <linux/regmap.h> -#include <linux/of_platform.h> +#include <linux/slab.h> #include <linux/sys_soc.h> +#include <linux/usb/phy_companion.h> #define USB2PHY_ANA_CONFIG1 0x4c#define USB2PHY_DISCON_BYP_LATCH BIT(31)
@@ -89,7 +89,7 @@ static inline void omap_usb_writel(void __iomem *addr, unsigned int offset, }/** -* omap_usb2_set_comparator - links the comparator present in the sytem with +* omap_usb2_set_comparator - links the comparator present in the system with * this phy * @comparator - the companion phy(comparator) for this phy *
@@ -142,7 +142,7 @@ static int omap_usb_set_host(struct usb_otg *otg, struct usb_bus *host) }static int omap_usb_set_peripheral (struct usb_otg *otg, -struct usb_gadget *gadget) +struct usb_gadget *gadget) { otg->gadget = gadget;if (!gadget)
@@ -409,7 +409,7 @@ static int omap_usb2_probe(struct platform_device *pdev)return PTR_ERR (phy->phy_base); phy->syscon_phy_power =syscon_regmap_lookup_by_phandle (node, -"syscon-phy-power" ); +"syscon-phy-power" );if (IS_ERR (phy->syscon_phy_power)) {dev_dbg (&pdev->dev,"can't get syscon-phy-power, using control device\n" );
@@ -438,7 +438,6 @@ static int omap_usb2_probe(struct platform_device *pdev) } } - phy->wkupclk =devm_clk_get (phy->dev,"wkupclk" );if (IS_ERR (phy->wkupclk)) {if (PTR_ERR (phy->wkupclk) == -EPROBE_DEFER )
@@ -452,10 +451,10 @@ static int omap_usb2_probe(struct platform_device *pdev)if (PTR_ERR (phy->wkupclk) != -EPROBE_DEFER )dev_err (&pdev->dev,"unable to get usb_phy_cm_clk32k\n" );return PTR_ERR (phy->wkupclk); - }else { -dev_warn (&pdev->dev, -"found usb_phy_cm_clk32k, please fix DTS\n" ); } + +dev_warn (&pdev->dev, +"found usb_phy_cm_clk32k, please fix DTS\n" ); } phy->optclk =devm_clk_get (phy->dev,"refclk" );
@@ -504,7 +503,6 @@ static int omap_usb2_probe(struct platform_device *pdev)return PTR_ERR (phy_provider); } -usb_add_phy_dev (&phy->phy);return 0 ;
Signature · 2 lines
Texas Instruments Finland Oy, Porkkalankatu 22, 00180 Helsinki. Y-tunnus/Business ID: 0615521-4. Kotipaikka/Domicile: Helsinki
Quoted 7 lines · Roger Quadros
Hi,
This series addresses silicon errata
i2075 - "USB2PHY: USB2PHY Charger Detect is Enabled by Default Without VBUS Presence"It also fixes coding style issues.
Applied, thanks
Signature · 1 line
~Vinod