10
#include <drivers/common/memory.h>
11
#include <drivers/clk/ccm_imx6.h>
14
#include <embox/unit.h>
18
#include <framework/mod/options.h>
20
#define DW_HDMI_BASE OPTION_GET(NUMBER, base_addr)
22
EMBOX_UNIT_INIT(dw_hdmi_init);
26
uint8_t (*read)(struct dw_hdmi *hdmi, int offset);
27
void (*write)(struct dw_hdmi *hdmi, uint8_t val, int offset) ;
30
static struct dw_hdmi dw_hdmi;
32
static void dw_hdmi_writeb(struct dw_hdmi *hdmi, uint8_t val, int offset)
34
REG8_STORE(hdmi->regs + offset, val);
37
static uint8_t dw_hdmi_readb(struct dw_hdmi *hdmi, int offset)
39
return REG8_LOAD(hdmi->regs + offset);
42
static inline void hdmi_writeb(struct dw_hdmi *hdmi, uint8_t val, int offset)
44
hdmi->write(hdmi, val, offset);
47
static inline uint8_t hdmi_readb(struct dw_hdmi *hdmi, int offset)
49
return hdmi->read(hdmi, offset);
52
static int dw_hdmi_init(void) {
56
dw_hdmi.regs = DW_HDMI_BASE;
57
dw_hdmi.write = dw_hdmi_writeb;
58
dw_hdmi.read = dw_hdmi_readb;
60
if (-1 == clk_enable("isfr")) {
61
log_error("Clk 'isfr' didn't find");
63
if (-1 == clk_enable("iahb")) {
64
log_error("Clk 'iahb' didn't find");
66
log_debug("Detected HDMI controller 0x%x:0x%x:0x%x:0x%x\n",
67
hdmi_readb(hdmi, HDMI_DESIGN_ID),
68
hdmi_readb(hdmi, HDMI_REVISION_ID),
69
hdmi_readb(hdmi, HDMI_PRODUCT_ID0),
70
hdmi_readb(hdmi, HDMI_PRODUCT_ID1));
74
PERIPH_MEMORY_DEFINE(dw_hdmi, DW_HDMI_BASE, 0x8000);