blob: 9abaaac59e6406bc27038a6056a1edfed9db7ec7 [file] [log] [blame]
// 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.
#pragma once
#include <ddk/device.h>
#include <ddktl/device.h>
#include <ddktl/protocol/gpio.h>
#include <ddktl/protocol/usb/modeswitch.h>
#include <fbl/macros.h>
namespace hikey_usb {
class HikeyUsb;
using HikeyUsbType = ddk::Device<HikeyUsb>;
// This is the main class for the platform bus driver.
class HikeyUsb : public HikeyUsbType,
public ddk::UsbModeSwitchProtocol<HikeyUsb, ddk::base_protocol> {
public:
explicit HikeyUsb(zx_device_t* parent)
: HikeyUsbType(parent), usb_mode_(USB_MODE_NONE) {}
static zx_status_t Create(zx_device_t* parent);
// Device protocol implementation.
void DdkRelease();
// USB mode switch protocol implementation.
zx_status_t UsbModeSwitchSetMode(usb_mode_t mode);
private:
DISALLOW_COPY_ASSIGN_AND_MOVE(HikeyUsb);
enum {
HUB_VDD33_EN,
VBUS_TYPEC,
USBSW_SW_SEL,
GPIO_COUNT,
};
zx_status_t Init();
gpio_protocol_t gpios_[GPIO_COUNT];
usb_mode_t usb_mode_;
};
} // namespace hikey_usb