blob: 05b198bc9918b0fb5867830360bf45e8c50169b8 [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);
}
I2cChannel GetI2c(uint32_t index);
GpioProtocolClient GetGpio(uint32_t index);
ClkProtocolClient GetClk(uint32_t index);
};
} // namespace ddk