xref: /rk3399_rockchip-uboot/drivers/power/pmic/pmic_tps62362.c (revision 1221ce459d04a428f8880f58581f671b736c3c27)
178fb6e31SFelipe Balbi /*
278fb6e31SFelipe Balbi  * (C) Copyright 2014 Texas Instruments Incorporated -  http://www.ti.com
378fb6e31SFelipe Balbi  * Author: Felipe Balbi <balbi@ti.com>
478fb6e31SFelipe Balbi  *
578fb6e31SFelipe Balbi  * SPDX-License-Identifier:	GPL-2.0+
678fb6e31SFelipe Balbi  */
778fb6e31SFelipe Balbi 
878fb6e31SFelipe Balbi #include <common.h>
978fb6e31SFelipe Balbi #include <i2c.h>
10*1221ce45SMasahiro Yamada #include <linux/errno.h>
1178fb6e31SFelipe Balbi #include <power/pmic.h>
1278fb6e31SFelipe Balbi #include <power/tps62362.h>
1378fb6e31SFelipe Balbi 
1478fb6e31SFelipe Balbi /**
1578fb6e31SFelipe Balbi  * tps62362_voltage_update() - Function to change a voltage level, as this
1678fb6e31SFelipe Balbi  *			       is a multi-step process.
1778fb6e31SFelipe Balbi  * @reg:	Register address to write to
1878fb6e31SFelipe Balbi  * @volt_sel:	Voltage register value to write
1978fb6e31SFelipe Balbi  * @return:	0 on success, 1 on failure
2078fb6e31SFelipe Balbi  */
tps62362_voltage_update(unsigned char reg,unsigned char volt_sel)2178fb6e31SFelipe Balbi int tps62362_voltage_update(unsigned char reg, unsigned char volt_sel)
2278fb6e31SFelipe Balbi {
2378fb6e31SFelipe Balbi 	if (reg > TPS62362_NUM_REGS)
2478fb6e31SFelipe Balbi 		return 1;
2578fb6e31SFelipe Balbi 
2678fb6e31SFelipe Balbi 	return i2c_write(TPS62362_I2C_ADDR, reg, 1, &volt_sel, 1);
2778fb6e31SFelipe Balbi }
2878fb6e31SFelipe Balbi 
power_tps62362_init(unsigned char bus)2978fb6e31SFelipe Balbi int power_tps62362_init(unsigned char bus)
3078fb6e31SFelipe Balbi {
3178fb6e31SFelipe Balbi 	static const char name[] = "TPS62362";
3278fb6e31SFelipe Balbi 	struct pmic *p = pmic_alloc();
3378fb6e31SFelipe Balbi 
3478fb6e31SFelipe Balbi 	if (!p) {
3578fb6e31SFelipe Balbi 		printf("%s: POWER allocation error!\n", __func__);
3678fb6e31SFelipe Balbi 		return -ENOMEM;
3778fb6e31SFelipe Balbi 	}
3878fb6e31SFelipe Balbi 
3978fb6e31SFelipe Balbi 	p->name = name;
4078fb6e31SFelipe Balbi 	p->interface = PMIC_I2C;
4178fb6e31SFelipe Balbi 	p->number_of_regs = TPS62362_NUM_REGS;
4278fb6e31SFelipe Balbi 	p->hw.i2c.addr = TPS62362_I2C_ADDR;
4378fb6e31SFelipe Balbi 	p->hw.i2c.tx_num = 1;
4478fb6e31SFelipe Balbi 	p->bus = bus;
4578fb6e31SFelipe Balbi 
4678fb6e31SFelipe Balbi 	return 0;
4778fb6e31SFelipe Balbi }
48