Quellcodebibliothek Statistik Leitseite products/sources/formale Sprachen/C/Linux/include/linux/mfd/   (Open Source Betriebssystem Version 6.17.9©)  Datei vom 24.10.2025 mit Größe 37 kB image not shown  

Quelle  rk808.h   Sprache: C

 
/* SPDX-License-Identifier: GPL-2.0-only */
/*
 * Register definitions for Rockchip's RK808/RK818 PMIC
 *
 * Copyright (c) 2014, Fuzhou Rockchip Electronics Co., Ltd
 *
 * Author: Chris Zhong <zyw@rock-chips.com>
 * Author: Zhang Qing <zhangqing@rock-chips.com>
 *
 * Copyright (C) 2016 PHYTEC Messtechnik GmbH
 *
 * Author: Wadim Egorov <w.egorov@phytec.de>
 */


#ifndef __LINUX_REGULATOR_RK808_H
#define __LINUX_REGULATOR_RK808_H

#include <linux/regulator/machine.h>
#include <linux/regmap.h>

/*
 * rk808 Global Register Map.
 */


#define RK808_DCDC1 0 /* (0+RK808_START) */
#define RK808_LDO1 4 /* (4+RK808_START) */
#define RK808_NUM_REGULATORS 14

enum rk808_reg {
 RK808_ID_DCDC1,
 RK808_ID_DCDC2,
 RK808_ID_DCDC3,
 RK808_ID_DCDC4,
 RK808_ID_LDO1,
 RK808_ID_LDO2,
 RK808_ID_LDO3,
 RK808_ID_LDO4,
 RK808_ID_LDO5,
 RK808_ID_LDO6,
 RK808_ID_LDO7,
 RK808_ID_LDO8,
 RK808_ID_SWITCH1,
 RK808_ID_SWITCH2,
};

#define RK808_SECONDS_REG 0x00
#define RK808_MINUTES_REG 0x01
#define RK808_HOURS_REG  0x02
#define RK808_DAYS_REG  0x03
#define RK808_MONTHS_REG 0x04
#define RK808_YEARS_REG  0x05
#define RK808_WEEKS_REG  0x06
#define RK808_ALARM_SECONDS_REG 0x08
#define RK808_ALARM_MINUTES_REG 0x09
#define RK808_ALARM_HOURS_REG 0x0a
#define RK808_ALARM_DAYS_REG 0x0b
#define RK808_ALARM_MONTHS_REG 0x0c
#define RK808_ALARM_YEARS_REG 0x0d
#define RK808_RTC_CTRL_REG 0x10
#define RK808_RTC_STATUS_REG 0x11
#define RK808_RTC_INT_REG 0x12
#define RK808_RTC_COMP_LSB_REG 0x13
#define RK808_RTC_COMP_MSB_REG 0x14
#define RK808_ID_MSB  0x17
#define RK808_ID_LSB  0x18
#define RK808_CLK32OUT_REG 0x20
#define RK808_VB_MON_REG 0x21
#define RK808_THERMAL_REG 0x22
#define RK808_DCDC_EN_REG 0x23
#define RK808_LDO_EN_REG 0x24
#define RK808_SLEEP_SET_OFF_REG1 0x25
#define RK808_SLEEP_SET_OFF_REG2 0x26
#define RK808_DCDC_UV_STS_REG 0x27
#define RK808_DCDC_UV_ACT_REG 0x28
#define RK808_LDO_UV_STS_REG 0x29
#define RK808_LDO_UV_ACT_REG 0x2a
#define RK808_DCDC_PG_REG 0x2b
#define RK808_LDO_PG_REG 0x2c
#define RK808_VOUT_MON_TDB_REG 0x2d
#define RK808_BUCK1_CONFIG_REG  0x2e
#define RK808_BUCK1_ON_VSEL_REG  0x2f
#define RK808_BUCK1_SLP_VSEL_REG 0x30
#define RK808_BUCK1_DVS_VSEL_REG 0x31
#define RK808_BUCK2_CONFIG_REG  0x32
#define RK808_BUCK2_ON_VSEL_REG  0x33
#define RK808_BUCK2_SLP_VSEL_REG 0x34
#define RK808_BUCK2_DVS_VSEL_REG 0x35
#define RK808_BUCK3_CONFIG_REG  0x36
#define RK808_BUCK4_CONFIG_REG  0x37
#define RK808_BUCK4_ON_VSEL_REG  0x38
#define RK808_BUCK4_SLP_VSEL_REG 0x39
#define RK808_BOOST_CONFIG_REG  0x3a
#define RK808_LDO1_ON_VSEL_REG  0x3b
#define RK808_LDO1_SLP_VSEL_REG  0x3c
#define RK808_LDO2_ON_VSEL_REG  0x3d
#define RK808_LDO2_SLP_VSEL_REG  0x3e
#define RK808_LDO3_ON_VSEL_REG  0x3f
#define RK808_LDO3_SLP_VSEL_REG  0x40
#define RK808_LDO4_ON_VSEL_REG  0x41
#define RK808_LDO4_SLP_VSEL_REG  0x42
#define RK808_LDO5_ON_VSEL_REG  0x43
#define RK808_LDO5_SLP_VSEL_REG  0x44
#define RK808_LDO6_ON_VSEL_REG  0x45
#define RK808_LDO6_SLP_VSEL_REG  0x46
#define RK808_LDO7_ON_VSEL_REG  0x47
#define RK808_LDO7_SLP_VSEL_REG  0x48
#define RK808_LDO8_ON_VSEL_REG  0x49
#define RK808_LDO8_SLP_VSEL_REG  0x4a
#define RK808_DEVCTRL_REG 0x4b
#define RK808_INT_STS_REG1 0x4c
#define RK808_INT_STS_MSK_REG1 0x4d
#define RK808_INT_STS_REG2 0x4e
#define RK808_INT_STS_MSK_REG2 0x4f
#define RK808_IO_POL_REG 0x50

/* RK816 */
enum rk816_reg {
 RK816_ID_DCDC1,
 RK816_ID_DCDC2,
 RK816_ID_DCDC3,
 RK816_ID_DCDC4,
 RK816_ID_LDO1,
 RK816_ID_LDO2,
 RK816_ID_LDO3,
 RK816_ID_LDO4,
 RK816_ID_LDO5,
 RK816_ID_LDO6,
 RK816_ID_BOOST,
 RK816_ID_OTG_SW,
};

enum rk816_irqs {
 /* INT_STS_REG1 */
 RK816_IRQ_PWRON_FALL,
 RK816_IRQ_PWRON_RISE,

 /* INT_STS_REG2 */
 RK816_IRQ_VB_LOW,
 RK816_IRQ_PWRON,
 RK816_IRQ_PWRON_LP,
 RK816_IRQ_HOTDIE,
 RK816_IRQ_RTC_ALARM,
 RK816_IRQ_RTC_PERIOD,
 RK816_IRQ_USB_OV,

 /* INT_STS_REG3 */
 RK816_IRQ_PLUG_IN,
 RK816_IRQ_PLUG_OUT,
 RK816_IRQ_CHG_OK,
 RK816_IRQ_CHG_TE,
 RK816_IRQ_CHG_TS,
 RK816_IRQ_CHG_CVTLIM,
 RK816_IRQ_DISCHG_ILIM,
};

/* power channel registers */
#define RK816_DCDC_EN_REG1  0x23

#define RK816_DCDC_EN_REG2  0x24
#define RK816_BOOST_EN   BIT(1)
#define RK816_OTG_EN   BIT(2)
#define RK816_BOOST_EN_MSK  BIT(5)
#define RK816_OTG_EN_MSK  BIT(6)
#define RK816_BUCK_DVS_CONFIRM  BIT(7)

#define RK816_LDO_EN_REG1  0x27

#define RK816_LDO_EN_REG2  0x28

/* interrupt registers and irq definitions */
#define RK816_INT_STS_REG1  0x49
#define RK816_INT_STS_MSK_REG1  0x4a
#define RK816_INT_STS_PWRON_FALL BIT(5)
#define RK816_INT_STS_PWRON_RISE BIT(6)

#define RK816_INT_STS_REG2  0x4c
#define RK816_INT_STS_MSK_REG2  0x4d
#define RK816_INT_STS_VB_LOW  BIT(1)
#define RK816_INT_STS_PWRON  BIT(2)
#define RK816_INT_STS_PWRON_LP  BIT(3)
#define RK816_INT_STS_HOTDIE  BIT(4)
#define RK816_INT_STS_RTC_ALARM  BIT(5)
#define RK816_INT_STS_RTC_PERIOD BIT(6)
#define RK816_INT_STS_USB_OV  BIT(7)

#define RK816_INT_STS_REG3  0x4e
#define RK816_INT_STS_MSK_REG3  0x4f
#define RK816_INT_STS_PLUG_IN  BIT(0)
#define RK816_INT_STS_PLUG_OUT  BIT(1)
#define RK816_INT_STS_CHG_OK  BIT(2)
#define RK816_INT_STS_CHG_TE  BIT(3)
#define RK816_INT_STS_CHG_TS  BIT(4)
#define RK816_INT_STS_CHG_CVTLIM BIT(6)
#define RK816_INT_STS_DISCHG_ILIM BIT(7)

#define RK816_IRQ_STS_OFFSET(x)  ((x) - RK816_INT_STS_REG1)
#define RK816_IRQ_MSK_OFFSET(x)  ((x) - RK816_INT_STS_MSK_REG1)

/* charger, boost and OTG registers */
#define RK816_OTG_BUCK_LDO_CONFIG_REG 0x2a
#define RK816_CHRG_CONFIG_REG  0x2b
#define RK816_BOOST_ON_VESL_REG  0x54
#define RK816_BOOST_SLP_VSEL_REG 0x55
#define RK816_CHRG_BOOST_CONFIG_REG 0x9a
#define RK816_SUP_STS_REG  0xa0
#define RK816_USB_CTRL_REG  0xa1
#define RK816_CHRG_CTRL(x)  (0xa3 + (x))
#define RK816_BAT_CTRL_REG  0xa6
#define RK816_BAT_HTS_TS_REG  0xa8
#define RK816_BAT_LTS_TS_REG  0xa9

/* adc and fuel gauge registers */
#define RK816_TS_CTRL_REG  0xac
#define RK816_ADC_CTRL_REG  0xad
#define RK816_GGCON_REG   0xb0
#define RK816_GGSTS_REG   0xb1
#define RK816_ZERO_CUR_ADC_REGH  0xb2
#define RK816_ZERO_CUR_ADC_REGL  0xb3
#define RK816_GASCNT_CAL_REG(x)  (0xb7 - (x))
#define RK816_GASCNT_REG(x)  (0xbb - (x))
#define RK816_BAT_CUR_AVG_REGH  0xbc
#define RK816_BAT_CUR_AVG_REGL  0xbd
#define RK816_TS_ADC_REGH  0xbe
#define RK816_TS_ADC_REGL  0xbf
#define RK816_USB_ADC_REGH  0xc0
#define RK816_USB_ADC_REGL  0xc1
#define RK816_BAT_OCV_REGH  0xc2
#define RK816_BAT_OCV_REGL  0xc3
#define RK816_BAT_VOL_REGH  0xc4
#define RK816_BAT_VOL_REGL  0xc5
#define RK816_RELAX_ENTRY_THRES_REGH 0xc6
#define RK816_RELAX_ENTRY_THRES_REGL 0xc7
#define RK816_RELAX_EXIT_THRES_REGH 0xc8
#define RK816_RELAX_EXIT_THRES_REGL 0xc9
#define RK816_RELAX_VOL1_REGH  0xca
#define RK816_RELAX_VOL1_REGL  0xcb
#define RK816_RELAX_VOL2_REGH  0xcc
#define RK816_RELAX_VOL2_REGL  0xcd
#define RK816_RELAX_CUR1_REGH  0xce
#define RK816_RELAX_CUR1_REGL  0xcf
#define RK816_RELAX_CUR2_REGH  0xd0
#define RK816_RELAX_CUR2_REGL  0xd1
#define RK816_CAL_OFFSET_REGH  0xd2
#define RK816_CAL_OFFSET_REGL  0xd3
#define RK816_NON_ACT_TIMER_CNT_REG 0xd4
#define RK816_VCALIB0_REGH  0xd5
#define RK816_VCALIB0_REGL  0xd6
#define RK816_VCALIB1_REGH  0xd7
#define RK816_VCALIB1_REGL  0xd8
#define RK816_FCC_GASCNT_REG(x)  (0xdc - (x))
#define RK816_IOFFSET_REGH  0xdd
#define RK816_IOFFSET_REGL  0xde
#define RK816_SLEEP_CON_SAMP_CUR_REG 0xdf

/* general purpose data registers 0xe0 ~ 0xf2 */
#define RK816_DATA_REG(x)  (0xe0 + (x))

/* RK818 */
#define RK818_DCDC1   0
#define RK818_LDO1   4
#define RK818_NUM_REGULATORS  17

enum rk818_reg {
 RK818_ID_DCDC1,
 RK818_ID_DCDC2,
 RK818_ID_DCDC3,
 RK818_ID_DCDC4,
 RK818_ID_BOOST,
 RK818_ID_LDO1,
 RK818_ID_LDO2,
 RK818_ID_LDO3,
 RK818_ID_LDO4,
 RK818_ID_LDO5,
 RK818_ID_LDO6,
 RK818_ID_LDO7,
 RK818_ID_LDO8,
 RK818_ID_LDO9,
 RK818_ID_SWITCH,
 RK818_ID_HDMI_SWITCH,
 RK818_ID_OTG_SWITCH,
};

#define RK818_DCDC_EN_REG  0x23
#define RK818_LDO_EN_REG  0x24
#define RK818_SLEEP_SET_OFF_REG1 0x25
#define RK818_SLEEP_SET_OFF_REG2 0x26
#define RK818_DCDC_UV_STS_REG  0x27
#define RK818_DCDC_UV_ACT_REG  0x28
#define RK818_LDO_UV_STS_REG  0x29
#define RK818_LDO_UV_ACT_REG  0x2a
#define RK818_DCDC_PG_REG  0x2b
#define RK818_LDO_PG_REG  0x2c
#define RK818_VOUT_MON_TDB_REG  0x2d
#define RK818_BUCK1_CONFIG_REG  0x2e
#define RK818_BUCK1_ON_VSEL_REG  0x2f
#define RK818_BUCK1_SLP_VSEL_REG 0x30
#define RK818_BUCK2_CONFIG_REG  0x32
#define RK818_BUCK2_ON_VSEL_REG  0x33
#define RK818_BUCK2_SLP_VSEL_REG 0x34
#define RK818_BUCK3_CONFIG_REG  0x36
#define RK818_BUCK4_CONFIG_REG  0x37
#define RK818_BUCK4_ON_VSEL_REG  0x38
#define RK818_BUCK4_SLP_VSEL_REG 0x39
#define RK818_BOOST_CONFIG_REG  0x3a
#define RK818_LDO1_ON_VSEL_REG  0x3b
#define RK818_LDO1_SLP_VSEL_REG  0x3c
#define RK818_LDO2_ON_VSEL_REG  0x3d
#define RK818_LDO2_SLP_VSEL_REG  0x3e
#define RK818_LDO3_ON_VSEL_REG  0x3f
#define RK818_LDO3_SLP_VSEL_REG  0x40
#define RK818_LDO4_ON_VSEL_REG  0x41
#define RK818_LDO4_SLP_VSEL_REG  0x42
#define RK818_LDO5_ON_VSEL_REG  0x43
#define RK818_LDO5_SLP_VSEL_REG  0x44
#define RK818_LDO6_ON_VSEL_REG  0x45
#define RK818_LDO6_SLP_VSEL_REG  0x46
#define RK818_LDO7_ON_VSEL_REG  0x47
#define RK818_LDO7_SLP_VSEL_REG  0x48
#define RK818_LDO8_ON_VSEL_REG  0x49
#define RK818_LDO8_SLP_VSEL_REG  0x4a
#define RK818_BOOST_LDO9_ON_VSEL_REG 0x54
#define RK818_BOOST_LDO9_SLP_VSEL_REG 0x55
#define RK818_DEVCTRL_REG  0x4b
#define RK818_INT_STS_REG1  0X4c
#define RK818_INT_STS_MSK_REG1  0x4d
#define RK818_INT_STS_REG2  0x4e
#define RK818_INT_STS_MSK_REG2  0x4f
#define RK818_IO_POL_REG  0x50
#define RK818_H5V_EN_REG  0x52
#define RK818_SLEEP_SET_OFF_REG3 0x53
#define RK818_BOOST_LDO9_ON_VSEL_REG 0x54
#define RK818_BOOST_LDO9_SLP_VSEL_REG 0x55
#define RK818_BOOST_CTRL_REG  0x56
#define RK818_DCDC_ILMAX  0x90
#define RK818_USB_CTRL_REG  0xa1

#define RK818_H5V_EN   BIT(0)
#define RK818_REF_RDY_CTRL  BIT(1)
#define RK818_USB_ILIM_SEL_MASK  0xf
#define RK818_USB_ILMIN_2000MA  0x7
#define RK818_USB_CHG_SD_VSEL_MASK 0x70

/* RK805 */
enum rk805_reg {
 RK805_ID_DCDC1,
 RK805_ID_DCDC2,
 RK805_ID_DCDC3,
 RK805_ID_DCDC4,
 RK805_ID_LDO1,
 RK805_ID_LDO2,
 RK805_ID_LDO3,
};

/* CONFIG REGISTER */
#define RK805_VB_MON_REG  0x21
#define RK805_THERMAL_REG  0x22

/* POWER CHANNELS ENABLE REGISTER */
#define RK805_DCDC_EN_REG  0x23
#define RK805_SLP_DCDC_EN_REG  0x25
#define RK805_SLP_LDO_EN_REG  0x26
#define RK805_LDO_EN_REG  0x27

/* BUCK AND LDO CONFIG REGISTER */
#define RK805_BUCK_LDO_SLP_LP_EN_REG 0x2A
#define RK805_BUCK1_CONFIG_REG  0x2E
#define RK805_BUCK1_ON_VSEL_REG  0x2F
#define RK805_BUCK1_SLP_VSEL_REG 0x30
#define RK805_BUCK2_CONFIG_REG  0x32
#define RK805_BUCK2_ON_VSEL_REG  0x33
#define RK805_BUCK2_SLP_VSEL_REG 0x34
#define RK805_BUCK3_CONFIG_REG  0x36
#define RK805_BUCK4_CONFIG_REG  0x37
#define RK805_BUCK4_ON_VSEL_REG  0x38
#define RK805_BUCK4_SLP_VSEL_REG 0x39
#define RK805_LDO1_ON_VSEL_REG  0x3B
#define RK805_LDO1_SLP_VSEL_REG  0x3C
#define RK805_LDO2_ON_VSEL_REG  0x3D
#define RK805_LDO2_SLP_VSEL_REG  0x3E
#define RK805_LDO3_ON_VSEL_REG  0x3F
#define RK805_LDO3_SLP_VSEL_REG  0x40

/* INTERRUPT REGISTER */
#define RK805_PWRON_LP_INT_TIME_REG 0x47
#define RK805_PWRON_DB_REG  0x48
#define RK805_DEV_CTRL_REG  0x4B
#define RK805_INT_STS_REG  0x4C
#define RK805_INT_STS_MSK_REG  0x4D
#define RK805_GPIO_IO_POL_REG  0x50
#define RK805_OUT_REG   0x52
#define RK805_ON_SOURCE_REG  0xAE
#define RK805_OFF_SOURCE_REG  0xAF

#define RK805_NUM_REGULATORS  7

#define RK805_PWRON_FALL_RISE_INT_EN 0x0
#define RK805_PWRON_FALL_RISE_INT_MSK 0x81

/* RK805 IRQ Definitions */
#define RK805_IRQ_PWRON_RISE  0
#define RK805_IRQ_VB_LOW  1
#define RK805_IRQ_PWRON   2
#define RK805_IRQ_PWRON_LP  3
#define RK805_IRQ_HOTDIE  4
#define RK805_IRQ_RTC_ALARM  5
#define RK805_IRQ_RTC_PERIOD  6
#define RK805_IRQ_PWRON_FALL  7

#define RK805_IRQ_PWRON_RISE_MSK BIT(0)
#define RK805_IRQ_VB_LOW_MSK  BIT(1)
#define RK805_IRQ_PWRON_MSK  BIT(2)
#define RK805_IRQ_PWRON_LP_MSK  BIT(3)
#define RK805_IRQ_HOTDIE_MSK  BIT(4)
#define RK805_IRQ_RTC_ALARM_MSK  BIT(5)
#define RK805_IRQ_RTC_PERIOD_MSK BIT(6)
#define RK805_IRQ_PWRON_FALL_MSK BIT(7)

#define RK805_PWR_RISE_INT_STATUS BIT(0)
#define RK805_VB_LOW_INT_STATUS  BIT(1)
#define RK805_PWRON_INT_STATUS  BIT(2)
#define RK805_PWRON_LP_INT_STATUS BIT(3)
#define RK805_HOTDIE_INT_STATUS  BIT(4)
#define RK805_ALARM_INT_STATUS  BIT(5)
#define RK805_PERIOD_INT_STATUS  BIT(6)
#define RK805_PWR_FALL_INT_STATUS BIT(7)

#define RK805_BUCK1_2_ILMAX_MASK (3 << 6)
#define RK805_BUCK3_4_ILMAX_MASK        (3 << 3)
#define RK805_RTC_PERIOD_INT_MASK (1 << 6)
#define RK805_RTC_ALARM_INT_MASK (1 << 5)
#define RK805_INT_ALARM_EN  (1 << 3)
#define RK805_INT_TIMER_EN  (1 << 2)

/* RK806 */
#define RK806_POWER_EN0   0x0
#define RK806_POWER_EN1   0x1
#define RK806_POWER_EN2   0x2
#define RK806_POWER_EN3   0x3
#define RK806_POWER_EN4   0x4
#define RK806_POWER_EN5   0x5
#define RK806_POWER_SLP_EN0  0x6
#define RK806_POWER_SLP_EN1  0x7
#define RK806_POWER_SLP_EN2  0x8
#define RK806_POWER_DISCHRG_EN0  0x9
#define RK806_POWER_DISCHRG_EN1  0xA
#define RK806_POWER_DISCHRG_EN2  0xB
#define RK806_BUCK_FB_CONFIG  0xC
#define RK806_SLP_LP_CONFIG  0xD
#define RK806_POWER_FPWM_EN0  0xE
#define RK806_POWER_FPWM_EN1  0xF
#define RK806_BUCK1_CONFIG  0x10
#define RK806_BUCK2_CONFIG  0x11
#define RK806_BUCK3_CONFIG  0x12
#define RK806_BUCK4_CONFIG  0x13
#define RK806_BUCK5_CONFIG  0x14
#define RK806_BUCK6_CONFIG  0x15
#define RK806_BUCK7_CONFIG  0x16
#define RK806_BUCK8_CONFIG  0x17
#define RK806_BUCK9_CONFIG  0x18
#define RK806_BUCK10_CONFIG  0x19
#define RK806_BUCK1_ON_VSEL  0x1A
#define RK806_BUCK2_ON_VSEL  0x1B
#define RK806_BUCK3_ON_VSEL  0x1C
#define RK806_BUCK4_ON_VSEL  0x1D
#define RK806_BUCK5_ON_VSEL  0x1E
#define RK806_BUCK6_ON_VSEL  0x1F
#define RK806_BUCK7_ON_VSEL  0x20
#define RK806_BUCK8_ON_VSEL  0x21
#define RK806_BUCK9_ON_VSEL  0x22
#define RK806_BUCK10_ON_VSEL  0x23
#define RK806_BUCK1_SLP_VSEL  0x24
#define RK806_BUCK2_SLP_VSEL  0x25
#define RK806_BUCK3_SLP_VSEL  0x26
#define RK806_BUCK4_SLP_VSEL  0x27
#define RK806_BUCK5_SLP_VSEL  0x28
#define RK806_BUCK6_SLP_VSEL  0x29
#define RK806_BUCK7_SLP_VSEL  0x2A
#define RK806_BUCK8_SLP_VSEL  0x2B
#define RK806_BUCK9_SLP_VSEL  0x2D
#define RK806_BUCK10_SLP_VSEL  0x2E
#define RK806_BUCK_DEBUG1  0x30
#define RK806_BUCK_DEBUG2  0x31
#define RK806_BUCK_DEBUG3  0x32
#define RK806_BUCK_DEBUG4  0x33
#define RK806_BUCK_DEBUG5  0x34
#define RK806_BUCK_DEBUG6  0x35
#define RK806_BUCK_DEBUG7  0x36
#define RK806_BUCK_DEBUG8  0x37
#define RK806_BUCK_DEBUG9  0x38
#define RK806_BUCK_DEBUG10  0x39
#define RK806_BUCK_DEBUG11  0x3A
#define RK806_BUCK_DEBUG12  0x3B
#define RK806_BUCK_DEBUG13  0x3C
#define RK806_BUCK_DEBUG14  0x3D
#define RK806_BUCK_DEBUG15  0x3E
#define RK806_BUCK_DEBUG16  0x3F
#define RK806_BUCK_DEBUG17  0x40
#define RK806_BUCK_DEBUG18  0x41
#define RK806_NLDO_IMAX   0x42
#define RK806_NLDO1_ON_VSEL  0x43
#define RK806_NLDO2_ON_VSEL  0x44
#define RK806_NLDO3_ON_VSEL  0x45
#define RK806_NLDO4_ON_VSEL  0x46
#define RK806_NLDO5_ON_VSEL  0x47
#define RK806_NLDO1_SLP_VSEL  0x48
#define RK806_NLDO2_SLP_VSEL  0x49
#define RK806_NLDO3_SLP_VSEL  0x4A
#define RK806_NLDO4_SLP_VSEL  0x4B
#define RK806_NLDO5_SLP_VSEL  0x4C
#define RK806_PLDO_IMAX   0x4D
#define RK806_PLDO1_ON_VSEL  0x4E
#define RK806_PLDO2_ON_VSEL  0x4F
#define RK806_PLDO3_ON_VSEL  0x50
#define RK806_PLDO4_ON_VSEL  0x51
#define RK806_PLDO5_ON_VSEL  0x52
#define RK806_PLDO6_ON_VSEL  0x53
#define RK806_PLDO1_SLP_VSEL  0x54
#define RK806_PLDO2_SLP_VSEL  0x55
#define RK806_PLDO3_SLP_VSEL  0x56
#define RK806_PLDO4_SLP_VSEL  0x57
#define RK806_PLDO5_SLP_VSEL  0x58
#define RK806_PLDO6_SLP_VSEL  0x59
#define RK806_CHIP_NAME   0x5A
#define RK806_CHIP_VER   0x5B
#define RK806_OTP_VER   0x5C
#define RK806_SYS_STS   0x5D
#define RK806_SYS_CFG0   0x5E
#define RK806_SYS_CFG1   0x5F
#define RK806_SYS_OPTION  0x61
#define RK806_SLEEP_CONFIG0  0x62
#define RK806_SLEEP_CONFIG1  0x63
#define RK806_SLEEP_CTR_SEL0  0x64
#define RK806_SLEEP_CTR_SEL1  0x65
#define RK806_SLEEP_CTR_SEL2  0x66
#define RK806_SLEEP_CTR_SEL3  0x67
#define RK806_SLEEP_CTR_SEL4  0x68
#define RK806_SLEEP_CTR_SEL5  0x69
#define RK806_DVS_CTRL_SEL0  0x6A
#define RK806_DVS_CTRL_SEL1  0x6B
#define RK806_DVS_CTRL_SEL2  0x6C
#define RK806_DVS_CTRL_SEL3  0x6D
#define RK806_DVS_CTRL_SEL4  0x6E
#define RK806_DVS_CTRL_SEL5  0x6F
#define RK806_DVS_START_CTRL  0x70
#define RK806_SLEEP_GPIO  0x71
#define RK806_SYS_CFG3   0x72
#define RK806_ON_SOURCE   0x74
#define RK806_OFF_SOURCE  0x75
#define RK806_PWRON_KEY   0x76
#define RK806_INT_STS0   0x77
#define RK806_INT_MSK0   0x78
#define RK806_INT_STS1   0x79
#define RK806_INT_MSK1   0x7A
#define RK806_GPIO_INT_CONFIG  0x7B
#define RK806_DATA_REG0   0x7C
#define RK806_DATA_REG1   0x7D
#define RK806_DATA_REG2   0x7E
#define RK806_DATA_REG3   0x7F
#define RK806_DATA_REG4   0x80
#define RK806_DATA_REG5   0x81
#define RK806_DATA_REG6   0x82
#define RK806_DATA_REG7   0x83
#define RK806_DATA_REG8   0x84
#define RK806_DATA_REG9   0x85
#define RK806_DATA_REG10  0x86
#define RK806_DATA_REG11  0x87
#define RK806_DATA_REG12  0x88
#define RK806_DATA_REG13  0x89
#define RK806_DATA_REG14  0x8A
#define RK806_DATA_REG15  0x8B
#define RK806_TM_REG   0x8C
#define RK806_OTP_EN_REG  0x8D
#define RK806_FUNC_OTP_EN_REG  0x8E
#define RK806_TEST_REG1   0x8F
#define RK806_TEST_REG2   0x90
#define RK806_TEST_REG3   0x91
#define RK806_TEST_REG4   0x92
#define RK806_TEST_REG5   0x93
#define RK806_BUCK_VSEL_OTP_REG0 0x94
#define RK806_BUCK_VSEL_OTP_REG1 0x95
#define RK806_BUCK_VSEL_OTP_REG2 0x96
#define RK806_BUCK_VSEL_OTP_REG3 0x97
#define RK806_BUCK_VSEL_OTP_REG4 0x98
#define RK806_BUCK_VSEL_OTP_REG5 0x99
#define RK806_BUCK_VSEL_OTP_REG6 0x9A
#define RK806_BUCK_VSEL_OTP_REG7 0x9B
#define RK806_BUCK_VSEL_OTP_REG8 0x9C
#define RK806_BUCK_VSEL_OTP_REG9 0x9D
#define RK806_NLDO1_VSEL_OTP_REG0 0x9E
#define RK806_NLDO1_VSEL_OTP_REG1 0x9F
#define RK806_NLDO1_VSEL_OTP_REG2 0xA0
#define RK806_NLDO1_VSEL_OTP_REG3 0xA1
#define RK806_NLDO1_VSEL_OTP_REG4 0xA2
#define RK806_PLDO_VSEL_OTP_REG0 0xA3
#define RK806_PLDO_VSEL_OTP_REG1 0xA4
#define RK806_PLDO_VSEL_OTP_REG2 0xA5
#define RK806_PLDO_VSEL_OTP_REG3 0xA6
#define RK806_PLDO_VSEL_OTP_REG4 0xA7
#define RK806_PLDO_VSEL_OTP_REG5 0xA8
#define RK806_BUCK_EN_OTP_REG1  0xA9
#define RK806_NLDO_EN_OTP_REG1  0xAA
#define RK806_PLDO_EN_OTP_REG1  0xAB
#define RK806_BUCK_FB_RES_OTP_REG1 0xAC
#define RK806_OTP_RESEV_REG0  0xAD
#define RK806_OTP_RESEV_REG1  0xAE
#define RK806_OTP_RESEV_REG2  0xAF
#define RK806_OTP_RESEV_REG3  0xB0
#define RK806_OTP_RESEV_REG4  0xB1
#define RK806_BUCK_SEQ_REG0  0xB2
#define RK806_BUCK_SEQ_REG1  0xB3
#define RK806_BUCK_SEQ_REG2  0xB4
#define RK806_BUCK_SEQ_REG3  0xB5
#define RK806_BUCK_SEQ_REG4  0xB6
#define RK806_BUCK_SEQ_REG5  0xB7
#define RK806_BUCK_SEQ_REG6  0xB8
#define RK806_BUCK_SEQ_REG7  0xB9
#define RK806_BUCK_SEQ_REG8  0xBA
#define RK806_BUCK_SEQ_REG9  0xBB
#define RK806_BUCK_SEQ_REG10  0xBC
#define RK806_BUCK_SEQ_REG11  0xBD
#define RK806_BUCK_SEQ_REG12  0xBE
#define RK806_BUCK_SEQ_REG13  0xBF
#define RK806_BUCK_SEQ_REG14  0xC0
#define RK806_BUCK_SEQ_REG15  0xC1
#define RK806_BUCK_SEQ_REG16  0xC2
#define RK806_BUCK_SEQ_REG17  0xC3
#define RK806_HK_TRIM_REG1  0xC4
#define RK806_HK_TRIM_REG2  0xC5
#define RK806_BUCK_REF_TRIM_REG1 0xC6
#define RK806_BUCK_REF_TRIM_REG2 0xC7
#define RK806_BUCK_REF_TRIM_REG3 0xC8
#define RK806_BUCK_REF_TRIM_REG4 0xC9
#define RK806_BUCK_REF_TRIM_REG5 0xCA
#define RK806_BUCK_OSC_TRIM_REG1 0xCB
#define RK806_BUCK_OSC_TRIM_REG2 0xCC
#define RK806_BUCK_OSC_TRIM_REG3 0xCD
#define RK806_BUCK_OSC_TRIM_REG4 0xCE
#define RK806_BUCK_OSC_TRIM_REG5 0xCF
#define RK806_BUCK_TRIM_ZCDIOS_REG1 0xD0
#define RK806_BUCK_TRIM_ZCDIOS_REG2 0xD1
#define RK806_NLDO_TRIM_REG1  0xD2
#define RK806_NLDO_TRIM_REG2  0xD3
#define RK806_NLDO_TRIM_REG3  0xD4
#define RK806_PLDO_TRIM_REG1  0xD5
#define RK806_PLDO_TRIM_REG2  0xD6
#define RK806_PLDO_TRIM_REG3  0xD7
#define RK806_TRIM_ICOMP_REG1  0xD8
#define RK806_TRIM_ICOMP_REG2  0xD9
#define RK806_EFUSE_CONTROL_REGH 0xDA
#define RK806_FUSE_PROG_REG  0xDB
#define RK806_MAIN_FSM_STS_REG  0xDD
#define RK806_FSM_REG   0xDE
#define RK806_TOP_RESEV_OFFR  0xEC
#define RK806_TOP_RESEV_POR  0xED
#define RK806_BUCK_VRSN_REG1  0xEE
#define RK806_BUCK_VRSN_REG2  0xEF
#define RK806_NLDO_RLOAD_SEL_REG1 0xF0
#define RK806_PLDO_RLOAD_SEL_REG1 0xF1
#define RK806_PLDO_RLOAD_SEL_REG2 0xF2
#define RK806_BUCK_CMIN_MX_REG1  0xF3
#define RK806_BUCK_CMIN_MX_REG2  0xF4
#define RK806_BUCK_FREQ_SET_REG1 0xF5
#define RK806_BUCK_FREQ_SET_REG2 0xF6
#define RK806_BUCK_RS_MEABS_REG1 0xF7
#define RK806_BUCK_RS_MEABS_REG2 0xF8
#define RK806_BUCK_RS_ZDLEB_REG1 0xF9
#define RK806_BUCK_RS_ZDLEB_REG2 0xFA
#define RK806_BUCK_RSERVE_REG1  0xFB
#define RK806_BUCK_RSERVE_REG2  0xFC
#define RK806_BUCK_RSERVE_REG3  0xFD
#define RK806_BUCK_RSERVE_REG4  0xFE
#define RK806_BUCK_RSERVE_REG5  0xFF

/* INT_STS Register field definitions */
#define RK806_INT_STS_PWRON_FALL BIT(0)
#define RK806_INT_STS_PWRON_RISE BIT(1)
#define RK806_INT_STS_PWRON  BIT(2)
#define RK806_INT_STS_PWRON_LP  BIT(3)
#define RK806_INT_STS_HOTDIE  BIT(4)
#define RK806_INT_STS_VDC_RISE  BIT(5)
#define RK806_INT_STS_VDC_FALL  BIT(6)
#define RK806_INT_STS_VB_LO  BIT(7)
#define RK806_INT_STS_REV0  BIT(0)
#define RK806_INT_STS_REV1  BIT(1)
#define RK806_INT_STS_REV2  BIT(2)
#define RK806_INT_STS_CRC_ERROR  BIT(3)
#define RK806_INT_STS_SLP3_GPIO  BIT(4)
#define RK806_INT_STS_SLP2_GPIO  BIT(5)
#define RK806_INT_STS_SLP1_GPIO  BIT(6)
#define RK806_INT_STS_WDT  BIT(7)

/* SPI command */
#define RK806_CMD_READ   0
#define RK806_CMD_WRITE   BIT(7)
#define RK806_CMD_CRC_EN  BIT(6)
#define RK806_CMD_CRC_DIS  0
#define RK806_CMD_LEN_MSK  0x0f
#define RK806_REG_H   0x00

#define VERSION_AB  0x01

enum rk806_reg_id {
 RK806_ID_DCDC1 = 0,
 RK806_ID_DCDC2,
 RK806_ID_DCDC3,
 RK806_ID_DCDC4,
 RK806_ID_DCDC5,
 RK806_ID_DCDC6,
 RK806_ID_DCDC7,
 RK806_ID_DCDC8,
 RK806_ID_DCDC9,
 RK806_ID_DCDC10,

 RK806_ID_NLDO1,
 RK806_ID_NLDO2,
 RK806_ID_NLDO3,
 RK806_ID_NLDO4,
 RK806_ID_NLDO5,

 RK806_ID_PLDO1,
 RK806_ID_PLDO2,
 RK806_ID_PLDO3,
 RK806_ID_PLDO4,
 RK806_ID_PLDO5,
 RK806_ID_PLDO6,
 RK806_ID_END,
};

/* Define the RK806 IRQ numbers */
enum rk806_irqs {
 /* INT_STS0 registers */
 RK806_IRQ_PWRON_FALL,
 RK806_IRQ_PWRON_RISE,
 RK806_IRQ_PWRON,
 RK806_IRQ_PWRON_LP,
 RK806_IRQ_HOTDIE,
 RK806_IRQ_VDC_RISE,
 RK806_IRQ_VDC_FALL,
 RK806_IRQ_VB_LO,

 /* INT_STS0 registers */
 RK806_IRQ_REV0,
 RK806_IRQ_REV1,
 RK806_IRQ_REV2,
 RK806_IRQ_CRC_ERROR,
 RK806_IRQ_SLP3_GPIO,
 RK806_IRQ_SLP2_GPIO,
 RK806_IRQ_SLP1_GPIO,
 RK806_IRQ_WDT,
};

/* VCC1 Low Voltage Threshold */
enum rk806_lv_sel {
 VB_LO_SEL_2800,
 VB_LO_SEL_2900,
 VB_LO_SEL_3000,
 VB_LO_SEL_3100,
 VB_LO_SEL_3200,
 VB_LO_SEL_3300,
 VB_LO_SEL_3400,
 VB_LO_SEL_3500,
};

/* System Shutdown Voltage Select */
enum rk806_uv_sel {
 VB_UV_SEL_2700,
 VB_UV_SEL_2800,
 VB_UV_SEL_2900,
 VB_UV_SEL_3000,
 VB_UV_SEL_3100,
 VB_UV_SEL_3200,
 VB_UV_SEL_3300,
 VB_UV_SEL_3400,
};

/* Pin Function */
enum rk806_pwrctrl_fun {
 PWRCTRL_NULL_FUN,
 PWRCTRL_SLP_FUN,
 PWRCTRL_POWOFF_FUN,
 PWRCTRL_RST_FUN,
 PWRCTRL_DVS_FUN,
 PWRCTRL_GPIO_FUN,
};

/* Pin Polarity */
enum rk806_pin_level {
 POL_LOW,
 POL_HIGH,
};

enum rk806_vsel_ctr_sel {
 CTR_BY_NO_EFFECT,
 CTR_BY_PWRCTRL1,
 CTR_BY_PWRCTRL2,
 CTR_BY_PWRCTRL3,
};

enum rk806_dvs_ctr_sel {
 CTR_SEL_NO_EFFECT,
 CTR_SEL_DVS_START1,
 CTR_SEL_DVS_START2,
 CTR_SEL_DVS_START3,
};

enum rk806_pin_dr_sel {
 RK806_PIN_INPUT,
 RK806_PIN_OUTPUT,
};

#define RK806_INT_POL_MSK  BIT(1)
#define RK806_INT_POL_H   BIT(1)
#define RK806_INT_POL_L   0

/* SYS_CFG3 */
#define RK806_RST_FUN_MSK  GENMASK(7, 6)
#define RK806_SLAVE_RESTART_FUN_MSK BIT(1)
#define RK806_SLAVE_RESTART_FUN_EN BIT(1)
#define RK806_SLAVE_RESTART_FUN_OFF 0

#define RK806_SYS_ENB2_2M_MSK  BIT(1)
#define RK806_SYS_ENB2_2M_EN  BIT(1)
#define RK806_SYS_ENB2_2M_OFF  0

enum rk806_int_fun {
 RK806_INT_ONLY,
 RK806_INT_ADN_WKUP,
};

enum rk806_dvs_mode {
 RK806_DVS_NOT_SUPPORT,
 RK806_DVS_START1,
 RK806_DVS_START2,
 RK806_DVS_START3,
 RK806_DVS_PWRCTRL1,
 RK806_DVS_PWRCTRL2,
 RK806_DVS_PWRCTRL3,
 RK806_DVS_START_PWRCTR1,
 RK806_DVS_START_PWRCTR2,
 RK806_DVS_START_PWRCTR3,
 RK806_DVS_END,
};

/* RK808 IRQ Definitions */
#define RK808_IRQ_VOUT_LO 0
#define RK808_IRQ_VB_LO  1
#define RK808_IRQ_PWRON  2
#define RK808_IRQ_PWRON_LP 3
#define RK808_IRQ_HOTDIE 4
#define RK808_IRQ_RTC_ALARM 5
#define RK808_IRQ_RTC_PERIOD 6
#define RK808_IRQ_PLUG_IN_INT 7
#define RK808_IRQ_PLUG_OUT_INT 8
#define RK808_NUM_IRQ  9

#define RK808_IRQ_VOUT_LO_MSK  BIT(0)
#define RK808_IRQ_VB_LO_MSK  BIT(1)
#define RK808_IRQ_PWRON_MSK  BIT(2)
#define RK808_IRQ_PWRON_LP_MSK  BIT(3)
#define RK808_IRQ_HOTDIE_MSK  BIT(4)
#define RK808_IRQ_RTC_ALARM_MSK  BIT(5)
#define RK808_IRQ_RTC_PERIOD_MSK BIT(6)
#define RK808_IRQ_PLUG_IN_INT_MSK BIT(0)
#define RK808_IRQ_PLUG_OUT_INT_MSK BIT(1)

/* RK818 IRQ Definitions */
#define RK818_IRQ_VOUT_LO 0
#define RK818_IRQ_VB_LO  1
#define RK818_IRQ_PWRON  2
#define RK818_IRQ_PWRON_LP 3
#define RK818_IRQ_HOTDIE 4
#define RK818_IRQ_RTC_ALARM 5
#define RK818_IRQ_RTC_PERIOD 6
#define RK818_IRQ_USB_OV 7
#define RK818_IRQ_PLUG_IN 8
#define RK818_IRQ_PLUG_OUT 9
#define RK818_IRQ_CHG_OK 10
#define RK818_IRQ_CHG_TE 11
#define RK818_IRQ_CHG_TS1 12
#define RK818_IRQ_TS2  13
#define RK818_IRQ_CHG_CVTLIM 14
#define RK818_IRQ_DISCHG_ILIM 15

#define RK818_IRQ_VOUT_LO_MSK  BIT(0)
#define RK818_IRQ_VB_LO_MSK  BIT(1)
#define RK818_IRQ_PWRON_MSK  BIT(2)
#define RK818_IRQ_PWRON_LP_MSK  BIT(3)
#define RK818_IRQ_HOTDIE_MSK  BIT(4)
#define RK818_IRQ_RTC_ALARM_MSK  BIT(5)
#define RK818_IRQ_RTC_PERIOD_MSK BIT(6)
#define RK818_IRQ_USB_OV_MSK  BIT(7)
#define RK818_IRQ_PLUG_IN_MSK  BIT(0)
#define RK818_IRQ_PLUG_OUT_MSK  BIT(1)
#define RK818_IRQ_CHG_OK_MSK  BIT(2)
#define RK818_IRQ_CHG_TE_MSK  BIT(3)
#define RK818_IRQ_CHG_TS1_MSK  BIT(4)
#define RK818_IRQ_TS2_MSK  BIT(5)
#define RK818_IRQ_CHG_CVTLIM_MSK BIT(6)
#define RK818_IRQ_DISCHG_ILIM_MSK BIT(7)

#define RK818_NUM_IRQ  16

#define RK808_VBAT_LOW_2V8 0x00
#define RK808_VBAT_LOW_2V9 0x01
#define RK808_VBAT_LOW_3V0 0x02
#define RK808_VBAT_LOW_3V1 0x03
#define RK808_VBAT_LOW_3V2 0x04
#define RK808_VBAT_LOW_3V3 0x05
#define RK808_VBAT_LOW_3V4 0x06
#define RK808_VBAT_LOW_3V5 0x07
#define VBAT_LOW_VOL_MASK (0x07 << 0)
#define EN_VABT_LOW_SHUT_DOWN (0x00 << 4)
#define EN_VBAT_LOW_IRQ  (0x1 << 4)
#define VBAT_LOW_ACT_MASK (0x1 << 4)

#define BUCK_ILMIN_MASK  (7 << 0)
#define BOOST_ILMIN_MASK (7 << 0)
#define BUCK1_RATE_MASK  (3 << 3)
#define BUCK2_RATE_MASK  (3 << 3)
#define MASK_ALL 0xff

#define BUCK_UV_ACT_MASK 0x0f
#define BUCK_UV_ACT_DISABLE 0

#define SWITCH2_EN BIT(6)
#define SWITCH1_EN BIT(5)
#define DEV_OFF_RST BIT(3)
#define DEV_RST  BIT(2)
#define DEV_OFF  BIT(0)
#define RTC_STOP BIT(0)

#define VB_LO_ACT  BIT(4)
#define VB_LO_SEL_3500MV (7 << 0)

#define VOUT_LO_INT BIT(0)
#define CLK32KOUT2_EN BIT(0)

#define TEMP105C   0x08
#define TEMP115C   0x0c
#define TEMP_HOTDIE_MSK   0x0c
#define SLP_SD_MSK   (0x3 << 2)
#define SHUTDOWN_FUN   (0x2 << 2)
#define SLEEP_FUN   (0x1 << 2)
#define RK8XX_ID_MSK   0xfff0
#define PWM_MODE_MSK   BIT(7)
#define FPWM_MODE   BIT(7)
#define AUTO_PWM_MODE   0

enum rk817_reg_id {
 RK817_ID_DCDC1 = 0,
 RK817_ID_DCDC2,
 RK817_ID_DCDC3,
 RK817_ID_DCDC4,
 RK817_ID_LDO1,
 RK817_ID_LDO2,
 RK817_ID_LDO3,
 RK817_ID_LDO4,
 RK817_ID_LDO5,
 RK817_ID_LDO6,
 RK817_ID_LDO7,
 RK817_ID_LDO8,
 RK817_ID_LDO9,
 RK817_ID_BOOST,
 RK817_ID_BOOST_OTG_SW,
 RK817_NUM_REGULATORS
};

enum rk809_reg_id {
 RK809_ID_DCDC5 = RK817_ID_BOOST,
 RK809_ID_SW1,
 RK809_ID_SW2,
 RK809_NUM_REGULATORS
};

#define RK817_SECONDS_REG  0x00
#define RK817_MINUTES_REG  0x01
#define RK817_HOURS_REG   0x02
#define RK817_DAYS_REG   0x03
#define RK817_MONTHS_REG  0x04
#define RK817_YEARS_REG   0x05
#define RK817_WEEKS_REG   0x06
#define RK817_ALARM_SECONDS_REG  0x07
#define RK817_ALARM_MINUTES_REG  0x08
#define RK817_ALARM_HOURS_REG  0x09
#define RK817_ALARM_DAYS_REG  0x0a
#define RK817_ALARM_MONTHS_REG  0x0b
#define RK817_ALARM_YEARS_REG  0x0c
#define RK817_RTC_CTRL_REG  0xd
#define RK817_RTC_STATUS_REG  0xe
#define RK817_RTC_INT_REG  0xf
#define RK817_RTC_COMP_LSB_REG  0x10
#define RK817_RTC_COMP_MSB_REG  0x11

/* RK817 Codec Registers */
#define RK817_CODEC_DTOP_VUCTL  0x12
#define RK817_CODEC_DTOP_VUCTIME 0x13
#define RK817_CODEC_DTOP_LPT_SRST 0x14
#define RK817_CODEC_DTOP_DIGEN_CLKE 0x15
#define RK817_CODEC_AREF_RTCFG0  0x16
#define RK817_CODEC_AREF_RTCFG1  0x17
#define RK817_CODEC_AADC_CFG0  0x18
#define RK817_CODEC_AADC_CFG1  0x19
#define RK817_CODEC_DADC_VOLL  0x1a
#define RK817_CODEC_DADC_VOLR  0x1b
#define RK817_CODEC_DADC_SR_ACL0 0x1e
#define RK817_CODEC_DADC_ALC1  0x1f
#define RK817_CODEC_DADC_ALC2  0x20
#define RK817_CODEC_DADC_NG  0x21
#define RK817_CODEC_DADC_HPF  0x22
#define RK817_CODEC_DADC_RVOLL  0x23
#define RK817_CODEC_DADC_RVOLR  0x24
#define RK817_CODEC_AMIC_CFG0  0x27
#define RK817_CODEC_AMIC_CFG1  0x28
#define RK817_CODEC_DMIC_PGA_GAIN 0x29
#define RK817_CODEC_DMIC_LMT1  0x2a
#define RK817_CODEC_DMIC_LMT2  0x2b
#define RK817_CODEC_DMIC_NG1  0x2c
#define RK817_CODEC_DMIC_NG2  0x2d
#define RK817_CODEC_ADAC_CFG0  0x2e
#define RK817_CODEC_ADAC_CFG1  0x2f
#define RK817_CODEC_DDAC_POPD_DACST 0x30
#define RK817_CODEC_DDAC_VOLL  0x31
#define RK817_CODEC_DDAC_VOLR  0x32
#define RK817_CODEC_DDAC_SR_LMT0 0x35
#define RK817_CODEC_DDAC_LMT1  0x36
#define RK817_CODEC_DDAC_LMT2  0x37
#define RK817_CODEC_DDAC_MUTE_MIXCTL 0x38
#define RK817_CODEC_DDAC_RVOLL  0x39
#define RK817_CODEC_DDAC_RVOLR  0x3a
#define RK817_CODEC_AHP_ANTI0  0x3b
#define RK817_CODEC_AHP_ANTI1  0x3c
#define RK817_CODEC_AHP_CFG0  0x3d
#define RK817_CODEC_AHP_CFG1  0x3e
#define RK817_CODEC_AHP_CP  0x3f
#define RK817_CODEC_ACLASSD_CFG1 0x40
#define RK817_CODEC_ACLASSD_CFG2 0x41
#define RK817_CODEC_APLL_CFG0  0x42
#define RK817_CODEC_APLL_CFG1  0x43
#define RK817_CODEC_APLL_CFG2  0x44
#define RK817_CODEC_APLL_CFG3  0x45
#define RK817_CODEC_APLL_CFG4  0x46
#define RK817_CODEC_APLL_CFG5  0x47
#define RK817_CODEC_DI2S_CKM  0x48
#define RK817_CODEC_DI2S_RSD  0x49
#define RK817_CODEC_DI2S_RXCR1  0x4a
#define RK817_CODEC_DI2S_RXCR2  0x4b
#define RK817_CODEC_DI2S_RXCMD_TSD 0x4c
#define RK817_CODEC_DI2S_TXCR1  0x4d
#define RK817_CODEC_DI2S_TXCR2  0x4e
#define RK817_CODEC_DI2S_TXCR3_TXCMD 0x4f

/* RK817_CODEC_DI2S_CKM */
#define RK817_I2S_MODE_MASK  (0x1 << 0)
#define RK817_I2S_MODE_MST  (0x1 << 0)
#define RK817_I2S_MODE_SLV  (0x0 << 0)

/* RK817_CODEC_DDAC_MUTE_MIXCTL */
#define DACMT_MASK   (0x1 << 0)
#define DACMT_ENABLE   (0x1 << 0)
#define DACMT_DISABLE   (0x0 << 0)

/* RK817_CODEC_DI2S_RXCR2 */
#define VDW_RX_24BITS   (0x17)
#define VDW_RX_16BITS   (0x0f)

/* RK817_CODEC_DI2S_TXCR2 */
#define VDW_TX_24BITS   (0x17)
#define VDW_TX_16BITS   (0x0f)

/* RK817_CODEC_AMIC_CFG0 */
#define MIC_DIFF_MASK   (0x1 << 7)
#define MIC_DIFF_DIS   (0x0 << 7)
#define MIC_DIFF_EN   (0x1 << 7)

/* RK817 Battery Registers */
#define RK817_GAS_GAUGE_ADC_CONFIG0 0x50
#define RK817_GG_EN   (0x1 << 7)
#define RK817_SYS_VOL_ADC_EN  (0x1 << 6)
#define RK817_TS_ADC_EN   (0x1 << 5)
#define RK817_USB_VOL_ADC_EN  (0x1 << 4)
#define RK817_BAT_VOL_ADC_EN  (0x1 << 3)
#define RK817_BAT_CUR_ADC_EN  (0x1 << 2)

#define RK817_GAS_GAUGE_ADC_CONFIG1 0x55

#define RK817_VOL_CUR_CALIB_UPD  BIT(7)

#define RK817_GAS_GAUGE_GG_CON  0x56
#define RK817_GAS_GAUGE_GG_STS  0x57

#define RK817_BAT_CON   (0x1 << 4)
#define RK817_RELAX_VOL_UPD  (0x3 << 2)
#define RK817_RELAX_STS   (0x1 << 1)

#define RK817_GAS_GAUGE_RELAX_THRE_H 0x58
#define RK817_GAS_GAUGE_RELAX_THRE_L 0x59
#define RK817_GAS_GAUGE_OCV_THRE_VOL 0x62
#define RK817_GAS_GAUGE_OCV_VOL_H 0x63
#define RK817_GAS_GAUGE_OCV_VOL_L 0x64
#define RK817_GAS_GAUGE_PWRON_VOL_H 0x6b
#define RK817_GAS_GAUGE_PWRON_VOL_L 0x6c
#define RK817_GAS_GAUGE_PWRON_CUR_H 0x6d
#define RK817_GAS_GAUGE_PWRON_CUR_L 0x6e
#define RK817_GAS_GAUGE_OFF_CNT  0x6f
#define RK817_GAS_GAUGE_Q_INIT_H3 0x70
#define RK817_GAS_GAUGE_Q_INIT_H2 0x71
#define RK817_GAS_GAUGE_Q_INIT_L1 0x72
#define RK817_GAS_GAUGE_Q_INIT_L0 0x73
#define RK817_GAS_GAUGE_Q_PRES_H3 0x74
#define RK817_GAS_GAUGE_Q_PRES_H2 0x75
#define RK817_GAS_GAUGE_Q_PRES_L1 0x76
#define RK817_GAS_GAUGE_Q_PRES_L0 0x77
#define RK817_GAS_GAUGE_BAT_VOL_H 0x78
#define RK817_GAS_GAUGE_BAT_VOL_L 0x79
#define RK817_GAS_GAUGE_BAT_CUR_H 0x7a
#define RK817_GAS_GAUGE_BAT_CUR_L 0x7b
#define RK817_GAS_GAUGE_USB_VOL_H 0x7e
#define RK817_GAS_GAUGE_USB_VOL_L 0x7f
#define RK817_GAS_GAUGE_SYS_VOL_H 0x80
#define RK817_GAS_GAUGE_SYS_VOL_L 0x81
#define RK817_GAS_GAUGE_Q_MAX_H3 0x82
#define RK817_GAS_GAUGE_Q_MAX_H2 0x83
#define RK817_GAS_GAUGE_Q_MAX_L1 0x84
#define RK817_GAS_GAUGE_Q_MAX_L0 0x85
#define RK817_GAS_GAUGE_SLEEP_CON_SAMP_CUR_H 0x8f
#define RK817_GAS_GAUGE_SLEEP_CON_SAMP_CUR_L 0x90
#define RK817_GAS_GAUGE_CAL_OFFSET_H 0x91
#define RK817_GAS_GAUGE_CAL_OFFSET_L 0x92
#define RK817_GAS_GAUGE_VCALIB0_H 0x93
#define RK817_GAS_GAUGE_VCALIB0_L 0x94
#define RK817_GAS_GAUGE_VCALIB1_H 0x95
#define RK817_GAS_GAUGE_VCALIB1_L 0x96
#define RK817_GAS_GAUGE_IOFFSET_H 0x97
#define RK817_GAS_GAUGE_IOFFSET_L 0x98
#define RK817_GAS_GAUGE_BAT_R1  0x9a
#define RK817_GAS_GAUGE_BAT_R2  0x9b
#define RK817_GAS_GAUGE_BAT_R3  0x9c
#define RK817_GAS_GAUGE_DATA0  0x9d
#define RK817_GAS_GAUGE_DATA1  0x9e
#define RK817_GAS_GAUGE_DATA2  0x9f
#define RK817_GAS_GAUGE_DATA3  0xa0
#define RK817_GAS_GAUGE_DATA4  0xa1
#define RK817_GAS_GAUGE_DATA5  0xa2
#define RK817_GAS_GAUGE_CUR_ADC_K0 0xb0

#define RK817_POWER_EN_REG(i)  (0xb1 + (i))
#define RK817_POWER_SLP_EN_REG(i) (0xb5 + (i))

#define RK817_POWER_CONFIG  (0xb9)

#define RK817_BUCK_CONFIG_REG(i) (0xba + (i) * 3)

#define RK817_BUCK1_ON_VSEL_REG  0xBB
#define RK817_BUCK1_SLP_VSEL_REG 0xBC

#define RK817_BUCK2_CONFIG_REG  0xBD
#define RK817_BUCK2_ON_VSEL_REG  0xBE
#define RK817_BUCK2_SLP_VSEL_REG 0xBF

#define RK817_BUCK3_CONFIG_REG  0xC0
#define RK817_BUCK3_ON_VSEL_REG  0xC1
#define RK817_BUCK3_SLP_VSEL_REG 0xC2

#define RK817_BUCK4_CONFIG_REG  0xC3
#define RK817_BUCK4_ON_VSEL_REG  0xC4
#define RK817_BUCK4_SLP_VSEL_REG 0xC5

#define RK817_LDO_ON_VSEL_REG(idx) (0xcc + (idx) * 2)
#define RK817_BOOST_OTG_CFG  (0xde)

#define RK817_PMIC_CHRG_OUT  0xe4
#define RK817_CHRG_VOL_SEL  (0x07 << 4)
#define RK817_CHRG_CUR_SEL  (0x07 << 0)

#define RK817_PMIC_CHRG_IN  0xe5
#define RK817_USB_VLIM_EN  (0x01 << 7)
#define RK817_USB_VLIM_SEL  (0x07 << 4)
#define RK817_USB_ILIM_EN  (0x01 << 3)
#define RK817_USB_ILIM_SEL  (0x07 << 0)
#define RK817_PMIC_CHRG_TERM  0xe6
#define RK817_CHRG_TERM_ANA_DIG  (0x01 << 2)
#define RK817_CHRG_TERM_ANA_SEL  (0x03 << 0)
#define RK817_CHRG_EN   (0x01 << 6)

#define RK817_PMIC_CHRG_STS  0xeb
#define RK817_BAT_EXS   BIT(7)
#define RK817_CHG_STS   (0x07 << 4)

#define RK817_ID_MSB   0xed
#define RK817_ID_LSB   0xee

#define RK817_SYS_STS   0xf0
#define RK817_PLUG_IN_STS  (0x1 << 6)

#define RK817_SYS_CFG(i)  (0xf1 + (i))

#define RK817_ON_SOURCE_REG  0xf5
#define RK817_OFF_SOURCE_REG  0xf6

/* INTERRUPT REGISTER */
#define RK817_INT_STS_REG0  0xf8
#define RK817_INT_STS_MSK_REG0  0xf9
#define RK817_INT_STS_REG1  0xfa
#define RK817_INT_STS_MSK_REG1  0xfb
#define RK817_INT_STS_REG2  0xfc
#define RK817_INT_STS_MSK_REG2  0xfd
#define RK817_GPIO_INT_CFG  0xfe

/* IRQ Definitions */
#define RK817_IRQ_PWRON_FALL  0
#define RK817_IRQ_PWRON_RISE  1
#define RK817_IRQ_PWRON   2
#define RK817_IRQ_PWMON_LP  3
#define RK817_IRQ_HOTDIE  4
#define RK817_IRQ_RTC_ALARM  5
#define RK817_IRQ_RTC_PERIOD  6
#define RK817_IRQ_VB_LO   7
#define RK817_IRQ_PLUG_IN  8
#define RK817_IRQ_PLUG_OUT  9
#define RK817_IRQ_CHRG_TERM  10
#define RK817_IRQ_CHRG_TIME  11
#define RK817_IRQ_CHRG_TS  12
#define RK817_IRQ_USB_OV  13
#define RK817_IRQ_CHRG_IN_CLMP  14
#define RK817_IRQ_BAT_DIS_ILIM  15
#define RK817_IRQ_GATE_GPIO  16
#define RK817_IRQ_TS_GPIO  17
#define RK817_IRQ_CODEC_PD  18
#define RK817_IRQ_CODEC_PO  19
#define RK817_IRQ_CLASSD_MUTE_DONE 20
#define RK817_IRQ_CLASSD_OCP  21
#define RK817_IRQ_BAT_OVP               22
#define RK817_IRQ_CHRG_BAT_HI  23
#define RK817_IRQ_END   (RK817_IRQ_CHRG_BAT_HI + 1)

/*
 * rtc_ctrl 0xd
 * same as 808, except bit4
 */

#define RK817_RTC_CTRL_RSV4  BIT(4)

/* power config 0xb9 */
#define RK817_BUCK3_FB_RES_MSK  BIT(6)
#define RK817_BUCK3_FB_RES_INTER BIT(6)
#define RK817_BUCK3_FB_RES_EXT  0

/* buck config 0xba */
#define RK817_RAMP_RATE_OFFSET  6
#define RK817_RAMP_RATE_MASK  (0x3 << RK817_RAMP_RATE_OFFSET)
#define RK817_RAMP_RATE_3MV_PER_US (0x0 << RK817_RAMP_RATE_OFFSET)
#define RK817_RAMP_RATE_6_3MV_PER_US (0x1 << RK817_RAMP_RATE_OFFSET)
#define RK817_RAMP_RATE_12_5MV_PER_US (0x2 << RK817_RAMP_RATE_OFFSET)
#define RK817_RAMP_RATE_25MV_PER_US (0x3 << RK817_RAMP_RATE_OFFSET)

/* sys_cfg1 0xf2 */
#define RK817_HOTDIE_TEMP_MSK  (0x3 << 4)
#define RK817_HOTDIE_85   (0x0 << 4)
#define RK817_HOTDIE_95   (0x1 << 4)
#define RK817_HOTDIE_105  (0x2 << 4)
#define RK817_HOTDIE_115  (0x3 << 4)

#define RK817_TSD_TEMP_MSK  BIT(6)
#define RK817_TSD_140   0
#define RK817_TSD_160   BIT(6)

#define RK817_CLK32KOUT2_EN  BIT(7)

/* sys_cfg3 0xf4 */
#define RK817_SLPPIN_FUNC_MSK  (0x3 << 3)
#define SLPPIN_NULL_FUN   (0x0 << 3)
#define SLPPIN_SLP_FUN   (0x1 << 3)
#define SLPPIN_DN_FUN   (0x2 << 3)
#define SLPPIN_RST_FUN   (0x3 << 3)

#define RK817_RST_FUNC_MSK  (0x3 << 6)
#define RK817_RST_FUNC_SFT  (6)
#define RK817_RST_FUNC_CNT  (3)
#define RK817_RST_FUNC_DEV  (0) /* reset the dev */
#define RK817_RST_FUNC_REG  (0x1 << 6) /* reset the reg only */

#define RK817_SLPPOL_MSK  BIT(5)
#define RK817_SLPPOL_H   BIT(5)
#define RK817_SLPPOL_L   (0)

/* gpio&int 0xfe */
#define RK817_INT_POL_MSK  BIT(1)
#define RK817_INT_POL_H   BIT(1)
#define RK817_INT_POL_L   0
#define RK809_BUCK5_CONFIG(i)  (RK817_BOOST_OTG_CFG + (i) * 1)

enum {
 BUCK_ILMIN_50MA,
 BUCK_ILMIN_100MA,
 BUCK_ILMIN_150MA,
 BUCK_ILMIN_200MA,
 BUCK_ILMIN_250MA,
 BUCK_ILMIN_300MA,
 BUCK_ILMIN_350MA,
 BUCK_ILMIN_400MA,
};

enum {
 BOOST_ILMIN_75MA,
 BOOST_ILMIN_100MA,
 BOOST_ILMIN_125MA,
 BOOST_ILMIN_150MA,
 BOOST_ILMIN_175MA,
 BOOST_ILMIN_200MA,
 BOOST_ILMIN_225MA,
 BOOST_ILMIN_250MA,
};

enum {
 RK805_BUCK1_2_ILMAX_2500MA,
 RK805_BUCK1_2_ILMAX_3000MA,
 RK805_BUCK1_2_ILMAX_3500MA,
 RK805_BUCK1_2_ILMAX_4000MA,
};

enum {
 RK805_BUCK3_ILMAX_1500MA,
 RK805_BUCK3_ILMAX_2000MA,
 RK805_BUCK3_ILMAX_2500MA,
 RK805_BUCK3_ILMAX_3000MA,
};

enum {
 RK805_BUCK4_ILMAX_2000MA,
 RK805_BUCK4_ILMAX_2500MA,
 RK805_BUCK4_ILMAX_3000MA,
 RK805_BUCK4_ILMAX_3500MA,
};

enum {
 RK805_ID = 0x8050,
 RK806_ID = 0x8060,
 RK808_ID = 0x0000,
 RK809_ID = 0x8090,
 RK816_ID = 0x8160,
 RK817_ID = 0x8170,
 RK818_ID = 0x8180,
};

struct rk808 {
 struct device   *dev;
 struct regmap_irq_chip_data *irq_data;
 struct regmap   *regmap;
 long    variant;
 const struct regmap_config *regmap_cfg;
 const struct regmap_irq_chip *regmap_irq_chip;
};

void rk8xx_shutdown(struct device *dev);
int rk8xx_probe(struct device *dev, int variant, unsigned int irq, struct regmap *regmap);
int rk8xx_suspend(struct device *dev);
int rk8xx_resume(struct device *dev);

#endif /* __LINUX_REGULATOR_RK808_H */

Messung V0.5
C=96 H=100 G=97

¤ Dauer der Verarbeitung: 0.4 Sekunden  (vorverarbeitet)  ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

Beweissystem der NASA

Beweissystem Isabelle

NIST Cobol Testsuite

Cephes Mathematical Library

Wiener Entwicklungsmethode

Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.

Bemerkung:

Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.