11
#include <drivers/common/memory.h>
14
#include <drivers/clk/ccm_imx6.h>
15
#include <drivers/iomuxc.h>
17
#include <framework/mod/options.h>
18
#include <embox/unit.h>
20
EMBOX_UNIT_INIT(ldb_init);
22
#define LDB_CTRL OPTION_GET(NUMBER,base_addr)
23
#define DATA_WIDTH OPTION_GET(NUMBER,data_width)
25
#define LDB_CH0_OFF 0x0
26
#define LDB_CH0_DI0 0x1
27
#define LDB_CH0_DI1 0x3
29
#define LDB_CH1_OFF 0x0
30
#define LDB_CH1_DI0 0x4
31
#define LDB_CH1_DI1 0xC
33
#define CCM_ANALOG_MISC1 0x20C8160
35
#define LDB_BGREF_RMODE_MASK 0x00008000
36
#define LDB_BGREF_RMODE_INT 0x00008000
37
#define LDB_BGREF_RMODE_EXT 0x0
39
#define LDB_DI1_VS_POL_MASK 0x00000400
40
#define LDB_DI1_VS_POL_ACT_LOW 0x00000400
41
#define LDB_DI1_VS_POL_ACT_HIGH 0x0
42
#define LDB_DI0_VS_POL_MASK 0x00000200
43
#define LDB_DI0_VS_POL_ACT_LOW 0x00000200
44
#define LDB_DI0_VS_POL_ACT_HIGH 0x0
46
#define LDB_BIT_MAP_CH1_MASK 0x00000100
47
#define LDB_BIT_MAP_CH1_JEIDA 0x00000100
48
#define LDB_BIT_MAP_CH1_SPWG 0x0
49
#define LDB_BIT_MAP_CH0_MASK 0x00000040
50
#define LDB_BIT_MAP_CH0_JEIDA 0x00000040
51
#define LDB_BIT_MAP_CH0_SPWG 0x0
53
#define LDB_DATA_WIDTH_CH1_MASK 0x00000080
54
#define LDB_DATA_WIDTH_CH1_24 0x00000080
55
#define LDB_DATA_WIDTH_CH1_18 0x0
56
#define LDB_DATA_WIDTH_CH0_MASK 0x00000020
57
#define LDB_DATA_WIDTH_CH0_24 0x00000020
58
#define LDB_DATA_WIDTH_CH0_18 0x0
60
#define LDB_CH1_MODE_MASK 0x0000000C
61
#define LDB_CH1_MODE_EN_TO_DI1 0x0000000C
62
#define LDB_CH1_MODE_EN_TO_DI0 0x00000004
63
#define LDB_CH1_MODE_DISABLE 0x0
64
#define LDB_CH0_MODE_MASK 0x00000003
65
#define LDB_CH0_MODE_EN_TO_DI1 0x00000003
66
#define LDB_CH0_MODE_EN_TO_DI0 0x00000001
67
#define LDB_CH0_MODE_DISABLE 0x0
69
#define LDB_SPLIT_MODE_EN 0x00000010
71
static int ldb_init(void) {
74
iomuxc_write(IOMUXC_GPR3, iomuxc_read(IOMUXC_GPR3) & ~(3 << 6));
76
reg = REG32_LOAD(LDB_CTRL);
78
reg &= ~LDB_BGREF_RMODE_MASK;
79
reg |= LDB_BGREF_RMODE_EXT;
80
reg &= ~(LDB_BIT_MAP_CH0_MASK | LDB_BIT_MAP_CH1_MASK);
81
reg |= LDB_BIT_MAP_CH0_SPWG | LDB_BIT_MAP_CH1_SPWG;
82
reg &= ~(LDB_CH0_MODE_MASK | LDB_CH1_MODE_MASK);
83
reg &= ~(LDB_DATA_WIDTH_CH0_MASK | LDB_DATA_WIDTH_CH1_MASK);
85
reg |= LDB_DATA_WIDTH_CH0_18 | LDB_DATA_WIDTH_CH1_18;
87
reg |= LDB_DATA_WIDTH_CH0_24 | LDB_DATA_WIDTH_CH1_24;
89
#error "Unsupported data width"
91
reg &= ~LDB_SPLIT_MODE_EN;
92
reg |= LDB_CH0_MODE_EN_TO_DI0;
93
REG32_STORE(LDB_CTRL, reg);
95
clk_enable("ldb_di0");
104
PERIPH_MEMORY_DEFINE(ldb_iomux, 0x20E0000, 0x1000);
106
PERIPH_MEMORY_DEFINE(ccm_analog, 0x20C8000, 0x200);