Messages in this thread Patch in this message | | | From | Cristian Marussi <> | Subject | [PATCH v6 09/17] firmware: arm_scmi: Make .clear_channel optional | Date | Mon, 12 Jul 2021 15:18:25 +0100 |
| |
Make transport operation .clear_channel optional since some transports do not need it and so avoid to have them implement dummy callbacks.
Signed-off-by: Cristian Marussi <cristian.marussi@arm.com> --- drivers/firmware/arm_scmi/driver.c | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-)
diff --git a/drivers/firmware/arm_scmi/driver.c b/drivers/firmware/arm_scmi/driver.c index dc14bc63cb43..a952b6527b8a 100644 --- a/drivers/firmware/arm_scmi/driver.c +++ b/drivers/firmware/arm_scmi/driver.c @@ -593,6 +593,13 @@ static inline void scmi_xfer_state_update(struct scmi_xfer *xfer) } } +static inline void scmi_clear_channel(struct scmi_info *info, + struct scmi_chan_info *cinfo) +{ + if (info->desc->ops->clear_channel) + info->desc->ops->clear_channel(cinfo); +} + static void scmi_handle_notification(struct scmi_chan_info *cinfo, u32 msg_hdr, void *priv) { @@ -607,7 +614,7 @@ static void scmi_handle_notification(struct scmi_chan_info *cinfo, if (IS_ERR(xfer)) { dev_err(dev, "failed to get free message slot (%ld)\n", PTR_ERR(xfer)); - info->desc->ops->clear_channel(cinfo); + scmi_clear_channel(info, cinfo); return; } @@ -625,7 +632,7 @@ static void scmi_handle_notification(struct scmi_chan_info *cinfo, __scmi_xfer_put(minfo, xfer); - info->desc->ops->clear_channel(cinfo); + scmi_clear_channel(info, cinfo); } static void scmi_handle_response(struct scmi_chan_info *cinfo, @@ -636,7 +643,7 @@ static void scmi_handle_response(struct scmi_chan_info *cinfo, xfer = scmi_xfer_command_acquire(cinfo, msg_hdr); if (IS_ERR(xfer)) { - info->desc->ops->clear_channel(cinfo); + scmi_clear_channel(info, cinfo); return; } @@ -655,7 +662,7 @@ static void scmi_handle_response(struct scmi_chan_info *cinfo, xfer->hdr.type); if (xfer->hdr.type == MSG_TYPE_DELAYED_RESP) { - info->desc->ops->clear_channel(cinfo); + scmi_clear_channel(info, cinfo); complete(xfer->async_done); } else { complete(&xfer->done); -- 2.17.1
| |