| // Copyright 2017 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. |
| |
| #ifndef SRC_MEDIA_AUDIO_BIN_IHDA_INTEL_HDA_CONTROLLER_H_ |
| #define SRC_MEDIA_AUDIO_BIN_IHDA_INTEL_HDA_CONTROLLER_H_ |
| |
| #include <memory> |
| |
| #include <fbl/intrusive_wavl_tree.h> |
| #include <fbl/string.h> |
| |
| #include "intel_hda_codec.h" |
| #include "intel_hda_device.h" |
| #include "zircon_device.h" |
| |
| namespace audio { |
| namespace intel_hda { |
| |
| class IntelHDAController : public fbl::WAVLTreeContainable<std::unique_ptr<IntelHDAController>> { |
| public: |
| using ControllerTree = fbl::WAVLTree<uint32_t, std::unique_ptr<IntelHDAController>>; |
| |
| zx_status_t DumpRegs(int argc, const char** argv); |
| |
| uint32_t id() const { return id_; } |
| uint32_t GetKey() const { return id(); } |
| fbl::String dev_name() { return dev_name_; } |
| |
| static zx_status_t Enumerate(); |
| static ControllerTree& controllers() { return controllers_; } |
| |
| zx_status_t Probe(IntelHDADevice* result); |
| |
| void Disconnect() { device_.Disconnect(); } |
| |
| private: |
| friend class std::default_delete<IntelHDAController>; |
| |
| IntelHDAController(uint32_t id, const char* const dev_name) |
| : device_(dev_name, ZirconDevice::Type::Controller), id_(id), dev_name_(dev_name) {} |
| |
| ~IntelHDAController() {} |
| |
| ZirconDevice device_; |
| const uint32_t id_; |
| const fbl::String dev_name_; |
| |
| static ControllerTree controllers_; |
| }; |
| |
| } // namespace intel_hda |
| } // namespace audio |
| |
| #endif // SRC_MEDIA_AUDIO_BIN_IHDA_INTEL_HDA_CONTROLLER_H_ |