xref: /rk3399_rockchip-uboot/drivers/power/mfd/muic_max77693.c (revision 4fa7613c50069b6821ace02b11a24b46dcbbec5e)
1*04750447SPiotr Wilczek /*
2*04750447SPiotr Wilczek  * Copyright (C) 2013 Samsung Electronics
3*04750447SPiotr Wilczek  * Piotr Wilczek <p.wilczek@samsung.com>
4*04750447SPiotr Wilczek  *
5*04750447SPiotr Wilczek  * SPDX-License-Identifier:	GPL-2.0+
6*04750447SPiotr Wilczek  */
7*04750447SPiotr Wilczek 
8*04750447SPiotr Wilczek #include <common.h>
9*04750447SPiotr Wilczek #include <power/pmic.h>
10*04750447SPiotr Wilczek #include <power/power_chrg.h>
11*04750447SPiotr Wilczek #include <power/max77693_muic.h>
12*04750447SPiotr Wilczek #include <i2c.h>
13*04750447SPiotr Wilczek #include <errno.h>
14*04750447SPiotr Wilczek 
power_chrg_get_type(struct pmic * p)15*04750447SPiotr Wilczek static int power_chrg_get_type(struct pmic *p)
16*04750447SPiotr Wilczek {
17*04750447SPiotr Wilczek 	unsigned int val;
18*04750447SPiotr Wilczek 	unsigned int charge_type, charger;
19*04750447SPiotr Wilczek 
20*04750447SPiotr Wilczek 	/* if probe failed, return cable none */
21*04750447SPiotr Wilczek 	if (pmic_probe(p))
22*04750447SPiotr Wilczek 		return CHARGER_NO;
23*04750447SPiotr Wilczek 
24*04750447SPiotr Wilczek 	pmic_reg_read(p, MAX77693_MUIC_STATUS2, &val);
25*04750447SPiotr Wilczek 
26*04750447SPiotr Wilczek 	charge_type = val & MAX77693_MUIC_CHG_MASK;
27*04750447SPiotr Wilczek 
28*04750447SPiotr Wilczek 	switch (charge_type) {
29*04750447SPiotr Wilczek 	case MAX77693_MUIC_CHG_NO:
30*04750447SPiotr Wilczek 		charger = CHARGER_NO;
31*04750447SPiotr Wilczek 		break;
32*04750447SPiotr Wilczek 	case MAX77693_MUIC_CHG_USB:
33*04750447SPiotr Wilczek 	case MAX77693_MUIC_CHG_USB_D:
34*04750447SPiotr Wilczek 		charger = CHARGER_USB;
35*04750447SPiotr Wilczek 		break;
36*04750447SPiotr Wilczek 	case MAX77693_MUIC_CHG_TA:
37*04750447SPiotr Wilczek 	case MAX77693_MUIC_CHG_TA_1A:
38*04750447SPiotr Wilczek 		charger = CHARGER_TA;
39*04750447SPiotr Wilczek 		break;
40*04750447SPiotr Wilczek 	case MAX77693_MUIC_CHG_TA_500:
41*04750447SPiotr Wilczek 		charger = CHARGER_TA_500;
42*04750447SPiotr Wilczek 		break;
43*04750447SPiotr Wilczek 	default:
44*04750447SPiotr Wilczek 		charger = CHARGER_UNKNOWN;
45*04750447SPiotr Wilczek 		break;
46*04750447SPiotr Wilczek 	}
47*04750447SPiotr Wilczek 
48*04750447SPiotr Wilczek 	return charger;
49*04750447SPiotr Wilczek }
50*04750447SPiotr Wilczek 
51*04750447SPiotr Wilczek static struct power_chrg power_chrg_muic_ops = {
52*04750447SPiotr Wilczek 	.chrg_type = power_chrg_get_type,
53*04750447SPiotr Wilczek };
54*04750447SPiotr Wilczek 
power_muic_init(unsigned int bus)55*04750447SPiotr Wilczek int power_muic_init(unsigned int bus)
56*04750447SPiotr Wilczek {
57*04750447SPiotr Wilczek 	static const char name[] = "MAX77693_MUIC";
58*04750447SPiotr Wilczek 	struct pmic *p = pmic_alloc();
59*04750447SPiotr Wilczek 
60*04750447SPiotr Wilczek 	if (!p) {
61*04750447SPiotr Wilczek 		printf("%s: POWER allocation error!\n", __func__);
62*04750447SPiotr Wilczek 		return -ENOMEM;
63*04750447SPiotr Wilczek 	}
64*04750447SPiotr Wilczek 
65*04750447SPiotr Wilczek 	debug("Board Micro USB Interface Controller init\n");
66*04750447SPiotr Wilczek 
67*04750447SPiotr Wilczek 	p->name = name;
68*04750447SPiotr Wilczek 	p->interface = PMIC_I2C;
69*04750447SPiotr Wilczek 	p->number_of_regs = MUIC_NUM_OF_REGS;
70*04750447SPiotr Wilczek 	p->hw.i2c.addr = MAX77693_MUIC_I2C_ADDR;
71*04750447SPiotr Wilczek 	p->hw.i2c.tx_num = 1;
72*04750447SPiotr Wilczek 	p->bus = bus;
73*04750447SPiotr Wilczek 
74*04750447SPiotr Wilczek 	p->chrg = &power_chrg_muic_ops;
75*04750447SPiotr Wilczek 
76*04750447SPiotr Wilczek 	return 0;
77*04750447SPiotr Wilczek }
78