net: pse-pd: Add support for setup_pi_matrix callback
authorKory Maincent (Dent Project) <kory.maincent@bootlin.com>
Wed, 17 Apr 2024 14:39:57 +0000 (16:39 +0200)
committerJakub Kicinski <kuba@kernel.org>
Fri, 19 Apr 2024 01:27:39 +0000 (18:27 -0700)
Implement setup_pi_matrix callback to configure the PSE PI matrix. This
functionality is invoked before registering the PSE and following the core
parsing of the pse_pis devicetree subnode.

Signed-off-by: Kory Maincent <kory.maincent@bootlin.com>
Reviewed-by: Andrew Lunn <andrew@lunn.ch>
Link: https://lore.kernel.org/r/20240417-feature_poe-v9-9-242293fd1900@bootlin.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
drivers/net/pse-pd/pse_core.c
include/linux/pse-pd/pse.h

index ca5ced8e0d8a1e86305c3e052fbd1c403e89672c..a7ff7676ab77eaa57fd908dd14a0632862f436cf 100644 (file)
@@ -223,6 +223,12 @@ int pse_controller_register(struct pse_controller_dev *pcdev)
        if (ret)
                return ret;
 
+       if (pcdev->ops->setup_pi_matrix) {
+               ret = pcdev->ops->setup_pi_matrix(pcdev);
+               if (ret)
+                       return ret;
+       }
+
        mutex_lock(&pse_list_mutex);
        list_add(&pcdev->list, &pse_controller_list);
        mutex_unlock(&pse_list_mutex);
index e19d58b5e777f245e8b9bfa8686bba9f0ab57b42..fa0c73da0cf18bb83100b1e20c96bd0a012da122 100644 (file)
@@ -49,6 +49,7 @@ struct pse_control_status {
  *
  * @ethtool_get_status: get PSE control status for ethtool interface
  * @ethtool_set_config: set PSE control configuration over ethtool interface
+ * @setup_pi_matrix: setup PI matrix of the PSE controller
  */
 struct pse_controller_ops {
        int (*ethtool_get_status)(struct pse_controller_dev *pcdev,
@@ -57,6 +58,7 @@ struct pse_controller_ops {
        int (*ethtool_set_config)(struct pse_controller_dev *pcdev,
                unsigned long id, struct netlink_ext_ack *extack,
                const struct pse_control_config *config);
+       int (*setup_pi_matrix)(struct pse_controller_dev *pcdev);
 };
 
 struct module;