]> www.infradead.org Git - users/dwmw2/linux.git/commitdiff
soc: fsl: cpm1: qmc: Introduce functions to get a channel from a phandle list
authorHerve Codina <herve.codina@bootlin.com>
Mon, 1 Jul 2024 11:30:34 +0000 (13:30 +0200)
committerMark Brown <broonie@kernel.org>
Thu, 4 Jul 2024 11:24:58 +0000 (12:24 +0100)
qmc_chan_get_byphandle() and the resource managed version retrieve a
channel from a simple phandle.

Extend the API and introduce qmc_chan_get_byphandles_index() and the
resource managed version in order to retrieve a channel from a phandle
list using the provided index to identify the phandle in the list.

Also update qmc_chan_get_byphandle() and the resource managed version to
use qmc_chan_get_byphandles_index() and so avoid code duplication.

Signed-off-by: Herve Codina <herve.codina@bootlin.com>
Link: https://patch.msgid.link/20240701113038.55144-8-herve.codina@bootlin.com
Signed-off-by: Mark Brown <broonie@kernel.org>
drivers/soc/fsl/qe/qmc.c
include/soc/fsl/qe/qmc.h

index f498db9abe35f09c9e49cdb0aac306467e7ab37f..e23d600184006bbc5a6ca144bc2476fafdede616 100644 (file)
@@ -1777,13 +1777,15 @@ static struct qmc_chan *qmc_chan_get_from_qmc(struct device_node *qmc_np, unsign
        return qmc_chan;
 }
 
-struct qmc_chan *qmc_chan_get_byphandle(struct device_node *np, const char *phandle_name)
+struct qmc_chan *qmc_chan_get_byphandles_index(struct device_node *np,
+                                              const char *phandles_name,
+                                              int index)
 {
        struct of_phandle_args out_args;
        struct qmc_chan *qmc_chan;
        int ret;
 
-       ret = of_parse_phandle_with_fixed_args(np, phandle_name, 1, 0,
+       ret = of_parse_phandle_with_fixed_args(np, phandles_name, 1, index,
                                               &out_args);
        if (ret < 0)
                return ERR_PTR(ret);
@@ -1797,7 +1799,7 @@ struct qmc_chan *qmc_chan_get_byphandle(struct device_node *np, const char *phan
        of_node_put(out_args.np);
        return qmc_chan;
 }
-EXPORT_SYMBOL(qmc_chan_get_byphandle);
+EXPORT_SYMBOL(qmc_chan_get_byphandles_index);
 
 struct qmc_chan *qmc_chan_get_bychild(struct device_node *np)
 {
@@ -1827,9 +1829,10 @@ static void devm_qmc_chan_release(struct device *dev, void *res)
        qmc_chan_put(*qmc_chan);
 }
 
-struct qmc_chan *devm_qmc_chan_get_byphandle(struct device *dev,
-                                            struct device_node *np,
-                                            const char *phandle_name)
+struct qmc_chan *devm_qmc_chan_get_byphandles_index(struct device *dev,
+                                                   struct device_node *np,
+                                                   const char *phandles_name,
+                                                   int index)
 {
        struct qmc_chan *qmc_chan;
        struct qmc_chan **dr;
@@ -1838,7 +1841,7 @@ struct qmc_chan *devm_qmc_chan_get_byphandle(struct device *dev,
        if (!dr)
                return ERR_PTR(-ENOMEM);
 
-       qmc_chan = qmc_chan_get_byphandle(np, phandle_name);
+       qmc_chan = qmc_chan_get_byphandles_index(np, phandles_name, index);
        if (!IS_ERR(qmc_chan)) {
                *dr = qmc_chan;
                devres_add(dev, dr);
@@ -1848,7 +1851,7 @@ struct qmc_chan *devm_qmc_chan_get_byphandle(struct device *dev,
 
        return qmc_chan;
 }
-EXPORT_SYMBOL(devm_qmc_chan_get_byphandle);
+EXPORT_SYMBOL(devm_qmc_chan_get_byphandles_index);
 
 struct qmc_chan *devm_qmc_chan_get_bychild(struct device *dev,
                                           struct device_node *np)
index 2a333fc1ea818296e96f0c5fbd4c34cfa803b63f..0fa7205145cec11615d2532beb3aee8c518c53f9 100644 (file)
@@ -16,11 +16,30 @@ struct device_node;
 struct device;
 struct qmc_chan;
 
-struct qmc_chan *qmc_chan_get_byphandle(struct device_node *np, const char *phandle_name);
+struct qmc_chan *qmc_chan_get_byphandles_index(struct device_node *np,
+                                              const char *phandles_name,
+                                              int index);
+struct qmc_chan *devm_qmc_chan_get_byphandles_index(struct device *dev,
+                                                   struct device_node *np,
+                                                   const char *phandles_name,
+                                                   int index);
+
+static inline struct qmc_chan *qmc_chan_get_byphandle(struct device_node *np,
+                                                     const char *phandle_name)
+{
+       return qmc_chan_get_byphandles_index(np, phandle_name, 0);
+}
+
+static inline struct qmc_chan *devm_qmc_chan_get_byphandle(struct device *dev,
+                                                          struct device_node *np,
+                                                          const char *phandle_name)
+{
+       return devm_qmc_chan_get_byphandles_index(dev, np, phandle_name, 0);
+}
+
 struct qmc_chan *qmc_chan_get_bychild(struct device_node *np);
 void qmc_chan_put(struct qmc_chan *chan);
-struct qmc_chan *devm_qmc_chan_get_byphandle(struct device *dev, struct device_node *np,
-                                            const char *phandle_name);
+
 struct qmc_chan *devm_qmc_chan_get_bychild(struct device *dev, struct device_node *np);
 
 enum qmc_mode {