firmware: arm_scmi: Skip protocol initialisation for additional devices
The scmi bus now supports adding multiple devices per protocol, and since scmi_protocol_init is called for each scmi device created, we must avoid allocating protocol private data and initialising the protocol itself if it is already initialised. In order to achieve the same, we can simple replace the idr pointer from protocol initialisation function to a dummy function. Suggested-by: Cristian Marussi <cristian.marussi@arm.com> Reviewed-by: Cristian Marussi <cristian.marussi@arm.com> Signed-off-by: Sudeep Holla <sudeep.holla@arm.com>
This commit is contained in:
Родитель
b55b06b794
Коммит
2deb267b26
|
@ -60,6 +60,11 @@ static int scmi_protocol_init(int protocol_id, struct scmi_handle *handle)
|
||||||
return fn(handle);
|
return fn(handle);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int scmi_protocol_dummy_init(struct scmi_handle *handle)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
static int scmi_dev_probe(struct device *dev)
|
static int scmi_dev_probe(struct device *dev)
|
||||||
{
|
{
|
||||||
struct scmi_driver *scmi_drv = to_scmi_driver(dev->driver);
|
struct scmi_driver *scmi_drv = to_scmi_driver(dev->driver);
|
||||||
|
@ -78,6 +83,10 @@ static int scmi_dev_probe(struct device *dev)
|
||||||
if (ret)
|
if (ret)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
|
/* Skip protocol initialisation for additional devices */
|
||||||
|
idr_replace(&scmi_protocols, &scmi_protocol_dummy_init,
|
||||||
|
scmi_dev->protocol_id);
|
||||||
|
|
||||||
return scmi_drv->probe(scmi_dev);
|
return scmi_drv->probe(scmi_dev);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Загрузка…
Ссылка в новой задаче