diff options
author | Cristian Marussi <cristian.marussi@arm.com> | 2022-07-04 11:19:32 +0100 |
---|---|---|
committer | Sudeep Holla <sudeep.holla@arm.com> | 2022-07-04 14:28:42 +0100 |
commit | d91079995fa62720e11a39c08b932f2f9a8cbfae (patch) | |
tree | 53efce23e9e834bdba12e6cf154c745f7b68e3d9 /include/linux/scmi_protocol.h | |
parent | 7097f29819bb70374dfae9f705e548a720f16f94 (diff) | |
download | lwn-d91079995fa62720e11a39c08b932f2f9a8cbfae.tar.gz lwn-d91079995fa62720e11a39c08b932f2f9a8cbfae.zip |
firmware: arm_scmi: Add devm_protocol_acquire helper
Add a method to get hold of a protocol, causing it to be initialized and
its resource accounting updated, without getting access to its operations
and handle.
Some protocols, like SCMI SystemPower, do not expose any protocol ops to
the kernel OSPM agent but still need to be at least initialized. This
helper avoids the need to invoke a full devm_get_protocol() only to get
the protocol initialized while throwing away unused the protocol ops and
handle.
Link: https://lore.kernel.org/r/20220704101933.2981635-4-cristian.marussi@arm.com
Signed-off-by: Cristian Marussi <cristian.marussi@arm.com>
Signed-off-by: Sudeep Holla <sudeep.holla@arm.com>
Diffstat (limited to 'include/linux/scmi_protocol.h')
-rw-r--r-- | include/linux/scmi_protocol.h | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/include/linux/scmi_protocol.h b/include/linux/scmi_protocol.h index 311aa3c73aac..898488c7f185 100644 --- a/include/linux/scmi_protocol.h +++ b/include/linux/scmi_protocol.h @@ -624,6 +624,9 @@ struct scmi_notify_ops { * * @dev: pointer to the SCMI device * @version: pointer to the structure containing SCMI version information + * @devm_protocol_acquire: devres managed method to get hold of a protocol, + * causing its initialization and related resource + * accounting * @devm_protocol_get: devres managed method to acquire a protocol and get specific * operations and a dedicated protocol handler * @devm_protocol_put: devres managed method to release a protocol @@ -642,6 +645,8 @@ struct scmi_handle { struct device *dev; struct scmi_revision_info *version; + int __must_check (*devm_protocol_acquire)(struct scmi_device *sdev, + u8 proto); const void __must_check * (*devm_protocol_get)(struct scmi_device *sdev, u8 proto, struct scmi_protocol_handle **ph); |