// Copyright 2018 The Fuchsia Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #include #include #include #include #include #include #include "hikey960.h" #include "hikey960-hw.h" static const pbus_mmio_t dwc3_mmios[] = { { .base = MMIO_USB3OTG_BASE, .length = MMIO_USB3OTG_LENGTH, }, }; static const pbus_irq_t dwc3_irqs[] = { { .irq = IRQ_USB3, .mode = ZX_INTERRUPT_MODE_EDGE_HIGH, }, }; static const pbus_bti_t dwc3_btis[] = { { .iommu_index = 0, .bti_id = BTI_USB_DWC3, }, }; static usb_mode_t dwc3_mode = USB_MODE_HOST; static const pbus_metadata_t dwc2_metadata[] = { { .type = DEVICE_METADATA_USB_MODE, .data = &dwc3_mode, .len = sizeof(dwc3_mode), } }; static const pbus_dev_t hikey_usb_children[] = { { .name = "dwc3", .vid = PDEV_VID_GENERIC, .pid = PDEV_PID_GENERIC, .did = PDEV_DID_USB_DWC3, .mmios = dwc3_mmios, .mmio_count = countof(dwc3_mmios), .irqs = dwc3_irqs, .irq_count = countof(dwc3_irqs), .btis = dwc3_btis, .bti_count = countof(dwc3_btis), .metadata = dwc2_metadata, .metadata_count = countof(dwc2_metadata), }, }; static const pbus_gpio_t hikey_usb_gpios[] = { { .gpio = GPIO_HUB_VDD33_EN, }, { .gpio = GPIO_VBUS_TYPEC, }, { .gpio = GPIO_USBSW_SW_SEL, }, }; const pbus_dev_t hikey_usb_dev = { .name = "hikey-usb", .vid = PDEV_VID_96BOARDS, .pid = PDEV_PID_HIKEY960, .did = PDEV_DID_HIKEY960_USB, .gpios = hikey_usb_gpios, .gpio_count = countof(hikey_usb_gpios), .children = hikey_usb_children, .child_count = countof(hikey_usb_children), }; zx_status_t hikey960_usb_init(hikey960_t* hikey) { zx_status_t status; if ((status = pbus_device_add(&hikey->pbus, &hikey_usb_dev)) != ZX_OK) { zxlogf(ERROR, "hikey960_add_devices could not add hikey_usb_dev: %d\n", status); return status; } return ZX_OK; }