mirror of
https://github.com/torvalds/linux.git
synced 2026-04-18 06:44:00 -04:00
firmware: tegra: bpmp: Add tegra_bpmp_get_with_id() function
Some device tree bindings need to specify a parameter along with a BPMP phandle reference to designate the ID associated with a given controller that needs to interoperate with BPMP. Typically this is specified as an extra cell in the nvidia,bpmp property, so add a helper to parse this ID while resolving the phandle reference. Signed-off-by: Thierry Reding <treding@nvidia.com>
This commit is contained in:
@@ -32,6 +32,40 @@ channel_to_ops(struct tegra_bpmp_channel *channel)
|
||||
return bpmp->soc->ops;
|
||||
}
|
||||
|
||||
struct tegra_bpmp *tegra_bpmp_get_with_id(struct device *dev, unsigned int *id)
|
||||
{
|
||||
struct platform_device *pdev;
|
||||
struct of_phandle_args args;
|
||||
struct tegra_bpmp *bpmp;
|
||||
int err;
|
||||
|
||||
err = __of_parse_phandle_with_args(dev->of_node, "nvidia,bpmp", NULL,
|
||||
1, 0, &args);
|
||||
if (err < 0)
|
||||
return ERR_PTR(err);
|
||||
|
||||
pdev = of_find_device_by_node(args.np);
|
||||
if (!pdev) {
|
||||
bpmp = ERR_PTR(-ENODEV);
|
||||
goto put;
|
||||
}
|
||||
|
||||
bpmp = platform_get_drvdata(pdev);
|
||||
if (!bpmp) {
|
||||
bpmp = ERR_PTR(-EPROBE_DEFER);
|
||||
put_device(&pdev->dev);
|
||||
goto put;
|
||||
}
|
||||
|
||||
if (id)
|
||||
*id = args.args[0];
|
||||
|
||||
put:
|
||||
of_node_put(args.np);
|
||||
return bpmp;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(tegra_bpmp_get_with_id);
|
||||
|
||||
struct tegra_bpmp *tegra_bpmp_get(struct device *dev)
|
||||
{
|
||||
struct platform_device *pdev;
|
||||
|
||||
@@ -127,6 +127,7 @@ struct tegra_bpmp_message {
|
||||
|
||||
#if IS_ENABLED(CONFIG_TEGRA_BPMP)
|
||||
struct tegra_bpmp *tegra_bpmp_get(struct device *dev);
|
||||
struct tegra_bpmp *tegra_bpmp_get_with_id(struct device *dev, unsigned int *id);
|
||||
void tegra_bpmp_put(struct tegra_bpmp *bpmp);
|
||||
int tegra_bpmp_transfer_atomic(struct tegra_bpmp *bpmp,
|
||||
struct tegra_bpmp_message *msg);
|
||||
@@ -145,6 +146,13 @@ static inline struct tegra_bpmp *tegra_bpmp_get(struct device *dev)
|
||||
{
|
||||
return ERR_PTR(-ENOTSUPP);
|
||||
}
|
||||
|
||||
static inline struct tegra_bpmp *tegra_bpmp_get_with_id(struct device *dev,
|
||||
unsigned int *id)
|
||||
{
|
||||
return ERR_PTR(-ENODEV);
|
||||
}
|
||||
|
||||
static inline void tegra_bpmp_put(struct tegra_bpmp *bpmp)
|
||||
{
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user