blob: ff24749ec70c143b3420a06a7ee866b0fee2330d [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 <ddktl/i2c-channel.h>
#include <ddktl/mmio.h>
#include <ddktl/protocol/clk.h>
#include <ddktl/protocol/gpio.h>
#include <ddktl/protocol/platform/device.h>
#include <lib/zx/bti.h>
#include <lib/zx/interrupt.h>
#include <optional>
#include <zircon/types.h>
namespace ddk {
class PDev : public PDevProtocolClient {
public:
PDev() {}
// TODO(andresoportus): pass protocol by value/const& so there is no question on lifecycle.
PDev(pdev_protocol_t* proto)
: PDevProtocolClient(proto) {}
PDev(zx_device_t* parent)
: PDevProtocolClient(parent) {}
~PDev() = default;
// Prints out information about the platform device.
void ShowInfo();
zx_status_t MapMmio(uint32_t index, std::optional<MmioBuffer>* mmio);
zx_status_t GetInterrupt(uint32_t index, zx::interrupt* out) {
return PDevProtocolClient::GetInterrupt(index, 0, out);
}
zx_status_t GetBti(uint32_t index, zx::bti* out) {
return PDevProtocolClient::GetBti(index, out);
}
std::optional<I2cChannel> GetI2c(uint32_t index);
std::optional<GpioProtocolClient> GetGpio(uint32_t index);
std::optional<ClkProtocolClient> GetClk(uint32_t index);
};
} // namespace ddk