Index | Thread | Search

From:
Jonathan Matthew <jonathan@d14n.org>
Subject:
fanpwr: add rk8600
To:
tech@openbsd.org
Cc:
kettenis@openbsd.org
Date:
Thu, 21 May 2026 07:57:19 +1000

Download raw body.

Thread
  • Jonathan Matthew:

    fanpwr: add rk8600

This FAN53555 clone only seems to be used on the Radxa Zero 3 boards.
According to the linux driver, it works just like the FAN53555 except
it has the same voltage base and step as the Silergy clones.
This makes cpu frequency adjustment work on the zero 3w.

ok?


Index: fanpwr.c
===================================================================
RCS file: /cvs/src/sys/dev/fdt/fanpwr.c,v
diff -u -p -r1.10 fanpwr.c
--- fanpwr.c	26 May 2024 22:04:52 -0000	1.10
+++ fanpwr.c	20 May 2026 12:15:46 -0000
@@ -51,6 +51,7 @@
 /* Distinguish between Fairchild original and Silergy clones. */
 enum fanpwr_id {
 	FANPWR_FAN53555,	/* Fairchild FAN53555 */
+	FANPWR_RK8600,		/* Rockchip RK8600 */
 	FANPWR_RK8602,		/* Rockchip RK8602 */
 	FANPWR_SYR827,		/* Silergy SYR827 */
 	FANPWR_SYR828,		/* Silergy SYR828 */
@@ -93,6 +94,7 @@ fanpwr_match(struct device *parent, void
 	struct i2c_attach_args *ia = aux;
 
 	return (strcmp(ia->ia_name, "fcs,fan53555") == 0 ||
+	    strcmp(ia->ia_name, "rockchip,rk8600") == 0 ||
 	    strcmp(ia->ia_name, "rockchip,rk8602") == 0 ||
 	    strcmp(ia->ia_name, "rockchip,rk8603") == 0 ||
 	    strcmp(ia->ia_name, "silergy,syr827") == 0 ||
@@ -114,7 +116,10 @@ fanpwr_attach(struct device *parent, str
 	sc->sc_tag = ia->ia_tag;
 	sc->sc_addr = ia->ia_addr;
 
-	if (OF_is_compatible(node, "rockchip,rk8602") ||
+	if (OF_is_compatible(node, "rockchip,rk8600")) {
+		printf(": RK8600");
+		sc->sc_id = FANPWR_RK8600;
+	} else if (OF_is_compatible(node, "rockchip,rk8602") ||
 	    OF_is_compatible(node, "rockchip,rk8603")) {
 		printf(": RK8602");
 		sc->sc_id = FANPWR_RK8602;
@@ -194,6 +199,7 @@ fanpwr_attach(struct device *parent, str
 		sc->sc_vbase = 500000;
 		sc->sc_vstep = 6250;
 		break;
+	case FANPWR_RK8600:
 	case FANPWR_SYR827:
 	case FANPWR_SYR828:
 		sc->sc_vbase = 712500;