aboutsummaryrefslogtreecommitdiff
path: root/sys/arm64
diff options
context:
space:
mode:
authorEmmanuel Vadot <manu@FreeBSD.org>2019-10-05 17:36:33 +0000
committerEmmanuel Vadot <manu@FreeBSD.org>2019-10-05 17:36:33 +0000
commitc36e2d14ac53be1ae738e2377641c4b61985077f (patch)
tree426142feccb2e1b5c7864cbd27ef33e32c55fda7 /sys/arm64
parent2560cb1eb8e6cccf91cc409659aa544d56cb2517 (diff)
downloadsrc-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.c45
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;