* [PATCH v3 0/4] software nodes: Get rid of rarely used APIs
@ 2022-12-28 9:49 Andy Shevchenko
2022-12-28 9:49 ` [PATCH v3 1/4] media: ipu3-cio2: Don't dereference fwnode handle Andy Shevchenko
` (4 more replies)
0 siblings, 5 replies; 6+ messages in thread
From: Andy Shevchenko @ 2022-12-28 9:49 UTC (permalink / raw)
To: Greg Kroah-Hartman, Sakari Ailus, Heikki Krogerus,
Andy Shevchenko, Daniel Scally, linux-acpi, linux-kernel,
linux-media
Cc: Rafael J. Wysocki, Yong Zhi, Bingbu Cao, Tianshu Qiu,
Mauro Carvalho Chehab
There is only a single user of software_node_register_nodes() and
software_node_unregister_nodes(). Convert it to what others use and
remove the unneeded APIs.
Since we have maintainers' tags applied it can be routed either through
driver core or media tree — whatever you prefer.
v3: added tags (Sakari, Greg)
Andy Shevchenko (4):
media: ipu3-cio2: Don't dereference fwnode handle
media: ipu3-cio2: Convert to use software_node_register_node_group()
software node: Switch property entry test to a new API
software node: Remove unused APIs
drivers/base/swnode.c | 61 ----------------------
drivers/base/test/property-entry-test.c | 30 +++++------
drivers/media/pci/intel/ipu3/cio2-bridge.c | 27 ++++++++--
drivers/media/pci/intel/ipu3/cio2-bridge.h | 5 +-
include/linux/property.h | 3 --
5 files changed, 39 insertions(+), 87 deletions(-)
--
2.35.1
^ permalink raw reply [flat|nested] 6+ messages in thread
* [PATCH v3 1/4] media: ipu3-cio2: Don't dereference fwnode handle
2022-12-28 9:49 [PATCH v3 0/4] software nodes: Get rid of rarely used APIs Andy Shevchenko
@ 2022-12-28 9:49 ` Andy Shevchenko
2022-12-28 9:49 ` [PATCH v3 2/4] media: ipu3-cio2: Convert to use software_node_register_node_group() Andy Shevchenko
` (3 subsequent siblings)
4 siblings, 0 replies; 6+ messages in thread
From: Andy Shevchenko @ 2022-12-28 9:49 UTC (permalink / raw)
To: Greg Kroah-Hartman, Sakari Ailus, Heikki Krogerus,
Andy Shevchenko, Daniel Scally, linux-acpi, linux-kernel,
linux-media
Cc: Rafael J. Wysocki, Yong Zhi, Bingbu Cao, Tianshu Qiu,
Mauro Carvalho Chehab, Daniel Scally
Use acpi_fwnode_handle() instead of dereferencing an fwnode handle directly,
which is a better coding practice.
Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Acked-by: Sakari Ailus <sakari.ailus@linux.intel.com>
Tested-by: Daniel Scally <dan.scally@ideasonboard.com>
Acked-by: Heikki Krogerus <heikki.krogerus@linux.intel.com>
Reviewed-by: Daniel Scally <dan.scally@ideasonboard.com>
---
drivers/media/pci/intel/ipu3/cio2-bridge.c | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/drivers/media/pci/intel/ipu3/cio2-bridge.c b/drivers/media/pci/intel/ipu3/cio2-bridge.c
index df6c94da2f6a..18974a72e94a 100644
--- a/drivers/media/pci/intel/ipu3/cio2-bridge.c
+++ b/drivers/media/pci/intel/ipu3/cio2-bridge.c
@@ -263,7 +263,7 @@ static int cio2_bridge_connect_sensor(const struct cio2_sensor_config *cfg,
struct cio2_bridge *bridge,
struct pci_dev *cio2)
{
- struct fwnode_handle *fwnode;
+ struct fwnode_handle *fwnode, *primary;
struct cio2_sensor *sensor;
struct acpi_device *adev;
acpi_status status;
@@ -322,7 +322,9 @@ static int cio2_bridge_connect_sensor(const struct cio2_sensor_config *cfg,
}
sensor->adev = acpi_dev_get(adev);
- adev->fwnode.secondary = fwnode;
+
+ primary = acpi_fwnode_handle(adev);
+ primary->secondary = fwnode;
cio2_bridge_instantiate_vcm_i2c_client(sensor);
--
2.35.1
^ permalink raw reply related [flat|nested] 6+ messages in thread
* [PATCH v3 2/4] media: ipu3-cio2: Convert to use software_node_register_node_group()
2022-12-28 9:49 [PATCH v3 0/4] software nodes: Get rid of rarely used APIs Andy Shevchenko
2022-12-28 9:49 ` [PATCH v3 1/4] media: ipu3-cio2: Don't dereference fwnode handle Andy Shevchenko
@ 2022-12-28 9:49 ` Andy Shevchenko
2022-12-28 9:49 ` [PATCH v3 3/4] software node: Switch property entry test to a new API Andy Shevchenko
` (2 subsequent siblings)
4 siblings, 0 replies; 6+ messages in thread
From: Andy Shevchenko @ 2022-12-28 9:49 UTC (permalink / raw)
To: Greg Kroah-Hartman, Sakari Ailus, Heikki Krogerus,
Andy Shevchenko, Daniel Scally, linux-acpi, linux-kernel,
linux-media
Cc: Rafael J. Wysocki, Yong Zhi, Bingbu Cao, Tianshu Qiu,
Mauro Carvalho Chehab, Daniel Scally
The currently used software_node_register_nodes() is going to
be removed. Prepare driver by switching to a new API.
Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Acked-by: Sakari Ailus <sakari.ailus@linux.intel.com>
Tested-by: Daniel Scally <dan.scally@ideasonboard.com>
Acked-by: Heikki Krogerus <heikki.krogerus@linux.intel.com>
Reviewed-by: Daniel Scally <dan.scally@ideasonboard.com>
---
drivers/media/pci/intel/ipu3/cio2-bridge.c | 21 ++++++++++++++++++---
drivers/media/pci/intel/ipu3/cio2-bridge.h | 5 +++--
2 files changed, 21 insertions(+), 5 deletions(-)
diff --git a/drivers/media/pci/intel/ipu3/cio2-bridge.c b/drivers/media/pci/intel/ipu3/cio2-bridge.c
index 18974a72e94a..dfefe0d8aa95 100644
--- a/drivers/media/pci/intel/ipu3/cio2-bridge.c
+++ b/drivers/media/pci/intel/ipu3/cio2-bridge.c
@@ -195,6 +195,19 @@ static void cio2_bridge_init_swnode_names(struct cio2_sensor *sensor)
SWNODE_GRAPH_ENDPOINT_NAME_FMT, 0); /* And endpoint 0 */
}
+static void cio2_bridge_init_swnode_group(struct cio2_sensor *sensor)
+{
+ struct software_node *nodes = sensor->swnodes;
+
+ sensor->group[SWNODE_SENSOR_HID] = &nodes[SWNODE_SENSOR_HID];
+ sensor->group[SWNODE_SENSOR_PORT] = &nodes[SWNODE_SENSOR_PORT];
+ sensor->group[SWNODE_SENSOR_ENDPOINT] = &nodes[SWNODE_SENSOR_ENDPOINT];
+ sensor->group[SWNODE_CIO2_PORT] = &nodes[SWNODE_CIO2_PORT];
+ sensor->group[SWNODE_CIO2_ENDPOINT] = &nodes[SWNODE_CIO2_ENDPOINT];
+ if (sensor->ssdb.vcmtype)
+ sensor->group[SWNODE_VCM] = &nodes[SWNODE_VCM];
+}
+
static void cio2_bridge_create_connection_swnodes(struct cio2_bridge *bridge,
struct cio2_sensor *sensor)
{
@@ -219,6 +232,8 @@ static void cio2_bridge_create_connection_swnodes(struct cio2_bridge *bridge,
if (sensor->ssdb.vcmtype)
nodes[SWNODE_VCM] =
NODE_VCM(cio2_vcm_types[sensor->ssdb.vcmtype - 1]);
+
+ cio2_bridge_init_swnode_group(sensor);
}
static void cio2_bridge_instantiate_vcm_i2c_client(struct cio2_sensor *sensor)
@@ -252,7 +267,7 @@ static void cio2_bridge_unregister_sensors(struct cio2_bridge *bridge)
for (i = 0; i < bridge->n_sensors; i++) {
sensor = &bridge->sensors[i];
- software_node_unregister_nodes(sensor->swnodes);
+ software_node_unregister_node_group(sensor->group);
ACPI_FREE(sensor->pld);
acpi_dev_put(sensor->adev);
i2c_unregister_device(sensor->vcm_i2c_client);
@@ -310,7 +325,7 @@ static int cio2_bridge_connect_sensor(const struct cio2_sensor_config *cfg,
cio2_bridge_create_fwnode_properties(sensor, bridge, cfg);
cio2_bridge_create_connection_swnodes(bridge, sensor);
- ret = software_node_register_nodes(sensor->swnodes);
+ ret = software_node_register_node_group(sensor->group);
if (ret)
goto err_free_pld;
@@ -337,7 +352,7 @@ static int cio2_bridge_connect_sensor(const struct cio2_sensor_config *cfg,
return 0;
err_free_swnodes:
- software_node_unregister_nodes(sensor->swnodes);
+ software_node_unregister_node_group(sensor->group);
err_free_pld:
ACPI_FREE(sensor->pld);
err_put_adev:
diff --git a/drivers/media/pci/intel/ipu3/cio2-bridge.h b/drivers/media/pci/intel/ipu3/cio2-bridge.h
index 4418cbd08208..b93b749c65bd 100644
--- a/drivers/media/pci/intel/ipu3/cio2-bridge.h
+++ b/drivers/media/pci/intel/ipu3/cio2-bridge.h
@@ -117,8 +117,9 @@ struct cio2_sensor {
struct acpi_device *adev;
struct i2c_client *vcm_i2c_client;
- /* SWNODE_COUNT + 1 for terminating empty node */
- struct software_node swnodes[SWNODE_COUNT + 1];
+ /* SWNODE_COUNT + 1 for terminating NULL */
+ const struct software_node *group[SWNODE_COUNT + 1];
+ struct software_node swnodes[SWNODE_COUNT];
struct cio2_node_names node_names;
struct cio2_sensor_ssdb ssdb;
--
2.35.1
^ permalink raw reply related [flat|nested] 6+ messages in thread
* [PATCH v3 3/4] software node: Switch property entry test to a new API
2022-12-28 9:49 [PATCH v3 0/4] software nodes: Get rid of rarely used APIs Andy Shevchenko
2022-12-28 9:49 ` [PATCH v3 1/4] media: ipu3-cio2: Don't dereference fwnode handle Andy Shevchenko
2022-12-28 9:49 ` [PATCH v3 2/4] media: ipu3-cio2: Convert to use software_node_register_node_group() Andy Shevchenko
@ 2022-12-28 9:49 ` Andy Shevchenko
2022-12-28 9:49 ` [PATCH v3 4/4] software node: Remove unused APIs Andy Shevchenko
2023-01-17 18:03 ` [PATCH v3 0/4] software nodes: Get rid of rarely used APIs Greg Kroah-Hartman
4 siblings, 0 replies; 6+ messages in thread
From: Andy Shevchenko @ 2022-12-28 9:49 UTC (permalink / raw)
To: Greg Kroah-Hartman, Sakari Ailus, Heikki Krogerus,
Andy Shevchenko, Daniel Scally, linux-acpi, linux-kernel,
linux-media
Cc: Rafael J. Wysocki, Yong Zhi, Bingbu Cao, Tianshu Qiu,
Mauro Carvalho Chehab, Daniel Scally
Switch property entry test to use software_node_register_node_group() API.
The current one is going to be removed soon.
Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Acked-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Acked-by: Sakari Ailus <sakari.ailus@linux.intel.com>
Tested-by: Daniel Scally <dan.scally@ideasonboard.com>
Acked-by: Heikki Krogerus <heikki.krogerus@linux.intel.com>
---
drivers/base/test/property-entry-test.c | 30 ++++++++++++-------------
1 file changed, 14 insertions(+), 16 deletions(-)
diff --git a/drivers/base/test/property-entry-test.c b/drivers/base/test/property-entry-test.c
index 6071d5bc128c..dd2b606d76a3 100644
--- a/drivers/base/test/property-entry-test.c
+++ b/drivers/base/test/property-entry-test.c
@@ -405,20 +405,18 @@ static void pe_test_move_inline_str(struct kunit *test)
/* Handling of reference properties */
static void pe_test_reference(struct kunit *test)
{
- static const struct software_node nodes[] = {
- { .name = "1", },
- { .name = "2", },
- { }
- };
+ static const struct software_node node1 = { .name = "1" };
+ static const struct software_node node2 = { .name = "2" };
+ static const struct software_node *group[] = { &node1, &node2, NULL };
static const struct software_node_ref_args refs[] = {
- SOFTWARE_NODE_REFERENCE(&nodes[0]),
- SOFTWARE_NODE_REFERENCE(&nodes[1], 3, 4),
+ SOFTWARE_NODE_REFERENCE(&node1),
+ SOFTWARE_NODE_REFERENCE(&node2, 3, 4),
};
const struct property_entry entries[] = {
- PROPERTY_ENTRY_REF("ref-1", &nodes[0]),
- PROPERTY_ENTRY_REF("ref-2", &nodes[1], 1, 2),
+ PROPERTY_ENTRY_REF("ref-1", &node1),
+ PROPERTY_ENTRY_REF("ref-2", &node2, 1, 2),
PROPERTY_ENTRY_REF_ARRAY("ref-3", refs),
{ }
};
@@ -427,7 +425,7 @@ static void pe_test_reference(struct kunit *test)
struct fwnode_reference_args ref;
int error;
- error = software_node_register_nodes(nodes);
+ error = software_node_register_node_group(group);
KUNIT_ASSERT_EQ(test, error, 0);
node = fwnode_create_software_node(entries, NULL);
@@ -436,7 +434,7 @@ static void pe_test_reference(struct kunit *test)
error = fwnode_property_get_reference_args(node, "ref-1", NULL,
0, 0, &ref);
KUNIT_ASSERT_EQ(test, error, 0);
- KUNIT_EXPECT_PTR_EQ(test, to_software_node(ref.fwnode), &nodes[0]);
+ KUNIT_EXPECT_PTR_EQ(test, to_software_node(ref.fwnode), &node1);
KUNIT_EXPECT_EQ(test, ref.nargs, 0U);
/* wrong index */
@@ -447,7 +445,7 @@ static void pe_test_reference(struct kunit *test)
error = fwnode_property_get_reference_args(node, "ref-2", NULL,
1, 0, &ref);
KUNIT_ASSERT_EQ(test, error, 0);
- KUNIT_EXPECT_PTR_EQ(test, to_software_node(ref.fwnode), &nodes[1]);
+ KUNIT_EXPECT_PTR_EQ(test, to_software_node(ref.fwnode), &node2);
KUNIT_EXPECT_EQ(test, ref.nargs, 1U);
KUNIT_EXPECT_EQ(test, ref.args[0], 1LLU);
@@ -455,7 +453,7 @@ static void pe_test_reference(struct kunit *test)
error = fwnode_property_get_reference_args(node, "ref-2", NULL,
3, 0, &ref);
KUNIT_ASSERT_EQ(test, error, 0);
- KUNIT_EXPECT_PTR_EQ(test, to_software_node(ref.fwnode), &nodes[1]);
+ KUNIT_EXPECT_PTR_EQ(test, to_software_node(ref.fwnode), &node2);
KUNIT_EXPECT_EQ(test, ref.nargs, 3U);
KUNIT_EXPECT_EQ(test, ref.args[0], 1LLU);
KUNIT_EXPECT_EQ(test, ref.args[1], 2LLU);
@@ -470,14 +468,14 @@ static void pe_test_reference(struct kunit *test)
error = fwnode_property_get_reference_args(node, "ref-3", NULL,
0, 0, &ref);
KUNIT_ASSERT_EQ(test, error, 0);
- KUNIT_EXPECT_PTR_EQ(test, to_software_node(ref.fwnode), &nodes[0]);
+ KUNIT_EXPECT_PTR_EQ(test, to_software_node(ref.fwnode), &node1);
KUNIT_EXPECT_EQ(test, ref.nargs, 0U);
/* second reference in the array */
error = fwnode_property_get_reference_args(node, "ref-3", NULL,
2, 1, &ref);
KUNIT_ASSERT_EQ(test, error, 0);
- KUNIT_EXPECT_PTR_EQ(test, to_software_node(ref.fwnode), &nodes[1]);
+ KUNIT_EXPECT_PTR_EQ(test, to_software_node(ref.fwnode), &node2);
KUNIT_EXPECT_EQ(test, ref.nargs, 2U);
KUNIT_EXPECT_EQ(test, ref.args[0], 3LLU);
KUNIT_EXPECT_EQ(test, ref.args[1], 4LLU);
@@ -488,7 +486,7 @@ static void pe_test_reference(struct kunit *test)
KUNIT_EXPECT_NE(test, error, 0);
fwnode_remove_software_node(node);
- software_node_unregister_nodes(nodes);
+ software_node_unregister_node_group(group);
}
static struct kunit_case property_entry_test_cases[] = {
--
2.35.1
^ permalink raw reply related [flat|nested] 6+ messages in thread
* [PATCH v3 4/4] software node: Remove unused APIs
2022-12-28 9:49 [PATCH v3 0/4] software nodes: Get rid of rarely used APIs Andy Shevchenko
` (2 preceding siblings ...)
2022-12-28 9:49 ` [PATCH v3 3/4] software node: Switch property entry test to a new API Andy Shevchenko
@ 2022-12-28 9:49 ` Andy Shevchenko
2023-01-17 18:03 ` [PATCH v3 0/4] software nodes: Get rid of rarely used APIs Greg Kroah-Hartman
4 siblings, 0 replies; 6+ messages in thread
From: Andy Shevchenko @ 2022-12-28 9:49 UTC (permalink / raw)
To: Greg Kroah-Hartman, Sakari Ailus, Heikki Krogerus,
Andy Shevchenko, Daniel Scally, linux-acpi, linux-kernel,
linux-media
Cc: Rafael J. Wysocki, Yong Zhi, Bingbu Cao, Tianshu Qiu,
Mauro Carvalho Chehab, Daniel Scally
There are no more users of software_node_register_nodes() and
software_node_unregister_nodes(). Remove them.
Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Acked-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Acked-by: Sakari Ailus <sakari.ailus@linux.intel.com>
Tested-by: Daniel Scally <dan.scally@ideasonboard.com>
Acked-by: Heikki Krogerus <heikki.krogerus@linux.intel.com>
---
drivers/base/swnode.c | 61 ----------------------------------------
include/linux/property.h | 3 --
2 files changed, 64 deletions(-)
diff --git a/drivers/base/swnode.c b/drivers/base/swnode.c
index 0a482212c7e8..da3c1c2cb9a8 100644
--- a/drivers/base/swnode.c
+++ b/drivers/base/swnode.c
@@ -819,67 +819,6 @@ swnode_register(const struct software_node *node, struct swnode *parent,
return &swnode->fwnode;
}
-/**
- * software_node_register_nodes - Register an array of software nodes
- * @nodes: Zero terminated array of software nodes to be registered
- *
- * Register multiple software nodes at once. If any node in the array
- * has its .parent pointer set (which can only be to another software_node),
- * then its parent **must** have been registered before it is; either outside
- * of this function or by ordering the array such that parent comes before
- * child.
- */
-int software_node_register_nodes(const struct software_node *nodes)
-{
- int ret;
- int i;
-
- for (i = 0; nodes[i].name; i++) {
- const struct software_node *parent = nodes[i].parent;
-
- if (parent && !software_node_to_swnode(parent)) {
- ret = -EINVAL;
- goto err_unregister_nodes;
- }
-
- ret = software_node_register(&nodes[i]);
- if (ret)
- goto err_unregister_nodes;
- }
-
- return 0;
-
-err_unregister_nodes:
- software_node_unregister_nodes(nodes);
- return ret;
-}
-EXPORT_SYMBOL_GPL(software_node_register_nodes);
-
-/**
- * software_node_unregister_nodes - Unregister an array of software nodes
- * @nodes: Zero terminated array of software nodes to be unregistered
- *
- * Unregister multiple software nodes at once. If parent pointers are set up
- * in any of the software nodes then the array **must** be ordered such that
- * parents come before their children.
- *
- * NOTE: If you are uncertain whether the array is ordered such that
- * parents will be unregistered before their children, it is wiser to
- * remove the nodes individually, in the correct order (child before
- * parent).
- */
-void software_node_unregister_nodes(const struct software_node *nodes)
-{
- unsigned int i = 0;
-
- while (nodes[i].name)
- i++;
-
- while (i--)
- software_node_unregister(&nodes[i]);
-}
-EXPORT_SYMBOL_GPL(software_node_unregister_nodes);
-
/**
* software_node_register_node_group - Register a group of software nodes
* @node_group: NULL terminated array of software node pointers to be registered
diff --git a/include/linux/property.h b/include/linux/property.h
index 37179e3abad5..1ffd4f9bb67b 100644
--- a/include/linux/property.h
+++ b/include/linux/property.h
@@ -486,9 +486,6 @@ const struct software_node *
software_node_find_by_name(const struct software_node *parent,
const char *name);
-int software_node_register_nodes(const struct software_node *nodes);
-void software_node_unregister_nodes(const struct software_node *nodes);
-
int software_node_register_node_group(const struct software_node **node_group);
void software_node_unregister_node_group(const struct software_node **node_group);
--
2.35.1
^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: [PATCH v3 0/4] software nodes: Get rid of rarely used APIs
2022-12-28 9:49 [PATCH v3 0/4] software nodes: Get rid of rarely used APIs Andy Shevchenko
` (3 preceding siblings ...)
2022-12-28 9:49 ` [PATCH v3 4/4] software node: Remove unused APIs Andy Shevchenko
@ 2023-01-17 18:03 ` Greg Kroah-Hartman
4 siblings, 0 replies; 6+ messages in thread
From: Greg Kroah-Hartman @ 2023-01-17 18:03 UTC (permalink / raw)
To: Andy Shevchenko
Cc: Sakari Ailus, Heikki Krogerus, Daniel Scally, linux-acpi,
linux-kernel, linux-media, Rafael J. Wysocki, Yong Zhi,
Bingbu Cao, Tianshu Qiu, Mauro Carvalho Chehab
On Wed, Dec 28, 2022 at 11:49:18AM +0200, Andy Shevchenko wrote:
> There is only a single user of software_node_register_nodes() and
> software_node_unregister_nodes(). Convert it to what others use and
> remove the unneeded APIs.
>
> Since we have maintainers' tags applied it can be routed either through
> driver core or media tree — whatever you prefer.
I'll take these now, thanks!
greg k-h
^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2023-01-17 18:42 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2022-12-28 9:49 [PATCH v3 0/4] software nodes: Get rid of rarely used APIs Andy Shevchenko
2022-12-28 9:49 ` [PATCH v3 1/4] media: ipu3-cio2: Don't dereference fwnode handle Andy Shevchenko
2022-12-28 9:49 ` [PATCH v3 2/4] media: ipu3-cio2: Convert to use software_node_register_node_group() Andy Shevchenko
2022-12-28 9:49 ` [PATCH v3 3/4] software node: Switch property entry test to a new API Andy Shevchenko
2022-12-28 9:49 ` [PATCH v3 4/4] software node: Remove unused APIs Andy Shevchenko
2023-01-17 18:03 ` [PATCH v3 0/4] software nodes: Get rid of rarely used APIs Greg Kroah-Hartman
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox