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
{
8
DA9212_SLAVE_ADDR
= 0x68,
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
,
21
DA9212_REG_PAGE_CON
,
DA9212_REG_PAGE0
,
22
DA9212_REG_PAGE_MASK
,
DA9212_REG_PAGE_SHIFT
);
23
24
ret |=
i2c_write_field
(i2c_num,
DA9212_SLAVE_ADDR
,
25
DA9212_REG_BUCKA_CONT
,
DA9212_BUCK_GPI_GPIO1
,
26
DA9212_BUCK_GPI_MASK
,
DA9212_BUCK_GPI_SHIFT
);
27
28
ret |=
i2c_write_field
(i2c_num,
DA9212_SLAVE_ADDR
,
29
DA9212_REG_BUCKB_CONT
,
DA9212_BUCK_GPI_OFF
,
30
DA9212_BUCK_GPI_OFF
,
DA9212_BUCK_GPI_SHIFT
);
31
32
ret |=
i2c_write_field
(i2c_num,
DA9212_SLAVE_ADDR
,
33
DA9212_REG_BUCKA_CONT
,
DA9212_VBUCK_SEL_A
,
34
DA9212_VBUCK_SEL_MASK
,
DA9212_VBUCK_SEL_SHIFT
);
35
36
ret |=
i2c_write_field
(i2c_num,
DA9212_SLAVE_ADDR
,
37
DA9212_REG_BUCKB_CONT
,
DA9212_VBUCK_SEL_A
,
38
DA9212_VBUCK_SEL_MASK
,
DA9212_VBUCK_SEL_SHIFT
);
39
40
ret |=
i2c_write_field
(i2c_num,
DA9212_SLAVE_ADDR
,
41
DA9212_REG_BUCKA_CONF
, buck_mode,
42
DA9212_BUCK_MODE_MASK
,
DA9212_BUCK_MODE_SHIFT
);
43
44
ret |=
i2c_write_field
(i2c_num,
DA9212_SLAVE_ADDR
,
45
DA9212_REG_BUCKB_CONF
, buck_mode,
46
DA9212_BUCK_MODE_MASK
,
DA9212_BUCK_MODE_SHIFT
);
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
,
61
DA9212_REG_PAGE_CON
,
DA9212_REG_PAGE4
,
62
0xF,
DA9212_REG_PAGE_SHIFT
);
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
}
printk
#define printk(level,...)
Definition:
stdlib.h:16
console.h
DA9212_SLAVE_ADDR
@ DA9212_SLAVE_ADDR
Definition:
da9212.c:8
da9212_hw_init
static void da9212_hw_init(uint8_t i2c_num, unsigned char variant_id)
Definition:
da9212.c:11
da9212_probe
void da9212_probe(uint8_t i2c_num)
Definition:
da9212.c:53
da9212.h
DA9212_BUCK_GPI_SHIFT
@ DA9212_BUCK_GPI_SHIFT
Definition:
da9212.h:41
DA9212_BUCK_GPI_OFF
@ DA9212_BUCK_GPI_OFF
Definition:
da9212.h:43
DA9212_VBUCK_SEL_A
@ DA9212_VBUCK_SEL_A
Definition:
da9212.h:49
DA9212_BUCK_GPI_MASK
@ DA9212_BUCK_GPI_MASK
Definition:
da9212.h:42
DA9212_VBUCK_SEL_MASK
@ DA9212_VBUCK_SEL_MASK
Definition:
da9212.h:48
DA9212_BUCK_GPI_GPIO1
@ DA9212_BUCK_GPI_GPIO1
Definition:
da9212.h:45
DA9212_VBUCK_SEL_SHIFT
@ DA9212_VBUCK_SEL_SHIFT
Definition:
da9212.h:47
DA9212_BUCK_MODE_AUTO
@ DA9212_BUCK_MODE_AUTO
Definition:
da9212.h:60
DA9212_BUCK_MODE_SHIFT
@ DA9212_BUCK_MODE_SHIFT
Definition:
da9212.h:55
DA9212_BUCK_MODE_MASK
@ DA9212_BUCK_MODE_MASK
Definition:
da9212.h:56
DA9212_BUCK_MODE_PWM
@ DA9212_BUCK_MODE_PWM
Definition:
da9212.h:59
DA9212_REG_PAGE0
@ DA9212_REG_PAGE0
Definition:
da9212.h:28
DA9212_REG_PAGE4
@ DA9212_REG_PAGE4
Definition:
da9212.h:30
DA9212_REG_BUCKA_CONF
@ DA9212_REG_BUCKA_CONF
Definition:
da9212.h:17
DA9212_REG_BUCKA_CONT
@ DA9212_REG_BUCKA_CONT
Definition:
da9212.h:15
DA9212_REG_PAGE_CON
@ DA9212_REG_PAGE_CON
Definition:
da9212.h:12
DA9212_REG_BUCKB_CONT
@ DA9212_REG_BUCKB_CONT
Definition:
da9212.h:16
DA9212_REG_BUCKB_CONF
@ DA9212_REG_BUCKB_CONF
Definition:
da9212.h:18
DA9212_REG_PAGE_SHIFT
@ DA9212_REG_PAGE_SHIFT
Definition:
da9212.h:23
DA9212_REG_PAGE_MASK
@ DA9212_REG_PAGE_MASK
Definition:
da9212.h:24
DA9212_REG_VARIANT_ID
@ DA9212_REG_VARIANT_ID
Definition:
da9212.h:69
DA9212_ID
@ DA9212_ID
Definition:
da9212.h:67
DA9212_REG_DEVICE_ID
@ DA9212_REG_DEVICE_ID
Definition:
da9212.h:66
DA9212_VARIANT_ID_AB
@ DA9212_VARIANT_ID_AB
Definition:
da9212.h:70
i2c_read_field
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
i2c_write_field
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
i2c_simple.h
BIOS_INFO
#define BIOS_INFO
BIOS_INFO - Expected events.
Definition:
loglevel.h:113
BIOS_ERR
#define BIOS_ERR
BIOS_ERR - System in incomplete state.
Definition:
loglevel.h:72
uint8_t
unsigned char uint8_t
Definition:
stdint.h:8
src
soc
mediatek
mt8173
da9212.c
Generated by
1.9.1