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: 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>
This commit is contained in:
@@ -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)
|
||||
|
||||
@@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user