1 // Copyright 2018 The Fuchsia Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #pragma once 6 7 #include <ddktl/i2c-channel.h> 8 #include <ddktl/mmio.h> 9 #include <ddktl/protocol/gpio.h> 10 #include <ddktl/protocol/platform/device.h> 11 12 #include <lib/zx/bti.h> 13 #include <lib/zx/interrupt.h> 14 #include <optional> 15 #include <zircon/types.h> 16 17 namespace ddk { 18 19 class PDev : public PDevProtocolClient { 20 21 public: PDev()22 PDev() {} 23 24 // TODO(andresoportus): pass protocol by value/const& so there is no question on lifecycle. PDev(pdev_protocol_t * proto)25 PDev(pdev_protocol_t* proto) 26 : PDevProtocolClient(proto) {} 27 PDev(zx_device_t * parent)28 PDev(zx_device_t* parent) 29 : PDevProtocolClient(parent) {} 30 31 ~PDev() = default; 32 33 // Prints out information about the platform device. 34 void ShowInfo(); 35 36 zx_status_t MapMmio(uint32_t index, std::optional<MmioBuffer>* mmio); 37 GetInterrupt(uint32_t index,zx::interrupt * out)38 zx_status_t GetInterrupt(uint32_t index, zx::interrupt* out) { 39 return PDevProtocolClient::GetInterrupt(index, 0, out); 40 } 41 42 std::optional<I2cChannel> GetI2c(uint32_t index); 43 std::optional<GpioProtocolClient> GetGpio(uint32_t index); 44 }; 45 46 } // namespace ddk 47