// Copyright (c) 2017-2023, Mudita Sp. z.o.o. All rights reserved. // For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md #pragma once #include #include namespace drivers { enum class PLLInstances { OSC_24M, PLL1_ARM, PLL2_PFD2, PLL3, PLL3_PFD0, PLL3_PFD1, PLL3_PFD2, PLL4_Audio, COUNT }; struct DriverPLLParams { std::uint32_t loopDivider; std::uint32_t postDivider; std::uint32_t numerator; std::uint32_t denominator; std::uint32_t src; }; class DriverPLL { public: static std::shared_ptr Create(PLLInstances inst, const DriverPLLParams ¶ms); explicit DriverPLL(const DriverPLLParams ¶ms) : parameters(params) {} protected: const DriverPLLParams parameters; private: static std::weak_ptr singleton[static_cast(PLLInstances::COUNT)]; }; } // namespace drivers