Index | Thread | Search

From:
Mark Kettenis <mark.kettenis@xs4all.nl>
Subject:
Re: fanpwr: add rk8600
To:
Jonathan Matthew <jonathan@d14n.org>
Cc:
tech@openbsd.org, kettenis@openbsd.org
Date:
Thu, 21 May 2026 00:11:26 +0200

Download raw body.

Thread
  • Jonathan Matthew:

    fanpwr: add rk8600

    • Mark Kettenis:

      fanpwr: add rk8600

> Date: Thu, 21 May 2026 07:57:19 +1000
> From: Jonathan Matthew <jonathan@d14n.org>
> 
> 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?

ok kettenis@

> 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;
> 
>