2 * Copyright (C) 2012 Samsung Electronics
3 * Lukasz Majewski <l.majewski@samsung.com>
5 * SPDX-License-Identifier: GPL-2.0+
9 #include <power/pmic.h>
10 #include <power/max8997_pmic.h>
14 unsigned char max8997_reg_ldo(int uV
)
20 return MAX8997_LDO_MAX_VAL
;
21 ret
= (uV
- 800000) / 50000;
22 if (ret
> MAX8997_LDO_MAX_VAL
) {
23 printf("MAX8997 LDO SETTING ERROR (%duV) -> %u\n", uV
, ret
);
24 ret
= MAX8997_LDO_MAX_VAL
;
30 static int pmic_charger_state(struct pmic
*p
, int state
, int current
)
38 if (state
== CHARGER_DISABLE
) {
39 puts("Disable the charger.\n");
40 pmic_reg_read(p
, MAX8997_REG_MBCCTRL2
, &val
);
41 val
&= ~(MBCHOSTEN
| VCHGR_FC
);
42 pmic_reg_write(p
, MAX8997_REG_MBCCTRL2
, val
);
47 if (current
< CHARGER_MIN_CURRENT
|| current
> CHARGER_MAX_CURRENT
) {
48 printf("%s: Wrong charge current: %d [mA]\n",
53 fc
= (current
- CHARGER_MIN_CURRENT
) / CHARGER_CURRENT_RESOLUTION
;
54 fc
= fc
& 0xf; /* up to 950 mA */
56 printf("Enable the charger @ %d [mA]\n", fc
* CHARGER_CURRENT_RESOLUTION
57 + CHARGER_MIN_CURRENT
);
59 val
= fc
| MBCICHFCSET
;
60 pmic_reg_write(p
, MAX8997_REG_MBCCTRL4
, val
);
62 pmic_reg_read(p
, MAX8997_REG_MBCCTRL2
, &val
);
63 val
= MBCHOSTEN
| VCHGR_FC
; /* enable charger & fast charge */
64 pmic_reg_write(p
, MAX8997_REG_MBCCTRL2
, val
);
69 static int pmic_charger_bat_present(struct pmic
*p
)
76 pmic_reg_read(p
, MAX8997_REG_STATUS4
, &val
);
78 return !(val
& DETBAT
);
81 static struct power_chrg power_chrg_pmic_ops
= {
82 .chrg_bat_present
= pmic_charger_bat_present
,
83 .chrg_state
= pmic_charger_state
,
86 int pmic_init(unsigned char bus
)
88 static const char name
[] = "MAX8997_PMIC";
89 struct pmic
*p
= pmic_alloc();
92 printf("%s: POWER allocation error!\n", __func__
);
96 debug("Board PMIC init\n");
99 p
->interface
= PMIC_I2C
;
100 p
->number_of_regs
= PMIC_NUM_OF_REGS
;
101 p
->hw
.i2c
.addr
= MAX8997_I2C_ADDR
;
102 p
->hw
.i2c
.tx_num
= 1;
105 p
->chrg
= &power_chrg_pmic_ops
;