/* SPDX-License-Identifier: GPL-2.0 */
/*
 * machine generated DO NOT MODIFY
 * source MW_regmap_082720.csv
 * 2020-09-01
 */

#ifndef MAX77759_A1_REG_H_
#define MAX77759_A1_REG_H_

#include <linux/bits.h>

#define MAX77759_BFF(name, h, l) \
static inline uint8_t _ ## name ## _set(uint8_t r, uint8_t v) \
{ \
	return ((r & ~GENMASK(h, l)) | v << l); \
} \
\
static inline uint8_t _ ## name ## _get(uint8_t r) \
{ \
	return ((r & GENMASK(h, l)) >> l); \
}


#define FIELD2VALUE(field,value) \
	(((value) & field##_MASK) >> field##_SHIFT)
#define VALUE2FIELD(field,       value) \
	(((value) << field##_SHIFT) & field##_MASK)



/* section:  PMIC  */

/*
 * PMIC_ID,0x0,0b00111011,0x3b
 * ID[7:0],,,,,,
 */
#define MAX77759_PMIC_PMIC_ID	0x0

/*
 * PMIC_REVISION,0x1,0b00000010,0x02
 * VER[4:0],,,,,REV[2:0],
 */
#define MAX77759_PMIC_PMIC_REVISION	0x1

#define MAX77759_PMIC_PMIC_REVISION_VER_SHIFT	3
#define MAX77759_PMIC_PMIC_REVISION_VER_MASK	(0x1f << 3)
#define MAX77759_PMIC_PMIC_REVISION_VER_CLEAR	(~(0x1f << 3))
#define MAX77759_PMIC_PMIC_REVISION_REV_SHIFT	0
#define MAX77759_PMIC_PMIC_REVISION_REV_MASK	(0x7 << 0)
#define MAX77759_PMIC_PMIC_REVISION_REV_CLEAR	(~(0x7 << 0))

MAX77759_BFF(pmic_pmic_revision_ver,7,3)
MAX77759_BFF(pmic_pmic_revision_rev,2,0)
static inline const char *
max77759_pmic_pmic_revision_cstr(char *buff, size_t len, int val)
{
#ifdef SCNPRINTF
	int i = 0;

	i += SCNPRINTF(&buff[i], len - i, " VER=%x",
		FIELD2VALUE(MAX77759_PMIC_PMIC_REVISION_VER, val));
	i += SCNPRINTF(&buff[i], len - i, " REV=%x",
		FIELD2VALUE(MAX77759_PMIC_PMIC_REVISION_REV, val));
#else
	buff[0] = 0;
#endif
	return buff;
}

/*
 * OTP_REVISION,0x2,0b00000000,0x00
 * OTP_REV[7:0],,,,,,
 */
#define MAX77759_PMIC_OTP_REVISION	0x2

/*
 * INTSRC,0x22,0b00000000,0x00
 * SPR_7_4[3:0],,,,MAXQ_INT,SPR_3,TOPSYS_INT
 */
#define MAX77759_PMIC_INTSRC	0x22
#define MAX77759_PMIC_INTSRC_MAXQ_INT	(0x1 << 3)
#define MAX77759_PMIC_INTSRC_SPR_3	(0x1 << 2)
#define MAX77759_PMIC_INTSRC_TOPSYS_INT	(0x1 << 1)
#define MAX77759_PMIC_INTSRC_CHGR_INT	(0x1 << 0)

#define MAX77759_PMIC_INTSRC_SPR_7_4_SHIFT	4
#define MAX77759_PMIC_INTSRC_SPR_7_4_MASK	(0xf << 4)
#define MAX77759_PMIC_INTSRC_SPR_7_4_CLEAR	(~(0xf << 4))
#define MAX77759_PMIC_INTSRC_MAXQ_INT_SHIFT	3
#define MAX77759_PMIC_INTSRC_MAXQ_INT_MASK	(0x1 << 3)
#define MAX77759_PMIC_INTSRC_MAXQ_INT_CLEAR	(~(0x1 << 3))
#define MAX77759_PMIC_INTSRC_SPR_3_SHIFT	2
#define MAX77759_PMIC_INTSRC_SPR_3_MASK	(0x1 << 2)
#define MAX77759_PMIC_INTSRC_SPR_3_CLEAR	(~(0x1 << 2))
#define MAX77759_PMIC_INTSRC_TOPSYS_INT_SHIFT	1
#define MAX77759_PMIC_INTSRC_TOPSYS_INT_MASK	(0x1 << 1)
#define MAX77759_PMIC_INTSRC_TOPSYS_INT_CLEAR	(~(0x1 << 1))
#define MAX77759_PMIC_INTSRC_CHGR_INT_SHIFT	0
#define MAX77759_PMIC_INTSRC_CHGR_INT_MASK	(0x1 << 0)
#define MAX77759_PMIC_INTSRC_CHGR_INT_CLEAR	(~(0x1 << 0))

MAX77759_BFF(pmic_intsrc_spr_7_4,7,4)
MAX77759_BFF(pmic_intsrc_maxq_int,3,3)
MAX77759_BFF(pmic_intsrc_spr_3,2,2)
MAX77759_BFF(pmic_intsrc_topsys_int,1,1)
MAX77759_BFF(pmic_intsrc_chgr_int,0,0)
static inline const char *
max77759_pmic_intsrc_cstr(char *buff, size_t len, int val)
{
#ifdef SCNPRINTF
	int i = 0;

	i += SCNPRINTF(&buff[i], len - i, " SPR_7_4=%x",
		FIELD2VALUE(MAX77759_PMIC_INTSRC_SPR_7_4, val));
	i += SCNPRINTF(&buff[i], len - i, " MAXQ_INT=%x",
		FIELD2VALUE(MAX77759_PMIC_INTSRC_MAXQ_INT, val));
	i += SCNPRINTF(&buff[i], len - i, " SPR_3=%x",
		FIELD2VALUE(MAX77759_PMIC_INTSRC_SPR_3, val));
	i += SCNPRINTF(&buff[i], len - i, " TOPSYS_INT=%x",
		FIELD2VALUE(MAX77759_PMIC_INTSRC_TOPSYS_INT, val));
	i += SCNPRINTF(&buff[i], len - i, " CHGR_INT=%x",
		FIELD2VALUE(MAX77759_PMIC_INTSRC_CHGR_INT, val));
#else
	buff[0] = 0;
#endif
	return buff;
}

/*
 * INTSRCMASK,0x23,0b11111111,0xff
 * SPR_7_4[3:0],,,,MAXQ_INT_M,SPR_3,TOPSYS_INT_M
 */
#define MAX77759_PMIC_INTSRCMASK	0x23
#define MAX77759_PMIC_INTSRCMASK_MAXQ_INT_M	(0x1 << 3)
#define MAX77759_PMIC_INTSRCMASK_SPR_3	(0x1 << 2)
#define MAX77759_PMIC_INTSRCMASK_TOPSYS_INT_M	(0x1 << 1)
#define MAX77759_PMIC_INTSRCMASK_CHGR_INT_M	(0x1 << 0)

#define MAX77759_PMIC_INTSRCMASK_SPR_7_4_SHIFT	4
#define MAX77759_PMIC_INTSRCMASK_SPR_7_4_MASK	(0xf << 4)
#define MAX77759_PMIC_INTSRCMASK_SPR_7_4_CLEAR	(~(0xf << 4))
#define MAX77759_PMIC_INTSRCMASK_MAXQ_INT_M_SHIFT	3
#define MAX77759_PMIC_INTSRCMASK_MAXQ_INT_M_MASK	(0x1 << 3)
#define MAX77759_PMIC_INTSRCMASK_MAXQ_INT_M_CLEAR	(~(0x1 << 3))
#define MAX77759_PMIC_INTSRCMASK_SPR_3_SHIFT	2
#define MAX77759_PMIC_INTSRCMASK_SPR_3_MASK	(0x1 << 2)
#define MAX77759_PMIC_INTSRCMASK_SPR_3_CLEAR	(~(0x1 << 2))
#define MAX77759_PMIC_INTSRCMASK_TOPSYS_INT_M_SHIFT	1
#define MAX77759_PMIC_INTSRCMASK_TOPSYS_INT_M_MASK	(0x1 << 1)
#define MAX77759_PMIC_INTSRCMASK_TOPSYS_INT_M_CLEAR	(~(0x1 << 1))
#define MAX77759_PMIC_INTSRCMASK_CHGR_INT_M_SHIFT	0
#define MAX77759_PMIC_INTSRCMASK_CHGR_INT_M_MASK	(0x1 << 0)
#define MAX77759_PMIC_INTSRCMASK_CHGR_INT_M_CLEAR	(~(0x1 << 0))

MAX77759_BFF(pmic_intsrcmask_spr_7_4,7,4)
MAX77759_BFF(pmic_intsrcmask_maxq_int_m,3,3)
MAX77759_BFF(pmic_intsrcmask_spr_3,2,2)
MAX77759_BFF(pmic_intsrcmask_topsys_int_m,1,1)
MAX77759_BFF(pmic_intsrcmask_chgr_int_m,0,0)
static inline const char *
max77759_pmic_intsrcmask_cstr(char *buff, size_t len, int val)
{
#ifdef SCNPRINTF
	int i = 0;

	i += SCNPRINTF(&buff[i], len - i, " SPR_7_4=%x",
		FIELD2VALUE(MAX77759_PMIC_INTSRCMASK_SPR_7_4, val));
	i += SCNPRINTF(&buff[i], len - i, " MAXQ_INT_M=%x",
		FIELD2VALUE(MAX77759_PMIC_INTSRCMASK_MAXQ_INT_M, val));
	i += SCNPRINTF(&buff[i], len - i, " SPR_3=%x",
		FIELD2VALUE(MAX77759_PMIC_INTSRCMASK_SPR_3, val));
	i += SCNPRINTF(&buff[i], len - i, " TOPSYS_INT_M=%x",
		FIELD2VALUE(MAX77759_PMIC_INTSRCMASK_TOPSYS_INT_M, val));
	i += SCNPRINTF(&buff[i], len - i, " CHGR_INT_M=%x",
		FIELD2VALUE(MAX77759_PMIC_INTSRCMASK_CHGR_INT_M, val));
#else
	buff[0] = 0;
#endif
	return buff;
}

/*
 * TOPSYS_INT,0x24,0b00000000,0x00
 * SPR_7,TSHDN_INT,SYSOVLO_INT,SYSUVLO_INT,SPR_3_0[3:0],,
 */
#define MAX77759_PMIC_TOPSYS_INT	0x24
#define MAX77759_PMIC_TOPSYS_INT_SPR_7	(0x1 << 7)
#define MAX77759_PMIC_TOPSYS_INT_TSHDN_INT	(0x1 << 6)
#define MAX77759_PMIC_TOPSYS_INT_SYSOVLO_INT	(0x1 << 5)
#define MAX77759_PMIC_TOPSYS_INT_SYSUVLO_INT	(0x1 << 4)

#define MAX77759_PMIC_TOPSYS_INT_SPR_7_SHIFT	7
#define MAX77759_PMIC_TOPSYS_INT_SPR_7_MASK	(0x1 << 7)
#define MAX77759_PMIC_TOPSYS_INT_SPR_7_CLEAR	(~(0x1 << 7))
#define MAX77759_PMIC_TOPSYS_INT_TSHDN_INT_SHIFT	6
#define MAX77759_PMIC_TOPSYS_INT_TSHDN_INT_MASK	(0x1 << 6)
#define MAX77759_PMIC_TOPSYS_INT_TSHDN_INT_CLEAR	(~(0x1 << 6))
#define MAX77759_PMIC_TOPSYS_INT_SYSOVLO_INT_SHIFT	5
#define MAX77759_PMIC_TOPSYS_INT_SYSOVLO_INT_MASK	(0x1 << 5)
#define MAX77759_PMIC_TOPSYS_INT_SYSOVLO_INT_CLEAR	(~(0x1 << 5))
#define MAX77759_PMIC_TOPSYS_INT_SYSUVLO_INT_SHIFT	4
#define MAX77759_PMIC_TOPSYS_INT_SYSUVLO_INT_MASK	(0x1 << 4)
#define MAX77759_PMIC_TOPSYS_INT_SYSUVLO_INT_CLEAR	(~(0x1 << 4))
#define MAX77759_PMIC_TOPSYS_INT_SPR_3_0_SHIFT	0
#define MAX77759_PMIC_TOPSYS_INT_SPR_3_0_MASK	(0xf << 0)
#define MAX77759_PMIC_TOPSYS_INT_SPR_3_0_CLEAR	(~(0xf << 0))

MAX77759_BFF(pmic_topsys_int_spr_7,7,7)
MAX77759_BFF(pmic_topsys_int_tshdn_int,6,6)
MAX77759_BFF(pmic_topsys_int_sysovlo_int,5,5)
MAX77759_BFF(pmic_topsys_int_sysuvlo_int,4,4)
MAX77759_BFF(pmic_topsys_int_spr_3_0,3,0)
static inline const char *
max77759_pmic_topsys_int_cstr(char *buff, size_t len, int val)
{
#ifdef SCNPRINTF
	int i = 0;

	i += SCNPRINTF(&buff[i], len - i, " SPR_7=%x",
		FIELD2VALUE(MAX77759_PMIC_TOPSYS_INT_SPR_7, val));
	i += SCNPRINTF(&buff[i], len - i, " TSHDN_INT=%x",
		FIELD2VALUE(MAX77759_PMIC_TOPSYS_INT_TSHDN_INT, val));
	i += SCNPRINTF(&buff[i], len - i, " SYSOVLO_INT=%x",
		FIELD2VALUE(MAX77759_PMIC_TOPSYS_INT_SYSOVLO_INT, val));
	i += SCNPRINTF(&buff[i], len - i, " SYSUVLO_INT=%x",
		FIELD2VALUE(MAX77759_PMIC_TOPSYS_INT_SYSUVLO_INT, val));
	i += SCNPRINTF(&buff[i], len - i, " SPR_3_0=%x",
		FIELD2VALUE(MAX77759_PMIC_TOPSYS_INT_SPR_3_0, val));
#else
	buff[0] = 0;
#endif
	return buff;
}

/*
 * TOPSYS_INT_MASK,0x26,0b11111111,0xff
 * SPR_7,TSHDN_INT_M,SYSOVLO_INT_M,SYSUVLO_INT_M,SPR_3_1[2:0],,
 */
#define MAX77759_PMIC_TOPSYS_INT_MASK	0x26
#define MAX77759_PMIC_TOPSYS_INT_MASK_SPR_7	(0x1 << 7)
#define MAX77759_PMIC_TOPSYS_INT_MASK_TSHDN_INT_M	(0x1 << 6)
#define MAX77759_PMIC_TOPSYS_INT_MASK_SYSOVLO_INT_M	(0x1 << 5)
#define MAX77759_PMIC_TOPSYS_INT_MASK_SYSUVLO_INT_M	(0x1 << 4)
#define MAX77759_PMIC_TOPSYS_INT_MASK_FSHIP_NOT_RD	(0x1 << 0)

#define MAX77759_PMIC_TOPSYS_INT_MASK_SPR_7_SHIFT	7
#define MAX77759_PMIC_TOPSYS_INT_MASK_SPR_7_MASK	(0x1 << 7)
#define MAX77759_PMIC_TOPSYS_INT_MASK_SPR_7_CLEAR	(~(0x1 << 7))
#define MAX77759_PMIC_TOPSYS_INT_MASK_TSHDN_INT_M_SHIFT	6
#define MAX77759_PMIC_TOPSYS_INT_MASK_TSHDN_INT_M_MASK	(0x1 << 6)
#define MAX77759_PMIC_TOPSYS_INT_MASK_TSHDN_INT_M_CLEAR	(~(0x1 << 6))
#define MAX77759_PMIC_TOPSYS_INT_MASK_SYSOVLO_INT_M_SHIFT	5
#define MAX77759_PMIC_TOPSYS_INT_MASK_SYSOVLO_INT_M_MASK	(0x1 << 5)
#define MAX77759_PMIC_TOPSYS_INT_MASK_SYSOVLO_INT_M_CLEAR	(~(0x1 << 5))
#define MAX77759_PMIC_TOPSYS_INT_MASK_SYSUVLO_INT_M_SHIFT	4
#define MAX77759_PMIC_TOPSYS_INT_MASK_SYSUVLO_INT_M_MASK	(0x1 << 4)
#define MAX77759_PMIC_TOPSYS_INT_MASK_SYSUVLO_INT_M_CLEAR	(~(0x1 << 4))
#define MAX77759_PMIC_TOPSYS_INT_MASK_SPR_3_1_SHIFT	1
#define MAX77759_PMIC_TOPSYS_INT_MASK_SPR_3_1_MASK	(0x7 << 1)
#define MAX77759_PMIC_TOPSYS_INT_MASK_SPR_3_1_CLEAR	(~(0x7 << 1))
#define MAX77759_PMIC_TOPSYS_INT_MASK_FSHIP_NOT_RD_SHIFT	0
#define MAX77759_PMIC_TOPSYS_INT_MASK_FSHIP_NOT_RD_MASK	(0x1 << 0)
#define MAX77759_PMIC_TOPSYS_INT_MASK_FSHIP_NOT_RD_CLEAR	(~(0x1 << 0))

MAX77759_BFF(pmic_topsys_int_mask_spr_7,7,7)
MAX77759_BFF(pmic_topsys_int_mask_tshdn_int_m,6,6)
MAX77759_BFF(pmic_topsys_int_mask_sysovlo_int_m,5,5)
MAX77759_BFF(pmic_topsys_int_mask_sysuvlo_int_m,4,4)
MAX77759_BFF(pmic_topsys_int_mask_spr_3_1,3,1)
MAX77759_BFF(pmic_topsys_int_mask_fship_not_rd,0,0)
static inline const char *
max77759_pmic_topsys_int_mask_cstr(char *buff, size_t len, int val)
{
#ifdef SCNPRINTF
	int i = 0;

	i += SCNPRINTF(&buff[i], len - i, " SPR_7=%x",
		FIELD2VALUE(MAX77759_PMIC_TOPSYS_INT_MASK_SPR_7, val));
	i += SCNPRINTF(&buff[i], len - i, " TSHDN_INT_M=%x",
		FIELD2VALUE(MAX77759_PMIC_TOPSYS_INT_MASK_TSHDN_INT_M, val));
	i += SCNPRINTF(&buff[i], len - i, " SYSOVLO_INT_M=%x",
		FIELD2VALUE(MAX77759_PMIC_TOPSYS_INT_MASK_SYSOVLO_INT_M, val));
	i += SCNPRINTF(&buff[i], len - i, " SYSUVLO_INT_M=%x",
		FIELD2VALUE(MAX77759_PMIC_TOPSYS_INT_MASK_SYSUVLO_INT_M, val));
	i += SCNPRINTF(&buff[i], len - i, " SPR_3_1=%x",
		FIELD2VALUE(MAX77759_PMIC_TOPSYS_INT_MASK_SPR_3_1, val));
	i += SCNPRINTF(&buff[i], len - i, " FSHIP_NOT_RD=%x",
		FIELD2VALUE(MAX77759_PMIC_TOPSYS_INT_MASK_FSHIP_NOT_RD, val));
#else
	buff[0] = 0;
#endif
	return buff;
}

/*
 * I2C_CNFG,0x40,0b00000000,0x00
 * SPR_7,PAIR[2:0],,,SPR_3_1[2:0],,
 */
#define MAX77759_PMIC_I2C_CNFG	0x40
#define MAX77759_PMIC_I2C_CNFG_SPR_7	(0x1 << 7)
#define MAX77759_PMIC_I2C_CNFG_HS_EXT_EN	(0x1 << 0)

#define MAX77759_PMIC_I2C_CNFG_SPR_7_SHIFT	7
#define MAX77759_PMIC_I2C_CNFG_SPR_7_MASK	(0x1 << 7)
#define MAX77759_PMIC_I2C_CNFG_SPR_7_CLEAR	(~(0x1 << 7))
#define MAX77759_PMIC_I2C_CNFG_PAIR_SHIFT	4
#define MAX77759_PMIC_I2C_CNFG_PAIR_MASK	(0x7 << 4)
#define MAX77759_PMIC_I2C_CNFG_PAIR_CLEAR	(~(0x7 << 4))
#define MAX77759_PMIC_I2C_CNFG_SPR_3_1_SHIFT	1
#define MAX77759_PMIC_I2C_CNFG_SPR_3_1_MASK	(0x7 << 1)
#define MAX77759_PMIC_I2C_CNFG_SPR_3_1_CLEAR	(~(0x7 << 1))
#define MAX77759_PMIC_I2C_CNFG_HS_EXT_EN_SHIFT	0
#define MAX77759_PMIC_I2C_CNFG_HS_EXT_EN_MASK	(0x1 << 0)
#define MAX77759_PMIC_I2C_CNFG_HS_EXT_EN_CLEAR	(~(0x1 << 0))

MAX77759_BFF(pmic_i2c_cnfg_spr_7,7,7)
MAX77759_BFF(pmic_i2c_cnfg_pair,6,4)
MAX77759_BFF(pmic_i2c_cnfg_spr_3_1,3,1)
MAX77759_BFF(pmic_i2c_cnfg_hs_ext_en,0,0)
static inline const char *
max77759_pmic_i2c_cnfg_cstr(char *buff, size_t len, int val)
{
#ifdef SCNPRINTF
	int i = 0;

	i += SCNPRINTF(&buff[i], len - i, " SPR_7=%x",
		FIELD2VALUE(MAX77759_PMIC_I2C_CNFG_SPR_7, val));
	i += SCNPRINTF(&buff[i], len - i, " PAIR=%x",
		FIELD2VALUE(MAX77759_PMIC_I2C_CNFG_PAIR, val));
	i += SCNPRINTF(&buff[i], len - i, " SPR_3_1=%x",
		FIELD2VALUE(MAX77759_PMIC_I2C_CNFG_SPR_3_1, val));
	i += SCNPRINTF(&buff[i], len - i, " HS_EXT_EN=%x",
		FIELD2VALUE(MAX77759_PMIC_I2C_CNFG_HS_EXT_EN, val));
#else
	buff[0] = 0;
#endif
	return buff;
}

/*
 * SWRESET,0x50,0b00000000,0x00
 * VIO_OK_MASK,IC_RST_MASK,SWR_RST[5:0],,,,
 */
#define MAX77759_PMIC_SWRESET	0x50
#define MAX77759_PMIC_SWRESET_VIO_OK_MASK	(0x1 << 7)
#define MAX77759_PMIC_SWRESET_IC_RST_MASK	(0x1 << 6)

#define MAX77759_PMIC_SWRESET_VIO_OK_MASK_SHIFT	7
#define MAX77759_PMIC_SWRESET_VIO_OK_MASK_MASK	(0x1 << 7)
#define MAX77759_PMIC_SWRESET_VIO_OK_MASK_CLEAR	(~(0x1 << 7))
#define MAX77759_PMIC_SWRESET_IC_RST_MASK_SHIFT	6
#define MAX77759_PMIC_SWRESET_IC_RST_MASK_MASK	(0x1 << 6)
#define MAX77759_PMIC_SWRESET_IC_RST_MASK_CLEAR	(~(0x1 << 6))
#define MAX77759_PMIC_SWRESET_SWR_RST_SHIFT	0
#define MAX77759_PMIC_SWRESET_SWR_RST_MASK	(0x3f << 0)
#define MAX77759_PMIC_SWRESET_SWR_RST_CLEAR	(~(0x3f << 0))

MAX77759_BFF(pmic_swreset_vio_ok_mask,7,7)
MAX77759_BFF(pmic_swreset_ic_rst_mask,6,6)
MAX77759_BFF(pmic_swreset_swr_rst,5,0)
static inline const char *
max77759_pmic_swreset_cstr(char *buff, size_t len, int val)
{
#ifdef SCNPRINTF
	int i = 0;

	i += SCNPRINTF(&buff[i], len - i, " VIO_OK_MASK=%x",
		FIELD2VALUE(MAX77759_PMIC_SWRESET_VIO_OK_MASK, val));
	i += SCNPRINTF(&buff[i], len - i, " IC_RST_MASK=%x",
		FIELD2VALUE(MAX77759_PMIC_SWRESET_IC_RST_MASK, val));
	i += SCNPRINTF(&buff[i], len - i, " SWR_RST=%x",
		FIELD2VALUE(MAX77759_PMIC_SWRESET_SWR_RST, val));
#else
	buff[0] = 0;
#endif
	return buff;
}

/*
 * CONTROL_FG,0x51,0b00010000,0x10
 * SPR_7_5[2:0],,,TSHDN_DIS,SPR_3_0[1:0],,THMIO_MUX[1:0]
 */
#define MAX77759_PMIC_CONTROL_FG	0x51
#define MAX77759_PMIC_CONTROL_FG_TSHDN_DIS	(0x1 << 4)

#define MAX77759_PMIC_CONTROL_FG_SPR_7_5_SHIFT	5
#define MAX77759_PMIC_CONTROL_FG_SPR_7_5_MASK	(0x7 << 5)
#define MAX77759_PMIC_CONTROL_FG_SPR_7_5_CLEAR	(~(0x7 << 5))
#define MAX77759_PMIC_CONTROL_FG_TSHDN_DIS_SHIFT	4
#define MAX77759_PMIC_CONTROL_FG_TSHDN_DIS_MASK	(0x1 << 4)
#define MAX77759_PMIC_CONTROL_FG_TSHDN_DIS_CLEAR	(~(0x1 << 4))
#define MAX77759_PMIC_CONTROL_FG_SPR_3_0_SHIFT	2
#define MAX77759_PMIC_CONTROL_FG_SPR_3_0_MASK	(0x3 << 2)
#define MAX77759_PMIC_CONTROL_FG_SPR_3_0_CLEAR	(~(0x3 << 2))
#define MAX77759_PMIC_CONTROL_FG_THMIO_MUX_SHIFT	0
#define MAX77759_PMIC_CONTROL_FG_THMIO_MUX_MASK	(0x3 << 0)
#define MAX77759_PMIC_CONTROL_FG_THMIO_MUX_CLEAR	(~(0x3 << 0))

MAX77759_BFF(pmic_control_fg_spr_7_5,7,5)
MAX77759_BFF(pmic_control_fg_tshdn_dis,4,4)
MAX77759_BFF(pmic_control_fg_spr_3_0,3,2)
MAX77759_BFF(pmic_control_fg_thmio_mux,1,0)
static inline const char *
max77759_pmic_control_fg_cstr(char *buff, size_t len, int val)
{
#ifdef SCNPRINTF
	int i = 0;

	i += SCNPRINTF(&buff[i], len - i, " SPR_7_5=%x",
		FIELD2VALUE(MAX77759_PMIC_CONTROL_FG_SPR_7_5, val));
	i += SCNPRINTF(&buff[i], len - i, " TSHDN_DIS=%x",
		FIELD2VALUE(MAX77759_PMIC_CONTROL_FG_TSHDN_DIS, val));
	i += SCNPRINTF(&buff[i], len - i, " SPR_3_0=%x",
		FIELD2VALUE(MAX77759_PMIC_CONTROL_FG_SPR_3_0, val));
	i += SCNPRINTF(&buff[i], len - i, " THMIO_MUX=%x",
		FIELD2VALUE(MAX77759_PMIC_CONTROL_FG_THMIO_MUX, val));
#else
	buff[0] = 0;
#endif
	return buff;
}

/*
 * DEVICE_ID,0x60,0b01011001,0x59
 * DeviceID[7:0],,,,,,
 */
#define MAX77759_PMIC_DEVICE_ID	0x60

/*
 * DEVICE_REV,0x61,0b00000010,0x02
 * DeviceRev[7:0],,,,,,
 */
#define MAX77759_PMIC_DEVICE_REV	0x61

/*
 * FW_REV,0x62,0b00000000,0x00
 * FwRev[7:0],,,,,,
 */
#define MAX77759_PMIC_FW_REV	0x62

/*
 * FW_SUB_REV,0x63,0b00000000,0x00
 * FwSubRev[7:0],,,,,,
 */
#define MAX77759_PMIC_FW_SUB_REV	0x63

/*
 * UIC_INT1,0x64,0b00000000,0x00
 * APCmdResI,SysMsgI,UIC_INT1I[3:0],,,,GPIO6I
 */
#define MAX77759_PMIC_UIC_INT1	0x64
#define MAX77759_PMIC_UIC_INT1_APCMDRESI	(0x1 << 7)
#define MAX77759_PMIC_UIC_INT1_SYSMSGI	(0x1 << 6)
#define MAX77759_PMIC_UIC_INT1_GPIO6I	(0x1 << 1)
#define MAX77759_PMIC_UIC_INT1_GPIO5I	(0x1 << 0)

#define MAX77759_PMIC_UIC_INT1_APCMDRESI_SHIFT	7
#define MAX77759_PMIC_UIC_INT1_APCMDRESI_MASK	(0x1 << 7)
#define MAX77759_PMIC_UIC_INT1_APCMDRESI_CLEAR	(~(0x1 << 7))
#define MAX77759_PMIC_UIC_INT1_SYSMSGI_SHIFT	6
#define MAX77759_PMIC_UIC_INT1_SYSMSGI_MASK	(0x1 << 6)
#define MAX77759_PMIC_UIC_INT1_SYSMSGI_CLEAR	(~(0x1 << 6))
#define MAX77759_PMIC_UIC_INT1_UIC_INT1I_SHIFT	2
#define MAX77759_PMIC_UIC_INT1_UIC_INT1I_MASK	(0xf << 2)
#define MAX77759_PMIC_UIC_INT1_UIC_INT1I_CLEAR	(~(0xf << 2))
#define MAX77759_PMIC_UIC_INT1_GPIO6I_SHIFT	1
#define MAX77759_PMIC_UIC_INT1_GPIO6I_MASK	(0x1 << 1)
#define MAX77759_PMIC_UIC_INT1_GPIO6I_CLEAR	(~(0x1 << 1))
#define MAX77759_PMIC_UIC_INT1_GPIO5I_SHIFT	0
#define MAX77759_PMIC_UIC_INT1_GPIO5I_MASK	(0x1 << 0)
#define MAX77759_PMIC_UIC_INT1_GPIO5I_CLEAR	(~(0x1 << 0))

MAX77759_BFF(pmic_uic_int1_apcmdresi,7,7)
MAX77759_BFF(pmic_uic_int1_sysmsgi,6,6)
MAX77759_BFF(pmic_uic_int1_uic_int1i,5,2)
MAX77759_BFF(pmic_uic_int1_gpio6i,1,1)
MAX77759_BFF(pmic_uic_int1_gpio5i,0,0)
static inline const char *
max77759_pmic_uic_int1_cstr(char *buff, size_t len, int val)
{
#ifdef SCNPRINTF
	int i = 0;

	i += SCNPRINTF(&buff[i], len - i, " APCMDRESI=%x",
		FIELD2VALUE(MAX77759_PMIC_UIC_INT1_APCMDRESI, val));
	i += SCNPRINTF(&buff[i], len - i, " SYSMSGI=%x",
		FIELD2VALUE(MAX77759_PMIC_UIC_INT1_SYSMSGI, val));
	i += SCNPRINTF(&buff[i], len - i, " UIC_INT1I=%x",
		FIELD2VALUE(MAX77759_PMIC_UIC_INT1_UIC_INT1I, val));
	i += SCNPRINTF(&buff[i], len - i, " GPIO6I=%x",
		FIELD2VALUE(MAX77759_PMIC_UIC_INT1_GPIO6I, val));
	i += SCNPRINTF(&buff[i], len - i, " GPIO5I=%x",
		FIELD2VALUE(MAX77759_PMIC_UIC_INT1_GPIO5I, val));
#else
	buff[0] = 0;
#endif
	return buff;
}

/*
 * UIC_INT2,0x65,0b00000000,0x00
 * UIC_INT2I[7:0],,,,,,
 */
#define MAX77759_PMIC_UIC_INT2	0x65

/*
 * UIC_INT3,0x66,0b00000000,0x00
 * UIC_INT3I[7:0],,,,,,
 */
#define MAX77759_PMIC_UIC_INT3	0x66

/*
 * UIC_INT4,0x67,0b00000000,0x00
 * UIC_INT4I[7:0],,,,,,
 */
#define MAX77759_PMIC_UIC_INT4	0x67

/*
 * UIC_STATUS1,0x68,0b00000000,0x00
 * UIC_STATUS1[7:0],,,,,,
 */
#define MAX77759_PMIC_UIC_STATUS1	0x68

/*
 * UIC_STATUS2,0x69,0b00000000,0x00
 * SysMsg[7:0],,,,,,
 */
#define MAX77759_PMIC_UIC_STATUS2	0x69

/*
 * UIC_STATUS3,0x6A,0b00000000,0x00
 * UIC_STATUS3[7:0],,,,,,
 */
#define MAX77759_PMIC_UIC_STATUS3	0x6A

/*
 * UIC_STATUS4,0x6B,0b00000000,0x00
 * UIC_STATUS4[7:0],,,,,,
 */
#define MAX77759_PMIC_UIC_STATUS4	0x6B

/*
 * UIC_STATUS5,0x6C,0b00000000,0x00
 * UIC_STATUS5[5:0],,,,,,ShB_MUX_EN
 */
#define MAX77759_PMIC_UIC_STATUS5	0x6C
#define MAX77759_PMIC_UIC_STATUS5_SHB_MUX_EN	(0x1 << 1)
#define MAX77759_PMIC_UIC_STATUS5_I2C_MUX_EN	(0x1 << 0)

#define MAX77759_PMIC_UIC_STATUS5_UIC_STATUS5_SHIFT	2
#define MAX77759_PMIC_UIC_STATUS5_UIC_STATUS5_MASK	(0x3f << 2)
#define MAX77759_PMIC_UIC_STATUS5_UIC_STATUS5_CLEAR	(~(0x3f << 2))
#define MAX77759_PMIC_UIC_STATUS5_SHB_MUX_EN_SHIFT	1
#define MAX77759_PMIC_UIC_STATUS5_SHB_MUX_EN_MASK	(0x1 << 1)
#define MAX77759_PMIC_UIC_STATUS5_SHB_MUX_EN_CLEAR	(~(0x1 << 1))
#define MAX77759_PMIC_UIC_STATUS5_I2C_MUX_EN_SHIFT	0
#define MAX77759_PMIC_UIC_STATUS5_I2C_MUX_EN_MASK	(0x1 << 0)
#define MAX77759_PMIC_UIC_STATUS5_I2C_MUX_EN_CLEAR	(~(0x1 << 0))

MAX77759_BFF(pmic_uic_status5_uic_status5,7,2)
MAX77759_BFF(pmic_uic_status5_shb_mux_en,1,1)
MAX77759_BFF(pmic_uic_status5_i2c_mux_en,0,0)
static inline const char *
max77759_pmic_uic_status5_cstr(char *buff, size_t len, int val)
{
#ifdef SCNPRINTF
	int i = 0;

	i += SCNPRINTF(&buff[i], len - i, " UIC_STATUS5=%x",
		FIELD2VALUE(MAX77759_PMIC_UIC_STATUS5_UIC_STATUS5, val));
	i += SCNPRINTF(&buff[i], len - i, " SHB_MUX_EN=%x",
		FIELD2VALUE(MAX77759_PMIC_UIC_STATUS5_SHB_MUX_EN, val));
	i += SCNPRINTF(&buff[i], len - i, " I2C_MUX_EN=%x",
		FIELD2VALUE(MAX77759_PMIC_UIC_STATUS5_I2C_MUX_EN, val));
#else
	buff[0] = 0;
#endif
	return buff;
}

/*
 * UIC_STATUS6,0x6D,0b00000000,0x00
 * UIC_STATUS6[7:0],,,,,,
 */
#define MAX77759_PMIC_UIC_STATUS6	0x6D

/*
 * UIC_STATUS7,0x6E,0b00000000,0x00
 * UIC_STATUS7[7:0],,,,,,
 */
#define MAX77759_PMIC_UIC_STATUS7	0x6E

/*
 * UIC_STATUS8,0x6F,0b00000000,0x00
 * UIC_STATUS8[7:0],,,,,,
 */
#define MAX77759_PMIC_UIC_STATUS8	0x6F

/*
 * UIC_INT1_M,0x70,0b10111111,0xbf
 * APCmdResM,SysMsgM,UIC_INT1_M[3:0],,,,GPIO6M
 */
#define MAX77759_PMIC_UIC_INT1_M	0x70
#define MAX77759_PMIC_UIC_INT1_M_APCMDRESM	(0x1 << 7)
#define MAX77759_PMIC_UIC_INT1_M_SYSMSGM	(0x1 << 6)
#define MAX77759_PMIC_UIC_INT1_M_GPIO6M	(0x1 << 1)
#define MAX77759_PMIC_UIC_INT1_M_GPIO5M	(0x1 << 0)

#define MAX77759_PMIC_UIC_INT1_M_APCMDRESM_SHIFT	7
#define MAX77759_PMIC_UIC_INT1_M_APCMDRESM_MASK	(0x1 << 7)
#define MAX77759_PMIC_UIC_INT1_M_APCMDRESM_CLEAR	(~(0x1 << 7))
#define MAX77759_PMIC_UIC_INT1_M_SYSMSGM_SHIFT	6
#define MAX77759_PMIC_UIC_INT1_M_SYSMSGM_MASK	(0x1 << 6)
#define MAX77759_PMIC_UIC_INT1_M_SYSMSGM_CLEAR	(~(0x1 << 6))
#define MAX77759_PMIC_UIC_INT1_M_UIC_INT1_M_SHIFT	2
#define MAX77759_PMIC_UIC_INT1_M_UIC_INT1_M_MASK	(0xf << 2)
#define MAX77759_PMIC_UIC_INT1_M_UIC_INT1_M_CLEAR	(~(0xf << 2))
#define MAX77759_PMIC_UIC_INT1_M_GPIO6M_SHIFT	1
#define MAX77759_PMIC_UIC_INT1_M_GPIO6M_MASK	(0x1 << 1)
#define MAX77759_PMIC_UIC_INT1_M_GPIO6M_CLEAR	(~(0x1 << 1))
#define MAX77759_PMIC_UIC_INT1_M_GPIO5M_SHIFT	0
#define MAX77759_PMIC_UIC_INT1_M_GPIO5M_MASK	(0x1 << 0)
#define MAX77759_PMIC_UIC_INT1_M_GPIO5M_CLEAR	(~(0x1 << 0))

MAX77759_BFF(pmic_uic_int1_m_apcmdresm,7,7)
MAX77759_BFF(pmic_uic_int1_m_sysmsgm,6,6)
MAX77759_BFF(pmic_uic_int1_m_uic_int1_m,5,2)
MAX77759_BFF(pmic_uic_int1_m_gpio6m,1,1)
MAX77759_BFF(pmic_uic_int1_m_gpio5m,0,0)
static inline const char *
max77759_pmic_uic_int1_m_cstr(char *buff, size_t len, int val)
{
#ifdef SCNPRINTF
	int i = 0;

	i += SCNPRINTF(&buff[i], len - i, " APCMDRESM=%x",
		FIELD2VALUE(MAX77759_PMIC_UIC_INT1_M_APCMDRESM, val));
	i += SCNPRINTF(&buff[i], len - i, " SYSMSGM=%x",
		FIELD2VALUE(MAX77759_PMIC_UIC_INT1_M_SYSMSGM, val));
	i += SCNPRINTF(&buff[i], len - i, " UIC_INT1_M=%x",
		FIELD2VALUE(MAX77759_PMIC_UIC_INT1_M_UIC_INT1_M, val));
	i += SCNPRINTF(&buff[i], len - i, " GPIO6M=%x",
		FIELD2VALUE(MAX77759_PMIC_UIC_INT1_M_GPIO6M, val));
	i += SCNPRINTF(&buff[i], len - i, " GPIO5M=%x",
		FIELD2VALUE(MAX77759_PMIC_UIC_INT1_M_GPIO5M, val));
#else
	buff[0] = 0;
#endif
	return buff;
}

/*
 * UIC_INT2_M,0x71,0b11111111,0xff
 * UIC_INT2_M[7:0],,,,,,
 */
#define MAX77759_PMIC_UIC_INT2_M	0x71

/*
 * UIC_INT3_M,0x72,0b11111111,0xff
 * UIC_INT3_M[7:0],,,,,,
 */
#define MAX77759_PMIC_UIC_INT3_M	0x72

/*
 * UIC_INT4_M,0x73,0b11111111,0xff
 * UIC_INT4_M[7:0],,,,,,
 */
#define MAX77759_PMIC_UIC_INT4_M	0x73

/*
 * AP_DATAOUT0,0x81,0b00000000,0x00
 * AP_REQUEST_OPCODE[7:0],,,,,,
 */
#define MAX77759_PMIC_AP_DATAOUT0	0x81

/*
 * AP_DATAOUT1,0x82,0b00000000,0x00
 * OPCODE_DATAOUT_01[7:0],,,,,,
 */
#define MAX77759_PMIC_AP_DATAOUT1	0x82

/*
 * AP_DATAOUT2,0x83,0b00000000,0x00
 * OPCODE_DATAOUT_02[7:0],,,,,,
 */
#define MAX77759_PMIC_AP_DATAOUT2	0x83

/*
 * AP_DATAOUT3,0x84,0b00000000,0x00
 * OPCODE_DATAOUT_03[7:0],,,,,,
 */
#define MAX77759_PMIC_AP_DATAOUT3	0x84

/*
 * AP_DATAOUT4,0x85,0b00000000,0x00
 * OPCODE_DATAOUT_04[7:0],,,,,,
 */
#define MAX77759_PMIC_AP_DATAOUT4	0x85

/*
 * AP_DATAOUT5,0x86,0b00000000,0x00
 * OPCODE_DATAOUT_05[7:0],,,,,,
 */
#define MAX77759_PMIC_AP_DATAOUT5	0x86

/*
 * AP_DATAOUT6,0x87,0b00000000,0x00
 * OPCODE_DATAOUT_06[7:0],,,,,,
 */
#define MAX77759_PMIC_AP_DATAOUT6	0x87

/*
 * AP_DATAOUT7,0x88,0b00000000,0x00
 * OPCODE_DATAOUT_07[7:0],,,,,,
 */
#define MAX77759_PMIC_AP_DATAOUT7	0x88

/*
 * AP_DATAOUT8,0x89,0b00000000,0x00
 * OPCODE_DATAOUT_08[7:0],,,,,,
 */
#define MAX77759_PMIC_AP_DATAOUT8	0x89

/*
 * AP_DATAOUT9,0x8A,0b00000000,0x00
 * OPCODE_DATAOUT_09[7:0],,,,,,
 */
#define MAX77759_PMIC_AP_DATAOUT9	0x8A

/*
 * AP_DATAOUT10,0x8B,0b00000000,0x00
 * OPCODE_DATAOUT_10[7:0],,,,,,
 */
#define MAX77759_PMIC_AP_DATAOUT10	0x8B

/*
 * AP_DATAOUT11,0x8C,0b00000000,0x00
 * OPCODE_DATAOUT_11[7:0],,,,,,
 */
#define MAX77759_PMIC_AP_DATAOUT11	0x8C

/*
 * AP_DATAOUT12,0x8D,0b00000000,0x00
 * OPCODE_DATAOUT_12[7:0],,,,,,
 */
#define MAX77759_PMIC_AP_DATAOUT12	0x8D

/*
 * AP_DATAOUT13,0x8E,0b00000000,0x00
 * OPCODE_DATAOUT_13[7:0],,,,,,
 */
#define MAX77759_PMIC_AP_DATAOUT13	0x8E

/*
 * AP_DATAOUT14,0x8F,0b00000000,0x00
 * OPCODE_DATAOUT_14[7:0],,,,,,
 */
#define MAX77759_PMIC_AP_DATAOUT14	0x8F

/*
 * AP_DATAOUT15,0x90,0b00000000,0x00
 * OPCODE_DATAOUT_15[7:0],,,,,,
 */
#define MAX77759_PMIC_AP_DATAOUT15	0x90

/*
 * AP_DATAOUT16,0x91,0b00000000,0x00
 * OPCODE_DATAOUT_16[7:0],,,,,,
 */
#define MAX77759_PMIC_AP_DATAOUT16	0x91

/*
 * AP_DATAOUT17,0x92,0b00000000,0x00
 * OPCODE_DATAOUT_17[7:0],,,,,,
 */
#define MAX77759_PMIC_AP_DATAOUT17	0x92

/*
 * AP_DATAOUT18,0x93,0b00000000,0x00
 * OPCODE_DATAOUT_18[7:0],,,,,,
 */
#define MAX77759_PMIC_AP_DATAOUT18	0x93

/*
 * AP_DATAOUT19,0x94,0b00000000,0x00
 * OPCODE_DATAOUT_19[7:0],,,,,,
 */
#define MAX77759_PMIC_AP_DATAOUT19	0x94

/*
 * AP_DATAOUT20,0x95,0b00000000,0x00
 * OPCODE_DATAOUT_20[7:0],,,,,,
 */
#define MAX77759_PMIC_AP_DATAOUT20	0x95

/*
 * AP_DATAOUT21,0x96,0b00000000,0x00
 * OPCODE_DATAOUT_21[7:0],,,,,,
 */
#define MAX77759_PMIC_AP_DATAOUT21	0x96

/*
 * AP_DATAOUT22,0x97,0b00000000,0x00
 * OPCODE_DATAOUT_22[7:0],,,,,,
 */
#define MAX77759_PMIC_AP_DATAOUT22	0x97

/*
 * AP_DATAOUT23,0x98,0b00000000,0x00
 * OPCODE_DATAOUT_23[7:0],,,,,,
 */
#define MAX77759_PMIC_AP_DATAOUT23	0x98

/*
 * AP_DATAOUT24,0x99,0b00000000,0x00
 * OPCODE_DATAOUT_24[7:0],,,,,,
 */
#define MAX77759_PMIC_AP_DATAOUT24	0x99

/*
 * AP_DATAOUT25,0x9A,0b00000000,0x00
 * OPCODE_DATAOUT_25[7:0],,,,,,
 */
#define MAX77759_PMIC_AP_DATAOUT25	0x9A

/*
 * AP_DATAOUT26,0x9B,0b00000000,0x00
 * OPCODE_DATAOUT_26[7:0],,,,,,
 */
#define MAX77759_PMIC_AP_DATAOUT26	0x9B

/*
 * AP_DATAOUT27,0x9C,0b00000000,0x00
 * OPCODE_DATAOUT_27[7:0],,,,,,
 */
#define MAX77759_PMIC_AP_DATAOUT27	0x9C

/*
 * AP_DATAOUT28,0x9D,0b00000000,0x00
 * OPCODE_DATAOUT_28[7:0],,,,,,
 */
#define MAX77759_PMIC_AP_DATAOUT28	0x9D

/*
 * AP_DATAOUT29,0x9E,0b00000000,0x00
 * OPCODE_DATAOUT_29[7:0],,,,,,
 */
#define MAX77759_PMIC_AP_DATAOUT29	0x9E

/*
 * AP_DATAOUT30,0x9F,0b00000000,0x00
 * OPCODE_DATAOUT_30[7:0],,,,,,
 */
#define MAX77759_PMIC_AP_DATAOUT30	0x9F

/*
 * AP_DATAOUT31,0xA0,0b00000000,0x00
 * OPCODE_DATAOUT_31[7:0],,,,,,
 */
#define MAX77759_PMIC_AP_DATAOUT31	0xA0

/*
 * AP_DATAOUT32,0xA1,0b00000000,0x00
 * OPCODE_DATAOUT_32[7:0],,,,,,
 */
#define MAX77759_PMIC_AP_DATAOUT32	0xA1

/*
 * AP_DATAIN0,0xB1,0b00000000,0x00
 * MAXQ_RESPONSE_OPCODE[7:0],,,,,,
 */
#define MAX77759_PMIC_AP_DATAIN0	0xB1

/*
 * AP_DATAIN1,0xB2,0b00000000,0x00
 * OPCODE_DATAIN_01[7:0],,,,,,
 */
#define MAX77759_PMIC_AP_DATAIN1	0xB2

/*
 * AP_DATAIN2,0xB3,0b00000000,0x00
 * OPCODE_DATAIN_02[7:0],,,,,,
 */
#define MAX77759_PMIC_AP_DATAIN2	0xB3

/*
 * AP_DATAIN3,0xB4,0b00000000,0x00
 * OPCODE_DATAIN_03[7:0],,,,,,
 */
#define MAX77759_PMIC_AP_DATAIN3	0xB4

/*
 * AP_DATAIN4,0xB5,0b00000000,0x00
 * OPCODE_DATAIN_04[7:0],,,,,,
 */
#define MAX77759_PMIC_AP_DATAIN4	0xB5

/*
 * AP_DATAIN5,0xB6,0b00000000,0x00
 * OPCODE_DATAIN_05[7:0],,,,,,
 */
#define MAX77759_PMIC_AP_DATAIN5	0xB6

/*
 * AP_DATAIN6,0xB7,0b00000000,0x00
 * OPCODE_DATAIN_06[7:0],,,,,,
 */
#define MAX77759_PMIC_AP_DATAIN6	0xB7

/*
 * AP_DATAIN7,0xB8,0b00000000,0x00
 * OPCODE_DATAIN_07[7:0],,,,,,
 */
#define MAX77759_PMIC_AP_DATAIN7	0xB8

/*
 * AP_DATAIN8,0xB9,0b00000000,0x00
 * OPCODE_DATAIN_08[7:0],,,,,,
 */
#define MAX77759_PMIC_AP_DATAIN8	0xB9

/*
 * AP_DATAIN9,0xBA,0b00000000,0x00
 * OPCODE_DATAIN_09[7:0],,,,,,
 */
#define MAX77759_PMIC_AP_DATAIN9	0xBA

/*
 * AP_DATAIN10,0xBB,0b00000000,0x00
 * OPCODE_DATAIN_10[7:0],,,,,,
 */
#define MAX77759_PMIC_AP_DATAIN10	0xBB

/*
 * AP_DATAIN11,0xBC,0b00000000,0x00
 * OPCODE_DATAIN_11[7:0],,,,,,
 */
#define MAX77759_PMIC_AP_DATAIN11	0xBC

/*
 * AP_DATAIN12,0xBD,0b00000000,0x00
 * OPCODE_DATAIN_12[7:0],,,,,,
 */
#define MAX77759_PMIC_AP_DATAIN12	0xBD

/*
 * AP_DATAIN13,0xBE,0b00000000,0x00
 * OPCODE_DATAIN_13[7:0],,,,,,
 */
#define MAX77759_PMIC_AP_DATAIN13	0xBE

/*
 * AP_DATAIN14,0xBF,0b00000000,0x00
 * OPCODE_DATAIN_14[7:0],,,,,,
 */
#define MAX77759_PMIC_AP_DATAIN14	0xBF

/*
 * AP_DATAIN15,0xC0,0b00000000,0x00
 * OPCODE_DATAIN_15[7:0],,,,,,
 */
#define MAX77759_PMIC_AP_DATAIN15	0xC0

/*
 * AP_DATAIN16,0xC1,0b00000000,0x00
 * OPCODE_DATAIN_16[7:0],,,,,,
 */
#define MAX77759_PMIC_AP_DATAIN16	0xC1

/*
 * AP_DATAIN17,0xC2,0b00000000,0x00
 * OPCODE_DATAIN_17[7:0],,,,,,
 */
#define MAX77759_PMIC_AP_DATAIN17	0xC2

/*
 * AP_DATAIN18,0xC3,0b00000000,0x00
 * OPCODE_DATAIN_18[7:0],,,,,,
 */
#define MAX77759_PMIC_AP_DATAIN18	0xC3

/*
 * AP_DATAIN19,0xC4,0b00000000,0x00
 * OPCODE_DATAIN_19[7:0],,,,,,
 */
#define MAX77759_PMIC_AP_DATAIN19	0xC4

/*
 * AP_DATAIN20,0xC5,0b00000000,0x00
 * OPCODE_DATAIN_20[7:0],,,,,,
 */
#define MAX77759_PMIC_AP_DATAIN20	0xC5

/*
 * AP_DATAIN21,0xC6,0b00000000,0x00
 * OPCODE_DATAIN_21[7:0],,,,,,
 */
#define MAX77759_PMIC_AP_DATAIN21	0xC6

/*
 * AP_DATAIN22,0xC7,0b00000000,0x00
 * OPCODE_DATAIN_22[7:0],,,,,,
 */
#define MAX77759_PMIC_AP_DATAIN22	0xC7

/*
 * AP_DATAIN23,0xC8,0b00000000,0x00
 * OPCODE_DATAIN_23[7:0],,,,,,
 */
#define MAX77759_PMIC_AP_DATAIN23	0xC8

/*
 * AP_DATAIN24,0xC9,0b00000000,0x00
 * OPCODE_DATAIN_24[7:0],,,,,,
 */
#define MAX77759_PMIC_AP_DATAIN24	0xC9

/*
 * AP_DATAIN25,0xCA,0b00000000,0x00
 * OPCODE_DATAIN_25[7:0],,,,,,
 */
#define MAX77759_PMIC_AP_DATAIN25	0xCA

/*
 * AP_DATAIN26,0xCB,0b00000000,0x00
 * OPCODE_DATAIN_26[7:0],,,,,,
 */
#define MAX77759_PMIC_AP_DATAIN26	0xCB

/*
 * AP_DATAIN27,0xCC,0b00000000,0x00
 * OPCODE_DATAIN_27[7:0],,,,,,
 */
#define MAX77759_PMIC_AP_DATAIN27	0xCC

/*
 * AP_DATAIN28,0xCD,0b00000000,0x00
 * OPCODE_DATAIN_28[7:0],,,,,,
 */
#define MAX77759_PMIC_AP_DATAIN28	0xCD

/*
 * AP_DATAIN29,0xCE,0b00000000,0x00
 * OPCODE_DATAIN_29[7:0],,,,,,
 */
#define MAX77759_PMIC_AP_DATAIN29	0xCE

/*
 * AP_DATAIN30,0xCF,0b00000000,0x00
 * OPCODE_DATAIN_30[7:0],,,,,,
 */
#define MAX77759_PMIC_AP_DATAIN30	0xCF

/*
 * AP_DATAIN31,0xD0,0b00000000,0x00
 * OPCODE_DATAIN_31[7:0],,,,,,
 */
#define MAX77759_PMIC_AP_DATAIN31	0xD0

/*
 * AP_DATAIN32,0xD1,0b00000000,0x00
 * OPCODE_DATAIN_32[7:0],,,,,,
 */
#define MAX77759_PMIC_AP_DATAIN32	0xD1

/*
 * UIC_SWRST,0xE0,0b00000000,0x00
 * UIC_SWRST[7:0],,,,,,
 */
#define MAX77759_PMIC_UIC_SWRST	0xE0

/* section:  Charger  */

/*
 * CHG_INT,0xB0,0b00000000,0x00
 * AICL_I,CHGIN_I,WCIN_I,CHG_I,BAT_I,INLIM_I,THM2_I
 */
#define MAX77759_CHG_INT	0xB0
#define MAX77759_CHG_INT_AICL_I	(0x1 << 7)
#define MAX77759_CHG_INT_CHGIN_I	(0x1 << 6)
#define MAX77759_CHG_INT_WCIN_I	(0x1 << 5)
#define MAX77759_CHG_INT_CHG_I	(0x1 << 4)
#define MAX77759_CHG_INT_BAT_I	(0x1 << 3)
#define MAX77759_CHG_INT_INLIM_I	(0x1 << 2)
#define MAX77759_CHG_INT_THM2_I	(0x1 << 1)
#define MAX77759_CHG_INT_BYP_I	(0x1 << 0)

#define MAX77759_CHG_INT_AICL_I_SHIFT	7
#define MAX77759_CHG_INT_AICL_I_MASK	(0x1 << 7)
#define MAX77759_CHG_INT_AICL_I_CLEAR	(~(0x1 << 7))
#define MAX77759_CHG_INT_CHGIN_I_SHIFT	6
#define MAX77759_CHG_INT_CHGIN_I_MASK	(0x1 << 6)
#define MAX77759_CHG_INT_CHGIN_I_CLEAR	(~(0x1 << 6))
#define MAX77759_CHG_INT_WCIN_I_SHIFT	5
#define MAX77759_CHG_INT_WCIN_I_MASK	(0x1 << 5)
#define MAX77759_CHG_INT_WCIN_I_CLEAR	(~(0x1 << 5))
#define MAX77759_CHG_INT_CHG_I_SHIFT	4
#define MAX77759_CHG_INT_CHG_I_MASK	(0x1 << 4)
#define MAX77759_CHG_INT_CHG_I_CLEAR	(~(0x1 << 4))
#define MAX77759_CHG_INT_BAT_I_SHIFT	3
#define MAX77759_CHG_INT_BAT_I_MASK	(0x1 << 3)
#define MAX77759_CHG_INT_BAT_I_CLEAR	(~(0x1 << 3))
#define MAX77759_CHG_INT_INLIM_I_SHIFT	2
#define MAX77759_CHG_INT_INLIM_I_MASK	(0x1 << 2)
#define MAX77759_CHG_INT_INLIM_I_CLEAR	(~(0x1 << 2))
#define MAX77759_CHG_INT_THM2_I_SHIFT	1
#define MAX77759_CHG_INT_THM2_I_MASK	(0x1 << 1)
#define MAX77759_CHG_INT_THM2_I_CLEAR	(~(0x1 << 1))
#define MAX77759_CHG_INT_BYP_I_SHIFT	0
#define MAX77759_CHG_INT_BYP_I_MASK	(0x1 << 0)
#define MAX77759_CHG_INT_BYP_I_CLEAR	(~(0x1 << 0))

MAX77759_BFF(chg_int_aicl_i,7,7)
MAX77759_BFF(chg_int_chgin_i,6,6)
MAX77759_BFF(chg_int_wcin_i,5,5)
MAX77759_BFF(chg_int_chg_i,4,4)
MAX77759_BFF(chg_int_bat_i,3,3)
MAX77759_BFF(chg_int_inlim_i,2,2)
MAX77759_BFF(chg_int_thm2_i,1,1)
MAX77759_BFF(chg_int_byp_i,0,0)
static inline const char *
max77759_chg_int_cstr(char *buff, size_t len, int val)
{
#ifdef SCNPRINTF
	int i = 0;

	i += SCNPRINTF(&buff[i], len - i, " AICL_I=%x",
		FIELD2VALUE(MAX77759_CHG_INT_AICL_I, val));
	i += SCNPRINTF(&buff[i], len - i, " CHGIN_I=%x",
		FIELD2VALUE(MAX77759_CHG_INT_CHGIN_I, val));
	i += SCNPRINTF(&buff[i], len - i, " WCIN_I=%x",
		FIELD2VALUE(MAX77759_CHG_INT_WCIN_I, val));
	i += SCNPRINTF(&buff[i], len - i, " CHG_I=%x",
		FIELD2VALUE(MAX77759_CHG_INT_CHG_I, val));
	i += SCNPRINTF(&buff[i], len - i, " BAT_I=%x",
		FIELD2VALUE(MAX77759_CHG_INT_BAT_I, val));
	i += SCNPRINTF(&buff[i], len - i, " INLIM_I=%x",
		FIELD2VALUE(MAX77759_CHG_INT_INLIM_I, val));
	i += SCNPRINTF(&buff[i], len - i, " THM2_I=%x",
		FIELD2VALUE(MAX77759_CHG_INT_THM2_I, val));
	i += SCNPRINTF(&buff[i], len - i, " BYP_I=%x",
		FIELD2VALUE(MAX77759_CHG_INT_BYP_I, val));
#else
	buff[0] = 0;
#endif
	return buff;
}

/*
 * CHG_INT2,0xB1,0b00000000,0x00
 * INSEL_I,SYS_UVLO1_I,SYS_UVLO2_I,BAT_OILO_I,CHG_STA_CC_I,CHG_STA_CV_I,CHG_STA_TO_I
 */
#define MAX77759_CHG_INT2	0xB1
#define MAX77759_CHG_INT2_INSEL_I	(0x1 << 7)
#define MAX77759_CHG_INT2_SYS_UVLO1_I	(0x1 << 6)
#define MAX77759_CHG_INT2_SYS_UVLO2_I	(0x1 << 5)
#define MAX77759_CHG_INT2_BAT_OILO_I	(0x1 << 4)
#define MAX77759_CHG_INT2_CHG_STA_CC_I	(0x1 << 3)
#define MAX77759_CHG_INT2_CHG_STA_CV_I	(0x1 << 2)
#define MAX77759_CHG_INT2_CHG_STA_TO_I	(0x1 << 1)
#define MAX77759_CHG_INT2_CHG_STA_DONE_I	(0x1 << 0)

#define MAX77759_CHG_INT2_INSEL_I_SHIFT	7
#define MAX77759_CHG_INT2_INSEL_I_MASK	(0x1 << 7)
#define MAX77759_CHG_INT2_INSEL_I_CLEAR	(~(0x1 << 7))
#define MAX77759_CHG_INT2_SYS_UVLO1_I_SHIFT	6
#define MAX77759_CHG_INT2_SYS_UVLO1_I_MASK	(0x1 << 6)
#define MAX77759_CHG_INT2_SYS_UVLO1_I_CLEAR	(~(0x1 << 6))
#define MAX77759_CHG_INT2_SYS_UVLO2_I_SHIFT	5
#define MAX77759_CHG_INT2_SYS_UVLO2_I_MASK	(0x1 << 5)
#define MAX77759_CHG_INT2_SYS_UVLO2_I_CLEAR	(~(0x1 << 5))
#define MAX77759_CHG_INT2_BAT_OILO_I_SHIFT	4
#define MAX77759_CHG_INT2_BAT_OILO_I_MASK	(0x1 << 4)
#define MAX77759_CHG_INT2_BAT_OILO_I_CLEAR	(~(0x1 << 4))
#define MAX77759_CHG_INT2_CHG_STA_CC_I_SHIFT	3
#define MAX77759_CHG_INT2_CHG_STA_CC_I_MASK	(0x1 << 3)
#define MAX77759_CHG_INT2_CHG_STA_CC_I_CLEAR	(~(0x1 << 3))
#define MAX77759_CHG_INT2_CHG_STA_CV_I_SHIFT	2
#define MAX77759_CHG_INT2_CHG_STA_CV_I_MASK	(0x1 << 2)
#define MAX77759_CHG_INT2_CHG_STA_CV_I_CLEAR	(~(0x1 << 2))
#define MAX77759_CHG_INT2_CHG_STA_TO_I_SHIFT	1
#define MAX77759_CHG_INT2_CHG_STA_TO_I_MASK	(0x1 << 1)
#define MAX77759_CHG_INT2_CHG_STA_TO_I_CLEAR	(~(0x1 << 1))
#define MAX77759_CHG_INT2_CHG_STA_DONE_I_SHIFT	0
#define MAX77759_CHG_INT2_CHG_STA_DONE_I_MASK	(0x1 << 0)
#define MAX77759_CHG_INT2_CHG_STA_DONE_I_CLEAR	(~(0x1 << 0))

MAX77759_BFF(chg_int2_insel_i,7,7)
MAX77759_BFF(chg_int2_sys_uvlo1_i,6,6)
MAX77759_BFF(chg_int2_sys_uvlo2_i,5,5)
MAX77759_BFF(chg_int2_bat_oilo_i,4,4)
MAX77759_BFF(chg_int2_chg_sta_cc_i,3,3)
MAX77759_BFF(chg_int2_chg_sta_cv_i,2,2)
MAX77759_BFF(chg_int2_chg_sta_to_i,1,1)
MAX77759_BFF(chg_int2_chg_sta_done_i,0,0)
static inline const char *
max77759_chg_int2_cstr(char *buff, size_t len, int val)
{
#ifdef SCNPRINTF
	int i = 0;

	i += SCNPRINTF(&buff[i], len - i, " INSEL_I=%x",
		FIELD2VALUE(MAX77759_CHG_INT2_INSEL_I, val));
	i += SCNPRINTF(&buff[i], len - i, " SYS_UVLO1_I=%x",
		FIELD2VALUE(MAX77759_CHG_INT2_SYS_UVLO1_I, val));
	i += SCNPRINTF(&buff[i], len - i, " SYS_UVLO2_I=%x",
		FIELD2VALUE(MAX77759_CHG_INT2_SYS_UVLO2_I, val));
	i += SCNPRINTF(&buff[i], len - i, " BAT_OILO_I=%x",
		FIELD2VALUE(MAX77759_CHG_INT2_BAT_OILO_I, val));
	i += SCNPRINTF(&buff[i], len - i, " CHG_STA_CC_I=%x",
		FIELD2VALUE(MAX77759_CHG_INT2_CHG_STA_CC_I, val));
	i += SCNPRINTF(&buff[i], len - i, " CHG_STA_CV_I=%x",
		FIELD2VALUE(MAX77759_CHG_INT2_CHG_STA_CV_I, val));
	i += SCNPRINTF(&buff[i], len - i, " CHG_STA_TO_I=%x",
		FIELD2VALUE(MAX77759_CHG_INT2_CHG_STA_TO_I, val));
	i += SCNPRINTF(&buff[i], len - i, " CHG_STA_DONE_I=%x",
		FIELD2VALUE(MAX77759_CHG_INT2_CHG_STA_DONE_I, val));
#else
	buff[0] = 0;
#endif
	return buff;
}

/*
 * CHG_INT_MASK,0xB2,0b11111111,0xff
 * AICL_M,CHGIN_M,WCIN_M,CHG_M,BAT_M,INLIM_M,THM2_M
 */
#define MAX77759_CHG_INT_MASK	0xB2
#define MAX77759_CHG_INT_MASK_AICL_M	(0x1 << 7)
#define MAX77759_CHG_INT_MASK_CHGIN_M	(0x1 << 6)
#define MAX77759_CHG_INT_MASK_WCIN_M	(0x1 << 5)
#define MAX77759_CHG_INT_MASK_CHG_M	(0x1 << 4)
#define MAX77759_CHG_INT_MASK_BAT_M	(0x1 << 3)
#define MAX77759_CHG_INT_MASK_INLIM_M	(0x1 << 2)
#define MAX77759_CHG_INT_MASK_THM2_M	(0x1 << 1)
#define MAX77759_CHG_INT_MASK_BYP_M	(0x1 << 0)

#define MAX77759_CHG_INT_MASK_AICL_M_SHIFT	7
#define MAX77759_CHG_INT_MASK_AICL_M_MASK	(0x1 << 7)
#define MAX77759_CHG_INT_MASK_AICL_M_CLEAR	(~(0x1 << 7))
#define MAX77759_CHG_INT_MASK_CHGIN_M_SHIFT	6
#define MAX77759_CHG_INT_MASK_CHGIN_M_MASK	(0x1 << 6)
#define MAX77759_CHG_INT_MASK_CHGIN_M_CLEAR	(~(0x1 << 6))
#define MAX77759_CHG_INT_MASK_WCIN_M_SHIFT	5
#define MAX77759_CHG_INT_MASK_WCIN_M_MASK	(0x1 << 5)
#define MAX77759_CHG_INT_MASK_WCIN_M_CLEAR	(~(0x1 << 5))
#define MAX77759_CHG_INT_MASK_CHG_M_SHIFT	4
#define MAX77759_CHG_INT_MASK_CHG_M_MASK	(0x1 << 4)
#define MAX77759_CHG_INT_MASK_CHG_M_CLEAR	(~(0x1 << 4))
#define MAX77759_CHG_INT_MASK_BAT_M_SHIFT	3
#define MAX77759_CHG_INT_MASK_BAT_M_MASK	(0x1 << 3)
#define MAX77759_CHG_INT_MASK_BAT_M_CLEAR	(~(0x1 << 3))
#define MAX77759_CHG_INT_MASK_INLIM_M_SHIFT	2
#define MAX77759_CHG_INT_MASK_INLIM_M_MASK	(0x1 << 2)
#define MAX77759_CHG_INT_MASK_INLIM_M_CLEAR	(~(0x1 << 2))
#define MAX77759_CHG_INT_MASK_THM2_M_SHIFT	1
#define MAX77759_CHG_INT_MASK_THM2_M_MASK	(0x1 << 1)
#define MAX77759_CHG_INT_MASK_THM2_M_CLEAR	(~(0x1 << 1))
#define MAX77759_CHG_INT_MASK_BYP_M_SHIFT	0
#define MAX77759_CHG_INT_MASK_BYP_M_MASK	(0x1 << 0)
#define MAX77759_CHG_INT_MASK_BYP_M_CLEAR	(~(0x1 << 0))

MAX77759_BFF(chg_int_mask_aicl_m,7,7)
MAX77759_BFF(chg_int_mask_chgin_m,6,6)
MAX77759_BFF(chg_int_mask_wcin_m,5,5)
MAX77759_BFF(chg_int_mask_chg_m,4,4)
MAX77759_BFF(chg_int_mask_bat_m,3,3)
MAX77759_BFF(chg_int_mask_inlim_m,2,2)
MAX77759_BFF(chg_int_mask_thm2_m,1,1)
MAX77759_BFF(chg_int_mask_byp_m,0,0)
static inline const char *
max77759_chg_int_mask_cstr(char *buff, size_t len, int val)
{
#ifdef SCNPRINTF
	int i = 0;

	i += SCNPRINTF(&buff[i], len - i, " AICL_M=%x",
		FIELD2VALUE(MAX77759_CHG_INT_MASK_AICL_M, val));
	i += SCNPRINTF(&buff[i], len - i, " CHGIN_M=%x",
		FIELD2VALUE(MAX77759_CHG_INT_MASK_CHGIN_M, val));
	i += SCNPRINTF(&buff[i], len - i, " WCIN_M=%x",
		FIELD2VALUE(MAX77759_CHG_INT_MASK_WCIN_M, val));
	i += SCNPRINTF(&buff[i], len - i, " CHG_M=%x",
		FIELD2VALUE(MAX77759_CHG_INT_MASK_CHG_M, val));
	i += SCNPRINTF(&buff[i], len - i, " BAT_M=%x",
		FIELD2VALUE(MAX77759_CHG_INT_MASK_BAT_M, val));
	i += SCNPRINTF(&buff[i], len - i, " INLIM_M=%x",
		FIELD2VALUE(MAX77759_CHG_INT_MASK_INLIM_M, val));
	i += SCNPRINTF(&buff[i], len - i, " THM2_M=%x",
		FIELD2VALUE(MAX77759_CHG_INT_MASK_THM2_M, val));
	i += SCNPRINTF(&buff[i], len - i, " BYP_M=%x",
		FIELD2VALUE(MAX77759_CHG_INT_MASK_BYP_M, val));
#else
	buff[0] = 0;
#endif
	return buff;
}

/*
 * CHG_INT2_MASK,0xB3,0b11111111,0xff
 * INSEL_M,SYS_UVLO1_M,SYS_UVLO2_M,BAT_OILO_M,CHG_STA_CC_M,CHG_STA_CV_M,CHG_STA_TO_M
 */
#define MAX77759_CHG_INT2_MASK	0xB3
#define MAX77759_CHG_INT2_MASK_INSEL_M	(0x1 << 7)
#define MAX77759_CHG_INT2_MASK_SYS_UVLO1_M	(0x1 << 6)
#define MAX77759_CHG_INT2_MASK_SYS_UVLO2_M	(0x1 << 5)
#define MAX77759_CHG_INT2_MASK_BAT_OILO_M	(0x1 << 4)
#define MAX77759_CHG_INT2_MASK_CHG_STA_CC_M	(0x1 << 3)
#define MAX77759_CHG_INT2_MASK_CHG_STA_CV_M	(0x1 << 2)
#define MAX77759_CHG_INT2_MASK_CHG_STA_TO_M	(0x1 << 1)
#define MAX77759_CHG_INT2_MASK_CHG_STA_DONE_M	(0x1 << 0)

#define MAX77759_CHG_INT2_MASK_INSEL_M_SHIFT	7
#define MAX77759_CHG_INT2_MASK_INSEL_M_MASK	(0x1 << 7)
#define MAX77759_CHG_INT2_MASK_INSEL_M_CLEAR	(~(0x1 << 7))
#define MAX77759_CHG_INT2_MASK_SYS_UVLO1_M_SHIFT	6
#define MAX77759_CHG_INT2_MASK_SYS_UVLO1_M_MASK	(0x1 << 6)
#define MAX77759_CHG_INT2_MASK_SYS_UVLO1_M_CLEAR	(~(0x1 << 6))
#define MAX77759_CHG_INT2_MASK_SYS_UVLO2_M_SHIFT	5
#define MAX77759_CHG_INT2_MASK_SYS_UVLO2_M_MASK	(0x1 << 5)
#define MAX77759_CHG_INT2_MASK_SYS_UVLO2_M_CLEAR	(~(0x1 << 5))
#define MAX77759_CHG_INT2_MASK_BAT_OILO_M_SHIFT	4
#define MAX77759_CHG_INT2_MASK_BAT_OILO_M_MASK	(0x1 << 4)
#define MAX77759_CHG_INT2_MASK_BAT_OILO_M_CLEAR	(~(0x1 << 4))
#define MAX77759_CHG_INT2_MASK_CHG_STA_CC_M_SHIFT	3
#define MAX77759_CHG_INT2_MASK_CHG_STA_CC_M_MASK	(0x1 << 3)
#define MAX77759_CHG_INT2_MASK_CHG_STA_CC_M_CLEAR	(~(0x1 << 3))
#define MAX77759_CHG_INT2_MASK_CHG_STA_CV_M_SHIFT	2
#define MAX77759_CHG_INT2_MASK_CHG_STA_CV_M_MASK	(0x1 << 2)
#define MAX77759_CHG_INT2_MASK_CHG_STA_CV_M_CLEAR	(~(0x1 << 2))
#define MAX77759_CHG_INT2_MASK_CHG_STA_TO_M_SHIFT	1
#define MAX77759_CHG_INT2_MASK_CHG_STA_TO_M_MASK	(0x1 << 1)
#define MAX77759_CHG_INT2_MASK_CHG_STA_TO_M_CLEAR	(~(0x1 << 1))
#define MAX77759_CHG_INT2_MASK_CHG_STA_DONE_M_SHIFT	0
#define MAX77759_CHG_INT2_MASK_CHG_STA_DONE_M_MASK	(0x1 << 0)
#define MAX77759_CHG_INT2_MASK_CHG_STA_DONE_M_CLEAR	(~(0x1 << 0))

MAX77759_BFF(chg_int2_mask_insel_m,7,7)
MAX77759_BFF(chg_int2_mask_sys_uvlo1_m,6,6)
MAX77759_BFF(chg_int2_mask_sys_uvlo2_m,5,5)
MAX77759_BFF(chg_int2_mask_bat_oilo_m,4,4)
MAX77759_BFF(chg_int2_mask_chg_sta_cc_m,3,3)
MAX77759_BFF(chg_int2_mask_chg_sta_cv_m,2,2)
MAX77759_BFF(chg_int2_mask_chg_sta_to_m,1,1)
MAX77759_BFF(chg_int2_mask_chg_sta_done_m,0,0)
static inline const char *
max77759_chg_int2_mask_cstr(char *buff, size_t len, int val)
{
#ifdef SCNPRINTF
	int i = 0;

	i += SCNPRINTF(&buff[i], len - i, " INSEL_M=%x",
		FIELD2VALUE(MAX77759_CHG_INT2_MASK_INSEL_M, val));
	i += SCNPRINTF(&buff[i], len - i, " SYS_UVLO1_M=%x",
		FIELD2VALUE(MAX77759_CHG_INT2_MASK_SYS_UVLO1_M, val));
	i += SCNPRINTF(&buff[i], len - i, " SYS_UVLO2_M=%x",
		FIELD2VALUE(MAX77759_CHG_INT2_MASK_SYS_UVLO2_M, val));
	i += SCNPRINTF(&buff[i], len - i, " BAT_OILO_M=%x",
		FIELD2VALUE(MAX77759_CHG_INT2_MASK_BAT_OILO_M, val));
	i += SCNPRINTF(&buff[i], len - i, " CHG_STA_CC_M=%x",
		FIELD2VALUE(MAX77759_CHG_INT2_MASK_CHG_STA_CC_M, val));
	i += SCNPRINTF(&buff[i], len - i, " CHG_STA_CV_M=%x",
		FIELD2VALUE(MAX77759_CHG_INT2_MASK_CHG_STA_CV_M, val));
	i += SCNPRINTF(&buff[i], len - i, " CHG_STA_TO_M=%x",
		FIELD2VALUE(MAX77759_CHG_INT2_MASK_CHG_STA_TO_M, val));
	i += SCNPRINTF(&buff[i], len - i, " CHG_STA_DONE_M=%x",
		FIELD2VALUE(MAX77759_CHG_INT2_MASK_CHG_STA_DONE_M, val));
#else
	buff[0] = 0;
#endif
	return buff;
}

/*
 * CHG_INT_OK,0xB4,0b10011111,0x9f
 * AICL_OK,CHGIN_OK,WCIN_OK,CHG_OK,BAT_OK,INLIM_OK,THM2_OK
 */
#define MAX77759_CHG_INT_OK	0xB4
#define MAX77759_CHG_INT_OK_AICL_OK	(0x1 << 7)
#define MAX77759_CHG_INT_OK_CHGIN_OK	(0x1 << 6)
#define MAX77759_CHG_INT_OK_WCIN_OK	(0x1 << 5)
#define MAX77759_CHG_INT_OK_CHG_OK	(0x1 << 4)
#define MAX77759_CHG_INT_OK_BAT_OK	(0x1 << 3)
#define MAX77759_CHG_INT_OK_INLIM_OK	(0x1 << 2)
#define MAX77759_CHG_INT_OK_THM2_OK	(0x1 << 1)
#define MAX77759_CHG_INT_OK_BYP_OK	(0x1 << 0)

#define MAX77759_CHG_INT_OK_AICL_OK_SHIFT	7
#define MAX77759_CHG_INT_OK_AICL_OK_MASK	(0x1 << 7)
#define MAX77759_CHG_INT_OK_AICL_OK_CLEAR	(~(0x1 << 7))
#define MAX77759_CHG_INT_OK_CHGIN_OK_SHIFT	6
#define MAX77759_CHG_INT_OK_CHGIN_OK_MASK	(0x1 << 6)
#define MAX77759_CHG_INT_OK_CHGIN_OK_CLEAR	(~(0x1 << 6))
#define MAX77759_CHG_INT_OK_WCIN_OK_SHIFT	5
#define MAX77759_CHG_INT_OK_WCIN_OK_MASK	(0x1 << 5)
#define MAX77759_CHG_INT_OK_WCIN_OK_CLEAR	(~(0x1 << 5))
#define MAX77759_CHG_INT_OK_CHG_OK_SHIFT	4
#define MAX77759_CHG_INT_OK_CHG_OK_MASK	(0x1 << 4)
#define MAX77759_CHG_INT_OK_CHG_OK_CLEAR	(~(0x1 << 4))
#define MAX77759_CHG_INT_OK_BAT_OK_SHIFT	3
#define MAX77759_CHG_INT_OK_BAT_OK_MASK	(0x1 << 3)
#define MAX77759_CHG_INT_OK_BAT_OK_CLEAR	(~(0x1 << 3))
#define MAX77759_CHG_INT_OK_INLIM_OK_SHIFT	2
#define MAX77759_CHG_INT_OK_INLIM_OK_MASK	(0x1 << 2)
#define MAX77759_CHG_INT_OK_INLIM_OK_CLEAR	(~(0x1 << 2))
#define MAX77759_CHG_INT_OK_THM2_OK_SHIFT	1
#define MAX77759_CHG_INT_OK_THM2_OK_MASK	(0x1 << 1)
#define MAX77759_CHG_INT_OK_THM2_OK_CLEAR	(~(0x1 << 1))
#define MAX77759_CHG_INT_OK_BYP_OK_SHIFT	0
#define MAX77759_CHG_INT_OK_BYP_OK_MASK	(0x1 << 0)
#define MAX77759_CHG_INT_OK_BYP_OK_CLEAR	(~(0x1 << 0))

MAX77759_BFF(chg_int_ok_aicl_ok,7,7)
MAX77759_BFF(chg_int_ok_chgin_ok,6,6)
MAX77759_BFF(chg_int_ok_wcin_ok,5,5)
MAX77759_BFF(chg_int_ok_chg_ok,4,4)
MAX77759_BFF(chg_int_ok_bat_ok,3,3)
MAX77759_BFF(chg_int_ok_inlim_ok,2,2)
MAX77759_BFF(chg_int_ok_thm2_ok,1,1)
MAX77759_BFF(chg_int_ok_byp_ok,0,0)
static inline const char *
max77759_chg_int_ok_cstr(char *buff, size_t len, int val)
{
#ifdef SCNPRINTF
	int i = 0;

	i += SCNPRINTF(&buff[i], len - i, " AICL_OK=%x",
		FIELD2VALUE(MAX77759_CHG_INT_OK_AICL_OK, val));
	i += SCNPRINTF(&buff[i], len - i, " CHGIN_OK=%x",
		FIELD2VALUE(MAX77759_CHG_INT_OK_CHGIN_OK, val));
	i += SCNPRINTF(&buff[i], len - i, " WCIN_OK=%x",
		FIELD2VALUE(MAX77759_CHG_INT_OK_WCIN_OK, val));
	i += SCNPRINTF(&buff[i], len - i, " CHG_OK=%x",
		FIELD2VALUE(MAX77759_CHG_INT_OK_CHG_OK, val));
	i += SCNPRINTF(&buff[i], len - i, " BAT_OK=%x",
		FIELD2VALUE(MAX77759_CHG_INT_OK_BAT_OK, val));
	i += SCNPRINTF(&buff[i], len - i, " INLIM_OK=%x",
		FIELD2VALUE(MAX77759_CHG_INT_OK_INLIM_OK, val));
	i += SCNPRINTF(&buff[i], len - i, " THM2_OK=%x",
		FIELD2VALUE(MAX77759_CHG_INT_OK_THM2_OK, val));
	i += SCNPRINTF(&buff[i], len - i, " BYP_OK=%x",
		FIELD2VALUE(MAX77759_CHG_INT_OK_BYP_OK, val));
#else
	buff[0] = 0;
#endif
	return buff;
}

/*
 * CHG_DETAILS_00,0xB5,0b00000000,0x00
 * RSVD,CHGIN_DTLS[1:0],,WCIN_DTLS[1:0],,SPSN_DTLS[1:0],
 */
#define MAX77759_CHG_DETAILS_00	0xB5
#define MAX77759_CHG_DETAILS_00_RSVD	(0x1 << 7)
#define MAX77759_CHG_DETAILS_00_TREG	(0x1 << 0)

#define MAX77759_CHG_DETAILS_00_RSVD_SHIFT	7
#define MAX77759_CHG_DETAILS_00_RSVD_MASK	(0x1 << 7)
#define MAX77759_CHG_DETAILS_00_RSVD_CLEAR	(~(0x1 << 7))
#define MAX77759_CHG_DETAILS_00_CHGIN_DTLS_SHIFT	5
#define MAX77759_CHG_DETAILS_00_CHGIN_DTLS_MASK	(0x3 << 5)
#define MAX77759_CHG_DETAILS_00_CHGIN_DTLS_CLEAR	(~(0x3 << 5))
#define MAX77759_CHG_DETAILS_00_WCIN_DTLS_SHIFT	3
#define MAX77759_CHG_DETAILS_00_WCIN_DTLS_MASK	(0x3 << 3)
#define MAX77759_CHG_DETAILS_00_WCIN_DTLS_CLEAR	(~(0x3 << 3))
#define MAX77759_CHG_DETAILS_00_SPSN_DTLS_SHIFT	1
#define MAX77759_CHG_DETAILS_00_SPSN_DTLS_MASK	(0x3 << 1)
#define MAX77759_CHG_DETAILS_00_SPSN_DTLS_CLEAR	(~(0x3 << 1))
#define MAX77759_CHG_DETAILS_00_TREG_SHIFT	0
#define MAX77759_CHG_DETAILS_00_TREG_MASK	(0x1 << 0)
#define MAX77759_CHG_DETAILS_00_TREG_CLEAR	(~(0x1 << 0))

MAX77759_BFF(chg_details_00_rsvd,7,7)
MAX77759_BFF(chg_details_00_chgin_dtls,6,5)
MAX77759_BFF(chg_details_00_wcin_dtls,4,3)
MAX77759_BFF(chg_details_00_spsn_dtls,2,1)
MAX77759_BFF(chg_details_00_treg,0,0)
static inline const char *
max77759_chg_details_00_cstr(char *buff, size_t len, int val)
{
#ifdef SCNPRINTF
	int i = 0;

	i += SCNPRINTF(&buff[i], len - i, " RSVD=%x",
		FIELD2VALUE(MAX77759_CHG_DETAILS_00_RSVD, val));
	i += SCNPRINTF(&buff[i], len - i, " CHGIN_DTLS=%x",
		FIELD2VALUE(MAX77759_CHG_DETAILS_00_CHGIN_DTLS, val));
	i += SCNPRINTF(&buff[i], len - i, " WCIN_DTLS=%x",
		FIELD2VALUE(MAX77759_CHG_DETAILS_00_WCIN_DTLS, val));
	i += SCNPRINTF(&buff[i], len - i, " SPSN_DTLS=%x",
		FIELD2VALUE(MAX77759_CHG_DETAILS_00_SPSN_DTLS, val));
	i += SCNPRINTF(&buff[i], len - i, " TREG=%x",
		FIELD2VALUE(MAX77759_CHG_DETAILS_00_TREG, val));
#else
	buff[0] = 0;
#endif
	return buff;
}

/*
 * CHG_DETAILS_01,0xB6,0b11111000,0xf8
 * VDROOP2_OK,BAT_DTLS[2:0],,,CHG_DTLS[3:0],,
 */
#define MAX77759_CHG_DETAILS_01	0xB6
#define MAX77759_CHG_DETAILS_01_VDROOP2_OK	(0x1 << 7)

#define MAX77759_CHG_DETAILS_01_VDROOP2_OK_SHIFT	7
#define MAX77759_CHG_DETAILS_01_VDROOP2_OK_MASK	(0x1 << 7)
#define MAX77759_CHG_DETAILS_01_VDROOP2_OK_CLEAR	(~(0x1 << 7))
#define MAX77759_CHG_DETAILS_01_BAT_DTLS_SHIFT	4
#define MAX77759_CHG_DETAILS_01_BAT_DTLS_MASK	(0x7 << 4)
#define MAX77759_CHG_DETAILS_01_BAT_DTLS_CLEAR	(~(0x7 << 4))
#define MAX77759_CHG_DETAILS_01_CHG_DTLS_SHIFT	0
#define MAX77759_CHG_DETAILS_01_CHG_DTLS_MASK	(0xf << 0)
#define MAX77759_CHG_DETAILS_01_CHG_DTLS_CLEAR	(~(0xf << 0))

MAX77759_BFF(chg_details_01_vdroop2_ok,7,7)
MAX77759_BFF(chg_details_01_bat_dtls,6,4)
MAX77759_BFF(chg_details_01_chg_dtls,3,0)
static inline const char *
max77759_chg_details_01_cstr(char *buff, size_t len, int val)
{
#ifdef SCNPRINTF
	int i = 0;

	i += SCNPRINTF(&buff[i], len - i, " VDROOP2_OK=%x",
		FIELD2VALUE(MAX77759_CHG_DETAILS_01_VDROOP2_OK, val));
	i += SCNPRINTF(&buff[i], len - i, " BAT_DTLS=%x",
		FIELD2VALUE(MAX77759_CHG_DETAILS_01_BAT_DTLS, val));
	i += SCNPRINTF(&buff[i], len - i, " CHG_DTLS=%x",
		FIELD2VALUE(MAX77759_CHG_DETAILS_01_CHG_DTLS, val));
#else
	buff[0] = 0;
#endif
	return buff;
}

/*
 * CHG_DETAILS_02,0xB7,0b00000000,0x00
 * RSVD[1:0],,CHGIN_STS,WCIN_STS,BYP_DTLS[3:0],,
 */
#define MAX77759_CHG_DETAILS_02	0xB7
#define MAX77759_CHG_DETAILS_02_CHGIN_STS	(0x1 << 5)
#define MAX77759_CHG_DETAILS_02_WCIN_STS	(0x1 << 4)

#define MAX77759_CHG_DETAILS_02_RSVD_SHIFT	6
#define MAX77759_CHG_DETAILS_02_RSVD_MASK	(0x3 << 6)
#define MAX77759_CHG_DETAILS_02_RSVD_CLEAR	(~(0x3 << 6))
#define MAX77759_CHG_DETAILS_02_CHGIN_STS_SHIFT	5
#define MAX77759_CHG_DETAILS_02_CHGIN_STS_MASK	(0x1 << 5)
#define MAX77759_CHG_DETAILS_02_CHGIN_STS_CLEAR	(~(0x1 << 5))
#define MAX77759_CHG_DETAILS_02_WCIN_STS_SHIFT	4
#define MAX77759_CHG_DETAILS_02_WCIN_STS_MASK	(0x1 << 4)
#define MAX77759_CHG_DETAILS_02_WCIN_STS_CLEAR	(~(0x1 << 4))
#define MAX77759_CHG_DETAILS_02_BYP_DTLS_SHIFT	0
#define MAX77759_CHG_DETAILS_02_BYP_DTLS_MASK	(0xf << 0)
#define MAX77759_CHG_DETAILS_02_BYP_DTLS_CLEAR	(~(0xf << 0))

MAX77759_BFF(chg_details_02_rsvd,7,6)
MAX77759_BFF(chg_details_02_chgin_sts,5,5)
MAX77759_BFF(chg_details_02_wcin_sts,4,4)
MAX77759_BFF(chg_details_02_byp_dtls,3,0)
static inline const char *
max77759_chg_details_02_cstr(char *buff, size_t len, int val)
{
#ifdef SCNPRINTF
	int i = 0;

	i += SCNPRINTF(&buff[i], len - i, " RSVD=%x",
		FIELD2VALUE(MAX77759_CHG_DETAILS_02_RSVD, val));
	i += SCNPRINTF(&buff[i], len - i, " CHGIN_STS=%x",
		FIELD2VALUE(MAX77759_CHG_DETAILS_02_CHGIN_STS, val));
	i += SCNPRINTF(&buff[i], len - i, " WCIN_STS=%x",
		FIELD2VALUE(MAX77759_CHG_DETAILS_02_WCIN_STS, val));
	i += SCNPRINTF(&buff[i], len - i, " BYP_DTLS=%x",
		FIELD2VALUE(MAX77759_CHG_DETAILS_02_BYP_DTLS, val));
#else
	buff[0] = 0;
#endif
	return buff;
}

/*
 * CHG_DETAILS_03,0xB8,0b00000010,0x02
 * FSHIP_EXIT_DTLS[1:0],,MD_DTLS[1:0],,RSVD,THM_DTLS[2:0],
 */
#define MAX77759_CHG_DETAILS_03	0xB8
#define MAX77759_CHG_DETAILS_03_RSVD	(0x1 << 3)

#define MAX77759_CHG_DETAILS_03_FSHIP_EXIT_DTLS_SHIFT	6
#define MAX77759_CHG_DETAILS_03_FSHIP_EXIT_DTLS_MASK	(0x3 << 6)
#define MAX77759_CHG_DETAILS_03_FSHIP_EXIT_DTLS_CLEAR	(~(0x3 << 6))
#define MAX77759_CHG_DETAILS_03_MD_DTLS_SHIFT	4
#define MAX77759_CHG_DETAILS_03_MD_DTLS_MASK	(0x3 << 4)
#define MAX77759_CHG_DETAILS_03_MD_DTLS_CLEAR	(~(0x3 << 4))
#define MAX77759_CHG_DETAILS_03_RSVD_SHIFT	3
#define MAX77759_CHG_DETAILS_03_RSVD_MASK	(0x1 << 3)
#define MAX77759_CHG_DETAILS_03_RSVD_CLEAR	(~(0x1 << 3))
#define MAX77759_CHG_DETAILS_03_THM_DTLS_SHIFT	0
#define MAX77759_CHG_DETAILS_03_THM_DTLS_MASK	(0x7 << 0)
#define MAX77759_CHG_DETAILS_03_THM_DTLS_CLEAR	(~(0x7 << 0))

MAX77759_BFF(chg_details_03_fship_exit_dtls,7,6)
MAX77759_BFF(chg_details_03_md_dtls,5,4)
MAX77759_BFF(chg_details_03_rsvd,3,3)
MAX77759_BFF(chg_details_03_thm_dtls,2,0)
static inline const char *
max77759_chg_details_03_cstr(char *buff, size_t len, int val)
{
#ifdef SCNPRINTF
	int i = 0;

	i += SCNPRINTF(&buff[i], len - i, " FSHIP_EXIT_DTLS=%x",
		FIELD2VALUE(MAX77759_CHG_DETAILS_03_FSHIP_EXIT_DTLS, val));
	i += SCNPRINTF(&buff[i], len - i, " MD_DTLS=%x",
		FIELD2VALUE(MAX77759_CHG_DETAILS_03_MD_DTLS, val));
	i += SCNPRINTF(&buff[i], len - i, " RSVD=%x",
		FIELD2VALUE(MAX77759_CHG_DETAILS_03_RSVD, val));
	i += SCNPRINTF(&buff[i], len - i, " THM_DTLS=%x",
		FIELD2VALUE(MAX77759_CHG_DETAILS_03_THM_DTLS, val));
#else
	buff[0] = 0;
#endif
	return buff;
}

/*
 * CHG_CNFG_00,0xB9,0b00000100,0x04
 * WDTCLR[1:0],,CP_EN,BYPV_RAMP_BYPASS,MODE[3:0],,
 */
#define MAX77759_CHG_CNFG_00	0xB9
#define MAX77759_CHG_CNFG_00_CP_EN	(0x1 << 5)
#define MAX77759_CHG_CNFG_00_BYPV_RAMP_BYPASS	(0x1 << 4)

#define MAX77759_CHG_CNFG_00_WDTCLR_SHIFT	6
#define MAX77759_CHG_CNFG_00_WDTCLR_MASK	(0x3 << 6)
#define MAX77759_CHG_CNFG_00_WDTCLR_CLEAR	(~(0x3 << 6))
#define MAX77759_CHG_CNFG_00_CP_EN_SHIFT	5
#define MAX77759_CHG_CNFG_00_CP_EN_MASK	(0x1 << 5)
#define MAX77759_CHG_CNFG_00_CP_EN_CLEAR	(~(0x1 << 5))
#define MAX77759_CHG_CNFG_00_BYPV_RAMP_BYPASS_SHIFT	4
#define MAX77759_CHG_CNFG_00_BYPV_RAMP_BYPASS_MASK	(0x1 << 4)
#define MAX77759_CHG_CNFG_00_BYPV_RAMP_BYPASS_CLEAR	(~(0x1 << 4))
#define MAX77759_CHG_CNFG_00_MODE_SHIFT	0
#define MAX77759_CHG_CNFG_00_MODE_MASK	(0xf << 0)
#define MAX77759_CHG_CNFG_00_MODE_CLEAR	(~(0xf << 0))

MAX77759_BFF(chg_cnfg_00_wdtclr,7,6)
MAX77759_BFF(chg_cnfg_00_cp_en,5,5)
MAX77759_BFF(chg_cnfg_00_bypv_ramp_bypass,4,4)
MAX77759_BFF(chg_cnfg_00_mode,3,0)
static inline const char *
max77759_chg_cnfg_00_cstr(char *buff, size_t len, int val)
{
#ifdef SCNPRINTF
	int i = 0;

	i += SCNPRINTF(&buff[i], len - i, " WDTCLR=%x",
		FIELD2VALUE(MAX77759_CHG_CNFG_00_WDTCLR, val));
	i += SCNPRINTF(&buff[i], len - i, " CP_EN=%x",
		FIELD2VALUE(MAX77759_CHG_CNFG_00_CP_EN, val));
	i += SCNPRINTF(&buff[i], len - i, " BYPV_RAMP_BYPASS=%x",
		FIELD2VALUE(MAX77759_CHG_CNFG_00_BYPV_RAMP_BYPASS, val));
	i += SCNPRINTF(&buff[i], len - i, " MODE=%x",
		FIELD2VALUE(MAX77759_CHG_CNFG_00_MODE, val));
#else
	buff[0] = 0;
#endif
	return buff;
}

/*
 * CHG_CNFG_01,0xBA,0b10011001,0x99
 * PQEN,LSEL,CHG_RSTRT[1:0],,RECYCLE_EN,FCHGTIME[2:0],
 */
#define MAX77759_CHG_CNFG_01	0xBA
#define MAX77759_CHG_CNFG_01_PQEN	(0x1 << 7)
#define MAX77759_CHG_CNFG_01_LSEL	(0x1 << 6)
#define MAX77759_CHG_CNFG_01_RECYCLE_EN	(0x1 << 3)

#define MAX77759_CHG_CNFG_01_PQEN_SHIFT	7
#define MAX77759_CHG_CNFG_01_PQEN_MASK	(0x1 << 7)
#define MAX77759_CHG_CNFG_01_PQEN_CLEAR	(~(0x1 << 7))
#define MAX77759_CHG_CNFG_01_LSEL_SHIFT	6
#define MAX77759_CHG_CNFG_01_LSEL_MASK	(0x1 << 6)
#define MAX77759_CHG_CNFG_01_LSEL_CLEAR	(~(0x1 << 6))
#define MAX77759_CHG_CNFG_01_CHG_RSTRT_SHIFT	4
#define MAX77759_CHG_CNFG_01_CHG_RSTRT_MASK	(0x3 << 4)
#define MAX77759_CHG_CNFG_01_CHG_RSTRT_CLEAR	(~(0x3 << 4))
#define MAX77759_CHG_CNFG_01_RECYCLE_EN_SHIFT	3
#define MAX77759_CHG_CNFG_01_RECYCLE_EN_MASK	(0x1 << 3)
#define MAX77759_CHG_CNFG_01_RECYCLE_EN_CLEAR	(~(0x1 << 3))
#define MAX77759_CHG_CNFG_01_FCHGTIME_SHIFT	0
#define MAX77759_CHG_CNFG_01_FCHGTIME_MASK	(0x7 << 0)
#define MAX77759_CHG_CNFG_01_FCHGTIME_CLEAR	(~(0x7 << 0))

MAX77759_BFF(chg_cnfg_01_pqen,7,7)
MAX77759_BFF(chg_cnfg_01_lsel,6,6)
MAX77759_BFF(chg_cnfg_01_chg_rstrt,5,4)
MAX77759_BFF(chg_cnfg_01_recycle_en,3,3)
MAX77759_BFF(chg_cnfg_01_fchgtime,2,0)
static inline const char *
max77759_chg_cnfg_01_cstr(char *buff, size_t len, int val)
{
#ifdef SCNPRINTF
	int i = 0;

	i += SCNPRINTF(&buff[i], len - i, " PQEN=%x",
		FIELD2VALUE(MAX77759_CHG_CNFG_01_PQEN, val));
	i += SCNPRINTF(&buff[i], len - i, " LSEL=%x",
		FIELD2VALUE(MAX77759_CHG_CNFG_01_LSEL, val));
	i += SCNPRINTF(&buff[i], len - i, " CHG_RSTRT=%x",
		FIELD2VALUE(MAX77759_CHG_CNFG_01_CHG_RSTRT, val));
	i += SCNPRINTF(&buff[i], len - i, " RECYCLE_EN=%x",
		FIELD2VALUE(MAX77759_CHG_CNFG_01_RECYCLE_EN, val));
	i += SCNPRINTF(&buff[i], len - i, " FCHGTIME=%x",
		FIELD2VALUE(MAX77759_CHG_CNFG_01_FCHGTIME, val));
#else
	buff[0] = 0;
#endif
	return buff;
}

/*
 * CHG_CNFG_02,0xBB,0b00000111,0x07
 * SPR_7_6[1:0],,CHGCC[5:0],,,,
 */
#define MAX77759_CHG_CNFG_02	0xBB

#define MAX77759_CHG_CNFG_02_SPR_7_6_SHIFT	6
#define MAX77759_CHG_CNFG_02_SPR_7_6_MASK	(0x3 << 6)
#define MAX77759_CHG_CNFG_02_SPR_7_6_CLEAR	(~(0x3 << 6))
#define MAX77759_CHG_CNFG_02_CHGCC_SHIFT	0
#define MAX77759_CHG_CNFG_02_CHGCC_MASK	(0x3f << 0)
#define MAX77759_CHG_CNFG_02_CHGCC_CLEAR	(~(0x3f << 0))

MAX77759_BFF(chg_cnfg_02_spr_7_6,7,6)
MAX77759_BFF(chg_cnfg_02_chgcc,5,0)
static inline const char *
max77759_chg_cnfg_02_cstr(char *buff, size_t len, int val)
{
#ifdef SCNPRINTF
	int i = 0;

	i += SCNPRINTF(&buff[i], len - i, " SPR_7_6=%x",
		FIELD2VALUE(MAX77759_CHG_CNFG_02_SPR_7_6, val));
	i += SCNPRINTF(&buff[i], len - i, " CHGCC=%x",
		FIELD2VALUE(MAX77759_CHG_CNFG_02_CHGCC, val));
#else
	buff[0] = 0;
#endif
	return buff;
}

/*
 * CHG_CNFG_03,0xBC,0b10011001,0x99
 * SYS_TRACK_DIS,AUTO_FSHIP_MODE_EN,TO_TIME[2:0],,,TO_ITH[2:0],
 */
#define MAX77759_CHG_CNFG_03	0xBC
#define MAX77759_CHG_CNFG_03_SYS_TRACK_DIS	(0x1 << 7)
#define MAX77759_CHG_CNFG_03_AUTO_FSHIP_MODE_EN	(0x1 << 6)

#define MAX77759_CHG_CNFG_03_SYS_TRACK_DIS_SHIFT	7
#define MAX77759_CHG_CNFG_03_SYS_TRACK_DIS_MASK	(0x1 << 7)
#define MAX77759_CHG_CNFG_03_SYS_TRACK_DIS_CLEAR	(~(0x1 << 7))
#define MAX77759_CHG_CNFG_03_AUTO_FSHIP_MODE_EN_SHIFT	6
#define MAX77759_CHG_CNFG_03_AUTO_FSHIP_MODE_EN_MASK	(0x1 << 6)
#define MAX77759_CHG_CNFG_03_AUTO_FSHIP_MODE_EN_CLEAR	(~(0x1 << 6))
#define MAX77759_CHG_CNFG_03_TO_TIME_SHIFT	3
#define MAX77759_CHG_CNFG_03_TO_TIME_MASK	(0x7 << 3)
#define MAX77759_CHG_CNFG_03_TO_TIME_CLEAR	(~(0x7 << 3))
#define MAX77759_CHG_CNFG_03_TO_ITH_SHIFT	0
#define MAX77759_CHG_CNFG_03_TO_ITH_MASK	(0x7 << 0)
#define MAX77759_CHG_CNFG_03_TO_ITH_CLEAR	(~(0x7 << 0))

MAX77759_BFF(chg_cnfg_03_sys_track_dis,7,7)
MAX77759_BFF(chg_cnfg_03_auto_fship_mode_en,6,6)
MAX77759_BFF(chg_cnfg_03_to_time,5,3)
MAX77759_BFF(chg_cnfg_03_to_ith,2,0)
static inline const char *
max77759_chg_cnfg_03_cstr(char *buff, size_t len, int val)
{
#ifdef SCNPRINTF
	int i = 0;

	i += SCNPRINTF(&buff[i], len - i, " SYS_TRACK_DIS=%x",
		FIELD2VALUE(MAX77759_CHG_CNFG_03_SYS_TRACK_DIS, val));
	i += SCNPRINTF(&buff[i], len - i, " AUTO_FSHIP_MODE_EN=%x",
		FIELD2VALUE(MAX77759_CHG_CNFG_03_AUTO_FSHIP_MODE_EN, val));
	i += SCNPRINTF(&buff[i], len - i, " TO_TIME=%x",
		FIELD2VALUE(MAX77759_CHG_CNFG_03_TO_TIME, val));
	i += SCNPRINTF(&buff[i], len - i, " TO_ITH=%x",
		FIELD2VALUE(MAX77759_CHG_CNFG_03_TO_ITH, val));
#else
	buff[0] = 0;
#endif
	return buff;
}

/*
 * CHG_CNFG_04,0xBD,0b00010100,0x14
 * SPR_7_6[1:0],,CHG_CV_PRM[5:0],,,,
 */
#define MAX77759_CHG_CNFG_04	0xBD

#define MAX77759_CHG_CNFG_04_SPR_7_6_SHIFT	6
#define MAX77759_CHG_CNFG_04_SPR_7_6_MASK	(0x3 << 6)
#define MAX77759_CHG_CNFG_04_SPR_7_6_CLEAR	(~(0x3 << 6))
#define MAX77759_CHG_CNFG_04_CHG_CV_PRM_SHIFT	0
#define MAX77759_CHG_CNFG_04_CHG_CV_PRM_MASK	(0x3f << 0)
#define MAX77759_CHG_CNFG_04_CHG_CV_PRM_CLEAR	(~(0x3f << 0))

MAX77759_BFF(chg_cnfg_04_spr_7_6,7,6)
MAX77759_BFF(chg_cnfg_04_chg_cv_prm,5,0)
static inline const char *
max77759_chg_cnfg_04_cstr(char *buff, size_t len, int val)
{
#ifdef SCNPRINTF
	int i = 0;

	i += SCNPRINTF(&buff[i], len - i, " SPR_7_6=%x",
		FIELD2VALUE(MAX77759_CHG_CNFG_04_SPR_7_6, val));
	i += SCNPRINTF(&buff[i], len - i, " CHG_CV_PRM=%x",
		FIELD2VALUE(MAX77759_CHG_CNFG_04_CHG_CV_PRM, val));
#else
	buff[0] = 0;
#endif
	return buff;
}

/*
 * CHG_CNFG_05,0xBE,0b00110110,0x36
 * UNO_ILIM[3:0],,,,OTG_ILIM[3:0],,
 */
#define MAX77759_CHG_CNFG_05	0xBE

#define MAX77759_CHG_CNFG_05_UNO_ILIM_SHIFT	4
#define MAX77759_CHG_CNFG_05_UNO_ILIM_MASK	(0xf << 4)
#define MAX77759_CHG_CNFG_05_UNO_ILIM_CLEAR	(~(0xf << 4))
#define MAX77759_CHG_CNFG_05_OTG_ILIM_SHIFT	0
#define MAX77759_CHG_CNFG_05_OTG_ILIM_MASK	(0xf << 0)
#define MAX77759_CHG_CNFG_05_OTG_ILIM_CLEAR	(~(0xf << 0))

MAX77759_BFF(chg_cnfg_05_uno_ilim,7,4)
MAX77759_BFF(chg_cnfg_05_otg_ilim,3,0)
static inline const char *
max77759_chg_cnfg_05_cstr(char *buff, size_t len, int val)
{
#ifdef SCNPRINTF
	int i = 0;

	i += SCNPRINTF(&buff[i], len - i, " UNO_ILIM=%x",
		FIELD2VALUE(MAX77759_CHG_CNFG_05_UNO_ILIM, val));
	i += SCNPRINTF(&buff[i], len - i, " OTG_ILIM=%x",
		FIELD2VALUE(MAX77759_CHG_CNFG_05_OTG_ILIM, val));
#else
	buff[0] = 0;
#endif
	return buff;
}

/*
 * CHG_CNFG_06,0xBF,0b00000000,0x00
 * SPR_7_4[3:0],,,,CHGPROT[1:0],,SPR_1_0[1:0]
 */
#define MAX77759_CHG_CNFG_06	0xBF

#define MAX77759_CHG_CNFG_06_SPR_7_4_SHIFT	4
#define MAX77759_CHG_CNFG_06_SPR_7_4_MASK	(0xf << 4)
#define MAX77759_CHG_CNFG_06_SPR_7_4_CLEAR	(~(0xf << 4))
#define MAX77759_CHG_CNFG_06_CHGPROT_SHIFT	2
#define MAX77759_CHG_CNFG_06_CHGPROT_MASK	(0x3 << 2)
#define MAX77759_CHG_CNFG_06_CHGPROT_CLEAR	(~(0x3 << 2))
#define MAX77759_CHG_CNFG_06_SPR_1_0_SHIFT	0
#define MAX77759_CHG_CNFG_06_SPR_1_0_MASK	(0x3 << 0)
#define MAX77759_CHG_CNFG_06_SPR_1_0_CLEAR	(~(0x3 << 0))

MAX77759_BFF(chg_cnfg_06_spr_7_4,7,4)
MAX77759_BFF(chg_cnfg_06_chgprot,3,2)
MAX77759_BFF(chg_cnfg_06_spr_1_0,1,0)
static inline const char *
max77759_chg_cnfg_06_cstr(char *buff, size_t len, int val)
{
#ifdef SCNPRINTF
	int i = 0;

	i += SCNPRINTF(&buff[i], len - i, " SPR_7_4=%x",
		FIELD2VALUE(MAX77759_CHG_CNFG_06_SPR_7_4, val));
	i += SCNPRINTF(&buff[i], len - i, " CHGPROT=%x",
		FIELD2VALUE(MAX77759_CHG_CNFG_06_CHGPROT, val));
	i += SCNPRINTF(&buff[i], len - i, " SPR_1_0=%x",
		FIELD2VALUE(MAX77759_CHG_CNFG_06_SPR_1_0, val));
#else
	buff[0] = 0;
#endif
	return buff;
}

/*
 * CHG_CNFG_07,0xC0,0b00110000,0x30
 * WD_QBATOFF,REGTEMP[3:0],,,,SPR_2,FGSRC
 */
#define MAX77759_CHG_CNFG_07	0xC0
#define MAX77759_CHG_CNFG_07_WD_QBATOFF	(0x1 << 7)
#define MAX77759_CHG_CNFG_07_SPR_2	(0x1 << 2)
#define MAX77759_CHG_CNFG_07_FGSRC	(0x1 << 1)
#define MAX77759_CHG_CNFG_07_FSHIP_MODE	(0x1 << 0)

#define MAX77759_CHG_CNFG_07_WD_QBATOFF_SHIFT	7
#define MAX77759_CHG_CNFG_07_WD_QBATOFF_MASK	(0x1 << 7)
#define MAX77759_CHG_CNFG_07_WD_QBATOFF_CLEAR	(~(0x1 << 7))
#define MAX77759_CHG_CNFG_07_REGTEMP_SHIFT	3
#define MAX77759_CHG_CNFG_07_REGTEMP_MASK	(0xf << 3)
#define MAX77759_CHG_CNFG_07_REGTEMP_CLEAR	(~(0xf << 3))
#define MAX77759_CHG_CNFG_07_SPR_2_SHIFT	2
#define MAX77759_CHG_CNFG_07_SPR_2_MASK	(0x1 << 2)
#define MAX77759_CHG_CNFG_07_SPR_2_CLEAR	(~(0x1 << 2))
#define MAX77759_CHG_CNFG_07_FGSRC_SHIFT	1
#define MAX77759_CHG_CNFG_07_FGSRC_MASK	(0x1 << 1)
#define MAX77759_CHG_CNFG_07_FGSRC_CLEAR	(~(0x1 << 1))
#define MAX77759_CHG_CNFG_07_FSHIP_MODE_SHIFT	0
#define MAX77759_CHG_CNFG_07_FSHIP_MODE_MASK	(0x1 << 0)
#define MAX77759_CHG_CNFG_07_FSHIP_MODE_CLEAR	(~(0x1 << 0))

MAX77759_BFF(chg_cnfg_07_wd_qbatoff,7,7)
MAX77759_BFF(chg_cnfg_07_regtemp,6,3)
MAX77759_BFF(chg_cnfg_07_spr_2,2,2)
MAX77759_BFF(chg_cnfg_07_fgsrc,1,1)
MAX77759_BFF(chg_cnfg_07_fship_mode,0,0)
static inline const char *
max77759_chg_cnfg_07_cstr(char *buff, size_t len, int val)
{
#ifdef SCNPRINTF
	int i = 0;

	i += SCNPRINTF(&buff[i], len - i, " WD_QBATOFF=%x",
		FIELD2VALUE(MAX77759_CHG_CNFG_07_WD_QBATOFF, val));
	i += SCNPRINTF(&buff[i], len - i, " REGTEMP=%x",
		FIELD2VALUE(MAX77759_CHG_CNFG_07_REGTEMP, val));
	i += SCNPRINTF(&buff[i], len - i, " SPR_2=%x",
		FIELD2VALUE(MAX77759_CHG_CNFG_07_SPR_2, val));
	i += SCNPRINTF(&buff[i], len - i, " FGSRC=%x",
		FIELD2VALUE(MAX77759_CHG_CNFG_07_FGSRC, val));
	i += SCNPRINTF(&buff[i], len - i, " FSHIP_MODE=%x",
		FIELD2VALUE(MAX77759_CHG_CNFG_07_FSHIP_MODE, val));
#else
	buff[0] = 0;
#endif
	return buff;
}

/*
 * CHG_CNFG_08,0xC1,0b00000101,0x05
 * SPR_7,VCHGCV_WARM,ICHGCC_WARM,VCHGCV_COOL,ICHGCC_COOL,JEITA_EN,FSW[1:0]
 */
#define MAX77759_CHG_CNFG_08	0xC1
#define MAX77759_CHG_CNFG_08_SPR_7	(0x1 << 7)
#define MAX77759_CHG_CNFG_08_VCHGCV_WARM	(0x1 << 6)
#define MAX77759_CHG_CNFG_08_ICHGCC_WARM	(0x1 << 5)
#define MAX77759_CHG_CNFG_08_VCHGCV_COOL	(0x1 << 4)
#define MAX77759_CHG_CNFG_08_ICHGCC_COOL	(0x1 << 3)
#define MAX77759_CHG_CNFG_08_JEITA_EN	(0x1 << 2)

#define MAX77759_CHG_CNFG_08_SPR_7_SHIFT	7
#define MAX77759_CHG_CNFG_08_SPR_7_MASK	(0x1 << 7)
#define MAX77759_CHG_CNFG_08_SPR_7_CLEAR	(~(0x1 << 7))
#define MAX77759_CHG_CNFG_08_VCHGCV_WARM_SHIFT	6
#define MAX77759_CHG_CNFG_08_VCHGCV_WARM_MASK	(0x1 << 6)
#define MAX77759_CHG_CNFG_08_VCHGCV_WARM_CLEAR	(~(0x1 << 6))
#define MAX77759_CHG_CNFG_08_ICHGCC_WARM_SHIFT	5
#define MAX77759_CHG_CNFG_08_ICHGCC_WARM_MASK	(0x1 << 5)
#define MAX77759_CHG_CNFG_08_ICHGCC_WARM_CLEAR	(~(0x1 << 5))
#define MAX77759_CHG_CNFG_08_VCHGCV_COOL_SHIFT	4
#define MAX77759_CHG_CNFG_08_VCHGCV_COOL_MASK	(0x1 << 4)
#define MAX77759_CHG_CNFG_08_VCHGCV_COOL_CLEAR	(~(0x1 << 4))
#define MAX77759_CHG_CNFG_08_ICHGCC_COOL_SHIFT	3
#define MAX77759_CHG_CNFG_08_ICHGCC_COOL_MASK	(0x1 << 3)
#define MAX77759_CHG_CNFG_08_ICHGCC_COOL_CLEAR	(~(0x1 << 3))
#define MAX77759_CHG_CNFG_08_JEITA_EN_SHIFT	2
#define MAX77759_CHG_CNFG_08_JEITA_EN_MASK	(0x1 << 2)
#define MAX77759_CHG_CNFG_08_JEITA_EN_CLEAR	(~(0x1 << 2))
#define MAX77759_CHG_CNFG_08_FSW_SHIFT	0
#define MAX77759_CHG_CNFG_08_FSW_MASK	(0x3 << 0)
#define MAX77759_CHG_CNFG_08_FSW_CLEAR	(~(0x3 << 0))

MAX77759_BFF(chg_cnfg_08_spr_7,7,7)
MAX77759_BFF(chg_cnfg_08_vchgcv_warm,6,6)
MAX77759_BFF(chg_cnfg_08_ichgcc_warm,5,5)
MAX77759_BFF(chg_cnfg_08_vchgcv_cool,4,4)
MAX77759_BFF(chg_cnfg_08_ichgcc_cool,3,3)
MAX77759_BFF(chg_cnfg_08_jeita_en,2,2)
MAX77759_BFF(chg_cnfg_08_fsw,1,0)
static inline const char *
max77759_chg_cnfg_08_cstr(char *buff, size_t len, int val)
{
#ifdef SCNPRINTF
	int i = 0;

	i += SCNPRINTF(&buff[i], len - i, " SPR_7=%x",
		FIELD2VALUE(MAX77759_CHG_CNFG_08_SPR_7, val));
	i += SCNPRINTF(&buff[i], len - i, " VCHGCV_WARM=%x",
		FIELD2VALUE(MAX77759_CHG_CNFG_08_VCHGCV_WARM, val));
	i += SCNPRINTF(&buff[i], len - i, " ICHGCC_WARM=%x",
		FIELD2VALUE(MAX77759_CHG_CNFG_08_ICHGCC_WARM, val));
	i += SCNPRINTF(&buff[i], len - i, " VCHGCV_COOL=%x",
		FIELD2VALUE(MAX77759_CHG_CNFG_08_VCHGCV_COOL, val));
	i += SCNPRINTF(&buff[i], len - i, " ICHGCC_COOL=%x",
		FIELD2VALUE(MAX77759_CHG_CNFG_08_ICHGCC_COOL, val));
	i += SCNPRINTF(&buff[i], len - i, " JEITA_EN=%x",
		FIELD2VALUE(MAX77759_CHG_CNFG_08_JEITA_EN, val));
	i += SCNPRINTF(&buff[i], len - i, " FSW=%x",
		FIELD2VALUE(MAX77759_CHG_CNFG_08_FSW, val));
#else
	buff[0] = 0;
#endif
	return buff;
}

/*
 * CHG_CNFG_09,0xC2,0b00010011,0x13
 * NO_AUTOIBUS,CHGIN_ILIM[6:0],,,,,
 */
#define MAX77759_CHG_CNFG_09	0xC2
#define MAX77759_CHG_CNFG_09_NO_AUTOIBUS	(0x1 << 7)

#define MAX77759_CHG_CNFG_09_NO_AUTOIBUS_SHIFT	7
#define MAX77759_CHG_CNFG_09_NO_AUTOIBUS_MASK	(0x1 << 7)
#define MAX77759_CHG_CNFG_09_NO_AUTOIBUS_CLEAR	(~(0x1 << 7))
#define MAX77759_CHG_CNFG_09_CHGIN_ILIM_SHIFT	0
#define MAX77759_CHG_CNFG_09_CHGIN_ILIM_MASK	(0x7f << 0)
#define MAX77759_CHG_CNFG_09_CHGIN_ILIM_CLEAR	(~(0x7f << 0))

MAX77759_BFF(chg_cnfg_09_no_autoibus,7,7)
MAX77759_BFF(chg_cnfg_09_chgin_ilim,6,0)
static inline const char *
max77759_chg_cnfg_09_cstr(char *buff, size_t len, int val)
{
#ifdef SCNPRINTF
	int i = 0;

	i += SCNPRINTF(&buff[i], len - i, " NO_AUTOIBUS=%x",
		FIELD2VALUE(MAX77759_CHG_CNFG_09_NO_AUTOIBUS, val));
	i += SCNPRINTF(&buff[i], len - i, " CHGIN_ILIM=%x",
		FIELD2VALUE(MAX77759_CHG_CNFG_09_CHGIN_ILIM, val));
#else
	buff[0] = 0;
#endif
	return buff;
}

/*
 * CHG_CNFG_10,0xC3,0b00001111,0x0f
 * INPUT_MASK_CLR,SPR_6,WCIN_ILIM[5:0],,,,
 */
#define MAX77759_CHG_CNFG_10	0xC3
#define MAX77759_CHG_CNFG_10_INPUT_MASK_CLR	(0x1 << 7)
#define MAX77759_CHG_CNFG_10_SPR_6	(0x1 << 6)

#define MAX77759_CHG_CNFG_10_INPUT_MASK_CLR_SHIFT	7
#define MAX77759_CHG_CNFG_10_INPUT_MASK_CLR_MASK	(0x1 << 7)
#define MAX77759_CHG_CNFG_10_INPUT_MASK_CLR_CLEAR	(~(0x1 << 7))
#define MAX77759_CHG_CNFG_10_SPR_6_SHIFT	6
#define MAX77759_CHG_CNFG_10_SPR_6_MASK	(0x1 << 6)
#define MAX77759_CHG_CNFG_10_SPR_6_CLEAR	(~(0x1 << 6))
#define MAX77759_CHG_CNFG_10_WCIN_ILIM_SHIFT	0
#define MAX77759_CHG_CNFG_10_WCIN_ILIM_MASK	(0x3f << 0)
#define MAX77759_CHG_CNFG_10_WCIN_ILIM_CLEAR	(~(0x3f << 0))

MAX77759_BFF(chg_cnfg_10_input_mask_clr,7,7)
MAX77759_BFF(chg_cnfg_10_spr_6,6,6)
MAX77759_BFF(chg_cnfg_10_wcin_ilim,5,0)
static inline const char *
max77759_chg_cnfg_10_cstr(char *buff, size_t len, int val)
{
#ifdef SCNPRINTF
	int i = 0;

	i += SCNPRINTF(&buff[i], len - i, " INPUT_MASK_CLR=%x",
		FIELD2VALUE(MAX77759_CHG_CNFG_10_INPUT_MASK_CLR, val));
	i += SCNPRINTF(&buff[i], len - i, " SPR_6=%x",
		FIELD2VALUE(MAX77759_CHG_CNFG_10_SPR_6, val));
	i += SCNPRINTF(&buff[i], len - i, " WCIN_ILIM=%x",
		FIELD2VALUE(MAX77759_CHG_CNFG_10_WCIN_ILIM, val));
#else
	buff[0] = 0;
#endif
	return buff;
}

/*
 * CHG_CNFG_11,0xC4,0b00000000,0x00
 * VBYPSET[7:0],,,,,,
 */
#define MAX77759_CHG_CNFG_11	0xC4

/*
 * CHG_CNFG_12,0xC5,0b01101010,0x6a
 * CHG_EN,WCINSEL,CHGINSEL,VCHGIN_REG[1:0],,WCIN_REG[1:0],
 */
#define MAX77759_CHG_CNFG_12	0xC5
#define MAX77759_CHG_CNFG_12_CHG_EN	(0x1 << 7)
#define MAX77759_CHG_CNFG_12_WCINSEL	(0x1 << 6)
#define MAX77759_CHG_CNFG_12_CHGINSEL	(0x1 << 5)
#define MAX77759_CHG_CNFG_12_DISKIP	(0x1 << 0)

#define MAX77759_CHG_CNFG_12_CHG_EN_SHIFT	7
#define MAX77759_CHG_CNFG_12_CHG_EN_MASK	(0x1 << 7)
#define MAX77759_CHG_CNFG_12_CHG_EN_CLEAR	(~(0x1 << 7))
#define MAX77759_CHG_CNFG_12_WCINSEL_SHIFT	6
#define MAX77759_CHG_CNFG_12_WCINSEL_MASK	(0x1 << 6)
#define MAX77759_CHG_CNFG_12_WCINSEL_CLEAR	(~(0x1 << 6))
#define MAX77759_CHG_CNFG_12_CHGINSEL_SHIFT	5
#define MAX77759_CHG_CNFG_12_CHGINSEL_MASK	(0x1 << 5)
#define MAX77759_CHG_CNFG_12_CHGINSEL_CLEAR	(~(0x1 << 5))
#define MAX77759_CHG_CNFG_12_VCHGIN_REG_SHIFT	3
#define MAX77759_CHG_CNFG_12_VCHGIN_REG_MASK	(0x3 << 3)
#define MAX77759_CHG_CNFG_12_VCHGIN_REG_CLEAR	(~(0x3 << 3))
#define MAX77759_CHG_CNFG_12_WCIN_REG_SHIFT	1
#define MAX77759_CHG_CNFG_12_WCIN_REG_MASK	(0x3 << 1)
#define MAX77759_CHG_CNFG_12_WCIN_REG_CLEAR	(~(0x3 << 1))
#define MAX77759_CHG_CNFG_12_DISKIP_SHIFT	0
#define MAX77759_CHG_CNFG_12_DISKIP_MASK	(0x1 << 0)
#define MAX77759_CHG_CNFG_12_DISKIP_CLEAR	(~(0x1 << 0))

MAX77759_BFF(chg_cnfg_12_chg_en,7,7)
MAX77759_BFF(chg_cnfg_12_wcinsel,6,6)
MAX77759_BFF(chg_cnfg_12_chginsel,5,5)
MAX77759_BFF(chg_cnfg_12_vchgin_reg,4,3)
MAX77759_BFF(chg_cnfg_12_wcin_reg,2,1)
MAX77759_BFF(chg_cnfg_12_diskip,0,0)
static inline const char *
max77759_chg_cnfg_12_cstr(char *buff, size_t len, int val)
{
#ifdef SCNPRINTF
	int i = 0;

	i += SCNPRINTF(&buff[i], len - i, " CHG_EN=%x",
		FIELD2VALUE(MAX77759_CHG_CNFG_12_CHG_EN, val));
	i += SCNPRINTF(&buff[i], len - i, " WCINSEL=%x",
		FIELD2VALUE(MAX77759_CHG_CNFG_12_WCINSEL, val));
	i += SCNPRINTF(&buff[i], len - i, " CHGINSEL=%x",
		FIELD2VALUE(MAX77759_CHG_CNFG_12_CHGINSEL, val));
	i += SCNPRINTF(&buff[i], len - i, " VCHGIN_REG=%x",
		FIELD2VALUE(MAX77759_CHG_CNFG_12_VCHGIN_REG, val));
	i += SCNPRINTF(&buff[i], len - i, " WCIN_REG=%x",
		FIELD2VALUE(MAX77759_CHG_CNFG_12_WCIN_REG, val));
	i += SCNPRINTF(&buff[i], len - i, " DISKIP=%x",
		FIELD2VALUE(MAX77759_CHG_CNFG_12_DISKIP, val));
#else
	buff[0] = 0;
#endif
	return buff;
}

/*
 * CHG_CNFG_13,0xC6,0b00000011,0x03
 * EN_FG_ILIM_CTRL,THM_CHR_RSTART,THM_CC_HZ,THM_BUCK_DIS,THM2_HW_CTRL,USB_TEMP[2:0],
 */
#define MAX77759_CHG_CNFG_13	0xC6
#define MAX77759_CHG_CNFG_13_EN_FG_ILIM_CTRL	(0x1 << 7)
#define MAX77759_CHG_CNFG_13_THM_CHR_RSTART	(0x1 << 6)
#define MAX77759_CHG_CNFG_13_THM_CC_HZ	(0x1 << 5)
#define MAX77759_CHG_CNFG_13_THM_BUCK_DIS	(0x1 << 4)
#define MAX77759_CHG_CNFG_13_THM2_HW_CTRL	(0x1 << 3)

#define MAX77759_CHG_CNFG_13_EN_FG_ILIM_CTRL_SHIFT	7
#define MAX77759_CHG_CNFG_13_EN_FG_ILIM_CTRL_MASK	(0x1 << 7)
#define MAX77759_CHG_CNFG_13_EN_FG_ILIM_CTRL_CLEAR	(~(0x1 << 7))
#define MAX77759_CHG_CNFG_13_THM_CHR_RSTART_SHIFT	6
#define MAX77759_CHG_CNFG_13_THM_CHR_RSTART_MASK	(0x1 << 6)
#define MAX77759_CHG_CNFG_13_THM_CHR_RSTART_CLEAR	(~(0x1 << 6))
#define MAX77759_CHG_CNFG_13_THM_CC_HZ_SHIFT	5
#define MAX77759_CHG_CNFG_13_THM_CC_HZ_MASK	(0x1 << 5)
#define MAX77759_CHG_CNFG_13_THM_CC_HZ_CLEAR	(~(0x1 << 5))
#define MAX77759_CHG_CNFG_13_THM_BUCK_DIS_SHIFT	4
#define MAX77759_CHG_CNFG_13_THM_BUCK_DIS_MASK	(0x1 << 4)
#define MAX77759_CHG_CNFG_13_THM_BUCK_DIS_CLEAR	(~(0x1 << 4))
#define MAX77759_CHG_CNFG_13_THM2_HW_CTRL_SHIFT	3
#define MAX77759_CHG_CNFG_13_THM2_HW_CTRL_MASK	(0x1 << 3)
#define MAX77759_CHG_CNFG_13_THM2_HW_CTRL_CLEAR	(~(0x1 << 3))
#define MAX77759_CHG_CNFG_13_USB_TEMP_SHIFT	0
#define MAX77759_CHG_CNFG_13_USB_TEMP_MASK	(0x7 << 0)
#define MAX77759_CHG_CNFG_13_USB_TEMP_CLEAR	(~(0x7 << 0))

MAX77759_BFF(chg_cnfg_13_en_fg_ilim_ctrl,7,7)
MAX77759_BFF(chg_cnfg_13_thm_chr_rstart,6,6)
MAX77759_BFF(chg_cnfg_13_thm_cc_hz,5,5)
MAX77759_BFF(chg_cnfg_13_thm_buck_dis,4,4)
MAX77759_BFF(chg_cnfg_13_thm2_hw_ctrl,3,3)
MAX77759_BFF(chg_cnfg_13_usb_temp,2,0)
static inline const char *
max77759_chg_cnfg_13_cstr(char *buff, size_t len, int val)
{
#ifdef SCNPRINTF
	int i = 0;

	i += SCNPRINTF(&buff[i], len - i, " EN_FG_ILIM_CTRL=%x",
		FIELD2VALUE(MAX77759_CHG_CNFG_13_EN_FG_ILIM_CTRL, val));
	i += SCNPRINTF(&buff[i], len - i, " THM_CHR_RSTART=%x",
		FIELD2VALUE(MAX77759_CHG_CNFG_13_THM_CHR_RSTART, val));
	i += SCNPRINTF(&buff[i], len - i, " THM_CC_HZ=%x",
		FIELD2VALUE(MAX77759_CHG_CNFG_13_THM_CC_HZ, val));
	i += SCNPRINTF(&buff[i], len - i, " THM_BUCK_DIS=%x",
		FIELD2VALUE(MAX77759_CHG_CNFG_13_THM_BUCK_DIS, val));
	i += SCNPRINTF(&buff[i], len - i, " THM2_HW_CTRL=%x",
		FIELD2VALUE(MAX77759_CHG_CNFG_13_THM2_HW_CTRL, val));
	i += SCNPRINTF(&buff[i], len - i, " USB_TEMP=%x",
		FIELD2VALUE(MAX77759_CHG_CNFG_13_USB_TEMP, val));
#else
	buff[0] = 0;
#endif
	return buff;
}

/*
 * CHG_CNFG_14,0xC7,0b00000110,0x06
 * BAT_OILO_REL[1:0],,BAT_OPEN_TO[1:0],,BAT_OILO[3:0],,
 */
#define MAX77759_CHG_CNFG_14	0xC7

#define MAX77759_CHG_CNFG_14_BAT_OILO_REL_SHIFT	6
#define MAX77759_CHG_CNFG_14_BAT_OILO_REL_MASK	(0x3 << 6)
#define MAX77759_CHG_CNFG_14_BAT_OILO_REL_CLEAR	(~(0x3 << 6))
#define MAX77759_CHG_CNFG_14_BAT_OPEN_TO_SHIFT	4
#define MAX77759_CHG_CNFG_14_BAT_OPEN_TO_MASK	(0x3 << 4)
#define MAX77759_CHG_CNFG_14_BAT_OPEN_TO_CLEAR	(~(0x3 << 4))
#define MAX77759_CHG_CNFG_14_BAT_OILO_SHIFT	0
#define MAX77759_CHG_CNFG_14_BAT_OILO_MASK	(0xf << 0)
#define MAX77759_CHG_CNFG_14_BAT_OILO_CLEAR	(~(0xf << 0))

MAX77759_BFF(chg_cnfg_14_bat_oilo_rel,7,6)
MAX77759_BFF(chg_cnfg_14_bat_open_to,5,4)
MAX77759_BFF(chg_cnfg_14_bat_oilo,3,0)
static inline const char *
max77759_chg_cnfg_14_cstr(char *buff, size_t len, int val)
{
#ifdef SCNPRINTF
	int i = 0;

	i += SCNPRINTF(&buff[i], len - i, " BAT_OILO_REL=%x",
		FIELD2VALUE(MAX77759_CHG_CNFG_14_BAT_OILO_REL, val));
	i += SCNPRINTF(&buff[i], len - i, " BAT_OPEN_TO=%x",
		FIELD2VALUE(MAX77759_CHG_CNFG_14_BAT_OPEN_TO, val));
	i += SCNPRINTF(&buff[i], len - i, " BAT_OILO=%x",
		FIELD2VALUE(MAX77759_CHG_CNFG_14_BAT_OILO, val));
#else
	buff[0] = 0;
#endif
	return buff;
}

/*
 * CHG_CNFG_15,0xC8,0b00001000,0x08
 * SYS_UVLO1_REL[1:0],,SYS_UVLO1_HYST[1:0],,SYS_UVLO1[3:0],,
 */
#define MAX77759_CHG_CNFG_15	0xC8

#define MAX77759_CHG_CNFG_15_SYS_UVLO1_REL_SHIFT	6
#define MAX77759_CHG_CNFG_15_SYS_UVLO1_REL_MASK	(0x3 << 6)
#define MAX77759_CHG_CNFG_15_SYS_UVLO1_REL_CLEAR	(~(0x3 << 6))
#define MAX77759_CHG_CNFG_15_SYS_UVLO1_HYST_SHIFT	4
#define MAX77759_CHG_CNFG_15_SYS_UVLO1_HYST_MASK	(0x3 << 4)
#define MAX77759_CHG_CNFG_15_SYS_UVLO1_HYST_CLEAR	(~(0x3 << 4))
#define MAX77759_CHG_CNFG_15_SYS_UVLO1_SHIFT	0
#define MAX77759_CHG_CNFG_15_SYS_UVLO1_MASK	(0xf << 0)
#define MAX77759_CHG_CNFG_15_SYS_UVLO1_CLEAR	(~(0xf << 0))

MAX77759_BFF(chg_cnfg_15_sys_uvlo1_rel,7,6)
MAX77759_BFF(chg_cnfg_15_sys_uvlo1_hyst,5,4)
MAX77759_BFF(chg_cnfg_15_sys_uvlo1,3,0)
static inline const char *
max77759_chg_cnfg_15_cstr(char *buff, size_t len, int val)
{
#ifdef SCNPRINTF
	int i = 0;

	i += SCNPRINTF(&buff[i], len - i, " SYS_UVLO1_REL=%x",
		FIELD2VALUE(MAX77759_CHG_CNFG_15_SYS_UVLO1_REL, val));
	i += SCNPRINTF(&buff[i], len - i, " SYS_UVLO1_HYST=%x",
		FIELD2VALUE(MAX77759_CHG_CNFG_15_SYS_UVLO1_HYST, val));
	i += SCNPRINTF(&buff[i], len - i, " SYS_UVLO1=%x",
		FIELD2VALUE(MAX77759_CHG_CNFG_15_SYS_UVLO1, val));
#else
	buff[0] = 0;
#endif
	return buff;
}

/*
 * CHG_CNFG_16,0xC9,0b00000100,0x04
 * SYS_UVLO2_REL[1:0],,SYS_UVLO2_HYST[1:0],,SYS_UVLO2[3:0],,
 */
#define MAX77759_CHG_CNFG_16	0xC9

#define MAX77759_CHG_CNFG_16_SYS_UVLO2_REL_SHIFT	6
#define MAX77759_CHG_CNFG_16_SYS_UVLO2_REL_MASK	(0x3 << 6)
#define MAX77759_CHG_CNFG_16_SYS_UVLO2_REL_CLEAR	(~(0x3 << 6))
#define MAX77759_CHG_CNFG_16_SYS_UVLO2_HYST_SHIFT	4
#define MAX77759_CHG_CNFG_16_SYS_UVLO2_HYST_MASK	(0x3 << 4)
#define MAX77759_CHG_CNFG_16_SYS_UVLO2_HYST_CLEAR	(~(0x3 << 4))
#define MAX77759_CHG_CNFG_16_SYS_UVLO2_SHIFT	0
#define MAX77759_CHG_CNFG_16_SYS_UVLO2_MASK	(0xf << 0)
#define MAX77759_CHG_CNFG_16_SYS_UVLO2_CLEAR	(~(0xf << 0))

MAX77759_BFF(chg_cnfg_16_sys_uvlo2_rel,7,6)
MAX77759_BFF(chg_cnfg_16_sys_uvlo2_hyst,5,4)
MAX77759_BFF(chg_cnfg_16_sys_uvlo2,3,0)
static inline const char *
max77759_chg_cnfg_16_cstr(char *buff, size_t len, int val)
{
#ifdef SCNPRINTF
	int i = 0;

	i += SCNPRINTF(&buff[i], len - i, " SYS_UVLO2_REL=%x",
		FIELD2VALUE(MAX77759_CHG_CNFG_16_SYS_UVLO2_REL, val));
	i += SCNPRINTF(&buff[i], len - i, " SYS_UVLO2_HYST=%x",
		FIELD2VALUE(MAX77759_CHG_CNFG_16_SYS_UVLO2_HYST, val));
	i += SCNPRINTF(&buff[i], len - i, " SYS_UVLO2=%x",
		FIELD2VALUE(MAX77759_CHG_CNFG_16_SYS_UVLO2, val));
#else
	buff[0] = 0;
#endif
	return buff;
}

/*
 * CHG_CNFG_17,0xCA,0b01000000,0x40
 * AICL[1:0],,SPR_5_3[2:0],,,BAT_OILO_DET,SYS_UVLO2_DET
 */
#define MAX77759_CHG_CNFG_17	0xCA
#define MAX77759_CHG_CNFG_17_BAT_OILO_DET	(0x1 << 2)
#define MAX77759_CHG_CNFG_17_SYS_UVLO2_DET	(0x1 << 1)
#define MAX77759_CHG_CNFG_17_SYS_UVLO1_DET	(0x1 << 0)

#define MAX77759_CHG_CNFG_17_AICL_SHIFT	6
#define MAX77759_CHG_CNFG_17_AICL_MASK	(0x3 << 6)
#define MAX77759_CHG_CNFG_17_AICL_CLEAR	(~(0x3 << 6))
#define MAX77759_CHG_CNFG_17_SPR_5_3_SHIFT	3
#define MAX77759_CHG_CNFG_17_SPR_5_3_MASK	(0x7 << 3)
#define MAX77759_CHG_CNFG_17_SPR_5_3_CLEAR	(~(0x7 << 3))
#define MAX77759_CHG_CNFG_17_BAT_OILO_DET_SHIFT	2
#define MAX77759_CHG_CNFG_17_BAT_OILO_DET_MASK	(0x1 << 2)
#define MAX77759_CHG_CNFG_17_BAT_OILO_DET_CLEAR	(~(0x1 << 2))
#define MAX77759_CHG_CNFG_17_SYS_UVLO2_DET_SHIFT	1
#define MAX77759_CHG_CNFG_17_SYS_UVLO2_DET_MASK	(0x1 << 1)
#define MAX77759_CHG_CNFG_17_SYS_UVLO2_DET_CLEAR	(~(0x1 << 1))
#define MAX77759_CHG_CNFG_17_SYS_UVLO1_DET_SHIFT	0
#define MAX77759_CHG_CNFG_17_SYS_UVLO1_DET_MASK	(0x1 << 0)
#define MAX77759_CHG_CNFG_17_SYS_UVLO1_DET_CLEAR	(~(0x1 << 0))

MAX77759_BFF(chg_cnfg_17_aicl,7,6)
MAX77759_BFF(chg_cnfg_17_spr_5_3,5,3)
MAX77759_BFF(chg_cnfg_17_bat_oilo_det,2,2)
MAX77759_BFF(chg_cnfg_17_sys_uvlo2_det,1,1)
MAX77759_BFF(chg_cnfg_17_sys_uvlo1_det,0,0)
static inline const char *
max77759_chg_cnfg_17_cstr(char *buff, size_t len, int val)
{
#ifdef SCNPRINTF
	int i = 0;

	i += SCNPRINTF(&buff[i], len - i, " AICL=%x",
		FIELD2VALUE(MAX77759_CHG_CNFG_17_AICL, val));
	i += SCNPRINTF(&buff[i], len - i, " SPR_5_3=%x",
		FIELD2VALUE(MAX77759_CHG_CNFG_17_SPR_5_3, val));
	i += SCNPRINTF(&buff[i], len - i, " BAT_OILO_DET=%x",
		FIELD2VALUE(MAX77759_CHG_CNFG_17_BAT_OILO_DET, val));
	i += SCNPRINTF(&buff[i], len - i, " SYS_UVLO2_DET=%x",
		FIELD2VALUE(MAX77759_CHG_CNFG_17_SYS_UVLO2_DET, val));
	i += SCNPRINTF(&buff[i], len - i, " SYS_UVLO1_DET=%x",
		FIELD2VALUE(MAX77759_CHG_CNFG_17_SYS_UVLO1_DET, val));
#else
	buff[0] = 0;
#endif
	return buff;
}

/*
 * CHG_CNFG_18,0xCB,0b11000000,0xc0
 * VDP1_STP_BST,VDP2_STP_BST,MINVSYS[1:0],,OTG_V_PGM,SPSN_DET_EN,MASTER_DC
 */
#define MAX77759_CHG_CNFG_18	0xCB
#define MAX77759_CHG_CNFG_18_VDP1_STP_BST	(0x1 << 7)
#define MAX77759_CHG_CNFG_18_VDP2_STP_BST	(0x1 << 6)
#define MAX77759_CHG_CNFG_18_OTG_V_PGM	(0x1 << 3)
#define MAX77759_CHG_CNFG_18_SPSN_DET_EN	(0x1 << 2)
#define MAX77759_CHG_CNFG_18_MASTER_DC	(0x1 << 1)
#define MAX77759_CHG_CNFG_18_WDTEN	(0x1 << 0)

#define MAX77759_CHG_CNFG_18_VDP1_STP_BST_SHIFT	7
#define MAX77759_CHG_CNFG_18_VDP1_STP_BST_MASK	(0x1 << 7)
#define MAX77759_CHG_CNFG_18_VDP1_STP_BST_CLEAR	(~(0x1 << 7))
#define MAX77759_CHG_CNFG_18_VDP2_STP_BST_SHIFT	6
#define MAX77759_CHG_CNFG_18_VDP2_STP_BST_MASK	(0x1 << 6)
#define MAX77759_CHG_CNFG_18_VDP2_STP_BST_CLEAR	(~(0x1 << 6))
#define MAX77759_CHG_CNFG_18_MINVSYS_SHIFT	4
#define MAX77759_CHG_CNFG_18_MINVSYS_MASK	(0x3 << 4)
#define MAX77759_CHG_CNFG_18_MINVSYS_CLEAR	(~(0x3 << 4))
#define MAX77759_CHG_CNFG_18_OTG_V_PGM_SHIFT	3
#define MAX77759_CHG_CNFG_18_OTG_V_PGM_MASK	(0x1 << 3)
#define MAX77759_CHG_CNFG_18_OTG_V_PGM_CLEAR	(~(0x1 << 3))
#define MAX77759_CHG_CNFG_18_SPSN_DET_EN_SHIFT	2
#define MAX77759_CHG_CNFG_18_SPSN_DET_EN_MASK	(0x1 << 2)
#define MAX77759_CHG_CNFG_18_SPSN_DET_EN_CLEAR	(~(0x1 << 2))
#define MAX77759_CHG_CNFG_18_MASTER_DC_SHIFT	1
#define MAX77759_CHG_CNFG_18_MASTER_DC_MASK	(0x1 << 1)
#define MAX77759_CHG_CNFG_18_MASTER_DC_CLEAR	(~(0x1 << 1))
#define MAX77759_CHG_CNFG_18_WDTEN_SHIFT	0
#define MAX77759_CHG_CNFG_18_WDTEN_MASK	(0x1 << 0)
#define MAX77759_CHG_CNFG_18_WDTEN_CLEAR	(~(0x1 << 0))

MAX77759_BFF(chg_cnfg_18_vdp1_stp_bst,7,7)
MAX77759_BFF(chg_cnfg_18_vdp2_stp_bst,6,6)
MAX77759_BFF(chg_cnfg_18_minvsys,5,4)
MAX77759_BFF(chg_cnfg_18_otg_v_pgm,3,3)
MAX77759_BFF(chg_cnfg_18_spsn_det_en,2,2)
MAX77759_BFF(chg_cnfg_18_master_dc,1,1)
MAX77759_BFF(chg_cnfg_18_wdten,0,0)
static inline const char *
max77759_chg_cnfg_18_cstr(char *buff, size_t len, int val)
{
#ifdef SCNPRINTF
	int i = 0;

	i += SCNPRINTF(&buff[i], len - i, " VDP1_STP_BST=%x",
		FIELD2VALUE(MAX77759_CHG_CNFG_18_VDP1_STP_BST, val));
	i += SCNPRINTF(&buff[i], len - i, " VDP2_STP_BST=%x",
		FIELD2VALUE(MAX77759_CHG_CNFG_18_VDP2_STP_BST, val));
	i += SCNPRINTF(&buff[i], len - i, " MINVSYS=%x",
		FIELD2VALUE(MAX77759_CHG_CNFG_18_MINVSYS, val));
	i += SCNPRINTF(&buff[i], len - i, " OTG_V_PGM=%x",
		FIELD2VALUE(MAX77759_CHG_CNFG_18_OTG_V_PGM, val));
	i += SCNPRINTF(&buff[i], len - i, " SPSN_DET_EN=%x",
		FIELD2VALUE(MAX77759_CHG_CNFG_18_SPSN_DET_EN, val));
	i += SCNPRINTF(&buff[i], len - i, " MASTER_DC=%x",
		FIELD2VALUE(MAX77759_CHG_CNFG_18_MASTER_DC, val));
	i += SCNPRINTF(&buff[i], len - i, " WDTEN=%x",
		FIELD2VALUE(MAX77759_CHG_CNFG_18_WDTEN, val));
#else
	buff[0] = 0;
#endif
	return buff;
}

/*
 * CHG_CNFG_19,0xCC,0b00010000,0x10
 * SPR_7_5[2:0],,,INLIM_CLK[1:0],,DIS_IR_CTRL,SLOWLX[1:0]
 */
#define MAX77759_CHG_CNFG_19	0xCC

/* section:  FuelGauge  */
#define MAX77759_CHG_CNFG_19_DIS_IR_CTRL	(0x1 << 2)

#define MAX77759_CHG_CNFG_19_SPR_7_5_SHIFT	5
#define MAX77759_CHG_CNFG_19_SPR_7_5_MASK	(0x7 << 5)
#define MAX77759_CHG_CNFG_19_SPR_7_5_CLEAR	(~(0x7 << 5))
#define MAX77759_CHG_CNFG_19_INLIM_CLK_SHIFT	3
#define MAX77759_CHG_CNFG_19_INLIM_CLK_MASK	(0x3 << 3)
#define MAX77759_CHG_CNFG_19_INLIM_CLK_CLEAR	(~(0x3 << 3))
#define MAX77759_CHG_CNFG_19_DIS_IR_CTRL_SHIFT	2
#define MAX77759_CHG_CNFG_19_DIS_IR_CTRL_MASK	(0x1 << 2)
#define MAX77759_CHG_CNFG_19_DIS_IR_CTRL_CLEAR	(~(0x1 << 2))
#define MAX77759_CHG_CNFG_19_SLOWLX_SHIFT	0
#define MAX77759_CHG_CNFG_19_SLOWLX_MASK	(0x3 << 0)
#define MAX77759_CHG_CNFG_19_SLOWLX_CLEAR	(~(0x3 << 0))

MAX77759_BFF(chg_cnfg_19_spr_7_5,7,5)
MAX77759_BFF(chg_cnfg_19_inlim_clk,4,3)
MAX77759_BFF(chg_cnfg_19_dis_ir_ctrl,2,2)
MAX77759_BFF(chg_cnfg_19_slowlx,1,0)
static inline const char *
max77759_chg_cnfg_19_cstr(char *buff, size_t len, int val)
{
#ifdef SCNPRINTF
	int i = 0;

	i += SCNPRINTF(&buff[i], len - i, " SPR_7_5=%x",
		FIELD2VALUE(MAX77759_CHG_CNFG_19_SPR_7_5, val));
	i += SCNPRINTF(&buff[i], len - i, " INLIM_CLK=%x",
		FIELD2VALUE(MAX77759_CHG_CNFG_19_INLIM_CLK, val));
	i += SCNPRINTF(&buff[i], len - i, " DIS_IR_CTRL=%x",
		FIELD2VALUE(MAX77759_CHG_CNFG_19_DIS_IR_CTRL, val));
	i += SCNPRINTF(&buff[i], len - i, " SLOWLX=%x",
		FIELD2VALUE(MAX77759_CHG_CNFG_19_SLOWLX, val));
#else
	buff[0] = 0;
#endif
	return buff;
}

/*
 * Status,0x0,0b00000010,0x02
 * Br,Smx,Tmx,Vmx,Bi,Smn,Tmn
 */
#define MAX77759_FG_STATUS	0x0
#define MAX77759_FG_STATUS_BR	(0x1 << 15)
#define MAX77759_FG_STATUS_SMX	(0x1 << 14)
#define MAX77759_FG_STATUS_TMX	(0x1 << 13)
#define MAX77759_FG_STATUS_VMX	(0x1 << 12)
#define MAX77759_FG_STATUS_BI	(0x1 << 11)
#define MAX77759_FG_STATUS_SMN	(0x1 << 10)
#define MAX77759_FG_STATUS_TMN	(0x1 << 9)
#define MAX77759_FG_STATUS_VMN	(0x1 << 8)
#define MAX77759_FG_STATUS_DSOCI	(0x1 << 7)
#define MAX77759_FG_STATUS_THMHOT	(0x1 << 6)
#define MAX77759_FG_STATUS_SPR_5	(0x1 << 5)
#define MAX77759_FG_STATUS_ISYSMX	(0x1 << 4)
#define MAX77759_FG_STATUS_BST	(0x1 << 3)
#define MAX77759_FG_STATUS_SPR_2	(0x1 << 2)
#define MAX77759_FG_STATUS_POR	(0x1 << 1)
#define MAX77759_FG_STATUS_IMN	(0x1 << 0)

#define MAX77759_FG_STATUS_BR_SHIFT	15
#define MAX77759_FG_STATUS_BR_MASK	(0x1 << 15)
#define MAX77759_FG_STATUS_BR_CLEAR	(~(0x1 << 15))
#define MAX77759_FG_STATUS_SMX_SHIFT	14
#define MAX77759_FG_STATUS_SMX_MASK	(0x1 << 14)
#define MAX77759_FG_STATUS_SMX_CLEAR	(~(0x1 << 14))
#define MAX77759_FG_STATUS_TMX_SHIFT	13
#define MAX77759_FG_STATUS_TMX_MASK	(0x1 << 13)
#define MAX77759_FG_STATUS_TMX_CLEAR	(~(0x1 << 13))
#define MAX77759_FG_STATUS_VMX_SHIFT	12
#define MAX77759_FG_STATUS_VMX_MASK	(0x1 << 12)
#define MAX77759_FG_STATUS_VMX_CLEAR	(~(0x1 << 12))
#define MAX77759_FG_STATUS_BI_SHIFT	11
#define MAX77759_FG_STATUS_BI_MASK	(0x1 << 11)
#define MAX77759_FG_STATUS_BI_CLEAR	(~(0x1 << 11))
#define MAX77759_FG_STATUS_SMN_SHIFT	10
#define MAX77759_FG_STATUS_SMN_MASK	(0x1 << 10)
#define MAX77759_FG_STATUS_SMN_CLEAR	(~(0x1 << 10))
#define MAX77759_FG_STATUS_TMN_SHIFT	9
#define MAX77759_FG_STATUS_TMN_MASK	(0x1 << 9)
#define MAX77759_FG_STATUS_TMN_CLEAR	(~(0x1 << 9))
#define MAX77759_FG_STATUS_VMN_SHIFT	8
#define MAX77759_FG_STATUS_VMN_MASK	(0x1 << 8)
#define MAX77759_FG_STATUS_VMN_CLEAR	(~(0x1 << 8))
#define MAX77759_FG_STATUS_DSOCI_SHIFT	7
#define MAX77759_FG_STATUS_DSOCI_MASK	(0x1 << 7)
#define MAX77759_FG_STATUS_DSOCI_CLEAR	(~(0x1 << 7))
#define MAX77759_FG_STATUS_THMHOT_SHIFT	6
#define MAX77759_FG_STATUS_THMHOT_MASK	(0x1 << 6)
#define MAX77759_FG_STATUS_THMHOT_CLEAR	(~(0x1 << 6))
#define MAX77759_FG_STATUS_SPR_5_SHIFT	5
#define MAX77759_FG_STATUS_SPR_5_MASK	(0x1 << 5)
#define MAX77759_FG_STATUS_SPR_5_CLEAR	(~(0x1 << 5))
#define MAX77759_FG_STATUS_ISYSMX_SHIFT	4
#define MAX77759_FG_STATUS_ISYSMX_MASK	(0x1 << 4)
#define MAX77759_FG_STATUS_ISYSMX_CLEAR	(~(0x1 << 4))
#define MAX77759_FG_STATUS_BST_SHIFT	3
#define MAX77759_FG_STATUS_BST_MASK	(0x1 << 3)
#define MAX77759_FG_STATUS_BST_CLEAR	(~(0x1 << 3))
#define MAX77759_FG_STATUS_SPR_2_SHIFT	2
#define MAX77759_FG_STATUS_SPR_2_MASK	(0x1 << 2)
#define MAX77759_FG_STATUS_SPR_2_CLEAR	(~(0x1 << 2))
#define MAX77759_FG_STATUS_POR_SHIFT	1
#define MAX77759_FG_STATUS_POR_MASK	(0x1 << 1)
#define MAX77759_FG_STATUS_POR_CLEAR	(~(0x1 << 1))
#define MAX77759_FG_STATUS_IMN_SHIFT	0
#define MAX77759_FG_STATUS_IMN_MASK	(0x1 << 0)
#define MAX77759_FG_STATUS_IMN_CLEAR	(~(0x1 << 0))

MAX77759_BFF(fg_status_br,15,15)
MAX77759_BFF(fg_status_smx,14,14)
MAX77759_BFF(fg_status_tmx,13,13)
MAX77759_BFF(fg_status_vmx,12,12)
MAX77759_BFF(fg_status_bi,11,11)
MAX77759_BFF(fg_status_smn,10,10)
MAX77759_BFF(fg_status_tmn,9,9)
MAX77759_BFF(fg_status_vmn,8,8)
MAX77759_BFF(fg_status_dsoci,7,7)
MAX77759_BFF(fg_status_thmhot,6,6)
MAX77759_BFF(fg_status_spr_5,5,5)
MAX77759_BFF(fg_status_isysmx,4,4)
MAX77759_BFF(fg_status_bst,3,3)
MAX77759_BFF(fg_status_spr_2,2,2)
MAX77759_BFF(fg_status_por,1,1)
MAX77759_BFF(fg_status_imn,0,0)
static inline const char *
max77759_fg_status_cstr(char *buff, size_t len, int val)
{
#ifdef SCNPRINTF
	int i = 0;

	i += SCNPRINTF(&buff[i], len - i, " BR=%x",
		FIELD2VALUE(MAX77759_FG_STATUS_BR, val));
	i += SCNPRINTF(&buff[i], len - i, " SMX=%x",
		FIELD2VALUE(MAX77759_FG_STATUS_SMX, val));
	i += SCNPRINTF(&buff[i], len - i, " TMX=%x",
		FIELD2VALUE(MAX77759_FG_STATUS_TMX, val));
	i += SCNPRINTF(&buff[i], len - i, " VMX=%x",
		FIELD2VALUE(MAX77759_FG_STATUS_VMX, val));
	i += SCNPRINTF(&buff[i], len - i, " BI=%x",
		FIELD2VALUE(MAX77759_FG_STATUS_BI, val));
	i += SCNPRINTF(&buff[i], len - i, " SMN=%x",
		FIELD2VALUE(MAX77759_FG_STATUS_SMN, val));
	i += SCNPRINTF(&buff[i], len - i, " TMN=%x",
		FIELD2VALUE(MAX77759_FG_STATUS_TMN, val));
	i += SCNPRINTF(&buff[i], len - i, " VMN=%x",
		FIELD2VALUE(MAX77759_FG_STATUS_VMN, val));
	i += SCNPRINTF(&buff[i], len - i, " DSOCI=%x",
		FIELD2VALUE(MAX77759_FG_STATUS_DSOCI, val));
	i += SCNPRINTF(&buff[i], len - i, " THMHOT=%x",
		FIELD2VALUE(MAX77759_FG_STATUS_THMHOT, val));
	i += SCNPRINTF(&buff[i], len - i, " SPR_5=%x",
		FIELD2VALUE(MAX77759_FG_STATUS_SPR_5, val));
	i += SCNPRINTF(&buff[i], len - i, " ISYSMX=%x",
		FIELD2VALUE(MAX77759_FG_STATUS_ISYSMX, val));
	i += SCNPRINTF(&buff[i], len - i, " BST=%x",
		FIELD2VALUE(MAX77759_FG_STATUS_BST, val));
	i += SCNPRINTF(&buff[i], len - i, " SPR_2=%x",
		FIELD2VALUE(MAX77759_FG_STATUS_SPR_2, val));
	i += SCNPRINTF(&buff[i], len - i, " POR=%x",
		FIELD2VALUE(MAX77759_FG_STATUS_POR, val));
	i += SCNPRINTF(&buff[i], len - i, " IMN=%x",
		FIELD2VALUE(MAX77759_FG_STATUS_IMN, val));
#else
	buff[0] = 0;
#endif
	return buff;
}

/*
 * VAlrtTh,0x1,0b1111111100000000,0xff00
 * MaxVoltageAlrt[7:0],,,,,,
 */
#define MAX77759_FG_VALRTTH	0x1

#define MAX77759_FG_VALRTTH_MAXVOLTAGEALRT_SHIFT	8
#define MAX77759_FG_VALRTTH_MAXVOLTAGEALRT_MASK	(0xff << 8)
#define MAX77759_FG_VALRTTH_MAXVOLTAGEALRT_CLEAR	(~(0xff << 8))
#define MAX77759_FG_VALRTTH_MINVOLTAGEALRT_SHIFT	0
#define MAX77759_FG_VALRTTH_MINVOLTAGEALRT_MASK	(0xff << 0)
#define MAX77759_FG_VALRTTH_MINVOLTAGEALRT_CLEAR	(~(0xff << 0))

MAX77759_BFF(fg_valrtth_maxvoltagealrt,15,8)
MAX77759_BFF(fg_valrtth_minvoltagealrt,7,0)
static inline const char *
max77759_fg_valrtth_cstr(char *buff, size_t len, int val)
{
#ifdef SCNPRINTF
	int i = 0;

	i += SCNPRINTF(&buff[i], len - i, " MAXVOLTAGEALRT=%x",
		FIELD2VALUE(MAX77759_FG_VALRTTH_MAXVOLTAGEALRT, val));
	i += SCNPRINTF(&buff[i], len - i, " MINVOLTAGEALRT=%x",
		FIELD2VALUE(MAX77759_FG_VALRTTH_MINVOLTAGEALRT, val));
#else
	buff[0] = 0;
#endif
	return buff;
}

/*
 * TAlrtTh,0x2,0b111111110000000,0x7f80
 * MaxTempAlrt[7:0],,,,,,
 */
#define MAX77759_FG_TALRTTH	0x2

#define MAX77759_FG_TALRTTH_MAXTEMPALRT_SHIFT	8
#define MAX77759_FG_TALRTTH_MAXTEMPALRT_MASK	(0xff << 8)
#define MAX77759_FG_TALRTTH_MAXTEMPALRT_CLEAR	(~(0xff << 8))
#define MAX77759_FG_TALRTTH_MINTEMPALRT_SHIFT	0
#define MAX77759_FG_TALRTTH_MINTEMPALRT_MASK	(0xff << 0)
#define MAX77759_FG_TALRTTH_MINTEMPALRT_CLEAR	(~(0xff << 0))

MAX77759_BFF(fg_talrtth_maxtempalrt,15,8)
MAX77759_BFF(fg_talrtth_mintempalrt,7,0)
static inline const char *
max77759_fg_talrtth_cstr(char *buff, size_t len, int val)
{
#ifdef SCNPRINTF
	int i = 0;

	i += SCNPRINTF(&buff[i], len - i, " MAXTEMPALRT=%x",
		FIELD2VALUE(MAX77759_FG_TALRTTH_MAXTEMPALRT, val));
	i += SCNPRINTF(&buff[i], len - i, " MINTEMPALRT=%x",
		FIELD2VALUE(MAX77759_FG_TALRTTH_MINTEMPALRT, val));
#else
	buff[0] = 0;
#endif
	return buff;
}

/*
 * SAlrtTh,0x3,0b1111111100000000,0xff00
 * MaxSocAlrt[7:0],,,,,,
 */
#define MAX77759_FG_SALRTTH	0x3

#define MAX77759_FG_SALRTTH_MAXSOCALRT_SHIFT	8
#define MAX77759_FG_SALRTTH_MAXSOCALRT_MASK	(0xff << 8)
#define MAX77759_FG_SALRTTH_MAXSOCALRT_CLEAR	(~(0xff << 8))
#define MAX77759_FG_SALRTTH_MINSOCALRT_SHIFT	0
#define MAX77759_FG_SALRTTH_MINSOCALRT_MASK	(0xff << 0)
#define MAX77759_FG_SALRTTH_MINSOCALRT_CLEAR	(~(0xff << 0))

MAX77759_BFF(fg_salrtth_maxsocalrt,15,8)
MAX77759_BFF(fg_salrtth_minsocalrt,7,0)
static inline const char *
max77759_fg_salrtth_cstr(char *buff, size_t len, int val)
{
#ifdef SCNPRINTF
	int i = 0;

	i += SCNPRINTF(&buff[i], len - i, " MAXSOCALRT=%x",
		FIELD2VALUE(MAX77759_FG_SALRTTH_MAXSOCALRT, val));
	i += SCNPRINTF(&buff[i], len - i, " MINSOCALRT=%x",
		FIELD2VALUE(MAX77759_FG_SALRTTH_MINSOCALRT, val));
#else
	buff[0] = 0;
#endif
	return buff;
}

/*
 * AtRate,0x4,0b00000000,0x00
 * AtRate[15:8],,,,,,
 */
#define MAX77759_FG_ATRATE	0x4

/*
 * RepCap,0x5,0b10111011100,0x5dc
 * RepCap[15:8],,,,,,
 */
#define MAX77759_FG_REPCAP	0x5

/*
 * RepSOC,0x6,0b11001000000000,0x3200
 * RepSOC[15:8],,,,,,
 */
#define MAX77759_FG_REPSOC	0x6

/*
 * Age,0x7,0b110010000000000,0x6400
 * Age[15:8],,,,,,
 */
#define MAX77759_FG_AGE	0x7

/*
 * Temp,0x8,0b1011000000000,0x1600
 * TEMP[15:8],,,,,,
 */
#define MAX77759_FG_TEMP	0x8

/*
 * Vcell,0x9,0b1011010000000000,0xb400
 * VCELL[15:8],,,,,,
 */
#define MAX77759_FG_VCELL	0x9

/*
 * Current,0xA,0b00000000,0x00
 * Current[15:8],,,,,,
 */
#define MAX77759_FG_CURRENT	0xA

/*
 * AvgCurrent,0xB,0b00000000,0x00
 * AvgCurrent[15:8],,,,,,
 */
#define MAX77759_FG_AVGCURRENT	0xB

/*
 * QResidual,0xC,0b00000000,0x00
 * Qresidual[15:8],,,,,,
 */
#define MAX77759_FG_QRESIDUAL	0xC

/*
 * MixSOC,0xD,0b11001000000000,0x3200
 * MixSOC[15:8],,,,,,
 */
#define MAX77759_FG_MIXSOC	0xD

/*
 * AvSOC,0xE,0b11001000000000,0x3200
 * AvSOC[15:8],,,,,,
 */
#define MAX77759_FG_AVSOC	0xE

/*
 * MixCap,0xF,0b10111011100,0x5dc
 * MixCapH[15:8],,,,,,
 */
#define MAX77759_FG_MIXCAP	0xF

/*
 * FullCap,0x10,0b101110111000,0xbb8
 * FullCAP[15:8],,,,,,
 */
#define MAX77759_FG_FULLCAP	0x10

/*
 * TTE,0x11,0b00000000,0x00
 * hr[5:0],,,,,,mn[5:4]
 */
#define MAX77759_FG_TTE	0x11

#define MAX77759_FG_TTE_HR_SHIFT	10
#define MAX77759_FG_TTE_HR_MASK	(0x3f << 10)
#define MAX77759_FG_TTE_HR_CLEAR	(~(0x3f << 10))
#define MAX77759_FG_TTE_MN_SHIFT	4
#define MAX77759_FG_TTE_MN_MASK	(0x3f << 4)
#define MAX77759_FG_TTE_MN_CLEAR	(~(0x3f << 4))
#define MAX77759_FG_TTE_SEC_SHIFT	0
#define MAX77759_FG_TTE_SEC_MASK	(0xf << 0)
#define MAX77759_FG_TTE_SEC_CLEAR	(~(0xf << 0))

MAX77759_BFF(fg_tte_hr,15,10)
MAX77759_BFF(fg_tte_mn,9,4)
MAX77759_BFF(fg_tte_sec,3,0)
static inline const char *
max77759_fg_tte_cstr(char *buff, size_t len, int val)
{
#ifdef SCNPRINTF
	int i = 0;

	i += SCNPRINTF(&buff[i], len - i, " HR=%x",
		FIELD2VALUE(MAX77759_FG_TTE_HR, val));
	i += SCNPRINTF(&buff[i], len - i, " MN=%x",
		FIELD2VALUE(MAX77759_FG_TTE_MN, val));
	i += SCNPRINTF(&buff[i], len - i, " SEC=%x",
		FIELD2VALUE(MAX77759_FG_TTE_SEC, val));
#else
	buff[0] = 0;
#endif
	return buff;
}

/*
 * QRTable00,0x12,0b11110000000000,0x3c00
 * QRTable00[15:8],,,,,,
 */
#define MAX77759_FG_QRTABLE00	0x12

/*
 * FullSocThr,0x13,0b101000000000000,0x5000
 * FullSOCThr[15:8],,,,,,
 */
#define MAX77759_FG_FULLSOCTHR	0x13

/*
 * Rslow,0x14,0b1010010000,0x290
 * RSLOW[15:8],,,,,,
 */
#define MAX77759_FG_RSLOW	0x14

/*
 * RFast,0x15,0b101001000,0x148
 * RFAST[15:8],,,,,,
 */
#define MAX77759_FG_RFAST	0x15

/*
 * AvgTA,0x16,0b1011000000000,0x1600
 * AvgTA[15:8],,,,,,
 */
#define MAX77759_FG_AVGTA	0x16

/*
 * Cycles,0x17,0b00000000,0x00
 * Cycles[15:8],,,,,,
 */
#define MAX77759_FG_CYCLES	0x17

/*
 * DesignCap,0x18,0b101110111000,0xbb8
 * DesignCap[15:8],,,,,,
 */
#define MAX77759_FG_DESIGNCAP	0x18

/*
 * AvgVCell,0x19,0b1011010000000000,0xb400
 * AvgVCELL[15:8],,,,,,
 */
#define MAX77759_FG_AVGVCELL	0x19

/*
 * MaxMinTemp,0x1A,0b1000000001111111,0x807f
 * MaxTemperature[7:0],,,,,,
 */
#define MAX77759_FG_MAXMINTEMP	0x1A

#define MAX77759_FG_MAXMINTEMP_MAXTEMPERATURE_SHIFT	8
#define MAX77759_FG_MAXMINTEMP_MAXTEMPERATURE_MASK	(0xff << 8)
#define MAX77759_FG_MAXMINTEMP_MAXTEMPERATURE_CLEAR	(~(0xff << 8))
#define MAX77759_FG_MAXMINTEMP_MINTEMPERATURE_SHIFT	0
#define MAX77759_FG_MAXMINTEMP_MINTEMPERATURE_MASK	(0xff << 0)
#define MAX77759_FG_MAXMINTEMP_MINTEMPERATURE_CLEAR	(~(0xff << 0))

MAX77759_BFF(fg_maxmintemp_maxtemperature,15,8)
MAX77759_BFF(fg_maxmintemp_mintemperature,7,0)
static inline const char *
max77759_fg_maxmintemp_cstr(char *buff, size_t len, int val)
{
#ifdef SCNPRINTF
	int i = 0;

	i += SCNPRINTF(&buff[i], len - i, " MAXTEMPERATURE=%x",
		FIELD2VALUE(MAX77759_FG_MAXMINTEMP_MAXTEMPERATURE, val));
	i += SCNPRINTF(&buff[i], len - i, " MINTEMPERATURE=%x",
		FIELD2VALUE(MAX77759_FG_MAXMINTEMP_MINTEMPERATURE, val));
#else
	buff[0] = 0;
#endif
	return buff;
}

/*
 * MaxMinVolt,0x1B,0b11111111,0xff
 * MaxVoltage[7:0],,,,,,
 */
#define MAX77759_FG_MAXMINVOLT	0x1B

#define MAX77759_FG_MAXMINVOLT_MAXVOLTAGE_SHIFT	8
#define MAX77759_FG_MAXMINVOLT_MAXVOLTAGE_MASK	(0xff << 8)
#define MAX77759_FG_MAXMINVOLT_MAXVOLTAGE_CLEAR	(~(0xff << 8))
#define MAX77759_FG_MAXMINVOLT_MINVOLTAGE_SHIFT	0
#define MAX77759_FG_MAXMINVOLT_MINVOLTAGE_MASK	(0xff << 0)
#define MAX77759_FG_MAXMINVOLT_MINVOLTAGE_CLEAR	(~(0xff << 0))

MAX77759_BFF(fg_maxminvolt_maxvoltage,15,8)
MAX77759_BFF(fg_maxminvolt_minvoltage,7,0)
static inline const char *
max77759_fg_maxminvolt_cstr(char *buff, size_t len, int val)
{
#ifdef SCNPRINTF
	int i = 0;

	i += SCNPRINTF(&buff[i], len - i, " MAXVOLTAGE=%x",
		FIELD2VALUE(MAX77759_FG_MAXMINVOLT_MAXVOLTAGE, val));
	i += SCNPRINTF(&buff[i], len - i, " MINVOLTAGE=%x",
		FIELD2VALUE(MAX77759_FG_MAXMINVOLT_MINVOLTAGE, val));
#else
	buff[0] = 0;
#endif
	return buff;
}

/*
 * MaxMinCurr,0x1C,0b1000000001111111,0x807f
 * MaxChargeCurrent[7:0],,,,,,
 */
#define MAX77759_FG_MAXMINCURR	0x1C

#define MAX77759_FG_MAXMINCURR_MAXCHARGECURRENT_SHIFT	8
#define MAX77759_FG_MAXMINCURR_MAXCHARGECURRENT_MASK	(0xff << 8)
#define MAX77759_FG_MAXMINCURR_MAXCHARGECURRENT_CLEAR	(~(0xff << 8))
#define MAX77759_FG_MAXMINCURR_MAXDISCURRENT_SHIFT	0
#define MAX77759_FG_MAXMINCURR_MAXDISCURRENT_MASK	(0xff << 0)
#define MAX77759_FG_MAXMINCURR_MAXDISCURRENT_CLEAR	(~(0xff << 0))

MAX77759_BFF(fg_maxmincurr_maxchargecurrent,15,8)
MAX77759_BFF(fg_maxmincurr_maxdiscurrent,7,0)
static inline const char *
max77759_fg_maxmincurr_cstr(char *buff, size_t len, int val)
{
#ifdef SCNPRINTF
	int i = 0;

	i += SCNPRINTF(&buff[i], len - i, " MAXCHARGECURRENT=%x",
		FIELD2VALUE(MAX77759_FG_MAXMINCURR_MAXCHARGECURRENT, val));
	i += SCNPRINTF(&buff[i], len - i, " MAXDISCURRENT=%x",
		FIELD2VALUE(MAX77759_FG_MAXMINCURR_MAXDISCURRENT, val));
#else
	buff[0] = 0;
#endif
	return buff;
}

/*
 * Config,0x1D,0b10001101010000,0x2350
 * SPR_15,Ss,Ts,Vs,SPR_11,AINSH,Ten
 */
#define MAX77759_FG_CONFIG	0x1D
#define MAX77759_FG_CONFIG_SPR_15	(0x1 << 15)
#define MAX77759_FG_CONFIG_SS	(0x1 << 14)
#define MAX77759_FG_CONFIG_TS	(0x1 << 13)
#define MAX77759_FG_CONFIG_VS	(0x1 << 12)
#define MAX77759_FG_CONFIG_SPR_11	(0x1 << 11)
#define MAX77759_FG_CONFIG_AINSH	(0x1 << 10)
#define MAX77759_FG_CONFIG_TEN	(0x1 << 9)
#define MAX77759_FG_CONFIG_TEX	(0x1 << 8)
#define MAX77759_FG_CONFIG_SHDN	(0x1 << 7)
#define MAX77759_FG_CONFIG_I2CSH	(0x1 << 6)
#define MAX77759_FG_CONFIG_SPR_5	(0x1 << 5)
#define MAX77759_FG_CONFIG_ETHRM	(0x1 << 4)
#define MAX77759_FG_CONFIG_FTHRM	(0x1 << 3)
#define MAX77759_FG_CONFIG_AEN	(0x1 << 2)
#define MAX77759_FG_CONFIG_BEI	(0x1 << 1)
#define MAX77759_FG_CONFIG_BER	(0x1 << 0)

#define MAX77759_FG_CONFIG_SPR_15_SHIFT	15
#define MAX77759_FG_CONFIG_SPR_15_MASK	(0x1 << 15)
#define MAX77759_FG_CONFIG_SPR_15_CLEAR	(~(0x1 << 15))
#define MAX77759_FG_CONFIG_SS_SHIFT	14
#define MAX77759_FG_CONFIG_SS_MASK	(0x1 << 14)
#define MAX77759_FG_CONFIG_SS_CLEAR	(~(0x1 << 14))
#define MAX77759_FG_CONFIG_TS_SHIFT	13
#define MAX77759_FG_CONFIG_TS_MASK	(0x1 << 13)
#define MAX77759_FG_CONFIG_TS_CLEAR	(~(0x1 << 13))
#define MAX77759_FG_CONFIG_VS_SHIFT	12
#define MAX77759_FG_CONFIG_VS_MASK	(0x1 << 12)
#define MAX77759_FG_CONFIG_VS_CLEAR	(~(0x1 << 12))
#define MAX77759_FG_CONFIG_SPR_11_SHIFT	11
#define MAX77759_FG_CONFIG_SPR_11_MASK	(0x1 << 11)
#define MAX77759_FG_CONFIG_SPR_11_CLEAR	(~(0x1 << 11))
#define MAX77759_FG_CONFIG_AINSH_SHIFT	10
#define MAX77759_FG_CONFIG_AINSH_MASK	(0x1 << 10)
#define MAX77759_FG_CONFIG_AINSH_CLEAR	(~(0x1 << 10))
#define MAX77759_FG_CONFIG_TEN_SHIFT	9
#define MAX77759_FG_CONFIG_TEN_MASK	(0x1 << 9)
#define MAX77759_FG_CONFIG_TEN_CLEAR	(~(0x1 << 9))
#define MAX77759_FG_CONFIG_TEX_SHIFT	8
#define MAX77759_FG_CONFIG_TEX_MASK	(0x1 << 8)
#define MAX77759_FG_CONFIG_TEX_CLEAR	(~(0x1 << 8))
#define MAX77759_FG_CONFIG_SHDN_SHIFT	7
#define MAX77759_FG_CONFIG_SHDN_MASK	(0x1 << 7)
#define MAX77759_FG_CONFIG_SHDN_CLEAR	(~(0x1 << 7))
#define MAX77759_FG_CONFIG_I2CSH_SHIFT	6
#define MAX77759_FG_CONFIG_I2CSH_MASK	(0x1 << 6)
#define MAX77759_FG_CONFIG_I2CSH_CLEAR	(~(0x1 << 6))
#define MAX77759_FG_CONFIG_SPR_5_SHIFT	5
#define MAX77759_FG_CONFIG_SPR_5_MASK	(0x1 << 5)
#define MAX77759_FG_CONFIG_SPR_5_CLEAR	(~(0x1 << 5))
#define MAX77759_FG_CONFIG_ETHRM_SHIFT	4
#define MAX77759_FG_CONFIG_ETHRM_MASK	(0x1 << 4)
#define MAX77759_FG_CONFIG_ETHRM_CLEAR	(~(0x1 << 4))
#define MAX77759_FG_CONFIG_FTHRM_SHIFT	3
#define MAX77759_FG_CONFIG_FTHRM_MASK	(0x1 << 3)
#define MAX77759_FG_CONFIG_FTHRM_CLEAR	(~(0x1 << 3))
#define MAX77759_FG_CONFIG_AEN_SHIFT	2
#define MAX77759_FG_CONFIG_AEN_MASK	(0x1 << 2)
#define MAX77759_FG_CONFIG_AEN_CLEAR	(~(0x1 << 2))
#define MAX77759_FG_CONFIG_BEI_SHIFT	1
#define MAX77759_FG_CONFIG_BEI_MASK	(0x1 << 1)
#define MAX77759_FG_CONFIG_BEI_CLEAR	(~(0x1 << 1))
#define MAX77759_FG_CONFIG_BER_SHIFT	0
#define MAX77759_FG_CONFIG_BER_MASK	(0x1 << 0)
#define MAX77759_FG_CONFIG_BER_CLEAR	(~(0x1 << 0))

MAX77759_BFF(fg_config_spr_15,15,15)
MAX77759_BFF(fg_config_ss,14,14)
MAX77759_BFF(fg_config_ts,13,13)
MAX77759_BFF(fg_config_vs,12,12)
MAX77759_BFF(fg_config_spr_11,11,11)
MAX77759_BFF(fg_config_ainsh,10,10)
MAX77759_BFF(fg_config_ten,9,9)
MAX77759_BFF(fg_config_tex,8,8)
MAX77759_BFF(fg_config_shdn,7,7)
MAX77759_BFF(fg_config_i2csh,6,6)
MAX77759_BFF(fg_config_spr_5,5,5)
MAX77759_BFF(fg_config_ethrm,4,4)
MAX77759_BFF(fg_config_fthrm,3,3)
MAX77759_BFF(fg_config_aen,2,2)
MAX77759_BFF(fg_config_bei,1,1)
MAX77759_BFF(fg_config_ber,0,0)
static inline const char *
max77759_fg_config_cstr(char *buff, size_t len, int val)
{
#ifdef SCNPRINTF
	int i = 0;

	i += SCNPRINTF(&buff[i], len - i, " SPR_15=%x",
		FIELD2VALUE(MAX77759_FG_CONFIG_SPR_15, val));
	i += SCNPRINTF(&buff[i], len - i, " SS=%x",
		FIELD2VALUE(MAX77759_FG_CONFIG_SS, val));
	i += SCNPRINTF(&buff[i], len - i, " TS=%x",
		FIELD2VALUE(MAX77759_FG_CONFIG_TS, val));
	i += SCNPRINTF(&buff[i], len - i, " VS=%x",
		FIELD2VALUE(MAX77759_FG_CONFIG_VS, val));
	i += SCNPRINTF(&buff[i], len - i, " SPR_11=%x",
		FIELD2VALUE(MAX77759_FG_CONFIG_SPR_11, val));
	i += SCNPRINTF(&buff[i], len - i, " AINSH=%x",
		FIELD2VALUE(MAX77759_FG_CONFIG_AINSH, val));
	i += SCNPRINTF(&buff[i], len - i, " TEN=%x",
		FIELD2VALUE(MAX77759_FG_CONFIG_TEN, val));
	i += SCNPRINTF(&buff[i], len - i, " TEX=%x",
		FIELD2VALUE(MAX77759_FG_CONFIG_TEX, val));
	i += SCNPRINTF(&buff[i], len - i, " SHDN=%x",
		FIELD2VALUE(MAX77759_FG_CONFIG_SHDN, val));
	i += SCNPRINTF(&buff[i], len - i, " I2CSH=%x",
		FIELD2VALUE(MAX77759_FG_CONFIG_I2CSH, val));
	i += SCNPRINTF(&buff[i], len - i, " SPR_5=%x",
		FIELD2VALUE(MAX77759_FG_CONFIG_SPR_5, val));
	i += SCNPRINTF(&buff[i], len - i, " ETHRM=%x",
		FIELD2VALUE(MAX77759_FG_CONFIG_ETHRM, val));
	i += SCNPRINTF(&buff[i], len - i, " FTHRM=%x",
		FIELD2VALUE(MAX77759_FG_CONFIG_FTHRM, val));
	i += SCNPRINTF(&buff[i], len - i, " AEN=%x",
		FIELD2VALUE(MAX77759_FG_CONFIG_AEN, val));
	i += SCNPRINTF(&buff[i], len - i, " BEI=%x",
		FIELD2VALUE(MAX77759_FG_CONFIG_BEI, val));
	i += SCNPRINTF(&buff[i], len - i, " BER=%x",
		FIELD2VALUE(MAX77759_FG_CONFIG_BER, val));
#else
	buff[0] = 0;
#endif
	return buff;
}

/*
 * IChgTerm,0x1E,0b1111000000,0x3c0
 * ICHGTerm[15:8],,,,,,
 */
#define MAX77759_FG_ICHGTERM	0x1E

/*
 * AvCap,0x1F,0b10111011100,0x5dc
 * AvCap[15:8],,,,,,
 */
#define MAX77759_FG_AVCAP	0x1F

/*
 * TTF,0x20,0b1111111111111111,0xffff
 * hr[5:0],,,,,,mn[5:4]
 */
#define MAX77759_FG_TTF	0x20

#define MAX77759_FG_TTF_HR_SHIFT	10
#define MAX77759_FG_TTF_HR_MASK	(0x3f << 10)
#define MAX77759_FG_TTF_HR_CLEAR	(~(0x3f << 10))
#define MAX77759_FG_TTF_MN_SHIFT	4
#define MAX77759_FG_TTF_MN_MASK	(0x3f << 4)
#define MAX77759_FG_TTF_MN_CLEAR	(~(0x3f << 4))
#define MAX77759_FG_TTF_SEC_SHIFT	0
#define MAX77759_FG_TTF_SEC_MASK	(0xf << 0)
#define MAX77759_FG_TTF_SEC_CLEAR	(~(0xf << 0))

MAX77759_BFF(fg_ttf_hr,15,10)
MAX77759_BFF(fg_ttf_mn,9,4)
MAX77759_BFF(fg_ttf_sec,3,0)
static inline const char *
max77759_fg_ttf_cstr(char *buff, size_t len, int val)
{
#ifdef SCNPRINTF
	int i = 0;

	i += SCNPRINTF(&buff[i], len - i, " HR=%x",
		FIELD2VALUE(MAX77759_FG_TTF_HR, val));
	i += SCNPRINTF(&buff[i], len - i, " MN=%x",
		FIELD2VALUE(MAX77759_FG_TTF_MN, val));
	i += SCNPRINTF(&buff[i], len - i, " SEC=%x",
		FIELD2VALUE(MAX77759_FG_TTF_SEC, val));
#else
	buff[0] = 0;
#endif
	return buff;
}

/*
 * DevName,0x21,0b110001000000000,0x6200
 * DevName[15:8],,,,,,
 */
#define MAX77759_FG_DEVNAME	0x21

/*
 * QRTable10,0x22,0b1101110000000,0x1b80
 * QRTable10[15:8],,,,,,
 */
#define MAX77759_FG_QRTABLE10	0x22

/*
 * FullCapNom,0x23,0b101110111000,0xbb8
 * FullCapNom[15:8],,,,,,
 */
#define MAX77759_FG_FULLCAPNOM	0x23

/*
 * TempNom,0x24,0b1010000000000,0x1400
 * TempNom[9:2],,,,,,
 */
#define MAX77759_FG_TEMPNOM	0x24

#define MAX77759_FG_TEMPNOM_TEMPNOM_SHIFT	6
#define MAX77759_FG_TEMPNOM_TEMPNOM_MASK	(0x3ff << 6)
#define MAX77759_FG_TEMPNOM_TEMPNOM_CLEAR	(~(0x3ff << 6))
#define MAX77759_FG_TEMPNOM_SPR_5_0_SHIFT	0
#define MAX77759_FG_TEMPNOM_SPR_5_0_MASK	(0x3f << 0)
#define MAX77759_FG_TEMPNOM_SPR_5_0_CLEAR	(~(0x3f << 0))

MAX77759_BFF(fg_tempnom_tempnom,15,6)
MAX77759_BFF(fg_tempnom_spr_5_0,5,0)
static inline const char *
max77759_fg_tempnom_cstr(char *buff, size_t len, int val)
{
#ifdef SCNPRINTF
	int i = 0;

	i += SCNPRINTF(&buff[i], len - i, " TEMPNOM=%x",
		FIELD2VALUE(MAX77759_FG_TEMPNOM_TEMPNOM, val));
	i += SCNPRINTF(&buff[i], len - i, " SPR_5_0=%x",
		FIELD2VALUE(MAX77759_FG_TEMPNOM_SPR_5_0, val));
#else
	buff[0] = 0;
#endif
	return buff;
}

/*
 * TempLim,0x25,0b10001100000101,0x2305
 * TempHot[7:0],,,,,,
 */
#define MAX77759_FG_TEMPLIM	0x25

#define MAX77759_FG_TEMPLIM_TEMPHOT_SHIFT	8
#define MAX77759_FG_TEMPLIM_TEMPHOT_MASK	(0xff << 8)
#define MAX77759_FG_TEMPLIM_TEMPHOT_CLEAR	(~(0xff << 8))
#define MAX77759_FG_TEMPLIM_TEMPCOLD_SHIFT	0
#define MAX77759_FG_TEMPLIM_TEMPCOLD_MASK	(0xff << 0)
#define MAX77759_FG_TEMPLIM_TEMPCOLD_CLEAR	(~(0xff << 0))

MAX77759_BFF(fg_templim_temphot,15,8)
MAX77759_BFF(fg_templim_tempcold,7,0)
static inline const char *
max77759_fg_templim_cstr(char *buff, size_t len, int val)
{
#ifdef SCNPRINTF
	int i = 0;

	i += SCNPRINTF(&buff[i], len - i, " TEMPHOT=%x",
		FIELD2VALUE(MAX77759_FG_TEMPLIM_TEMPHOT, val));
	i += SCNPRINTF(&buff[i], len - i, " TEMPCOLD=%x",
		FIELD2VALUE(MAX77759_FG_TEMPLIM_TEMPCOLD, val));
#else
	buff[0] = 0;
#endif
	return buff;
}

/*
 * AvgTA0,0x26,0b1011000000000,0x1600
 * AvgTA0[15:8],,,,,,
 */
#define MAX77759_FG_AVGTA0	0x26

/*
 * AIN0,0x27,0b1000100011010000,0x88d0
 * AIN0[15:8],,,,,,
 */
#define MAX77759_FG_AIN0	0x27

/*
 * LearnCfg,0x28,0b10011000000011,0x2603
 * LearnRCOMP[2:0],,,LearnTCO[2:0],,,FCLrn[1:0]
 */
#define MAX77759_FG_LEARNCFG	0x28
#define MAX77759_FG_LEARNCFG_SPR_7	(0x1 << 7)
#define MAX77759_FG_LEARNCFG_SPR_3	(0x1 << 3)
#define MAX77759_FG_LEARNCFG_FILLEMPTY	(0x1 << 2)
#define MAX77759_FG_LEARNCFG_RESERVED_1	(0x1 << 1)
#define MAX77759_FG_LEARNCFG_SPR_0	(0x1 << 0)

#define MAX77759_FG_LEARNCFG_LEARNRCOMP_SHIFT	13
#define MAX77759_FG_LEARNCFG_LEARNRCOMP_MASK	(0x7 << 13)
#define MAX77759_FG_LEARNCFG_LEARNRCOMP_CLEAR	(~(0x7 << 13))
#define MAX77759_FG_LEARNCFG_LEARNTCO_SHIFT	10
#define MAX77759_FG_LEARNCFG_LEARNTCO_MASK	(0x7 << 10)
#define MAX77759_FG_LEARNCFG_LEARNTCO_CLEAR	(~(0x7 << 10))
#define MAX77759_FG_LEARNCFG_FCLRN_SHIFT	8
#define MAX77759_FG_LEARNCFG_FCLRN_MASK	(0x3 << 8)
#define MAX77759_FG_LEARNCFG_FCLRN_CLEAR	(~(0x3 << 8))
#define MAX77759_FG_LEARNCFG_SPR_7_SHIFT	7
#define MAX77759_FG_LEARNCFG_SPR_7_MASK	(0x1 << 7)
#define MAX77759_FG_LEARNCFG_SPR_7_CLEAR	(~(0x1 << 7))
#define MAX77759_FG_LEARNCFG_FCLRNSTAGE_SHIFT	4
#define MAX77759_FG_LEARNCFG_FCLRNSTAGE_MASK	(0x7 << 4)
#define MAX77759_FG_LEARNCFG_FCLRNSTAGE_CLEAR	(~(0x7 << 4))
#define MAX77759_FG_LEARNCFG_SPR_3_SHIFT	3
#define MAX77759_FG_LEARNCFG_SPR_3_MASK	(0x1 << 3)
#define MAX77759_FG_LEARNCFG_SPR_3_CLEAR	(~(0x1 << 3))
#define MAX77759_FG_LEARNCFG_FILLEMPTY_SHIFT	2
#define MAX77759_FG_LEARNCFG_FILLEMPTY_MASK	(0x1 << 2)
#define MAX77759_FG_LEARNCFG_FILLEMPTY_CLEAR	(~(0x1 << 2))
#define MAX77759_FG_LEARNCFG_RESERVED_1_SHIFT	1
#define MAX77759_FG_LEARNCFG_RESERVED_1_MASK	(0x1 << 1)
#define MAX77759_FG_LEARNCFG_RESERVED_1_CLEAR	(~(0x1 << 1))
#define MAX77759_FG_LEARNCFG_SPR_0_SHIFT	0
#define MAX77759_FG_LEARNCFG_SPR_0_MASK	(0x1 << 0)
#define MAX77759_FG_LEARNCFG_SPR_0_CLEAR	(~(0x1 << 0))

MAX77759_BFF(fg_learncfg_learnrcomp,15,13)
MAX77759_BFF(fg_learncfg_learntco,12,10)
MAX77759_BFF(fg_learncfg_fclrn,9,8)
MAX77759_BFF(fg_learncfg_spr_7,7,7)
MAX77759_BFF(fg_learncfg_fclrnstage,6,4)
MAX77759_BFF(fg_learncfg_spr_3,3,3)
MAX77759_BFF(fg_learncfg_fillempty,2,2)
MAX77759_BFF(fg_learncfg_reserved_1,1,1)
MAX77759_BFF(fg_learncfg_spr_0,0,0)
static inline const char *
max77759_fg_learncfg_cstr(char *buff, size_t len, int val)
{
#ifdef SCNPRINTF
	int i = 0;

	i += SCNPRINTF(&buff[i], len - i, " LEARNRCOMP=%x",
		FIELD2VALUE(MAX77759_FG_LEARNCFG_LEARNRCOMP, val));
	i += SCNPRINTF(&buff[i], len - i, " LEARNTCO=%x",
		FIELD2VALUE(MAX77759_FG_LEARNCFG_LEARNTCO, val));
	i += SCNPRINTF(&buff[i], len - i, " FCLRN=%x",
		FIELD2VALUE(MAX77759_FG_LEARNCFG_FCLRN, val));
	i += SCNPRINTF(&buff[i], len - i, " SPR_7=%x",
		FIELD2VALUE(MAX77759_FG_LEARNCFG_SPR_7, val));
	i += SCNPRINTF(&buff[i], len - i, " FCLRNSTAGE=%x",
		FIELD2VALUE(MAX77759_FG_LEARNCFG_FCLRNSTAGE, val));
	i += SCNPRINTF(&buff[i], len - i, " SPR_3=%x",
		FIELD2VALUE(MAX77759_FG_LEARNCFG_SPR_3, val));
	i += SCNPRINTF(&buff[i], len - i, " FILLEMPTY=%x",
		FIELD2VALUE(MAX77759_FG_LEARNCFG_FILLEMPTY, val));
	i += SCNPRINTF(&buff[i], len - i, " RESERVED_1=%x",
		FIELD2VALUE(MAX77759_FG_LEARNCFG_RESERVED_1, val));
	i += SCNPRINTF(&buff[i], len - i, " SPR_0=%x",
		FIELD2VALUE(MAX77759_FG_LEARNCFG_SPR_0, val));
#else
	buff[0] = 0;
#endif
	return buff;
}

/*
 * FilterCfg,0x29,0b1100111010100100,0xcea4
 * SPR_15_14[1:0],,NTEMP[2:0],,,NMIX[3:1],
 */
#define MAX77759_FG_FILTERCFG	0x29

#define MAX77759_FG_FILTERCFG_SPR_15_14_SHIFT	14
#define MAX77759_FG_FILTERCFG_SPR_15_14_MASK	(0x3 << 14)
#define MAX77759_FG_FILTERCFG_SPR_15_14_CLEAR	(~(0x3 << 14))
#define MAX77759_FG_FILTERCFG_NTEMP_SHIFT	11
#define MAX77759_FG_FILTERCFG_NTEMP_MASK	(0x7 << 11)
#define MAX77759_FG_FILTERCFG_NTEMP_CLEAR	(~(0x7 << 11))
#define MAX77759_FG_FILTERCFG_NMIX_SHIFT	8
#define MAX77759_FG_FILTERCFG_NMIX_MASK	(0x7 << 8)
#define MAX77759_FG_FILTERCFG_NMIX_CLEAR	(~(0x7 << 8))
#define MAX77759_FG_FILTERCFG_NAVGCELL_SHIFT	5
#define MAX77759_FG_FILTERCFG_NAVGCELL_MASK	(0x7 << 5)
#define MAX77759_FG_FILTERCFG_NAVGCELL_CLEAR	(~(0x7 << 5))
#define MAX77759_FG_FILTERCFG_NCURR_SHIFT	1
#define MAX77759_FG_FILTERCFG_NCURR_MASK	(0xf << 1)
#define MAX77759_FG_FILTERCFG_NCURR_CLEAR	(~(0xf << 1))

MAX77759_BFF(fg_filtercfg_spr_15_14,15,14)
MAX77759_BFF(fg_filtercfg_ntemp,13,11)
MAX77759_BFF(fg_filtercfg_nmix,10,8)
MAX77759_BFF(fg_filtercfg_navgcell,7,5)
MAX77759_BFF(fg_filtercfg_ncurr,4,1)
static inline const char *
max77759_fg_filtercfg_cstr(char *buff, size_t len, int val)
{
#ifdef SCNPRINTF
	int i = 0;

	i += SCNPRINTF(&buff[i], len - i, " SPR_15_14=%x",
		FIELD2VALUE(MAX77759_FG_FILTERCFG_SPR_15_14, val));
	i += SCNPRINTF(&buff[i], len - i, " NTEMP=%x",
		FIELD2VALUE(MAX77759_FG_FILTERCFG_NTEMP, val));
	i += SCNPRINTF(&buff[i], len - i, " NMIX=%x",
		FIELD2VALUE(MAX77759_FG_FILTERCFG_NMIX, val));
	i += SCNPRINTF(&buff[i], len - i, " NAVGCELL=%x",
		FIELD2VALUE(MAX77759_FG_FILTERCFG_NAVGCELL, val));
	i += SCNPRINTF(&buff[i], len - i, " NCURR=%x",
		FIELD2VALUE(MAX77759_FG_FILTERCFG_NCURR, val));
#else
	buff[0] = 0;
#endif
	return buff;
}

/*
 * RelaxCfg,0x2A,0b10000011001001,0x20c9
 * LoadThr[6:0],,,,,,
 */
#define MAX77759_FG_RELAXCFG	0x2A

#define MAX77759_FG_RELAXCFG_LOADTHR_SHIFT	9
#define MAX77759_FG_RELAXCFG_LOADTHR_MASK	(0x7f << 9)
#define MAX77759_FG_RELAXCFG_LOADTHR_CLEAR	(~(0x7f << 9))
#define MAX77759_FG_RELAXCFG_DVTHR_SHIFT	4
#define MAX77759_FG_RELAXCFG_DVTHR_MASK	(0xf << 4)
#define MAX77759_FG_RELAXCFG_DVTHR_CLEAR	(~(0xf << 4))
#define MAX77759_FG_RELAXCFG_DTTHR_SHIFT	0
#define MAX77759_FG_RELAXCFG_DTTHR_MASK	(0xf << 0)
#define MAX77759_FG_RELAXCFG_DTTHR_CLEAR	(~(0xf << 0))

MAX77759_BFF(fg_relaxcfg_loadthr,15,9)
MAX77759_BFF(fg_relaxcfg_dvthr,7,4)
MAX77759_BFF(fg_relaxcfg_dtthr,3,0)
static inline const char *
max77759_fg_relaxcfg_cstr(char *buff, size_t len, int val)
{
#ifdef SCNPRINTF
	int i = 0;

	i += SCNPRINTF(&buff[i], len - i, " LOADTHR=%x",
		FIELD2VALUE(MAX77759_FG_RELAXCFG_LOADTHR, val));
	i += SCNPRINTF(&buff[i], len - i, " DVTHR=%x",
		FIELD2VALUE(MAX77759_FG_RELAXCFG_DVTHR, val));
	i += SCNPRINTF(&buff[i], len - i, " DTTHR=%x",
		FIELD2VALUE(MAX77759_FG_RELAXCFG_DTTHR, val));
#else
	buff[0] = 0;
#endif
	return buff;
}

/*
 * MiscCfg,0x2B,0b100111010000,0x9d0
 * FUS[3:0],,,,EnBi1,InitVFG,MixRate[4:3]
 */
#define MAX77759_FG_MISCCFG	0x2B
#define MAX77759_FG_MISCCFG_ENBI1	(0x1 << 11)
#define MAX77759_FG_MISCCFG_INITVFG	(0x1 << 10)
#define MAX77759_FG_MISCCFG_RDFCLRN	(0x1 << 4)
#define MAX77759_FG_MISCCFG_VTTL	(0x1 << 3)
#define MAX77759_FG_MISCCFG_VEX	(0x1 << 2)

#define MAX77759_FG_MISCCFG_FUS_SHIFT	12
#define MAX77759_FG_MISCCFG_FUS_MASK	(0xf << 12)
#define MAX77759_FG_MISCCFG_FUS_CLEAR	(~(0xf << 12))
#define MAX77759_FG_MISCCFG_ENBI1_SHIFT	11
#define MAX77759_FG_MISCCFG_ENBI1_MASK	(0x1 << 11)
#define MAX77759_FG_MISCCFG_ENBI1_CLEAR	(~(0x1 << 11))
#define MAX77759_FG_MISCCFG_INITVFG_SHIFT	10
#define MAX77759_FG_MISCCFG_INITVFG_MASK	(0x1 << 10)
#define MAX77759_FG_MISCCFG_INITVFG_CLEAR	(~(0x1 << 10))
#define MAX77759_FG_MISCCFG_MIXRATE_SHIFT	5
#define MAX77759_FG_MISCCFG_MIXRATE_MASK	(0x1f << 5)
#define MAX77759_FG_MISCCFG_MIXRATE_CLEAR	(~(0x1f << 5))
#define MAX77759_FG_MISCCFG_RDFCLRN_SHIFT	4
#define MAX77759_FG_MISCCFG_RDFCLRN_MASK	(0x1 << 4)
#define MAX77759_FG_MISCCFG_RDFCLRN_CLEAR	(~(0x1 << 4))
#define MAX77759_FG_MISCCFG_VTTL_SHIFT	3
#define MAX77759_FG_MISCCFG_VTTL_MASK	(0x1 << 3)
#define MAX77759_FG_MISCCFG_VTTL_CLEAR	(~(0x1 << 3))
#define MAX77759_FG_MISCCFG_VEX_SHIFT	2
#define MAX77759_FG_MISCCFG_VEX_MASK	(0x1 << 2)
#define MAX77759_FG_MISCCFG_VEX_CLEAR	(~(0x1 << 2))
#define MAX77759_FG_MISCCFG_SACFG_SHIFT	0
#define MAX77759_FG_MISCCFG_SACFG_MASK	(0x3 << 0)
#define MAX77759_FG_MISCCFG_SACFG_CLEAR	(~(0x3 << 0))

MAX77759_BFF(fg_misccfg_fus,15,12)
MAX77759_BFF(fg_misccfg_enbi1,11,11)
MAX77759_BFF(fg_misccfg_initvfg,10,10)
MAX77759_BFF(fg_misccfg_mixrate,9,5)
MAX77759_BFF(fg_misccfg_rdfclrn,4,4)
MAX77759_BFF(fg_misccfg_vttl,3,3)
MAX77759_BFF(fg_misccfg_vex,2,2)
MAX77759_BFF(fg_misccfg_sacfg,1,0)
static inline const char *
max77759_fg_misccfg_cstr(char *buff, size_t len, int val)
{
#ifdef SCNPRINTF
	int i = 0;

	i += SCNPRINTF(&buff[i], len - i, " FUS=%x",
		FIELD2VALUE(MAX77759_FG_MISCCFG_FUS, val));
	i += SCNPRINTF(&buff[i], len - i, " ENBI1=%x",
		FIELD2VALUE(MAX77759_FG_MISCCFG_ENBI1, val));
	i += SCNPRINTF(&buff[i], len - i, " INITVFG=%x",
		FIELD2VALUE(MAX77759_FG_MISCCFG_INITVFG, val));
	i += SCNPRINTF(&buff[i], len - i, " MIXRATE=%x",
		FIELD2VALUE(MAX77759_FG_MISCCFG_MIXRATE, val));
	i += SCNPRINTF(&buff[i], len - i, " RDFCLRN=%x",
		FIELD2VALUE(MAX77759_FG_MISCCFG_RDFCLRN, val));
	i += SCNPRINTF(&buff[i], len - i, " VTTL=%x",
		FIELD2VALUE(MAX77759_FG_MISCCFG_VTTL, val));
	i += SCNPRINTF(&buff[i], len - i, " VEX=%x",
		FIELD2VALUE(MAX77759_FG_MISCCFG_VEX, val));
	i += SCNPRINTF(&buff[i], len - i, " SACFG=%x",
		FIELD2VALUE(MAX77759_FG_MISCCFG_SACFG, val));
#else
	buff[0] = 0;
#endif
	return buff;
}

/*
 * TGain,0x2C,0b1110101110001101,0xeb8d
 * TGAIN[15:8],,,,,,
 */
#define MAX77759_FG_TGAIN	0x2C

/*
 * TOff,0x2D,0b10000010101010,0x20aa
 * TOFF[15:8],,,,,,
 */
#define MAX77759_FG_TOFF	0x2D

/*
 * CGain,0x2E,0b10000000000,0x400
 * CGAIN[15:8],,,,,,
 */
#define MAX77759_FG_CGAIN	0x2E

/*
 * COff,0x2F,0b00000000,0x00
 * COFF[15:8],,,,,,
 */
#define MAX77759_FG_COFF	0x2F

/*
 * dV_acc,0x30,0b10000000000,0x400
 * dV_acc[15:8],,,,,,
 */
#define MAX77759_FG_DV_ACC	0x30

/*
 * dI_acc,0x31,0b11001000000,0x640
 * dI_acc[15:8],,,,,,
 */
#define MAX77759_FG_DI_ACC	0x31

/*
 * QRTable20,0x32,0b101100000100,0xb04
 * QRTable20[15:8],,,,,,
 */
#define MAX77759_FG_QRTABLE20	0x32

/*
 * AtTTF,0x33,0b1111111111111111,0xffff
 * AtTTF[15:8],,,,,,
 */
#define MAX77759_FG_ATTTF	0x33

/*
 * TConvert,0x34,0b1011000000000,0x1600
 * TConvert[15:8],,,,,,
 */
#define MAX77759_FG_TCONVERT	0x34

/*
 * FullCapRep,0x35,0b101110111000,0xbb8
 * FullCapRep[15:8],,,,,,
 */
#define MAX77759_FG_FULLCAPREP	0x35

/*
 * IAvgEmpty,0x36,0b1111010001001000,0xf448
 * Iavg_empty[15:8],,,,,,
 */
#define MAX77759_FG_IAVGEMPTY	0x36

/*
 * FCTC,0x37,0b10111100000,0x5e0
 * RSRVD[15:8],,,,,,
 */
#define MAX77759_FG_FCTC	0x37

/*
 * RComp0,0x38,0b01110000,0x70
 * SPR_15_8[7:0],,,,,,
 */
#define MAX77759_FG_RCOMP0	0x38

#define MAX77759_FG_RCOMP0_SPR_15_8_SHIFT	8
#define MAX77759_FG_RCOMP0_SPR_15_8_MASK	(0xff << 8)
#define MAX77759_FG_RCOMP0_SPR_15_8_CLEAR	(~(0xff << 8))
#define MAX77759_FG_RCOMP0_RCOMP0_SHIFT	0
#define MAX77759_FG_RCOMP0_RCOMP0_MASK	(0xff << 0)
#define MAX77759_FG_RCOMP0_RCOMP0_CLEAR	(~(0xff << 0))

MAX77759_BFF(fg_rcomp0_spr_15_8,15,8)
MAX77759_BFF(fg_rcomp0_rcomp0,7,0)
static inline const char *
max77759_fg_rcomp0_cstr(char *buff, size_t len, int val)
{
#ifdef SCNPRINTF
	int i = 0;

	i += SCNPRINTF(&buff[i], len - i, " SPR_15_8=%x",
		FIELD2VALUE(MAX77759_FG_RCOMP0_SPR_15_8, val));
	i += SCNPRINTF(&buff[i], len - i, " RCOMP0=%x",
		FIELD2VALUE(MAX77759_FG_RCOMP0_RCOMP0, val));
#else
	buff[0] = 0;
#endif
	return buff;
}

/*
 * TempCo,0x39,0b10011000111101,0x263d
 * TempCoHot[7:0],,,,,,
 */
#define MAX77759_FG_TEMPCO	0x39

#define MAX77759_FG_TEMPCO_TEMPCOHOT_SHIFT	8
#define MAX77759_FG_TEMPCO_TEMPCOHOT_MASK	(0xff << 8)
#define MAX77759_FG_TEMPCO_TEMPCOHOT_CLEAR	(~(0xff << 8))
#define MAX77759_FG_TEMPCO_TEMPCOCOLD_SHIFT	0
#define MAX77759_FG_TEMPCO_TEMPCOCOLD_MASK	(0xff << 0)
#define MAX77759_FG_TEMPCO_TEMPCOCOLD_CLEAR	(~(0xff << 0))

MAX77759_BFF(fg_tempco_tempcohot,15,8)
MAX77759_BFF(fg_tempco_tempcocold,7,0)
static inline const char *
max77759_fg_tempco_cstr(char *buff, size_t len, int val)
{
#ifdef SCNPRINTF
	int i = 0;

	i += SCNPRINTF(&buff[i], len - i, " TEMPCOHOT=%x",
		FIELD2VALUE(MAX77759_FG_TEMPCO_TEMPCOHOT, val));
	i += SCNPRINTF(&buff[i], len - i, " TEMPCOCOLD=%x",
		FIELD2VALUE(MAX77759_FG_TEMPCO_TEMPCOCOLD, val));
#else
	buff[0] = 0;
#endif
	return buff;
}

/*
 * VEmpty,0x3A,0b1010010101100001,0xa561
 * V_Empty[8:1],,,,,,
 */
#define MAX77759_FG_VEMPTY	0x3A

#define MAX77759_FG_VEMPTY_V_EMPTY_SHIFT	8
#define MAX77759_FG_VEMPTY_V_EMPTY_MASK	(0xff << 8)
#define MAX77759_FG_VEMPTY_V_EMPTY_CLEAR	(~(0xff << 8))
#define MAX77759_FG_VEMPTY_V_RECOVER_SHIFT	1
#define MAX77759_FG_VEMPTY_V_RECOVER_MASK	(0x7f << 1)
#define MAX77759_FG_VEMPTY_V_RECOVER_CLEAR	(~(0x7f << 1))

MAX77759_BFF(fg_vempty_v_empty,15,8)
MAX77759_BFF(fg_vempty_v_recover,7,1)
static inline const char *
max77759_fg_vempty_cstr(char *buff, size_t len, int val)
{
#ifdef SCNPRINTF
	int i = 0;

	i += SCNPRINTF(&buff[i], len - i, " V_EMPTY=%x",
		FIELD2VALUE(MAX77759_FG_VEMPTY_V_EMPTY, val));
	i += SCNPRINTF(&buff[i], len - i, " V_RECOVER=%x",
		FIELD2VALUE(MAX77759_FG_VEMPTY_V_RECOVER, val));
#else
	buff[0] = 0;
#endif
	return buff;
}

/*
 * AvgCurrent0,0x3B,0b111111111111111,0x7fff
 * AvgCurrent0[15:8],,,,,,
 */
#define MAX77759_FG_AVGCURRENT0	0x3B

/*
 * TaskPeriod,0x3C,0b1011010000000,0x1680
 * TaskPeriod[15:8],,,,,,
 */
#define MAX77759_FG_TASKPERIOD	0x3C

/*
 * FStat,0x3D,0b00000001,0x01
 * SPR_15,RDF,SPR_13,DeBn,SRP_11,Relck,RelDt
 */
#define MAX77759_FG_FSTAT	0x3D
#define MAX77759_FG_FSTAT_SPR_15	(0x1 << 15)
#define MAX77759_FG_FSTAT_RDF	(0x1 << 14)
#define MAX77759_FG_FSTAT_SPR_13	(0x1 << 13)
#define MAX77759_FG_FSTAT_DEBN	(0x1 << 12)
#define MAX77759_FG_FSTAT_SRP_11	(0x1 << 11)
#define MAX77759_FG_FSTAT_RELCK	(0x1 << 10)
#define MAX77759_FG_FSTAT_RELDT	(0x1 << 9)
#define MAX77759_FG_FSTAT_EDET	(0x1 << 8)
#define MAX77759_FG_FSTAT_FQ	(0x1 << 7)
#define MAX77759_FG_FSTAT_RELDT2	(0x1 << 6)
#define MAX77759_FG_FSTAT_TIMER_START	(0x1 << 5)
#define MAX77759_FG_FSTAT_SPR_4	(0x1 << 4)
#define MAX77759_FG_FSTAT_ACCEN	(0x1 << 3)
#define MAX77759_FG_FSTAT_WK	(0x1 << 2)
#define MAX77759_FG_FSTAT_LDMDL	(0x1 << 1)
#define MAX77759_FG_FSTAT_DNR	(0x1 << 0)

#define MAX77759_FG_FSTAT_SPR_15_SHIFT	15
#define MAX77759_FG_FSTAT_SPR_15_MASK	(0x1 << 15)
#define MAX77759_FG_FSTAT_SPR_15_CLEAR	(~(0x1 << 15))
#define MAX77759_FG_FSTAT_RDF_SHIFT	14
#define MAX77759_FG_FSTAT_RDF_MASK	(0x1 << 14)
#define MAX77759_FG_FSTAT_RDF_CLEAR	(~(0x1 << 14))
#define MAX77759_FG_FSTAT_SPR_13_SHIFT	13
#define MAX77759_FG_FSTAT_SPR_13_MASK	(0x1 << 13)
#define MAX77759_FG_FSTAT_SPR_13_CLEAR	(~(0x1 << 13))
#define MAX77759_FG_FSTAT_DEBN_SHIFT	12
#define MAX77759_FG_FSTAT_DEBN_MASK	(0x1 << 12)
#define MAX77759_FG_FSTAT_DEBN_CLEAR	(~(0x1 << 12))
#define MAX77759_FG_FSTAT_SRP_11_SHIFT	11
#define MAX77759_FG_FSTAT_SRP_11_MASK	(0x1 << 11)
#define MAX77759_FG_FSTAT_SRP_11_CLEAR	(~(0x1 << 11))
#define MAX77759_FG_FSTAT_RELCK_SHIFT	10
#define MAX77759_FG_FSTAT_RELCK_MASK	(0x1 << 10)
#define MAX77759_FG_FSTAT_RELCK_CLEAR	(~(0x1 << 10))
#define MAX77759_FG_FSTAT_RELDT_SHIFT	9
#define MAX77759_FG_FSTAT_RELDT_MASK	(0x1 << 9)
#define MAX77759_FG_FSTAT_RELDT_CLEAR	(~(0x1 << 9))
#define MAX77759_FG_FSTAT_EDET_SHIFT	8
#define MAX77759_FG_FSTAT_EDET_MASK	(0x1 << 8)
#define MAX77759_FG_FSTAT_EDET_CLEAR	(~(0x1 << 8))
#define MAX77759_FG_FSTAT_FQ_SHIFT	7
#define MAX77759_FG_FSTAT_FQ_MASK	(0x1 << 7)
#define MAX77759_FG_FSTAT_FQ_CLEAR	(~(0x1 << 7))
#define MAX77759_FG_FSTAT_RELDT2_SHIFT	6
#define MAX77759_FG_FSTAT_RELDT2_MASK	(0x1 << 6)
#define MAX77759_FG_FSTAT_RELDT2_CLEAR	(~(0x1 << 6))
#define MAX77759_FG_FSTAT_TIMER_START_SHIFT	5
#define MAX77759_FG_FSTAT_TIMER_START_MASK	(0x1 << 5)
#define MAX77759_FG_FSTAT_TIMER_START_CLEAR	(~(0x1 << 5))
#define MAX77759_FG_FSTAT_SPR_4_SHIFT	4
#define MAX77759_FG_FSTAT_SPR_4_MASK	(0x1 << 4)
#define MAX77759_FG_FSTAT_SPR_4_CLEAR	(~(0x1 << 4))
#define MAX77759_FG_FSTAT_ACCEN_SHIFT	3
#define MAX77759_FG_FSTAT_ACCEN_MASK	(0x1 << 3)
#define MAX77759_FG_FSTAT_ACCEN_CLEAR	(~(0x1 << 3))
#define MAX77759_FG_FSTAT_WK_SHIFT	2
#define MAX77759_FG_FSTAT_WK_MASK	(0x1 << 2)
#define MAX77759_FG_FSTAT_WK_CLEAR	(~(0x1 << 2))
#define MAX77759_FG_FSTAT_LDMDL_SHIFT	1
#define MAX77759_FG_FSTAT_LDMDL_MASK	(0x1 << 1)
#define MAX77759_FG_FSTAT_LDMDL_CLEAR	(~(0x1 << 1))
#define MAX77759_FG_FSTAT_DNR_SHIFT	0
#define MAX77759_FG_FSTAT_DNR_MASK	(0x1 << 0)
#define MAX77759_FG_FSTAT_DNR_CLEAR	(~(0x1 << 0))

MAX77759_BFF(fg_fstat_spr_15,15,15)
MAX77759_BFF(fg_fstat_rdf,14,14)
MAX77759_BFF(fg_fstat_spr_13,13,13)
MAX77759_BFF(fg_fstat_debn,12,12)
MAX77759_BFF(fg_fstat_srp_11,11,11)
MAX77759_BFF(fg_fstat_relck,10,10)
MAX77759_BFF(fg_fstat_reldt,9,9)
MAX77759_BFF(fg_fstat_edet,8,8)
MAX77759_BFF(fg_fstat_fq,7,7)
MAX77759_BFF(fg_fstat_reldt2,6,6)
MAX77759_BFF(fg_fstat_timer_start,5,5)
MAX77759_BFF(fg_fstat_spr_4,4,4)
MAX77759_BFF(fg_fstat_accen,3,3)
MAX77759_BFF(fg_fstat_wk,2,2)
MAX77759_BFF(fg_fstat_ldmdl,1,1)
MAX77759_BFF(fg_fstat_dnr,0,0)
static inline const char *
max77759_fg_fstat_cstr(char *buff, size_t len, int val)
{
#ifdef SCNPRINTF
	int i = 0;

	i += SCNPRINTF(&buff[i], len - i, " SPR_15=%x",
		FIELD2VALUE(MAX77759_FG_FSTAT_SPR_15, val));
	i += SCNPRINTF(&buff[i], len - i, " RDF=%x",
		FIELD2VALUE(MAX77759_FG_FSTAT_RDF, val));
	i += SCNPRINTF(&buff[i], len - i, " SPR_13=%x",
		FIELD2VALUE(MAX77759_FG_FSTAT_SPR_13, val));
	i += SCNPRINTF(&buff[i], len - i, " DEBN=%x",
		FIELD2VALUE(MAX77759_FG_FSTAT_DEBN, val));
	i += SCNPRINTF(&buff[i], len - i, " SRP_11=%x",
		FIELD2VALUE(MAX77759_FG_FSTAT_SRP_11, val));
	i += SCNPRINTF(&buff[i], len - i, " RELCK=%x",
		FIELD2VALUE(MAX77759_FG_FSTAT_RELCK, val));
	i += SCNPRINTF(&buff[i], len - i, " RELDT=%x",
		FIELD2VALUE(MAX77759_FG_FSTAT_RELDT, val));
	i += SCNPRINTF(&buff[i], len - i, " EDET=%x",
		FIELD2VALUE(MAX77759_FG_FSTAT_EDET, val));
	i += SCNPRINTF(&buff[i], len - i, " FQ=%x",
		FIELD2VALUE(MAX77759_FG_FSTAT_FQ, val));
	i += SCNPRINTF(&buff[i], len - i, " RELDT2=%x",
		FIELD2VALUE(MAX77759_FG_FSTAT_RELDT2, val));
	i += SCNPRINTF(&buff[i], len - i, " TIMER_START=%x",
		FIELD2VALUE(MAX77759_FG_FSTAT_TIMER_START, val));
	i += SCNPRINTF(&buff[i], len - i, " SPR_4=%x",
		FIELD2VALUE(MAX77759_FG_FSTAT_SPR_4, val));
	i += SCNPRINTF(&buff[i], len - i, " ACCEN=%x",
		FIELD2VALUE(MAX77759_FG_FSTAT_ACCEN, val));
	i += SCNPRINTF(&buff[i], len - i, " WK=%x",
		FIELD2VALUE(MAX77759_FG_FSTAT_WK, val));
	i += SCNPRINTF(&buff[i], len - i, " LDMDL=%x",
		FIELD2VALUE(MAX77759_FG_FSTAT_LDMDL, val));
	i += SCNPRINTF(&buff[i], len - i, " DNR=%x",
		FIELD2VALUE(MAX77759_FG_FSTAT_DNR, val));
#else
	buff[0] = 0;
#endif
	return buff;
}

/*
 * Timer,0x3E,0b00000000,0x00
 * TIMER[15:8],,,,,,
 */
#define MAX77759_FG_TIMER	0x3E

/*
 * ShdnTimer,0x3F,0b1110000000000000,0xe000
 * SHDN_THR[2:0],,,SHDNCTR[12:8],,,
 */
#define MAX77759_FG_SHDNTIMER	0x3F

#define MAX77759_FG_SHDNTIMER_SHDN_THR_SHIFT	13
#define MAX77759_FG_SHDNTIMER_SHDN_THR_MASK	(0x7 << 13)
#define MAX77759_FG_SHDNTIMER_SHDN_THR_CLEAR	(~(0x7 << 13))
#define MAX77759_FG_SHDNTIMER_SHDNCTR_SHIFT	0
#define MAX77759_FG_SHDNTIMER_SHDNCTR_MASK	(0x1fff << 0)
#define MAX77759_FG_SHDNTIMER_SHDNCTR_CLEAR	(~(0x1fff << 0))

MAX77759_BFF(fg_shdntimer_shdn_thr,15,13)
MAX77759_BFF(fg_shdntimer_shdnctr,12,0)
static inline const char *
max77759_fg_shdntimer_cstr(char *buff, size_t len, int val)
{
#ifdef SCNPRINTF
	int i = 0;

	i += SCNPRINTF(&buff[i], len - i, " SHDN_THR=%x",
		FIELD2VALUE(MAX77759_FG_SHDNTIMER_SHDN_THR, val));
	i += SCNPRINTF(&buff[i], len - i, " SHDNCTR=%x",
		FIELD2VALUE(MAX77759_FG_SHDNTIMER_SHDNCTR, val));
#else
	buff[0] = 0;
#endif
	return buff;
}

/*
 * THMHOT,0x40,0b11111111100,0x7fc
 * VR[4:0],,,,,Vhys[2:0],
 */
#define MAX77759_FG_THMHOT	0x40

#define MAX77759_FG_THMHOT_VR_SHIFT	11
#define MAX77759_FG_THMHOT_VR_MASK	(0x1f << 11)
#define MAX77759_FG_THMHOT_VR_CLEAR	(~(0x1f << 11))
#define MAX77759_FG_THMHOT_VHYS_SHIFT	8
#define MAX77759_FG_THMHOT_VHYS_MASK	(0x7 << 8)
#define MAX77759_FG_THMHOT_VHYS_CLEAR	(~(0x7 << 8))
#define MAX77759_FG_THMHOT_TR_SHIFT	3
#define MAX77759_FG_THMHOT_TR_MASK	(0x1f << 3)
#define MAX77759_FG_THMHOT_TR_CLEAR	(~(0x1f << 3))
#define MAX77759_FG_THMHOT_THYS_SHIFT	0
#define MAX77759_FG_THMHOT_THYS_MASK	(0x7 << 0)
#define MAX77759_FG_THMHOT_THYS_CLEAR	(~(0x7 << 0))

MAX77759_BFF(fg_thmhot_vr,15,11)
MAX77759_BFF(fg_thmhot_vhys,10,8)
MAX77759_BFF(fg_thmhot_tr,7,3)
MAX77759_BFF(fg_thmhot_thys,2,0)
static inline const char *
max77759_fg_thmhot_cstr(char *buff, size_t len, int val)
{
#ifdef SCNPRINTF
	int i = 0;

	i += SCNPRINTF(&buff[i], len - i, " VR=%x",
		FIELD2VALUE(MAX77759_FG_THMHOT_VR, val));
	i += SCNPRINTF(&buff[i], len - i, " VHYS=%x",
		FIELD2VALUE(MAX77759_FG_THMHOT_VHYS, val));
	i += SCNPRINTF(&buff[i], len - i, " TR=%x",
		FIELD2VALUE(MAX77759_FG_THMHOT_TR, val));
	i += SCNPRINTF(&buff[i], len - i, " THYS=%x",
		FIELD2VALUE(MAX77759_FG_THMHOT_THYS, val));
#else
	buff[0] = 0;
#endif
	return buff;
}

/*
 * CTESample,0x41,0b00000000,0x00
 * CTESample[15:8],,,,,,
 */
#define MAX77759_FG_CTESAMPLE	0x41

/*
 * QRTable30,0x42,0b100010000101,0x885
 * QRTable30[15:8],,,,,,
 */
#define MAX77759_FG_QRTABLE30	0x42

/*
 * ISys,0x43,0b00000000,0x00
 * ISYS[15:8],,,,,,
 */
#define MAX77759_FG_ISYS	0x43

/*
 * AvgVCell0,0x44,0b1000000000000000,0x8000
 * AvgVCELL0[15:8],,,,,,
 */
#define MAX77759_FG_AVGVCELL0	0x44

/*
 * dQAcc,0x45,0b00010111,0x17
 * dQacc[15:8],,,,,,
 */
#define MAX77759_FG_DQACC	0x45

/*
 * dPAcc,0x46,0b110010000,0x190
 * dPacc[15:8],,,,,,
 */
#define MAX77759_FG_DPACC	0x46

/*
 * RlxSOC,0x47,0b00000000,0x00
 * RlxSOC[15:8],,,,,,
 */
#define MAX77759_FG_RLXSOC	0x47

/*
 * VFSOC0,0x48,0b11001000000000,0x3200
 * VFSOC0[15:8],,,,,,
 */
#define MAX77759_FG_VFSOC0	0x48

/*
 * ConvgCfg,0x49,0b10001001000001,0x2241
 * RepLow[3:0],,,,VoltLowOff[4:1],,
 */
#define MAX77759_FG_CONVGCFG	0x49

#define MAX77759_FG_CONVGCFG_REPLOW_SHIFT	12
#define MAX77759_FG_CONVGCFG_REPLOW_MASK	(0xf << 12)
#define MAX77759_FG_CONVGCFG_REPLOW_CLEAR	(~(0xf << 12))
#define MAX77759_FG_CONVGCFG_VOLTLOWOFF_SHIFT	8
#define MAX77759_FG_CONVGCFG_VOLTLOWOFF_MASK	(0xf << 8)
#define MAX77759_FG_CONVGCFG_VOLTLOWOFF_CLEAR	(~(0xf << 8))
#define MAX77759_FG_CONVGCFG_MINSLOPEX_SHIFT	4
#define MAX77759_FG_CONVGCFG_MINSLOPEX_MASK	(0xf << 4)
#define MAX77759_FG_CONVGCFG_MINSLOPEX_CLEAR	(~(0xf << 4))
#define MAX77759_FG_CONVGCFG_REPL_PER_STAGE_SHIFT	1
#define MAX77759_FG_CONVGCFG_REPL_PER_STAGE_MASK	(0x7 << 1)
#define MAX77759_FG_CONVGCFG_REPL_PER_STAGE_CLEAR	(~(0x7 << 1))

MAX77759_BFF(fg_convgcfg_replow,15,12)
MAX77759_BFF(fg_convgcfg_voltlowoff,11,8)
MAX77759_BFF(fg_convgcfg_minslopex,7,4)
MAX77759_BFF(fg_convgcfg_repl_per_stage,3,1)
static inline const char *
max77759_fg_convgcfg_cstr(char *buff, size_t len, int val)
{
#ifdef SCNPRINTF
	int i = 0;

	i += SCNPRINTF(&buff[i], len - i, " REPLOW=%x",
		FIELD2VALUE(MAX77759_FG_CONVGCFG_REPLOW, val));
	i += SCNPRINTF(&buff[i], len - i, " VOLTLOWOFF=%x",
		FIELD2VALUE(MAX77759_FG_CONVGCFG_VOLTLOWOFF, val));
	i += SCNPRINTF(&buff[i], len - i, " MINSLOPEX=%x",
		FIELD2VALUE(MAX77759_FG_CONVGCFG_MINSLOPEX, val));
	i += SCNPRINTF(&buff[i], len - i, " REPL_PER_STAGE=%x",
		FIELD2VALUE(MAX77759_FG_CONVGCFG_REPL_PER_STAGE, val));
#else
	buff[0] = 0;
#endif
	return buff;
}

/*
 * VFRemCap,0x4A,0b10111011100,0x5dc
 * VFRemCap[15:8],,,,,,
 */
#define MAX77759_FG_VFREMCAP	0x4A

/*
 * AvgISys,0x4B,0b00000000,0x00
 * AVGISYS[15:8],,,,,,
 */
#define MAX77759_FG_AVGISYS	0x4B

/*
 * QH0,0x4C,0b00000000,0x00
 * QH0[15:8],,,,,,
 */
#define MAX77759_FG_QH0	0x4C

/*
 * QH,0x4D,0b00000000,0x00
 * QH[15:8],,,,,,
 */
#define MAX77759_FG_QH	0x4D

/*
 * QL,0x4E,0b00000000,0x00
 * QL[15:8],,,,,,
 */
#define MAX77759_FG_QL	0x4E

/*
 * MixAtFull,0x4F,0b101110111000,0xbb8
 * Reserved[15:8],,,,,,
 */
#define MAX77759_FG_MIXATFULL	0x4F

/*
 * Status2,0xB0,0b00000000,0x00
 * SPR_15_6[9:2],,,,,,
 */
#define MAX77759_FG_STATUS2	0xB0
#define MAX77759_FG_STATUS2_FULLDET	(0x1 << 5)
#define MAX77759_FG_STATUS2_HIB	(0x1 << 1)
#define MAX77759_FG_STATUS2_SPR_0	(0x1 << 0)

#define MAX77759_FG_STATUS2_SPR_15_6_SHIFT	6
#define MAX77759_FG_STATUS2_SPR_15_6_MASK	(0x3ff << 6)
#define MAX77759_FG_STATUS2_SPR_15_6_CLEAR	(~(0x3ff << 6))
#define MAX77759_FG_STATUS2_FULLDET_SHIFT	5
#define MAX77759_FG_STATUS2_FULLDET_MASK	(0x1 << 5)
#define MAX77759_FG_STATUS2_FULLDET_CLEAR	(~(0x1 << 5))
#define MAX77759_FG_STATUS2_SPR_4_2_SHIFT	2
#define MAX77759_FG_STATUS2_SPR_4_2_MASK	(0x7 << 2)
#define MAX77759_FG_STATUS2_SPR_4_2_CLEAR	(~(0x7 << 2))
#define MAX77759_FG_STATUS2_HIB_SHIFT	1
#define MAX77759_FG_STATUS2_HIB_MASK	(0x1 << 1)
#define MAX77759_FG_STATUS2_HIB_CLEAR	(~(0x1 << 1))
#define MAX77759_FG_STATUS2_SPR_0_SHIFT	0
#define MAX77759_FG_STATUS2_SPR_0_MASK	(0x1 << 0)
#define MAX77759_FG_STATUS2_SPR_0_CLEAR	(~(0x1 << 0))

MAX77759_BFF(fg_status2_spr_15_6,15,6)
MAX77759_BFF(fg_status2_fulldet,5,5)
MAX77759_BFF(fg_status2_spr_4_2,4,2)
MAX77759_BFF(fg_status2_hib,1,1)
MAX77759_BFF(fg_status2_spr_0,0,0)
static inline const char *
max77759_fg_status2_cstr(char *buff, size_t len, int val)
{
#ifdef SCNPRINTF
	int i = 0;

	i += SCNPRINTF(&buff[i], len - i, " SPR_15_6=%x",
		FIELD2VALUE(MAX77759_FG_STATUS2_SPR_15_6, val));
	i += SCNPRINTF(&buff[i], len - i, " FULLDET=%x",
		FIELD2VALUE(MAX77759_FG_STATUS2_FULLDET, val));
	i += SCNPRINTF(&buff[i], len - i, " SPR_4_2=%x",
		FIELD2VALUE(MAX77759_FG_STATUS2_SPR_4_2, val));
	i += SCNPRINTF(&buff[i], len - i, " HIB=%x",
		FIELD2VALUE(MAX77759_FG_STATUS2_HIB, val));
	i += SCNPRINTF(&buff[i], len - i, " SPR_0=%x",
		FIELD2VALUE(MAX77759_FG_STATUS2_SPR_0, val));
#else
	buff[0] = 0;
#endif
	return buff;
}

/*
 * VSys,0xB1,0b00000000,0x00
 * VSys[15:8],,,,,,
 */
#define MAX77759_FG_VSYS	0xB1

/*
 * TAlrtTh2,0xB2,0b111111110000000,0x7f80
 * Reserved[15:8],,,,,,
 */
#define MAX77759_FG_TALRTTH2	0xB2

/*
 * VByp,0xB3,0b00000000,0x00
 * VByp[15:8],,,,,,
 */
#define MAX77759_FG_VBYP	0xB3

/*
 * IAlrtTh,0xB4,0b111111110000000,0x7f80
 * ISYSOCP_TH[7:0],,,,,,
 */
#define MAX77759_FG_IALRTTH	0xB4

#define MAX77759_FG_IALRTTH_ISYSOCP_TH_SHIFT	8
#define MAX77759_FG_IALRTTH_ISYSOCP_TH_MASK	(0xff << 8)
#define MAX77759_FG_IALRTTH_ISYSOCP_TH_CLEAR	(~(0xff << 8))
#define MAX77759_FG_IALRTTH_IBATTMIN_TH_SHIFT	0
#define MAX77759_FG_IALRTTH_IBATTMIN_TH_MASK	(0xff << 0)
#define MAX77759_FG_IALRTTH_IBATTMIN_TH_CLEAR	(~(0xff << 0))

MAX77759_BFF(fg_ialrtth_isysocp_th,15,8)
MAX77759_BFF(fg_ialrtth_ibattmin_th,7,0)
static inline const char *
max77759_fg_ialrtth_cstr(char *buff, size_t len, int val)
{
#ifdef SCNPRINTF
	int i = 0;

	i += SCNPRINTF(&buff[i], len - i, " ISYSOCP_TH=%x",
		FIELD2VALUE(MAX77759_FG_IALRTTH_ISYSOCP_TH, val));
	i += SCNPRINTF(&buff[i], len - i, " IBATTMIN_TH=%x",
		FIELD2VALUE(MAX77759_FG_IALRTTH_IBATTMIN_TH, val));
#else
	buff[0] = 0;
#endif
	return buff;
}

/*
 * TTF_CFG,0xB5,0b00000101,0x05
 * SPR_15_3[12:5],,,,,,
 */
#define MAX77759_FG_TTF_CFG	0xB5

#define MAX77759_FG_TTF_CFG_SPR_15_3_SHIFT	3
#define MAX77759_FG_TTF_CFG_SPR_15_3_MASK	(0x1fff << 3)
#define MAX77759_FG_TTF_CFG_SPR_15_3_CLEAR	(~(0x1fff << 3))
#define MAX77759_FG_TTF_CFG_TTF_CFG_SHIFT	0
#define MAX77759_FG_TTF_CFG_TTF_CFG_MASK	(0x7 << 0)
#define MAX77759_FG_TTF_CFG_TTF_CFG_CLEAR	(~(0x7 << 0))

MAX77759_BFF(fg_ttf_cfg_spr_15_3,15,3)
MAX77759_BFF(fg_ttf_cfg_ttf_cfg,2,0)
static inline const char *
max77759_fg_ttf_cfg_cstr(char *buff, size_t len, int val)
{
#ifdef SCNPRINTF
	int i = 0;

	i += SCNPRINTF(&buff[i], len - i, " SPR_15_3=%x",
		FIELD2VALUE(MAX77759_FG_TTF_CFG_SPR_15_3, val));
	i += SCNPRINTF(&buff[i], len - i, " TTF_CFG=%x",
		FIELD2VALUE(MAX77759_FG_TTF_CFG_TTF_CFG, val));
#else
	buff[0] = 0;
#endif
	return buff;
}

/*
 * CV_MixCap,0xB6,0b100011001010,0x8ca
 * CV_MixCap[15:8],,,,,,
 */
#define MAX77759_FG_CV_MIXCAP	0xB6

/*
 * CV_HalfTime,0xB7,0b101000000000,0xa00
 * CV_Halftime[15:8],,,,,,
 */
#define MAX77759_FG_CV_HALFTIME	0xB7

/*
 * CGTempCo,0xB8,0b00000000,0x00
 * Reserved[15:8],,,,,,
 */
#define MAX77759_FG_CGTEMPCO	0xB8

/*
 * Curve,0xB9,0b01101011,0x6b
 * Reserved[7:0],,,,,,
 */
#define MAX77759_FG_CURVE	0xB9

#define MAX77759_FG_CURVE_RESERVED_SHIFT	8
#define MAX77759_FG_CURVE_RESERVED_MASK	(0xff << 8)
#define MAX77759_FG_CURVE_RESERVED_CLEAR	(~(0xff << 8))
#define MAX77759_FG_CURVE_TCURVE_SHIFT	0
#define MAX77759_FG_CURVE_TCURVE_MASK	(0xff << 0)
#define MAX77759_FG_CURVE_TCURVE_CLEAR	(~(0xff << 0))

MAX77759_BFF(fg_curve_reserved,15,8)
MAX77759_BFF(fg_curve_tcurve,7,0)
static inline const char *
max77759_fg_curve_cstr(char *buff, size_t len, int val)
{
#ifdef SCNPRINTF
	int i = 0;

	i += SCNPRINTF(&buff[i], len - i, " RESERVED=%x",
		FIELD2VALUE(MAX77759_FG_CURVE_RESERVED, val));
	i += SCNPRINTF(&buff[i], len - i, " TCURVE=%x",
		FIELD2VALUE(MAX77759_FG_CURVE_TCURVE, val));
#else
	buff[0] = 0;
#endif
	return buff;
}

/*
 * HibCfg,0xBA,0b100100001100,0x90c
 * EnHib,HibEnterTime[2:0],,,HibThreshold[3:0],,
 */
#define MAX77759_FG_HIBCFG	0xBA
#define MAX77759_FG_HIBCFG_ENHIB	(0x1 << 15)

#define MAX77759_FG_HIBCFG_ENHIB_SHIFT	15
#define MAX77759_FG_HIBCFG_ENHIB_MASK	(0x1 << 15)
#define MAX77759_FG_HIBCFG_ENHIB_CLEAR	(~(0x1 << 15))
#define MAX77759_FG_HIBCFG_HIBENTERTIME_SHIFT	12
#define MAX77759_FG_HIBCFG_HIBENTERTIME_MASK	(0x7 << 12)
#define MAX77759_FG_HIBCFG_HIBENTERTIME_CLEAR	(~(0x7 << 12))
#define MAX77759_FG_HIBCFG_HIBTHRESHOLD_SHIFT	8
#define MAX77759_FG_HIBCFG_HIBTHRESHOLD_MASK	(0xf << 8)
#define MAX77759_FG_HIBCFG_HIBTHRESHOLD_CLEAR	(~(0xf << 8))
#define MAX77759_FG_HIBCFG_SPR_7_5_SHIFT	5
#define MAX77759_FG_HIBCFG_SPR_7_5_MASK	(0x7 << 5)
#define MAX77759_FG_HIBCFG_SPR_7_5_CLEAR	(~(0x7 << 5))
#define MAX77759_FG_HIBCFG_HIBEXITTIME_SHIFT	3
#define MAX77759_FG_HIBCFG_HIBEXITTIME_MASK	(0x3 << 3)
#define MAX77759_FG_HIBCFG_HIBEXITTIME_CLEAR	(~(0x3 << 3))
#define MAX77759_FG_HIBCFG_HIBSCALAR_SHIFT	0
#define MAX77759_FG_HIBCFG_HIBSCALAR_MASK	(0x7 << 0)
#define MAX77759_FG_HIBCFG_HIBSCALAR_CLEAR	(~(0x7 << 0))

MAX77759_BFF(fg_hibcfg_enhib,15,15)
MAX77759_BFF(fg_hibcfg_hibentertime,14,12)
MAX77759_BFF(fg_hibcfg_hibthreshold,11,8)
MAX77759_BFF(fg_hibcfg_spr_7_5,7,5)
MAX77759_BFF(fg_hibcfg_hibexittime,4,3)
MAX77759_BFF(fg_hibcfg_hibscalar,2,0)
static inline const char *
max77759_fg_hibcfg_cstr(char *buff, size_t len, int val)
{
#ifdef SCNPRINTF
	int i = 0;

	i += SCNPRINTF(&buff[i], len - i, " ENHIB=%x",
		FIELD2VALUE(MAX77759_FG_HIBCFG_ENHIB, val));
	i += SCNPRINTF(&buff[i], len - i, " HIBENTERTIME=%x",
		FIELD2VALUE(MAX77759_FG_HIBCFG_HIBENTERTIME, val));
	i += SCNPRINTF(&buff[i], len - i, " HIBTHRESHOLD=%x",
		FIELD2VALUE(MAX77759_FG_HIBCFG_HIBTHRESHOLD, val));
	i += SCNPRINTF(&buff[i], len - i, " SPR_7_5=%x",
		FIELD2VALUE(MAX77759_FG_HIBCFG_SPR_7_5, val));
	i += SCNPRINTF(&buff[i], len - i, " HIBEXITTIME=%x",
		FIELD2VALUE(MAX77759_FG_HIBCFG_HIBEXITTIME, val));
	i += SCNPRINTF(&buff[i], len - i, " HIBSCALAR=%x",
		FIELD2VALUE(MAX77759_FG_HIBCFG_HIBSCALAR, val));
#else
	buff[0] = 0;
#endif
	return buff;
}

/*
 * Config2,0xBB,0b01010000,0x50
 * SPR_15_11[4:0],,,,,FCThmHot,ThmHotEn
 */
#define MAX77759_FG_CONFIG2	0xBB
#define MAX77759_FG_CONFIG2_FCTHMHOT	(0x1 << 10)
#define MAX77759_FG_CONFIG2_THMHOTEN	(0x1 << 9)
#define MAX77759_FG_CONFIG2_THMHOTALRTEN	(0x1 << 8)
#define MAX77759_FG_CONFIG2_DSOCEN	(0x1 << 7)
#define MAX77759_FG_CONFIG2_TALRTEN	(0x1 << 6)
#define MAX77759_FG_CONFIG2_LDMDL	(0x1 << 5)
#define MAX77759_FG_CONFIG2_OCVQEN	(0x1 << 4)

#define MAX77759_FG_CONFIG2_SPR_15_11_SHIFT	11
#define MAX77759_FG_CONFIG2_SPR_15_11_MASK	(0x1f << 11)
#define MAX77759_FG_CONFIG2_SPR_15_11_CLEAR	(~(0x1f << 11))
#define MAX77759_FG_CONFIG2_FCTHMHOT_SHIFT	10
#define MAX77759_FG_CONFIG2_FCTHMHOT_MASK	(0x1 << 10)
#define MAX77759_FG_CONFIG2_FCTHMHOT_CLEAR	(~(0x1 << 10))
#define MAX77759_FG_CONFIG2_THMHOTEN_SHIFT	9
#define MAX77759_FG_CONFIG2_THMHOTEN_MASK	(0x1 << 9)
#define MAX77759_FG_CONFIG2_THMHOTEN_CLEAR	(~(0x1 << 9))
#define MAX77759_FG_CONFIG2_THMHOTALRTEN_SHIFT	8
#define MAX77759_FG_CONFIG2_THMHOTALRTEN_MASK	(0x1 << 8)
#define MAX77759_FG_CONFIG2_THMHOTALRTEN_CLEAR	(~(0x1 << 8))
#define MAX77759_FG_CONFIG2_DSOCEN_SHIFT	7
#define MAX77759_FG_CONFIG2_DSOCEN_MASK	(0x1 << 7)
#define MAX77759_FG_CONFIG2_DSOCEN_CLEAR	(~(0x1 << 7))
#define MAX77759_FG_CONFIG2_TALRTEN_SHIFT	6
#define MAX77759_FG_CONFIG2_TALRTEN_MASK	(0x1 << 6)
#define MAX77759_FG_CONFIG2_TALRTEN_CLEAR	(~(0x1 << 6))
#define MAX77759_FG_CONFIG2_LDMDL_SHIFT	5
#define MAX77759_FG_CONFIG2_LDMDL_MASK	(0x1 << 5)
#define MAX77759_FG_CONFIG2_LDMDL_CLEAR	(~(0x1 << 5))
#define MAX77759_FG_CONFIG2_OCVQEN_SHIFT	4
#define MAX77759_FG_CONFIG2_OCVQEN_MASK	(0x1 << 4)
#define MAX77759_FG_CONFIG2_OCVQEN_CLEAR	(~(0x1 << 4))
#define MAX77759_FG_CONFIG2_ISYSNCURR_SHIFT	0
#define MAX77759_FG_CONFIG2_ISYSNCURR_MASK	(0xf << 0)
#define MAX77759_FG_CONFIG2_ISYSNCURR_CLEAR	(~(0xf << 0))

MAX77759_BFF(fg_config2_spr_15_11,15,11)
MAX77759_BFF(fg_config2_fcthmhot,10,10)
MAX77759_BFF(fg_config2_thmhoten,9,9)
MAX77759_BFF(fg_config2_thmhotalrten,8,8)
MAX77759_BFF(fg_config2_dsocen,7,7)
MAX77759_BFF(fg_config2_talrten,6,6)
MAX77759_BFF(fg_config2_ldmdl,5,5)
MAX77759_BFF(fg_config2_ocvqen,4,4)
MAX77759_BFF(fg_config2_isysncurr,3,0)
static inline const char *
max77759_fg_config2_cstr(char *buff, size_t len, int val)
{
#ifdef SCNPRINTF
	int i = 0;

	i += SCNPRINTF(&buff[i], len - i, " SPR_15_11=%x",
		FIELD2VALUE(MAX77759_FG_CONFIG2_SPR_15_11, val));
	i += SCNPRINTF(&buff[i], len - i, " FCTHMHOT=%x",
		FIELD2VALUE(MAX77759_FG_CONFIG2_FCTHMHOT, val));
	i += SCNPRINTF(&buff[i], len - i, " THMHOTEN=%x",
		FIELD2VALUE(MAX77759_FG_CONFIG2_THMHOTEN, val));
	i += SCNPRINTF(&buff[i], len - i, " THMHOTALRTEN=%x",
		FIELD2VALUE(MAX77759_FG_CONFIG2_THMHOTALRTEN, val));
	i += SCNPRINTF(&buff[i], len - i, " DSOCEN=%x",
		FIELD2VALUE(MAX77759_FG_CONFIG2_DSOCEN, val));
	i += SCNPRINTF(&buff[i], len - i, " TALRTEN=%x",
		FIELD2VALUE(MAX77759_FG_CONFIG2_TALRTEN, val));
	i += SCNPRINTF(&buff[i], len - i, " LDMDL=%x",
		FIELD2VALUE(MAX77759_FG_CONFIG2_LDMDL, val));
	i += SCNPRINTF(&buff[i], len - i, " OCVQEN=%x",
		FIELD2VALUE(MAX77759_FG_CONFIG2_OCVQEN, val));
	i += SCNPRINTF(&buff[i], len - i, " ISYSNCURR=%x",
		FIELD2VALUE(MAX77759_FG_CONFIG2_ISYSNCURR, val));
#else
	buff[0] = 0;
#endif
	return buff;
}

/*
 * VRipple,0xBC,0b00000000,0x00
 * Vripple[15:8],,,,,,
 */
#define MAX77759_FG_VRIPPLE	0xBC

/*
 * RippleCfg,0xBD,0b1000000100,0x204
 * kDV[12:5],,,,,,
 */
#define MAX77759_FG_RIPPLECFG	0xBD

#define MAX77759_FG_RIPPLECFG_KDV_SHIFT	3
#define MAX77759_FG_RIPPLECFG_KDV_MASK	(0x1fff << 3)
#define MAX77759_FG_RIPPLECFG_KDV_CLEAR	(~(0x1fff << 3))
#define MAX77759_FG_RIPPLECFG_NR_SHIFT	0
#define MAX77759_FG_RIPPLECFG_NR_MASK	(0x7 << 0)
#define MAX77759_FG_RIPPLECFG_NR_CLEAR	(~(0x7 << 0))

MAX77759_BFF(fg_ripplecfg_kdv,15,3)
MAX77759_BFF(fg_ripplecfg_nr,2,0)
static inline const char *
max77759_fg_ripplecfg_cstr(char *buff, size_t len, int val)
{
#ifdef SCNPRINTF
	int i = 0;

	i += SCNPRINTF(&buff[i], len - i, " KDV=%x",
		FIELD2VALUE(MAX77759_FG_RIPPLECFG_KDV, val));
	i += SCNPRINTF(&buff[i], len - i, " NR=%x",
		FIELD2VALUE(MAX77759_FG_RIPPLECFG_NR, val));
#else
	buff[0] = 0;
#endif
	return buff;
}

/*
 * TimerH,0xBE,0b00000000,0x00
 * TIMERH[15:8],,,,,,
 */
#define MAX77759_FG_TIMERH	0xBE

/*
 * IIn,0xD0,0b00000000,0x00
 * ,,,,,,
 */
#define MAX77759_FG_IIN	0xD0

/*
 * AtQresidual,0xDC,0b00000000,0x00
 * AtQresidual[15:8],,,,,,
 */
#define MAX77759_FG_ATQRESIDUAL	0xDC

/*
 * AtTTE,0xDD,0b00000000,0x00
 * AtTTE[15:8],,,,,,
 */
#define MAX77759_FG_ATTTE	0xDD

/*
 * AtAvSOC,0xDE,0b00000000,0x00
 * AtAvSOC[15:8],,,,,,
 */
#define MAX77759_FG_ATAVSOC	0xDE

/*
 * AtAvCap,0xDF,0b00000000,0x00
 * AtAvCap[15:8],,,,,,
 */
#define MAX77759_FG_ATAVCAP	0xDF

/*
 * VFOCV,0xFB,0b00000000,0x00
 * VFOCV[15:8],,,,,,
 */
#define MAX77759_FG_VFOCV	0xFB

/*
 * VFSOC,0xFF,0b00000000,0x00
 * VFSOC[15:8],,,,,,
 */
#define MAX77759_FG_VFSOC	0xFF

/* section:  USB  */

/*
 * VENDOR_ID_L,0x0,0b01101010,0x6a
 * VENDOR_ID_L[7:0],,,,,,
 */
#define MAX77759_USB_VENDOR_ID_L	0x0

/*
 * VENDOR_ID_H,0x1,0b00001011,0x0b
 * VENDOR_ID_H[7:0],,,,,,
 */
#define MAX77759_USB_VENDOR_ID_H	0x1

/*
 * PRODUCT_ID_L,0x2,0b01011001,0x59
 * PRODUCT_ID_L[7:0],,,,,,
 */
#define MAX77759_USB_PRODUCT_ID_L	0x2

/*
 * PRODUCT_ID_H,0x3,0b01110111,0x77
 * PRODUCT_ID_H[7:0],,,,,,
 */
#define MAX77759_USB_PRODUCT_ID_H	0x3

/*
 * DEVICE_ID_L,0x4,0b00000010,0x02
 * DEVICE_ID_L[7:0],,,,,,
 */
#define MAX77759_USB_DEVICE_ID_L	0x4

/*
 * DEVICE_ID_H,0x5,0b00000000,0x00
 * DEVICE_ID_H[7:0],,,,,,
 */
#define MAX77759_USB_DEVICE_ID_H	0x5

/*
 * USBTYPEC_REV_L,0x6,0b00010011,0x13
 * TYPEC_REV_L[7:0],,,,,,
 */
#define MAX77759_USB_USBTYPEC_REV_L	0x6

/*
 * USBTYPEC_REV_H,0x7,0b00000000,0x00
 * TYPEC_REV_H[7:0],,,,,,
 */
#define MAX77759_USB_USBTYPEC_REV_H	0x7

/*
 * USBPD_REV_VER_L,0x8,0b00010010,0x12
 * PD_VER[7:0],,,,,,
 */
#define MAX77759_USB_USBPD_REV_VER_L	0x8

/*
 * USBPD_REV_VER_H,0x9,0b00110000,0x30
 * PD_REV[7:0],,,,,,
 */
#define MAX77759_USB_USBPD_REV_VER_H	0x9

/*
 * PD_INTERFACE_REV_L,0xA,0b00010001,0x11
 * PD_IF_REV_L[7:0],,,,,,
 */
#define MAX77759_USB_PD_INTERFACE_REV_L	0xA

/*
 * PD_INTERFACE_REV_H,0xB,0b00100000,0x20
 * PD_IF_REV_H[7:0],,,,,,
 */
#define MAX77759_USB_PD_INTERFACE_REV_H	0xB

/*
 * ALERT_L,0x10,0b00000000,0x00
 * VBUS_ALARM_HI,TX_SOP_MSG_SUCC,TX_SOP_MSG_DISCRD,TX_SOP_MSG_FAIL,RX_HARD_RST,RX_SOP_MSG_STAT,PWR_STAT
 */
#define MAX77759_USB_ALERT_L	0x10
#define MAX77759_USB_ALERT_L_VBUS_ALARM_HI	(0x1 << 7)
#define MAX77759_USB_ALERT_L_TX_SOP_MSG_SUCC	(0x1 << 6)
#define MAX77759_USB_ALERT_L_TX_SOP_MSG_DISCRD	(0x1 << 5)
#define MAX77759_USB_ALERT_L_TX_SOP_MSG_FAIL	(0x1 << 4)
#define MAX77759_USB_ALERT_L_RX_HARD_RST	(0x1 << 3)
#define MAX77759_USB_ALERT_L_RX_SOP_MSG_STAT	(0x1 << 2)
#define MAX77759_USB_ALERT_L_PWR_STAT	(0x1 << 1)
#define MAX77759_USB_ALERT_L_CC_STAT	(0x1 << 0)

#define MAX77759_USB_ALERT_L_VBUS_ALARM_HI_SHIFT	7
#define MAX77759_USB_ALERT_L_VBUS_ALARM_HI_MASK	(0x1 << 7)
#define MAX77759_USB_ALERT_L_VBUS_ALARM_HI_CLEAR	(~(0x1 << 7))
#define MAX77759_USB_ALERT_L_TX_SOP_MSG_SUCC_SHIFT	6
#define MAX77759_USB_ALERT_L_TX_SOP_MSG_SUCC_MASK	(0x1 << 6)
#define MAX77759_USB_ALERT_L_TX_SOP_MSG_SUCC_CLEAR	(~(0x1 << 6))
#define MAX77759_USB_ALERT_L_TX_SOP_MSG_DISCRD_SHIFT	5
#define MAX77759_USB_ALERT_L_TX_SOP_MSG_DISCRD_MASK	(0x1 << 5)
#define MAX77759_USB_ALERT_L_TX_SOP_MSG_DISCRD_CLEAR	(~(0x1 << 5))
#define MAX77759_USB_ALERT_L_TX_SOP_MSG_FAIL_SHIFT	4
#define MAX77759_USB_ALERT_L_TX_SOP_MSG_FAIL_MASK	(0x1 << 4)
#define MAX77759_USB_ALERT_L_TX_SOP_MSG_FAIL_CLEAR	(~(0x1 << 4))
#define MAX77759_USB_ALERT_L_RX_HARD_RST_SHIFT	3
#define MAX77759_USB_ALERT_L_RX_HARD_RST_MASK	(0x1 << 3)
#define MAX77759_USB_ALERT_L_RX_HARD_RST_CLEAR	(~(0x1 << 3))
#define MAX77759_USB_ALERT_L_RX_SOP_MSG_STAT_SHIFT	2
#define MAX77759_USB_ALERT_L_RX_SOP_MSG_STAT_MASK	(0x1 << 2)
#define MAX77759_USB_ALERT_L_RX_SOP_MSG_STAT_CLEAR	(~(0x1 << 2))
#define MAX77759_USB_ALERT_L_PWR_STAT_SHIFT	1
#define MAX77759_USB_ALERT_L_PWR_STAT_MASK	(0x1 << 1)
#define MAX77759_USB_ALERT_L_PWR_STAT_CLEAR	(~(0x1 << 1))
#define MAX77759_USB_ALERT_L_CC_STAT_SHIFT	0
#define MAX77759_USB_ALERT_L_CC_STAT_MASK	(0x1 << 0)
#define MAX77759_USB_ALERT_L_CC_STAT_CLEAR	(~(0x1 << 0))

MAX77759_BFF(usb_alert_l_vbus_alarm_hi,7,7)
MAX77759_BFF(usb_alert_l_tx_sop_msg_succ,6,6)
MAX77759_BFF(usb_alert_l_tx_sop_msg_discrd,5,5)
MAX77759_BFF(usb_alert_l_tx_sop_msg_fail,4,4)
MAX77759_BFF(usb_alert_l_rx_hard_rst,3,3)
MAX77759_BFF(usb_alert_l_rx_sop_msg_stat,2,2)
MAX77759_BFF(usb_alert_l_pwr_stat,1,1)
MAX77759_BFF(usb_alert_l_cc_stat,0,0)
static inline const char *
max77759_usb_alert_l_cstr(char *buff, size_t len, int val)
{
#ifdef SCNPRINTF
	int i = 0;

	i += SCNPRINTF(&buff[i], len - i, " VBUS_ALARM_HI=%x",
		FIELD2VALUE(MAX77759_USB_ALERT_L_VBUS_ALARM_HI, val));
	i += SCNPRINTF(&buff[i], len - i, " TX_SOP_MSG_SUCC=%x",
		FIELD2VALUE(MAX77759_USB_ALERT_L_TX_SOP_MSG_SUCC, val));
	i += SCNPRINTF(&buff[i], len - i, " TX_SOP_MSG_DISCRD=%x",
		FIELD2VALUE(MAX77759_USB_ALERT_L_TX_SOP_MSG_DISCRD, val));
	i += SCNPRINTF(&buff[i], len - i, " TX_SOP_MSG_FAIL=%x",
		FIELD2VALUE(MAX77759_USB_ALERT_L_TX_SOP_MSG_FAIL, val));
	i += SCNPRINTF(&buff[i], len - i, " RX_HARD_RST=%x",
		FIELD2VALUE(MAX77759_USB_ALERT_L_RX_HARD_RST, val));
	i += SCNPRINTF(&buff[i], len - i, " RX_SOP_MSG_STAT=%x",
		FIELD2VALUE(MAX77759_USB_ALERT_L_RX_SOP_MSG_STAT, val));
	i += SCNPRINTF(&buff[i], len - i, " PWR_STAT=%x",
		FIELD2VALUE(MAX77759_USB_ALERT_L_PWR_STAT, val));
	i += SCNPRINTF(&buff[i], len - i, " CC_STAT=%x",
		FIELD2VALUE(MAX77759_USB_ALERT_L_CC_STAT, val));
#else
	buff[0] = 0;
#endif
	return buff;
}

/*
 * ALERT_H,0x11,0b00000000,0x00
 * VNDR_ALRT,ALERT_EXTND,EXTND_STAT,RSVD_4,VBUS_SNK_DISC_DET,RX_BUFF_OVRFL,FAULT_STAT
 */
#define MAX77759_USB_ALERT_H	0x11
#define MAX77759_USB_ALERT_H_VNDR_ALRT	(0x1 << 7)
#define MAX77759_USB_ALERT_H_ALERT_EXTND	(0x1 << 6)
#define MAX77759_USB_ALERT_H_EXTND_STAT	(0x1 << 5)
#define MAX77759_USB_ALERT_H_RSVD_4	(0x1 << 4)
#define MAX77759_USB_ALERT_H_VBUS_SNK_DISC_DET	(0x1 << 3)
#define MAX77759_USB_ALERT_H_RX_BUFF_OVRFL	(0x1 << 2)
#define MAX77759_USB_ALERT_H_FAULT_STAT	(0x1 << 1)
#define MAX77759_USB_ALERT_H_VBUS_ALARM_LO	(0x1 << 0)

#define MAX77759_USB_ALERT_H_VNDR_ALRT_SHIFT	7
#define MAX77759_USB_ALERT_H_VNDR_ALRT_MASK	(0x1 << 7)
#define MAX77759_USB_ALERT_H_VNDR_ALRT_CLEAR	(~(0x1 << 7))
#define MAX77759_USB_ALERT_H_ALERT_EXTND_SHIFT	6
#define MAX77759_USB_ALERT_H_ALERT_EXTND_MASK	(0x1 << 6)
#define MAX77759_USB_ALERT_H_ALERT_EXTND_CLEAR	(~(0x1 << 6))
#define MAX77759_USB_ALERT_H_EXTND_STAT_SHIFT	5
#define MAX77759_USB_ALERT_H_EXTND_STAT_MASK	(0x1 << 5)
#define MAX77759_USB_ALERT_H_EXTND_STAT_CLEAR	(~(0x1 << 5))
#define MAX77759_USB_ALERT_H_RSVD_4_SHIFT	4
#define MAX77759_USB_ALERT_H_RSVD_4_MASK	(0x1 << 4)
#define MAX77759_USB_ALERT_H_RSVD_4_CLEAR	(~(0x1 << 4))
#define MAX77759_USB_ALERT_H_VBUS_SNK_DISC_DET_SHIFT	3
#define MAX77759_USB_ALERT_H_VBUS_SNK_DISC_DET_MASK	(0x1 << 3)
#define MAX77759_USB_ALERT_H_VBUS_SNK_DISC_DET_CLEAR	(~(0x1 << 3))
#define MAX77759_USB_ALERT_H_RX_BUFF_OVRFL_SHIFT	2
#define MAX77759_USB_ALERT_H_RX_BUFF_OVRFL_MASK	(0x1 << 2)
#define MAX77759_USB_ALERT_H_RX_BUFF_OVRFL_CLEAR	(~(0x1 << 2))
#define MAX77759_USB_ALERT_H_FAULT_STAT_SHIFT	1
#define MAX77759_USB_ALERT_H_FAULT_STAT_MASK	(0x1 << 1)
#define MAX77759_USB_ALERT_H_FAULT_STAT_CLEAR	(~(0x1 << 1))
#define MAX77759_USB_ALERT_H_VBUS_ALARM_LO_SHIFT	0
#define MAX77759_USB_ALERT_H_VBUS_ALARM_LO_MASK	(0x1 << 0)
#define MAX77759_USB_ALERT_H_VBUS_ALARM_LO_CLEAR	(~(0x1 << 0))

MAX77759_BFF(usb_alert_h_vndr_alrt,7,7)
MAX77759_BFF(usb_alert_h_alert_extnd,6,6)
MAX77759_BFF(usb_alert_h_extnd_stat,5,5)
MAX77759_BFF(usb_alert_h_rsvd_4,4,4)
MAX77759_BFF(usb_alert_h_vbus_snk_disc_det,3,3)
MAX77759_BFF(usb_alert_h_rx_buff_ovrfl,2,2)
MAX77759_BFF(usb_alert_h_fault_stat,1,1)
MAX77759_BFF(usb_alert_h_vbus_alarm_lo,0,0)
static inline const char *
max77759_usb_alert_h_cstr(char *buff, size_t len, int val)
{
#ifdef SCNPRINTF
	int i = 0;

	i += SCNPRINTF(&buff[i], len - i, " VNDR_ALRT=%x",
		FIELD2VALUE(MAX77759_USB_ALERT_H_VNDR_ALRT, val));
	i += SCNPRINTF(&buff[i], len - i, " ALERT_EXTND=%x",
		FIELD2VALUE(MAX77759_USB_ALERT_H_ALERT_EXTND, val));
	i += SCNPRINTF(&buff[i], len - i, " EXTND_STAT=%x",
		FIELD2VALUE(MAX77759_USB_ALERT_H_EXTND_STAT, val));
	i += SCNPRINTF(&buff[i], len - i, " RSVD_4=%x",
		FIELD2VALUE(MAX77759_USB_ALERT_H_RSVD_4, val));
	i += SCNPRINTF(&buff[i], len - i, " VBUS_SNK_DISC_DET=%x",
		FIELD2VALUE(MAX77759_USB_ALERT_H_VBUS_SNK_DISC_DET, val));
	i += SCNPRINTF(&buff[i], len - i, " RX_BUFF_OVRFL=%x",
		FIELD2VALUE(MAX77759_USB_ALERT_H_RX_BUFF_OVRFL, val));
	i += SCNPRINTF(&buff[i], len - i, " FAULT_STAT=%x",
		FIELD2VALUE(MAX77759_USB_ALERT_H_FAULT_STAT, val));
	i += SCNPRINTF(&buff[i], len - i, " VBUS_ALARM_LO=%x",
		FIELD2VALUE(MAX77759_USB_ALERT_H_VBUS_ALARM_LO, val));
#else
	buff[0] = 0;
#endif
	return buff;
}

/*
 * ALERT_MASK_L,0x12,0b11111111,0xff
 * MSK_VBUS_V_ALRM_HI,MSK_TX_SOP_MSG_SUCC,MSK_TX_SOP_MSG_DISCRD,MSK_TX_SOP_MSG_FAIL,MSK_RX_HARD_RST,MSK_RX_SOP_MSG_STAT,MSK_PWR_STAT
 */
#define MAX77759_USB_ALERT_MASK_L	0x12
#define MAX77759_USB_ALERT_MASK_L_MSK_VBUS_V_ALRM_HI	(0x1 << 7)
#define MAX77759_USB_ALERT_MASK_L_MSK_TX_SOP_MSG_SUCC	(0x1 << 6)
#define MAX77759_USB_ALERT_MASK_L_MSK_TX_SOP_MSG_DISCRD	(0x1 << 5)
#define MAX77759_USB_ALERT_MASK_L_MSK_TX_SOP_MSG_FAIL	(0x1 << 4)
#define MAX77759_USB_ALERT_MASK_L_MSK_RX_HARD_RST	(0x1 << 3)
#define MAX77759_USB_ALERT_MASK_L_MSK_RX_SOP_MSG_STAT	(0x1 << 2)
#define MAX77759_USB_ALERT_MASK_L_MSK_PWR_STAT	(0x1 << 1)
#define MAX77759_USB_ALERT_MASK_L_MSK_CC_STAT	(0x1 << 0)

#define MAX77759_USB_ALERT_MASK_L_MSK_VBUS_V_ALRM_HI_SHIFT	7
#define MAX77759_USB_ALERT_MASK_L_MSK_VBUS_V_ALRM_HI_MASK	(0x1 << 7)
#define MAX77759_USB_ALERT_MASK_L_MSK_VBUS_V_ALRM_HI_CLEAR	(~(0x1 << 7))
#define MAX77759_USB_ALERT_MASK_L_MSK_TX_SOP_MSG_SUCC_SHIFT	6
#define MAX77759_USB_ALERT_MASK_L_MSK_TX_SOP_MSG_SUCC_MASK	(0x1 << 6)
#define MAX77759_USB_ALERT_MASK_L_MSK_TX_SOP_MSG_SUCC_CLEAR	(~(0x1 << 6))
#define MAX77759_USB_ALERT_MASK_L_MSK_TX_SOP_MSG_DISCRD_SHIFT	5
#define MAX77759_USB_ALERT_MASK_L_MSK_TX_SOP_MSG_DISCRD_MASK	(0x1 << 5)
#define MAX77759_USB_ALERT_MASK_L_MSK_TX_SOP_MSG_DISCRD_CLEAR	(~(0x1 << 5))
#define MAX77759_USB_ALERT_MASK_L_MSK_TX_SOP_MSG_FAIL_SHIFT	4
#define MAX77759_USB_ALERT_MASK_L_MSK_TX_SOP_MSG_FAIL_MASK	(0x1 << 4)
#define MAX77759_USB_ALERT_MASK_L_MSK_TX_SOP_MSG_FAIL_CLEAR	(~(0x1 << 4))
#define MAX77759_USB_ALERT_MASK_L_MSK_RX_HARD_RST_SHIFT	3
#define MAX77759_USB_ALERT_MASK_L_MSK_RX_HARD_RST_MASK	(0x1 << 3)
#define MAX77759_USB_ALERT_MASK_L_MSK_RX_HARD_RST_CLEAR	(~(0x1 << 3))
#define MAX77759_USB_ALERT_MASK_L_MSK_RX_SOP_MSG_STAT_SHIFT	2
#define MAX77759_USB_ALERT_MASK_L_MSK_RX_SOP_MSG_STAT_MASK	(0x1 << 2)
#define MAX77759_USB_ALERT_MASK_L_MSK_RX_SOP_MSG_STAT_CLEAR	(~(0x1 << 2))
#define MAX77759_USB_ALERT_MASK_L_MSK_PWR_STAT_SHIFT	1
#define MAX77759_USB_ALERT_MASK_L_MSK_PWR_STAT_MASK	(0x1 << 1)
#define MAX77759_USB_ALERT_MASK_L_MSK_PWR_STAT_CLEAR	(~(0x1 << 1))
#define MAX77759_USB_ALERT_MASK_L_MSK_CC_STAT_SHIFT	0
#define MAX77759_USB_ALERT_MASK_L_MSK_CC_STAT_MASK	(0x1 << 0)
#define MAX77759_USB_ALERT_MASK_L_MSK_CC_STAT_CLEAR	(~(0x1 << 0))

MAX77759_BFF(usb_alert_mask_l_msk_vbus_v_alrm_hi,7,7)
MAX77759_BFF(usb_alert_mask_l_msk_tx_sop_msg_succ,6,6)
MAX77759_BFF(usb_alert_mask_l_msk_tx_sop_msg_discrd,5,5)
MAX77759_BFF(usb_alert_mask_l_msk_tx_sop_msg_fail,4,4)
MAX77759_BFF(usb_alert_mask_l_msk_rx_hard_rst,3,3)
MAX77759_BFF(usb_alert_mask_l_msk_rx_sop_msg_stat,2,2)
MAX77759_BFF(usb_alert_mask_l_msk_pwr_stat,1,1)
MAX77759_BFF(usb_alert_mask_l_msk_cc_stat,0,0)
static inline const char *
max77759_usb_alert_mask_l_cstr(char *buff, size_t len, int val)
{
#ifdef SCNPRINTF
	int i = 0;

	i += SCNPRINTF(&buff[i], len - i, " MSK_VBUS_V_ALRM_HI=%x",
		FIELD2VALUE(MAX77759_USB_ALERT_MASK_L_MSK_VBUS_V_ALRM_HI, val));
	i += SCNPRINTF(&buff[i], len - i, " MSK_TX_SOP_MSG_SUCC=%x",
		FIELD2VALUE(MAX77759_USB_ALERT_MASK_L_MSK_TX_SOP_MSG_SUCC, val));
	i += SCNPRINTF(&buff[i], len - i, " MSK_TX_SOP_MSG_DISCRD=%x",
		FIELD2VALUE(MAX77759_USB_ALERT_MASK_L_MSK_TX_SOP_MSG_DISCRD, val));
	i += SCNPRINTF(&buff[i], len - i, " MSK_TX_SOP_MSG_FAIL=%x",
		FIELD2VALUE(MAX77759_USB_ALERT_MASK_L_MSK_TX_SOP_MSG_FAIL, val));
	i += SCNPRINTF(&buff[i], len - i, " MSK_RX_HARD_RST=%x",
		FIELD2VALUE(MAX77759_USB_ALERT_MASK_L_MSK_RX_HARD_RST, val));
	i += SCNPRINTF(&buff[i], len - i, " MSK_RX_SOP_MSG_STAT=%x",
		FIELD2VALUE(MAX77759_USB_ALERT_MASK_L_MSK_RX_SOP_MSG_STAT, val));
	i += SCNPRINTF(&buff[i], len - i, " MSK_PWR_STAT=%x",
		FIELD2VALUE(MAX77759_USB_ALERT_MASK_L_MSK_PWR_STAT, val));
	i += SCNPRINTF(&buff[i], len - i, " MSK_CC_STAT=%x",
		FIELD2VALUE(MAX77759_USB_ALERT_MASK_L_MSK_CC_STAT, val));
#else
	buff[0] = 0;
#endif
	return buff;
}

/*
 * ALERT_MASK_H,0x13,0b01101111,0x6f
 * MSK_VNDR_ALRT,MSK_ALRT_EXTND,MSK_EXTND_STAT,RSVD_4,MSK_VBUS_SNK_DISC_DET,MSK_RX_BUFF_OVRFL,MSK_FAULT_STAT
 */
#define MAX77759_USB_ALERT_MASK_H	0x13
#define MAX77759_USB_ALERT_MASK_H_MSK_VNDR_ALRT	(0x1 << 7)
#define MAX77759_USB_ALERT_MASK_H_MSK_ALRT_EXTND	(0x1 << 6)
#define MAX77759_USB_ALERT_MASK_H_MSK_EXTND_STAT	(0x1 << 5)
#define MAX77759_USB_ALERT_MASK_H_RSVD_4	(0x1 << 4)
#define MAX77759_USB_ALERT_MASK_H_MSK_VBUS_SNK_DISC_DET	(0x1 << 3)
#define MAX77759_USB_ALERT_MASK_H_MSK_RX_BUFF_OVRFL	(0x1 << 2)
#define MAX77759_USB_ALERT_MASK_H_MSK_FAULT_STAT	(0x1 << 1)
#define MAX77759_USB_ALERT_MASK_H_MSK_VBUS_V_ALRM_LO	(0x1 << 0)

#define MAX77759_USB_ALERT_MASK_H_MSK_VNDR_ALRT_SHIFT	7
#define MAX77759_USB_ALERT_MASK_H_MSK_VNDR_ALRT_MASK	(0x1 << 7)
#define MAX77759_USB_ALERT_MASK_H_MSK_VNDR_ALRT_CLEAR	(~(0x1 << 7))
#define MAX77759_USB_ALERT_MASK_H_MSK_ALRT_EXTND_SHIFT	6
#define MAX77759_USB_ALERT_MASK_H_MSK_ALRT_EXTND_MASK	(0x1 << 6)
#define MAX77759_USB_ALERT_MASK_H_MSK_ALRT_EXTND_CLEAR	(~(0x1 << 6))
#define MAX77759_USB_ALERT_MASK_H_MSK_EXTND_STAT_SHIFT	5
#define MAX77759_USB_ALERT_MASK_H_MSK_EXTND_STAT_MASK	(0x1 << 5)
#define MAX77759_USB_ALERT_MASK_H_MSK_EXTND_STAT_CLEAR	(~(0x1 << 5))
#define MAX77759_USB_ALERT_MASK_H_RSVD_4_SHIFT	4
#define MAX77759_USB_ALERT_MASK_H_RSVD_4_MASK	(0x1 << 4)
#define MAX77759_USB_ALERT_MASK_H_RSVD_4_CLEAR	(~(0x1 << 4))
#define MAX77759_USB_ALERT_MASK_H_MSK_VBUS_SNK_DISC_DET_SHIFT	3
#define MAX77759_USB_ALERT_MASK_H_MSK_VBUS_SNK_DISC_DET_MASK	(0x1 << 3)
#define MAX77759_USB_ALERT_MASK_H_MSK_VBUS_SNK_DISC_DET_CLEAR	(~(0x1 << 3))
#define MAX77759_USB_ALERT_MASK_H_MSK_RX_BUFF_OVRFL_SHIFT	2
#define MAX77759_USB_ALERT_MASK_H_MSK_RX_BUFF_OVRFL_MASK	(0x1 << 2)
#define MAX77759_USB_ALERT_MASK_H_MSK_RX_BUFF_OVRFL_CLEAR	(~(0x1 << 2))
#define MAX77759_USB_ALERT_MASK_H_MSK_FAULT_STAT_SHIFT	1
#define MAX77759_USB_ALERT_MASK_H_MSK_FAULT_STAT_MASK	(0x1 << 1)
#define MAX77759_USB_ALERT_MASK_H_MSK_FAULT_STAT_CLEAR	(~(0x1 << 1))
#define MAX77759_USB_ALERT_MASK_H_MSK_VBUS_V_ALRM_LO_SHIFT	0
#define MAX77759_USB_ALERT_MASK_H_MSK_VBUS_V_ALRM_LO_MASK	(0x1 << 0)
#define MAX77759_USB_ALERT_MASK_H_MSK_VBUS_V_ALRM_LO_CLEAR	(~(0x1 << 0))

MAX77759_BFF(usb_alert_mask_h_msk_vndr_alrt,7,7)
MAX77759_BFF(usb_alert_mask_h_msk_alrt_extnd,6,6)
MAX77759_BFF(usb_alert_mask_h_msk_extnd_stat,5,5)
MAX77759_BFF(usb_alert_mask_h_rsvd_4,4,4)
MAX77759_BFF(usb_alert_mask_h_msk_vbus_snk_disc_det,3,3)
MAX77759_BFF(usb_alert_mask_h_msk_rx_buff_ovrfl,2,2)
MAX77759_BFF(usb_alert_mask_h_msk_fault_stat,1,1)
MAX77759_BFF(usb_alert_mask_h_msk_vbus_v_alrm_lo,0,0)
static inline const char *
max77759_usb_alert_mask_h_cstr(char *buff, size_t len, int val)
{
#ifdef SCNPRINTF
	int i = 0;

	i += SCNPRINTF(&buff[i], len - i, " MSK_VNDR_ALRT=%x",
		FIELD2VALUE(MAX77759_USB_ALERT_MASK_H_MSK_VNDR_ALRT, val));
	i += SCNPRINTF(&buff[i], len - i, " MSK_ALRT_EXTND=%x",
		FIELD2VALUE(MAX77759_USB_ALERT_MASK_H_MSK_ALRT_EXTND, val));
	i += SCNPRINTF(&buff[i], len - i, " MSK_EXTND_STAT=%x",
		FIELD2VALUE(MAX77759_USB_ALERT_MASK_H_MSK_EXTND_STAT, val));
	i += SCNPRINTF(&buff[i], len - i, " RSVD_4=%x",
		FIELD2VALUE(MAX77759_USB_ALERT_MASK_H_RSVD_4, val));
	i += SCNPRINTF(&buff[i], len - i, " MSK_VBUS_SNK_DISC_DET=%x",
		FIELD2VALUE(MAX77759_USB_ALERT_MASK_H_MSK_VBUS_SNK_DISC_DET, val));
	i += SCNPRINTF(&buff[i], len - i, " MSK_RX_BUFF_OVRFL=%x",
		FIELD2VALUE(MAX77759_USB_ALERT_MASK_H_MSK_RX_BUFF_OVRFL, val));
	i += SCNPRINTF(&buff[i], len - i, " MSK_FAULT_STAT=%x",
		FIELD2VALUE(MAX77759_USB_ALERT_MASK_H_MSK_FAULT_STAT, val));
	i += SCNPRINTF(&buff[i], len - i, " MSK_VBUS_V_ALRM_LO=%x",
		FIELD2VALUE(MAX77759_USB_ALERT_MASK_H_MSK_VBUS_V_ALRM_LO, val));
#else
	buff[0] = 0;
#endif
	return buff;
}

/*
 * POWER_STATUS_MASK_REG,0x14,0b11111111,0xff
 * MSK_DEBG_ACC_CONN_STAT,MSK_TCPC_INIT_STAT,MSK_SRC_HI_V_STAT,MSK_SRC_VBUS_STAT,MSK_VBUS_DET_STAT,MSK_VBUS_PRSN_STAT,MSK_VCONN_PRSN_STAT
 */
#define MAX77759_USB_POWER_STATUS_MASK_REG	0x14
#define MAX77759_USB_POWER_STATUS_MASK_REG_MSK_DEBG_ACC_CONN_STAT	(0x1 << 7)
#define MAX77759_USB_POWER_STATUS_MASK_REG_MSK_TCPC_INIT_STAT	(0x1 << 6)
#define MAX77759_USB_POWER_STATUS_MASK_REG_MSK_SRC_HI_V_STAT	(0x1 << 5)
#define MAX77759_USB_POWER_STATUS_MASK_REG_MSK_SRC_VBUS_STAT	(0x1 << 4)
#define MAX77759_USB_POWER_STATUS_MASK_REG_MSK_VBUS_DET_STAT	(0x1 << 3)
#define MAX77759_USB_POWER_STATUS_MASK_REG_MSK_VBUS_PRSN_STAT	(0x1 << 2)
#define MAX77759_USB_POWER_STATUS_MASK_REG_MSK_VCONN_PRSN_STAT	(0x1 << 1)
#define MAX77759_USB_POWER_STATUS_MASK_REG_MSK_SNK_VBUS_STAT	(0x1 << 0)

#define MAX77759_USB_POWER_STATUS_MASK_REG_MSK_DEBG_ACC_CONN_STAT_SHIFT	7
#define MAX77759_USB_POWER_STATUS_MASK_REG_MSK_DEBG_ACC_CONN_STAT_MASK	(0x1 << 7)
#define MAX77759_USB_POWER_STATUS_MASK_REG_MSK_DEBG_ACC_CONN_STAT_CLEAR	(~(0x1 << 7))
#define MAX77759_USB_POWER_STATUS_MASK_REG_MSK_TCPC_INIT_STAT_SHIFT	6
#define MAX77759_USB_POWER_STATUS_MASK_REG_MSK_TCPC_INIT_STAT_MASK	(0x1 << 6)
#define MAX77759_USB_POWER_STATUS_MASK_REG_MSK_TCPC_INIT_STAT_CLEAR	(~(0x1 << 6))
#define MAX77759_USB_POWER_STATUS_MASK_REG_MSK_SRC_HI_V_STAT_SHIFT	5
#define MAX77759_USB_POWER_STATUS_MASK_REG_MSK_SRC_HI_V_STAT_MASK	(0x1 << 5)
#define MAX77759_USB_POWER_STATUS_MASK_REG_MSK_SRC_HI_V_STAT_CLEAR	(~(0x1 << 5))
#define MAX77759_USB_POWER_STATUS_MASK_REG_MSK_SRC_VBUS_STAT_SHIFT	4
#define MAX77759_USB_POWER_STATUS_MASK_REG_MSK_SRC_VBUS_STAT_MASK	(0x1 << 4)
#define MAX77759_USB_POWER_STATUS_MASK_REG_MSK_SRC_VBUS_STAT_CLEAR	(~(0x1 << 4))
#define MAX77759_USB_POWER_STATUS_MASK_REG_MSK_VBUS_DET_STAT_SHIFT	3
#define MAX77759_USB_POWER_STATUS_MASK_REG_MSK_VBUS_DET_STAT_MASK	(0x1 << 3)
#define MAX77759_USB_POWER_STATUS_MASK_REG_MSK_VBUS_DET_STAT_CLEAR	(~(0x1 << 3))
#define MAX77759_USB_POWER_STATUS_MASK_REG_MSK_VBUS_PRSN_STAT_SHIFT	2
#define MAX77759_USB_POWER_STATUS_MASK_REG_MSK_VBUS_PRSN_STAT_MASK	(0x1 << 2)
#define MAX77759_USB_POWER_STATUS_MASK_REG_MSK_VBUS_PRSN_STAT_CLEAR	(~(0x1 << 2))
#define MAX77759_USB_POWER_STATUS_MASK_REG_MSK_VCONN_PRSN_STAT_SHIFT	1
#define MAX77759_USB_POWER_STATUS_MASK_REG_MSK_VCONN_PRSN_STAT_MASK	(0x1 << 1)
#define MAX77759_USB_POWER_STATUS_MASK_REG_MSK_VCONN_PRSN_STAT_CLEAR	(~(0x1 << 1))
#define MAX77759_USB_POWER_STATUS_MASK_REG_MSK_SNK_VBUS_STAT_SHIFT	0
#define MAX77759_USB_POWER_STATUS_MASK_REG_MSK_SNK_VBUS_STAT_MASK	(0x1 << 0)
#define MAX77759_USB_POWER_STATUS_MASK_REG_MSK_SNK_VBUS_STAT_CLEAR	(~(0x1 << 0))

MAX77759_BFF(usb_power_status_mask_reg_msk_debg_acc_conn_stat,7,7)
MAX77759_BFF(usb_power_status_mask_reg_msk_tcpc_init_stat,6,6)
MAX77759_BFF(usb_power_status_mask_reg_msk_src_hi_v_stat,5,5)
MAX77759_BFF(usb_power_status_mask_reg_msk_src_vbus_stat,4,4)
MAX77759_BFF(usb_power_status_mask_reg_msk_vbus_det_stat,3,3)
MAX77759_BFF(usb_power_status_mask_reg_msk_vbus_prsn_stat,2,2)
MAX77759_BFF(usb_power_status_mask_reg_msk_vconn_prsn_stat,1,1)
MAX77759_BFF(usb_power_status_mask_reg_msk_snk_vbus_stat,0,0)
static inline const char *
max77759_usb_power_status_mask_reg_cstr(char *buff, size_t len, int val)
{
#ifdef SCNPRINTF
	int i = 0;

	i += SCNPRINTF(&buff[i], len - i, " MSK_DEBG_ACC_CONN_STAT=%x",
		FIELD2VALUE(MAX77759_USB_POWER_STATUS_MASK_REG_MSK_DEBG_ACC_CONN_STAT, val));
	i += SCNPRINTF(&buff[i], len - i, " MSK_TCPC_INIT_STAT=%x",
		FIELD2VALUE(MAX77759_USB_POWER_STATUS_MASK_REG_MSK_TCPC_INIT_STAT, val));
	i += SCNPRINTF(&buff[i], len - i, " MSK_SRC_HI_V_STAT=%x",
		FIELD2VALUE(MAX77759_USB_POWER_STATUS_MASK_REG_MSK_SRC_HI_V_STAT, val));
	i += SCNPRINTF(&buff[i], len - i, " MSK_SRC_VBUS_STAT=%x",
		FIELD2VALUE(MAX77759_USB_POWER_STATUS_MASK_REG_MSK_SRC_VBUS_STAT, val));
	i += SCNPRINTF(&buff[i], len - i, " MSK_VBUS_DET_STAT=%x",
		FIELD2VALUE(MAX77759_USB_POWER_STATUS_MASK_REG_MSK_VBUS_DET_STAT, val));
	i += SCNPRINTF(&buff[i], len - i, " MSK_VBUS_PRSN_STAT=%x",
		FIELD2VALUE(MAX77759_USB_POWER_STATUS_MASK_REG_MSK_VBUS_PRSN_STAT, val));
	i += SCNPRINTF(&buff[i], len - i, " MSK_VCONN_PRSN_STAT=%x",
		FIELD2VALUE(MAX77759_USB_POWER_STATUS_MASK_REG_MSK_VCONN_PRSN_STAT, val));
	i += SCNPRINTF(&buff[i], len - i, " MSK_SNK_VBUS_STAT=%x",
		FIELD2VALUE(MAX77759_USB_POWER_STATUS_MASK_REG_MSK_SNK_VBUS_STAT, val));
#else
	buff[0] = 0;
#endif
	return buff;
}

/*
 * FAULT_STATUS_MASK_REG,0x15,0b11111111,0xff
 * MSK_All_REG_RST,MSK_FORC_VBUS,MSK_AUTO_DISCH_FAIL,MSK_FORC_DISCH_FAIL,MSK_VBUS_OCP,MSK_VBUS_OVP,MSK_VCONN_OCP
 */
#define MAX77759_USB_FAULT_STATUS_MASK_REG	0x15
#define MAX77759_USB_FAULT_STATUS_MASK_REG_MSK_ALL_REG_RST	(0x1 << 7)
#define MAX77759_USB_FAULT_STATUS_MASK_REG_MSK_FORC_VBUS	(0x1 << 6)
#define MAX77759_USB_FAULT_STATUS_MASK_REG_MSK_AUTO_DISCH_FAIL	(0x1 << 5)
#define MAX77759_USB_FAULT_STATUS_MASK_REG_MSK_FORC_DISCH_FAIL	(0x1 << 4)
#define MAX77759_USB_FAULT_STATUS_MASK_REG_MSK_VBUS_OCP	(0x1 << 3)
#define MAX77759_USB_FAULT_STATUS_MASK_REG_MSK_VBUS_OVP	(0x1 << 2)
#define MAX77759_USB_FAULT_STATUS_MASK_REG_MSK_VCONN_OCP	(0x1 << 1)
#define MAX77759_USB_FAULT_STATUS_MASK_REG_MSK_I2C_ERR	(0x1 << 0)

#define MAX77759_USB_FAULT_STATUS_MASK_REG_MSK_ALL_REG_RST_SHIFT	7
#define MAX77759_USB_FAULT_STATUS_MASK_REG_MSK_ALL_REG_RST_MASK	(0x1 << 7)
#define MAX77759_USB_FAULT_STATUS_MASK_REG_MSK_ALL_REG_RST_CLEAR	(~(0x1 << 7))
#define MAX77759_USB_FAULT_STATUS_MASK_REG_MSK_FORC_VBUS_SHIFT	6
#define MAX77759_USB_FAULT_STATUS_MASK_REG_MSK_FORC_VBUS_MASK	(0x1 << 6)
#define MAX77759_USB_FAULT_STATUS_MASK_REG_MSK_FORC_VBUS_CLEAR	(~(0x1 << 6))
#define MAX77759_USB_FAULT_STATUS_MASK_REG_MSK_AUTO_DISCH_FAIL_SHIFT	5
#define MAX77759_USB_FAULT_STATUS_MASK_REG_MSK_AUTO_DISCH_FAIL_MASK	(0x1 << 5)
#define MAX77759_USB_FAULT_STATUS_MASK_REG_MSK_AUTO_DISCH_FAIL_CLEAR	(~(0x1 << 5))
#define MAX77759_USB_FAULT_STATUS_MASK_REG_MSK_FORC_DISCH_FAIL_SHIFT	4
#define MAX77759_USB_FAULT_STATUS_MASK_REG_MSK_FORC_DISCH_FAIL_MASK	(0x1 << 4)
#define MAX77759_USB_FAULT_STATUS_MASK_REG_MSK_FORC_DISCH_FAIL_CLEAR	(~(0x1 << 4))
#define MAX77759_USB_FAULT_STATUS_MASK_REG_MSK_VBUS_OCP_SHIFT	3
#define MAX77759_USB_FAULT_STATUS_MASK_REG_MSK_VBUS_OCP_MASK	(0x1 << 3)
#define MAX77759_USB_FAULT_STATUS_MASK_REG_MSK_VBUS_OCP_CLEAR	(~(0x1 << 3))
#define MAX77759_USB_FAULT_STATUS_MASK_REG_MSK_VBUS_OVP_SHIFT	2
#define MAX77759_USB_FAULT_STATUS_MASK_REG_MSK_VBUS_OVP_MASK	(0x1 << 2)
#define MAX77759_USB_FAULT_STATUS_MASK_REG_MSK_VBUS_OVP_CLEAR	(~(0x1 << 2))
#define MAX77759_USB_FAULT_STATUS_MASK_REG_MSK_VCONN_OCP_SHIFT	1
#define MAX77759_USB_FAULT_STATUS_MASK_REG_MSK_VCONN_OCP_MASK	(0x1 << 1)
#define MAX77759_USB_FAULT_STATUS_MASK_REG_MSK_VCONN_OCP_CLEAR	(~(0x1 << 1))
#define MAX77759_USB_FAULT_STATUS_MASK_REG_MSK_I2C_ERR_SHIFT	0
#define MAX77759_USB_FAULT_STATUS_MASK_REG_MSK_I2C_ERR_MASK	(0x1 << 0)
#define MAX77759_USB_FAULT_STATUS_MASK_REG_MSK_I2C_ERR_CLEAR	(~(0x1 << 0))

MAX77759_BFF(usb_fault_status_mask_reg_msk_all_reg_rst,7,7)
MAX77759_BFF(usb_fault_status_mask_reg_msk_forc_vbus,6,6)
MAX77759_BFF(usb_fault_status_mask_reg_msk_auto_disch_fail,5,5)
MAX77759_BFF(usb_fault_status_mask_reg_msk_forc_disch_fail,4,4)
MAX77759_BFF(usb_fault_status_mask_reg_msk_vbus_ocp,3,3)
MAX77759_BFF(usb_fault_status_mask_reg_msk_vbus_ovp,2,2)
MAX77759_BFF(usb_fault_status_mask_reg_msk_vconn_ocp,1,1)
MAX77759_BFF(usb_fault_status_mask_reg_msk_i2c_err,0,0)
static inline const char *
max77759_usb_fault_status_mask_reg_cstr(char *buff, size_t len, int val)
{
#ifdef SCNPRINTF
	int i = 0;

	i += SCNPRINTF(&buff[i], len - i, " MSK_ALL_REG_RST=%x",
		FIELD2VALUE(MAX77759_USB_FAULT_STATUS_MASK_REG_MSK_ALL_REG_RST, val));
	i += SCNPRINTF(&buff[i], len - i, " MSK_FORC_VBUS=%x",
		FIELD2VALUE(MAX77759_USB_FAULT_STATUS_MASK_REG_MSK_FORC_VBUS, val));
	i += SCNPRINTF(&buff[i], len - i, " MSK_AUTO_DISCH_FAIL=%x",
		FIELD2VALUE(MAX77759_USB_FAULT_STATUS_MASK_REG_MSK_AUTO_DISCH_FAIL, val));
	i += SCNPRINTF(&buff[i], len - i, " MSK_FORC_DISCH_FAIL=%x",
		FIELD2VALUE(MAX77759_USB_FAULT_STATUS_MASK_REG_MSK_FORC_DISCH_FAIL, val));
	i += SCNPRINTF(&buff[i], len - i, " MSK_VBUS_OCP=%x",
		FIELD2VALUE(MAX77759_USB_FAULT_STATUS_MASK_REG_MSK_VBUS_OCP, val));
	i += SCNPRINTF(&buff[i], len - i, " MSK_VBUS_OVP=%x",
		FIELD2VALUE(MAX77759_USB_FAULT_STATUS_MASK_REG_MSK_VBUS_OVP, val));
	i += SCNPRINTF(&buff[i], len - i, " MSK_VCONN_OCP=%x",
		FIELD2VALUE(MAX77759_USB_FAULT_STATUS_MASK_REG_MSK_VCONN_OCP, val));
	i += SCNPRINTF(&buff[i], len - i, " MSK_I2C_ERR=%x",
		FIELD2VALUE(MAX77759_USB_FAULT_STATUS_MASK_REG_MSK_I2C_ERR, val));
#else
	buff[0] = 0;
#endif
	return buff;
}

/*
 * EXTENDED_STATUS_MASK_REG,0x16,0b00000001,0x01
 * RSVD_7_1[6:0],,,,,,
 */
#define MAX77759_USB_EXTENDED_STATUS_MASK_REG	0x16
#define MAX77759_USB_EXTENDED_STATUS_MASK_REG_MSK_VSAFE0V	(0x1 << 0)

#define MAX77759_USB_EXTENDED_STATUS_MASK_REG_RSVD_7_1_SHIFT	1
#define MAX77759_USB_EXTENDED_STATUS_MASK_REG_RSVD_7_1_MASK	(0x7f << 1)
#define MAX77759_USB_EXTENDED_STATUS_MASK_REG_RSVD_7_1_CLEAR	(~(0x7f << 1))
#define MAX77759_USB_EXTENDED_STATUS_MASK_REG_MSK_VSAFE0V_SHIFT	0
#define MAX77759_USB_EXTENDED_STATUS_MASK_REG_MSK_VSAFE0V_MASK	(0x1 << 0)
#define MAX77759_USB_EXTENDED_STATUS_MASK_REG_MSK_VSAFE0V_CLEAR	(~(0x1 << 0))

MAX77759_BFF(usb_extended_status_mask_reg_rsvd_7_1,7,1)
MAX77759_BFF(usb_extended_status_mask_reg_msk_vsafe0v,0,0)
static inline const char *
max77759_usb_extended_status_mask_reg_cstr(char *buff, size_t len, int val)
{
#ifdef SCNPRINTF
	int i = 0;

	i += SCNPRINTF(&buff[i], len - i, " RSVD_7_1=%x",
		FIELD2VALUE(MAX77759_USB_EXTENDED_STATUS_MASK_REG_RSVD_7_1, val));
	i += SCNPRINTF(&buff[i], len - i, " MSK_VSAFE0V=%x",
		FIELD2VALUE(MAX77759_USB_EXTENDED_STATUS_MASK_REG_MSK_VSAFE0V, val));
#else
	buff[0] = 0;
#endif
	return buff;
}

/*
 * ALERT_EXTENDED_MASK,0x17,0b00000001,0x01
 * RSVD_7_1[6:0],,,,,,
 */
#define MAX77759_USB_ALERT_EXTENDED_MASK	0x17
#define MAX77759_USB_ALERT_EXTENDED_MASK_MSK_SNK_FRS	(0x1 << 0)

#define MAX77759_USB_ALERT_EXTENDED_MASK_RSVD_7_1_SHIFT	1
#define MAX77759_USB_ALERT_EXTENDED_MASK_RSVD_7_1_MASK	(0x7f << 1)
#define MAX77759_USB_ALERT_EXTENDED_MASK_RSVD_7_1_CLEAR	(~(0x7f << 1))
#define MAX77759_USB_ALERT_EXTENDED_MASK_MSK_SNK_FRS_SHIFT	0
#define MAX77759_USB_ALERT_EXTENDED_MASK_MSK_SNK_FRS_MASK	(0x1 << 0)
#define MAX77759_USB_ALERT_EXTENDED_MASK_MSK_SNK_FRS_CLEAR	(~(0x1 << 0))

MAX77759_BFF(usb_alert_extended_mask_rsvd_7_1,7,1)
MAX77759_BFF(usb_alert_extended_mask_msk_snk_frs,0,0)
static inline const char *
max77759_usb_alert_extended_mask_cstr(char *buff, size_t len, int val)
{
#ifdef SCNPRINTF
	int i = 0;

	i += SCNPRINTF(&buff[i], len - i, " RSVD_7_1=%x",
		FIELD2VALUE(MAX77759_USB_ALERT_EXTENDED_MASK_RSVD_7_1, val));
	i += SCNPRINTF(&buff[i], len - i, " MSK_SNK_FRS=%x",
		FIELD2VALUE(MAX77759_USB_ALERT_EXTENDED_MASK_MSK_SNK_FRS, val));
#else
	buff[0] = 0;
#endif
	return buff;
}

/*
 * CONFIG_STANDARD_OUTPUT,0x18,0b01000000,0x40
 * RSVD_7,DbgAccConn,RSVD_5,RSVD_4_3[1:0],,RSVD_2,RSVD_1
 */
#define MAX77759_USB_CONFIG_STANDARD_OUTPUT	0x18
#define MAX77759_USB_CONFIG_STANDARD_OUTPUT_RSVD_7	(0x1 << 7)
#define MAX77759_USB_CONFIG_STANDARD_OUTPUT_DBGACCCONN	(0x1 << 6)
#define MAX77759_USB_CONFIG_STANDARD_OUTPUT_RSVD_5	(0x1 << 5)
#define MAX77759_USB_CONFIG_STANDARD_OUTPUT_RSVD_2	(0x1 << 2)
#define MAX77759_USB_CONFIG_STANDARD_OUTPUT_RSVD_1	(0x1 << 1)
#define MAX77759_USB_CONFIG_STANDARD_OUTPUT_RSVD_0	(0x1 << 0)

#define MAX77759_USB_CONFIG_STANDARD_OUTPUT_RSVD_7_SHIFT	7
#define MAX77759_USB_CONFIG_STANDARD_OUTPUT_RSVD_7_MASK	(0x1 << 7)
#define MAX77759_USB_CONFIG_STANDARD_OUTPUT_RSVD_7_CLEAR	(~(0x1 << 7))
#define MAX77759_USB_CONFIG_STANDARD_OUTPUT_DBGACCCONN_SHIFT	6
#define MAX77759_USB_CONFIG_STANDARD_OUTPUT_DBGACCCONN_MASK	(0x1 << 6)
#define MAX77759_USB_CONFIG_STANDARD_OUTPUT_DBGACCCONN_CLEAR	(~(0x1 << 6))
#define MAX77759_USB_CONFIG_STANDARD_OUTPUT_RSVD_5_SHIFT	5
#define MAX77759_USB_CONFIG_STANDARD_OUTPUT_RSVD_5_MASK	(0x1 << 5)
#define MAX77759_USB_CONFIG_STANDARD_OUTPUT_RSVD_5_CLEAR	(~(0x1 << 5))
#define MAX77759_USB_CONFIG_STANDARD_OUTPUT_RSVD_4_3_SHIFT	3
#define MAX77759_USB_CONFIG_STANDARD_OUTPUT_RSVD_4_3_MASK	(0x3 << 3)
#define MAX77759_USB_CONFIG_STANDARD_OUTPUT_RSVD_4_3_CLEAR	(~(0x3 << 3))
#define MAX77759_USB_CONFIG_STANDARD_OUTPUT_RSVD_2_SHIFT	2
#define MAX77759_USB_CONFIG_STANDARD_OUTPUT_RSVD_2_MASK	(0x1 << 2)
#define MAX77759_USB_CONFIG_STANDARD_OUTPUT_RSVD_2_CLEAR	(~(0x1 << 2))
#define MAX77759_USB_CONFIG_STANDARD_OUTPUT_RSVD_1_SHIFT	1
#define MAX77759_USB_CONFIG_STANDARD_OUTPUT_RSVD_1_MASK	(0x1 << 1)
#define MAX77759_USB_CONFIG_STANDARD_OUTPUT_RSVD_1_CLEAR	(~(0x1 << 1))
#define MAX77759_USB_CONFIG_STANDARD_OUTPUT_RSVD_0_SHIFT	0
#define MAX77759_USB_CONFIG_STANDARD_OUTPUT_RSVD_0_MASK	(0x1 << 0)
#define MAX77759_USB_CONFIG_STANDARD_OUTPUT_RSVD_0_CLEAR	(~(0x1 << 0))

MAX77759_BFF(usb_config_standard_output_rsvd_7,7,7)
MAX77759_BFF(usb_config_standard_output_dbgaccconn,6,6)
MAX77759_BFF(usb_config_standard_output_rsvd_5,5,5)
MAX77759_BFF(usb_config_standard_output_rsvd_4_3,4,3)
MAX77759_BFF(usb_config_standard_output_rsvd_2,2,2)
MAX77759_BFF(usb_config_standard_output_rsvd_1,1,1)
MAX77759_BFF(usb_config_standard_output_rsvd_0,0,0)
static inline const char *
max77759_usb_config_standard_output_cstr(char *buff, size_t len, int val)
{
#ifdef SCNPRINTF
	int i = 0;

	i += SCNPRINTF(&buff[i], len - i, " RSVD_7=%x",
		FIELD2VALUE(MAX77759_USB_CONFIG_STANDARD_OUTPUT_RSVD_7, val));
	i += SCNPRINTF(&buff[i], len - i, " DBGACCCONN=%x",
		FIELD2VALUE(MAX77759_USB_CONFIG_STANDARD_OUTPUT_DBGACCCONN, val));
	i += SCNPRINTF(&buff[i], len - i, " RSVD_5=%x",
		FIELD2VALUE(MAX77759_USB_CONFIG_STANDARD_OUTPUT_RSVD_5, val));
	i += SCNPRINTF(&buff[i], len - i, " RSVD_4_3=%x",
		FIELD2VALUE(MAX77759_USB_CONFIG_STANDARD_OUTPUT_RSVD_4_3, val));
	i += SCNPRINTF(&buff[i], len - i, " RSVD_2=%x",
		FIELD2VALUE(MAX77759_USB_CONFIG_STANDARD_OUTPUT_RSVD_2, val));
	i += SCNPRINTF(&buff[i], len - i, " RSVD_1=%x",
		FIELD2VALUE(MAX77759_USB_CONFIG_STANDARD_OUTPUT_RSVD_1, val));
	i += SCNPRINTF(&buff[i], len - i, " RSVD_0=%x",
		FIELD2VALUE(MAX77759_USB_CONFIG_STANDARD_OUTPUT_RSVD_0, val));
#else
	buff[0] = 0;
#endif
	return buff;
}

/*
 * TCPC_CONTROL_REG,0x19,0b00000000,0x00
 * RSVD_7,EN_LK4CONN_ALRT,EN_WD_TMR,DBG_ACC_CNTRL,RSVD_3_2[1:0],,BIST_TM
 */
#define MAX77759_USB_TCPC_CONTROL_REG	0x19
#define MAX77759_USB_TCPC_CONTROL_REG_RSVD_7	(0x1 << 7)
#define MAX77759_USB_TCPC_CONTROL_REG_EN_LK4CONN_ALRT	(0x1 << 6)
#define MAX77759_USB_TCPC_CONTROL_REG_EN_WD_TMR	(0x1 << 5)
#define MAX77759_USB_TCPC_CONTROL_REG_DBG_ACC_CNTRL	(0x1 << 4)
#define MAX77759_USB_TCPC_CONTROL_REG_BIST_TM	(0x1 << 1)
#define MAX77759_USB_TCPC_CONTROL_REG_PLUG_ORNT	(0x1 << 0)

#define MAX77759_USB_TCPC_CONTROL_REG_RSVD_7_SHIFT	7
#define MAX77759_USB_TCPC_CONTROL_REG_RSVD_7_MASK	(0x1 << 7)
#define MAX77759_USB_TCPC_CONTROL_REG_RSVD_7_CLEAR	(~(0x1 << 7))
#define MAX77759_USB_TCPC_CONTROL_REG_EN_LK4CONN_ALRT_SHIFT	6
#define MAX77759_USB_TCPC_CONTROL_REG_EN_LK4CONN_ALRT_MASK	(0x1 << 6)
#define MAX77759_USB_TCPC_CONTROL_REG_EN_LK4CONN_ALRT_CLEAR	(~(0x1 << 6))
#define MAX77759_USB_TCPC_CONTROL_REG_EN_WD_TMR_SHIFT	5
#define MAX77759_USB_TCPC_CONTROL_REG_EN_WD_TMR_MASK	(0x1 << 5)
#define MAX77759_USB_TCPC_CONTROL_REG_EN_WD_TMR_CLEAR	(~(0x1 << 5))
#define MAX77759_USB_TCPC_CONTROL_REG_DBG_ACC_CNTRL_SHIFT	4
#define MAX77759_USB_TCPC_CONTROL_REG_DBG_ACC_CNTRL_MASK	(0x1 << 4)
#define MAX77759_USB_TCPC_CONTROL_REG_DBG_ACC_CNTRL_CLEAR	(~(0x1 << 4))
#define MAX77759_USB_TCPC_CONTROL_REG_RSVD_3_2_SHIFT	2
#define MAX77759_USB_TCPC_CONTROL_REG_RSVD_3_2_MASK	(0x3 << 2)
#define MAX77759_USB_TCPC_CONTROL_REG_RSVD_3_2_CLEAR	(~(0x3 << 2))
#define MAX77759_USB_TCPC_CONTROL_REG_BIST_TM_SHIFT	1
#define MAX77759_USB_TCPC_CONTROL_REG_BIST_TM_MASK	(0x1 << 1)
#define MAX77759_USB_TCPC_CONTROL_REG_BIST_TM_CLEAR	(~(0x1 << 1))
#define MAX77759_USB_TCPC_CONTROL_REG_PLUG_ORNT_SHIFT	0
#define MAX77759_USB_TCPC_CONTROL_REG_PLUG_ORNT_MASK	(0x1 << 0)
#define MAX77759_USB_TCPC_CONTROL_REG_PLUG_ORNT_CLEAR	(~(0x1 << 0))

MAX77759_BFF(usb_tcpc_control_reg_rsvd_7,7,7)
MAX77759_BFF(usb_tcpc_control_reg_en_lk4conn_alrt,6,6)
MAX77759_BFF(usb_tcpc_control_reg_en_wd_tmr,5,5)
MAX77759_BFF(usb_tcpc_control_reg_dbg_acc_cntrl,4,4)
MAX77759_BFF(usb_tcpc_control_reg_rsvd_3_2,3,2)
MAX77759_BFF(usb_tcpc_control_reg_bist_tm,1,1)
MAX77759_BFF(usb_tcpc_control_reg_plug_ornt,0,0)
static inline const char *
max77759_usb_tcpc_control_reg_cstr(char *buff, size_t len, int val)
{
#ifdef SCNPRINTF
	int i = 0;

	i += SCNPRINTF(&buff[i], len - i, " RSVD_7=%x",
		FIELD2VALUE(MAX77759_USB_TCPC_CONTROL_REG_RSVD_7, val));
	i += SCNPRINTF(&buff[i], len - i, " EN_LK4CONN_ALRT=%x",
		FIELD2VALUE(MAX77759_USB_TCPC_CONTROL_REG_EN_LK4CONN_ALRT, val));
	i += SCNPRINTF(&buff[i], len - i, " EN_WD_TMR=%x",
		FIELD2VALUE(MAX77759_USB_TCPC_CONTROL_REG_EN_WD_TMR, val));
	i += SCNPRINTF(&buff[i], len - i, " DBG_ACC_CNTRL=%x",
		FIELD2VALUE(MAX77759_USB_TCPC_CONTROL_REG_DBG_ACC_CNTRL, val));
	i += SCNPRINTF(&buff[i], len - i, " RSVD_3_2=%x",
		FIELD2VALUE(MAX77759_USB_TCPC_CONTROL_REG_RSVD_3_2, val));
	i += SCNPRINTF(&buff[i], len - i, " BIST_TM=%x",
		FIELD2VALUE(MAX77759_USB_TCPC_CONTROL_REG_BIST_TM, val));
	i += SCNPRINTF(&buff[i], len - i, " PLUG_ORNT=%x",
		FIELD2VALUE(MAX77759_USB_TCPC_CONTROL_REG_PLUG_ORNT, val));
#else
	buff[0] = 0;
#endif
	return buff;
}

/*
 * ROLE_CONTROL_REG,0x1A,0b00001010,0x0a
 * RSVD_7,DRP,RP_VAL[1:0],,CC2[1:0],,CC1[1:0]
 */
#define MAX77759_USB_ROLE_CONTROL_REG	0x1A
#define MAX77759_USB_ROLE_CONTROL_REG_RSVD_7	(0x1 << 7)
#define MAX77759_USB_ROLE_CONTROL_REG_DRP	(0x1 << 6)

#define MAX77759_USB_ROLE_CONTROL_REG_RSVD_7_SHIFT	7
#define MAX77759_USB_ROLE_CONTROL_REG_RSVD_7_MASK	(0x1 << 7)
#define MAX77759_USB_ROLE_CONTROL_REG_RSVD_7_CLEAR	(~(0x1 << 7))
#define MAX77759_USB_ROLE_CONTROL_REG_DRP_SHIFT	6
#define MAX77759_USB_ROLE_CONTROL_REG_DRP_MASK	(0x1 << 6)
#define MAX77759_USB_ROLE_CONTROL_REG_DRP_CLEAR	(~(0x1 << 6))
#define MAX77759_USB_ROLE_CONTROL_REG_RP_VAL_SHIFT	4
#define MAX77759_USB_ROLE_CONTROL_REG_RP_VAL_MASK	(0x3 << 4)
#define MAX77759_USB_ROLE_CONTROL_REG_RP_VAL_CLEAR	(~(0x3 << 4))
#define MAX77759_USB_ROLE_CONTROL_REG_CC2_SHIFT	2
#define MAX77759_USB_ROLE_CONTROL_REG_CC2_MASK	(0x3 << 2)
#define MAX77759_USB_ROLE_CONTROL_REG_CC2_CLEAR	(~(0x3 << 2))
#define MAX77759_USB_ROLE_CONTROL_REG_CC1_SHIFT	0
#define MAX77759_USB_ROLE_CONTROL_REG_CC1_MASK	(0x3 << 0)
#define MAX77759_USB_ROLE_CONTROL_REG_CC1_CLEAR	(~(0x3 << 0))

MAX77759_BFF(usb_role_control_reg_rsvd_7,7,7)
MAX77759_BFF(usb_role_control_reg_drp,6,6)
MAX77759_BFF(usb_role_control_reg_rp_val,5,4)
MAX77759_BFF(usb_role_control_reg_cc2,3,2)
MAX77759_BFF(usb_role_control_reg_cc1,1,0)
static inline const char *
max77759_usb_role_control_reg_cstr(char *buff, size_t len, int val)
{
#ifdef SCNPRINTF
	int i = 0;

	i += SCNPRINTF(&buff[i], len - i, " RSVD_7=%x",
		FIELD2VALUE(MAX77759_USB_ROLE_CONTROL_REG_RSVD_7, val));
	i += SCNPRINTF(&buff[i], len - i, " DRP=%x",
		FIELD2VALUE(MAX77759_USB_ROLE_CONTROL_REG_DRP, val));
	i += SCNPRINTF(&buff[i], len - i, " RP_VAL=%x",
		FIELD2VALUE(MAX77759_USB_ROLE_CONTROL_REG_RP_VAL, val));
	i += SCNPRINTF(&buff[i], len - i, " CC2=%x",
		FIELD2VALUE(MAX77759_USB_ROLE_CONTROL_REG_CC2, val));
	i += SCNPRINTF(&buff[i], len - i, " CC1=%x",
		FIELD2VALUE(MAX77759_USB_ROLE_CONTROL_REG_CC1, val));
#else
	buff[0] = 0;
#endif
	return buff;
}

/*
 * FAULT_CONTROL_REG,0x1B,0b00000000,0x00
 * RSVD_7_5[2:0],,,RSVD_4,VBUS_DISCH_FAIL_DIS,RSVD_2,RSVD_1
 */
#define MAX77759_USB_FAULT_CONTROL_REG	0x1B
#define MAX77759_USB_FAULT_CONTROL_REG_RSVD_4	(0x1 << 4)
#define MAX77759_USB_FAULT_CONTROL_REG_VBUS_DISCH_FAIL_DIS	(0x1 << 3)
#define MAX77759_USB_FAULT_CONTROL_REG_RSVD_2	(0x1 << 2)
#define MAX77759_USB_FAULT_CONTROL_REG_RSVD_1	(0x1 << 1)
#define MAX77759_USB_FAULT_CONTROL_REG_VCONN_OCP_FAULT_DIS	(0x1 << 0)

#define MAX77759_USB_FAULT_CONTROL_REG_RSVD_7_5_SHIFT	5
#define MAX77759_USB_FAULT_CONTROL_REG_RSVD_7_5_MASK	(0x7 << 5)
#define MAX77759_USB_FAULT_CONTROL_REG_RSVD_7_5_CLEAR	(~(0x7 << 5))
#define MAX77759_USB_FAULT_CONTROL_REG_RSVD_4_SHIFT	4
#define MAX77759_USB_FAULT_CONTROL_REG_RSVD_4_MASK	(0x1 << 4)
#define MAX77759_USB_FAULT_CONTROL_REG_RSVD_4_CLEAR	(~(0x1 << 4))
#define MAX77759_USB_FAULT_CONTROL_REG_VBUS_DISCH_FAIL_DIS_SHIFT	3
#define MAX77759_USB_FAULT_CONTROL_REG_VBUS_DISCH_FAIL_DIS_MASK	(0x1 << 3)
#define MAX77759_USB_FAULT_CONTROL_REG_VBUS_DISCH_FAIL_DIS_CLEAR	(~(0x1 << 3))
#define MAX77759_USB_FAULT_CONTROL_REG_RSVD_2_SHIFT	2
#define MAX77759_USB_FAULT_CONTROL_REG_RSVD_2_MASK	(0x1 << 2)
#define MAX77759_USB_FAULT_CONTROL_REG_RSVD_2_CLEAR	(~(0x1 << 2))
#define MAX77759_USB_FAULT_CONTROL_REG_RSVD_1_SHIFT	1
#define MAX77759_USB_FAULT_CONTROL_REG_RSVD_1_MASK	(0x1 << 1)
#define MAX77759_USB_FAULT_CONTROL_REG_RSVD_1_CLEAR	(~(0x1 << 1))
#define MAX77759_USB_FAULT_CONTROL_REG_VCONN_OCP_FAULT_DIS_SHIFT	0
#define MAX77759_USB_FAULT_CONTROL_REG_VCONN_OCP_FAULT_DIS_MASK	(0x1 << 0)
#define MAX77759_USB_FAULT_CONTROL_REG_VCONN_OCP_FAULT_DIS_CLEAR	(~(0x1 << 0))

MAX77759_BFF(usb_fault_control_reg_rsvd_7_5,7,5)
MAX77759_BFF(usb_fault_control_reg_rsvd_4,4,4)
MAX77759_BFF(usb_fault_control_reg_vbus_disch_fail_dis,3,3)
MAX77759_BFF(usb_fault_control_reg_rsvd_2,2,2)
MAX77759_BFF(usb_fault_control_reg_rsvd_1,1,1)
MAX77759_BFF(usb_fault_control_reg_vconn_ocp_fault_dis,0,0)
static inline const char *
max77759_usb_fault_control_reg_cstr(char *buff, size_t len, int val)
{
#ifdef SCNPRINTF
	int i = 0;

	i += SCNPRINTF(&buff[i], len - i, " RSVD_7_5=%x",
		FIELD2VALUE(MAX77759_USB_FAULT_CONTROL_REG_RSVD_7_5, val));
	i += SCNPRINTF(&buff[i], len - i, " RSVD_4=%x",
		FIELD2VALUE(MAX77759_USB_FAULT_CONTROL_REG_RSVD_4, val));
	i += SCNPRINTF(&buff[i], len - i, " VBUS_DISCH_FAIL_DIS=%x",
		FIELD2VALUE(MAX77759_USB_FAULT_CONTROL_REG_VBUS_DISCH_FAIL_DIS, val));
	i += SCNPRINTF(&buff[i], len - i, " RSVD_2=%x",
		FIELD2VALUE(MAX77759_USB_FAULT_CONTROL_REG_RSVD_2, val));
	i += SCNPRINTF(&buff[i], len - i, " RSVD_1=%x",
		FIELD2VALUE(MAX77759_USB_FAULT_CONTROL_REG_RSVD_1, val));
	i += SCNPRINTF(&buff[i], len - i, " VCONN_OCP_FAULT_DIS=%x",
		FIELD2VALUE(MAX77759_USB_FAULT_CONTROL_REG_VCONN_OCP_FAULT_DIS, val));
#else
	buff[0] = 0;
#endif
	return buff;
}

/*
 * POWER_CONTROL_REG,0x1C,0b01100000,0x60
 * FAST_RSWP_EN,VBUS_VOLT_MON,DIS_VOLT_ALRM,AUTO_DISCH_DISC,EN_BLEED_DISCH,FORC_DISCH,RSVD_1
 */
#define MAX77759_USB_POWER_CONTROL_REG	0x1C
#define MAX77759_USB_POWER_CONTROL_REG_FAST_RSWP_EN	(0x1 << 7)
#define MAX77759_USB_POWER_CONTROL_REG_VBUS_VOLT_MON	(0x1 << 6)
#define MAX77759_USB_POWER_CONTROL_REG_DIS_VOLT_ALRM	(0x1 << 5)
#define MAX77759_USB_POWER_CONTROL_REG_AUTO_DISCH_DISC	(0x1 << 4)
#define MAX77759_USB_POWER_CONTROL_REG_EN_BLEED_DISCH	(0x1 << 3)
#define MAX77759_USB_POWER_CONTROL_REG_FORC_DISCH	(0x1 << 2)
#define MAX77759_USB_POWER_CONTROL_REG_RSVD_1	(0x1 << 1)
#define MAX77759_USB_POWER_CONTROL_REG_EN_VCONN	(0x1 << 0)

#define MAX77759_USB_POWER_CONTROL_REG_FAST_RSWP_EN_SHIFT	7
#define MAX77759_USB_POWER_CONTROL_REG_FAST_RSWP_EN_MASK	(0x1 << 7)
#define MAX77759_USB_POWER_CONTROL_REG_FAST_RSWP_EN_CLEAR	(~(0x1 << 7))
#define MAX77759_USB_POWER_CONTROL_REG_VBUS_VOLT_MON_SHIFT	6
#define MAX77759_USB_POWER_CONTROL_REG_VBUS_VOLT_MON_MASK	(0x1 << 6)
#define MAX77759_USB_POWER_CONTROL_REG_VBUS_VOLT_MON_CLEAR	(~(0x1 << 6))
#define MAX77759_USB_POWER_CONTROL_REG_DIS_VOLT_ALRM_SHIFT	5
#define MAX77759_USB_POWER_CONTROL_REG_DIS_VOLT_ALRM_MASK	(0x1 << 5)
#define MAX77759_USB_POWER_CONTROL_REG_DIS_VOLT_ALRM_CLEAR	(~(0x1 << 5))
#define MAX77759_USB_POWER_CONTROL_REG_AUTO_DISCH_DISC_SHIFT	4
#define MAX77759_USB_POWER_CONTROL_REG_AUTO_DISCH_DISC_MASK	(0x1 << 4)
#define MAX77759_USB_POWER_CONTROL_REG_AUTO_DISCH_DISC_CLEAR	(~(0x1 << 4))
#define MAX77759_USB_POWER_CONTROL_REG_EN_BLEED_DISCH_SHIFT	3
#define MAX77759_USB_POWER_CONTROL_REG_EN_BLEED_DISCH_MASK	(0x1 << 3)
#define MAX77759_USB_POWER_CONTROL_REG_EN_BLEED_DISCH_CLEAR	(~(0x1 << 3))
#define MAX77759_USB_POWER_CONTROL_REG_FORC_DISCH_SHIFT	2
#define MAX77759_USB_POWER_CONTROL_REG_FORC_DISCH_MASK	(0x1 << 2)
#define MAX77759_USB_POWER_CONTROL_REG_FORC_DISCH_CLEAR	(~(0x1 << 2))
#define MAX77759_USB_POWER_CONTROL_REG_RSVD_1_SHIFT	1
#define MAX77759_USB_POWER_CONTROL_REG_RSVD_1_MASK	(0x1 << 1)
#define MAX77759_USB_POWER_CONTROL_REG_RSVD_1_CLEAR	(~(0x1 << 1))
#define MAX77759_USB_POWER_CONTROL_REG_EN_VCONN_SHIFT	0
#define MAX77759_USB_POWER_CONTROL_REG_EN_VCONN_MASK	(0x1 << 0)
#define MAX77759_USB_POWER_CONTROL_REG_EN_VCONN_CLEAR	(~(0x1 << 0))

MAX77759_BFF(usb_power_control_reg_fast_rswp_en,7,7)
MAX77759_BFF(usb_power_control_reg_vbus_volt_mon,6,6)
MAX77759_BFF(usb_power_control_reg_dis_volt_alrm,5,5)
MAX77759_BFF(usb_power_control_reg_auto_disch_disc,4,4)
MAX77759_BFF(usb_power_control_reg_en_bleed_disch,3,3)
MAX77759_BFF(usb_power_control_reg_forc_disch,2,2)
MAX77759_BFF(usb_power_control_reg_rsvd_1,1,1)
MAX77759_BFF(usb_power_control_reg_en_vconn,0,0)
static inline const char *
max77759_usb_power_control_reg_cstr(char *buff, size_t len, int val)
{
#ifdef SCNPRINTF
	int i = 0;

	i += SCNPRINTF(&buff[i], len - i, " FAST_RSWP_EN=%x",
		FIELD2VALUE(MAX77759_USB_POWER_CONTROL_REG_FAST_RSWP_EN, val));
	i += SCNPRINTF(&buff[i], len - i, " VBUS_VOLT_MON=%x",
		FIELD2VALUE(MAX77759_USB_POWER_CONTROL_REG_VBUS_VOLT_MON, val));
	i += SCNPRINTF(&buff[i], len - i, " DIS_VOLT_ALRM=%x",
		FIELD2VALUE(MAX77759_USB_POWER_CONTROL_REG_DIS_VOLT_ALRM, val));
	i += SCNPRINTF(&buff[i], len - i, " AUTO_DISCH_DISC=%x",
		FIELD2VALUE(MAX77759_USB_POWER_CONTROL_REG_AUTO_DISCH_DISC, val));
	i += SCNPRINTF(&buff[i], len - i, " EN_BLEED_DISCH=%x",
		FIELD2VALUE(MAX77759_USB_POWER_CONTROL_REG_EN_BLEED_DISCH, val));
	i += SCNPRINTF(&buff[i], len - i, " FORC_DISCH=%x",
		FIELD2VALUE(MAX77759_USB_POWER_CONTROL_REG_FORC_DISCH, val));
	i += SCNPRINTF(&buff[i], len - i, " RSVD_1=%x",
		FIELD2VALUE(MAX77759_USB_POWER_CONTROL_REG_RSVD_1, val));
	i += SCNPRINTF(&buff[i], len - i, " EN_VCONN=%x",
		FIELD2VALUE(MAX77759_USB_POWER_CONTROL_REG_EN_VCONN, val));
#else
	buff[0] = 0;
#endif
	return buff;
}

/*
 * CC_STATUS_REG,0x1D,0b00000000,0x00
 * RSVD_7_6[1:0],,LOOKING4CONN,CONN_RSLT,CC2_STATE[1:0],,CC1_STATE[1:0]
 */
#define MAX77759_USB_CC_STATUS_REG	0x1D
#define MAX77759_USB_CC_STATUS_REG_LOOKING4CONN	(0x1 << 5)
#define MAX77759_USB_CC_STATUS_REG_CONN_RSLT	(0x1 << 4)

#define MAX77759_USB_CC_STATUS_REG_RSVD_7_6_SHIFT	6
#define MAX77759_USB_CC_STATUS_REG_RSVD_7_6_MASK	(0x3 << 6)
#define MAX77759_USB_CC_STATUS_REG_RSVD_7_6_CLEAR	(~(0x3 << 6))
#define MAX77759_USB_CC_STATUS_REG_LOOKING4CONN_SHIFT	5
#define MAX77759_USB_CC_STATUS_REG_LOOKING4CONN_MASK	(0x1 << 5)
#define MAX77759_USB_CC_STATUS_REG_LOOKING4CONN_CLEAR	(~(0x1 << 5))
#define MAX77759_USB_CC_STATUS_REG_CONN_RSLT_SHIFT	4
#define MAX77759_USB_CC_STATUS_REG_CONN_RSLT_MASK	(0x1 << 4)
#define MAX77759_USB_CC_STATUS_REG_CONN_RSLT_CLEAR	(~(0x1 << 4))
#define MAX77759_USB_CC_STATUS_REG_CC2_STATE_SHIFT	2
#define MAX77759_USB_CC_STATUS_REG_CC2_STATE_MASK	(0x3 << 2)
#define MAX77759_USB_CC_STATUS_REG_CC2_STATE_CLEAR	(~(0x3 << 2))
#define MAX77759_USB_CC_STATUS_REG_CC1_STATE_SHIFT	0
#define MAX77759_USB_CC_STATUS_REG_CC1_STATE_MASK	(0x3 << 0)
#define MAX77759_USB_CC_STATUS_REG_CC1_STATE_CLEAR	(~(0x3 << 0))

MAX77759_BFF(usb_cc_status_reg_rsvd_7_6,7,6)
MAX77759_BFF(usb_cc_status_reg_looking4conn,5,5)
MAX77759_BFF(usb_cc_status_reg_conn_rslt,4,4)
MAX77759_BFF(usb_cc_status_reg_cc2_state,3,2)
MAX77759_BFF(usb_cc_status_reg_cc1_state,1,0)
static inline const char *
max77759_usb_cc_status_reg_cstr(char *buff, size_t len, int val)
{
#ifdef SCNPRINTF
	int i = 0;

	i += SCNPRINTF(&buff[i], len - i, " RSVD_7_6=%x",
		FIELD2VALUE(MAX77759_USB_CC_STATUS_REG_RSVD_7_6, val));
	i += SCNPRINTF(&buff[i], len - i, " LOOKING4CONN=%x",
		FIELD2VALUE(MAX77759_USB_CC_STATUS_REG_LOOKING4CONN, val));
	i += SCNPRINTF(&buff[i], len - i, " CONN_RSLT=%x",
		FIELD2VALUE(MAX77759_USB_CC_STATUS_REG_CONN_RSLT, val));
	i += SCNPRINTF(&buff[i], len - i, " CC2_STATE=%x",
		FIELD2VALUE(MAX77759_USB_CC_STATUS_REG_CC2_STATE, val));
	i += SCNPRINTF(&buff[i], len - i, " CC1_STATE=%x",
		FIELD2VALUE(MAX77759_USB_CC_STATUS_REG_CC1_STATE, val));
#else
	buff[0] = 0;
#endif
	return buff;
}

/*
 * POWER_STATUS_REG,0x1E,0b00001000,0x08
 * DBG_ACC_CONN,TCPC_INIT_STAT,SRC_HI_VOLT,SRC_VBUS,VBUS_DET_EN,VBUS_PRESENT,VCONN_PRESENT
 */
#define MAX77759_USB_POWER_STATUS_REG	0x1E
#define MAX77759_USB_POWER_STATUS_REG_DBG_ACC_CONN	(0x1 << 7)
#define MAX77759_USB_POWER_STATUS_REG_TCPC_INIT_STAT	(0x1 << 6)
#define MAX77759_USB_POWER_STATUS_REG_SRC_HI_VOLT	(0x1 << 5)
#define MAX77759_USB_POWER_STATUS_REG_SRC_VBUS	(0x1 << 4)
#define MAX77759_USB_POWER_STATUS_REG_VBUS_DET_EN	(0x1 << 3)
#define MAX77759_USB_POWER_STATUS_REG_VBUS_PRESENT	(0x1 << 2)
#define MAX77759_USB_POWER_STATUS_REG_VCONN_PRESENT	(0x1 << 1)
#define MAX77759_USB_POWER_STATUS_REG_SNK_VBUS	(0x1 << 0)

#define MAX77759_USB_POWER_STATUS_REG_DBG_ACC_CONN_SHIFT	7
#define MAX77759_USB_POWER_STATUS_REG_DBG_ACC_CONN_MASK	(0x1 << 7)
#define MAX77759_USB_POWER_STATUS_REG_DBG_ACC_CONN_CLEAR	(~(0x1 << 7))
#define MAX77759_USB_POWER_STATUS_REG_TCPC_INIT_STAT_SHIFT	6
#define MAX77759_USB_POWER_STATUS_REG_TCPC_INIT_STAT_MASK	(0x1 << 6)
#define MAX77759_USB_POWER_STATUS_REG_TCPC_INIT_STAT_CLEAR	(~(0x1 << 6))
#define MAX77759_USB_POWER_STATUS_REG_SRC_HI_VOLT_SHIFT	5
#define MAX77759_USB_POWER_STATUS_REG_SRC_HI_VOLT_MASK	(0x1 << 5)
#define MAX77759_USB_POWER_STATUS_REG_SRC_HI_VOLT_CLEAR	(~(0x1 << 5))
#define MAX77759_USB_POWER_STATUS_REG_SRC_VBUS_SHIFT	4
#define MAX77759_USB_POWER_STATUS_REG_SRC_VBUS_MASK	(0x1 << 4)
#define MAX77759_USB_POWER_STATUS_REG_SRC_VBUS_CLEAR	(~(0x1 << 4))
#define MAX77759_USB_POWER_STATUS_REG_VBUS_DET_EN_SHIFT	3
#define MAX77759_USB_POWER_STATUS_REG_VBUS_DET_EN_MASK	(0x1 << 3)
#define MAX77759_USB_POWER_STATUS_REG_VBUS_DET_EN_CLEAR	(~(0x1 << 3))
#define MAX77759_USB_POWER_STATUS_REG_VBUS_PRESENT_SHIFT	2
#define MAX77759_USB_POWER_STATUS_REG_VBUS_PRESENT_MASK	(0x1 << 2)
#define MAX77759_USB_POWER_STATUS_REG_VBUS_PRESENT_CLEAR	(~(0x1 << 2))
#define MAX77759_USB_POWER_STATUS_REG_VCONN_PRESENT_SHIFT	1
#define MAX77759_USB_POWER_STATUS_REG_VCONN_PRESENT_MASK	(0x1 << 1)
#define MAX77759_USB_POWER_STATUS_REG_VCONN_PRESENT_CLEAR	(~(0x1 << 1))
#define MAX77759_USB_POWER_STATUS_REG_SNK_VBUS_SHIFT	0
#define MAX77759_USB_POWER_STATUS_REG_SNK_VBUS_MASK	(0x1 << 0)
#define MAX77759_USB_POWER_STATUS_REG_SNK_VBUS_CLEAR	(~(0x1 << 0))

MAX77759_BFF(usb_power_status_reg_dbg_acc_conn,7,7)
MAX77759_BFF(usb_power_status_reg_tcpc_init_stat,6,6)
MAX77759_BFF(usb_power_status_reg_src_hi_volt,5,5)
MAX77759_BFF(usb_power_status_reg_src_vbus,4,4)
MAX77759_BFF(usb_power_status_reg_vbus_det_en,3,3)
MAX77759_BFF(usb_power_status_reg_vbus_present,2,2)
MAX77759_BFF(usb_power_status_reg_vconn_present,1,1)
MAX77759_BFF(usb_power_status_reg_snk_vbus,0,0)
static inline const char *
max77759_usb_power_status_reg_cstr(char *buff, size_t len, int val)
{
#ifdef SCNPRINTF
	int i = 0;

	i += SCNPRINTF(&buff[i], len - i, " DBG_ACC_CONN=%x",
		FIELD2VALUE(MAX77759_USB_POWER_STATUS_REG_DBG_ACC_CONN, val));
	i += SCNPRINTF(&buff[i], len - i, " TCPC_INIT_STAT=%x",
		FIELD2VALUE(MAX77759_USB_POWER_STATUS_REG_TCPC_INIT_STAT, val));
	i += SCNPRINTF(&buff[i], len - i, " SRC_HI_VOLT=%x",
		FIELD2VALUE(MAX77759_USB_POWER_STATUS_REG_SRC_HI_VOLT, val));
	i += SCNPRINTF(&buff[i], len - i, " SRC_VBUS=%x",
		FIELD2VALUE(MAX77759_USB_POWER_STATUS_REG_SRC_VBUS, val));
	i += SCNPRINTF(&buff[i], len - i, " VBUS_DET_EN=%x",
		FIELD2VALUE(MAX77759_USB_POWER_STATUS_REG_VBUS_DET_EN, val));
	i += SCNPRINTF(&buff[i], len - i, " VBUS_PRESENT=%x",
		FIELD2VALUE(MAX77759_USB_POWER_STATUS_REG_VBUS_PRESENT, val));
	i += SCNPRINTF(&buff[i], len - i, " VCONN_PRESENT=%x",
		FIELD2VALUE(MAX77759_USB_POWER_STATUS_REG_VCONN_PRESENT, val));
	i += SCNPRINTF(&buff[i], len - i, " SNK_VBUS=%x",
		FIELD2VALUE(MAX77759_USB_POWER_STATUS_REG_SNK_VBUS, val));
#else
	buff[0] = 0;
#endif
	return buff;
}

/*
 * FAULT_STATUS_REG,0x1F,0b10000000,0x80
 * ALL_REG_RST,RSVD_6,AUTO_DISCH_FAIL,FORCE_DISCH_FAIL,RSVD_3,RSVD_2,VCONN_OCP_FAULT
 */
#define MAX77759_USB_FAULT_STATUS_REG	0x1F
#define MAX77759_USB_FAULT_STATUS_REG_ALL_REG_RST	(0x1 << 7)
#define MAX77759_USB_FAULT_STATUS_REG_RSVD_6	(0x1 << 6)
#define MAX77759_USB_FAULT_STATUS_REG_AUTO_DISCH_FAIL	(0x1 << 5)
#define MAX77759_USB_FAULT_STATUS_REG_FORCE_DISCH_FAIL	(0x1 << 4)
#define MAX77759_USB_FAULT_STATUS_REG_RSVD_3	(0x1 << 3)
#define MAX77759_USB_FAULT_STATUS_REG_RSVD_2	(0x1 << 2)
#define MAX77759_USB_FAULT_STATUS_REG_VCONN_OCP_FAULT	(0x1 << 1)
#define MAX77759_USB_FAULT_STATUS_REG_I2C_ERR	(0x1 << 0)

#define MAX77759_USB_FAULT_STATUS_REG_ALL_REG_RST_SHIFT	7
#define MAX77759_USB_FAULT_STATUS_REG_ALL_REG_RST_MASK	(0x1 << 7)
#define MAX77759_USB_FAULT_STATUS_REG_ALL_REG_RST_CLEAR	(~(0x1 << 7))
#define MAX77759_USB_FAULT_STATUS_REG_RSVD_6_SHIFT	6
#define MAX77759_USB_FAULT_STATUS_REG_RSVD_6_MASK	(0x1 << 6)
#define MAX77759_USB_FAULT_STATUS_REG_RSVD_6_CLEAR	(~(0x1 << 6))
#define MAX77759_USB_FAULT_STATUS_REG_AUTO_DISCH_FAIL_SHIFT	5
#define MAX77759_USB_FAULT_STATUS_REG_AUTO_DISCH_FAIL_MASK	(0x1 << 5)
#define MAX77759_USB_FAULT_STATUS_REG_AUTO_DISCH_FAIL_CLEAR	(~(0x1 << 5))
#define MAX77759_USB_FAULT_STATUS_REG_FORCE_DISCH_FAIL_SHIFT	4
#define MAX77759_USB_FAULT_STATUS_REG_FORCE_DISCH_FAIL_MASK	(0x1 << 4)
#define MAX77759_USB_FAULT_STATUS_REG_FORCE_DISCH_FAIL_CLEAR	(~(0x1 << 4))
#define MAX77759_USB_FAULT_STATUS_REG_RSVD_3_SHIFT	3
#define MAX77759_USB_FAULT_STATUS_REG_RSVD_3_MASK	(0x1 << 3)
#define MAX77759_USB_FAULT_STATUS_REG_RSVD_3_CLEAR	(~(0x1 << 3))
#define MAX77759_USB_FAULT_STATUS_REG_RSVD_2_SHIFT	2
#define MAX77759_USB_FAULT_STATUS_REG_RSVD_2_MASK	(0x1 << 2)
#define MAX77759_USB_FAULT_STATUS_REG_RSVD_2_CLEAR	(~(0x1 << 2))
#define MAX77759_USB_FAULT_STATUS_REG_VCONN_OCP_FAULT_SHIFT	1
#define MAX77759_USB_FAULT_STATUS_REG_VCONN_OCP_FAULT_MASK	(0x1 << 1)
#define MAX77759_USB_FAULT_STATUS_REG_VCONN_OCP_FAULT_CLEAR	(~(0x1 << 1))
#define MAX77759_USB_FAULT_STATUS_REG_I2C_ERR_SHIFT	0
#define MAX77759_USB_FAULT_STATUS_REG_I2C_ERR_MASK	(0x1 << 0)
#define MAX77759_USB_FAULT_STATUS_REG_I2C_ERR_CLEAR	(~(0x1 << 0))

MAX77759_BFF(usb_fault_status_reg_all_reg_rst,7,7)
MAX77759_BFF(usb_fault_status_reg_rsvd_6,6,6)
MAX77759_BFF(usb_fault_status_reg_auto_disch_fail,5,5)
MAX77759_BFF(usb_fault_status_reg_force_disch_fail,4,4)
MAX77759_BFF(usb_fault_status_reg_rsvd_3,3,3)
MAX77759_BFF(usb_fault_status_reg_rsvd_2,2,2)
MAX77759_BFF(usb_fault_status_reg_vconn_ocp_fault,1,1)
MAX77759_BFF(usb_fault_status_reg_i2c_err,0,0)
static inline const char *
max77759_usb_fault_status_reg_cstr(char *buff, size_t len, int val)
{
#ifdef SCNPRINTF
	int i = 0;

	i += SCNPRINTF(&buff[i], len - i, " ALL_REG_RST=%x",
		FIELD2VALUE(MAX77759_USB_FAULT_STATUS_REG_ALL_REG_RST, val));
	i += SCNPRINTF(&buff[i], len - i, " RSVD_6=%x",
		FIELD2VALUE(MAX77759_USB_FAULT_STATUS_REG_RSVD_6, val));
	i += SCNPRINTF(&buff[i], len - i, " AUTO_DISCH_FAIL=%x",
		FIELD2VALUE(MAX77759_USB_FAULT_STATUS_REG_AUTO_DISCH_FAIL, val));
	i += SCNPRINTF(&buff[i], len - i, " FORCE_DISCH_FAIL=%x",
		FIELD2VALUE(MAX77759_USB_FAULT_STATUS_REG_FORCE_DISCH_FAIL, val));
	i += SCNPRINTF(&buff[i], len - i, " RSVD_3=%x",
		FIELD2VALUE(MAX77759_USB_FAULT_STATUS_REG_RSVD_3, val));
	i += SCNPRINTF(&buff[i], len - i, " RSVD_2=%x",
		FIELD2VALUE(MAX77759_USB_FAULT_STATUS_REG_RSVD_2, val));
	i += SCNPRINTF(&buff[i], len - i, " VCONN_OCP_FAULT=%x",
		FIELD2VALUE(MAX77759_USB_FAULT_STATUS_REG_VCONN_OCP_FAULT, val));
	i += SCNPRINTF(&buff[i], len - i, " I2C_ERR=%x",
		FIELD2VALUE(MAX77759_USB_FAULT_STATUS_REG_I2C_ERR, val));
#else
	buff[0] = 0;
#endif
	return buff;
}

/*
 * EXTENDED_STATUS_REG,0x20,0b00000000,0x00
 * RSVD_7_1[6:0],,,,,,
 */
#define MAX77759_USB_EXTENDED_STATUS_REG	0x20
#define MAX77759_USB_EXTENDED_STATUS_REG_VSAFE0V	(0x1 << 0)

#define MAX77759_USB_EXTENDED_STATUS_REG_RSVD_7_1_SHIFT	1
#define MAX77759_USB_EXTENDED_STATUS_REG_RSVD_7_1_MASK	(0x7f << 1)
#define MAX77759_USB_EXTENDED_STATUS_REG_RSVD_7_1_CLEAR	(~(0x7f << 1))
#define MAX77759_USB_EXTENDED_STATUS_REG_VSAFE0V_SHIFT	0
#define MAX77759_USB_EXTENDED_STATUS_REG_VSAFE0V_MASK	(0x1 << 0)
#define MAX77759_USB_EXTENDED_STATUS_REG_VSAFE0V_CLEAR	(~(0x1 << 0))

MAX77759_BFF(usb_extended_status_reg_rsvd_7_1,7,1)
MAX77759_BFF(usb_extended_status_reg_vsafe0v,0,0)
static inline const char *
max77759_usb_extended_status_reg_cstr(char *buff, size_t len, int val)
{
#ifdef SCNPRINTF
	int i = 0;

	i += SCNPRINTF(&buff[i], len - i, " RSVD_7_1=%x",
		FIELD2VALUE(MAX77759_USB_EXTENDED_STATUS_REG_RSVD_7_1, val));
	i += SCNPRINTF(&buff[i], len - i, " VSAFE0V=%x",
		FIELD2VALUE(MAX77759_USB_EXTENDED_STATUS_REG_VSAFE0V, val));
#else
	buff[0] = 0;
#endif
	return buff;
}

/*
 * ALERT_EXTENDED,0x21,0b00000000,0x00
 * RSVD_7_3[4:0],,,,,RSVD_2,RSVD_1
 */
#define MAX77759_USB_ALERT_EXTENDED	0x21
#define MAX77759_USB_ALERT_EXTENDED_RSVD_2	(0x1 << 2)
#define MAX77759_USB_ALERT_EXTENDED_RSVD_1	(0x1 << 1)
#define MAX77759_USB_ALERT_EXTENDED_SNK_FRS	(0x1 << 0)

#define MAX77759_USB_ALERT_EXTENDED_RSVD_7_3_SHIFT	3
#define MAX77759_USB_ALERT_EXTENDED_RSVD_7_3_MASK	(0x1f << 3)
#define MAX77759_USB_ALERT_EXTENDED_RSVD_7_3_CLEAR	(~(0x1f << 3))
#define MAX77759_USB_ALERT_EXTENDED_RSVD_2_SHIFT	2
#define MAX77759_USB_ALERT_EXTENDED_RSVD_2_MASK	(0x1 << 2)
#define MAX77759_USB_ALERT_EXTENDED_RSVD_2_CLEAR	(~(0x1 << 2))
#define MAX77759_USB_ALERT_EXTENDED_RSVD_1_SHIFT	1
#define MAX77759_USB_ALERT_EXTENDED_RSVD_1_MASK	(0x1 << 1)
#define MAX77759_USB_ALERT_EXTENDED_RSVD_1_CLEAR	(~(0x1 << 1))
#define MAX77759_USB_ALERT_EXTENDED_SNK_FRS_SHIFT	0
#define MAX77759_USB_ALERT_EXTENDED_SNK_FRS_MASK	(0x1 << 0)
#define MAX77759_USB_ALERT_EXTENDED_SNK_FRS_CLEAR	(~(0x1 << 0))

MAX77759_BFF(usb_alert_extended_rsvd_7_3,7,3)
MAX77759_BFF(usb_alert_extended_rsvd_2,2,2)
MAX77759_BFF(usb_alert_extended_rsvd_1,1,1)
MAX77759_BFF(usb_alert_extended_snk_frs,0,0)
static inline const char *
max77759_usb_alert_extended_cstr(char *buff, size_t len, int val)
{
#ifdef SCNPRINTF
	int i = 0;

	i += SCNPRINTF(&buff[i], len - i, " RSVD_7_3=%x",
		FIELD2VALUE(MAX77759_USB_ALERT_EXTENDED_RSVD_7_3, val));
	i += SCNPRINTF(&buff[i], len - i, " RSVD_2=%x",
		FIELD2VALUE(MAX77759_USB_ALERT_EXTENDED_RSVD_2, val));
	i += SCNPRINTF(&buff[i], len - i, " RSVD_1=%x",
		FIELD2VALUE(MAX77759_USB_ALERT_EXTENDED_RSVD_1, val));
	i += SCNPRINTF(&buff[i], len - i, " SNK_FRS=%x",
		FIELD2VALUE(MAX77759_USB_ALERT_EXTENDED_SNK_FRS, val));
#else
	buff[0] = 0;
#endif
	return buff;
}

/*
 * COMMAND_REG,0x23,0b00000000,0x00
 * COMMAND[7:0],,,,,,
 */
#define MAX77759_USB_COMMAND_REG	0x23

/*
 * DEVICE_CAPABILITIES_1_L,0x24,0b11011000,0xd8
 * PWR_ROLE_CAP[2:0],,,SOP_DBG_CAP,SRC_VCONN_CAP,SNK_VBUS_CAP,SRC_HI_VBUS_CAP
 */
#define MAX77759_USB_DEVICE_CAPABILITIES_1_L	0x24
#define MAX77759_USB_DEVICE_CAPABILITIES_1_L_SOP_DBG_CAP	(0x1 << 4)
#define MAX77759_USB_DEVICE_CAPABILITIES_1_L_SRC_VCONN_CAP	(0x1 << 3)
#define MAX77759_USB_DEVICE_CAPABILITIES_1_L_SNK_VBUS_CAP	(0x1 << 2)
#define MAX77759_USB_DEVICE_CAPABILITIES_1_L_SRC_HI_VBUS_CAP	(0x1 << 1)
#define MAX77759_USB_DEVICE_CAPABILITIES_1_L_SRC_VBUS_CAP	(0x1 << 0)

#define MAX77759_USB_DEVICE_CAPABILITIES_1_L_PWR_ROLE_CAP_SHIFT	5
#define MAX77759_USB_DEVICE_CAPABILITIES_1_L_PWR_ROLE_CAP_MASK	(0x7 << 5)
#define MAX77759_USB_DEVICE_CAPABILITIES_1_L_PWR_ROLE_CAP_CLEAR	(~(0x7 << 5))
#define MAX77759_USB_DEVICE_CAPABILITIES_1_L_SOP_DBG_CAP_SHIFT	4
#define MAX77759_USB_DEVICE_CAPABILITIES_1_L_SOP_DBG_CAP_MASK	(0x1 << 4)
#define MAX77759_USB_DEVICE_CAPABILITIES_1_L_SOP_DBG_CAP_CLEAR	(~(0x1 << 4))
#define MAX77759_USB_DEVICE_CAPABILITIES_1_L_SRC_VCONN_CAP_SHIFT	3
#define MAX77759_USB_DEVICE_CAPABILITIES_1_L_SRC_VCONN_CAP_MASK	(0x1 << 3)
#define MAX77759_USB_DEVICE_CAPABILITIES_1_L_SRC_VCONN_CAP_CLEAR	(~(0x1 << 3))
#define MAX77759_USB_DEVICE_CAPABILITIES_1_L_SNK_VBUS_CAP_SHIFT	2
#define MAX77759_USB_DEVICE_CAPABILITIES_1_L_SNK_VBUS_CAP_MASK	(0x1 << 2)
#define MAX77759_USB_DEVICE_CAPABILITIES_1_L_SNK_VBUS_CAP_CLEAR	(~(0x1 << 2))
#define MAX77759_USB_DEVICE_CAPABILITIES_1_L_SRC_HI_VBUS_CAP_SHIFT	1
#define MAX77759_USB_DEVICE_CAPABILITIES_1_L_SRC_HI_VBUS_CAP_MASK	(0x1 << 1)
#define MAX77759_USB_DEVICE_CAPABILITIES_1_L_SRC_HI_VBUS_CAP_CLEAR	(~(0x1 << 1))
#define MAX77759_USB_DEVICE_CAPABILITIES_1_L_SRC_VBUS_CAP_SHIFT	0
#define MAX77759_USB_DEVICE_CAPABILITIES_1_L_SRC_VBUS_CAP_MASK	(0x1 << 0)
#define MAX77759_USB_DEVICE_CAPABILITIES_1_L_SRC_VBUS_CAP_CLEAR	(~(0x1 << 0))

MAX77759_BFF(usb_device_capabilities_1_l_pwr_role_cap,7,5)
MAX77759_BFF(usb_device_capabilities_1_l_sop_dbg_cap,4,4)
MAX77759_BFF(usb_device_capabilities_1_l_src_vconn_cap,3,3)
MAX77759_BFF(usb_device_capabilities_1_l_snk_vbus_cap,2,2)
MAX77759_BFF(usb_device_capabilities_1_l_src_hi_vbus_cap,1,1)
MAX77759_BFF(usb_device_capabilities_1_l_src_vbus_cap,0,0)
static inline const char *
max77759_usb_device_capabilities_1_l_cstr(char *buff, size_t len, int val)
{
#ifdef SCNPRINTF
	int i = 0;

	i += SCNPRINTF(&buff[i], len - i, " PWR_ROLE_CAP=%x",
		FIELD2VALUE(MAX77759_USB_DEVICE_CAPABILITIES_1_L_PWR_ROLE_CAP, val));
	i += SCNPRINTF(&buff[i], len - i, " SOP_DBG_CAP=%x",
		FIELD2VALUE(MAX77759_USB_DEVICE_CAPABILITIES_1_L_SOP_DBG_CAP, val));
	i += SCNPRINTF(&buff[i], len - i, " SRC_VCONN_CAP=%x",
		FIELD2VALUE(MAX77759_USB_DEVICE_CAPABILITIES_1_L_SRC_VCONN_CAP, val));
	i += SCNPRINTF(&buff[i], len - i, " SNK_VBUS_CAP=%x",
		FIELD2VALUE(MAX77759_USB_DEVICE_CAPABILITIES_1_L_SNK_VBUS_CAP, val));
	i += SCNPRINTF(&buff[i], len - i, " SRC_HI_VBUS_CAP=%x",
		FIELD2VALUE(MAX77759_USB_DEVICE_CAPABILITIES_1_L_SRC_HI_VBUS_CAP, val));
	i += SCNPRINTF(&buff[i], len - i, " SRC_VBUS_CAP=%x",
		FIELD2VALUE(MAX77759_USB_DEVICE_CAPABILITIES_1_L_SRC_VBUS_CAP, val));
#else
	buff[0] = 0;
#endif
	return buff;
}

/*
 * DEVICE_CAPABILITIES_1_H,0x25,0b00011110,0x1e
 * VBUS_HI_VOLT_TRGT_CAP,VBUS_OCP_RPT_CAP,VBUS_OVP_RPT_CAP,BLEED_DISCH_CAP,FORCE_DISCH_CAP,VBUS_MEAS_ALRM_CAP,SRC_RES_SUP_CAP[1:0]
 */
#define MAX77759_USB_DEVICE_CAPABILITIES_1_H	0x25
#define MAX77759_USB_DEVICE_CAPABILITIES_1_H_VBUS_HI_VOLT_TRGT_CAP	(0x1 << 7)
#define MAX77759_USB_DEVICE_CAPABILITIES_1_H_VBUS_OCP_RPT_CAP	(0x1 << 6)
#define MAX77759_USB_DEVICE_CAPABILITIES_1_H_VBUS_OVP_RPT_CAP	(0x1 << 5)
#define MAX77759_USB_DEVICE_CAPABILITIES_1_H_BLEED_DISCH_CAP	(0x1 << 4)
#define MAX77759_USB_DEVICE_CAPABILITIES_1_H_FORCE_DISCH_CAP	(0x1 << 3)
#define MAX77759_USB_DEVICE_CAPABILITIES_1_H_VBUS_MEAS_ALRM_CAP	(0x1 << 2)

#define MAX77759_USB_DEVICE_CAPABILITIES_1_H_VBUS_HI_VOLT_TRGT_CAP_SHIFT	7
#define MAX77759_USB_DEVICE_CAPABILITIES_1_H_VBUS_HI_VOLT_TRGT_CAP_MASK	(0x1 << 7)
#define MAX77759_USB_DEVICE_CAPABILITIES_1_H_VBUS_HI_VOLT_TRGT_CAP_CLEAR	(~(0x1 << 7))
#define MAX77759_USB_DEVICE_CAPABILITIES_1_H_VBUS_OCP_RPT_CAP_SHIFT	6
#define MAX77759_USB_DEVICE_CAPABILITIES_1_H_VBUS_OCP_RPT_CAP_MASK	(0x1 << 6)
#define MAX77759_USB_DEVICE_CAPABILITIES_1_H_VBUS_OCP_RPT_CAP_CLEAR	(~(0x1 << 6))
#define MAX77759_USB_DEVICE_CAPABILITIES_1_H_VBUS_OVP_RPT_CAP_SHIFT	5
#define MAX77759_USB_DEVICE_CAPABILITIES_1_H_VBUS_OVP_RPT_CAP_MASK	(0x1 << 5)
#define MAX77759_USB_DEVICE_CAPABILITIES_1_H_VBUS_OVP_RPT_CAP_CLEAR	(~(0x1 << 5))
#define MAX77759_USB_DEVICE_CAPABILITIES_1_H_BLEED_DISCH_CAP_SHIFT	4
#define MAX77759_USB_DEVICE_CAPABILITIES_1_H_BLEED_DISCH_CAP_MASK	(0x1 << 4)
#define MAX77759_USB_DEVICE_CAPABILITIES_1_H_BLEED_DISCH_CAP_CLEAR	(~(0x1 << 4))
#define MAX77759_USB_DEVICE_CAPABILITIES_1_H_FORCE_DISCH_CAP_SHIFT	3
#define MAX77759_USB_DEVICE_CAPABILITIES_1_H_FORCE_DISCH_CAP_MASK	(0x1 << 3)
#define MAX77759_USB_DEVICE_CAPABILITIES_1_H_FORCE_DISCH_CAP_CLEAR	(~(0x1 << 3))
#define MAX77759_USB_DEVICE_CAPABILITIES_1_H_VBUS_MEAS_ALRM_CAP_SHIFT	2
#define MAX77759_USB_DEVICE_CAPABILITIES_1_H_VBUS_MEAS_ALRM_CAP_MASK	(0x1 << 2)
#define MAX77759_USB_DEVICE_CAPABILITIES_1_H_VBUS_MEAS_ALRM_CAP_CLEAR	(~(0x1 << 2))
#define MAX77759_USB_DEVICE_CAPABILITIES_1_H_SRC_RES_SUP_CAP_SHIFT	0
#define MAX77759_USB_DEVICE_CAPABILITIES_1_H_SRC_RES_SUP_CAP_MASK	(0x3 << 0)
#define MAX77759_USB_DEVICE_CAPABILITIES_1_H_SRC_RES_SUP_CAP_CLEAR	(~(0x3 << 0))

MAX77759_BFF(usb_device_capabilities_1_h_vbus_hi_volt_trgt_cap,7,7)
MAX77759_BFF(usb_device_capabilities_1_h_vbus_ocp_rpt_cap,6,6)
MAX77759_BFF(usb_device_capabilities_1_h_vbus_ovp_rpt_cap,5,5)
MAX77759_BFF(usb_device_capabilities_1_h_bleed_disch_cap,4,4)
MAX77759_BFF(usb_device_capabilities_1_h_force_disch_cap,3,3)
MAX77759_BFF(usb_device_capabilities_1_h_vbus_meas_alrm_cap,2,2)
MAX77759_BFF(usb_device_capabilities_1_h_src_res_sup_cap,1,0)
static inline const char *
max77759_usb_device_capabilities_1_h_cstr(char *buff, size_t len, int val)
{
#ifdef SCNPRINTF
	int i = 0;

	i += SCNPRINTF(&buff[i], len - i, " VBUS_HI_VOLT_TRGT_CAP=%x",
		FIELD2VALUE(MAX77759_USB_DEVICE_CAPABILITIES_1_H_VBUS_HI_VOLT_TRGT_CAP, val));
	i += SCNPRINTF(&buff[i], len - i, " VBUS_OCP_RPT_CAP=%x",
		FIELD2VALUE(MAX77759_USB_DEVICE_CAPABILITIES_1_H_VBUS_OCP_RPT_CAP, val));
	i += SCNPRINTF(&buff[i], len - i, " VBUS_OVP_RPT_CAP=%x",
		FIELD2VALUE(MAX77759_USB_DEVICE_CAPABILITIES_1_H_VBUS_OVP_RPT_CAP, val));
	i += SCNPRINTF(&buff[i], len - i, " BLEED_DISCH_CAP=%x",
		FIELD2VALUE(MAX77759_USB_DEVICE_CAPABILITIES_1_H_BLEED_DISCH_CAP, val));
	i += SCNPRINTF(&buff[i], len - i, " FORCE_DISCH_CAP=%x",
		FIELD2VALUE(MAX77759_USB_DEVICE_CAPABILITIES_1_H_FORCE_DISCH_CAP, val));
	i += SCNPRINTF(&buff[i], len - i, " VBUS_MEAS_ALRM_CAP=%x",
		FIELD2VALUE(MAX77759_USB_DEVICE_CAPABILITIES_1_H_VBUS_MEAS_ALRM_CAP, val));
	i += SCNPRINTF(&buff[i], len - i, " SRC_RES_SUP_CAP=%x",
		FIELD2VALUE(MAX77759_USB_DEVICE_CAPABILITIES_1_H_SRC_RES_SUP_CAP, val));
#else
	buff[0] = 0;
#endif
	return buff;
}

/*
 * DEVICE_CAPABILITIES_2_L,0x26,0b11000001,0xc1
 * SNK_DISC_DET_CAP,STP_DISCH_THR_CAP,VBUS_VOLT_ALRM_LSB_CAP[1:0],,VCONN_PWR_CAP[2:0],,
 */
#define MAX77759_USB_DEVICE_CAPABILITIES_2_L	0x26
#define MAX77759_USB_DEVICE_CAPABILITIES_2_L_SNK_DISC_DET_CAP	(0x1 << 7)
#define MAX77759_USB_DEVICE_CAPABILITIES_2_L_STP_DISCH_THR_CAP	(0x1 << 6)
#define MAX77759_USB_DEVICE_CAPABILITIES_2_L_VCONN_OCP_CAP	(0x1 << 0)

#define MAX77759_USB_DEVICE_CAPABILITIES_2_L_SNK_DISC_DET_CAP_SHIFT	7
#define MAX77759_USB_DEVICE_CAPABILITIES_2_L_SNK_DISC_DET_CAP_MASK	(0x1 << 7)
#define MAX77759_USB_DEVICE_CAPABILITIES_2_L_SNK_DISC_DET_CAP_CLEAR	(~(0x1 << 7))
#define MAX77759_USB_DEVICE_CAPABILITIES_2_L_STP_DISCH_THR_CAP_SHIFT	6
#define MAX77759_USB_DEVICE_CAPABILITIES_2_L_STP_DISCH_THR_CAP_MASK	(0x1 << 6)
#define MAX77759_USB_DEVICE_CAPABILITIES_2_L_STP_DISCH_THR_CAP_CLEAR	(~(0x1 << 6))
#define MAX77759_USB_DEVICE_CAPABILITIES_2_L_VBUS_VOLT_ALRM_LSB_CAP_SHIFT	4
#define MAX77759_USB_DEVICE_CAPABILITIES_2_L_VBUS_VOLT_ALRM_LSB_CAP_MASK	(0x3 << 4)
#define MAX77759_USB_DEVICE_CAPABILITIES_2_L_VBUS_VOLT_ALRM_LSB_CAP_CLEAR	(~(0x3 << 4))
#define MAX77759_USB_DEVICE_CAPABILITIES_2_L_VCONN_PWR_CAP_SHIFT	1
#define MAX77759_USB_DEVICE_CAPABILITIES_2_L_VCONN_PWR_CAP_MASK	(0x7 << 1)
#define MAX77759_USB_DEVICE_CAPABILITIES_2_L_VCONN_PWR_CAP_CLEAR	(~(0x7 << 1))
#define MAX77759_USB_DEVICE_CAPABILITIES_2_L_VCONN_OCP_CAP_SHIFT	0
#define MAX77759_USB_DEVICE_CAPABILITIES_2_L_VCONN_OCP_CAP_MASK	(0x1 << 0)
#define MAX77759_USB_DEVICE_CAPABILITIES_2_L_VCONN_OCP_CAP_CLEAR	(~(0x1 << 0))

MAX77759_BFF(usb_device_capabilities_2_l_snk_disc_det_cap,7,7)
MAX77759_BFF(usb_device_capabilities_2_l_stp_disch_thr_cap,6,6)
MAX77759_BFF(usb_device_capabilities_2_l_vbus_volt_alrm_lsb_cap,5,4)
MAX77759_BFF(usb_device_capabilities_2_l_vconn_pwr_cap,3,1)
MAX77759_BFF(usb_device_capabilities_2_l_vconn_ocp_cap,0,0)
static inline const char *
max77759_usb_device_capabilities_2_l_cstr(char *buff, size_t len, int val)
{
#ifdef SCNPRINTF
	int i = 0;

	i += SCNPRINTF(&buff[i], len - i, " SNK_DISC_DET_CAP=%x",
		FIELD2VALUE(MAX77759_USB_DEVICE_CAPABILITIES_2_L_SNK_DISC_DET_CAP, val));
	i += SCNPRINTF(&buff[i], len - i, " STP_DISCH_THR_CAP=%x",
		FIELD2VALUE(MAX77759_USB_DEVICE_CAPABILITIES_2_L_STP_DISCH_THR_CAP, val));
	i += SCNPRINTF(&buff[i], len - i, " VBUS_VOLT_ALRM_LSB_CAP=%x",
		FIELD2VALUE(MAX77759_USB_DEVICE_CAPABILITIES_2_L_VBUS_VOLT_ALRM_LSB_CAP, val));
	i += SCNPRINTF(&buff[i], len - i, " VCONN_PWR_CAP=%x",
		FIELD2VALUE(MAX77759_USB_DEVICE_CAPABILITIES_2_L_VCONN_PWR_CAP, val));
	i += SCNPRINTF(&buff[i], len - i, " VCONN_OCP_CAP=%x",
		FIELD2VALUE(MAX77759_USB_DEVICE_CAPABILITIES_2_L_VCONN_OCP_CAP, val));
#else
	buff[0] = 0;
#endif
	return buff;
}

/*
 * DEVICE_CAPABILITIES_2_H,0x27,0b00000011,0x03
 * RSVD_7,MSGDisDisc,GENERIC_TMR_CAP,LONG_MSG_CAP,SMB_PEC_CAP,SRC_FRS_CAP,SNK_FRS_CAP
 */
#define MAX77759_USB_DEVICE_CAPABILITIES_2_H	0x27
#define MAX77759_USB_DEVICE_CAPABILITIES_2_H_RSVD_7	(0x1 << 7)
#define MAX77759_USB_DEVICE_CAPABILITIES_2_H_MSGDISDISC	(0x1 << 6)
#define MAX77759_USB_DEVICE_CAPABILITIES_2_H_GENERIC_TMR_CAP	(0x1 << 5)
#define MAX77759_USB_DEVICE_CAPABILITIES_2_H_LONG_MSG_CAP	(0x1 << 4)
#define MAX77759_USB_DEVICE_CAPABILITIES_2_H_SMB_PEC_CAP	(0x1 << 3)
#define MAX77759_USB_DEVICE_CAPABILITIES_2_H_SRC_FRS_CAP	(0x1 << 2)
#define MAX77759_USB_DEVICE_CAPABILITIES_2_H_SNK_FRS_CAP	(0x1 << 1)
#define MAX77759_USB_DEVICE_CAPABILITIES_2_H_WDOG_TMR_CAP	(0x1 << 0)

#define MAX77759_USB_DEVICE_CAPABILITIES_2_H_RSVD_7_SHIFT	7
#define MAX77759_USB_DEVICE_CAPABILITIES_2_H_RSVD_7_MASK	(0x1 << 7)
#define MAX77759_USB_DEVICE_CAPABILITIES_2_H_RSVD_7_CLEAR	(~(0x1 << 7))
#define MAX77759_USB_DEVICE_CAPABILITIES_2_H_MSGDISDISC_SHIFT	6
#define MAX77759_USB_DEVICE_CAPABILITIES_2_H_MSGDISDISC_MASK	(0x1 << 6)
#define MAX77759_USB_DEVICE_CAPABILITIES_2_H_MSGDISDISC_CLEAR	(~(0x1 << 6))
#define MAX77759_USB_DEVICE_CAPABILITIES_2_H_GENERIC_TMR_CAP_SHIFT	5
#define MAX77759_USB_DEVICE_CAPABILITIES_2_H_GENERIC_TMR_CAP_MASK	(0x1 << 5)
#define MAX77759_USB_DEVICE_CAPABILITIES_2_H_GENERIC_TMR_CAP_CLEAR	(~(0x1 << 5))
#define MAX77759_USB_DEVICE_CAPABILITIES_2_H_LONG_MSG_CAP_SHIFT	4
#define MAX77759_USB_DEVICE_CAPABILITIES_2_H_LONG_MSG_CAP_MASK	(0x1 << 4)
#define MAX77759_USB_DEVICE_CAPABILITIES_2_H_LONG_MSG_CAP_CLEAR	(~(0x1 << 4))
#define MAX77759_USB_DEVICE_CAPABILITIES_2_H_SMB_PEC_CAP_SHIFT	3
#define MAX77759_USB_DEVICE_CAPABILITIES_2_H_SMB_PEC_CAP_MASK	(0x1 << 3)
#define MAX77759_USB_DEVICE_CAPABILITIES_2_H_SMB_PEC_CAP_CLEAR	(~(0x1 << 3))
#define MAX77759_USB_DEVICE_CAPABILITIES_2_H_SRC_FRS_CAP_SHIFT	2
#define MAX77759_USB_DEVICE_CAPABILITIES_2_H_SRC_FRS_CAP_MASK	(0x1 << 2)
#define MAX77759_USB_DEVICE_CAPABILITIES_2_H_SRC_FRS_CAP_CLEAR	(~(0x1 << 2))
#define MAX77759_USB_DEVICE_CAPABILITIES_2_H_SNK_FRS_CAP_SHIFT	1
#define MAX77759_USB_DEVICE_CAPABILITIES_2_H_SNK_FRS_CAP_MASK	(0x1 << 1)
#define MAX77759_USB_DEVICE_CAPABILITIES_2_H_SNK_FRS_CAP_CLEAR	(~(0x1 << 1))
#define MAX77759_USB_DEVICE_CAPABILITIES_2_H_WDOG_TMR_CAP_SHIFT	0
#define MAX77759_USB_DEVICE_CAPABILITIES_2_H_WDOG_TMR_CAP_MASK	(0x1 << 0)
#define MAX77759_USB_DEVICE_CAPABILITIES_2_H_WDOG_TMR_CAP_CLEAR	(~(0x1 << 0))

MAX77759_BFF(usb_device_capabilities_2_h_rsvd_7,7,7)
MAX77759_BFF(usb_device_capabilities_2_h_msgdisdisc,6,6)
MAX77759_BFF(usb_device_capabilities_2_h_generic_tmr_cap,5,5)
MAX77759_BFF(usb_device_capabilities_2_h_long_msg_cap,4,4)
MAX77759_BFF(usb_device_capabilities_2_h_smb_pec_cap,3,3)
MAX77759_BFF(usb_device_capabilities_2_h_src_frs_cap,2,2)
MAX77759_BFF(usb_device_capabilities_2_h_snk_frs_cap,1,1)
MAX77759_BFF(usb_device_capabilities_2_h_wdog_tmr_cap,0,0)
static inline const char *
max77759_usb_device_capabilities_2_h_cstr(char *buff, size_t len, int val)
{
#ifdef SCNPRINTF
	int i = 0;

	i += SCNPRINTF(&buff[i], len - i, " RSVD_7=%x",
		FIELD2VALUE(MAX77759_USB_DEVICE_CAPABILITIES_2_H_RSVD_7, val));
	i += SCNPRINTF(&buff[i], len - i, " MSGDISDISC=%x",
		FIELD2VALUE(MAX77759_USB_DEVICE_CAPABILITIES_2_H_MSGDISDISC, val));
	i += SCNPRINTF(&buff[i], len - i, " GENERIC_TMR_CAP=%x",
		FIELD2VALUE(MAX77759_USB_DEVICE_CAPABILITIES_2_H_GENERIC_TMR_CAP, val));
	i += SCNPRINTF(&buff[i], len - i, " LONG_MSG_CAP=%x",
		FIELD2VALUE(MAX77759_USB_DEVICE_CAPABILITIES_2_H_LONG_MSG_CAP, val));
	i += SCNPRINTF(&buff[i], len - i, " SMB_PEC_CAP=%x",
		FIELD2VALUE(MAX77759_USB_DEVICE_CAPABILITIES_2_H_SMB_PEC_CAP, val));
	i += SCNPRINTF(&buff[i], len - i, " SRC_FRS_CAP=%x",
		FIELD2VALUE(MAX77759_USB_DEVICE_CAPABILITIES_2_H_SRC_FRS_CAP, val));
	i += SCNPRINTF(&buff[i], len - i, " SNK_FRS_CAP=%x",
		FIELD2VALUE(MAX77759_USB_DEVICE_CAPABILITIES_2_H_SNK_FRS_CAP, val));
	i += SCNPRINTF(&buff[i], len - i, " WDOG_TMR_CAP=%x",
		FIELD2VALUE(MAX77759_USB_DEVICE_CAPABILITIES_2_H_WDOG_TMR_CAP, val));
#else
	buff[0] = 0;
#endif
	return buff;
}

/*
 * STANDARD_INPUT_CAPABILITIES_REG,0x28,0b00000000,0x00
 * RSVD_7_5[2:0],,,SRC_FRS_INP_CAP[1:0],,VBUS_EXT_OVP_CAP,VBUS_EXT_OCP_CAP
 */
#define MAX77759_USB_STANDARD_INPUT_CAPABILITIES_REG	0x28
#define MAX77759_USB_STANDARD_INPUT_CAPABILITIES_REG_VBUS_EXT_OVP_CAP	(0x1 << 2)
#define MAX77759_USB_STANDARD_INPUT_CAPABILITIES_REG_VBUS_EXT_OCP_CAP	(0x1 << 1)
#define MAX77759_USB_STANDARD_INPUT_CAPABILITIES_REG_FRC_OFF_VBUS_CAP	(0x1 << 0)

#define MAX77759_USB_STANDARD_INPUT_CAPABILITIES_REG_RSVD_7_5_SHIFT	5
#define MAX77759_USB_STANDARD_INPUT_CAPABILITIES_REG_RSVD_7_5_MASK	(0x7 << 5)
#define MAX77759_USB_STANDARD_INPUT_CAPABILITIES_REG_RSVD_7_5_CLEAR	(~(0x7 << 5))
#define MAX77759_USB_STANDARD_INPUT_CAPABILITIES_REG_SRC_FRS_INP_CAP_SHIFT	3
#define MAX77759_USB_STANDARD_INPUT_CAPABILITIES_REG_SRC_FRS_INP_CAP_MASK	(0x3 << 3)
#define MAX77759_USB_STANDARD_INPUT_CAPABILITIES_REG_SRC_FRS_INP_CAP_CLEAR	(~(0x3 << 3))
#define MAX77759_USB_STANDARD_INPUT_CAPABILITIES_REG_VBUS_EXT_OVP_CAP_SHIFT	2
#define MAX77759_USB_STANDARD_INPUT_CAPABILITIES_REG_VBUS_EXT_OVP_CAP_MASK	(0x1 << 2)
#define MAX77759_USB_STANDARD_INPUT_CAPABILITIES_REG_VBUS_EXT_OVP_CAP_CLEAR	(~(0x1 << 2))
#define MAX77759_USB_STANDARD_INPUT_CAPABILITIES_REG_VBUS_EXT_OCP_CAP_SHIFT	1
#define MAX77759_USB_STANDARD_INPUT_CAPABILITIES_REG_VBUS_EXT_OCP_CAP_MASK	(0x1 << 1)
#define MAX77759_USB_STANDARD_INPUT_CAPABILITIES_REG_VBUS_EXT_OCP_CAP_CLEAR	(~(0x1 << 1))
#define MAX77759_USB_STANDARD_INPUT_CAPABILITIES_REG_FRC_OFF_VBUS_CAP_SHIFT	0
#define MAX77759_USB_STANDARD_INPUT_CAPABILITIES_REG_FRC_OFF_VBUS_CAP_MASK	(0x1 << 0)
#define MAX77759_USB_STANDARD_INPUT_CAPABILITIES_REG_FRC_OFF_VBUS_CAP_CLEAR	(~(0x1 << 0))

MAX77759_BFF(usb_standard_input_capabilities_reg_rsvd_7_5,7,5)
MAX77759_BFF(usb_standard_input_capabilities_reg_src_frs_inp_cap,4,3)
MAX77759_BFF(usb_standard_input_capabilities_reg_vbus_ext_ovp_cap,2,2)
MAX77759_BFF(usb_standard_input_capabilities_reg_vbus_ext_ocp_cap,1,1)
MAX77759_BFF(usb_standard_input_capabilities_reg_frc_off_vbus_cap,0,0)
static inline const char *
max77759_usb_standard_input_capabilities_reg_cstr(char *buff, size_t len, int val)
{
#ifdef SCNPRINTF
	int i = 0;

	i += SCNPRINTF(&buff[i], len - i, " RSVD_7_5=%x",
		FIELD2VALUE(MAX77759_USB_STANDARD_INPUT_CAPABILITIES_REG_RSVD_7_5, val));
	i += SCNPRINTF(&buff[i], len - i, " SRC_FRS_INP_CAP=%x",
		FIELD2VALUE(MAX77759_USB_STANDARD_INPUT_CAPABILITIES_REG_SRC_FRS_INP_CAP, val));
	i += SCNPRINTF(&buff[i], len - i, " VBUS_EXT_OVP_CAP=%x",
		FIELD2VALUE(MAX77759_USB_STANDARD_INPUT_CAPABILITIES_REG_VBUS_EXT_OVP_CAP, val));
	i += SCNPRINTF(&buff[i], len - i, " VBUS_EXT_OCP_CAP=%x",
		FIELD2VALUE(MAX77759_USB_STANDARD_INPUT_CAPABILITIES_REG_VBUS_EXT_OCP_CAP, val));
	i += SCNPRINTF(&buff[i], len - i, " FRC_OFF_VBUS_CAP=%x",
		FIELD2VALUE(MAX77759_USB_STANDARD_INPUT_CAPABILITIES_REG_FRC_OFF_VBUS_CAP, val));
#else
	buff[0] = 0;
#endif
	return buff;
}

/*
 * STANDARD_OUTPUT_CAPABILITIES_REG,0x29,0b01000000,0x40
 * VBUS_SNK_DIS_DET_CAP,DBG_ACC_CAP,VBUS_PRESENT_CAP,AUD_ACC_CAP,ACT_CBL_CAP,MUX_CONFG_CAP,CONN_PRESENT_CAP
 */
#define MAX77759_USB_STANDARD_OUTPUT_CAPABILITIES_REG	0x29
#define MAX77759_USB_STANDARD_OUTPUT_CAPABILITIES_REG_VBUS_SNK_DIS_DET_CAP	(0x1 << 7)
#define MAX77759_USB_STANDARD_OUTPUT_CAPABILITIES_REG_DBG_ACC_CAP	(0x1 << 6)
#define MAX77759_USB_STANDARD_OUTPUT_CAPABILITIES_REG_VBUS_PRESENT_CAP	(0x1 << 5)
#define MAX77759_USB_STANDARD_OUTPUT_CAPABILITIES_REG_AUD_ACC_CAP	(0x1 << 4)
#define MAX77759_USB_STANDARD_OUTPUT_CAPABILITIES_REG_ACT_CBL_CAP	(0x1 << 3)
#define MAX77759_USB_STANDARD_OUTPUT_CAPABILITIES_REG_MUX_CONFG_CAP	(0x1 << 2)
#define MAX77759_USB_STANDARD_OUTPUT_CAPABILITIES_REG_CONN_PRESENT_CAP	(0x1 << 1)
#define MAX77759_USB_STANDARD_OUTPUT_CAPABILITIES_REG_CONN_ORIENT_CAP	(0x1 << 0)

#define MAX77759_USB_STANDARD_OUTPUT_CAPABILITIES_REG_VBUS_SNK_DIS_DET_CAP_SHIFT	7
#define MAX77759_USB_STANDARD_OUTPUT_CAPABILITIES_REG_VBUS_SNK_DIS_DET_CAP_MASK	(0x1 << 7)
#define MAX77759_USB_STANDARD_OUTPUT_CAPABILITIES_REG_VBUS_SNK_DIS_DET_CAP_CLEAR	(~(0x1 << 7))
#define MAX77759_USB_STANDARD_OUTPUT_CAPABILITIES_REG_DBG_ACC_CAP_SHIFT	6
#define MAX77759_USB_STANDARD_OUTPUT_CAPABILITIES_REG_DBG_ACC_CAP_MASK	(0x1 << 6)
#define MAX77759_USB_STANDARD_OUTPUT_CAPABILITIES_REG_DBG_ACC_CAP_CLEAR	(~(0x1 << 6))
#define MAX77759_USB_STANDARD_OUTPUT_CAPABILITIES_REG_VBUS_PRESENT_CAP_SHIFT	5
#define MAX77759_USB_STANDARD_OUTPUT_CAPABILITIES_REG_VBUS_PRESENT_CAP_MASK	(0x1 << 5)
#define MAX77759_USB_STANDARD_OUTPUT_CAPABILITIES_REG_VBUS_PRESENT_CAP_CLEAR	(~(0x1 << 5))
#define MAX77759_USB_STANDARD_OUTPUT_CAPABILITIES_REG_AUD_ACC_CAP_SHIFT	4
#define MAX77759_USB_STANDARD_OUTPUT_CAPABILITIES_REG_AUD_ACC_CAP_MASK	(0x1 << 4)
#define MAX77759_USB_STANDARD_OUTPUT_CAPABILITIES_REG_AUD_ACC_CAP_CLEAR	(~(0x1 << 4))
#define MAX77759_USB_STANDARD_OUTPUT_CAPABILITIES_REG_ACT_CBL_CAP_SHIFT	3
#define MAX77759_USB_STANDARD_OUTPUT_CAPABILITIES_REG_ACT_CBL_CAP_MASK	(0x1 << 3)
#define MAX77759_USB_STANDARD_OUTPUT_CAPABILITIES_REG_ACT_CBL_CAP_CLEAR	(~(0x1 << 3))
#define MAX77759_USB_STANDARD_OUTPUT_CAPABILITIES_REG_MUX_CONFG_CAP_SHIFT	2
#define MAX77759_USB_STANDARD_OUTPUT_CAPABILITIES_REG_MUX_CONFG_CAP_MASK	(0x1 << 2)
#define MAX77759_USB_STANDARD_OUTPUT_CAPABILITIES_REG_MUX_CONFG_CAP_CLEAR	(~(0x1 << 2))
#define MAX77759_USB_STANDARD_OUTPUT_CAPABILITIES_REG_CONN_PRESENT_CAP_SHIFT	1
#define MAX77759_USB_STANDARD_OUTPUT_CAPABILITIES_REG_CONN_PRESENT_CAP_MASK	(0x1 << 1)
#define MAX77759_USB_STANDARD_OUTPUT_CAPABILITIES_REG_CONN_PRESENT_CAP_CLEAR	(~(0x1 << 1))
#define MAX77759_USB_STANDARD_OUTPUT_CAPABILITIES_REG_CONN_ORIENT_CAP_SHIFT	0
#define MAX77759_USB_STANDARD_OUTPUT_CAPABILITIES_REG_CONN_ORIENT_CAP_MASK	(0x1 << 0)
#define MAX77759_USB_STANDARD_OUTPUT_CAPABILITIES_REG_CONN_ORIENT_CAP_CLEAR	(~(0x1 << 0))

MAX77759_BFF(usb_standard_output_capabilities_reg_vbus_snk_dis_det_cap,7,7)
MAX77759_BFF(usb_standard_output_capabilities_reg_dbg_acc_cap,6,6)
MAX77759_BFF(usb_standard_output_capabilities_reg_vbus_present_cap,5,5)
MAX77759_BFF(usb_standard_output_capabilities_reg_aud_acc_cap,4,4)
MAX77759_BFF(usb_standard_output_capabilities_reg_act_cbl_cap,3,3)
MAX77759_BFF(usb_standard_output_capabilities_reg_mux_confg_cap,2,2)
MAX77759_BFF(usb_standard_output_capabilities_reg_conn_present_cap,1,1)
MAX77759_BFF(usb_standard_output_capabilities_reg_conn_orient_cap,0,0)
static inline const char *
max77759_usb_standard_output_capabilities_reg_cstr(char *buff, size_t len, int val)
{
#ifdef SCNPRINTF
	int i = 0;

	i += SCNPRINTF(&buff[i], len - i, " VBUS_SNK_DIS_DET_CAP=%x",
		FIELD2VALUE(MAX77759_USB_STANDARD_OUTPUT_CAPABILITIES_REG_VBUS_SNK_DIS_DET_CAP, val));
	i += SCNPRINTF(&buff[i], len - i, " DBG_ACC_CAP=%x",
		FIELD2VALUE(MAX77759_USB_STANDARD_OUTPUT_CAPABILITIES_REG_DBG_ACC_CAP, val));
	i += SCNPRINTF(&buff[i], len - i, " VBUS_PRESENT_CAP=%x",
		FIELD2VALUE(MAX77759_USB_STANDARD_OUTPUT_CAPABILITIES_REG_VBUS_PRESENT_CAP, val));
	i += SCNPRINTF(&buff[i], len - i, " AUD_ACC_CAP=%x",
		FIELD2VALUE(MAX77759_USB_STANDARD_OUTPUT_CAPABILITIES_REG_AUD_ACC_CAP, val));
	i += SCNPRINTF(&buff[i], len - i, " ACT_CBL_CAP=%x",
		FIELD2VALUE(MAX77759_USB_STANDARD_OUTPUT_CAPABILITIES_REG_ACT_CBL_CAP, val));
	i += SCNPRINTF(&buff[i], len - i, " MUX_CONFG_CAP=%x",
		FIELD2VALUE(MAX77759_USB_STANDARD_OUTPUT_CAPABILITIES_REG_MUX_CONFG_CAP, val));
	i += SCNPRINTF(&buff[i], len - i, " CONN_PRESENT_CAP=%x",
		FIELD2VALUE(MAX77759_USB_STANDARD_OUTPUT_CAPABILITIES_REG_CONN_PRESENT_CAP, val));
	i += SCNPRINTF(&buff[i], len - i, " CONN_ORIENT_CAP=%x",
		FIELD2VALUE(MAX77759_USB_STANDARD_OUTPUT_CAPABILITIES_REG_CONN_ORIENT_CAP, val));
#else
	buff[0] = 0;
#endif
	return buff;
}

/*
 * CONFIG_EXTENDED1_REG,0x2A,0b00000000,0x00
 * RSVD_7_2[5:0],,,,,,RSVD_1
 */
#define MAX77759_USB_CONFIG_EXTENDED1_REG	0x2A
#define MAX77759_USB_CONFIG_EXTENDED1_REG_RSVD_1	(0x1 << 1)
#define MAX77759_USB_CONFIG_EXTENDED1_REG_RSVD_0	(0x1 << 0)

#define MAX77759_USB_CONFIG_EXTENDED1_REG_RSVD_7_2_SHIFT	2
#define MAX77759_USB_CONFIG_EXTENDED1_REG_RSVD_7_2_MASK	(0x3f << 2)
#define MAX77759_USB_CONFIG_EXTENDED1_REG_RSVD_7_2_CLEAR	(~(0x3f << 2))
#define MAX77759_USB_CONFIG_EXTENDED1_REG_RSVD_1_SHIFT	1
#define MAX77759_USB_CONFIG_EXTENDED1_REG_RSVD_1_MASK	(0x1 << 1)
#define MAX77759_USB_CONFIG_EXTENDED1_REG_RSVD_1_CLEAR	(~(0x1 << 1))
#define MAX77759_USB_CONFIG_EXTENDED1_REG_RSVD_0_SHIFT	0
#define MAX77759_USB_CONFIG_EXTENDED1_REG_RSVD_0_MASK	(0x1 << 0)
#define MAX77759_USB_CONFIG_EXTENDED1_REG_RSVD_0_CLEAR	(~(0x1 << 0))

MAX77759_BFF(usb_config_extended1_reg_rsvd_7_2,7,2)
MAX77759_BFF(usb_config_extended1_reg_rsvd_1,1,1)
MAX77759_BFF(usb_config_extended1_reg_rsvd_0,0,0)
static inline const char *
max77759_usb_config_extended1_reg_cstr(char *buff, size_t len, int val)
{
#ifdef SCNPRINTF
	int i = 0;

	i += SCNPRINTF(&buff[i], len - i, " RSVD_7_2=%x",
		FIELD2VALUE(MAX77759_USB_CONFIG_EXTENDED1_REG_RSVD_7_2, val));
	i += SCNPRINTF(&buff[i], len - i, " RSVD_1=%x",
		FIELD2VALUE(MAX77759_USB_CONFIG_EXTENDED1_REG_RSVD_1, val));
	i += SCNPRINTF(&buff[i], len - i, " RSVD_0=%x",
		FIELD2VALUE(MAX77759_USB_CONFIG_EXTENDED1_REG_RSVD_0, val));
#else
	buff[0] = 0;
#endif
	return buff;
}

/*
 * MESSAGE_HEADER_INFO_REG,0x2E,0b00000100,0x04
 * RSVD_7_5[2:0],,,CBL_PLG,DATA_ROLE,USB_PD[1:0],
 */
#define MAX77759_USB_MESSAGE_HEADER_INFO_REG	0x2E
#define MAX77759_USB_MESSAGE_HEADER_INFO_REG_CBL_PLG	(0x1 << 4)
#define MAX77759_USB_MESSAGE_HEADER_INFO_REG_DATA_ROLE	(0x1 << 3)
#define MAX77759_USB_MESSAGE_HEADER_INFO_REG_PWR_ROLE	(0x1 << 0)

#define MAX77759_USB_MESSAGE_HEADER_INFO_REG_RSVD_7_5_SHIFT	5
#define MAX77759_USB_MESSAGE_HEADER_INFO_REG_RSVD_7_5_MASK	(0x7 << 5)
#define MAX77759_USB_MESSAGE_HEADER_INFO_REG_RSVD_7_5_CLEAR	(~(0x7 << 5))
#define MAX77759_USB_MESSAGE_HEADER_INFO_REG_CBL_PLG_SHIFT	4
#define MAX77759_USB_MESSAGE_HEADER_INFO_REG_CBL_PLG_MASK	(0x1 << 4)
#define MAX77759_USB_MESSAGE_HEADER_INFO_REG_CBL_PLG_CLEAR	(~(0x1 << 4))
#define MAX77759_USB_MESSAGE_HEADER_INFO_REG_DATA_ROLE_SHIFT	3
#define MAX77759_USB_MESSAGE_HEADER_INFO_REG_DATA_ROLE_MASK	(0x1 << 3)
#define MAX77759_USB_MESSAGE_HEADER_INFO_REG_DATA_ROLE_CLEAR	(~(0x1 << 3))
#define MAX77759_USB_MESSAGE_HEADER_INFO_REG_USB_PD_SHIFT	1
#define MAX77759_USB_MESSAGE_HEADER_INFO_REG_USB_PD_MASK	(0x3 << 1)
#define MAX77759_USB_MESSAGE_HEADER_INFO_REG_USB_PD_CLEAR	(~(0x3 << 1))
#define MAX77759_USB_MESSAGE_HEADER_INFO_REG_PWR_ROLE_SHIFT	0
#define MAX77759_USB_MESSAGE_HEADER_INFO_REG_PWR_ROLE_MASK	(0x1 << 0)
#define MAX77759_USB_MESSAGE_HEADER_INFO_REG_PWR_ROLE_CLEAR	(~(0x1 << 0))

MAX77759_BFF(usb_message_header_info_reg_rsvd_7_5,7,5)
MAX77759_BFF(usb_message_header_info_reg_cbl_plg,4,4)
MAX77759_BFF(usb_message_header_info_reg_data_role,3,3)
MAX77759_BFF(usb_message_header_info_reg_usb_pd,2,1)
MAX77759_BFF(usb_message_header_info_reg_pwr_role,0,0)
static inline const char *
max77759_usb_message_header_info_reg_cstr(char *buff, size_t len, int val)
{
#ifdef SCNPRINTF
	int i = 0;

	i += SCNPRINTF(&buff[i], len - i, " RSVD_7_5=%x",
		FIELD2VALUE(MAX77759_USB_MESSAGE_HEADER_INFO_REG_RSVD_7_5, val));
	i += SCNPRINTF(&buff[i], len - i, " CBL_PLG=%x",
		FIELD2VALUE(MAX77759_USB_MESSAGE_HEADER_INFO_REG_CBL_PLG, val));
	i += SCNPRINTF(&buff[i], len - i, " DATA_ROLE=%x",
		FIELD2VALUE(MAX77759_USB_MESSAGE_HEADER_INFO_REG_DATA_ROLE, val));
	i += SCNPRINTF(&buff[i], len - i, " USB_PD=%x",
		FIELD2VALUE(MAX77759_USB_MESSAGE_HEADER_INFO_REG_USB_PD, val));
	i += SCNPRINTF(&buff[i], len - i, " PWR_ROLE=%x",
		FIELD2VALUE(MAX77759_USB_MESSAGE_HEADER_INFO_REG_PWR_ROLE, val));
#else
	buff[0] = 0;
#endif
	return buff;
}

/*
 * RECEIVE_DETECT_REG,0x2F,0b00000000,0x00
 * RSVD_7,EN_CBL_RST,EN_HRD_RST,EN_SOP_DBG2,EN_SOP_DBG1,EN_SOP2,EN_SOP1
 */
#define MAX77759_USB_RECEIVE_DETECT_REG	0x2F
#define MAX77759_USB_RECEIVE_DETECT_REG_RSVD_7	(0x1 << 7)
#define MAX77759_USB_RECEIVE_DETECT_REG_EN_CBL_RST	(0x1 << 6)
#define MAX77759_USB_RECEIVE_DETECT_REG_EN_HRD_RST	(0x1 << 5)
#define MAX77759_USB_RECEIVE_DETECT_REG_EN_SOP_DBG2	(0x1 << 4)
#define MAX77759_USB_RECEIVE_DETECT_REG_EN_SOP_DBG1	(0x1 << 3)
#define MAX77759_USB_RECEIVE_DETECT_REG_EN_SOP2	(0x1 << 2)
#define MAX77759_USB_RECEIVE_DETECT_REG_EN_SOP1	(0x1 << 1)
#define MAX77759_USB_RECEIVE_DETECT_REG_EN_SOP	(0x1 << 0)

#define MAX77759_USB_RECEIVE_DETECT_REG_RSVD_7_SHIFT	7
#define MAX77759_USB_RECEIVE_DETECT_REG_RSVD_7_MASK	(0x1 << 7)
#define MAX77759_USB_RECEIVE_DETECT_REG_RSVD_7_CLEAR	(~(0x1 << 7))
#define MAX77759_USB_RECEIVE_DETECT_REG_EN_CBL_RST_SHIFT	6
#define MAX77759_USB_RECEIVE_DETECT_REG_EN_CBL_RST_MASK	(0x1 << 6)
#define MAX77759_USB_RECEIVE_DETECT_REG_EN_CBL_RST_CLEAR	(~(0x1 << 6))
#define MAX77759_USB_RECEIVE_DETECT_REG_EN_HRD_RST_SHIFT	5
#define MAX77759_USB_RECEIVE_DETECT_REG_EN_HRD_RST_MASK	(0x1 << 5)
#define MAX77759_USB_RECEIVE_DETECT_REG_EN_HRD_RST_CLEAR	(~(0x1 << 5))
#define MAX77759_USB_RECEIVE_DETECT_REG_EN_SOP_DBG2_SHIFT	4
#define MAX77759_USB_RECEIVE_DETECT_REG_EN_SOP_DBG2_MASK	(0x1 << 4)
#define MAX77759_USB_RECEIVE_DETECT_REG_EN_SOP_DBG2_CLEAR	(~(0x1 << 4))
#define MAX77759_USB_RECEIVE_DETECT_REG_EN_SOP_DBG1_SHIFT	3
#define MAX77759_USB_RECEIVE_DETECT_REG_EN_SOP_DBG1_MASK	(0x1 << 3)
#define MAX77759_USB_RECEIVE_DETECT_REG_EN_SOP_DBG1_CLEAR	(~(0x1 << 3))
#define MAX77759_USB_RECEIVE_DETECT_REG_EN_SOP2_SHIFT	2
#define MAX77759_USB_RECEIVE_DETECT_REG_EN_SOP2_MASK	(0x1 << 2)
#define MAX77759_USB_RECEIVE_DETECT_REG_EN_SOP2_CLEAR	(~(0x1 << 2))
#define MAX77759_USB_RECEIVE_DETECT_REG_EN_SOP1_SHIFT	1
#define MAX77759_USB_RECEIVE_DETECT_REG_EN_SOP1_MASK	(0x1 << 1)
#define MAX77759_USB_RECEIVE_DETECT_REG_EN_SOP1_CLEAR	(~(0x1 << 1))
#define MAX77759_USB_RECEIVE_DETECT_REG_EN_SOP_SHIFT	0
#define MAX77759_USB_RECEIVE_DETECT_REG_EN_SOP_MASK	(0x1 << 0)
#define MAX77759_USB_RECEIVE_DETECT_REG_EN_SOP_CLEAR	(~(0x1 << 0))

MAX77759_BFF(usb_receive_detect_reg_rsvd_7,7,7)
MAX77759_BFF(usb_receive_detect_reg_en_cbl_rst,6,6)
MAX77759_BFF(usb_receive_detect_reg_en_hrd_rst,5,5)
MAX77759_BFF(usb_receive_detect_reg_en_sop_dbg2,4,4)
MAX77759_BFF(usb_receive_detect_reg_en_sop_dbg1,3,3)
MAX77759_BFF(usb_receive_detect_reg_en_sop2,2,2)
MAX77759_BFF(usb_receive_detect_reg_en_sop1,1,1)
MAX77759_BFF(usb_receive_detect_reg_en_sop,0,0)
static inline const char *
max77759_usb_receive_detect_reg_cstr(char *buff, size_t len, int val)
{
#ifdef SCNPRINTF
	int i = 0;

	i += SCNPRINTF(&buff[i], len - i, " RSVD_7=%x",
		FIELD2VALUE(MAX77759_USB_RECEIVE_DETECT_REG_RSVD_7, val));
	i += SCNPRINTF(&buff[i], len - i, " EN_CBL_RST=%x",
		FIELD2VALUE(MAX77759_USB_RECEIVE_DETECT_REG_EN_CBL_RST, val));
	i += SCNPRINTF(&buff[i], len - i, " EN_HRD_RST=%x",
		FIELD2VALUE(MAX77759_USB_RECEIVE_DETECT_REG_EN_HRD_RST, val));
	i += SCNPRINTF(&buff[i], len - i, " EN_SOP_DBG2=%x",
		FIELD2VALUE(MAX77759_USB_RECEIVE_DETECT_REG_EN_SOP_DBG2, val));
	i += SCNPRINTF(&buff[i], len - i, " EN_SOP_DBG1=%x",
		FIELD2VALUE(MAX77759_USB_RECEIVE_DETECT_REG_EN_SOP_DBG1, val));
	i += SCNPRINTF(&buff[i], len - i, " EN_SOP2=%x",
		FIELD2VALUE(MAX77759_USB_RECEIVE_DETECT_REG_EN_SOP2, val));
	i += SCNPRINTF(&buff[i], len - i, " EN_SOP1=%x",
		FIELD2VALUE(MAX77759_USB_RECEIVE_DETECT_REG_EN_SOP1, val));
	i += SCNPRINTF(&buff[i], len - i, " EN_SOP=%x",
		FIELD2VALUE(MAX77759_USB_RECEIVE_DETECT_REG_EN_SOP, val));
#else
	buff[0] = 0;
#endif
	return buff;
}

/*
 * RECEIVE_BUFFER_REG,0x30,0b00000000,0x00
 * RECEIVE_BUFFER[7:0],,,,,,
 */
#define MAX77759_USB_RECEIVE_BUFFER_REG	0x30

/*
 * TRANSMIT_REG,0x50,0b00000000,0x00
 * RSVD_7_6[1:0],,RETRY_COUNTER[1:0],,RSVD_3,TX_SOP_MESSAGE[2:0],
 */
#define MAX77759_USB_TRANSMIT_REG	0x50
#define MAX77759_USB_TRANSMIT_REG_RSVD_3	(0x1 << 3)

#define MAX77759_USB_TRANSMIT_REG_RSVD_7_6_SHIFT	6
#define MAX77759_USB_TRANSMIT_REG_RSVD_7_6_MASK	(0x3 << 6)
#define MAX77759_USB_TRANSMIT_REG_RSVD_7_6_CLEAR	(~(0x3 << 6))
#define MAX77759_USB_TRANSMIT_REG_RETRY_COUNTER_SHIFT	4
#define MAX77759_USB_TRANSMIT_REG_RETRY_COUNTER_MASK	(0x3 << 4)
#define MAX77759_USB_TRANSMIT_REG_RETRY_COUNTER_CLEAR	(~(0x3 << 4))
#define MAX77759_USB_TRANSMIT_REG_RSVD_3_SHIFT	3
#define MAX77759_USB_TRANSMIT_REG_RSVD_3_MASK	(0x1 << 3)
#define MAX77759_USB_TRANSMIT_REG_RSVD_3_CLEAR	(~(0x1 << 3))
#define MAX77759_USB_TRANSMIT_REG_TX_SOP_MESSAGE_SHIFT	0
#define MAX77759_USB_TRANSMIT_REG_TX_SOP_MESSAGE_MASK	(0x7 << 0)
#define MAX77759_USB_TRANSMIT_REG_TX_SOP_MESSAGE_CLEAR	(~(0x7 << 0))

MAX77759_BFF(usb_transmit_reg_rsvd_7_6,7,6)
MAX77759_BFF(usb_transmit_reg_retry_counter,5,4)
MAX77759_BFF(usb_transmit_reg_rsvd_3,3,3)
MAX77759_BFF(usb_transmit_reg_tx_sop_message,2,0)
static inline const char *
max77759_usb_transmit_reg_cstr(char *buff, size_t len, int val)
{
#ifdef SCNPRINTF
	int i = 0;

	i += SCNPRINTF(&buff[i], len - i, " RSVD_7_6=%x",
		FIELD2VALUE(MAX77759_USB_TRANSMIT_REG_RSVD_7_6, val));
	i += SCNPRINTF(&buff[i], len - i, " RETRY_COUNTER=%x",
		FIELD2VALUE(MAX77759_USB_TRANSMIT_REG_RETRY_COUNTER, val));
	i += SCNPRINTF(&buff[i], len - i, " RSVD_3=%x",
		FIELD2VALUE(MAX77759_USB_TRANSMIT_REG_RSVD_3, val));
	i += SCNPRINTF(&buff[i], len - i, " TX_SOP_MESSAGE=%x",
		FIELD2VALUE(MAX77759_USB_TRANSMIT_REG_TX_SOP_MESSAGE, val));
#else
	buff[0] = 0;
#endif
	return buff;
}

/*
 * TRANSMIT_BUFFER_REG,0x51,0b00000000,0x00
 * TRANSMIT_BUFFER[7:0],,,,,,
 */
#define MAX77759_USB_TRANSMIT_BUFFER_REG	0x51

/*
 * VBUS_VOLTAGE_L,0x70,0b00000000,0x00
 * VBUS_VOLTAGE7_0[7:0],,,,,,
 */
#define MAX77759_USB_VBUS_VOLTAGE_L	0x70

/*
 * VBUS_VOLTAGE_H,0x71,0b00000000,0x00
 * RSVD_7_4[3:0],,,,SCALE_FACTOR[1:0],,VBUS_VOLTAGE9_8[1:0]
 */
#define MAX77759_USB_VBUS_VOLTAGE_H	0x71

#define MAX77759_USB_VBUS_VOLTAGE_H_RSVD_7_4_SHIFT	4
#define MAX77759_USB_VBUS_VOLTAGE_H_RSVD_7_4_MASK	(0xf << 4)
#define MAX77759_USB_VBUS_VOLTAGE_H_RSVD_7_4_CLEAR	(~(0xf << 4))
#define MAX77759_USB_VBUS_VOLTAGE_H_SCALE_FACTOR_SHIFT	2
#define MAX77759_USB_VBUS_VOLTAGE_H_SCALE_FACTOR_MASK	(0x3 << 2)
#define MAX77759_USB_VBUS_VOLTAGE_H_SCALE_FACTOR_CLEAR	(~(0x3 << 2))
#define MAX77759_USB_VBUS_VOLTAGE_H_VBUS_VOLTAGE9_8_SHIFT	0
#define MAX77759_USB_VBUS_VOLTAGE_H_VBUS_VOLTAGE9_8_MASK	(0x3 << 0)
#define MAX77759_USB_VBUS_VOLTAGE_H_VBUS_VOLTAGE9_8_CLEAR	(~(0x3 << 0))

MAX77759_BFF(usb_vbus_voltage_h_rsvd_7_4,7,4)
MAX77759_BFF(usb_vbus_voltage_h_scale_factor,3,2)
MAX77759_BFF(usb_vbus_voltage_h_vbus_voltage9_8,1,0)
static inline const char *
max77759_usb_vbus_voltage_h_cstr(char *buff, size_t len, int val)
{
#ifdef SCNPRINTF
	int i = 0;

	i += SCNPRINTF(&buff[i], len - i, " RSVD_7_4=%x",
		FIELD2VALUE(MAX77759_USB_VBUS_VOLTAGE_H_RSVD_7_4, val));
	i += SCNPRINTF(&buff[i], len - i, " SCALE_FACTOR=%x",
		FIELD2VALUE(MAX77759_USB_VBUS_VOLTAGE_H_SCALE_FACTOR, val));
	i += SCNPRINTF(&buff[i], len - i, " VBUS_VOLTAGE9_8=%x",
		FIELD2VALUE(MAX77759_USB_VBUS_VOLTAGE_H_VBUS_VOLTAGE9_8, val));
#else
	buff[0] = 0;
#endif
	return buff;
}

/*
 * VBUS_SNK_DISC_L,0x72,0b10001100,0x8c
 * VBUS_SNK_DISC7_0[7:0],,,,,,
 */
#define MAX77759_USB_VBUS_SNK_DISC_L	0x72

/*
 * VBUS_SNK_DISC_H,0x73,0b00000000,0x00
 * RSVD_7_2[5:0],,,,,,VBUS_SNK_DISC9_8[1:0]
 */
#define MAX77759_USB_VBUS_SNK_DISC_H	0x73

#define MAX77759_USB_VBUS_SNK_DISC_H_RSVD_7_2_SHIFT	2
#define MAX77759_USB_VBUS_SNK_DISC_H_RSVD_7_2_MASK	(0x3f << 2)
#define MAX77759_USB_VBUS_SNK_DISC_H_RSVD_7_2_CLEAR	(~(0x3f << 2))
#define MAX77759_USB_VBUS_SNK_DISC_H_VBUS_SNK_DISC9_8_SHIFT	0
#define MAX77759_USB_VBUS_SNK_DISC_H_VBUS_SNK_DISC9_8_MASK	(0x3 << 0)
#define MAX77759_USB_VBUS_SNK_DISC_H_VBUS_SNK_DISC9_8_CLEAR	(~(0x3 << 0))

MAX77759_BFF(usb_vbus_snk_disc_h_rsvd_7_2,7,2)
MAX77759_BFF(usb_vbus_snk_disc_h_vbus_snk_disc9_8,1,0)
static inline const char *
max77759_usb_vbus_snk_disc_h_cstr(char *buff, size_t len, int val)
{
#ifdef SCNPRINTF
	int i = 0;

	i += SCNPRINTF(&buff[i], len - i, " RSVD_7_2=%x",
		FIELD2VALUE(MAX77759_USB_VBUS_SNK_DISC_H_RSVD_7_2, val));
	i += SCNPRINTF(&buff[i], len - i, " VBUS_SNK_DISC9_8=%x",
		FIELD2VALUE(MAX77759_USB_VBUS_SNK_DISC_H_VBUS_SNK_DISC9_8, val));
#else
	buff[0] = 0;
#endif
	return buff;
}

/*
 * VBUS_STOP_DISCHARGE_THRESHOLD_L,0x74,0b00100000,0x20
 * VBUS_STOP_DISCH_THRESHOLD7_0[7:0],,,,,,
 */
#define MAX77759_USB_VBUS_STOP_DISCHARGE_THRESHOLD_L	0x74

/*
 * VBUS_STOP_DISCHARGE_THRESHOLD_H,0x75,0b00000000,0x00
 * RSVD_7_2[5:0],,,,,,VBUS_STOP_DISCH_THRESHOLD9_8[1:0]
 */
#define MAX77759_USB_VBUS_STOP_DISCHARGE_THRESHOLD_H	0x75

#define MAX77759_USB_VBUS_STOP_DISCHARGE_THRESHOLD_H_RSVD_7_2_SHIFT	2
#define MAX77759_USB_VBUS_STOP_DISCHARGE_THRESHOLD_H_RSVD_7_2_MASK	(0x3f << 2)
#define MAX77759_USB_VBUS_STOP_DISCHARGE_THRESHOLD_H_RSVD_7_2_CLEAR	(~(0x3f << 2))
#define MAX77759_USB_VBUS_STOP_DISCHARGE_THRESHOLD_H_VBUS_STOP_DISCH_THRESHOLD9_8_SHIFT	0
#define MAX77759_USB_VBUS_STOP_DISCHARGE_THRESHOLD_H_VBUS_STOP_DISCH_THRESHOLD9_8_MASK	(0x3 << 0)
#define MAX77759_USB_VBUS_STOP_DISCHARGE_THRESHOLD_H_VBUS_STOP_DISCH_THRESHOLD9_8_CLEAR	(~(0x3 << 0))

MAX77759_BFF(usb_vbus_stop_discharge_threshold_h_rsvd_7_2,7,2)
MAX77759_BFF(usb_vbus_stop_discharge_threshold_h_vbus_stop_disch_threshold9_8,1,0)
static inline const char *
max77759_usb_vbus_stop_discharge_threshold_h_cstr(char *buff, size_t len, int val)
{
#ifdef SCNPRINTF
	int i = 0;

	i += SCNPRINTF(&buff[i], len - i, " RSVD_7_2=%x",
		FIELD2VALUE(MAX77759_USB_VBUS_STOP_DISCHARGE_THRESHOLD_H_RSVD_7_2, val));
	i += SCNPRINTF(&buff[i], len - i, " VBUS_STOP_DISCH_THRESHOLD9_8=%x",
		FIELD2VALUE(MAX77759_USB_VBUS_STOP_DISCHARGE_THRESHOLD_H_VBUS_STOP_DISCH_THRESHOLD9_8, val));
#else
	buff[0] = 0;
#endif
	return buff;
}

/*
 * VBUS_VOLTAGE_ALARM_HI_CFG_L,0x76,0b00000000,0x00
 * VBUS_ALARM_HI_CFG7_0[7:0],,,,,,
 */
#define MAX77759_USB_VBUS_VOLTAGE_ALARM_HI_CFG_L	0x76

/*
 * VBUS_VOLTAGE_ALARM_HI_CFG_H,0x77,0b00000000,0x00
 * RSVD_7_2[5:0],,,,,,VBUS_ALARM_HI_CFG9_8[1:0]
 */
#define MAX77759_USB_VBUS_VOLTAGE_ALARM_HI_CFG_H	0x77

#define MAX77759_USB_VBUS_VOLTAGE_ALARM_HI_CFG_H_RSVD_7_2_SHIFT	2
#define MAX77759_USB_VBUS_VOLTAGE_ALARM_HI_CFG_H_RSVD_7_2_MASK	(0x3f << 2)
#define MAX77759_USB_VBUS_VOLTAGE_ALARM_HI_CFG_H_RSVD_7_2_CLEAR	(~(0x3f << 2))
#define MAX77759_USB_VBUS_VOLTAGE_ALARM_HI_CFG_H_VBUS_ALARM_HI_CFG9_8_SHIFT	0
#define MAX77759_USB_VBUS_VOLTAGE_ALARM_HI_CFG_H_VBUS_ALARM_HI_CFG9_8_MASK	(0x3 << 0)
#define MAX77759_USB_VBUS_VOLTAGE_ALARM_HI_CFG_H_VBUS_ALARM_HI_CFG9_8_CLEAR	(~(0x3 << 0))

MAX77759_BFF(usb_vbus_voltage_alarm_hi_cfg_h_rsvd_7_2,7,2)
MAX77759_BFF(usb_vbus_voltage_alarm_hi_cfg_h_vbus_alarm_hi_cfg9_8,1,0)
static inline const char *
max77759_usb_vbus_voltage_alarm_hi_cfg_h_cstr(char *buff, size_t len, int val)
{
#ifdef SCNPRINTF
	int i = 0;

	i += SCNPRINTF(&buff[i], len - i, " RSVD_7_2=%x",
		FIELD2VALUE(MAX77759_USB_VBUS_VOLTAGE_ALARM_HI_CFG_H_RSVD_7_2, val));
	i += SCNPRINTF(&buff[i], len - i, " VBUS_ALARM_HI_CFG9_8=%x",
		FIELD2VALUE(MAX77759_USB_VBUS_VOLTAGE_ALARM_HI_CFG_H_VBUS_ALARM_HI_CFG9_8, val));
#else
	buff[0] = 0;
#endif
	return buff;
}

/*
 * VBUS_VOLTAGE_ALARM_LO_CFG_L,0x78,0b00000000,0x00
 * VBUS_ALARM_LO_CFG_7_0[7:0],,,,,,
 */
#define MAX77759_USB_VBUS_VOLTAGE_ALARM_LO_CFG_L	0x78

/*
 * VBUS_VOLTAGE_ALARM_LO_CFG_H,0x79,0b00000000,0x00
 * RSVD_7_2[5:0],,,,,,VBUS_ALARM_LO_CFG9_8[1:0]
 */
#define MAX77759_USB_VBUS_VOLTAGE_ALARM_LO_CFG_H	0x79

#define MAX77759_USB_VBUS_VOLTAGE_ALARM_LO_CFG_H_RSVD_7_2_SHIFT	2
#define MAX77759_USB_VBUS_VOLTAGE_ALARM_LO_CFG_H_RSVD_7_2_MASK	(0x3f << 2)
#define MAX77759_USB_VBUS_VOLTAGE_ALARM_LO_CFG_H_RSVD_7_2_CLEAR	(~(0x3f << 2))
#define MAX77759_USB_VBUS_VOLTAGE_ALARM_LO_CFG_H_VBUS_ALARM_LO_CFG9_8_SHIFT	0
#define MAX77759_USB_VBUS_VOLTAGE_ALARM_LO_CFG_H_VBUS_ALARM_LO_CFG9_8_MASK	(0x3 << 0)
#define MAX77759_USB_VBUS_VOLTAGE_ALARM_LO_CFG_H_VBUS_ALARM_LO_CFG9_8_CLEAR	(~(0x3 << 0))

MAX77759_BFF(usb_vbus_voltage_alarm_lo_cfg_h_rsvd_7_2,7,2)
MAX77759_BFF(usb_vbus_voltage_alarm_lo_cfg_h_vbus_alarm_lo_cfg9_8,1,0)
static inline const char *
max77759_usb_vbus_voltage_alarm_lo_cfg_h_cstr(char *buff, size_t len, int val)
{
#ifdef SCNPRINTF
	int i = 0;

	i += SCNPRINTF(&buff[i], len - i, " RSVD_7_2=%x",
		FIELD2VALUE(MAX77759_USB_VBUS_VOLTAGE_ALARM_LO_CFG_H_RSVD_7_2, val));
	i += SCNPRINTF(&buff[i], len - i, " VBUS_ALARM_LO_CFG9_8=%x",
		FIELD2VALUE(MAX77759_USB_VBUS_VOLTAGE_ALARM_LO_CFG_H_VBUS_ALARM_LO_CFG9_8, val));
#else
	buff[0] = 0;
#endif
	return buff;
}

/*
 * VENDOR_ALERT1,0x80,0b00000000,0x00
 * SPR_7_6[1:0],,dnVdatRefInt,chgTypRunFInt,chgTypRunRInt,prChgTypInt,dcdTmoInt
 */
#define MAX77759_USB_VENDOR_ALERT1	0x80
#define MAX77759_USB_VENDOR_ALERT1_DNVDATREFINT	(0x1 << 5)
#define MAX77759_USB_VENDOR_ALERT1_CHGTYPRUNFINT	(0x1 << 4)
#define MAX77759_USB_VENDOR_ALERT1_CHGTYPRUNRINT	(0x1 << 3)
#define MAX77759_USB_VENDOR_ALERT1_PRCHGTYPINT	(0x1 << 2)
#define MAX77759_USB_VENDOR_ALERT1_DCDTMOINT	(0x1 << 1)
#define MAX77759_USB_VENDOR_ALERT1_CHGTYPINT	(0x1 << 0)

#define MAX77759_USB_VENDOR_ALERT1_SPR_7_6_SHIFT	6
#define MAX77759_USB_VENDOR_ALERT1_SPR_7_6_MASK	(0x3 << 6)
#define MAX77759_USB_VENDOR_ALERT1_SPR_7_6_CLEAR	(~(0x3 << 6))
#define MAX77759_USB_VENDOR_ALERT1_DNVDATREFINT_SHIFT	5
#define MAX77759_USB_VENDOR_ALERT1_DNVDATREFINT_MASK	(0x1 << 5)
#define MAX77759_USB_VENDOR_ALERT1_DNVDATREFINT_CLEAR	(~(0x1 << 5))
#define MAX77759_USB_VENDOR_ALERT1_CHGTYPRUNFINT_SHIFT	4
#define MAX77759_USB_VENDOR_ALERT1_CHGTYPRUNFINT_MASK	(0x1 << 4)
#define MAX77759_USB_VENDOR_ALERT1_CHGTYPRUNFINT_CLEAR	(~(0x1 << 4))
#define MAX77759_USB_VENDOR_ALERT1_CHGTYPRUNRINT_SHIFT	3
#define MAX77759_USB_VENDOR_ALERT1_CHGTYPRUNRINT_MASK	(0x1 << 3)
#define MAX77759_USB_VENDOR_ALERT1_CHGTYPRUNRINT_CLEAR	(~(0x1 << 3))
#define MAX77759_USB_VENDOR_ALERT1_PRCHGTYPINT_SHIFT	2
#define MAX77759_USB_VENDOR_ALERT1_PRCHGTYPINT_MASK	(0x1 << 2)
#define MAX77759_USB_VENDOR_ALERT1_PRCHGTYPINT_CLEAR	(~(0x1 << 2))
#define MAX77759_USB_VENDOR_ALERT1_DCDTMOINT_SHIFT	1
#define MAX77759_USB_VENDOR_ALERT1_DCDTMOINT_MASK	(0x1 << 1)
#define MAX77759_USB_VENDOR_ALERT1_DCDTMOINT_CLEAR	(~(0x1 << 1))
#define MAX77759_USB_VENDOR_ALERT1_CHGTYPINT_SHIFT	0
#define MAX77759_USB_VENDOR_ALERT1_CHGTYPINT_MASK	(0x1 << 0)
#define MAX77759_USB_VENDOR_ALERT1_CHGTYPINT_CLEAR	(~(0x1 << 0))

MAX77759_BFF(usb_vendor_alert1_spr_7_6,7,6)
MAX77759_BFF(usb_vendor_alert1_dnvdatrefint,5,5)
MAX77759_BFF(usb_vendor_alert1_chgtyprunfint,4,4)
MAX77759_BFF(usb_vendor_alert1_chgtyprunrint,3,3)
MAX77759_BFF(usb_vendor_alert1_prchgtypint,2,2)
MAX77759_BFF(usb_vendor_alert1_dcdtmoint,1,1)
MAX77759_BFF(usb_vendor_alert1_chgtypint,0,0)
static inline const char *
max77759_usb_vendor_alert1_cstr(char *buff, size_t len, int val)
{
#ifdef SCNPRINTF
	int i = 0;

	i += SCNPRINTF(&buff[i], len - i, " SPR_7_6=%x",
		FIELD2VALUE(MAX77759_USB_VENDOR_ALERT1_SPR_7_6, val));
	i += SCNPRINTF(&buff[i], len - i, " DNVDATREFINT=%x",
		FIELD2VALUE(MAX77759_USB_VENDOR_ALERT1_DNVDATREFINT, val));
	i += SCNPRINTF(&buff[i], len - i, " CHGTYPRUNFINT=%x",
		FIELD2VALUE(MAX77759_USB_VENDOR_ALERT1_CHGTYPRUNFINT, val));
	i += SCNPRINTF(&buff[i], len - i, " CHGTYPRUNRINT=%x",
		FIELD2VALUE(MAX77759_USB_VENDOR_ALERT1_CHGTYPRUNRINT, val));
	i += SCNPRINTF(&buff[i], len - i, " PRCHGTYPINT=%x",
		FIELD2VALUE(MAX77759_USB_VENDOR_ALERT1_PRCHGTYPINT, val));
	i += SCNPRINTF(&buff[i], len - i, " DCDTMOINT=%x",
		FIELD2VALUE(MAX77759_USB_VENDOR_ALERT1_DCDTMOINT, val));
	i += SCNPRINTF(&buff[i], len - i, " CHGTYPINT=%x",
		FIELD2VALUE(MAX77759_USB_VENDOR_ALERT1_CHGTYPINT, val));
#else
	buff[0] = 0;
#endif
	return buff;
}

/*
 * VENDOR_ALERT2,0x81,0b00000000,0x00
 * SBU_OVPint,USB_OVPint,CC_OVPint,SPR_4_3[1:0],,CCVCNSCInt,FLASH_ADCInt
 */
#define MAX77759_USB_VENDOR_ALERT2	0x81
#define MAX77759_USB_VENDOR_ALERT2_SBU_OVPINT	(0x1 << 7)
#define MAX77759_USB_VENDOR_ALERT2_USB_OVPINT	(0x1 << 6)
#define MAX77759_USB_VENDOR_ALERT2_CC_OVPINT	(0x1 << 5)
#define MAX77759_USB_VENDOR_ALERT2_CCVCNSCINT	(0x1 << 2)
#define MAX77759_USB_VENDOR_ALERT2_FLASH_ADCINT	(0x1 << 1)
#define MAX77759_USB_VENDOR_ALERT2_RX_MSG_DISC	(0x1 << 0)

#define MAX77759_USB_VENDOR_ALERT2_SBU_OVPINT_SHIFT	7
#define MAX77759_USB_VENDOR_ALERT2_SBU_OVPINT_MASK	(0x1 << 7)
#define MAX77759_USB_VENDOR_ALERT2_SBU_OVPINT_CLEAR	(~(0x1 << 7))
#define MAX77759_USB_VENDOR_ALERT2_USB_OVPINT_SHIFT	6
#define MAX77759_USB_VENDOR_ALERT2_USB_OVPINT_MASK	(0x1 << 6)
#define MAX77759_USB_VENDOR_ALERT2_USB_OVPINT_CLEAR	(~(0x1 << 6))
#define MAX77759_USB_VENDOR_ALERT2_CC_OVPINT_SHIFT	5
#define MAX77759_USB_VENDOR_ALERT2_CC_OVPINT_MASK	(0x1 << 5)
#define MAX77759_USB_VENDOR_ALERT2_CC_OVPINT_CLEAR	(~(0x1 << 5))
#define MAX77759_USB_VENDOR_ALERT2_SPR_4_3_SHIFT	3
#define MAX77759_USB_VENDOR_ALERT2_SPR_4_3_MASK	(0x3 << 3)
#define MAX77759_USB_VENDOR_ALERT2_SPR_4_3_CLEAR	(~(0x3 << 3))
#define MAX77759_USB_VENDOR_ALERT2_CCVCNSCINT_SHIFT	2
#define MAX77759_USB_VENDOR_ALERT2_CCVCNSCINT_MASK	(0x1 << 2)
#define MAX77759_USB_VENDOR_ALERT2_CCVCNSCINT_CLEAR	(~(0x1 << 2))
#define MAX77759_USB_VENDOR_ALERT2_FLASH_ADCINT_SHIFT	1
#define MAX77759_USB_VENDOR_ALERT2_FLASH_ADCINT_MASK	(0x1 << 1)
#define MAX77759_USB_VENDOR_ALERT2_FLASH_ADCINT_CLEAR	(~(0x1 << 1))
#define MAX77759_USB_VENDOR_ALERT2_RX_MSG_DISC_SHIFT	0
#define MAX77759_USB_VENDOR_ALERT2_RX_MSG_DISC_MASK	(0x1 << 0)
#define MAX77759_USB_VENDOR_ALERT2_RX_MSG_DISC_CLEAR	(~(0x1 << 0))

MAX77759_BFF(usb_vendor_alert2_sbu_ovpint,7,7)
MAX77759_BFF(usb_vendor_alert2_usb_ovpint,6,6)
MAX77759_BFF(usb_vendor_alert2_cc_ovpint,5,5)
MAX77759_BFF(usb_vendor_alert2_spr_4_3,4,3)
MAX77759_BFF(usb_vendor_alert2_ccvcnscint,2,2)
MAX77759_BFF(usb_vendor_alert2_flash_adcint,1,1)
MAX77759_BFF(usb_vendor_alert2_rx_msg_disc,0,0)
static inline const char *
max77759_usb_vendor_alert2_cstr(char *buff, size_t len, int val)
{
#ifdef SCNPRINTF
	int i = 0;

	i += SCNPRINTF(&buff[i], len - i, " SBU_OVPINT=%x",
		FIELD2VALUE(MAX77759_USB_VENDOR_ALERT2_SBU_OVPINT, val));
	i += SCNPRINTF(&buff[i], len - i, " USB_OVPINT=%x",
		FIELD2VALUE(MAX77759_USB_VENDOR_ALERT2_USB_OVPINT, val));
	i += SCNPRINTF(&buff[i], len - i, " CC_OVPINT=%x",
		FIELD2VALUE(MAX77759_USB_VENDOR_ALERT2_CC_OVPINT, val));
	i += SCNPRINTF(&buff[i], len - i, " SPR_4_3=%x",
		FIELD2VALUE(MAX77759_USB_VENDOR_ALERT2_SPR_4_3, val));
	i += SCNPRINTF(&buff[i], len - i, " CCVCNSCINT=%x",
		FIELD2VALUE(MAX77759_USB_VENDOR_ALERT2_CCVCNSCINT, val));
	i += SCNPRINTF(&buff[i], len - i, " FLASH_ADCINT=%x",
		FIELD2VALUE(MAX77759_USB_VENDOR_ALERT2_FLASH_ADCINT, val));
	i += SCNPRINTF(&buff[i], len - i, " RX_MSG_DISC=%x",
		FIELD2VALUE(MAX77759_USB_VENDOR_ALERT2_RX_MSG_DISC, val));
#else
	buff[0] = 0;
#endif
	return buff;
}

/*
 * VENDOR_ALERT_MASK1,0x82,0b11111111,0xff
 * SPR_7_6[1:0],,MSK_dnVDatRef,MSK_chgTypRunF,MSK_chgTypRunR,MSK_PrchgTyp,MSK_dcdTmo
 */
#define MAX77759_USB_VENDOR_ALERT_MASK1	0x82
#define MAX77759_USB_VENDOR_ALERT_MASK1_MSK_DNVDATREF	(0x1 << 5)
#define MAX77759_USB_VENDOR_ALERT_MASK1_MSK_CHGTYPRUNF	(0x1 << 4)
#define MAX77759_USB_VENDOR_ALERT_MASK1_MSK_CHGTYPRUNR	(0x1 << 3)
#define MAX77759_USB_VENDOR_ALERT_MASK1_MSK_PRCHGTYP	(0x1 << 2)
#define MAX77759_USB_VENDOR_ALERT_MASK1_MSK_DCDTMO	(0x1 << 1)
#define MAX77759_USB_VENDOR_ALERT_MASK1_MSK_CHGTYP	(0x1 << 0)

#define MAX77759_USB_VENDOR_ALERT_MASK1_SPR_7_6_SHIFT	6
#define MAX77759_USB_VENDOR_ALERT_MASK1_SPR_7_6_MASK	(0x3 << 6)
#define MAX77759_USB_VENDOR_ALERT_MASK1_SPR_7_6_CLEAR	(~(0x3 << 6))
#define MAX77759_USB_VENDOR_ALERT_MASK1_MSK_DNVDATREF_SHIFT	5
#define MAX77759_USB_VENDOR_ALERT_MASK1_MSK_DNVDATREF_MASK	(0x1 << 5)
#define MAX77759_USB_VENDOR_ALERT_MASK1_MSK_DNVDATREF_CLEAR	(~(0x1 << 5))
#define MAX77759_USB_VENDOR_ALERT_MASK1_MSK_CHGTYPRUNF_SHIFT	4
#define MAX77759_USB_VENDOR_ALERT_MASK1_MSK_CHGTYPRUNF_MASK	(0x1 << 4)
#define MAX77759_USB_VENDOR_ALERT_MASK1_MSK_CHGTYPRUNF_CLEAR	(~(0x1 << 4))
#define MAX77759_USB_VENDOR_ALERT_MASK1_MSK_CHGTYPRUNR_SHIFT	3
#define MAX77759_USB_VENDOR_ALERT_MASK1_MSK_CHGTYPRUNR_MASK	(0x1 << 3)
#define MAX77759_USB_VENDOR_ALERT_MASK1_MSK_CHGTYPRUNR_CLEAR	(~(0x1 << 3))
#define MAX77759_USB_VENDOR_ALERT_MASK1_MSK_PRCHGTYP_SHIFT	2
#define MAX77759_USB_VENDOR_ALERT_MASK1_MSK_PRCHGTYP_MASK	(0x1 << 2)
#define MAX77759_USB_VENDOR_ALERT_MASK1_MSK_PRCHGTYP_CLEAR	(~(0x1 << 2))
#define MAX77759_USB_VENDOR_ALERT_MASK1_MSK_DCDTMO_SHIFT	1
#define MAX77759_USB_VENDOR_ALERT_MASK1_MSK_DCDTMO_MASK	(0x1 << 1)
#define MAX77759_USB_VENDOR_ALERT_MASK1_MSK_DCDTMO_CLEAR	(~(0x1 << 1))
#define MAX77759_USB_VENDOR_ALERT_MASK1_MSK_CHGTYP_SHIFT	0
#define MAX77759_USB_VENDOR_ALERT_MASK1_MSK_CHGTYP_MASK	(0x1 << 0)
#define MAX77759_USB_VENDOR_ALERT_MASK1_MSK_CHGTYP_CLEAR	(~(0x1 << 0))

MAX77759_BFF(usb_vendor_alert_mask1_spr_7_6,7,6)
MAX77759_BFF(usb_vendor_alert_mask1_msk_dnvdatref,5,5)
MAX77759_BFF(usb_vendor_alert_mask1_msk_chgtyprunf,4,4)
MAX77759_BFF(usb_vendor_alert_mask1_msk_chgtyprunr,3,3)
MAX77759_BFF(usb_vendor_alert_mask1_msk_prchgtyp,2,2)
MAX77759_BFF(usb_vendor_alert_mask1_msk_dcdtmo,1,1)
MAX77759_BFF(usb_vendor_alert_mask1_msk_chgtyp,0,0)
static inline const char *
max77759_usb_vendor_alert_mask1_cstr(char *buff, size_t len, int val)
{
#ifdef SCNPRINTF
	int i = 0;

	i += SCNPRINTF(&buff[i], len - i, " SPR_7_6=%x",
		FIELD2VALUE(MAX77759_USB_VENDOR_ALERT_MASK1_SPR_7_6, val));
	i += SCNPRINTF(&buff[i], len - i, " MSK_DNVDATREF=%x",
		FIELD2VALUE(MAX77759_USB_VENDOR_ALERT_MASK1_MSK_DNVDATREF, val));
	i += SCNPRINTF(&buff[i], len - i, " MSK_CHGTYPRUNF=%x",
		FIELD2VALUE(MAX77759_USB_VENDOR_ALERT_MASK1_MSK_CHGTYPRUNF, val));
	i += SCNPRINTF(&buff[i], len - i, " MSK_CHGTYPRUNR=%x",
		FIELD2VALUE(MAX77759_USB_VENDOR_ALERT_MASK1_MSK_CHGTYPRUNR, val));
	i += SCNPRINTF(&buff[i], len - i, " MSK_PRCHGTYP=%x",
		FIELD2VALUE(MAX77759_USB_VENDOR_ALERT_MASK1_MSK_PRCHGTYP, val));
	i += SCNPRINTF(&buff[i], len - i, " MSK_DCDTMO=%x",
		FIELD2VALUE(MAX77759_USB_VENDOR_ALERT_MASK1_MSK_DCDTMO, val));
	i += SCNPRINTF(&buff[i], len - i, " MSK_CHGTYP=%x",
		FIELD2VALUE(MAX77759_USB_VENDOR_ALERT_MASK1_MSK_CHGTYP, val));
#else
	buff[0] = 0;
#endif
	return buff;
}

/*
 * VENDOR_ALERT_MASK2,0x83,0b11111111,0xff
 * MSK_SBU_OVP,MSK_USB_OVP,MSK_CC_OVP,SPR_4_3[1:0],,MSK_CCVCNSCInt,MSK_FLASH_ADCInt
 */
#define MAX77759_USB_VENDOR_ALERT_MASK2	0x83
#define MAX77759_USB_VENDOR_ALERT_MASK2_MSK_SBU_OVP	(0x1 << 7)
#define MAX77759_USB_VENDOR_ALERT_MASK2_MSK_USB_OVP	(0x1 << 6)
#define MAX77759_USB_VENDOR_ALERT_MASK2_MSK_CC_OVP	(0x1 << 5)
#define MAX77759_USB_VENDOR_ALERT_MASK2_MSK_CCVCNSCINT	(0x1 << 2)
#define MAX77759_USB_VENDOR_ALERT_MASK2_MSK_FLASH_ADCINT	(0x1 << 1)
#define MAX77759_USB_VENDOR_ALERT_MASK2_MSK_RX_MSG_DISC	(0x1 << 0)

#define MAX77759_USB_VENDOR_ALERT_MASK2_MSK_SBU_OVP_SHIFT	7
#define MAX77759_USB_VENDOR_ALERT_MASK2_MSK_SBU_OVP_MASK	(0x1 << 7)
#define MAX77759_USB_VENDOR_ALERT_MASK2_MSK_SBU_OVP_CLEAR	(~(0x1 << 7))
#define MAX77759_USB_VENDOR_ALERT_MASK2_MSK_USB_OVP_SHIFT	6
#define MAX77759_USB_VENDOR_ALERT_MASK2_MSK_USB_OVP_MASK	(0x1 << 6)
#define MAX77759_USB_VENDOR_ALERT_MASK2_MSK_USB_OVP_CLEAR	(~(0x1 << 6))
#define MAX77759_USB_VENDOR_ALERT_MASK2_MSK_CC_OVP_SHIFT	5
#define MAX77759_USB_VENDOR_ALERT_MASK2_MSK_CC_OVP_MASK	(0x1 << 5)
#define MAX77759_USB_VENDOR_ALERT_MASK2_MSK_CC_OVP_CLEAR	(~(0x1 << 5))
#define MAX77759_USB_VENDOR_ALERT_MASK2_SPR_4_3_SHIFT	3
#define MAX77759_USB_VENDOR_ALERT_MASK2_SPR_4_3_MASK	(0x3 << 3)
#define MAX77759_USB_VENDOR_ALERT_MASK2_SPR_4_3_CLEAR	(~(0x3 << 3))
#define MAX77759_USB_VENDOR_ALERT_MASK2_MSK_CCVCNSCINT_SHIFT	2
#define MAX77759_USB_VENDOR_ALERT_MASK2_MSK_CCVCNSCINT_MASK	(0x1 << 2)
#define MAX77759_USB_VENDOR_ALERT_MASK2_MSK_CCVCNSCINT_CLEAR	(~(0x1 << 2))
#define MAX77759_USB_VENDOR_ALERT_MASK2_MSK_FLASH_ADCINT_SHIFT	1
#define MAX77759_USB_VENDOR_ALERT_MASK2_MSK_FLASH_ADCINT_MASK	(0x1 << 1)
#define MAX77759_USB_VENDOR_ALERT_MASK2_MSK_FLASH_ADCINT_CLEAR	(~(0x1 << 1))
#define MAX77759_USB_VENDOR_ALERT_MASK2_MSK_RX_MSG_DISC_SHIFT	0
#define MAX77759_USB_VENDOR_ALERT_MASK2_MSK_RX_MSG_DISC_MASK	(0x1 << 0)
#define MAX77759_USB_VENDOR_ALERT_MASK2_MSK_RX_MSG_DISC_CLEAR	(~(0x1 << 0))

MAX77759_BFF(usb_vendor_alert_mask2_msk_sbu_ovp,7,7)
MAX77759_BFF(usb_vendor_alert_mask2_msk_usb_ovp,6,6)
MAX77759_BFF(usb_vendor_alert_mask2_msk_cc_ovp,5,5)
MAX77759_BFF(usb_vendor_alert_mask2_spr_4_3,4,3)
MAX77759_BFF(usb_vendor_alert_mask2_msk_ccvcnscint,2,2)
MAX77759_BFF(usb_vendor_alert_mask2_msk_flash_adcint,1,1)
MAX77759_BFF(usb_vendor_alert_mask2_msk_rx_msg_disc,0,0)
static inline const char *
max77759_usb_vendor_alert_mask2_cstr(char *buff, size_t len, int val)
{
#ifdef SCNPRINTF
	int i = 0;

	i += SCNPRINTF(&buff[i], len - i, " MSK_SBU_OVP=%x",
		FIELD2VALUE(MAX77759_USB_VENDOR_ALERT_MASK2_MSK_SBU_OVP, val));
	i += SCNPRINTF(&buff[i], len - i, " MSK_USB_OVP=%x",
		FIELD2VALUE(MAX77759_USB_VENDOR_ALERT_MASK2_MSK_USB_OVP, val));
	i += SCNPRINTF(&buff[i], len - i, " MSK_CC_OVP=%x",
		FIELD2VALUE(MAX77759_USB_VENDOR_ALERT_MASK2_MSK_CC_OVP, val));
	i += SCNPRINTF(&buff[i], len - i, " SPR_4_3=%x",
		FIELD2VALUE(MAX77759_USB_VENDOR_ALERT_MASK2_SPR_4_3, val));
	i += SCNPRINTF(&buff[i], len - i, " MSK_CCVCNSCINT=%x",
		FIELD2VALUE(MAX77759_USB_VENDOR_ALERT_MASK2_MSK_CCVCNSCINT, val));
	i += SCNPRINTF(&buff[i], len - i, " MSK_FLASH_ADCINT=%x",
		FIELD2VALUE(MAX77759_USB_VENDOR_ALERT_MASK2_MSK_FLASH_ADCINT, val));
	i += SCNPRINTF(&buff[i], len - i, " MSK_RX_MSG_DISC=%x",
		FIELD2VALUE(MAX77759_USB_VENDOR_ALERT_MASK2_MSK_RX_MSG_DISC, val));
#else
	buff[0] = 0;
#endif
	return buff;
}

/*
 * VENDOR_CC_STATUS1,0x84,0b00000000,0x00
 * SBU2_OVP,SBU1_OVP,USBDP_OVP,USBDN_OVP,CC2_OVP,CC1_OVP,SPR_1_0[1:0]
 */
#define MAX77759_USB_VENDOR_CC_STATUS1	0x84
#define MAX77759_USB_VENDOR_CC_STATUS1_SBU2_OVP	(0x1 << 7)
#define MAX77759_USB_VENDOR_CC_STATUS1_SBU1_OVP	(0x1 << 6)
#define MAX77759_USB_VENDOR_CC_STATUS1_USBDP_OVP	(0x1 << 5)
#define MAX77759_USB_VENDOR_CC_STATUS1_USBDN_OVP	(0x1 << 4)
#define MAX77759_USB_VENDOR_CC_STATUS1_CC2_OVP	(0x1 << 3)
#define MAX77759_USB_VENDOR_CC_STATUS1_CC1_OVP	(0x1 << 2)

#define MAX77759_USB_VENDOR_CC_STATUS1_SBU2_OVP_SHIFT	7
#define MAX77759_USB_VENDOR_CC_STATUS1_SBU2_OVP_MASK	(0x1 << 7)
#define MAX77759_USB_VENDOR_CC_STATUS1_SBU2_OVP_CLEAR	(~(0x1 << 7))
#define MAX77759_USB_VENDOR_CC_STATUS1_SBU1_OVP_SHIFT	6
#define MAX77759_USB_VENDOR_CC_STATUS1_SBU1_OVP_MASK	(0x1 << 6)
#define MAX77759_USB_VENDOR_CC_STATUS1_SBU1_OVP_CLEAR	(~(0x1 << 6))
#define MAX77759_USB_VENDOR_CC_STATUS1_USBDP_OVP_SHIFT	5
#define MAX77759_USB_VENDOR_CC_STATUS1_USBDP_OVP_MASK	(0x1 << 5)
#define MAX77759_USB_VENDOR_CC_STATUS1_USBDP_OVP_CLEAR	(~(0x1 << 5))
#define MAX77759_USB_VENDOR_CC_STATUS1_USBDN_OVP_SHIFT	4
#define MAX77759_USB_VENDOR_CC_STATUS1_USBDN_OVP_MASK	(0x1 << 4)
#define MAX77759_USB_VENDOR_CC_STATUS1_USBDN_OVP_CLEAR	(~(0x1 << 4))
#define MAX77759_USB_VENDOR_CC_STATUS1_CC2_OVP_SHIFT	3
#define MAX77759_USB_VENDOR_CC_STATUS1_CC2_OVP_MASK	(0x1 << 3)
#define MAX77759_USB_VENDOR_CC_STATUS1_CC2_OVP_CLEAR	(~(0x1 << 3))
#define MAX77759_USB_VENDOR_CC_STATUS1_CC1_OVP_SHIFT	2
#define MAX77759_USB_VENDOR_CC_STATUS1_CC1_OVP_MASK	(0x1 << 2)
#define MAX77759_USB_VENDOR_CC_STATUS1_CC1_OVP_CLEAR	(~(0x1 << 2))
#define MAX77759_USB_VENDOR_CC_STATUS1_SPR_1_0_SHIFT	0
#define MAX77759_USB_VENDOR_CC_STATUS1_SPR_1_0_MASK	(0x3 << 0)
#define MAX77759_USB_VENDOR_CC_STATUS1_SPR_1_0_CLEAR	(~(0x3 << 0))

MAX77759_BFF(usb_vendor_cc_status1_sbu2_ovp,7,7)
MAX77759_BFF(usb_vendor_cc_status1_sbu1_ovp,6,6)
MAX77759_BFF(usb_vendor_cc_status1_usbdp_ovp,5,5)
MAX77759_BFF(usb_vendor_cc_status1_usbdn_ovp,4,4)
MAX77759_BFF(usb_vendor_cc_status1_cc2_ovp,3,3)
MAX77759_BFF(usb_vendor_cc_status1_cc1_ovp,2,2)
MAX77759_BFF(usb_vendor_cc_status1_spr_1_0,1,0)
static inline const char *
max77759_usb_vendor_cc_status1_cstr(char *buff, size_t len, int val)
{
#ifdef SCNPRINTF
	int i = 0;

	i += SCNPRINTF(&buff[i], len - i, " SBU2_OVP=%x",
		FIELD2VALUE(MAX77759_USB_VENDOR_CC_STATUS1_SBU2_OVP, val));
	i += SCNPRINTF(&buff[i], len - i, " SBU1_OVP=%x",
		FIELD2VALUE(MAX77759_USB_VENDOR_CC_STATUS1_SBU1_OVP, val));
	i += SCNPRINTF(&buff[i], len - i, " USBDP_OVP=%x",
		FIELD2VALUE(MAX77759_USB_VENDOR_CC_STATUS1_USBDP_OVP, val));
	i += SCNPRINTF(&buff[i], len - i, " USBDN_OVP=%x",
		FIELD2VALUE(MAX77759_USB_VENDOR_CC_STATUS1_USBDN_OVP, val));
	i += SCNPRINTF(&buff[i], len - i, " CC2_OVP=%x",
		FIELD2VALUE(MAX77759_USB_VENDOR_CC_STATUS1_CC2_OVP, val));
	i += SCNPRINTF(&buff[i], len - i, " CC1_OVP=%x",
		FIELD2VALUE(MAX77759_USB_VENDOR_CC_STATUS1_CC1_OVP, val));
	i += SCNPRINTF(&buff[i], len - i, " SPR_1_0=%x",
		FIELD2VALUE(MAX77759_USB_VENDOR_CC_STATUS1_SPR_1_0, val));
#else
	buff[0] = 0;
#endif
	return buff;
}

/*
 * VENDOR_CC_STATUS2,0x85,0b00000000,0x00
 * CC2_VDFP_OPEN,CC2_VUFP_RD1P5,CC2_VUFP_RD0P5,CC2_VRA_RD0P5,CC1_VDFP_OPEN,CC1_VUFP_RD1P5,CC1_VUFP_RD0P5
 */
#define MAX77759_USB_VENDOR_CC_STATUS2	0x85
#define MAX77759_USB_VENDOR_CC_STATUS2_CC2_VDFP_OPEN	(0x1 << 7)
#define MAX77759_USB_VENDOR_CC_STATUS2_CC2_VUFP_RD1P5	(0x1 << 6)
#define MAX77759_USB_VENDOR_CC_STATUS2_CC2_VUFP_RD0P5	(0x1 << 5)
#define MAX77759_USB_VENDOR_CC_STATUS2_CC2_VRA_RD0P5	(0x1 << 4)
#define MAX77759_USB_VENDOR_CC_STATUS2_CC1_VDFP_OPEN	(0x1 << 3)
#define MAX77759_USB_VENDOR_CC_STATUS2_CC1_VUFP_RD1P5	(0x1 << 2)
#define MAX77759_USB_VENDOR_CC_STATUS2_CC1_VUFP_RD0P5	(0x1 << 1)
#define MAX77759_USB_VENDOR_CC_STATUS2_CC1_VRA_RD0P5	(0x1 << 0)

#define MAX77759_USB_VENDOR_CC_STATUS2_CC2_VDFP_OPEN_SHIFT	7
#define MAX77759_USB_VENDOR_CC_STATUS2_CC2_VDFP_OPEN_MASK	(0x1 << 7)
#define MAX77759_USB_VENDOR_CC_STATUS2_CC2_VDFP_OPEN_CLEAR	(~(0x1 << 7))
#define MAX77759_USB_VENDOR_CC_STATUS2_CC2_VUFP_RD1P5_SHIFT	6
#define MAX77759_USB_VENDOR_CC_STATUS2_CC2_VUFP_RD1P5_MASK	(0x1 << 6)
#define MAX77759_USB_VENDOR_CC_STATUS2_CC2_VUFP_RD1P5_CLEAR	(~(0x1 << 6))
#define MAX77759_USB_VENDOR_CC_STATUS2_CC2_VUFP_RD0P5_SHIFT	5
#define MAX77759_USB_VENDOR_CC_STATUS2_CC2_VUFP_RD0P5_MASK	(0x1 << 5)
#define MAX77759_USB_VENDOR_CC_STATUS2_CC2_VUFP_RD0P5_CLEAR	(~(0x1 << 5))
#define MAX77759_USB_VENDOR_CC_STATUS2_CC2_VRA_RD0P5_SHIFT	4
#define MAX77759_USB_VENDOR_CC_STATUS2_CC2_VRA_RD0P5_MASK	(0x1 << 4)
#define MAX77759_USB_VENDOR_CC_STATUS2_CC2_VRA_RD0P5_CLEAR	(~(0x1 << 4))
#define MAX77759_USB_VENDOR_CC_STATUS2_CC1_VDFP_OPEN_SHIFT	3
#define MAX77759_USB_VENDOR_CC_STATUS2_CC1_VDFP_OPEN_MASK	(0x1 << 3)
#define MAX77759_USB_VENDOR_CC_STATUS2_CC1_VDFP_OPEN_CLEAR	(~(0x1 << 3))
#define MAX77759_USB_VENDOR_CC_STATUS2_CC1_VUFP_RD1P5_SHIFT	2
#define MAX77759_USB_VENDOR_CC_STATUS2_CC1_VUFP_RD1P5_MASK	(0x1 << 2)
#define MAX77759_USB_VENDOR_CC_STATUS2_CC1_VUFP_RD1P5_CLEAR	(~(0x1 << 2))
#define MAX77759_USB_VENDOR_CC_STATUS2_CC1_VUFP_RD0P5_SHIFT	1
#define MAX77759_USB_VENDOR_CC_STATUS2_CC1_VUFP_RD0P5_MASK	(0x1 << 1)
#define MAX77759_USB_VENDOR_CC_STATUS2_CC1_VUFP_RD0P5_CLEAR	(~(0x1 << 1))
#define MAX77759_USB_VENDOR_CC_STATUS2_CC1_VRA_RD0P5_SHIFT	0
#define MAX77759_USB_VENDOR_CC_STATUS2_CC1_VRA_RD0P5_MASK	(0x1 << 0)
#define MAX77759_USB_VENDOR_CC_STATUS2_CC1_VRA_RD0P5_CLEAR	(~(0x1 << 0))

MAX77759_BFF(usb_vendor_cc_status2_cc2_vdfp_open,7,7)
MAX77759_BFF(usb_vendor_cc_status2_cc2_vufp_rd1p5,6,6)
MAX77759_BFF(usb_vendor_cc_status2_cc2_vufp_rd0p5,5,5)
MAX77759_BFF(usb_vendor_cc_status2_cc2_vra_rd0p5,4,4)
MAX77759_BFF(usb_vendor_cc_status2_cc1_vdfp_open,3,3)
MAX77759_BFF(usb_vendor_cc_status2_cc1_vufp_rd1p5,2,2)
MAX77759_BFF(usb_vendor_cc_status2_cc1_vufp_rd0p5,1,1)
MAX77759_BFF(usb_vendor_cc_status2_cc1_vra_rd0p5,0,0)
static inline const char *
max77759_usb_vendor_cc_status2_cstr(char *buff, size_t len, int val)
{
#ifdef SCNPRINTF
	int i = 0;

	i += SCNPRINTF(&buff[i], len - i, " CC2_VDFP_OPEN=%x",
		FIELD2VALUE(MAX77759_USB_VENDOR_CC_STATUS2_CC2_VDFP_OPEN, val));
	i += SCNPRINTF(&buff[i], len - i, " CC2_VUFP_RD1P5=%x",
		FIELD2VALUE(MAX77759_USB_VENDOR_CC_STATUS2_CC2_VUFP_RD1P5, val));
	i += SCNPRINTF(&buff[i], len - i, " CC2_VUFP_RD0P5=%x",
		FIELD2VALUE(MAX77759_USB_VENDOR_CC_STATUS2_CC2_VUFP_RD0P5, val));
	i += SCNPRINTF(&buff[i], len - i, " CC2_VRA_RD0P5=%x",
		FIELD2VALUE(MAX77759_USB_VENDOR_CC_STATUS2_CC2_VRA_RD0P5, val));
	i += SCNPRINTF(&buff[i], len - i, " CC1_VDFP_OPEN=%x",
		FIELD2VALUE(MAX77759_USB_VENDOR_CC_STATUS2_CC1_VDFP_OPEN, val));
	i += SCNPRINTF(&buff[i], len - i, " CC1_VUFP_RD1P5=%x",
		FIELD2VALUE(MAX77759_USB_VENDOR_CC_STATUS2_CC1_VUFP_RD1P5, val));
	i += SCNPRINTF(&buff[i], len - i, " CC1_VUFP_RD0P5=%x",
		FIELD2VALUE(MAX77759_USB_VENDOR_CC_STATUS2_CC1_VUFP_RD0P5, val));
	i += SCNPRINTF(&buff[i], len - i, " CC1_VRA_RD0P5=%x",
		FIELD2VALUE(MAX77759_USB_VENDOR_CC_STATUS2_CC1_VRA_RD0P5, val));
#else
	buff[0] = 0;
#endif
	return buff;
}

/*
 * VENDOR_CC_STATUS3,0x86,0b00000000,0x00
 * ccVcnSc,ccVcnOCP,SPR_5_1[4:0],,,,
 */
#define MAX77759_USB_VENDOR_CC_STATUS3	0x86
#define MAX77759_USB_VENDOR_CC_STATUS3_CCVCNSC	(0x1 << 7)
#define MAX77759_USB_VENDOR_CC_STATUS3_CCVCNOCP	(0x1 << 6)
#define MAX77759_USB_VENDOR_CC_STATUS3_CCVCNSTAT	(0x1 << 0)

#define MAX77759_USB_VENDOR_CC_STATUS3_CCVCNSC_SHIFT	7
#define MAX77759_USB_VENDOR_CC_STATUS3_CCVCNSC_MASK	(0x1 << 7)
#define MAX77759_USB_VENDOR_CC_STATUS3_CCVCNSC_CLEAR	(~(0x1 << 7))
#define MAX77759_USB_VENDOR_CC_STATUS3_CCVCNOCP_SHIFT	6
#define MAX77759_USB_VENDOR_CC_STATUS3_CCVCNOCP_MASK	(0x1 << 6)
#define MAX77759_USB_VENDOR_CC_STATUS3_CCVCNOCP_CLEAR	(~(0x1 << 6))
#define MAX77759_USB_VENDOR_CC_STATUS3_SPR_5_1_SHIFT	1
#define MAX77759_USB_VENDOR_CC_STATUS3_SPR_5_1_MASK	(0x1f << 1)
#define MAX77759_USB_VENDOR_CC_STATUS3_SPR_5_1_CLEAR	(~(0x1f << 1))
#define MAX77759_USB_VENDOR_CC_STATUS3_CCVCNSTAT_SHIFT	0
#define MAX77759_USB_VENDOR_CC_STATUS3_CCVCNSTAT_MASK	(0x1 << 0)
#define MAX77759_USB_VENDOR_CC_STATUS3_CCVCNSTAT_CLEAR	(~(0x1 << 0))

MAX77759_BFF(usb_vendor_cc_status3_ccvcnsc,7,7)
MAX77759_BFF(usb_vendor_cc_status3_ccvcnocp,6,6)
MAX77759_BFF(usb_vendor_cc_status3_spr_5_1,5,1)
MAX77759_BFF(usb_vendor_cc_status3_ccvcnstat,0,0)
static inline const char *
max77759_usb_vendor_cc_status3_cstr(char *buff, size_t len, int val)
{
#ifdef SCNPRINTF
	int i = 0;

	i += SCNPRINTF(&buff[i], len - i, " CCVCNSC=%x",
		FIELD2VALUE(MAX77759_USB_VENDOR_CC_STATUS3_CCVCNSC, val));
	i += SCNPRINTF(&buff[i], len - i, " CCVCNOCP=%x",
		FIELD2VALUE(MAX77759_USB_VENDOR_CC_STATUS3_CCVCNOCP, val));
	i += SCNPRINTF(&buff[i], len - i, " SPR_5_1=%x",
		FIELD2VALUE(MAX77759_USB_VENDOR_CC_STATUS3_SPR_5_1, val));
	i += SCNPRINTF(&buff[i], len - i, " CCVCNSTAT=%x",
		FIELD2VALUE(MAX77759_USB_VENDOR_CC_STATUS3_CCVCNSTAT, val));
#else
	buff[0] = 0;
#endif
	return buff;
}

/*
 * VENDOR_BC_STATUS1,0x87,0b00000000,0x00
 * SPR_7,ChgTypRun,PrChgTyp[2:0],,,DCDTmo,ChgTyp[1:0]
 */
#define MAX77759_USB_VENDOR_BC_STATUS1	0x87
#define MAX77759_USB_VENDOR_BC_STATUS1_SPR_7	(0x1 << 7)
#define MAX77759_USB_VENDOR_BC_STATUS1_CHGTYPRUN	(0x1 << 6)
#define MAX77759_USB_VENDOR_BC_STATUS1_DCDTMO	(0x1 << 2)

#define MAX77759_USB_VENDOR_BC_STATUS1_SPR_7_SHIFT	7
#define MAX77759_USB_VENDOR_BC_STATUS1_SPR_7_MASK	(0x1 << 7)
#define MAX77759_USB_VENDOR_BC_STATUS1_SPR_7_CLEAR	(~(0x1 << 7))
#define MAX77759_USB_VENDOR_BC_STATUS1_CHGTYPRUN_SHIFT	6
#define MAX77759_USB_VENDOR_BC_STATUS1_CHGTYPRUN_MASK	(0x1 << 6)
#define MAX77759_USB_VENDOR_BC_STATUS1_CHGTYPRUN_CLEAR	(~(0x1 << 6))
#define MAX77759_USB_VENDOR_BC_STATUS1_PRCHGTYP_SHIFT	3
#define MAX77759_USB_VENDOR_BC_STATUS1_PRCHGTYP_MASK	(0x7 << 3)
#define MAX77759_USB_VENDOR_BC_STATUS1_PRCHGTYP_CLEAR	(~(0x7 << 3))
#define MAX77759_USB_VENDOR_BC_STATUS1_DCDTMO_SHIFT	2
#define MAX77759_USB_VENDOR_BC_STATUS1_DCDTMO_MASK	(0x1 << 2)
#define MAX77759_USB_VENDOR_BC_STATUS1_DCDTMO_CLEAR	(~(0x1 << 2))
#define MAX77759_USB_VENDOR_BC_STATUS1_CHGTYP_SHIFT	0
#define MAX77759_USB_VENDOR_BC_STATUS1_CHGTYP_MASK	(0x3 << 0)
#define MAX77759_USB_VENDOR_BC_STATUS1_CHGTYP_CLEAR	(~(0x3 << 0))

MAX77759_BFF(usb_vendor_bc_status1_spr_7,7,7)
MAX77759_BFF(usb_vendor_bc_status1_chgtyprun,6,6)
MAX77759_BFF(usb_vendor_bc_status1_prchgtyp,5,3)
MAX77759_BFF(usb_vendor_bc_status1_dcdtmo,2,2)
MAX77759_BFF(usb_vendor_bc_status1_chgtyp,1,0)
static inline const char *
max77759_usb_vendor_bc_status1_cstr(char *buff, size_t len, int val)
{
#ifdef SCNPRINTF
	int i = 0;

	i += SCNPRINTF(&buff[i], len - i, " SPR_7=%x",
		FIELD2VALUE(MAX77759_USB_VENDOR_BC_STATUS1_SPR_7, val));
	i += SCNPRINTF(&buff[i], len - i, " CHGTYPRUN=%x",
		FIELD2VALUE(MAX77759_USB_VENDOR_BC_STATUS1_CHGTYPRUN, val));
	i += SCNPRINTF(&buff[i], len - i, " PRCHGTYP=%x",
		FIELD2VALUE(MAX77759_USB_VENDOR_BC_STATUS1_PRCHGTYP, val));
	i += SCNPRINTF(&buff[i], len - i, " DCDTMO=%x",
		FIELD2VALUE(MAX77759_USB_VENDOR_BC_STATUS1_DCDTMO, val));
	i += SCNPRINTF(&buff[i], len - i, " CHGTYP=%x",
		FIELD2VALUE(MAX77759_USB_VENDOR_BC_STATUS1_CHGTYP, val));
#else
	buff[0] = 0;
#endif
	return buff;
}

/*
 * VENDOR_BC_STATUS2,0x88,0b00000000,0x00
 * dnDebOk,SPR_6,dnVlgc,dnVdatRef,dpDebOk,SPR_2,dpVlgc
 */
#define MAX77759_USB_VENDOR_BC_STATUS2	0x88
#define MAX77759_USB_VENDOR_BC_STATUS2_DNDEBOK	(0x1 << 7)
#define MAX77759_USB_VENDOR_BC_STATUS2_SPR_6	(0x1 << 6)
#define MAX77759_USB_VENDOR_BC_STATUS2_DNVLGC	(0x1 << 5)
#define MAX77759_USB_VENDOR_BC_STATUS2_DNVDATREF	(0x1 << 4)
#define MAX77759_USB_VENDOR_BC_STATUS2_DPDEBOK	(0x1 << 3)
#define MAX77759_USB_VENDOR_BC_STATUS2_SPR_2	(0x1 << 2)
#define MAX77759_USB_VENDOR_BC_STATUS2_DPVLGC	(0x1 << 1)
#define MAX77759_USB_VENDOR_BC_STATUS2_DPVDATREF	(0x1 << 0)

#define MAX77759_USB_VENDOR_BC_STATUS2_DNDEBOK_SHIFT	7
#define MAX77759_USB_VENDOR_BC_STATUS2_DNDEBOK_MASK	(0x1 << 7)
#define MAX77759_USB_VENDOR_BC_STATUS2_DNDEBOK_CLEAR	(~(0x1 << 7))
#define MAX77759_USB_VENDOR_BC_STATUS2_SPR_6_SHIFT	6
#define MAX77759_USB_VENDOR_BC_STATUS2_SPR_6_MASK	(0x1 << 6)
#define MAX77759_USB_VENDOR_BC_STATUS2_SPR_6_CLEAR	(~(0x1 << 6))
#define MAX77759_USB_VENDOR_BC_STATUS2_DNVLGC_SHIFT	5
#define MAX77759_USB_VENDOR_BC_STATUS2_DNVLGC_MASK	(0x1 << 5)
#define MAX77759_USB_VENDOR_BC_STATUS2_DNVLGC_CLEAR	(~(0x1 << 5))
#define MAX77759_USB_VENDOR_BC_STATUS2_DNVDATREF_SHIFT	4
#define MAX77759_USB_VENDOR_BC_STATUS2_DNVDATREF_MASK	(0x1 << 4)
#define MAX77759_USB_VENDOR_BC_STATUS2_DNVDATREF_CLEAR	(~(0x1 << 4))
#define MAX77759_USB_VENDOR_BC_STATUS2_DPDEBOK_SHIFT	3
#define MAX77759_USB_VENDOR_BC_STATUS2_DPDEBOK_MASK	(0x1 << 3)
#define MAX77759_USB_VENDOR_BC_STATUS2_DPDEBOK_CLEAR	(~(0x1 << 3))
#define MAX77759_USB_VENDOR_BC_STATUS2_SPR_2_SHIFT	2
#define MAX77759_USB_VENDOR_BC_STATUS2_SPR_2_MASK	(0x1 << 2)
#define MAX77759_USB_VENDOR_BC_STATUS2_SPR_2_CLEAR	(~(0x1 << 2))
#define MAX77759_USB_VENDOR_BC_STATUS2_DPVLGC_SHIFT	1
#define MAX77759_USB_VENDOR_BC_STATUS2_DPVLGC_MASK	(0x1 << 1)
#define MAX77759_USB_VENDOR_BC_STATUS2_DPVLGC_CLEAR	(~(0x1 << 1))
#define MAX77759_USB_VENDOR_BC_STATUS2_DPVDATREF_SHIFT	0
#define MAX77759_USB_VENDOR_BC_STATUS2_DPVDATREF_MASK	(0x1 << 0)
#define MAX77759_USB_VENDOR_BC_STATUS2_DPVDATREF_CLEAR	(~(0x1 << 0))

MAX77759_BFF(usb_vendor_bc_status2_dndebok,7,7)
MAX77759_BFF(usb_vendor_bc_status2_spr_6,6,6)
MAX77759_BFF(usb_vendor_bc_status2_dnvlgc,5,5)
MAX77759_BFF(usb_vendor_bc_status2_dnvdatref,4,4)
MAX77759_BFF(usb_vendor_bc_status2_dpdebok,3,3)
MAX77759_BFF(usb_vendor_bc_status2_spr_2,2,2)
MAX77759_BFF(usb_vendor_bc_status2_dpvlgc,1,1)
MAX77759_BFF(usb_vendor_bc_status2_dpvdatref,0,0)
static inline const char *
max77759_usb_vendor_bc_status2_cstr(char *buff, size_t len, int val)
{
#ifdef SCNPRINTF
	int i = 0;

	i += SCNPRINTF(&buff[i], len - i, " DNDEBOK=%x",
		FIELD2VALUE(MAX77759_USB_VENDOR_BC_STATUS2_DNDEBOK, val));
	i += SCNPRINTF(&buff[i], len - i, " SPR_6=%x",
		FIELD2VALUE(MAX77759_USB_VENDOR_BC_STATUS2_SPR_6, val));
	i += SCNPRINTF(&buff[i], len - i, " DNVLGC=%x",
		FIELD2VALUE(MAX77759_USB_VENDOR_BC_STATUS2_DNVLGC, val));
	i += SCNPRINTF(&buff[i], len - i, " DNVDATREF=%x",
		FIELD2VALUE(MAX77759_USB_VENDOR_BC_STATUS2_DNVDATREF, val));
	i += SCNPRINTF(&buff[i], len - i, " DPDEBOK=%x",
		FIELD2VALUE(MAX77759_USB_VENDOR_BC_STATUS2_DPDEBOK, val));
	i += SCNPRINTF(&buff[i], len - i, " SPR_2=%x",
		FIELD2VALUE(MAX77759_USB_VENDOR_BC_STATUS2_SPR_2, val));
	i += SCNPRINTF(&buff[i], len - i, " DPVLGC=%x",
		FIELD2VALUE(MAX77759_USB_VENDOR_BC_STATUS2_DPVLGC, val));
	i += SCNPRINTF(&buff[i], len - i, " DPVDATREF=%x",
		FIELD2VALUE(MAX77759_USB_VENDOR_BC_STATUS2_DPVDATREF, val));
#else
	buff[0] = 0;
#endif
	return buff;
}

/*
 * VENDOR_FLADC_STATUS,0x89,0b00000000,0x00
 * ADC_VAL[7:0],,,,,,
 */
#define MAX77759_USB_VENDOR_FLADC_STATUS	0x89

/*
 * VENDOR_WDG_CTRL,0x8A,0b00000000,0x00
 * RSVD_7_2[5:0],,,,,,WD_TIMEOUT[1:0]
 */
#define MAX77759_USB_VENDOR_WDG_CTRL	0x8A

#define MAX77759_USB_VENDOR_WDG_CTRL_RSVD_7_2_SHIFT	2
#define MAX77759_USB_VENDOR_WDG_CTRL_RSVD_7_2_MASK	(0x3f << 2)
#define MAX77759_USB_VENDOR_WDG_CTRL_RSVD_7_2_CLEAR	(~(0x3f << 2))
#define MAX77759_USB_VENDOR_WDG_CTRL_WD_TIMEOUT_SHIFT	0
#define MAX77759_USB_VENDOR_WDG_CTRL_WD_TIMEOUT_MASK	(0x3 << 0)
#define MAX77759_USB_VENDOR_WDG_CTRL_WD_TIMEOUT_CLEAR	(~(0x3 << 0))

MAX77759_BFF(usb_vendor_wdg_ctrl_rsvd_7_2,7,2)
MAX77759_BFF(usb_vendor_wdg_ctrl_wd_timeout,1,0)
static inline const char *
max77759_usb_vendor_wdg_ctrl_cstr(char *buff, size_t len, int val)
{
#ifdef SCNPRINTF
	int i = 0;

	i += SCNPRINTF(&buff[i], len - i, " RSVD_7_2=%x",
		FIELD2VALUE(MAX77759_USB_VENDOR_WDG_CTRL_RSVD_7_2, val));
	i += SCNPRINTF(&buff[i], len - i, " WD_TIMEOUT=%x",
		FIELD2VALUE(MAX77759_USB_VENDOR_WDG_CTRL_WD_TIMEOUT, val));
#else
	buff[0] = 0;
#endif
	return buff;
}

/*
 * VENDOR_VCON_CTRL,0x8B,0b10000001,0x81
 * VcnOcpEn,SPR_6_5[1:0],,VcnSoftStartDis,VcnSc_Deb,VcnIlim[2:0],
 */
#define MAX77759_USB_VENDOR_VCON_CTRL	0x8B
#define MAX77759_USB_VENDOR_VCON_CTRL_VCNOCPEN	(0x1 << 7)
#define MAX77759_USB_VENDOR_VCON_CTRL_VCNSOFTSTARTDIS	(0x1 << 4)
#define MAX77759_USB_VENDOR_VCON_CTRL_VCNSC_DEB	(0x1 << 3)

#define MAX77759_USB_VENDOR_VCON_CTRL_VCNOCPEN_SHIFT	7
#define MAX77759_USB_VENDOR_VCON_CTRL_VCNOCPEN_MASK	(0x1 << 7)
#define MAX77759_USB_VENDOR_VCON_CTRL_VCNOCPEN_CLEAR	(~(0x1 << 7))
#define MAX77759_USB_VENDOR_VCON_CTRL_SPR_6_5_SHIFT	5
#define MAX77759_USB_VENDOR_VCON_CTRL_SPR_6_5_MASK	(0x3 << 5)
#define MAX77759_USB_VENDOR_VCON_CTRL_SPR_6_5_CLEAR	(~(0x3 << 5))
#define MAX77759_USB_VENDOR_VCON_CTRL_VCNSOFTSTARTDIS_SHIFT	4
#define MAX77759_USB_VENDOR_VCON_CTRL_VCNSOFTSTARTDIS_MASK	(0x1 << 4)
#define MAX77759_USB_VENDOR_VCON_CTRL_VCNSOFTSTARTDIS_CLEAR	(~(0x1 << 4))
#define MAX77759_USB_VENDOR_VCON_CTRL_VCNSC_DEB_SHIFT	3
#define MAX77759_USB_VENDOR_VCON_CTRL_VCNSC_DEB_MASK	(0x1 << 3)
#define MAX77759_USB_VENDOR_VCON_CTRL_VCNSC_DEB_CLEAR	(~(0x1 << 3))
#define MAX77759_USB_VENDOR_VCON_CTRL_VCNILIM_SHIFT	0
#define MAX77759_USB_VENDOR_VCON_CTRL_VCNILIM_MASK	(0x7 << 0)
#define MAX77759_USB_VENDOR_VCON_CTRL_VCNILIM_CLEAR	(~(0x7 << 0))

MAX77759_BFF(usb_vendor_vcon_ctrl_vcnocpen,7,7)
MAX77759_BFF(usb_vendor_vcon_ctrl_spr_6_5,6,5)
MAX77759_BFF(usb_vendor_vcon_ctrl_vcnsoftstartdis,4,4)
MAX77759_BFF(usb_vendor_vcon_ctrl_vcnsc_deb,3,3)
MAX77759_BFF(usb_vendor_vcon_ctrl_vcnilim,2,0)
static inline const char *
max77759_usb_vendor_vcon_ctrl_cstr(char *buff, size_t len, int val)
{
#ifdef SCNPRINTF
	int i = 0;

	i += SCNPRINTF(&buff[i], len - i, " VCNOCPEN=%x",
		FIELD2VALUE(MAX77759_USB_VENDOR_VCON_CTRL_VCNOCPEN, val));
	i += SCNPRINTF(&buff[i], len - i, " SPR_6_5=%x",
		FIELD2VALUE(MAX77759_USB_VENDOR_VCON_CTRL_SPR_6_5, val));
	i += SCNPRINTF(&buff[i], len - i, " VCNSOFTSTARTDIS=%x",
		FIELD2VALUE(MAX77759_USB_VENDOR_VCON_CTRL_VCNSOFTSTARTDIS, val));
	i += SCNPRINTF(&buff[i], len - i, " VCNSC_DEB=%x",
		FIELD2VALUE(MAX77759_USB_VENDOR_VCON_CTRL_VCNSC_DEB, val));
	i += SCNPRINTF(&buff[i], len - i, " VCNILIM=%x",
		FIELD2VALUE(MAX77759_USB_VENDOR_VCON_CTRL_VCNILIM, val));
#else
	buff[0] = 0;
#endif
	return buff;
}

/*
 * VENDOR_CC_CTRL1,0x8C,0b00000010,0x02
 * ccConnDry,RdOpenDis,ccCompEn,ccSnkExitEn,ccLpDrpCycle[1:0],,ccDrpPhase[1:0]
 */
#define MAX77759_USB_VENDOR_CC_CTRL1	0x8C
#define MAX77759_USB_VENDOR_CC_CTRL1_CCCONNDRY	(0x1 << 7)
#define MAX77759_USB_VENDOR_CC_CTRL1_RDOPENDIS	(0x1 << 6)
#define MAX77759_USB_VENDOR_CC_CTRL1_CCCOMPEN	(0x1 << 5)
#define MAX77759_USB_VENDOR_CC_CTRL1_CCSNKEXITEN	(0x1 << 4)

#define MAX77759_USB_VENDOR_CC_CTRL1_CCCONNDRY_SHIFT	7
#define MAX77759_USB_VENDOR_CC_CTRL1_CCCONNDRY_MASK	(0x1 << 7)
#define MAX77759_USB_VENDOR_CC_CTRL1_CCCONNDRY_CLEAR	(~(0x1 << 7))
#define MAX77759_USB_VENDOR_CC_CTRL1_RDOPENDIS_SHIFT	6
#define MAX77759_USB_VENDOR_CC_CTRL1_RDOPENDIS_MASK	(0x1 << 6)
#define MAX77759_USB_VENDOR_CC_CTRL1_RDOPENDIS_CLEAR	(~(0x1 << 6))
#define MAX77759_USB_VENDOR_CC_CTRL1_CCCOMPEN_SHIFT	5
#define MAX77759_USB_VENDOR_CC_CTRL1_CCCOMPEN_MASK	(0x1 << 5)
#define MAX77759_USB_VENDOR_CC_CTRL1_CCCOMPEN_CLEAR	(~(0x1 << 5))
#define MAX77759_USB_VENDOR_CC_CTRL1_CCSNKEXITEN_SHIFT	4
#define MAX77759_USB_VENDOR_CC_CTRL1_CCSNKEXITEN_MASK	(0x1 << 4)
#define MAX77759_USB_VENDOR_CC_CTRL1_CCSNKEXITEN_CLEAR	(~(0x1 << 4))
#define MAX77759_USB_VENDOR_CC_CTRL1_CCLPDRPCYCLE_SHIFT	2
#define MAX77759_USB_VENDOR_CC_CTRL1_CCLPDRPCYCLE_MASK	(0x3 << 2)
#define MAX77759_USB_VENDOR_CC_CTRL1_CCLPDRPCYCLE_CLEAR	(~(0x3 << 2))
#define MAX77759_USB_VENDOR_CC_CTRL1_CCDRPPHASE_SHIFT	0
#define MAX77759_USB_VENDOR_CC_CTRL1_CCDRPPHASE_MASK	(0x3 << 0)
#define MAX77759_USB_VENDOR_CC_CTRL1_CCDRPPHASE_CLEAR	(~(0x3 << 0))

MAX77759_BFF(usb_vendor_cc_ctrl1_ccconndry,7,7)
MAX77759_BFF(usb_vendor_cc_ctrl1_rdopendis,6,6)
MAX77759_BFF(usb_vendor_cc_ctrl1_cccompen,5,5)
MAX77759_BFF(usb_vendor_cc_ctrl1_ccsnkexiten,4,4)
MAX77759_BFF(usb_vendor_cc_ctrl1_cclpdrpcycle,3,2)
MAX77759_BFF(usb_vendor_cc_ctrl1_ccdrpphase,1,0)
static inline const char *
max77759_usb_vendor_cc_ctrl1_cstr(char *buff, size_t len, int val)
{
#ifdef SCNPRINTF
	int i = 0;

	i += SCNPRINTF(&buff[i], len - i, " CCCONNDRY=%x",
		FIELD2VALUE(MAX77759_USB_VENDOR_CC_CTRL1_CCCONNDRY, val));
	i += SCNPRINTF(&buff[i], len - i, " RDOPENDIS=%x",
		FIELD2VALUE(MAX77759_USB_VENDOR_CC_CTRL1_RDOPENDIS, val));
	i += SCNPRINTF(&buff[i], len - i, " CCCOMPEN=%x",
		FIELD2VALUE(MAX77759_USB_VENDOR_CC_CTRL1_CCCOMPEN, val));
	i += SCNPRINTF(&buff[i], len - i, " CCSNKEXITEN=%x",
		FIELD2VALUE(MAX77759_USB_VENDOR_CC_CTRL1_CCSNKEXITEN, val));
	i += SCNPRINTF(&buff[i], len - i, " CCLPDRPCYCLE=%x",
		FIELD2VALUE(MAX77759_USB_VENDOR_CC_CTRL1_CCLPDRPCYCLE, val));
	i += SCNPRINTF(&buff[i], len - i, " CCDRPPHASE=%x",
		FIELD2VALUE(MAX77759_USB_VENDOR_CC_CTRL1_CCDRPPHASE, val));
#else
	buff[0] = 0;
#endif
	return buff;
}

/*
 * VENDOR_CC_CTRL2,0x8D,0b00000000,0x00
 * sbuOvpDis,ccOvpDis,sbuRpCtrl,ccLpModeSel[1:0],,ccRpCtrl[2:0],
 */
#define MAX77759_USB_VENDOR_CC_CTRL2	0x8D
#define MAX77759_USB_VENDOR_CC_CTRL2_SBUOVPDIS	(0x1 << 7)
#define MAX77759_USB_VENDOR_CC_CTRL2_CCOVPDIS	(0x1 << 6)
#define MAX77759_USB_VENDOR_CC_CTRL2_SBURPCTRL	(0x1 << 5)

#define MAX77759_USB_VENDOR_CC_CTRL2_SBUOVPDIS_SHIFT	7
#define MAX77759_USB_VENDOR_CC_CTRL2_SBUOVPDIS_MASK	(0x1 << 7)
#define MAX77759_USB_VENDOR_CC_CTRL2_SBUOVPDIS_CLEAR	(~(0x1 << 7))
#define MAX77759_USB_VENDOR_CC_CTRL2_CCOVPDIS_SHIFT	6
#define MAX77759_USB_VENDOR_CC_CTRL2_CCOVPDIS_MASK	(0x1 << 6)
#define MAX77759_USB_VENDOR_CC_CTRL2_CCOVPDIS_CLEAR	(~(0x1 << 6))
#define MAX77759_USB_VENDOR_CC_CTRL2_SBURPCTRL_SHIFT	5
#define MAX77759_USB_VENDOR_CC_CTRL2_SBURPCTRL_MASK	(0x1 << 5)
#define MAX77759_USB_VENDOR_CC_CTRL2_SBURPCTRL_CLEAR	(~(0x1 << 5))
#define MAX77759_USB_VENDOR_CC_CTRL2_CCLPMODESEL_SHIFT	3
#define MAX77759_USB_VENDOR_CC_CTRL2_CCLPMODESEL_MASK	(0x3 << 3)
#define MAX77759_USB_VENDOR_CC_CTRL2_CCLPMODESEL_CLEAR	(~(0x3 << 3))
#define MAX77759_USB_VENDOR_CC_CTRL2_CCRPCTRL_SHIFT	0
#define MAX77759_USB_VENDOR_CC_CTRL2_CCRPCTRL_MASK	(0x7 << 0)
#define MAX77759_USB_VENDOR_CC_CTRL2_CCRPCTRL_CLEAR	(~(0x7 << 0))

MAX77759_BFF(usb_vendor_cc_ctrl2_sbuovpdis,7,7)
MAX77759_BFF(usb_vendor_cc_ctrl2_ccovpdis,6,6)
MAX77759_BFF(usb_vendor_cc_ctrl2_sburpctrl,5,5)
MAX77759_BFF(usb_vendor_cc_ctrl2_cclpmodesel,4,3)
MAX77759_BFF(usb_vendor_cc_ctrl2_ccrpctrl,2,0)
static inline const char *
max77759_usb_vendor_cc_ctrl2_cstr(char *buff, size_t len, int val)
{
#ifdef SCNPRINTF
	int i = 0;

	i += SCNPRINTF(&buff[i], len - i, " SBUOVPDIS=%x",
		FIELD2VALUE(MAX77759_USB_VENDOR_CC_CTRL2_SBUOVPDIS, val));
	i += SCNPRINTF(&buff[i], len - i, " CCOVPDIS=%x",
		FIELD2VALUE(MAX77759_USB_VENDOR_CC_CTRL2_CCOVPDIS, val));
	i += SCNPRINTF(&buff[i], len - i, " SBURPCTRL=%x",
		FIELD2VALUE(MAX77759_USB_VENDOR_CC_CTRL2_SBURPCTRL, val));
	i += SCNPRINTF(&buff[i], len - i, " CCLPMODESEL=%x",
		FIELD2VALUE(MAX77759_USB_VENDOR_CC_CTRL2_CCLPMODESEL, val));
	i += SCNPRINTF(&buff[i], len - i, " CCRPCTRL=%x",
		FIELD2VALUE(MAX77759_USB_VENDOR_CC_CTRL2_CCRPCTRL, val));
#else
	buff[0] = 0;
#endif
	return buff;
}

/*
 * VENDOR_CC_CTRL3,0x8E,0b00100000,0x20
 * ccWtrDeb[1:0],,ccWtrSel[2:0],,,ccLadderDis,SPR_1
 */
#define MAX77759_USB_VENDOR_CC_CTRL3	0x8E
#define MAX77759_USB_VENDOR_CC_CTRL3_CCLADDERDIS	(0x1 << 2)
#define MAX77759_USB_VENDOR_CC_CTRL3_SPR_1	(0x1 << 1)
#define MAX77759_USB_VENDOR_CC_CTRL3_WTRCYCLE	(0x1 << 0)

#define MAX77759_USB_VENDOR_CC_CTRL3_CCWTRDEB_SHIFT	6
#define MAX77759_USB_VENDOR_CC_CTRL3_CCWTRDEB_MASK	(0x3 << 6)
#define MAX77759_USB_VENDOR_CC_CTRL3_CCWTRDEB_CLEAR	(~(0x3 << 6))
#define MAX77759_USB_VENDOR_CC_CTRL3_CCWTRSEL_SHIFT	3
#define MAX77759_USB_VENDOR_CC_CTRL3_CCWTRSEL_MASK	(0x7 << 3)
#define MAX77759_USB_VENDOR_CC_CTRL3_CCWTRSEL_CLEAR	(~(0x7 << 3))
#define MAX77759_USB_VENDOR_CC_CTRL3_CCLADDERDIS_SHIFT	2
#define MAX77759_USB_VENDOR_CC_CTRL3_CCLADDERDIS_MASK	(0x1 << 2)
#define MAX77759_USB_VENDOR_CC_CTRL3_CCLADDERDIS_CLEAR	(~(0x1 << 2))
#define MAX77759_USB_VENDOR_CC_CTRL3_SPR_1_SHIFT	1
#define MAX77759_USB_VENDOR_CC_CTRL3_SPR_1_MASK	(0x1 << 1)
#define MAX77759_USB_VENDOR_CC_CTRL3_SPR_1_CLEAR	(~(0x1 << 1))
#define MAX77759_USB_VENDOR_CC_CTRL3_WTRCYCLE_SHIFT	0
#define MAX77759_USB_VENDOR_CC_CTRL3_WTRCYCLE_MASK	(0x1 << 0)
#define MAX77759_USB_VENDOR_CC_CTRL3_WTRCYCLE_CLEAR	(~(0x1 << 0))

MAX77759_BFF(usb_vendor_cc_ctrl3_ccwtrdeb,7,6)
MAX77759_BFF(usb_vendor_cc_ctrl3_ccwtrsel,5,3)
MAX77759_BFF(usb_vendor_cc_ctrl3_ccladderdis,2,2)
MAX77759_BFF(usb_vendor_cc_ctrl3_spr_1,1,1)
MAX77759_BFF(usb_vendor_cc_ctrl3_wtrcycle,0,0)
static inline const char *
max77759_usb_vendor_cc_ctrl3_cstr(char *buff, size_t len, int val)
{
#ifdef SCNPRINTF
	int i = 0;

	i += SCNPRINTF(&buff[i], len - i, " CCWTRDEB=%x",
		FIELD2VALUE(MAX77759_USB_VENDOR_CC_CTRL3_CCWTRDEB, val));
	i += SCNPRINTF(&buff[i], len - i, " CCWTRSEL=%x",
		FIELD2VALUE(MAX77759_USB_VENDOR_CC_CTRL3_CCWTRSEL, val));
	i += SCNPRINTF(&buff[i], len - i, " CCLADDERDIS=%x",
		FIELD2VALUE(MAX77759_USB_VENDOR_CC_CTRL3_CCLADDERDIS, val));
	i += SCNPRINTF(&buff[i], len - i, " SPR_1=%x",
		FIELD2VALUE(MAX77759_USB_VENDOR_CC_CTRL3_SPR_1, val));
	i += SCNPRINTF(&buff[i], len - i, " WTRCYCLE=%x",
		FIELD2VALUE(MAX77759_USB_VENDOR_CC_CTRL3_WTRCYCLE, val));
#else
	buff[0] = 0;
#endif
	return buff;
}

/*
 * VENDOR_BC_CTRL1,0x8F,0b10100001,0xa1
 * dcdCpl,SPR_6,noBcComp,SPR_4_2[2:0],,,chgDetMan
 */
#define MAX77759_USB_VENDOR_BC_CTRL1	0x8F
#define MAX77759_USB_VENDOR_BC_CTRL1_DCDCPL	(0x1 << 7)
#define MAX77759_USB_VENDOR_BC_CTRL1_SPR_6	(0x1 << 6)
#define MAX77759_USB_VENDOR_BC_CTRL1_NOBCCOMP	(0x1 << 5)
#define MAX77759_USB_VENDOR_BC_CTRL1_CHGDETMAN	(0x1 << 1)
#define MAX77759_USB_VENDOR_BC_CTRL1_CHGDETEN	(0x1 << 0)

#define MAX77759_USB_VENDOR_BC_CTRL1_DCDCPL_SHIFT	7
#define MAX77759_USB_VENDOR_BC_CTRL1_DCDCPL_MASK	(0x1 << 7)
#define MAX77759_USB_VENDOR_BC_CTRL1_DCDCPL_CLEAR	(~(0x1 << 7))
#define MAX77759_USB_VENDOR_BC_CTRL1_SPR_6_SHIFT	6
#define MAX77759_USB_VENDOR_BC_CTRL1_SPR_6_MASK	(0x1 << 6)
#define MAX77759_USB_VENDOR_BC_CTRL1_SPR_6_CLEAR	(~(0x1 << 6))
#define MAX77759_USB_VENDOR_BC_CTRL1_NOBCCOMP_SHIFT	5
#define MAX77759_USB_VENDOR_BC_CTRL1_NOBCCOMP_MASK	(0x1 << 5)
#define MAX77759_USB_VENDOR_BC_CTRL1_NOBCCOMP_CLEAR	(~(0x1 << 5))
#define MAX77759_USB_VENDOR_BC_CTRL1_SPR_4_2_SHIFT	2
#define MAX77759_USB_VENDOR_BC_CTRL1_SPR_4_2_MASK	(0x7 << 2)
#define MAX77759_USB_VENDOR_BC_CTRL1_SPR_4_2_CLEAR	(~(0x7 << 2))
#define MAX77759_USB_VENDOR_BC_CTRL1_CHGDETMAN_SHIFT	1
#define MAX77759_USB_VENDOR_BC_CTRL1_CHGDETMAN_MASK	(0x1 << 1)
#define MAX77759_USB_VENDOR_BC_CTRL1_CHGDETMAN_CLEAR	(~(0x1 << 1))
#define MAX77759_USB_VENDOR_BC_CTRL1_CHGDETEN_SHIFT	0
#define MAX77759_USB_VENDOR_BC_CTRL1_CHGDETEN_MASK	(0x1 << 0)
#define MAX77759_USB_VENDOR_BC_CTRL1_CHGDETEN_CLEAR	(~(0x1 << 0))

MAX77759_BFF(usb_vendor_bc_ctrl1_dcdcpl,7,7)
MAX77759_BFF(usb_vendor_bc_ctrl1_spr_6,6,6)
MAX77759_BFF(usb_vendor_bc_ctrl1_nobccomp,5,5)
MAX77759_BFF(usb_vendor_bc_ctrl1_spr_4_2,4,2)
MAX77759_BFF(usb_vendor_bc_ctrl1_chgdetman,1,1)
MAX77759_BFF(usb_vendor_bc_ctrl1_chgdeten,0,0)
static inline const char *
max77759_usb_vendor_bc_ctrl1_cstr(char *buff, size_t len, int val)
{
#ifdef SCNPRINTF
	int i = 0;

	i += SCNPRINTF(&buff[i], len - i, " DCDCPL=%x",
		FIELD2VALUE(MAX77759_USB_VENDOR_BC_CTRL1_DCDCPL, val));
	i += SCNPRINTF(&buff[i], len - i, " SPR_6=%x",
		FIELD2VALUE(MAX77759_USB_VENDOR_BC_CTRL1_SPR_6, val));
	i += SCNPRINTF(&buff[i], len - i, " NOBCCOMP=%x",
		FIELD2VALUE(MAX77759_USB_VENDOR_BC_CTRL1_NOBCCOMP, val));
	i += SCNPRINTF(&buff[i], len - i, " SPR_4_2=%x",
		FIELD2VALUE(MAX77759_USB_VENDOR_BC_CTRL1_SPR_4_2, val));
	i += SCNPRINTF(&buff[i], len - i, " CHGDETMAN=%x",
		FIELD2VALUE(MAX77759_USB_VENDOR_BC_CTRL1_CHGDETMAN, val));
	i += SCNPRINTF(&buff[i], len - i, " CHGDETEN=%x",
		FIELD2VALUE(MAX77759_USB_VENDOR_BC_CTRL1_CHGDETEN, val));
#else
	buff[0] = 0;
#endif
	return buff;
}

/*
 * VENDOR_BC_CTRL2,0x90,0b00000000,0x00
 * dpMonEn,SPR_6,dnMonEn,dpDnMan,dpDrv[1:0],,dnDrv[1:0]
 */
#define MAX77759_USB_VENDOR_BC_CTRL2	0x90
#define MAX77759_USB_VENDOR_BC_CTRL2_DPMONEN	(0x1 << 7)
#define MAX77759_USB_VENDOR_BC_CTRL2_SPR_6	(0x1 << 6)
#define MAX77759_USB_VENDOR_BC_CTRL2_DNMONEN	(0x1 << 5)
#define MAX77759_USB_VENDOR_BC_CTRL2_DPDNMAN	(0x1 << 4)

#define MAX77759_USB_VENDOR_BC_CTRL2_DPMONEN_SHIFT	7
#define MAX77759_USB_VENDOR_BC_CTRL2_DPMONEN_MASK	(0x1 << 7)
#define MAX77759_USB_VENDOR_BC_CTRL2_DPMONEN_CLEAR	(~(0x1 << 7))
#define MAX77759_USB_VENDOR_BC_CTRL2_SPR_6_SHIFT	6
#define MAX77759_USB_VENDOR_BC_CTRL2_SPR_6_MASK	(0x1 << 6)
#define MAX77759_USB_VENDOR_BC_CTRL2_SPR_6_CLEAR	(~(0x1 << 6))
#define MAX77759_USB_VENDOR_BC_CTRL2_DNMONEN_SHIFT	5
#define MAX77759_USB_VENDOR_BC_CTRL2_DNMONEN_MASK	(0x1 << 5)
#define MAX77759_USB_VENDOR_BC_CTRL2_DNMONEN_CLEAR	(~(0x1 << 5))
#define MAX77759_USB_VENDOR_BC_CTRL2_DPDNMAN_SHIFT	4
#define MAX77759_USB_VENDOR_BC_CTRL2_DPDNMAN_MASK	(0x1 << 4)
#define MAX77759_USB_VENDOR_BC_CTRL2_DPDNMAN_CLEAR	(~(0x1 << 4))
#define MAX77759_USB_VENDOR_BC_CTRL2_DPDRV_SHIFT	2
#define MAX77759_USB_VENDOR_BC_CTRL2_DPDRV_MASK	(0x3 << 2)
#define MAX77759_USB_VENDOR_BC_CTRL2_DPDRV_CLEAR	(~(0x3 << 2))
#define MAX77759_USB_VENDOR_BC_CTRL2_DNDRV_SHIFT	0
#define MAX77759_USB_VENDOR_BC_CTRL2_DNDRV_MASK	(0x3 << 0)
#define MAX77759_USB_VENDOR_BC_CTRL2_DNDRV_CLEAR	(~(0x3 << 0))

MAX77759_BFF(usb_vendor_bc_ctrl2_dpmonen,7,7)
MAX77759_BFF(usb_vendor_bc_ctrl2_spr_6,6,6)
MAX77759_BFF(usb_vendor_bc_ctrl2_dnmonen,5,5)
MAX77759_BFF(usb_vendor_bc_ctrl2_dpdnman,4,4)
MAX77759_BFF(usb_vendor_bc_ctrl2_dpdrv,3,2)
MAX77759_BFF(usb_vendor_bc_ctrl2_dndrv,1,0)
static inline const char *
max77759_usb_vendor_bc_ctrl2_cstr(char *buff, size_t len, int val)
{
#ifdef SCNPRINTF
	int i = 0;

	i += SCNPRINTF(&buff[i], len - i, " DPMONEN=%x",
		FIELD2VALUE(MAX77759_USB_VENDOR_BC_CTRL2_DPMONEN, val));
	i += SCNPRINTF(&buff[i], len - i, " SPR_6=%x",
		FIELD2VALUE(MAX77759_USB_VENDOR_BC_CTRL2_SPR_6, val));
	i += SCNPRINTF(&buff[i], len - i, " DNMONEN=%x",
		FIELD2VALUE(MAX77759_USB_VENDOR_BC_CTRL2_DNMONEN, val));
	i += SCNPRINTF(&buff[i], len - i, " DPDNMAN=%x",
		FIELD2VALUE(MAX77759_USB_VENDOR_BC_CTRL2_DPDNMAN, val));
	i += SCNPRINTF(&buff[i], len - i, " DPDRV=%x",
		FIELD2VALUE(MAX77759_USB_VENDOR_BC_CTRL2_DPDRV, val));
	i += SCNPRINTF(&buff[i], len - i, " DNDRV=%x",
		FIELD2VALUE(MAX77759_USB_VENDOR_BC_CTRL2_DNDRV, val));
#else
	buff[0] = 0;
#endif
	return buff;
}

/*
 * VENDOR_ADC_CTRL1,0x91,0b00000000,0x00
 * adcinSel[2:0],,,SPR_4_1[3:0],,,
 */
#define MAX77759_USB_VENDOR_ADC_CTRL1	0x91
#define MAX77759_USB_VENDOR_ADC_CTRL1_ADCEN	(0x1 << 0)

#define MAX77759_USB_VENDOR_ADC_CTRL1_ADCINSEL_SHIFT	5
#define MAX77759_USB_VENDOR_ADC_CTRL1_ADCINSEL_MASK	(0x7 << 5)
#define MAX77759_USB_VENDOR_ADC_CTRL1_ADCINSEL_CLEAR	(~(0x7 << 5))
#define MAX77759_USB_VENDOR_ADC_CTRL1_SPR_4_1_SHIFT	1
#define MAX77759_USB_VENDOR_ADC_CTRL1_SPR_4_1_MASK	(0xf << 1)
#define MAX77759_USB_VENDOR_ADC_CTRL1_SPR_4_1_CLEAR	(~(0xf << 1))
#define MAX77759_USB_VENDOR_ADC_CTRL1_ADCEN_SHIFT	0
#define MAX77759_USB_VENDOR_ADC_CTRL1_ADCEN_MASK	(0x1 << 0)
#define MAX77759_USB_VENDOR_ADC_CTRL1_ADCEN_CLEAR	(~(0x1 << 0))

MAX77759_BFF(usb_vendor_adc_ctrl1_adcinsel,7,5)
MAX77759_BFF(usb_vendor_adc_ctrl1_spr_4_1,4,1)
MAX77759_BFF(usb_vendor_adc_ctrl1_adcen,0,0)
static inline const char *
max77759_usb_vendor_adc_ctrl1_cstr(char *buff, size_t len, int val)
{
#ifdef SCNPRINTF
	int i = 0;

	i += SCNPRINTF(&buff[i], len - i, " ADCINSEL=%x",
		FIELD2VALUE(MAX77759_USB_VENDOR_ADC_CTRL1_ADCINSEL, val));
	i += SCNPRINTF(&buff[i], len - i, " SPR_4_1=%x",
		FIELD2VALUE(MAX77759_USB_VENDOR_ADC_CTRL1_SPR_4_1, val));
	i += SCNPRINTF(&buff[i], len - i, " ADCEN=%x",
		FIELD2VALUE(MAX77759_USB_VENDOR_ADC_CTRL1_ADCEN, val));
#else
	buff[0] = 0;
#endif
	return buff;
}

/*
 * VENDOR_EXTBST_CTRL,0x92,0b00000000,0x00
 * SPR_7_1[6:0],,,,,,
 */
#define MAX77759_USB_VENDOR_EXTBST_CTRL	0x92
#define MAX77759_USB_VENDOR_EXTBST_CTRL_EXT_BST_EN	(0x1 << 0)

#define MAX77759_USB_VENDOR_EXTBST_CTRL_SPR_7_1_SHIFT	1
#define MAX77759_USB_VENDOR_EXTBST_CTRL_SPR_7_1_MASK	(0x7f << 1)
#define MAX77759_USB_VENDOR_EXTBST_CTRL_SPR_7_1_CLEAR	(~(0x7f << 1))
#define MAX77759_USB_VENDOR_EXTBST_CTRL_EXT_BST_EN_SHIFT	0
#define MAX77759_USB_VENDOR_EXTBST_CTRL_EXT_BST_EN_MASK	(0x1 << 0)
#define MAX77759_USB_VENDOR_EXTBST_CTRL_EXT_BST_EN_CLEAR	(~(0x1 << 0))

MAX77759_BFF(usb_vendor_extbst_ctrl_spr_7_1,7,1)
MAX77759_BFF(usb_vendor_extbst_ctrl_ext_bst_en,0,0)
static inline const char *
max77759_usb_vendor_extbst_ctrl_cstr(char *buff, size_t len, int val)
{
#ifdef SCNPRINTF
	int i = 0;

	i += SCNPRINTF(&buff[i], len - i, " SPR_7_1=%x",
		FIELD2VALUE(MAX77759_USB_VENDOR_EXTBST_CTRL_SPR_7_1, val));
	i += SCNPRINTF(&buff[i], len - i, " EXT_BST_EN=%x",
		FIELD2VALUE(MAX77759_USB_VENDOR_EXTBST_CTRL_EXT_BST_EN, val));
#else
	buff[0] = 0;
#endif
	return buff;
}

/*
 * VENDOR_USBSW_CTRL,0x93,0b00000000,0x00
 * SPR_7_6[1:0],,DPSw[2:0],,,DNSw[2:0],
 */
#define MAX77759_USB_VENDOR_USBSW_CTRL	0x93

#define MAX77759_USB_VENDOR_USBSW_CTRL_SPR_7_6_SHIFT	6
#define MAX77759_USB_VENDOR_USBSW_CTRL_SPR_7_6_MASK	(0x3 << 6)
#define MAX77759_USB_VENDOR_USBSW_CTRL_SPR_7_6_CLEAR	(~(0x3 << 6))
#define MAX77759_USB_VENDOR_USBSW_CTRL_DPSW_SHIFT	3
#define MAX77759_USB_VENDOR_USBSW_CTRL_DPSW_MASK	(0x7 << 3)
#define MAX77759_USB_VENDOR_USBSW_CTRL_DPSW_CLEAR	(~(0x7 << 3))
#define MAX77759_USB_VENDOR_USBSW_CTRL_DNSW_SHIFT	0
#define MAX77759_USB_VENDOR_USBSW_CTRL_DNSW_MASK	(0x7 << 0)
#define MAX77759_USB_VENDOR_USBSW_CTRL_DNSW_CLEAR	(~(0x7 << 0))

MAX77759_BFF(usb_vendor_usbsw_ctrl_spr_7_6,7,6)
MAX77759_BFF(usb_vendor_usbsw_ctrl_dpsw,5,3)
MAX77759_BFF(usb_vendor_usbsw_ctrl_dnsw,2,0)
static inline const char *
max77759_usb_vendor_usbsw_ctrl_cstr(char *buff, size_t len, int val)
{
#ifdef SCNPRINTF
	int i = 0;

	i += SCNPRINTF(&buff[i], len - i, " SPR_7_6=%x",
		FIELD2VALUE(MAX77759_USB_VENDOR_USBSW_CTRL_SPR_7_6, val));
	i += SCNPRINTF(&buff[i], len - i, " DPSW=%x",
		FIELD2VALUE(MAX77759_USB_VENDOR_USBSW_CTRL_DPSW, val));
	i += SCNPRINTF(&buff[i], len - i, " DNSW=%x",
		FIELD2VALUE(MAX77759_USB_VENDOR_USBSW_CTRL_DNSW, val));
#else
	buff[0] = 0;
#endif
	return buff;
}

/*
 * VENDOR_SBUSW_CTRL,0x94,0b00000000,0x00
 * SPR_7_6[1:0],,SBU2Sw[2:0],,,SBU1Sw[2:0],
 */
#define MAX77759_USB_VENDOR_SBUSW_CTRL	0x94

#define MAX77759_USB_VENDOR_SBUSW_CTRL_SPR_7_6_SHIFT	6
#define MAX77759_USB_VENDOR_SBUSW_CTRL_SPR_7_6_MASK	(0x3 << 6)
#define MAX77759_USB_VENDOR_SBUSW_CTRL_SPR_7_6_CLEAR	(~(0x3 << 6))
#define MAX77759_USB_VENDOR_SBUSW_CTRL_SBU2SW_SHIFT	3
#define MAX77759_USB_VENDOR_SBUSW_CTRL_SBU2SW_MASK	(0x7 << 3)
#define MAX77759_USB_VENDOR_SBUSW_CTRL_SBU2SW_CLEAR	(~(0x7 << 3))
#define MAX77759_USB_VENDOR_SBUSW_CTRL_SBU1SW_SHIFT	0
#define MAX77759_USB_VENDOR_SBUSW_CTRL_SBU1SW_MASK	(0x7 << 0)
#define MAX77759_USB_VENDOR_SBUSW_CTRL_SBU1SW_CLEAR	(~(0x7 << 0))

MAX77759_BFF(usb_vendor_sbusw_ctrl_spr_7_6,7,6)
MAX77759_BFF(usb_vendor_sbusw_ctrl_sbu2sw,5,3)
MAX77759_BFF(usb_vendor_sbusw_ctrl_sbu1sw,2,0)
static inline const char *
max77759_usb_vendor_sbusw_ctrl_cstr(char *buff, size_t len, int val)
{
#ifdef SCNPRINTF
	int i = 0;

	i += SCNPRINTF(&buff[i], len - i, " SPR_7_6=%x",
		FIELD2VALUE(MAX77759_USB_VENDOR_SBUSW_CTRL_SPR_7_6, val));
	i += SCNPRINTF(&buff[i], len - i, " SBU2SW=%x",
		FIELD2VALUE(MAX77759_USB_VENDOR_SBUSW_CTRL_SBU2SW, val));
	i += SCNPRINTF(&buff[i], len - i, " SBU1SW=%x",
		FIELD2VALUE(MAX77759_USB_VENDOR_SBUSW_CTRL_SBU1SW, val));
#else
	buff[0] = 0;
#endif
	return buff;
}

/*
 * VENDOR_SW_CTRL,0x95,0b00000000,0x00
 * SPR_7_1[6:0],,,,,,
 */
#define MAX77759_USB_VENDOR_SW_CTRL	0x95

#endif /* MAX77759_REG_H_ */
