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