1 // Copyright 2018 The Fuchsia Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include <ddk/debug.h>
6 #include <ddk/device.h>
7 #include <ddk/platform-defs.h>
8 #include <ddk/protocol/platform/bus.h>
9
10 #include <soc/mt8167/mt8167-hw.h>
11 #include "mt8167.h"
12
13 namespace board_mt8167 {
14
DisplayInit()15 zx_status_t Mt8167::DisplayInit() {
16 const pbus_mmio_t display_mmios[] = {
17 // Overlay
18 {
19 .base = MT8167_DISP_OVL_BASE,
20 .length = MT8167_DISP_OVL_SIZE,
21 },
22 };
23
24 const pbus_bti_t display_btis[] = {
25 {
26 .iommu_index = 0,
27 .bti_id = BTI_DISPLAY,
28 },
29 };
30 const pbus_irq_t display_irqs[] = {
31 {
32 .irq = MT8167_IRQ_DISP_OVL0,
33 .mode = ZX_INTERRUPT_MODE_EDGE_HIGH,
34 },
35 };
36
37 pbus_dev_t display_dev = {};
38 display_dev.name = "display";
39 display_dev.vid = PDEV_VID_MEDIATEK;
40 display_dev.did = PDEV_DID_MEDIATEK_DISPLAY;
41 display_dev.mmio_list = display_mmios;
42 display_dev.mmio_count = countof(display_mmios);
43 display_dev.bti_list = display_btis;
44 display_dev.bti_count = countof(display_btis);
45 display_dev.irq_list = display_irqs;
46 display_dev.irq_count = countof(display_irqs);
47
48 zx_status_t status = pbus_.DeviceAdd(&display_dev);
49 if (status != ZX_OK) {
50 zxlogf(ERROR, "%s: DeviceAdd failed %d\n", __FUNCTION__, status);
51 return status;
52 }
53
54 return ZX_OK;
55 }
56
57 } // namespace board_mt8167
58