diff --git a/drivers/platform/tegra/rtcpu/Makefile b/drivers/platform/tegra/rtcpu/Makefile index c5e74184..664e4d0a 100644 --- a/drivers/platform/tegra/rtcpu/Makefile +++ b/drivers/platform/tegra/rtcpu/Makefile @@ -3,9 +3,7 @@ ccflags-y += -Wframe-larger-than=2048 -ifneq ($(CONFIG_TEGRA_IVC_LEGACY_DISABLE),y) obj-m += capture-ivc.o -endif obj-m += ivc-bus.o obj-m += camchar.o obj-m += camera-diagnostics.o diff --git a/drivers/platform/tegra/rtcpu/capture-ivc.c b/drivers/platform/tegra/rtcpu/capture-ivc.c index 901b2019..65496b8d 100644 --- a/drivers/platform/tegra/rtcpu/capture-ivc.c +++ b/drivers/platform/tegra/rtcpu/capture-ivc.c @@ -1,6 +1,8 @@ // SPDX-License-Identifier: GPL-2.0 // Copyright (c) 2022-2023, NVIDIA CORPORATION & AFFILIATES. All rights reserved. +#include + #include #include @@ -357,11 +359,25 @@ static inline void tegra_capture_ivc_recv(struct tegra_capture_ivc *civc) { struct tegra_ivc *ivc = &civc->chan->ivc; struct device *dev = &civc->chan->dev; + const void *msg; + const struct tegra_capture_ivc_msg_header *hdr; + uint32_t id; while (tegra_ivc_can_read(ivc)) { - const void *msg = tegra_ivc_read_get_next_frame(ivc); - const struct tegra_capture_ivc_msg_header *hdr = msg; - uint32_t id = hdr->channel_id; +#if defined(NV_TEGRA_IVC_STRUCT_HAS_IOSYS_MAP) /* Linux 6.2 */ + struct iosys_map map; + int err; + err = tegra_ivc_read_get_next_frame(ivc, &map); + if (err) { + dev_err(dev, "Failed to get next frame for read\n"); + return; + } + msg = map.vaddr; +#else + msg = tegra_ivc_read_get_next_frame(ivc); +#endif + hdr = msg; + id = hdr->channel_id; trace_capture_ivc_recv(dev_name(dev), hdr->msg_id, id); diff --git a/include/linux/tegra-capture-ivc.h b/include/linux/tegra-capture-ivc.h index a9dfc4ca..dfa4c5c0 100644 --- a/include/linux/tegra-capture-ivc.h +++ b/include/linux/tegra-capture-ivc.h @@ -9,7 +9,6 @@ #include #include -#if !defined(CONFIG_TEGRA_IVC_LEGACY_DISABLE) /** * @brief Submit the control message binary blob to capture-IVC driver, * which is to be transferred over control IVC channel to RTCPU. @@ -134,59 +133,4 @@ int tegra_capture_ivc_unregister_control_cb( */ int tegra_capture_ivc_unregister_capture_cb( uint32_t chan_id); -#else -typedef void (*tegra_capture_ivc_cb_func)( - const void *resp_desc, - const void *priv_context); - -static inline int tegra_capture_ivc_control_submit( - const void *control_desc, - size_t len) -{ - return -ENOTSUPP; -}; - -static inline int tegra_capture_ivc_capture_submit( - const void *capture_desc, - size_t len) -{ - return -ENOTSUPP; -}; - -static inline int tegra_capture_ivc_register_control_cb( - tegra_capture_ivc_cb_func control_resp_cb, - uint32_t *trans_id, - const void *priv_context) -{ - return -ENOTSUPP; -}; - -static inline int tegra_capture_ivc_notify_chan_id( - uint32_t chan_id, - uint32_t trans_id) -{ - return -ENOTSUPP; -}; - -static inline int tegra_capture_ivc_register_capture_cb( - tegra_capture_ivc_cb_func capture_status_ind_cb, - uint32_t chan_id, - const void *priv_context) -{ - return -ENOTSUPP; -}; - -static inline int tegra_capture_ivc_unregister_control_cb( - uint32_t id) -{ - return -ENOTSUPP; -}; - -static inline int tegra_capture_ivc_unregister_capture_cb( - uint32_t chan_id) -{ - return -ENOTSUPP; -}; -#endif /* !defined(CONFIG_TEGRA_IVC_LEGACY_DISABLE) */ - #endif /* INCLUDE_CAPTURE_IVC_H */