mirror of
https://github.com/AsahiLinux/u-boot
synced 2024-11-24 21:54:01 +00:00
firmware: scmi: factorize scmi transport look up
Defines local helper function find_scmi_transport_device() with the instructions to find the SCMI transport device from a SCMI protocol device. Cc: Patrick Delaunay <patrick.delaunay@foss.st.com> Signed-off-by: Etienne Carriere <etienne.carriere@linaro.org>
This commit is contained in:
parent
85dc582892
commit
5a11df381a
1 changed files with 17 additions and 9 deletions
|
@ -109,6 +109,20 @@ static int scmi_bind_protocols(struct udevice *dev)
|
|||
return ret;
|
||||
}
|
||||
|
||||
static struct udevice *find_scmi_transport_device(struct udevice *dev)
|
||||
{
|
||||
struct udevice *parent = dev;
|
||||
|
||||
do {
|
||||
parent = dev_get_parent(parent);
|
||||
} while (parent && device_get_uclass_id(parent) != UCLASS_SCMI_AGENT);
|
||||
|
||||
if (!parent)
|
||||
dev_err(dev, "Invalid SCMI device, agent not found\n");
|
||||
|
||||
return parent;
|
||||
}
|
||||
|
||||
static const struct scmi_agent_ops *transport_dev_ops(struct udevice *dev)
|
||||
{
|
||||
return (const struct scmi_agent_ops *)dev->driver->ops;
|
||||
|
@ -118,17 +132,11 @@ int devm_scmi_process_msg(struct udevice *dev, struct scmi_channel *channel,
|
|||
struct scmi_msg *msg)
|
||||
{
|
||||
const struct scmi_agent_ops *ops;
|
||||
struct udevice *parent = dev;
|
||||
struct udevice *parent;
|
||||
|
||||
/* Find related SCMI agent device */
|
||||
do {
|
||||
parent = dev_get_parent(parent);
|
||||
} while (parent && device_get_uclass_id(parent) != UCLASS_SCMI_AGENT);
|
||||
|
||||
if (!parent) {
|
||||
dev_err(dev, "Invalid SCMI device, agent not found\n");
|
||||
parent = find_scmi_transport_device(dev);
|
||||
if (!parent)
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
ops = transport_dev_ops(parent);
|
||||
|
||||
|
|
Loading…
Reference in a new issue