coreboot
coreboot is an Open Source project aimed at replacing the proprietary BIOS found in most computers.
da9212.c
Go to the documentation of this file.
1 /* SPDX-License-Identifier: GPL-2.0-only */
2 
3 #include <console/console.h>
4 #include <device/i2c_simple.h>
5 #include <soc/da9212.h>
6 
7 enum {
9 };
10 
11 static void da9212_hw_init(uint8_t i2c_num, unsigned char variant_id)
12 {
13  int ret = 0;
14  int buck_mode = DA9212_BUCK_MODE_AUTO;
15 
16  if (variant_id == DA9212_VARIANT_ID_AB)
17  buck_mode = DA9212_BUCK_MODE_PWM;
18 
19  /* page select to 0 */
20  ret |= i2c_write_field(i2c_num, DA9212_SLAVE_ADDR,
23 
24  ret |= i2c_write_field(i2c_num, DA9212_SLAVE_ADDR,
27 
28  ret |= i2c_write_field(i2c_num, DA9212_SLAVE_ADDR,
31 
32  ret |= i2c_write_field(i2c_num, DA9212_SLAVE_ADDR,
35 
36  ret |= i2c_write_field(i2c_num, DA9212_SLAVE_ADDR,
39 
40  ret |= i2c_write_field(i2c_num, DA9212_SLAVE_ADDR,
41  DA9212_REG_BUCKA_CONF, buck_mode,
43 
44  ret |= i2c_write_field(i2c_num, DA9212_SLAVE_ADDR,
45  DA9212_REG_BUCKB_CONF, buck_mode,
47 
48  if (ret)
49  printk(BIOS_ERR, "%s failed\n", __func__);
50 
51 }
52 
53 void da9212_probe(uint8_t i2c_num)
54 {
55  int ret = 0;
56  unsigned char device_id = 0;
57  unsigned char variant_id = 0;
58 
59  /* select to page 4, clear REVERT at first time */
60  ret |= i2c_write_field(i2c_num, DA9212_SLAVE_ADDR,
63 
64  ret |= i2c_read_field(i2c_num, DA9212_SLAVE_ADDR,
65  DA9212_REG_DEVICE_ID, &device_id,
66  0xFF, 0);
67 
68  ret |= i2c_read_field(i2c_num, DA9212_SLAVE_ADDR,
69  DA9212_REG_VARIANT_ID, &variant_id,
70  0xFF, 0);
71 
72  printk(BIOS_INFO, "%s: device ID = %#x, variant ID = %#x\n", __func__,
73  device_id, variant_id);
74 
75  /* Check device ID is DA9212 */
76  if (device_id != DA9212_ID || ret) {
77  printk(BIOS_ERR, "unknown DA9212 device_id\n");
78  return;
79  }
80 
81  da9212_hw_init(i2c_num, variant_id);
82 }
#define printk(level,...)
Definition: stdlib.h:16
@ DA9212_SLAVE_ADDR
Definition: da9212.c:8
static void da9212_hw_init(uint8_t i2c_num, unsigned char variant_id)
Definition: da9212.c:11
void da9212_probe(uint8_t i2c_num)
Definition: da9212.c:53
@ DA9212_BUCK_GPI_SHIFT
Definition: da9212.h:41
@ DA9212_BUCK_GPI_OFF
Definition: da9212.h:43
@ DA9212_VBUCK_SEL_A
Definition: da9212.h:49
@ DA9212_BUCK_GPI_MASK
Definition: da9212.h:42
@ DA9212_VBUCK_SEL_MASK
Definition: da9212.h:48
@ DA9212_BUCK_GPI_GPIO1
Definition: da9212.h:45
@ DA9212_VBUCK_SEL_SHIFT
Definition: da9212.h:47
@ DA9212_BUCK_MODE_AUTO
Definition: da9212.h:60
@ DA9212_BUCK_MODE_SHIFT
Definition: da9212.h:55
@ DA9212_BUCK_MODE_MASK
Definition: da9212.h:56
@ DA9212_BUCK_MODE_PWM
Definition: da9212.h:59
@ DA9212_REG_PAGE0
Definition: da9212.h:28
@ DA9212_REG_PAGE4
Definition: da9212.h:30
@ DA9212_REG_BUCKA_CONF
Definition: da9212.h:17
@ DA9212_REG_BUCKA_CONT
Definition: da9212.h:15
@ DA9212_REG_PAGE_CON
Definition: da9212.h:12
@ DA9212_REG_BUCKB_CONT
Definition: da9212.h:16
@ DA9212_REG_BUCKB_CONF
Definition: da9212.h:18
@ DA9212_REG_PAGE_SHIFT
Definition: da9212.h:23
@ DA9212_REG_PAGE_MASK
Definition: da9212.h:24
@ DA9212_REG_VARIANT_ID
Definition: da9212.h:69
@ DA9212_ID
Definition: da9212.h:67
@ DA9212_REG_DEVICE_ID
Definition: da9212.h:66
@ DA9212_VARIANT_ID_AB
Definition: da9212.h:70
int i2c_read_field(unsigned int bus, uint8_t chip, uint8_t reg, uint8_t *data, uint8_t mask, uint8_t shift)
Definition: i2c.c:6
int i2c_write_field(unsigned int bus, uint8_t chip, uint8_t reg, uint8_t data, uint8_t mask, uint8_t shift)
Definition: i2c.c:20
#define BIOS_INFO
BIOS_INFO - Expected events.
Definition: loglevel.h:113
#define BIOS_ERR
BIOS_ERR - System in incomplete state.
Definition: loglevel.h:72
unsigned char uint8_t
Definition: stdint.h:8