diff options
| author | fishsoupisgood <github@madingley.org> | 2019-04-29 01:17:54 +0100 | 
|---|---|---|
| committer | fishsoupisgood <github@madingley.org> | 2019-05-27 03:43:43 +0100 | 
| commit | 3f2546b2ef55b661fd8dd69682b38992225e86f6 (patch) | |
| tree | 65ca85f13617aee1dce474596800950f266a456c /roms/u-boot/drivers/power/pmic | |
| download | qemu-master.tar.gz qemu-master.tar.bz2 qemu-master.zip  | |
Diffstat (limited to 'roms/u-boot/drivers/power/pmic')
| -rw-r--r-- | roms/u-boot/drivers/power/pmic/Makefile | 14 | ||||
| -rw-r--r-- | roms/u-boot/drivers/power/pmic/muic_max8997.c | 74 | ||||
| -rw-r--r-- | roms/u-boot/drivers/power/pmic/pmic_max77686.c | 255 | ||||
| -rw-r--r-- | roms/u-boot/drivers/power/pmic/pmic_max8997.c | 107 | ||||
| -rw-r--r-- | roms/u-boot/drivers/power/pmic/pmic_max8998.c | 33 | ||||
| -rw-r--r-- | roms/u-boot/drivers/power/pmic/pmic_pfuze100.c | 32 | ||||
| -rw-r--r-- | roms/u-boot/drivers/power/pmic/pmic_tps65217.c | 109 | ||||
| -rw-r--r-- | roms/u-boot/drivers/power/pmic/pmic_tps65910.c | 83 | 
8 files changed, 707 insertions, 0 deletions
diff --git a/roms/u-boot/drivers/power/pmic/Makefile b/roms/u-boot/drivers/power/pmic/Makefile new file mode 100644 index 00000000..4129bdab --- /dev/null +++ b/roms/u-boot/drivers/power/pmic/Makefile @@ -0,0 +1,14 @@ +# +# Copyright (C) 2012 Samsung Electronics +# Lukasz Majewski <l.majewski@samsung.com> +# +# SPDX-License-Identifier:	GPL-2.0+ +# + +obj-$(CONFIG_POWER_MAX8998) += pmic_max8998.o +obj-$(CONFIG_POWER_MAX8997) += pmic_max8997.o +obj-$(CONFIG_POWER_MUIC_MAX8997) += muic_max8997.o +obj-$(CONFIG_POWER_MAX77686) += pmic_max77686.o +obj-$(CONFIG_POWER_PFUZE100) += pmic_pfuze100.o +obj-$(CONFIG_POWER_TPS65217) += pmic_tps65217.o +obj-$(CONFIG_POWER_TPS65910) += pmic_tps65910.o diff --git a/roms/u-boot/drivers/power/pmic/muic_max8997.c b/roms/u-boot/drivers/power/pmic/muic_max8997.c new file mode 100644 index 00000000..720342e5 --- /dev/null +++ b/roms/u-boot/drivers/power/pmic/muic_max8997.c @@ -0,0 +1,74 @@ +/* + *  Copyright (C) 2012 Samsung Electronics + *  Lukasz Majewski <l.majewski@samsung.com> + * + * SPDX-License-Identifier:	GPL-2.0+ + */ + +#include <common.h> +#include <power/pmic.h> +#include <power/power_chrg.h> +#include <power/max8997_muic.h> +#include <i2c.h> +#include <errno.h> + +static int power_chrg_get_type(struct pmic *p) +{ +	unsigned int val; +	unsigned char charge_type, charger; + +	if (pmic_probe(p)) +		return CHARGER_NO; + +	pmic_reg_read(p, MAX8997_MUIC_STATUS2, &val); +	charge_type = val & MAX8997_MUIC_CHG_MASK; + +	switch (charge_type) { +	case MAX8997_MUIC_CHG_NO: +		charger = CHARGER_NO; +		break; +	case MAX8997_MUIC_CHG_USB: +	case MAX8997_MUIC_CHG_USB_D: +		charger = CHARGER_USB; +		break; +	case MAX8997_MUIC_CHG_TA: +	case MAX8997_MUIC_CHG_TA_1A: +		charger = CHARGER_TA; +		break; +	case MAX8997_MUIC_CHG_TA_500: +		charger = CHARGER_TA_500; +		break; +	default: +		charger = CHARGER_UNKNOWN; +		break; +	} + +	return charger; +} + +static struct power_chrg power_chrg_muic_ops = { +	.chrg_type = power_chrg_get_type, +}; + +int power_muic_init(unsigned int bus) +{ +	static const char name[] = "MAX8997_MUIC"; +	struct pmic *p = pmic_alloc(); + +	if (!p) { +		printf("%s: POWER allocation error!\n", __func__); +		return -ENOMEM; +	} + +	debug("Board Micro USB Interface Controller init\n"); + +	p->name = name; +	p->interface = PMIC_I2C; +	p->number_of_regs = MUIC_NUM_OF_REGS; +	p->hw.i2c.addr = MAX8997_MUIC_I2C_ADDR; +	p->hw.i2c.tx_num = 1; +	p->bus = bus; + +	p->chrg = &power_chrg_muic_ops; +	return 0; +} diff --git a/roms/u-boot/drivers/power/pmic/pmic_max77686.c b/roms/u-boot/drivers/power/pmic/pmic_max77686.c new file mode 100644 index 00000000..d4c430e2 --- /dev/null +++ b/roms/u-boot/drivers/power/pmic/pmic_max77686.c @@ -0,0 +1,255 @@ +/* + *  Copyright (C) 2012 Samsung Electronics + *  Rajeshwari Shinde <rajeshwari.s@samsung.com> + * + * SPDX-License-Identifier:	GPL-2.0+ + */ + +#include <common.h> +#include <fdtdec.h> +#include <i2c.h> +#include <power/pmic.h> +#include <power/max77686_pmic.h> +#include <errno.h> + +DECLARE_GLOBAL_DATA_PTR; + +static const char max77686_buck_addr[] = { +	0xff, 0x10, 0x12, 0x1c, 0x26, 0x30, 0x32, 0x34, 0x36, 0x38 +}; + +static unsigned int max77686_ldo_volt2hex(int ldo, ulong uV) +{ +	unsigned int hex = 0; + +	switch (ldo) { +	case 1: +	case 2: +	case 6: +	case 7: +	case 8: +	case 15: +		hex = (uV - 800000) / 25000; +		break; +	default: +		hex = (uV - 800000) / 50000; +	} + +	if (hex >= 0 && hex <= MAX77686_LDO_VOLT_MAX_HEX) +		return hex; + +	debug("%s: %ld is wrong voltage value for LDO%d\n", __func__, uV, ldo); +	return 0; +} + +int max77686_set_ldo_voltage(struct pmic *p, int ldo, ulong uV) +{ +	unsigned int val, ret, hex, adr; + +	if (ldo < 1 && ldo > 26) { +		printf("%s: %d is wrong ldo number\n", __func__, ldo); +		return -1; +	} + +	adr = MAX77686_REG_PMIC_LDO1CTRL1 + ldo - 1; +	hex = max77686_ldo_volt2hex(ldo, uV); + +	if (!hex) +		return -1; + +	ret = pmic_reg_read(p, adr, &val); +	if (ret) +		return ret; + +	val &= ~MAX77686_LDO_VOLT_MASK; +	val |= hex; +	ret |= pmic_reg_write(p, adr, val); + +	return ret; +} + +int max77686_set_ldo_mode(struct pmic *p, int ldo, char opmode) +{ +	unsigned int val, ret, adr, mode; + +	if (ldo < 1 && 26 < ldo) { +		printf("%s: %d is wrong ldo number\n", __func__, ldo); +		return -1; +	} + +	adr = MAX77686_REG_PMIC_LDO1CTRL1 + ldo - 1; + +	/* mode */ +	switch (opmode) { +	case OPMODE_OFF: +		mode = MAX77686_LDO_MODE_OFF; +		break; +	case OPMODE_STANDBY: +		switch (ldo) { +		case 2: +		case 6: +		case 7: +		case 8: +		case 10: +		case 11: +		case 12: +		case 14: +		case 15: +		case 16: +			mode = MAX77686_LDO_MODE_STANDBY; +			break; +		default: +			mode = 0xff; +		} +		break; +	case OPMODE_LPM: +		mode = MAX77686_LDO_MODE_LPM; +		break; +	case OPMODE_ON: +		mode = MAX77686_LDO_MODE_ON; +		break; +	default: +		mode = 0xff; +	} + +	if (mode == 0xff) { +		printf("%s: %d is not supported on LDO%d\n", +		       __func__, opmode, ldo); +		return -1; +	} + +	ret = pmic_reg_read(p, adr, &val); +	if (ret) +		return ret; + +	val &= ~MAX77686_LDO_MODE_MASK; +	val |= mode; +	ret |= pmic_reg_write(p, adr, val); + +	return ret; +} + +int max77686_set_buck_mode(struct pmic *p, int buck, char opmode) +{ +	unsigned int val, ret, mask, adr, size, mode, mode_shift; + +	size = ARRAY_SIZE(max77686_buck_addr); +	if (buck >= size) { +		printf("%s: %d is wrong buck number\n", __func__, buck); +		return -1; +	} + +	adr = max77686_buck_addr[buck]; + +	/* mask */ +	switch (buck) { +	case 2: +	case 3: +	case 4: +		mode_shift = MAX77686_BUCK_MODE_SHIFT_2; +		break; +	default: +		mode_shift = MAX77686_BUCK_MODE_SHIFT_1; +	} + +	mask = MAX77686_BUCK_MODE_MASK << mode_shift; + +	/* mode */ +	switch (opmode) { +	case OPMODE_OFF: +		mode = MAX77686_BUCK_MODE_OFF; +		break; +	case OPMODE_STANDBY: +		switch (buck) { +		case 1: +		case 2: +		case 3: +		case 4: +			mode = MAX77686_BUCK_MODE_STANDBY << mode_shift; +			break; +		default: +			mode = 0xff; +		} +		break; +	case OPMODE_LPM: +		switch (buck) { +		case 2: +		case 3: +		case 4: +			mode = MAX77686_BUCK_MODE_LPM << mode_shift; +			break; +		default: +			mode = 0xff; +		} +		break; +	case OPMODE_ON: +		mode = MAX77686_BUCK_MODE_ON << mode_shift; +		break; +	default: +		mode = 0xff; +	} + +	if (mode == 0xff) { +		printf("%s: %d is not supported on BUCK%d\n", +		       __func__, opmode, buck); +		return -1; +	} + +	ret = pmic_reg_read(p, adr, &val); +	if (ret) +		return ret; + +	val &= ~mask; +	val |= mode; +	ret |= pmic_reg_write(p, adr, val); + +	return ret; +} + +int pmic_init(unsigned char bus) +{ +	static const char name[] = "MAX77686_PMIC"; +	struct pmic *p = pmic_alloc(); + +	if (!p) { +		printf("%s: POWER allocation error!\n", __func__); +		return -ENOMEM; +	} + +#ifdef CONFIG_OF_CONTROL +	const void *blob = gd->fdt_blob; +	int node, parent; + +	node = fdtdec_next_compatible(blob, 0, COMPAT_MAXIM_MAX77686_PMIC); +	if (node < 0) { +		debug("PMIC: No node for PMIC Chip in device tree\n"); +		debug("node = %d\n", node); +		return -1; +	} + +	parent = fdt_parent_offset(blob, node); +	if (parent < 0) { +		debug("%s: Cannot find node parent\n", __func__); +		return -1; +	} + +	p->bus = i2c_get_bus_num_fdt(parent); +	if (p->bus < 0) { +		debug("%s: Cannot find I2C bus\n", __func__); +		return -1; +	} +	p->hw.i2c.addr = fdtdec_get_int(blob, node, "reg", 9); +#else +	p->bus = bus; +	p->hw.i2c.addr = MAX77686_I2C_ADDR; +#endif + +	p->name = name; +	p->interface = PMIC_I2C; +	p->number_of_regs = PMIC_NUM_OF_REGS; +	p->hw.i2c.tx_num = 1; + +	puts("Board PMIC init\n"); + +	return 0; +} diff --git a/roms/u-boot/drivers/power/pmic/pmic_max8997.c b/roms/u-boot/drivers/power/pmic/pmic_max8997.c new file mode 100644 index 00000000..ba016923 --- /dev/null +++ b/roms/u-boot/drivers/power/pmic/pmic_max8997.c @@ -0,0 +1,107 @@ +/* + *  Copyright (C) 2012 Samsung Electronics + *  Lukasz Majewski <l.majewski@samsung.com> + * + * SPDX-License-Identifier:	GPL-2.0+ + */ + +#include <common.h> +#include <power/pmic.h> +#include <power/max8997_pmic.h> +#include <i2c.h> +#include <errno.h> + +unsigned char max8997_reg_ldo(int uV) +{ +	unsigned char ret; +	if (uV <= 800000) +		return 0; +	if (uV >= 3950000) +		return MAX8997_LDO_MAX_VAL; +	ret = (uV - 800000) / 50000; +	if (ret > MAX8997_LDO_MAX_VAL) { +		printf("MAX8997 LDO SETTING ERROR (%duV) -> %u\n", uV, ret); +		ret = MAX8997_LDO_MAX_VAL; +	} + +	return ret; +} + +static int pmic_charger_state(struct pmic *p, int state, int current) +{ +	unsigned char fc; +	u32 val = 0; + +	if (pmic_probe(p)) +		return -1; + +	if (state == CHARGER_DISABLE) { +		puts("Disable the charger.\n"); +		pmic_reg_read(p, MAX8997_REG_MBCCTRL2, &val); +		val &= ~(MBCHOSTEN | VCHGR_FC); +		pmic_reg_write(p, MAX8997_REG_MBCCTRL2, val); + +		return -1; +	} + +	if (current < CHARGER_MIN_CURRENT || current > CHARGER_MAX_CURRENT) { +		printf("%s: Wrong charge current: %d [mA]\n", +		       __func__, current); +		return -1; +	} + +	fc = (current - CHARGER_MIN_CURRENT) / CHARGER_CURRENT_RESOLUTION; +	fc = fc & 0xf; /* up to 950 mA */ + +	printf("Enable the charger @ %d [mA]\n", fc * CHARGER_CURRENT_RESOLUTION +	       + CHARGER_MIN_CURRENT); + +	val = fc | MBCICHFCSET; +	pmic_reg_write(p, MAX8997_REG_MBCCTRL4, val); + +	pmic_reg_read(p, MAX8997_REG_MBCCTRL2, &val); +	val = MBCHOSTEN | VCHGR_FC; /* enable charger & fast charge */ +	pmic_reg_write(p, MAX8997_REG_MBCCTRL2, val); + +	return 0; +} + +static int pmic_charger_bat_present(struct pmic *p) +{ +	u32 val; + +	if (pmic_probe(p)) +		return -1; + +	pmic_reg_read(p, MAX8997_REG_STATUS4, &val); + +	return !(val & DETBAT); +} + +static struct power_chrg power_chrg_pmic_ops = { +	.chrg_bat_present = pmic_charger_bat_present, +	.chrg_state = pmic_charger_state, +}; + +int pmic_init(unsigned char bus) +{ +	static const char name[] = "MAX8997_PMIC"; +	struct pmic *p = pmic_alloc(); + +	if (!p) { +		printf("%s: POWER allocation error!\n", __func__); +		return -ENOMEM; +	} + +	debug("Board PMIC init\n"); + +	p->name = name; +	p->interface = PMIC_I2C; +	p->number_of_regs = PMIC_NUM_OF_REGS; +	p->hw.i2c.addr = MAX8997_I2C_ADDR; +	p->hw.i2c.tx_num = 1; +	p->bus = bus; + +	p->chrg = &power_chrg_pmic_ops; +	return 0; +} diff --git a/roms/u-boot/drivers/power/pmic/pmic_max8998.c b/roms/u-boot/drivers/power/pmic/pmic_max8998.c new file mode 100644 index 00000000..ca2f504c --- /dev/null +++ b/roms/u-boot/drivers/power/pmic/pmic_max8998.c @@ -0,0 +1,33 @@ +/* + *  Copyright (C) 2011 Samsung Electronics + *  Lukasz Majewski <l.majewski@samsung.com> + * + * SPDX-License-Identifier:	GPL-2.0+ + */ + +#include <common.h> +#include <power/pmic.h> +#include <power/max8998_pmic.h> +#include <errno.h> + +int pmic_init(unsigned char bus) +{ +	static const char name[] = "MAX8998_PMIC"; +	struct pmic *p = pmic_alloc(); + +	if (!p) { +		printf("%s: POWER allocation error!\n", __func__); +		return -ENOMEM; +	} + +	puts("Board PMIC init\n"); + +	p->name = name; +	p->interface = PMIC_I2C; +	p->number_of_regs = PMIC_NUM_OF_REGS; +	p->hw.i2c.addr = MAX8998_I2C_ADDR; +	p->hw.i2c.tx_num = 1; +	p->bus = bus; + +	return 0; +} diff --git a/roms/u-boot/drivers/power/pmic/pmic_pfuze100.c b/roms/u-boot/drivers/power/pmic/pmic_pfuze100.c new file mode 100644 index 00000000..22c1f15e --- /dev/null +++ b/roms/u-boot/drivers/power/pmic/pmic_pfuze100.c @@ -0,0 +1,32 @@ +/* + * Copyright (C) 2014 Gateworks Corporation + * Tim Harvey <tharvey@gateworks.com> + * + * SPDX-License-Identifier:      GPL-2.0+ + */ + +#include <common.h> +#include <errno.h> +#include <i2c.h> +#include <power/pmic.h> +#include <power/pfuze100_pmic.h> + +int pmic_init(unsigned char bus) +{ +	static const char name[] = "PFUZE100_PMIC"; +	struct pmic *p = pmic_alloc(); + +	if (!p) { +		printf("%s: POWER allocation error!\n", __func__); +		return -ENOMEM; +	} + +	p->name = name; +	p->interface = PMIC_I2C; +	p->number_of_regs = PMIC_NUM_OF_REGS; +	p->hw.i2c.addr = CONFIG_POWER_PFUZE100_I2C_ADDR; +	p->hw.i2c.tx_num = 1; +	p->bus = bus; + +	return 0; +} diff --git a/roms/u-boot/drivers/power/pmic/pmic_tps65217.c b/roms/u-boot/drivers/power/pmic/pmic_tps65217.c new file mode 100644 index 00000000..36e9024b --- /dev/null +++ b/roms/u-boot/drivers/power/pmic/pmic_tps65217.c @@ -0,0 +1,109 @@ +/* + * (C) Copyright 2011-2013 + * Texas Instruments, <www.ti.com> + * + * SPDX-License-Identifier:	GPL-2.0+ + */ + +#include <common.h> +#include <i2c.h> +#include <power/tps65217.h> + +/** + * tps65217_reg_read() - Generic function that can read a TPS65217 register + * @src_reg:		 Source register address + * @src_val:		 Address of destination variable + * @return:		 0 for success, not 0 on failure. + */ +int tps65217_reg_read(uchar src_reg, uchar *src_val) +{ +	return i2c_read(TPS65217_CHIP_PM, src_reg, 1, src_val, 1); +} + +/** + *  tps65217_reg_write() - Generic function that can write a TPS65217 PMIC + *			   register or bit field regardless of protection + *			   level. + * + *  @prot_level:	   Register password protection.  Use + *			   TPS65217_PROT_LEVEL_NONE, + *			   TPS65217_PROT_LEVEL_1 or TPS65217_PROT_LEVEL_2 + *  @dest_reg:		   Register address to write. + *  @dest_val:		   Value to write. + *  @mask:		   Bit mask (8 bits) to be applied.  Function will only + *			   change bits that are set in the bit mask. + * + *  @return:		   0 for success, not 0 on failure, as per the i2c API + */ +int tps65217_reg_write(uchar prot_level, uchar dest_reg, uchar dest_val, +		       uchar mask) +{ +	uchar read_val; +	uchar xor_reg; +	int ret; + +	/* +	 * If we are affecting only a bit field, read dest_reg and apply the +	 * mask +	 */ +	if (mask != TPS65217_MASK_ALL_BITS) { +		ret = i2c_read(TPS65217_CHIP_PM, dest_reg, 1, &read_val, 1); +		if (ret) +			return ret; +		read_val &= (~mask); +		read_val |= (dest_val & mask); +		dest_val = read_val; +	} + +	if (prot_level > 0) { +		xor_reg = dest_reg ^ TPS65217_PASSWORD_UNLOCK; +		ret = i2c_write(TPS65217_CHIP_PM, TPS65217_PASSWORD, 1, +				&xor_reg, 1); +		if (ret) +			return ret; +	} + +	ret = i2c_write(TPS65217_CHIP_PM, dest_reg, 1, &dest_val, 1); +	if (ret) +		return ret; + +	if (prot_level == TPS65217_PROT_LEVEL_2) { +		ret = i2c_write(TPS65217_CHIP_PM, TPS65217_PASSWORD, 1, +				&xor_reg, 1); +		if (ret) +			return ret; + +		ret = i2c_write(TPS65217_CHIP_PM, dest_reg, 1, &dest_val, 1); +		if (ret) +			return ret; +	} + +	return 0; +} + +/** + * tps65217_voltage_update() - Function to change a voltage level, as this + *			       is a multi-step process. + * @dc_cntrl_reg:	       DC voltage control register to change. + * @volt_sel:		       New value for the voltage register + * @return:		       0 for success, not 0 on failure. + */ +int tps65217_voltage_update(uchar dc_cntrl_reg, uchar volt_sel) +{ +	if ((dc_cntrl_reg != TPS65217_DEFDCDC1) && +	    (dc_cntrl_reg != TPS65217_DEFDCDC2) && +	    (dc_cntrl_reg != TPS65217_DEFDCDC3)) +		return 1; + +	/* set voltage level */ +	if (tps65217_reg_write(TPS65217_PROT_LEVEL_2, dc_cntrl_reg, volt_sel, +			       TPS65217_MASK_ALL_BITS)) +		return 1; + +	/* set GO bit to initiate voltage transition */ +	if (tps65217_reg_write(TPS65217_PROT_LEVEL_2, TPS65217_DEFSLEW, +			       TPS65217_DCDC_GO, TPS65217_DCDC_GO)) +		return 1; + +	return 0; +} diff --git a/roms/u-boot/drivers/power/pmic/pmic_tps65910.c b/roms/u-boot/drivers/power/pmic/pmic_tps65910.c new file mode 100644 index 00000000..7ee1160e --- /dev/null +++ b/roms/u-boot/drivers/power/pmic/pmic_tps65910.c @@ -0,0 +1,83 @@ +/* + * (C) Copyright 2011-2013 + * Texas Instruments, <www.ti.com> + * + * SPDX-License-Identifier:	GPL-2.0+ + */ + +#include <common.h> +#include <i2c.h> +#include <power/tps65910.h> + +/* + * tps65910_set_i2c_control() - Set the TPS65910 to be controlled via the I2C + * 				interface. + * @return:		       0 on success, not 0 on failure + */ +int tps65910_set_i2c_control(void) +{ +	int ret; +	uchar buf; + +	/* VDD1/2 voltage selection register access by control i/f */ +	ret = i2c_read(TPS65910_CTRL_I2C_ADDR, TPS65910_DEVCTRL_REG, 1, +		       &buf, 1); + +	if (ret) +		return ret; + +	buf |= TPS65910_DEVCTRL_REG_SR_CTL_I2C_SEL_CTL_I2C; + +	return i2c_write(TPS65910_CTRL_I2C_ADDR, TPS65910_DEVCTRL_REG, 1, +			 &buf, 1); +} + +/* + * tps65910_voltage_update() - Voltage switching for MPU frequency switching. + * @module:		       mpu - 0, core - 1 + * @vddx_op_vol_sel:	       vdd voltage to set + * @return:		       0 on success, not 0 on failure + */ +int tps65910_voltage_update(unsigned int module, unsigned char vddx_op_vol_sel) +{ +	uchar buf; +	unsigned int reg_offset; +	int ret; + +	if (module == MPU) +		reg_offset = TPS65910_VDD1_OP_REG; +	else +		reg_offset = TPS65910_VDD2_OP_REG; + +	/* Select VDDx OP   */ +	ret = i2c_read(TPS65910_CTRL_I2C_ADDR, reg_offset, 1, &buf, 1); +	if (ret) +		return ret; + +	buf &= ~TPS65910_OP_REG_CMD_MASK; + +	ret = i2c_write(TPS65910_CTRL_I2C_ADDR, reg_offset, 1, &buf, 1); +	if (ret) +		return ret; + +	/* Configure VDDx OP  Voltage */ +	ret = i2c_read(TPS65910_CTRL_I2C_ADDR, reg_offset, 1, &buf, 1); +	if (ret) +		return ret; + +	buf &= ~TPS65910_OP_REG_SEL_MASK; +	buf |= vddx_op_vol_sel; + +	ret = i2c_write(TPS65910_CTRL_I2C_ADDR, reg_offset, 1, &buf, 1); +	if (ret) +		return ret; + +	ret = i2c_read(TPS65910_CTRL_I2C_ADDR, reg_offset, 1, &buf, 1); +	if (ret) +		return ret; + +	if ((buf & TPS65910_OP_REG_SEL_MASK) != vddx_op_vol_sel) +		return 1; + +	return 0; +}  | 
