| // 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 |