diff options
author | andy.hu <andy.hu@starfivetech.com> | 2024-09-10 04:43:04 +0300 |
---|---|---|
committer | andy.hu <andy.hu@starfivetech.com> | 2024-09-10 04:43:04 +0300 |
commit | 2801902d18491311994406863a3d55c4c2cfb92b (patch) | |
tree | 29762b76fb02a7cf5a3df1bd96d01b15c826eaf1 | |
parent | a781cdf0cf78d05049763bb11e91f7bf3ab154f3 (diff) | |
parent | e9af5fd7ae4a9e4ef577743acd86ae26cb1e2817 (diff) | |
download | linux-2801902d18491311994406863a3d55c4c2cfb92b.tar.xz |
Merge branch 'CR_14883_USB_default_split_minda' into 'jh7110-6.6.y-devel'
CR_14883 dt-bindings: phy: jh7110-usb-phy: Add sys-syscon property
See merge request sdk/linux!1071
-rw-r--r-- | drivers/phy/starfive/phy-jh7110-usb.c | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/drivers/phy/starfive/phy-jh7110-usb.c b/drivers/phy/starfive/phy-jh7110-usb.c index 44a7acffee67..426a2d44272a 100644 --- a/drivers/phy/starfive/phy-jh7110-usb.c +++ b/drivers/phy/starfive/phy-jh7110-usb.c @@ -10,18 +10,24 @@ #include <linux/clk.h> #include <linux/err.h> #include <linux/io.h> +#include <linux/mfd/syscon.h> #include <linux/module.h> #include <linux/phy/phy.h> #include <linux/platform_device.h> +#include <linux/regmap.h> #include <linux/usb/of.h> #define USB_125M_CLK_RATE 125000000 #define USB_LS_KEEPALIVE_OFF 0x4 #define USB_LS_KEEPALIVE_ENABLE BIT(4) +#define USB_PDRSTN_SPLIT BIT(17) +#define SYSCON_USB_SPLIT_OFFSET 0x18 + struct jh7110_usb2_phy { struct phy *phy; void __iomem *regs; + struct regmap *sys_syscon; struct clk *usb_125m_clk; struct clk *app_125m; enum phy_mode mode; @@ -61,6 +67,10 @@ static int usb2_phy_set_mode(struct phy *_phy, usb2_set_ls_keepalive(phy, (mode != PHY_MODE_USB_DEVICE)); } + /* Connect usb 2.0 phy mode */ + regmap_update_bits(phy->sys_syscon, SYSCON_USB_SPLIT_OFFSET, + USB_PDRSTN_SPLIT, USB_PDRSTN_SPLIT); + return 0; } @@ -131,6 +141,12 @@ static int jh7110_usb_phy_probe(struct platform_device *pdev) phy_set_drvdata(phy->phy, phy); phy_provider = devm_of_phy_provider_register(dev, of_phy_simple_xlate); + phy->sys_syscon = + syscon_regmap_lookup_by_compatible("starfive,jh7110-sys-syscon"); + if (IS_ERR(phy->sys_syscon)) + return dev_err_probe(dev, PTR_ERR(phy->sys_syscon), + "Failed to get sys-syscon\n"); + return PTR_ERR_OR_ZERO(phy_provider); } |