From 711167d7b0b2200e747309ac6edc2d52f3d12946 Mon Sep 17 00:00:00 2001 From: Jianwei Zheng Date: Tue, 7 Dec 2021 16:30:21 +0800 Subject: [PATCH] phy: rockchip: inno-usb2: support rk3326s and px30s tuning Tuing pre-emphasis and turn off differential receiver in suspend mode for rk3326s and px30s SoCs. Fix some pc can not recognize the device when using 5m cable, so tuning usb phy squelch trigger point configure to 100mv for px30s. Signed-off-by: Jianwei Zheng Change-Id: Ida216e8951c1f1dad19fa3ff4c31ede6a53b3458 --- drivers/phy/rockchip/phy-rockchip-inno-usb2.c | 71 ++++++++++++++----- 1 file changed, 55 insertions(+), 16 deletions(-) diff --git a/drivers/phy/rockchip/phy-rockchip-inno-usb2.c b/drivers/phy/rockchip/phy-rockchip-inno-usb2.c index caa5a776a3d2..75fe946a70f2 100644 --- a/drivers/phy/rockchip/phy-rockchip-inno-usb2.c +++ b/drivers/phy/rockchip/phy-rockchip-inno-usb2.c @@ -2496,26 +2496,65 @@ static int rk3328_usb2phy_tuning(struct rockchip_usb2phy *rphy) { int ret; - /* Open debug mode for tuning */ - ret = regmap_write(rphy->grf, 0x2c, 0xffff0400); - if (ret) - return ret; + if (soc_is_px30s()) { + /* Enable otg port pre-emphasis during non-chirp phase */ + ret = regmap_update_bits(rphy->grf, 0x8000, GENMASK(2, 0), BIT(2)); + if (ret) + return ret; - /* Open pre-emphasize in non-chirp state for otg port */ - ret = regmap_write(rphy->grf, 0x0, 0x00070004); - if (ret) - return ret; + /* Set otg port squelch trigger point configure to 100mv */ + ret = regmap_update_bits(rphy->grf, 0x8004, GENMASK(7, 5), 0x40); + if (ret) + return ret; - /* Open pre-emphasize in non-chirp state for host port */ - ret = regmap_write(rphy->grf, 0x30, 0x00070004); - if (ret) - return ret; + ret = regmap_update_bits(rphy->grf, 0x8008, BIT(0), 0x1); + if (ret) + return ret; - /* Turn off differential receiver in suspend mode */ - ret = regmap_write(rphy->grf, 0x18, 0x00040000); - if (ret) - return ret; + /* Turn off otg port differential reciver in suspend mode */ + ret = regmap_update_bits(rphy->grf, 0x8030, BIT(2), 0); + if (ret) + return ret; + /* Enable host port pre-emphasis during non-chirp phase */ + ret = regmap_update_bits(rphy->grf, 0x8400, GENMASK(2, 0), BIT(2)); + if (ret) + return ret; + + /* Set host port squelch trigger point configure to 100mv */ + ret = regmap_update_bits(rphy->grf, 0x8404, GENMASK(7, 5), 0x40); + if (ret) + return ret; + + ret = regmap_update_bits(rphy->grf, 0x8408, BIT(0), 0x1); + if (ret) + return ret; + + /* Turn off host port differential reciver in suspend mode */ + ret = regmap_update_bits(rphy->grf, 0x8430, BIT(2), 0); + if (ret) + return ret; + } else { + /* Open debug mode for tuning */ + ret = regmap_write(rphy->grf, 0x2c, 0xffff0400); + if (ret) + return ret; + + /* Open pre-emphasize in non-chirp state for otg port */ + ret = regmap_write(rphy->grf, 0x0, 0x00070004); + if (ret) + return ret; + + /* Open pre-emphasize in non-chirp state for host port */ + ret = regmap_write(rphy->grf, 0x30, 0x00070004); + if (ret) + return ret; + + /* Turn off differential receiver in suspend mode */ + ret = regmap_write(rphy->grf, 0x18, 0x00040000); + if (ret) + return ret; + } return 0; }