13d0407baSopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */
23d0407baSopenharmony_ci/*
33d0407baSopenharmony_ci * Copyright (c) 2021 Rockchip Electronics Co., Ltd.
43d0407baSopenharmony_ci */
53d0407baSopenharmony_ci
63d0407baSopenharmony_ci#ifndef __LINUX_REGULATOR_RK806_H
73d0407baSopenharmony_ci#define __LINUX_REGULATOR_RK806_H
83d0407baSopenharmony_ci
93d0407baSopenharmony_ci#include <linux/regmap.h>
103d0407baSopenharmony_ci#include <linux/regulator/driver.h>
113d0407baSopenharmony_ci#include <linux/regulator/machine.h>
123d0407baSopenharmony_ci
133d0407baSopenharmony_ci#define RK806_POWER_EN0			0x0
143d0407baSopenharmony_ci#define RK806_POWER_EN1			0x1
153d0407baSopenharmony_ci#define RK806_POWER_EN2			0x2
163d0407baSopenharmony_ci#define RK806_POWER_EN3			0x3
173d0407baSopenharmony_ci#define RK806_POWER_EN4			0x4
183d0407baSopenharmony_ci#define RK806_POWER_EN5			0x5
193d0407baSopenharmony_ci#define RK806_POWER_SLP_EN0		0x6
203d0407baSopenharmony_ci#define RK806_POWER_SLP_EN1		0x7
213d0407baSopenharmony_ci#define RK806_POWER_SLP_EN2		0x8
223d0407baSopenharmony_ci#define RK806_POWER_DISCHRG_EN0		0x9
233d0407baSopenharmony_ci#define RK806_POWER_DISCHRG_EN1		0xA
243d0407baSopenharmony_ci#define RK806_POWER_DISCHRG_EN2		0xB
253d0407baSopenharmony_ci#define RK806_BUCK_FB_CONFIG		0xC
263d0407baSopenharmony_ci#define RK806_SLP_LP_CONFIG		0xD
273d0407baSopenharmony_ci#define RK806_POWER_FPWM_EN0		0xE
283d0407baSopenharmony_ci#define RK806_POWER_FPWM_EN1		0xF
293d0407baSopenharmony_ci#define RK806_BUCK1_CONFIG		0x10
303d0407baSopenharmony_ci#define RK806_BUCK2_CONFIG		0x11
313d0407baSopenharmony_ci#define RK806_BUCK3_CONFIG		0x12
323d0407baSopenharmony_ci#define RK806_BUCK4_CONFIG		0x13
333d0407baSopenharmony_ci#define RK806_BUCK5_CONFIG		0x14
343d0407baSopenharmony_ci#define RK806_BUCK6_CONFIG		0x15
353d0407baSopenharmony_ci#define RK806_BUCK7_CONFIG		0x16
363d0407baSopenharmony_ci#define RK806_BUCK8_CONFIG		0x17
373d0407baSopenharmony_ci#define RK806_BUCK9_CONFIG		0x18
383d0407baSopenharmony_ci#define RK806_BUCK10_CONFIG		0x19
393d0407baSopenharmony_ci#define RK806_BUCK1_ON_VSEL		0x1A
403d0407baSopenharmony_ci#define RK806_BUCK2_ON_VSEL		0x1B
413d0407baSopenharmony_ci#define RK806_BUCK3_ON_VSEL		0x1C
423d0407baSopenharmony_ci#define RK806_BUCK4_ON_VSEL		0x1D
433d0407baSopenharmony_ci#define RK806_BUCK5_ON_VSEL		0x1E
443d0407baSopenharmony_ci#define RK806_BUCK6_ON_VSEL		0x1F
453d0407baSopenharmony_ci#define RK806_BUCK7_ON_VSEL		0x20
463d0407baSopenharmony_ci#define RK806_BUCK8_ON_VSEL		0x21
473d0407baSopenharmony_ci#define RK806_BUCK9_ON_VSEL		0x22
483d0407baSopenharmony_ci#define RK806_BUCK10_ON_VSEL		0x23
493d0407baSopenharmony_ci#define RK806_BUCK1_SLP_VSEL		0x24
503d0407baSopenharmony_ci#define RK806_BUCK2_SLP_VSEL		0x25
513d0407baSopenharmony_ci#define RK806_BUCK3_SLP_VSEL		0x26
523d0407baSopenharmony_ci#define RK806_BUCK4_SLP_VSEL		0x27
533d0407baSopenharmony_ci#define RK806_BUCK5_SLP_VSEL		0x28
543d0407baSopenharmony_ci#define RK806_BUCK6_SLP_VSEL		0x29
553d0407baSopenharmony_ci#define RK806_BUCK7_SLP_VSEL		0x2A
563d0407baSopenharmony_ci#define RK806_BUCK8_SLP_VSEL		0x2B
573d0407baSopenharmony_ci#define RK806_BUCK9_SLP_VSEL		0x2D
583d0407baSopenharmony_ci#define RK806_BUCK10_SLP_VSEL		0x2E
593d0407baSopenharmony_ci#define RK806_BUCK_DEBUG1		0x30
603d0407baSopenharmony_ci#define RK806_BUCK_DEBUG2		0x31
613d0407baSopenharmony_ci#define RK806_BUCK_DEBUG3		0x32
623d0407baSopenharmony_ci#define RK806_BUCK_DEBUG4		0x33
633d0407baSopenharmony_ci#define RK806_BUCK_DEBUG5		0x34
643d0407baSopenharmony_ci#define RK806_BUCK_DEBUG6		0x35
653d0407baSopenharmony_ci#define RK806_BUCK_DEBUG7		0x36
663d0407baSopenharmony_ci#define RK806_BUCK_DEBUG8		0x37
673d0407baSopenharmony_ci#define RK806_BUCK_DEBUG9		0x38
683d0407baSopenharmony_ci#define RK806_BUCK_DEBUG10		0x39
693d0407baSopenharmony_ci#define RK806_BUCK_DEBUG11		0x3A
703d0407baSopenharmony_ci#define RK806_BUCK_DEBUG12		0x3B
713d0407baSopenharmony_ci#define RK806_BUCK_DEBUG13		0x3C
723d0407baSopenharmony_ci#define RK806_BUCK_DEBUG14		0x3D
733d0407baSopenharmony_ci#define RK806_BUCK_DEBUG15		0x3E
743d0407baSopenharmony_ci#define RK806_BUCK_DEBUG16		0x3F
753d0407baSopenharmony_ci#define RK806_BUCK_DEBUG17		0x40
763d0407baSopenharmony_ci#define RK806_BUCK_DEBUG18		0x41
773d0407baSopenharmony_ci#define RK806_NLDO_IMAX			0x42
783d0407baSopenharmony_ci#define RK806_NLDO1_ON_VSEL		0x43
793d0407baSopenharmony_ci#define RK806_NLDO2_ON_VSEL		0x44
803d0407baSopenharmony_ci#define RK806_NLDO3_ON_VSEL		0x45
813d0407baSopenharmony_ci#define RK806_NLDO4_ON_VSEL		0x46
823d0407baSopenharmony_ci#define RK806_NLDO5_ON_VSEL		0x47
833d0407baSopenharmony_ci#define RK806_NLDO1_SLP_VSEL		0x48
843d0407baSopenharmony_ci#define RK806_NLDO2_SLP_VSEL		0x49
853d0407baSopenharmony_ci#define RK806_NLDO3_SLP_VSEL		0x4A
863d0407baSopenharmony_ci#define RK806_NLDO4_SLP_VSEL		0x4B
873d0407baSopenharmony_ci#define RK806_NLDO5_SLP_VSEL		0x4C
883d0407baSopenharmony_ci#define RK806_PLDO_IMAX			0x4D
893d0407baSopenharmony_ci#define RK806_PLDO1_ON_VSEL		0x4E
903d0407baSopenharmony_ci#define RK806_PLDO2_ON_VSEL		0x4F
913d0407baSopenharmony_ci#define RK806_PLDO3_ON_VSEL		0x50
923d0407baSopenharmony_ci#define RK806_PLDO4_ON_VSEL		0x51
933d0407baSopenharmony_ci#define RK806_PLDO5_ON_VSEL		0x52
943d0407baSopenharmony_ci#define RK806_PLDO6_ON_VSEL		0x53
953d0407baSopenharmony_ci#define RK806_PLDO1_SLP_VSEL		0x54
963d0407baSopenharmony_ci#define RK806_PLDO2_SLP_VSEL		0x55
973d0407baSopenharmony_ci#define RK806_PLDO3_SLP_VSEL		0x56
983d0407baSopenharmony_ci#define RK806_PLDO4_SLP_VSEL		0x57
993d0407baSopenharmony_ci#define RK806_PLDO5_SLP_VSEL		0x58
1003d0407baSopenharmony_ci#define RK806_PLDO6_SLP_VSEL		0x59
1013d0407baSopenharmony_ci#define RK806_CHIP_NAME			0x5A
1023d0407baSopenharmony_ci#define RK806_CHIP_VER			0x5B
1033d0407baSopenharmony_ci#define RK806_OTP_VER			0x5C
1043d0407baSopenharmony_ci#define RK806_SYS_STS			0x5D
1053d0407baSopenharmony_ci#define RK806_SYS_CFG0			0x5E
1063d0407baSopenharmony_ci#define RK806_SYS_CFG1			0x5F
1073d0407baSopenharmony_ci#define RK806_SYS_OPTION		0x61
1083d0407baSopenharmony_ci#define RK806_SLEEP_CONFIG0		0x62
1093d0407baSopenharmony_ci#define RK806_SLEEP_CONFIG1		0x63
1103d0407baSopenharmony_ci#define RK806_SLEEP_CTR_SEL0		0x64
1113d0407baSopenharmony_ci#define RK806_SLEEP_CTR_SEL1		0x65
1123d0407baSopenharmony_ci#define RK806_SLEEP_CTR_SEL2		0x66
1133d0407baSopenharmony_ci#define RK806_SLEEP_CTR_SEL3		0x67
1143d0407baSopenharmony_ci#define RK806_SLEEP_CTR_SEL4		0x68
1153d0407baSopenharmony_ci#define RK806_SLEEP_CTR_SEL5		0x69
1163d0407baSopenharmony_ci#define RK806_DVS_CTRL_SEL0		0x6A
1173d0407baSopenharmony_ci#define RK806_DVS_CTRL_SEL1		0x6B
1183d0407baSopenharmony_ci#define RK806_DVS_CTRL_SEL2		0x6C
1193d0407baSopenharmony_ci#define RK806_DVS_CTRL_SEL3		0x6D
1203d0407baSopenharmony_ci#define RK806_DVS_CTRL_SEL4		0x6E
1213d0407baSopenharmony_ci#define RK806_DVS_CTRL_SEL5		0x6F
1223d0407baSopenharmony_ci#define RK806_DVS_START_CTRL		0x70
1233d0407baSopenharmony_ci#define RK806_SLEEP_GPIO		0x71
1243d0407baSopenharmony_ci#define RK806_SYS_CFG3			0x72
1253d0407baSopenharmony_ci#define RK806_ON_SOURCE			0x74
1263d0407baSopenharmony_ci#define RK806_OFF_SOURCE		0x75
1273d0407baSopenharmony_ci#define RK806_PWRON_KEY			0x76
1283d0407baSopenharmony_ci#define RK806_INT_STS0			0x77
1293d0407baSopenharmony_ci#define RK806_INT_MSK0			0x78
1303d0407baSopenharmony_ci#define RK806_INT_STS1			0x79
1313d0407baSopenharmony_ci#define RK806_INT_MSK1			0x7A
1323d0407baSopenharmony_ci#define RK806_GPIO_INT_CONFIG		0x7B
1333d0407baSopenharmony_ci#define RK806_DATA_REG0			0x7C
1343d0407baSopenharmony_ci#define RK806_DATA_REG1			0x7D
1353d0407baSopenharmony_ci#define RK806_DATA_REG2			0x7E
1363d0407baSopenharmony_ci#define RK806_DATA_REG3			0x7F
1373d0407baSopenharmony_ci#define RK806_DATA_REG4			0x80
1383d0407baSopenharmony_ci#define RK806_DATA_REG5			0x81
1393d0407baSopenharmony_ci#define RK806_DATA_REG6			0x82
1403d0407baSopenharmony_ci#define RK806_DATA_REG7			0x83
1413d0407baSopenharmony_ci#define RK806_DATA_REG8			0x84
1423d0407baSopenharmony_ci#define RK806_DATA_REG9			0x85
1433d0407baSopenharmony_ci#define RK806_DATA_REG10		0x86
1443d0407baSopenharmony_ci#define RK806_DATA_REG11		0x87
1453d0407baSopenharmony_ci#define RK806_DATA_REG12		0x88
1463d0407baSopenharmony_ci#define RK806_DATA_REG13		0x89
1473d0407baSopenharmony_ci#define RK806_DATA_REG14		0x8A
1483d0407baSopenharmony_ci#define RK806_DATA_REG15		0x8B
1493d0407baSopenharmony_ci#define RK806_TM_REG			0x8C
1503d0407baSopenharmony_ci#define RK806_OTP_EN_REG		0x8D
1513d0407baSopenharmony_ci#define RK806_FUNC_OTP_EN_REG		0x8E
1523d0407baSopenharmony_ci#define RK806_TEST_REG1			0x8F
1533d0407baSopenharmony_ci#define RK806_TEST_REG2			0x90
1543d0407baSopenharmony_ci#define RK806_TEST_REG3			0x91
1553d0407baSopenharmony_ci#define RK806_TEST_REG4			0x92
1563d0407baSopenharmony_ci#define RK806_TEST_REG5			0x93
1573d0407baSopenharmony_ci#define RK806_BUCK_VSEL_OTP_REG0	0x94
1583d0407baSopenharmony_ci#define RK806_BUCK_VSEL_OTP_REG1	0x95
1593d0407baSopenharmony_ci#define RK806_BUCK_VSEL_OTP_REG2	0x96
1603d0407baSopenharmony_ci#define RK806_BUCK_VSEL_OTP_REG3	0x97
1613d0407baSopenharmony_ci#define RK806_BUCK_VSEL_OTP_REG4	0x98
1623d0407baSopenharmony_ci#define RK806_BUCK_VSEL_OTP_REG5	0x99
1633d0407baSopenharmony_ci#define RK806_BUCK_VSEL_OTP_REG6	0x9A
1643d0407baSopenharmony_ci#define RK806_BUCK_VSEL_OTP_REG7	0x9B
1653d0407baSopenharmony_ci#define RK806_BUCK_VSEL_OTP_REG8	0x9C
1663d0407baSopenharmony_ci#define RK806_BUCK_VSEL_OTP_REG9	0x9D
1673d0407baSopenharmony_ci#define RK806_NLDO1_VSEL_OTP_REG0	0x9E
1683d0407baSopenharmony_ci#define RK806_NLDO1_VSEL_OTP_REG1	0x9F
1693d0407baSopenharmony_ci#define RK806_NLDO1_VSEL_OTP_REG2	0xA0
1703d0407baSopenharmony_ci#define RK806_NLDO1_VSEL_OTP_REG3	0xA1
1713d0407baSopenharmony_ci#define RK806_NLDO1_VSEL_OTP_REG4	0xA2
1723d0407baSopenharmony_ci#define RK806_PLDO_VSEL_OTP_REG0	0xA3
1733d0407baSopenharmony_ci#define RK806_PLDO_VSEL_OTP_REG1	0xA4
1743d0407baSopenharmony_ci#define RK806_PLDO_VSEL_OTP_REG2	0xA5
1753d0407baSopenharmony_ci#define RK806_PLDO_VSEL_OTP_REG3	0xA6
1763d0407baSopenharmony_ci#define RK806_PLDO_VSEL_OTP_REG4	0xA7
1773d0407baSopenharmony_ci#define RK806_PLDO_VSEL_OTP_REG5	0xA8
1783d0407baSopenharmony_ci#define RK806_BUCK_EN_OTP_REG1		0xA9
1793d0407baSopenharmony_ci#define RK806_NLDO_EN_OTP_REG1		0xAA
1803d0407baSopenharmony_ci#define RK806_PLDO_EN_OTP_REG1		0xAB
1813d0407baSopenharmony_ci#define RK806_BUCK_FB_RES_OTP_REG1	0xAC
1823d0407baSopenharmony_ci#define RK806_OTP_RESEV_REG0		0xAD
1833d0407baSopenharmony_ci#define RK806_OTP_RESEV_REG1		0xAE
1843d0407baSopenharmony_ci#define RK806_OTP_RESEV_REG2		0xAF
1853d0407baSopenharmony_ci#define RK806_OTP_RESEV_REG3		0xB0
1863d0407baSopenharmony_ci#define RK806_OTP_RESEV_REG4		0xB1
1873d0407baSopenharmony_ci#define RK806_BUCK_SEQ_REG0		0xB2
1883d0407baSopenharmony_ci#define RK806_BUCK_SEQ_REG1		0xB3
1893d0407baSopenharmony_ci#define RK806_BUCK_SEQ_REG2		0xB4
1903d0407baSopenharmony_ci#define RK806_BUCK_SEQ_REG3		0xB5
1913d0407baSopenharmony_ci#define RK806_BUCK_SEQ_REG4		0xB6
1923d0407baSopenharmony_ci#define RK806_BUCK_SEQ_REG5		0xB7
1933d0407baSopenharmony_ci#define RK806_BUCK_SEQ_REG6		0xB8
1943d0407baSopenharmony_ci#define RK806_BUCK_SEQ_REG7		0xB9
1953d0407baSopenharmony_ci#define RK806_BUCK_SEQ_REG8		0xBA
1963d0407baSopenharmony_ci#define RK806_BUCK_SEQ_REG9		0xBB
1973d0407baSopenharmony_ci#define RK806_BUCK_SEQ_REG10		0xBC
1983d0407baSopenharmony_ci#define RK806_BUCK_SEQ_REG11		0xBD
1993d0407baSopenharmony_ci#define RK806_BUCK_SEQ_REG12		0xBE
2003d0407baSopenharmony_ci#define RK806_BUCK_SEQ_REG13		0xBF
2013d0407baSopenharmony_ci#define RK806_BUCK_SEQ_REG14		0xC0
2023d0407baSopenharmony_ci#define RK806_BUCK_SEQ_REG15		0xC1
2033d0407baSopenharmony_ci#define RK806_BUCK_SEQ_REG16		0xC2
2043d0407baSopenharmony_ci#define RK806_BUCK_SEQ_REG17		0xC3
2053d0407baSopenharmony_ci#define RK806_HK_TRIM_REG1		0xC4
2063d0407baSopenharmony_ci#define RK806_HK_TRIM_REG2		0xC5
2073d0407baSopenharmony_ci#define RK806_BUCK_REF_TRIM_REG1	0xC6
2083d0407baSopenharmony_ci#define RK806_BUCK_REF_TRIM_REG2	0xC7
2093d0407baSopenharmony_ci#define RK806_BUCK_REF_TRIM_REG3	0xC8
2103d0407baSopenharmony_ci#define RK806_BUCK_REF_TRIM_REG4	0xC9
2113d0407baSopenharmony_ci#define RK806_BUCK_REF_TRIM_REG5	0xCA
2123d0407baSopenharmony_ci#define RK806_BUCK_OSC_TRIM_REG1	0xCB
2133d0407baSopenharmony_ci#define RK806_BUCK_OSC_TRIM_REG2	0xCC
2143d0407baSopenharmony_ci#define RK806_BUCK_OSC_TRIM_REG3	0xCD
2153d0407baSopenharmony_ci#define RK806_BUCK_OSC_TRIM_REG4	0xCE
2163d0407baSopenharmony_ci#define RK806_BUCK_OSC_TRIM_REG5	0xCF
2173d0407baSopenharmony_ci#define RK806_BUCK_TRIM_ZCDIOS_REG1	0xD0
2183d0407baSopenharmony_ci#define RK806_BUCK_TRIM_ZCDIOS_REG2	0xD1
2193d0407baSopenharmony_ci#define RK806_NLDO_TRIM_REG1		0xD2
2203d0407baSopenharmony_ci#define RK806_NLDO_TRIM_REG2		0xD3
2213d0407baSopenharmony_ci#define RK806_NLDO_TRIM_REG3		0xD4
2223d0407baSopenharmony_ci#define RK806_PLDO_TRIM_REG1		0xD5
2233d0407baSopenharmony_ci#define RK806_PLDO_TRIM_REG2		0xD6
2243d0407baSopenharmony_ci#define RK806_PLDO_TRIM_REG3		0xD7
2253d0407baSopenharmony_ci#define RK806_TRIM_ICOMP_REG1		0xD8
2263d0407baSopenharmony_ci#define RK806_TRIM_ICOMP_REG2		0xD9
2273d0407baSopenharmony_ci#define RK806_EFUSE_CONTROL_REGH	0xDA
2283d0407baSopenharmony_ci#define RK806_FUSE_PROG_REG		0xDB
2293d0407baSopenharmony_ci#define RK806_MAIN_FSM_STS_REG		0xDD
2303d0407baSopenharmony_ci#define RK806_FSM_REG			0xDE
2313d0407baSopenharmony_ci#define RK806_TOP_RESEV_OFFR		0xEC
2323d0407baSopenharmony_ci#define RK806_TOP_RESEV_POR		0xED
2333d0407baSopenharmony_ci#define RK806_BUCK_VRSN_REG1		0xEE
2343d0407baSopenharmony_ci#define RK806_BUCK_VRSN_REG2		0xEF
2353d0407baSopenharmony_ci#define RK806_NLDO_RLOAD_SEL_REG1	0xF0
2363d0407baSopenharmony_ci#define RK806_PLDO_RLOAD_SEL_REG1	0xF1
2373d0407baSopenharmony_ci#define RK806_PLDO_RLOAD_SEL_REG2	0xF2
2383d0407baSopenharmony_ci#define RK806_BUCK_CMIN_MX_REG1		0xF3
2393d0407baSopenharmony_ci#define RK806_BUCK_CMIN_MX_REG2		0xF4
2403d0407baSopenharmony_ci#define RK806_BUCK_FREQ_SET_REG1	0xF5
2413d0407baSopenharmony_ci#define RK806_BUCK_FREQ_SET_REG2	0xF6
2423d0407baSopenharmony_ci#define RK806_BUCK_RS_MEABS_REG1	0xF7
2433d0407baSopenharmony_ci#define RK806_BUCK_RS_MEABS_REG2	0xF8
2443d0407baSopenharmony_ci#define RK806_BUCK_RS_ZDLEB_REG1	0xF9
2453d0407baSopenharmony_ci#define RK806_BUCK_RS_ZDLEB_REG2	0xFA
2463d0407baSopenharmony_ci#define RK806_BUCK_RSERVE_REG1		0xFB
2473d0407baSopenharmony_ci#define RK806_BUCK_RSERVE_REG2		0xFC
2483d0407baSopenharmony_ci#define RK806_BUCK_RSERVE_REG3		0xFD
2493d0407baSopenharmony_ci#define RK806_BUCK_RSERVE_REG4		0xFE
2503d0407baSopenharmony_ci#define RK806_BUCK_RSERVE_REG5		0xFF
2513d0407baSopenharmony_ci
2523d0407baSopenharmony_ci/* INT_STS Register field definitions */
2533d0407baSopenharmony_ci#define RK806_INT_STS_PWRON_FALL	BIT(0)
2543d0407baSopenharmony_ci#define RK806_INT_STS_PWRON_RISE	BIT(1)
2553d0407baSopenharmony_ci#define RK806_INT_STS_PWRON		BIT(2)
2563d0407baSopenharmony_ci#define RK806_INT_STS_PWRON_LP		BIT(3)
2573d0407baSopenharmony_ci#define RK806_INT_STS_HOTDIE		BIT(4)
2583d0407baSopenharmony_ci#define RK806_INT_STS_VDC_RISE		BIT(5)
2593d0407baSopenharmony_ci#define RK806_INT_STS_VDC_FALL		BIT(6)
2603d0407baSopenharmony_ci#define RK806_INT_STS_VB_LO		BIT(7)
2613d0407baSopenharmony_ci#define RK806_INT_STS_REV0		BIT(0)
2623d0407baSopenharmony_ci#define RK806_INT_STS_REV1		BIT(1)
2633d0407baSopenharmony_ci#define RK806_INT_STS_REV2		BIT(2)
2643d0407baSopenharmony_ci#define RK806_INT_STS_CRC_ERROR		BIT(3)
2653d0407baSopenharmony_ci#define RK806_INT_STS_SLP3_GPIO		BIT(4)
2663d0407baSopenharmony_ci#define RK806_INT_STS_SLP2_GPIO		BIT(5)
2673d0407baSopenharmony_ci#define RK806_INT_STS_SLP1_GPIO		BIT(6)
2683d0407baSopenharmony_ci#define RK806_INT_STS_WDT		BIT(7)
2693d0407baSopenharmony_ci
2703d0407baSopenharmony_ci/* spi command */
2713d0407baSopenharmony_ci#define RK806_CMD_READ			0
2723d0407baSopenharmony_ci#define RK806_CMD_WRITE			BIT(7)
2733d0407baSopenharmony_ci#define RK806_CMD_CRC_EN		BIT(6)
2743d0407baSopenharmony_ci#define RK806_CMD_CRC_DIS		0
2753d0407baSopenharmony_ci#define RK806_CMD_LEN_MSK		0x0f
2763d0407baSopenharmony_ci#define RK806_REG_H			0x00
2773d0407baSopenharmony_ci
2783d0407baSopenharmony_ci#define VERSION_AB		0x01
2793d0407baSopenharmony_ci
2803d0407baSopenharmony_cienum rk806_reg_id {
2813d0407baSopenharmony_ci	RK806_ID_DCDC1 = 0,
2823d0407baSopenharmony_ci	RK806_ID_DCDC2,
2833d0407baSopenharmony_ci	RK806_ID_DCDC3,
2843d0407baSopenharmony_ci	RK806_ID_DCDC4,
2853d0407baSopenharmony_ci	RK806_ID_DCDC5,
2863d0407baSopenharmony_ci	RK806_ID_DCDC6,
2873d0407baSopenharmony_ci	RK806_ID_DCDC7,
2883d0407baSopenharmony_ci	RK806_ID_DCDC8,
2893d0407baSopenharmony_ci	RK806_ID_DCDC9,
2903d0407baSopenharmony_ci	RK806_ID_DCDC10,
2913d0407baSopenharmony_ci
2923d0407baSopenharmony_ci	RK806_ID_NLDO1,
2933d0407baSopenharmony_ci	RK806_ID_NLDO2,
2943d0407baSopenharmony_ci	RK806_ID_NLDO3,
2953d0407baSopenharmony_ci	RK806_ID_NLDO4,
2963d0407baSopenharmony_ci	RK806_ID_NLDO5,
2973d0407baSopenharmony_ci
2983d0407baSopenharmony_ci	RK806_ID_PLDO1,
2993d0407baSopenharmony_ci	RK806_ID_PLDO2,
3003d0407baSopenharmony_ci	RK806_ID_PLDO3,
3013d0407baSopenharmony_ci	RK806_ID_PLDO4,
3023d0407baSopenharmony_ci	RK806_ID_PLDO5,
3033d0407baSopenharmony_ci	RK806_ID_PLDO6,
3043d0407baSopenharmony_ci	RK806_ID_END,
3053d0407baSopenharmony_ci};
3063d0407baSopenharmony_ci
3073d0407baSopenharmony_ci/* Define the rk806 IRQ numbers */
3083d0407baSopenharmony_cienum rk806_irqs {
3093d0407baSopenharmony_ci	/* INT_STS0 registers */
3103d0407baSopenharmony_ci	RK806_IRQ_PWRON_FALL,
3113d0407baSopenharmony_ci	RK806_IRQ_PWRON_RISE,
3123d0407baSopenharmony_ci	RK806_IRQ_PWRON,
3133d0407baSopenharmony_ci	RK806_IRQ_PWRON_LP,
3143d0407baSopenharmony_ci	RK806_IRQ_HOTDIE,
3153d0407baSopenharmony_ci	RK806_IRQ_VDC_RISE,
3163d0407baSopenharmony_ci	RK806_IRQ_VDC_FALL,
3173d0407baSopenharmony_ci	RK806_IRQ_VB_LO,
3183d0407baSopenharmony_ci
3193d0407baSopenharmony_ci	/* INT_STS0 registers */
3203d0407baSopenharmony_ci	RK806_IRQ_REV0,
3213d0407baSopenharmony_ci	RK806_IRQ_REV1,
3223d0407baSopenharmony_ci	RK806_IRQ_REV2,
3233d0407baSopenharmony_ci	RK806_IRQ_CRC_ERROR,
3243d0407baSopenharmony_ci	RK806_IRQ_SLP3_GPIO,
3253d0407baSopenharmony_ci	RK806_IRQ_SLP2_GPIO,
3263d0407baSopenharmony_ci	RK806_IRQ_SLP1_GPIO,
3273d0407baSopenharmony_ci	RK806_IRQ_WDT,
3283d0407baSopenharmony_ci};
3293d0407baSopenharmony_ci
3303d0407baSopenharmony_ci/* VCC1 low voltage threshold */
3313d0407baSopenharmony_cienum rk806_lv_sel {
3323d0407baSopenharmony_ci	VB_LO_SEL_2800,
3333d0407baSopenharmony_ci	VB_LO_SEL_2900,
3343d0407baSopenharmony_ci	VB_LO_SEL_3000,
3353d0407baSopenharmony_ci	VB_LO_SEL_3100,
3363d0407baSopenharmony_ci	VB_LO_SEL_3200,
3373d0407baSopenharmony_ci	VB_LO_SEL_3300,
3383d0407baSopenharmony_ci	VB_LO_SEL_3400,
3393d0407baSopenharmony_ci	VB_LO_SEL_3500,
3403d0407baSopenharmony_ci};
3413d0407baSopenharmony_ci
3423d0407baSopenharmony_ci/* system shut down voltage select */
3433d0407baSopenharmony_cienum rk806_uv_sel {
3443d0407baSopenharmony_ci	VB_UV_SEL_2700,
3453d0407baSopenharmony_ci	VB_UV_SEL_2800,
3463d0407baSopenharmony_ci	VB_UV_SEL_2900,
3473d0407baSopenharmony_ci	VB_UV_SEL_3000,
3483d0407baSopenharmony_ci	VB_UV_SEL_3100,
3493d0407baSopenharmony_ci	VB_UV_SEL_3200,
3503d0407baSopenharmony_ci	VB_UV_SEL_3300,
3513d0407baSopenharmony_ci	VB_UV_SEL_3400,
3523d0407baSopenharmony_ci};
3533d0407baSopenharmony_ci
3543d0407baSopenharmony_ci/* pin function */
3553d0407baSopenharmony_cienum rk806_pwrctrl_fun {
3563d0407baSopenharmony_ci	PWRCTRL_NULL_FUN,
3573d0407baSopenharmony_ci	PWRCTRL_SLP_FUN,
3583d0407baSopenharmony_ci	PWRCTRL_POWOFF_FUN,
3593d0407baSopenharmony_ci	PWRCTRL_RST_FUN,
3603d0407baSopenharmony_ci	PWRCTRL_DVS_FUN,
3613d0407baSopenharmony_ci	PWRCTRL_GPIO_FUN,
3623d0407baSopenharmony_ci};
3633d0407baSopenharmony_ci
3643d0407baSopenharmony_ci/* pin pol */
3653d0407baSopenharmony_cienum rk806_pin_level {
3663d0407baSopenharmony_ci	POL_LOW,
3673d0407baSopenharmony_ci	POL_HIGH,
3683d0407baSopenharmony_ci};
3693d0407baSopenharmony_ci
3703d0407baSopenharmony_cienum rk806_vsel_ctr_sel {
3713d0407baSopenharmony_ci	CTR_BY_NO_EFFECT,
3723d0407baSopenharmony_ci	CTR_BY_PWRCTRL1,
3733d0407baSopenharmony_ci	CTR_BY_PWRCTRL2,
3743d0407baSopenharmony_ci	CTR_BY_PWRCTRL3,
3753d0407baSopenharmony_ci};
3763d0407baSopenharmony_ci
3773d0407baSopenharmony_cienum rk806_dvs_ctr_sel {
3783d0407baSopenharmony_ci	CTR_SEL_NO_EFFECT,
3793d0407baSopenharmony_ci	CTR_SEL_DVS_START1,
3803d0407baSopenharmony_ci	CTR_SEL_DVS_START2,
3813d0407baSopenharmony_ci	CTR_SEL_DVS_START3,
3823d0407baSopenharmony_ci};
3833d0407baSopenharmony_ci
3843d0407baSopenharmony_cienum rk806_pin_dr_sel {
3853d0407baSopenharmony_ci	RK806_PIN_INPUT,
3863d0407baSopenharmony_ci	RK806_PIN_OUTPUT,
3873d0407baSopenharmony_ci};
3883d0407baSopenharmony_ci
3893d0407baSopenharmony_cienum rk806_int_pol {
3903d0407baSopenharmony_ci	RK806_INT_POL_LOW,
3913d0407baSopenharmony_ci	RK806_INT_POL_HIGH,
3923d0407baSopenharmony_ci};
3933d0407baSopenharmony_ci
3943d0407baSopenharmony_cienum rk806_int_fun {
3953d0407baSopenharmony_ci	RK806_INT_ONLY,
3963d0407baSopenharmony_ci	RK806_INT_ADN_WKUP,
3973d0407baSopenharmony_ci};
3983d0407baSopenharmony_ci
3993d0407baSopenharmony_cienum rk806_dvs_mode {
4003d0407baSopenharmony_ci	RK806_DVS_NOT_SUPPORT,
4013d0407baSopenharmony_ci	RK806_DVS_START1,
4023d0407baSopenharmony_ci	RK806_DVS_START2,
4033d0407baSopenharmony_ci	RK806_DVS_START3,
4043d0407baSopenharmony_ci	RK806_DVS_PWRCTRL1,
4053d0407baSopenharmony_ci	RK806_DVS_PWRCTRL2,
4063d0407baSopenharmony_ci	RK806_DVS_PWRCTRL3,
4073d0407baSopenharmony_ci	RK806_DVS_START_PWRCTR1,
4083d0407baSopenharmony_ci	RK806_DVS_START_PWRCTR2,
4093d0407baSopenharmony_ci	RK806_DVS_START_PWRCTR3,
4103d0407baSopenharmony_ci	RK806_DVS_END,
4113d0407baSopenharmony_ci};
4123d0407baSopenharmony_ci
4133d0407baSopenharmony_cienum rk806_fields {
4143d0407baSopenharmony_ci	CHIP_NAME_H, CHIP_NAME_L, CHIP_VER, OTP_VER,
4153d0407baSopenharmony_ci	POWER_EN0, POWER_EN1, POWER_EN2, POWER_EN3, POWER_EN4, POWER_EN5,
4163d0407baSopenharmony_ci	BUCK4_EN_MASK, BUCK3_EN_MASK, BUCK2_EN_MASK, BUCK1_EN_MASK,
4173d0407baSopenharmony_ci	BUCK4_EN, BUCK3_EN, BUCK2_EN, BUCK1_EN,
4183d0407baSopenharmony_ci	BUCK8_EN_MASK, BUCK7_EN_MASK, BUCK6_EN_MASK, BUCK5_EN_MASK,
4193d0407baSopenharmony_ci	BUCK8_EN, BUCK7_EN, BUCK6_EN, BUCK5_EN,
4203d0407baSopenharmony_ci	BUCK10_EN_MASK, BUCK9_EN_MASK, BUCK10_EN, BUCK9_EN,
4213d0407baSopenharmony_ci	NLDO4_EN_MASK, NLDO3_EN_MASK, NLDO2_EN_MASK, NLDO1_EN_MASK,
4223d0407baSopenharmony_ci	NLDO4_EN, NLDO3_EN, NLDO2_EN, NLDO1_EN,
4233d0407baSopenharmony_ci	PLDO4_EN_MASK, PLDO3_EN_MASK, PLDO2_EN_MASK, PLDO1_EN_MASK,
4243d0407baSopenharmony_ci	PLDO4_EN, PLDO3_EN, PLDO2_EN, PLDO1_EN,
4253d0407baSopenharmony_ci	NLDO5_EN_MASK, PLDO6_EN_MASK, PLDO5_EN_MASK,
4263d0407baSopenharmony_ci	NLDO5_EN, PLDO6_EN, PLDO5_EN,
4273d0407baSopenharmony_ci	BUCK8_SLP_EN, BUCK7_SLP_EN, BUCK6_SLP_EN, BUCK5_SLP_EN, BUCK4_SLP_EN,
4283d0407baSopenharmony_ci	BUCK3_SLP_EN, BUCK2_SLP_EN, BUCK1_SLP_EN,
4293d0407baSopenharmony_ci	BUCK10_SLP_EN, BUCK9_SLP_EN, NLDO5_SLP_EN, NLDO4_SLP_EN, NLDO3_SLP_EN,
4303d0407baSopenharmony_ci	NLDO2_SLP_EN, NLDO1_SLP_EN,
4313d0407baSopenharmony_ci	PLDO6_SLP_EN, PLDO5_SLP_EN, PLDO4_SLP_EN, PLDO3_SLP_EN,
4323d0407baSopenharmony_ci	PLDO2_SLP_EN, PLDO1_SLP_EN,
4333d0407baSopenharmony_ci	BUCK1_ON_VSEL, BUCK2_ON_VSEL, BUCK3_ON_VSEL, BUCK4_ON_VSEL, BUCK5_ON_VSEL,
4343d0407baSopenharmony_ci	BUCK6_ON_VSEL, BUCK7_ON_VSEL, BUCK8_ON_VSEL, BUCK9_ON_VSEL, BUCK10_ON_VSEL,
4353d0407baSopenharmony_ci	BUCK1_SLP_VSEL, BUCK2_SLP_VSEL, BUCK3_SLP_VSEL, BUCK4_SLP_VSEL, BUCK5_SLP_VSEL,
4363d0407baSopenharmony_ci	BUCK6_SLP_VSEL, BUCK7_SLP_VSEL, BUCK8_SLP_VSEL, BUCK9_SLP_VSEL, BUCK10_SLP_VSEL,
4373d0407baSopenharmony_ci	NLDO1_ON_VSEL, NLDO2_ON_VSEL, NLDO3_ON_VSEL, NLDO4_ON_VSEL, NLDO5_ON_VSEL,
4383d0407baSopenharmony_ci	NLDO1_SLP_VSEL, NLDO2_SLP_VSEL, NLDO3_SLP_VSEL, NLDO4_SLP_VSEL, NLDO5_SLP_VSEL,
4393d0407baSopenharmony_ci	PLDO1_ON_VSEL, PLDO2_ON_VSEL, PLDO3_ON_VSEL, PLDO4_ON_VSEL, PLDO5_ON_VSEL,
4403d0407baSopenharmony_ci	PLDO6_ON_VSEL,
4413d0407baSopenharmony_ci	PLDO1_SLP_VSEL, PLDO2_SLP_VSEL, PLDO3_SLP_VSEL, PLDO4_SLP_VSEL, PLDO5_SLP_VSEL,
4423d0407baSopenharmony_ci	PLDO6_SLP_VSEL,
4433d0407baSopenharmony_ci	BUCK1_RATE, BUCK2_RATE, BUCK3_RATE, BUCK4_RATE, BUCK5_RATE, BUCK6_RATE,
4443d0407baSopenharmony_ci	BUCK7_RATE, BUCK8_RATE, BUCK9_RATE, BUCK10_RATE,
4453d0407baSopenharmony_ci	PWRON_STS, VDC_STS, VB_UV_STSS, VB_LO_STS, HOTDIE_STS, TSD_STS, VB_OV_STS,
4463d0407baSopenharmony_ci	VB_UV_DLY, VB_UV_SEL, VB_LO_ACT, VB_LO_SEL,
4473d0407baSopenharmony_ci	ABNORDET_EN, TSD_TEMP, HOTDIE_TMP, SYS_OV_SD_EN, SYS_OV_SD_DLY_SEL, DLY_ABN_SHORT,
4483d0407baSopenharmony_ci	VCCXDET_DIS, OSC_TC, ENB2_2M, ENB_32K,
4493d0407baSopenharmony_ci	PWRCTRL1_FUN, PWRCTRL2_FUN, PWRCTRL3_FUN,
4503d0407baSopenharmony_ci	PWRCTRL1_POL, PWRCTRL2_POL, PWRCTRL3_POL,
4513d0407baSopenharmony_ci	BUCK1_VSEL_CTR_SEL, BUCK2_VSEL_CTR_SEL, BUCK3_VSEL_CTR_SEL, BUCK4_VSEL_CTR_SEL,
4523d0407baSopenharmony_ci	BUCK5_VSEL_CTR_SEL, BUCK6_VSEL_CTR_SEL, BUCK7_VSEL_CTR_SEL, BUCK8_VSEL_CTR_SEL,
4533d0407baSopenharmony_ci	BUCK9_VSEL_CTR_SEL, BUCK10_VSEL_CTR_SEL,
4543d0407baSopenharmony_ci	NLDO1_VSEL_CTR_SEL, NLDO2_VSEL_CTR_SEL, NLDO3_VSEL_CTR_SEL, NLDO4_VSEL_CTR_SEL,
4553d0407baSopenharmony_ci	NLDO5_VSEL_CTR_SEL,
4563d0407baSopenharmony_ci	PLDO1_VSEL_CTR_SEL, PLDO2_VSEL_CTR_SEL, PLDO3_VSEL_CTR_SEL, PLDO4_VSEL_CTR_SEL,
4573d0407baSopenharmony_ci	PLDO5_VSEL_CTR_SEL, PLDO6_VSEL_CTR_SEL,
4583d0407baSopenharmony_ci	BUCK1_DVS_CTR_SEL, BUCK2_DVS_CTR_SEL, BUCK3_DVS_CTR_SEL, BUCK4_DVS_CTR_SEL,
4593d0407baSopenharmony_ci	BUCK5_DVS_CTR_SEL, BUCK6_DVS_CTR_SEL, BUCK7_DVS_CTR_SEL, BUCK8_DVS_CTR_SEL,
4603d0407baSopenharmony_ci	BUCK9_DVS_CTR_SEL, BUCK10_DVS_CTR_SEL,
4613d0407baSopenharmony_ci	NLDO1_DVS_CTR_SEL, NLDO2_DVS_CTR_SEL, NLDO3_DVS_CTR_SEL, NLDO4_DVS_CTR_SEL,
4623d0407baSopenharmony_ci	NLDO5_DVS_CTR_SEL,
4633d0407baSopenharmony_ci	PLDO1_DVS_CTR_SEL, PLDO2_DVS_CTR_SEL, PLDO3_DVS_CTR_SEL, PLDO4_DVS_CTR_SEL,
4643d0407baSopenharmony_ci	PLDO5_DVS_CTR_SEL, PLDO6_DVS_CTR_SEL,
4653d0407baSopenharmony_ci	DVS_START1, DVS_START2, DVS_START3,
4663d0407baSopenharmony_ci	SLP3_DATA, SLP2_DATA, SLP1_DATA, SLP3_DR, SLP2_DR, SLP1_DR,
4673d0407baSopenharmony_ci
4683d0407baSopenharmony_ci	RST_FUN, DEV_RST, DEV_SLP, SLAVE_RESTART_FUN, DEV_OFF,
4693d0407baSopenharmony_ci	WDT_CLR, WDT_EN, WDT_SET, ON_SOURCE, OFF_SOURCE,
4703d0407baSopenharmony_ci	ON_PWRON, ON_VDC, RESTART_RESETB, RESTART_PWRON_LP, RESTART_SLP,
4713d0407baSopenharmony_ci	RESTART_DEV_RST, RESTART_WDT,
4723d0407baSopenharmony_ci	OFF_SLP, VB_SYS_OV, OFF_TSD, OFF_DEV_OFF, OFF_PWRON_LP, OFF_VB_LO,
4733d0407baSopenharmony_ci	PWRON_ON_TIME, PWRON_LP_ACT, PWRON_LP_OFF_TIME, PWRON_LP_TM_SEL, PWRON_DB_SEL,
4743d0407baSopenharmony_ci	VB_LO_INT, VDC_FALL_INT, VDC_RISE_INT, HOTDIE_INT, PWRON_LP_INT, PWRON_INT,
4753d0407baSopenharmony_ci	PWRON_RISE_INT, PWRON_FALL_INT,
4763d0407baSopenharmony_ci	VB_LO_IM, VDC_FALL_INT_IM, VDC_RISE_IM, HOTDIE_IM, PWRON_LP_IM,
4773d0407baSopenharmony_ci	PWRON_IM, PWRON_RISE_INT_IM, PWRON_FALL_INT_IM,
4783d0407baSopenharmony_ci	WDT_INT, SLP1_GPIO_INT, SLP2_GPIO_INT, SLP3_GPIO_INT,
4793d0407baSopenharmony_ci	WDT_INT_IM, SLP1_GPIO_IM, SLP2_GPIO_IM, SLP3_GPIO_IM,
4803d0407baSopenharmony_ci	INT_FUNCTION, INT_POL, INT_FC_EN,
4813d0407baSopenharmony_ci	LDO_RATE, BUCK1_RATE2, BUCK2_RATE2, BUCK3_RATE2, BUCK4_RATE2,
4823d0407baSopenharmony_ci	BUCK5_RATE2, BUCK6_RATE2, BUCK7_RATE2, BUCK8_RATE2, BUCK9_RATE2,
4833d0407baSopenharmony_ci	BUCK10_RATE2,
4843d0407baSopenharmony_ci	F_MAX_FIELDS
4853d0407baSopenharmony_ci};
4863d0407baSopenharmony_ci
4873d0407baSopenharmony_cistruct rk806_platform_data {
4883d0407baSopenharmony_ci	int low_voltage_threshold;
4893d0407baSopenharmony_ci	int shutdown_voltage_threshold;
4903d0407baSopenharmony_ci	int force_shutdown_enable;
4913d0407baSopenharmony_ci	int shutdown_temperture_threshold;
4923d0407baSopenharmony_ci	int hotdie_temperture_threshold;
4933d0407baSopenharmony_ci};
4943d0407baSopenharmony_ci
4953d0407baSopenharmony_cistruct rk806_pin_info {
4963d0407baSopenharmony_ci	struct pinctrl *p;
4973d0407baSopenharmony_ci	struct pinctrl_state *default_st;
4983d0407baSopenharmony_ci	struct pinctrl_state *power_off;
4993d0407baSopenharmony_ci	struct pinctrl_state *reset;
5003d0407baSopenharmony_ci	struct pinctrl_state *sleep;
5013d0407baSopenharmony_ci	struct pinctrl_state *dvs;
5023d0407baSopenharmony_ci};
5033d0407baSopenharmony_ci
5043d0407baSopenharmony_ci/*
5053d0407baSopenharmony_ci * struct rk806 - state holder for the rk806 driver
5063d0407baSopenharmony_ci *
5073d0407baSopenharmony_ci * Device data may be used to access the rk806 chip
5083d0407baSopenharmony_ci */
5093d0407baSopenharmony_cistruct rk806 {
5103d0407baSopenharmony_ci	struct device *dev;
5113d0407baSopenharmony_ci	struct regmap *regmap;
5123d0407baSopenharmony_ci	struct regmap_field *rmap_fields[F_MAX_FIELDS];
5133d0407baSopenharmony_ci	/* IRQ Data */
5143d0407baSopenharmony_ci	int irq;
5153d0407baSopenharmony_ci	struct regmap_irq_chip_data *irq_data;
5163d0407baSopenharmony_ci	struct rk806_platform_data *pdata;
5173d0407baSopenharmony_ci	struct rk806_pin_info *pins;
5183d0407baSopenharmony_ci	int vb_lo_irq;
5193d0407baSopenharmony_ci};
5203d0407baSopenharmony_ci
5213d0407baSopenharmony_ciextern const struct regmap_config rk806_regmap_config_spi;
5223d0407baSopenharmony_ciint rk806_device_init(struct rk806 *rk806);
5233d0407baSopenharmony_ciint rk806_device_exit(struct rk806 *rk806);
5243d0407baSopenharmony_ciint rk806_field_write(struct rk806 *rk806,
5253d0407baSopenharmony_ci		      enum rk806_fields field_id,
5263d0407baSopenharmony_ci		      unsigned int val);
5273d0407baSopenharmony_ciint rk806_field_read(struct rk806 *rk806,
5283d0407baSopenharmony_ci		     enum rk806_fields field_id);
5293d0407baSopenharmony_ci#endif /* __LINUX_REGULATOR_RK806_H */
530