diff options
author | Emmanuel Vadot <manu@FreeBSD.org> | 2019-10-05 17:36:33 +0000 |
---|---|---|
committer | Emmanuel Vadot <manu@FreeBSD.org> | 2019-10-05 17:36:33 +0000 |
commit | c36e2d14ac53be1ae738e2377641c4b61985077f (patch) | |
tree | 426142feccb2e1b5c7864cbd27ef33e32c55fda7 /sys/arm64 | |
parent | 2560cb1eb8e6cccf91cc409659aa544d56cb2517 (diff) | |
download | src-c36e2d14ac53be1ae738e2377641c4b61985077f.tar.gz src-c36e2d14ac53be1ae738e2377641c4b61985077f.zip |
arm64: rockchip: usb2phy: Add set/get mode
We only support host mode so those functions are just added so
we won't panic when generic-{e,o}hci will set the phy to host mode.
MFC after: 1 month
X-MFC-With: r353062
Notes
Notes:
svn path=/head/; revision=353125
Diffstat (limited to 'sys/arm64')
-rw-r--r-- | sys/arm64/rockchip/rk_usb2phy.c | 45 |
1 files changed, 44 insertions, 1 deletions
diff --git a/sys/arm64/rockchip/rk_usb2phy.c b/sys/arm64/rockchip/rk_usb2phy.c index 4f39a9c3e963..72315f1475ab 100644 --- a/sys/arm64/rockchip/rk_usb2phy.c +++ b/sys/arm64/rockchip/rk_usb2phy.c @@ -87,12 +87,17 @@ struct rk_usb2phy_softc { struct syscon *grf; regulator_t phy_supply; clk_t clk; + int mode; }; /* Phy class and methods. */ static int rk_usb2phy_enable(struct phynode *phynode, bool enable); +static int rk_usb2phy_get_mode(struct phynode *phy, int *mode); +static int rk_usb2phy_set_mode(struct phynode *phy, int mode); static phynode_method_t rk_usb2phy_phynode_methods[] = { - PHYNODEMETHOD(phynode_enable, rk_usb2phy_enable), + PHYNODEMETHOD(phynode_enable, rk_usb2phy_enable), + PHYNODEMETHOD(phynode_usb_get_mode, rk_usb2phy_get_mode), + PHYNODEMETHOD(phynode_usb_set_mode, rk_usb2phy_set_mode), PHYNODEMETHOD_END }; @@ -138,6 +143,44 @@ fail: return (ENXIO); } +static int +rk_usb2phy_get_mode(struct phynode *phynode, int *mode) +{ + struct rk_usb2phy_softc *sc; + intptr_t phy; + device_t dev; + + dev = phynode_get_device(phynode); + phy = phynode_get_id(phynode); + sc = device_get_softc(dev); + + if (phy != RK3399_USBPHY_HOST) + return (ERANGE); + + *mode = sc->mode; + + return (0); +} + +static int +rk_usb2phy_set_mode(struct phynode *phynode, int mode) +{ + struct rk_usb2phy_softc *sc; + intptr_t phy; + device_t dev; + + dev = phynode_get_device(phynode); + phy = phynode_get_id(phynode); + sc = device_get_softc(dev); + + if (phy != RK3399_USBPHY_HOST) + return (ERANGE); + + sc->mode = mode; + + return (0); +} + /* Clock class and method */ struct rk_usb2phy_clk_sc { device_t clkdev; |