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.

Dependency Surface

Detected Declarations

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

Implementation Notes