xref: /rk3399_rockchip-uboot/drivers/power/pmic/muic_max8997.c (revision 326ea986ac150acdc7656d57fca647db80b50158)
1294a97daSŁukasz Majewski /*
2294a97daSŁukasz Majewski  *  Copyright (C) 2012 Samsung Electronics
3294a97daSŁukasz Majewski  *  Lukasz Majewski <l.majewski@samsung.com>
4294a97daSŁukasz Majewski  *
5*1a459660SWolfgang Denk  * SPDX-License-Identifier:	GPL-2.0+
6294a97daSŁukasz Majewski  */
7294a97daSŁukasz Majewski 
8294a97daSŁukasz Majewski #include <common.h>
9294a97daSŁukasz Majewski #include <power/pmic.h>
10294a97daSŁukasz Majewski #include <power/power_chrg.h>
11294a97daSŁukasz Majewski #include <power/max8997_muic.h>
12294a97daSŁukasz Majewski #include <i2c.h>
13294a97daSŁukasz Majewski #include <errno.h>
14294a97daSŁukasz Majewski 
power_chrg_get_type(struct pmic * p)15294a97daSŁukasz Majewski static int power_chrg_get_type(struct pmic *p)
16294a97daSŁukasz Majewski {
17294a97daSŁukasz Majewski 	unsigned int val;
18294a97daSŁukasz Majewski 	unsigned char charge_type, charger;
19294a97daSŁukasz Majewski 
20294a97daSŁukasz Majewski 	if (pmic_probe(p))
21294a97daSŁukasz Majewski 		return CHARGER_NO;
22294a97daSŁukasz Majewski 
23294a97daSŁukasz Majewski 	pmic_reg_read(p, MAX8997_MUIC_STATUS2, &val);
24294a97daSŁukasz Majewski 	charge_type = val & MAX8997_MUIC_CHG_MASK;
25294a97daSŁukasz Majewski 
26294a97daSŁukasz Majewski 	switch (charge_type) {
27294a97daSŁukasz Majewski 	case MAX8997_MUIC_CHG_NO:
28294a97daSŁukasz Majewski 		charger = CHARGER_NO;
29294a97daSŁukasz Majewski 		break;
30294a97daSŁukasz Majewski 	case MAX8997_MUIC_CHG_USB:
31294a97daSŁukasz Majewski 	case MAX8997_MUIC_CHG_USB_D:
32294a97daSŁukasz Majewski 		charger = CHARGER_USB;
33294a97daSŁukasz Majewski 		break;
34294a97daSŁukasz Majewski 	case MAX8997_MUIC_CHG_TA:
35294a97daSŁukasz Majewski 	case MAX8997_MUIC_CHG_TA_1A:
36294a97daSŁukasz Majewski 		charger = CHARGER_TA;
37294a97daSŁukasz Majewski 		break;
38294a97daSŁukasz Majewski 	case MAX8997_MUIC_CHG_TA_500:
39294a97daSŁukasz Majewski 		charger = CHARGER_TA_500;
40294a97daSŁukasz Majewski 		break;
41294a97daSŁukasz Majewski 	default:
42294a97daSŁukasz Majewski 		charger = CHARGER_UNKNOWN;
43294a97daSŁukasz Majewski 		break;
44294a97daSŁukasz Majewski 	}
45294a97daSŁukasz Majewski 
46294a97daSŁukasz Majewski 	return charger;
47294a97daSŁukasz Majewski }
48294a97daSŁukasz Majewski 
49294a97daSŁukasz Majewski static struct power_chrg power_chrg_muic_ops = {
50294a97daSŁukasz Majewski 	.chrg_type = power_chrg_get_type,
51294a97daSŁukasz Majewski };
52294a97daSŁukasz Majewski 
power_muic_init(unsigned int bus)53294a97daSŁukasz Majewski int power_muic_init(unsigned int bus)
54294a97daSŁukasz Majewski {
55294a97daSŁukasz Majewski 	static const char name[] = "MAX8997_MUIC";
56294a97daSŁukasz Majewski 	struct pmic *p = pmic_alloc();
57294a97daSŁukasz Majewski 
58294a97daSŁukasz Majewski 	if (!p) {
59294a97daSŁukasz Majewski 		printf("%s: POWER allocation error!\n", __func__);
60294a97daSŁukasz Majewski 		return -ENOMEM;
61294a97daSŁukasz Majewski 	}
62294a97daSŁukasz Majewski 
63294a97daSŁukasz Majewski 	debug("Board Micro USB Interface Controller init\n");
64294a97daSŁukasz Majewski 
65294a97daSŁukasz Majewski 	p->name = name;
66294a97daSŁukasz Majewski 	p->interface = PMIC_I2C;
67294a97daSŁukasz Majewski 	p->number_of_regs = MUIC_NUM_OF_REGS;
68294a97daSŁukasz Majewski 	p->hw.i2c.addr = MAX8997_MUIC_I2C_ADDR;
69294a97daSŁukasz Majewski 	p->hw.i2c.tx_num = 1;
70294a97daSŁukasz Majewski 	p->bus = bus;
71294a97daSŁukasz Majewski 
72294a97daSŁukasz Majewski 	p->chrg = &power_chrg_muic_ops;
73294a97daSŁukasz Majewski 	return 0;
74294a97daSŁukasz Majewski }
75