Commit 37797c60 authored by Herve Codina's avatar Herve Codina Committed by Mark Brown

soc: fsl: cpm1: qmc: Introduce functions to get a channel from a phandle list

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: default avatarHerve Codina <herve.codina@bootlin.com>
Link: https://patch.msgid.link/20240701113038.55144-8-herve.codina@bootlin.comSigned-off-by: default avatarMark Brown <broonie@kernel.org>
parent b81cfa66
...@@ -1777,13 +1777,15 @@ static struct qmc_chan *qmc_chan_get_from_qmc(struct device_node *qmc_np, unsign ...@@ -1777,13 +1777,15 @@ static struct qmc_chan *qmc_chan_get_from_qmc(struct device_node *qmc_np, unsign
return qmc_chan; 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 of_phandle_args out_args;
struct qmc_chan *qmc_chan; struct qmc_chan *qmc_chan;
int ret; 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); &out_args);
if (ret < 0) if (ret < 0)
return ERR_PTR(ret); return ERR_PTR(ret);
...@@ -1797,7 +1799,7 @@ struct qmc_chan *qmc_chan_get_byphandle(struct device_node *np, const char *phan ...@@ -1797,7 +1799,7 @@ struct qmc_chan *qmc_chan_get_byphandle(struct device_node *np, const char *phan
of_node_put(out_args.np); of_node_put(out_args.np);
return qmc_chan; 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) 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) ...@@ -1827,9 +1829,10 @@ static void devm_qmc_chan_release(struct device *dev, void *res)
qmc_chan_put(*qmc_chan); qmc_chan_put(*qmc_chan);
} }
struct qmc_chan *devm_qmc_chan_get_byphandle(struct device *dev, struct qmc_chan *devm_qmc_chan_get_byphandles_index(struct device *dev,
struct device_node *np, struct device_node *np,
const char *phandle_name) const char *phandles_name,
int index)
{ {
struct qmc_chan *qmc_chan; struct qmc_chan *qmc_chan;
struct qmc_chan **dr; struct qmc_chan **dr;
...@@ -1838,7 +1841,7 @@ struct qmc_chan *devm_qmc_chan_get_byphandle(struct device *dev, ...@@ -1838,7 +1841,7 @@ struct qmc_chan *devm_qmc_chan_get_byphandle(struct device *dev,
if (!dr) if (!dr)
return ERR_PTR(-ENOMEM); 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)) { if (!IS_ERR(qmc_chan)) {
*dr = qmc_chan; *dr = qmc_chan;
devres_add(dev, dr); devres_add(dev, dr);
...@@ -1848,7 +1851,7 @@ struct qmc_chan *devm_qmc_chan_get_byphandle(struct device *dev, ...@@ -1848,7 +1851,7 @@ struct qmc_chan *devm_qmc_chan_get_byphandle(struct device *dev,
return qmc_chan; 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 qmc_chan *devm_qmc_chan_get_bychild(struct device *dev,
struct device_node *np) struct device_node *np)
......
...@@ -16,11 +16,30 @@ struct device_node; ...@@ -16,11 +16,30 @@ struct device_node;
struct device; struct device;
struct qmc_chan; 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); struct qmc_chan *qmc_chan_get_bychild(struct device_node *np);
void qmc_chan_put(struct qmc_chan *chan); 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); struct qmc_chan *devm_qmc_chan_get_bychild(struct device *dev, struct device_node *np);
enum qmc_mode { enum qmc_mode {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment