Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

phy: rockchip: inno-usb2: Add usb2 phy support for rk3562

RK3652 has one USB2.0 PHY with two ports, the OTG port support OTG
and BC1.2, the SoC provide USB GRF and APB to access the registers.

This adds vbus detection function control and make the below tuning
to enhance the usb2-phy SQ for RK3562 SoC.
- enable pre-emphasis during non-chirp phase
- set HS eye height to 425mv

Signed-off-by: Frank Wang <frank.wang@rock-chips.com>
Signed-off-by: William Wu <william.wu@rock-chips.com>
Signed-off-by: Kever Yang <kever.yang@rock-chips.com>
Reviewed-by: Heiko Stuebner <heiko@sntech.de>
Link: https://lore.kernel.org/r/20250415050005.52773-2-kever.yang@rock-chips.com
Signed-off-by: Vinod Koul <vkoul@kernel.org>

authored by

Frank Wang and committed by
Vinod Koul
80edd21d abf55cdf

+49
+49
drivers/phy/rockchip/phy-rockchip-inno-usb2.c
··· 1923 1923 { /* sentinel */ } 1924 1924 }; 1925 1925 1926 + static const struct rockchip_usb2phy_cfg rk3562_phy_cfgs[] = { 1927 + { 1928 + .reg = 0xff740000, 1929 + .num_ports = 2, 1930 + .clkout_ctl = { 0x0108, 4, 4, 1, 0 }, 1931 + .port_cfgs = { 1932 + [USB2PHY_PORT_OTG] = { 1933 + .phy_sus = { 0x0100, 8, 0, 0, 0x1d1 }, 1934 + .bvalid_det_en = { 0x0110, 2, 2, 0, 1 }, 1935 + .bvalid_det_st = { 0x0114, 2, 2, 0, 1 }, 1936 + .bvalid_det_clr = { 0x0118, 2, 2, 0, 1 }, 1937 + .idfall_det_en = { 0x0110, 5, 5, 0, 1 }, 1938 + .idfall_det_st = { 0x0114, 5, 5, 0, 1 }, 1939 + .idfall_det_clr = { 0x0118, 5, 5, 0, 1 }, 1940 + .idrise_det_en = { 0x0110, 4, 4, 0, 1 }, 1941 + .idrise_det_st = { 0x0114, 4, 4, 0, 1 }, 1942 + .idrise_det_clr = { 0x0118, 4, 4, 0, 1 }, 1943 + .ls_det_en = { 0x0110, 0, 0, 0, 1 }, 1944 + .ls_det_st = { 0x0114, 0, 0, 0, 1 }, 1945 + .ls_det_clr = { 0x0118, 0, 0, 0, 1 }, 1946 + .utmi_avalid = { 0x0120, 10, 10, 0, 1 }, 1947 + .utmi_bvalid = { 0x0120, 9, 9, 0, 1 }, 1948 + .utmi_ls = { 0x0120, 5, 4, 0, 1 }, 1949 + }, 1950 + [USB2PHY_PORT_HOST] = { 1951 + .phy_sus = { 0x0104, 8, 0, 0x1d2, 0x1d1 }, 1952 + .ls_det_en = { 0x0110, 1, 1, 0, 1 }, 1953 + .ls_det_st = { 0x0114, 1, 1, 0, 1 }, 1954 + .ls_det_clr = { 0x0118, 1, 1, 0, 1 }, 1955 + .utmi_ls = { 0x0120, 17, 16, 0, 1 }, 1956 + .utmi_hstdet = { 0x0120, 19, 19, 0, 1 } 1957 + } 1958 + }, 1959 + .chg_det = { 1960 + .cp_det = { 0x0120, 24, 24, 0, 1 }, 1961 + .dcp_det = { 0x0120, 23, 23, 0, 1 }, 1962 + .dp_det = { 0x0120, 25, 25, 0, 1 }, 1963 + .idm_sink_en = { 0x0108, 8, 8, 0, 1 }, 1964 + .idp_sink_en = { 0x0108, 7, 7, 0, 1 }, 1965 + .idp_src_en = { 0x0108, 9, 9, 0, 1 }, 1966 + .rdm_pdwn_en = { 0x0108, 10, 10, 0, 1 }, 1967 + .vdm_src_en = { 0x0108, 12, 12, 0, 1 }, 1968 + .vdp_src_en = { 0x0108, 11, 11, 0, 1 }, 1969 + }, 1970 + }, 1971 + { /* sentinel */ } 1972 + }; 1973 + 1926 1974 static const struct rockchip_usb2phy_cfg rk3568_phy_cfgs[] = { 1927 1975 { 1928 1976 .reg = 0xfe8a0000, ··· 2290 2242 { .compatible = "rockchip,rk3328-usb2phy", .data = &rk3328_phy_cfgs }, 2291 2243 { .compatible = "rockchip,rk3366-usb2phy", .data = &rk3366_phy_cfgs }, 2292 2244 { .compatible = "rockchip,rk3399-usb2phy", .data = &rk3399_phy_cfgs }, 2245 + { .compatible = "rockchip,rk3562-usb2phy", .data = &rk3562_phy_cfgs }, 2293 2246 { .compatible = "rockchip,rk3568-usb2phy", .data = &rk3568_phy_cfgs }, 2294 2247 { .compatible = "rockchip,rk3576-usb2phy", .data = &rk3576_phy_cfgs }, 2295 2248 { .compatible = "rockchip,rk3588-usb2phy", .data = &rk3588_phy_cfgs },