drivers/phy/phy-common-props-test.c
Source file repositories/reference/linux-study-clean/drivers/phy/phy-common-props-test.c
File Facts
- System
- Linux kernel
- Corpus path
drivers/phy/phy-common-props-test.c- Extension
.c- Size
- 13544 bytes
- Lines
- 423
- Domain
- Driver Families
- Bucket
- drivers/phy
- Inferred role
- Driver Families: implementation source
- Status
- source 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.
- Defines or uses C structs; map object ownership, embedded links, reference counts, and lock ownership.
Dependency Surface
kunit/test.hlinux/property.hlinux/phy/phy-common-props.hdt-bindings/phy/phy.h
Detected Declarations
function phy_test_rx_polarity_is_missingfunction phy_test_rx_polarity_more_values_than_namesfunction phy_test_rx_polarity_single_value_no_namesfunction phy_test_rx_polarity_more_names_than_valuesfunction phy_test_rx_polarity_find_by_namefunction phy_test_rx_polarity_name_not_found_no_defaultfunction phy_test_rx_polarity_name_not_found_with_defaultfunction phy_test_rx_polarity_unsupported_valuefunction phy_test_tx_polarity_is_missingfunction phy_test_tx_polarity_more_values_than_namesfunction phy_test_tx_polarity_single_value_no_namesfunction phy_test_tx_polarity_more_names_than_valuesfunction phy_test_tx_polarity_find_by_namefunction phy_test_tx_polarity_name_not_found_no_defaultfunction phy_test_tx_polarity_name_not_found_with_defaultfunction phy_test_tx_polarity_unsupported_value
Annotated Snippet
// SPDX-License-Identifier: GPL-2.0
/*
* phy-common-props-test.c -- Unit tests for PHY common properties API
*
* Copyright 2025-2026 NXP
*/
#include <kunit/test.h>
#include <linux/property.h>
#include <linux/phy/phy-common-props.h>
#include <dt-bindings/phy/phy.h>
/* Test: rx-polarity property is missing */
static void phy_test_rx_polarity_is_missing(struct kunit *test)
{
static const struct property_entry entries[] = {
{}
};
struct fwnode_handle *node;
unsigned int val;
int ret;
node = fwnode_create_software_node(entries, NULL);
KUNIT_ASSERT_NOT_ERR_OR_NULL(test, node);
ret = phy_get_manual_rx_polarity(node, "sgmii", &val);
KUNIT_EXPECT_EQ(test, ret, 0);
KUNIT_EXPECT_EQ(test, val, PHY_POL_NORMAL);
fwnode_remove_software_node(node);
}
/* Test: rx-polarity has more values than rx-polarity-names */
static void phy_test_rx_polarity_more_values_than_names(struct kunit *test)
{
static const u32 rx_pol[] = { PHY_POL_NORMAL, PHY_POL_INVERT, PHY_POL_NORMAL };
static const char * const rx_pol_names[] = { "sgmii", "2500base-x" };
static const struct property_entry entries[] = {
PROPERTY_ENTRY_U32_ARRAY("rx-polarity", rx_pol),
PROPERTY_ENTRY_STRING_ARRAY("rx-polarity-names", rx_pol_names),
{}
};
struct fwnode_handle *node;
unsigned int val;
int ret;
node = fwnode_create_software_node(entries, NULL);
KUNIT_ASSERT_NOT_ERR_OR_NULL(test, node);
ret = phy_get_manual_rx_polarity(node, "sgmii", &val);
KUNIT_EXPECT_EQ(test, ret, -EINVAL);
fwnode_remove_software_node(node);
}
/* Test: rx-polarity has 1 value and rx-polarity-names does not exist */
static void phy_test_rx_polarity_single_value_no_names(struct kunit *test)
{
static const u32 rx_pol[] = { PHY_POL_INVERT };
static const struct property_entry entries[] = {
PROPERTY_ENTRY_U32_ARRAY("rx-polarity", rx_pol),
{}
};
struct fwnode_handle *node;
unsigned int val;
int ret;
node = fwnode_create_software_node(entries, NULL);
KUNIT_ASSERT_NOT_ERR_OR_NULL(test, node);
ret = phy_get_manual_rx_polarity(node, "sgmii", &val);
KUNIT_EXPECT_EQ(test, ret, 0);
KUNIT_EXPECT_EQ(test, val, PHY_POL_INVERT);
fwnode_remove_software_node(node);
}
/* Test: rx-polarity-names has more values than rx-polarity */
static void phy_test_rx_polarity_more_names_than_values(struct kunit *test)
{
static const u32 rx_pol[] = { PHY_POL_NORMAL, PHY_POL_INVERT };
static const char * const rx_pol_names[] = { "sgmii", "2500base-x", "1000base-x" };
static const struct property_entry entries[] = {
PROPERTY_ENTRY_U32_ARRAY("rx-polarity", rx_pol),
PROPERTY_ENTRY_STRING_ARRAY("rx-polarity-names", rx_pol_names),
{}
};
struct fwnode_handle *node;
unsigned int val;
int ret;
Annotation
- Immediate include surface: `kunit/test.h`, `linux/property.h`, `linux/phy/phy-common-props.h`, `dt-bindings/phy/phy.h`.
- Detected declarations: `function phy_test_rx_polarity_is_missing`, `function phy_test_rx_polarity_more_values_than_names`, `function phy_test_rx_polarity_single_value_no_names`, `function phy_test_rx_polarity_more_names_than_values`, `function phy_test_rx_polarity_find_by_name`, `function phy_test_rx_polarity_name_not_found_no_default`, `function phy_test_rx_polarity_name_not_found_with_default`, `function phy_test_rx_polarity_unsupported_value`, `function phy_test_tx_polarity_is_missing`, `function phy_test_tx_polarity_more_values_than_names`.
- Atlas domain: Driver Families / drivers/phy.
- Implementation status: source 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.