coreboot
coreboot is an Open Source project aimed at replacing the proprietary BIOS found in most computers.
pmic.c
Go to the documentation of this file.
1 /* SPDX-License-Identifier: GPL-2.0-only */
2 
3 #include <console/console.h>
4 #include <delay.h>
5 #include <device/i2c_simple.h>
6 #include <reset.h>
7 #include <stdint.h>
8 
9 #include "pmic.h"
10 
11 enum {
15 };
16 
17 struct max77620_init_reg {
18  u8 reg;
19  u8 val;
20  u8 delay;
21 };
22 
23 static void pmic_write_reg(unsigned int bus, uint8_t chip, uint8_t reg, uint8_t val,
24  int delay)
25 {
26  if (i2c_writeb(bus, chip, reg, val)) {
27  printk(BIOS_ERR, "%s: reg = 0x%02X, value = 0x%02X failed!\n",
28  __func__, reg, val);
29  /* Reset the board on any PMIC write error */
30  board_reset();
31  } else {
32  if (delay)
33  udelay(500);
34  }
35 }
36 
37 void pmic_write_reg_77620(unsigned int bus, uint8_t reg, uint8_t val,
38  int delay)
39 {
41 }
42 
43 static inline void pmic_write_reg_77621(unsigned int bus, uint8_t reg, uint8_t val,
44  int delay)
45 {
47 }
48 
49 void pmic_init(unsigned int bus)
50 {
51  /* MAX77620: Set SD0 to 1.0V - VDD_CORE */
54 
55  /* MAX77620: GPIO 0,1,2,5,6,7 = GPIO, 3,4 = alt mode */
57 
58  /* MAX77620: Disable SD1 Remote Sense, Set SD1 for LPDDR4 to 1.125V */
61 
62  /*
63  * MAX77620: Set LDO2 output to 1.8V. LDO2 is used as always-on
64  * reference for the droop alert circuit. Match this setting with what
65  * the kernel expects.
66  */
68 
69  /* MAX77621: Set VOUT_REG to 1.0V - CPU VREG */
71 
72  /* MAX77621: Set VOUT_DVC_REG to 1.0V - CPU VREG DVC */
74 
75  /* MAX77621: Set CONTROL1 to 0x38 */
77 
78  /* MAX77621: Set CONTROL2 to 0xD2 */
80 
81  /* MAX77620: Setup/Enable GPIO5 - EN_VDD_CPU */
83 
84  /* Required delay of 2msec */
85  udelay(2000);
86 
87  printk(BIOS_DEBUG, "PMIC init done\n");
88 }
#define printk(level,...)
Definition: stdlib.h:16
void delay(unsigned int secs)
Definition: delay.c:8
@ MAX77620_I2C_ADDR
Definition: pmic.c:12
void pmic_init(unsigned int bus)
Definition: pmic.c:34
#define MAX77620_SD0_REG
Definition: pmic.h:6
#define MAX77620_GPIO5_REG
Definition: pmic.h:37
#define MAX77620_CNFG1_L2_REG
Definition: pmic.h:16
#define MAX77620_CNFG2SD_REG
Definition: pmic.h:10
#define MAX77620_AME_GPIO
Definition: pmic.h:43
#define MAX77620_SD1_REG
Definition: pmic.h:7
static struct tpm_chip chip
Definition: tis.c:17
static int i2c_writeb(unsigned int bus, uint8_t slave, uint8_t reg, uint8_t data)
Write a byte with one segment in one frame.
Definition: i2c_simple.h:131
__noreturn void board_reset(void)
Definition: reset.c:8
#define BIOS_DEBUG
BIOS_DEBUG - Verbose output.
Definition: loglevel.h:128
#define BIOS_ERR
BIOS_ERR - System in incomplete state.
Definition: loglevel.h:72
static void pmic_write_reg_77621(unsigned int bus, uint8_t reg, uint8_t val, int delay)
Definition: pmic.c:43
static void pmic_write_reg(unsigned int bus, uint8_t chip, uint8_t reg, uint8_t val, int delay)
Definition: pmic.c:23
void pmic_write_reg_77620(unsigned int bus, uint8_t reg, uint8_t val, int delay)
Definition: pmic.c:37
@ MAX77621_GPU_I2C_ADDR
Definition: pmic.c:14
@ MAX77621_CPU_I2C_ADDR
Definition: pmic.c:13
#define MAX77621_CONTROL2_REG
Definition: pmic.h:60
#define MAX77621_VOUT_REG
Definition: pmic.h:57
#define MAX77620_VDVSSD0_REG
Definition: pmic.h:12
#define MAX77621_VOUT_DVC_REG
Definition: pmic.h:58
#define MAX77621_CONTROL1_REG
Definition: pmic.h:59
uint8_t u8
Definition: stdint.h:45
unsigned char uint8_t
Definition: stdint.h:8
Definition: device.h:76
u8 val
Definition: sys.c:300
void udelay(uint32_t us)
Definition: udelay.c:15