drivers/clk/clk_kunit_helpers.c
Source file repositories/reference/linux-study-clean/drivers/clk/clk_kunit_helpers.c
File Facts
- System
- Linux kernel
- Corpus path
drivers/clk/clk_kunit_helpers.c- Extension
.c- Size
- 6469 bytes
- Lines
- 238
- Domain
- Driver Families
- Bucket
- drivers/clk
- Inferred role
- Driver Families: exported/initcall integration point
- Status
- integration implementation candidate
Why This File Exists
Repeatable hardware-adapter layer. Deep compatibility for every driver is out of scope; this atlas records patterns, probe lifecycles, bus glue, IRQ/DMA usage, and links back to core abstractions.
- Repeatable hardware-adapter layer. Deep compatibility for every driver is out of scope; this atlas records patterns, probe lifecycles, bus glue, IRQ/DMA usage, and links back to core abstractions.
- Exports symbols or registers init work; inspect boot/module ordering and who consumes the exported contract.
- Defines or uses C structs; map object ownership, embedded links, reference counts, and lock ownership.
Dependency Surface
linux/clk.hlinux/clk-provider.hlinux/err.hlinux/kernel.hlinux/slab.hkunit/clk.hkunit/resource.h
Detected Declarations
function clk_prepare_enable_kunitfunction clk_get_kunitfunction of_clk_get_kunitfunction clk_hw_get_clk_kunitfunction clk_disable_unpreparefunction clk_hw_register_kunitfunction of_clk_hw_register_kunitfunction of_clk_add_hw_provider_kunitexport clk_prepare_enable_kunitexport clk_get_kunitexport of_clk_get_kunitexport clk_hw_get_clk_kunitexport clk_hw_get_clk_prepared_enabled_kunitexport clk_hw_register_kunitexport of_clk_hw_register_kunitexport of_clk_add_hw_provider_kunit
Annotated Snippet
// SPDX-License-Identifier: GPL-2.0
/*
* KUnit helpers for clk providers and consumers
*/
#include <linux/clk.h>
#include <linux/clk-provider.h>
#include <linux/err.h>
#include <linux/kernel.h>
#include <linux/slab.h>
#include <kunit/clk.h>
#include <kunit/resource.h>
KUNIT_DEFINE_ACTION_WRAPPER(clk_disable_unprepare_wrapper,
clk_disable_unprepare, struct clk *);
/**
* clk_prepare_enable_kunit() - Test managed clk_prepare_enable()
* @test: The test context
* @clk: clk to prepare and enable
*
* Return: 0 on success, or negative errno on failure.
*/
int clk_prepare_enable_kunit(struct kunit *test, struct clk *clk)
{
int ret;
ret = clk_prepare_enable(clk);
if (ret)
return ret;
return kunit_add_action_or_reset(test, clk_disable_unprepare_wrapper,
clk);
}
EXPORT_SYMBOL_GPL(clk_prepare_enable_kunit);
KUNIT_DEFINE_ACTION_WRAPPER(clk_put_wrapper, clk_put, struct clk *);
static struct clk *__clk_get_kunit(struct kunit *test, struct clk *clk)
{
int ret;
if (IS_ERR(clk))
return clk;
ret = kunit_add_action_or_reset(test, clk_put_wrapper, clk);
if (ret)
return ERR_PTR(ret);
return clk;
}
/**
* clk_get_kunit() - Test managed clk_get()
* @test: The test context
* @dev: device for clock "consumer"
* @con_id: clock consumer ID
*
* Just like clk_get(), except the clk is managed by the test case and is
* automatically put with clk_put() after the test case concludes.
*
* Return: new clk consumer or ERR_PTR on failure.
*/
struct clk *
clk_get_kunit(struct kunit *test, struct device *dev, const char *con_id)
{
struct clk *clk;
clk = clk_get(dev, con_id);
return __clk_get_kunit(test, clk);
}
EXPORT_SYMBOL_GPL(clk_get_kunit);
/**
* of_clk_get_kunit() - Test managed of_clk_get()
* @test: The test context
* @np: device_node for clock "consumer"
* @index: index in 'clocks' property of @np
*
* Just like of_clk_get(), except the clk is managed by the test case and is
* automatically put with clk_put() after the test case concludes.
*
* Return: new clk consumer or ERR_PTR on failure.
*/
struct clk *
of_clk_get_kunit(struct kunit *test, struct device_node *np, int index)
{
struct clk *clk;
clk = of_clk_get(np, index);
Annotation
- Immediate include surface: `linux/clk.h`, `linux/clk-provider.h`, `linux/err.h`, `linux/kernel.h`, `linux/slab.h`, `kunit/clk.h`, `kunit/resource.h`.
- Detected declarations: `function clk_prepare_enable_kunit`, `function clk_get_kunit`, `function of_clk_get_kunit`, `function clk_hw_get_clk_kunit`, `function clk_disable_unprepare`, `function clk_hw_register_kunit`, `function of_clk_hw_register_kunit`, `function of_clk_add_hw_provider_kunit`, `export clk_prepare_enable_kunit`, `export clk_get_kunit`.
- Atlas domain: Driver Families / drivers/clk.
- Implementation status: integration implementation candidate.
Implementation Notes
- This generated page is the file-by-file coverage layer; curated subsystem chapters should link here when they synthesize a multi-file control flow.
- Core OS pages should be promoted from atlas-only to deep-reviewed when they explain data structures, invariants, locking, lifecycle, and C implementation snippets.
- Driver-family pages are intentionally pattern-oriented unless they are part of the selected PCIe/NVMe representative device path.