* [PATCH v5 0/4] Use V4L2 mbus config for conveying MEI CSI link frequency
@ 2024-05-16 7:05 Sakari Ailus
2024-05-16 7:05 ` [PATCH v5 1/4] media: v4l: Support passing media pad argument to v4l2_get_link_freq() Sakari Ailus
` (3 more replies)
0 siblings, 4 replies; 6+ messages in thread
From: Sakari Ailus @ 2024-05-16 7:05 UTC (permalink / raw)
To: linux-media; +Cc: Jacopo Mondi, hverkuil, laurent.pinchart, Wentong Wu
Hi folks,
This set adds a few helpers for obtaining the link frequency from the V4L2
mbus config for devices that don't need to provide an UAPI to change it,
and finally add support for the Intel IVSC CSI device.
since v4:
- Rework documentation a little.
- Remove wrong alignment change in 2nd patch.
- Move link_freq field after the type field in struct v4l2_mbus_config.
since v3:
- Add back missing ret I accidentally removed rather than moved to the 2nd
patch.
since v2:
- Switch to V4L2 mbus config for conveying the link frequency.
since v1:
- Add a new 64-bit integer control V4L2_CID_CUR_LINK_FREQ instead of
re-using V4L2_CID_LINK_FREQ.
Sakari Ailus (4):
media: v4l: Support passing media pad argument to v4l2_get_link_freq()
media: v4l: Support obtaining link frequency via get_mbus_config
media: Documentation: Update link frequency driver documentation
media: ivsc: csi: Obtain link frequency from the media pad
Documentation/driver-api/media/tx-rx.rst | 4 ++
drivers/media/pci/intel/ivsc/mei_csi.c | 72 ++++++++----------------
drivers/media/v4l2-core/v4l2-common.c | 24 +++++++-
include/media/v4l2-common.h | 14 ++++-
include/media/v4l2-mediabus.h | 2 +
5 files changed, 63 insertions(+), 53 deletions(-)
base-commit: 8771b7f31b7fff91a998e6afdb60650d4bac59a5
--
2.39.2
^ permalink raw reply [flat|nested] 6+ messages in thread
* [PATCH v5 1/4] media: v4l: Support passing media pad argument to v4l2_get_link_freq()
2024-05-16 7:05 [PATCH v5 0/4] Use V4L2 mbus config for conveying MEI CSI link frequency Sakari Ailus
@ 2024-05-16 7:05 ` Sakari Ailus
2024-05-16 11:15 ` kernel test robot
2024-05-16 7:05 ` [PATCH v5 2/4] media: v4l: Support obtaining link frequency via get_mbus_config Sakari Ailus
` (2 subsequent siblings)
3 siblings, 1 reply; 6+ messages in thread
From: Sakari Ailus @ 2024-05-16 7:05 UTC (permalink / raw)
To: linux-media; +Cc: Jacopo Mondi, hverkuil, laurent.pinchart, Wentong Wu
v4l2_get_link_freq() accepts a V4L2 control handler for now, but it needs
to take struct media_pad argument in order to obtain the link frequency
using get_mbus_config() pad op. Prepare for this by allowing struct
media_pad as well.
Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com>
---
drivers/media/v4l2-core/v4l2-common.c | 19 ++++++++++++++++---
include/media/v4l2-common.h | 14 +++++++++++---
2 files changed, 27 insertions(+), 6 deletions(-)
diff --git a/drivers/media/v4l2-core/v4l2-common.c b/drivers/media/v4l2-core/v4l2-common.c
index 4165c815faef..7f69b5a025fa 100644
--- a/drivers/media/v4l2-core/v4l2-common.c
+++ b/drivers/media/v4l2-core/v4l2-common.c
@@ -464,8 +464,8 @@ int v4l2_fill_pixfmt(struct v4l2_pix_format *pixfmt, u32 pixelformat,
}
EXPORT_SYMBOL_GPL(v4l2_fill_pixfmt);
-s64 v4l2_get_link_freq(struct v4l2_ctrl_handler *handler, unsigned int mul,
- unsigned int div)
+s64 __v4l2_get_link_freq_ctrl(struct v4l2_ctrl_handler *handler,
+ unsigned int mul, unsigned int div)
{
struct v4l2_ctrl *ctrl;
s64 freq;
@@ -500,7 +500,20 @@ s64 v4l2_get_link_freq(struct v4l2_ctrl_handler *handler, unsigned int mul,
return freq > 0 ? freq : -EINVAL;
}
-EXPORT_SYMBOL_GPL(v4l2_get_link_freq);
+EXPORT_SYMBOL_GPL(__v4l2_get_link_freq_ctrl);
+
+s64 __v4l2_get_link_freq_pad(struct media_pad *pad, unsigned int mul,
+ unsigned int div)
+{
+ struct v4l2_subdev *sd;
+
+ sd = media_entity_to_v4l2_subdev(pad->entity);
+ if (!sd)
+ return -ENODEV;
+
+ return __v4l2_get_link_freq_ctrl(sd->ctrl_handler, mul, div);
+}
+EXPORT_SYMBOL_GPL(__v4l2_get_link_freq_pad);
/*
* Simplify a fraction using a simple continued fraction decomposition. The
diff --git a/include/media/v4l2-common.h b/include/media/v4l2-common.h
index 63ad36f04f72..d7115cd61a38 100644
--- a/include/media/v4l2-common.h
+++ b/include/media/v4l2-common.h
@@ -525,7 +525,8 @@ int v4l2_fill_pixfmt_mp(struct v4l2_pix_format_mplane *pixfmt, u32 pixelformat,
/**
* v4l2_get_link_freq - Get link rate from transmitter
*
- * @handler: The transmitter's control handler
+ * @pad: The transmitter's media pad (or control handler for compatibility
+ * reasons, don't use in new code)
* @mul: The multiplier between pixel rate and link frequency. Bits per pixel on
* D-PHY, samples per clock on parallel. 0 otherwise.
* @div: The divisor between pixel rate and link frequency. Number of data lanes
@@ -541,8 +542,15 @@ int v4l2_fill_pixfmt_mp(struct v4l2_pix_format_mplane *pixfmt, u32 pixelformat,
* * %-ENOENT: Link frequency or pixel rate control not found
* * %-EINVAL: Invalid link frequency value
*/
-s64 v4l2_get_link_freq(struct v4l2_ctrl_handler *handler, unsigned int mul,
- unsigned int div);
+#define v4l2_get_link_freq(pad, mul, div) \
+ _Generic(pad, \
+ struct media_pad *: __v4l2_get_link_freq_pad, \
+ struct v4l2_ctrl_handler *: __v4l2_get_link_freq_ctrl) \
+ (pad, mul, div)
+s64 __v4l2_get_link_freq_pad(struct media_pad *pad, unsigned int mul,
+ unsigned int div);
+s64 __v4l2_get_link_freq_ctrl(struct v4l2_ctrl_handler *handler,
+ unsigned int mul, unsigned int div);
void v4l2_simplify_fraction(u32 *numerator, u32 *denominator,
unsigned int n_terms, unsigned int threshold);
--
2.39.2
^ permalink raw reply related [flat|nested] 6+ messages in thread
* [PATCH v5 2/4] media: v4l: Support obtaining link frequency via get_mbus_config
2024-05-16 7:05 [PATCH v5 0/4] Use V4L2 mbus config for conveying MEI CSI link frequency Sakari Ailus
2024-05-16 7:05 ` [PATCH v5 1/4] media: v4l: Support passing media pad argument to v4l2_get_link_freq() Sakari Ailus
@ 2024-05-16 7:05 ` Sakari Ailus
2024-05-16 7:05 ` [PATCH v5 3/4] media: Documentation: Update link frequency driver documentation Sakari Ailus
2024-05-16 7:05 ` [PATCH v5 4/4] media: ivsc: csi: Obtain link frequency from the media pad Sakari Ailus
3 siblings, 0 replies; 6+ messages in thread
From: Sakari Ailus @ 2024-05-16 7:05 UTC (permalink / raw)
To: linux-media; +Cc: Jacopo Mondi, hverkuil, laurent.pinchart, Wentong Wu
Add link_freq field to struct v4l2_mbus_config in order to pass the link
frequency to the receiving sub-device.
Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com>
---
drivers/media/v4l2-core/v4l2-common.c | 11 ++++++++---
include/media/v4l2-mediabus.h | 2 ++
2 files changed, 10 insertions(+), 3 deletions(-)
diff --git a/drivers/media/v4l2-core/v4l2-common.c b/drivers/media/v4l2-core/v4l2-common.c
index 7f69b5a025fa..76848cf2c260 100644
--- a/drivers/media/v4l2-core/v4l2-common.c
+++ b/drivers/media/v4l2-core/v4l2-common.c
@@ -505,13 +505,18 @@ EXPORT_SYMBOL_GPL(__v4l2_get_link_freq_ctrl);
s64 __v4l2_get_link_freq_pad(struct media_pad *pad, unsigned int mul,
unsigned int div)
{
+ struct v4l2_mbus_config mbus_config = {};
struct v4l2_subdev *sd;
+ int ret;
sd = media_entity_to_v4l2_subdev(pad->entity);
- if (!sd)
- return -ENODEV;
+ ret = v4l2_subdev_call(sd, pad, get_mbus_config, pad->index,
+ &mbus_config);
+ if (ret < 0 && ret != -ENOIOCTLCMD)
+ return ret;
- return __v4l2_get_link_freq_ctrl(sd->ctrl_handler, mul, div);
+ return mbus_config.link_freq ?:
+ __v4l2_get_link_freq_ctrl(sd->ctrl_handler, mul, div);
}
EXPORT_SYMBOL_GPL(__v4l2_get_link_freq_pad);
diff --git a/include/media/v4l2-mediabus.h b/include/media/v4l2-mediabus.h
index 5bce6e423e94..cc5f776dc662 100644
--- a/include/media/v4l2-mediabus.h
+++ b/include/media/v4l2-mediabus.h
@@ -148,6 +148,7 @@ enum v4l2_mbus_type {
/**
* struct v4l2_mbus_config - media bus configuration
* @type: interface type
+ * @link_freq: The link frequency. See also V4L2_CID_LINK_FREQ control.
* @bus: bus configuration data structure
* @bus.parallel: embedded &struct v4l2_mbus_config_parallel.
* Used if the bus is parallel or BT.656.
@@ -162,6 +163,7 @@ enum v4l2_mbus_type {
*/
struct v4l2_mbus_config {
enum v4l2_mbus_type type;
+ u64 link_freq;
union {
struct v4l2_mbus_config_parallel parallel;
struct v4l2_mbus_config_mipi_csi1 mipi_csi1;
--
2.39.2
^ permalink raw reply related [flat|nested] 6+ messages in thread
* [PATCH v5 3/4] media: Documentation: Update link frequency driver documentation
2024-05-16 7:05 [PATCH v5 0/4] Use V4L2 mbus config for conveying MEI CSI link frequency Sakari Ailus
2024-05-16 7:05 ` [PATCH v5 1/4] media: v4l: Support passing media pad argument to v4l2_get_link_freq() Sakari Ailus
2024-05-16 7:05 ` [PATCH v5 2/4] media: v4l: Support obtaining link frequency via get_mbus_config Sakari Ailus
@ 2024-05-16 7:05 ` Sakari Ailus
2024-05-16 7:05 ` [PATCH v5 4/4] media: ivsc: csi: Obtain link frequency from the media pad Sakari Ailus
3 siblings, 0 replies; 6+ messages in thread
From: Sakari Ailus @ 2024-05-16 7:05 UTC (permalink / raw)
To: linux-media; +Cc: Jacopo Mondi, hverkuil, laurent.pinchart, Wentong Wu
Add the get_mbus_config() as the means for conveying the link frequency
towards the receiver drivers.
Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com>
---
Documentation/driver-api/media/tx-rx.rst | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/Documentation/driver-api/media/tx-rx.rst b/Documentation/driver-api/media/tx-rx.rst
index 29d66a47b56e..eaf3d597fa1d 100644
--- a/Documentation/driver-api/media/tx-rx.rst
+++ b/Documentation/driver-api/media/tx-rx.rst
@@ -49,6 +49,10 @@ Link frequency
The :ref:`V4L2_CID_LINK_FREQ <v4l2-cid-link-freq>` control is used to tell the
receiver the frequency of the bus (i.e. it is not the same as the symbol rate).
+On devices where the link frequency isn't configurable, the link_freq field of
+struct v4l2_mbus_config is recommended over controls for conveying the link
+frequency to the downstream driver in the pipeline.
+
``.s_stream()`` callback
^^^^^^^^^^^^^^^^^^^^^^^^
--
2.39.2
^ permalink raw reply related [flat|nested] 6+ messages in thread
* [PATCH v5 4/4] media: ivsc: csi: Obtain link frequency from the media pad
2024-05-16 7:05 [PATCH v5 0/4] Use V4L2 mbus config for conveying MEI CSI link frequency Sakari Ailus
` (2 preceding siblings ...)
2024-05-16 7:05 ` [PATCH v5 3/4] media: Documentation: Update link frequency driver documentation Sakari Ailus
@ 2024-05-16 7:05 ` Sakari Ailus
3 siblings, 0 replies; 6+ messages in thread
From: Sakari Ailus @ 2024-05-16 7:05 UTC (permalink / raw)
To: linux-media; +Cc: Jacopo Mondi, hverkuil, laurent.pinchart, Wentong Wu
Support the use of the media pad for obtaining the link frequency.
Similarly, call the v4l2_get_link_freq() on the media pad, not on the
remote's control handler.
Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com>
---
drivers/media/pci/intel/ivsc/mei_csi.c | 72 +++++++++-----------------
1 file changed, 25 insertions(+), 47 deletions(-)
diff --git a/drivers/media/pci/intel/ivsc/mei_csi.c b/drivers/media/pci/intel/ivsc/mei_csi.c
index 89b582a221ab..621a6ee32e01 100644
--- a/drivers/media/pci/intel/ivsc/mei_csi.c
+++ b/drivers/media/pci/intel/ivsc/mei_csi.c
@@ -35,8 +35,6 @@
#define MEI_CSI_ENTITY_NAME "Intel IVSC CSI"
-#define MEI_CSI_LINK_FREQ_400MHZ 400000000ULL
-
/* the 5s used here is based on experiment */
#define CSI_CMD_TIMEOUT (5 * HZ)
/* to setup CSI-2 link an extra delay needed and determined experimentally */
@@ -121,12 +119,11 @@ struct mei_csi {
struct mutex lock;
struct v4l2_subdev subdev;
- struct v4l2_subdev *remote;
+ struct media_pad *remote;
struct v4l2_async_notifier notifier;
struct v4l2_ctrl_handler ctrl_handler;
struct v4l2_ctrl *freq_ctrl;
struct v4l2_ctrl *privacy_ctrl;
- unsigned int remote_pad;
/* start streaming or not */
int streaming;
@@ -148,10 +145,6 @@ static const struct v4l2_mbus_framefmt mei_csi_format_mbus_default = {
.field = V4L2_FIELD_NONE,
};
-static s64 link_freq_menu_items[] = {
- MEI_CSI_LINK_FREQ_400MHZ
-};
-
static inline struct mei_csi *notifier_to_csi(struct v4l2_async_notifier *n)
{
return container_of(n, struct mei_csi, notifier);
@@ -284,11 +277,13 @@ static void mei_csi_rx(struct mei_cl_device *cldev)
static int mei_csi_set_stream(struct v4l2_subdev *sd, int enable)
{
struct mei_csi *csi = sd_to_csi(sd);
+ struct v4l2_subdev *remote_sd =
+ media_entity_to_v4l2_subdev(csi->remote->entity);
s64 freq;
int ret;
if (enable && csi->streaming == 0) {
- freq = v4l2_get_link_freq(csi->remote->ctrl_handler, 0, 0);
+ freq = v4l2_get_link_freq(csi->remote, 0, 0);
if (freq < 0) {
dev_err(&csi->cldev->dev,
"error %lld, invalid link_freq\n", freq);
@@ -307,11 +302,11 @@ static int mei_csi_set_stream(struct v4l2_subdev *sd, int enable)
if (ret < 0)
goto err_switch;
- ret = v4l2_subdev_call(csi->remote, video, s_stream, 1);
+ ret = v4l2_subdev_call(remote_sd, video, s_stream, 1);
if (ret)
goto err_switch;
} else if (!enable && csi->streaming == 1) {
- v4l2_subdev_call(csi->remote, video, s_stream, 0);
+ v4l2_subdev_call(remote_sd, video, s_stream, 0);
/* switch CSI-2 link to IVSC */
ret = csi_set_link_owner(csi, CSI_LINK_IVSC);
@@ -468,34 +463,29 @@ static int mei_csi_set_fmt(struct v4l2_subdev *sd,
return 0;
}
-static int mei_csi_g_volatile_ctrl(struct v4l2_ctrl *ctrl)
+static int mei_csi_get_mbus_config(struct v4l2_subdev *sd, unsigned int pad,
+ struct v4l2_mbus_config *mbus_config)
{
- struct mei_csi *csi = ctrl_to_csi(ctrl);
+ struct mei_csi *csi = sd_to_csi(sd);
+ unsigned int i;
s64 freq;
- if (ctrl->id == V4L2_CID_LINK_FREQ) {
- if (!csi->remote)
- return -EINVAL;
-
- freq = v4l2_get_link_freq(csi->remote->ctrl_handler, 0, 0);
- if (freq < 0) {
- dev_err(&csi->cldev->dev,
- "error %lld, invalid link_freq\n", freq);
- return -EINVAL;
- }
-
- link_freq_menu_items[0] = freq;
- ctrl->val = 0;
+ mbus_config->type = V4L2_MBUS_CSI2_DPHY;
+ for (i = 0; i < V4L2_MBUS_CSI2_MAX_DATA_LANES; i++)
+ mbus_config->bus.mipi_csi2.data_lanes[i] = i + 1;
+ mbus_config->bus.mipi_csi2.num_data_lanes = csi->nr_of_lanes;
- return 0;
+ freq = v4l2_get_link_freq(csi->remote, 0, 0);
+ if (freq < 0) {
+ dev_err(&csi->cldev->dev,
+ "error %lld, invalid link_freq\n", freq);
+ return -EINVAL;
}
- return -EINVAL;
-}
+ mbus_config->link_freq = csi->link_freq = freq;
-static const struct v4l2_ctrl_ops mei_csi_ctrl_ops = {
- .g_volatile_ctrl = mei_csi_g_volatile_ctrl,
-};
+ return 0;
+}
static const struct v4l2_subdev_video_ops mei_csi_video_ops = {
.s_stream = mei_csi_set_stream,
@@ -504,6 +494,7 @@ static const struct v4l2_subdev_video_ops mei_csi_video_ops = {
static const struct v4l2_subdev_pad_ops mei_csi_pad_ops = {
.get_fmt = v4l2_subdev_get_fmt,
.set_fmt = mei_csi_set_fmt,
+ .get_mbus_config = mei_csi_get_mbus_config,
};
static const struct v4l2_subdev_ops mei_csi_subdev_ops = {
@@ -531,8 +522,7 @@ static int mei_csi_notify_bound(struct v4l2_async_notifier *notifier,
if (pad < 0)
return pad;
- csi->remote = subdev;
- csi->remote_pad = pad;
+ csi->remote = &subdev->entity.pads[pad];
return media_create_pad_link(&subdev->entity, pad,
&csi->subdev.entity, CSI_PAD_SINK,
@@ -556,26 +546,14 @@ static const struct v4l2_async_notifier_operations mei_csi_notify_ops = {
static int mei_csi_init_controls(struct mei_csi *csi)
{
- u32 max;
int ret;
- ret = v4l2_ctrl_handler_init(&csi->ctrl_handler, 2);
+ ret = v4l2_ctrl_handler_init(&csi->ctrl_handler, 1);
if (ret)
return ret;
csi->ctrl_handler.lock = &csi->lock;
- max = ARRAY_SIZE(link_freq_menu_items) - 1;
- csi->freq_ctrl = v4l2_ctrl_new_int_menu(&csi->ctrl_handler,
- &mei_csi_ctrl_ops,
- V4L2_CID_LINK_FREQ,
- max,
- 0,
- link_freq_menu_items);
- if (csi->freq_ctrl)
- csi->freq_ctrl->flags |= V4L2_CTRL_FLAG_READ_ONLY |
- V4L2_CTRL_FLAG_VOLATILE;
-
csi->privacy_ctrl = v4l2_ctrl_new_std(&csi->ctrl_handler, NULL,
V4L2_CID_PRIVACY, 0, 1, 1, 0);
if (csi->privacy_ctrl)
--
2.39.2
^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: [PATCH v5 1/4] media: v4l: Support passing media pad argument to v4l2_get_link_freq()
2024-05-16 7:05 ` [PATCH v5 1/4] media: v4l: Support passing media pad argument to v4l2_get_link_freq() Sakari Ailus
@ 2024-05-16 11:15 ` kernel test robot
0 siblings, 0 replies; 6+ messages in thread
From: kernel test robot @ 2024-05-16 11:15 UTC (permalink / raw)
To: Sakari Ailus, linux-media
Cc: llvm, oe-kbuild-all, Jacopo Mondi, hverkuil, laurent.pinchart,
Wentong Wu
Hi Sakari,
kernel test robot noticed the following build errors:
[auto build test ERROR on 8771b7f31b7fff91a998e6afdb60650d4bac59a5]
url: https://github.com/intel-lab-lkp/linux/commits/Sakari-Ailus/media-v4l-Support-passing-media-pad-argument-to-v4l2_get_link_freq/20240516-150645
base: 8771b7f31b7fff91a998e6afdb60650d4bac59a5
patch link: https://lore.kernel.org/r/20240516070507.21735-2-sakari.ailus%40linux.intel.com
patch subject: [PATCH v5 1/4] media: v4l: Support passing media pad argument to v4l2_get_link_freq()
config: i386-randconfig-006-20240516 (https://download.01.org/0day-ci/archive/20240516/202405161801.Muqsgsku-lkp@intel.com/config)
compiler: clang version 18.1.5 (https://github.com/llvm/llvm-project 617a15a9eac96088ae5e9134248d8236e34b91b1)
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20240516/202405161801.Muqsgsku-lkp@intel.com/reproduce)
If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202405161801.Muqsgsku-lkp@intel.com/
All errors (new ones prefixed by >>):
>> drivers/media/v4l2-core/v4l2-common.c:510:7: error: no member named 'entity' in 'struct v4l2_subdev'
510 | sd = media_entity_to_v4l2_subdev(pad->entity);
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
include/media/v4l2-subdev.h:1110:49: note: expanded from macro 'media_entity_to_v4l2_subdev'
1110 | container_of(__me_sd_ent, struct v4l2_subdev, entity) : \
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~
include/linux/container_of.h:20:49: note: expanded from macro 'container_of'
20 | static_assert(__same_type(*(ptr), ((type *)0)->member) || \
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~
21 | __same_type(*(ptr), void), \
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
22 | "pointer type mismatch in container_of()"); \
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
include/linux/compiler_types.h:390:74: note: expanded from macro '__same_type'
390 | #define __same_type(a, b) __builtin_types_compatible_p(typeof(a), typeof(b))
| ^
include/linux/build_bug.h:77:50: note: expanded from macro 'static_assert'
77 | #define static_assert(expr, ...) __static_assert(expr, ##__VA_ARGS__, #expr)
| ~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~
include/linux/build_bug.h:78:56: note: expanded from macro '__static_assert'
78 | #define __static_assert(expr, msg, ...) _Static_assert(expr, msg)
| ^~~~
>> drivers/media/v4l2-core/v4l2-common.c:510:7: error: no member named 'entity' in 'v4l2_subdev'
510 | sd = media_entity_to_v4l2_subdev(pad->entity);
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
include/media/v4l2-subdev.h:1110:3: note: expanded from macro 'media_entity_to_v4l2_subdev'
1110 | container_of(__me_sd_ent, struct v4l2_subdev, entity) : \
| ^ ~~~~~~
include/linux/container_of.h:23:21: note: expanded from macro 'container_of'
23 | ((type *)(__mptr - offsetof(type, member))); })
| ^ ~~~~~~
include/linux/stddef.h:16:32: note: expanded from macro 'offsetof'
16 | #define offsetof(TYPE, MEMBER) __builtin_offsetof(TYPE, MEMBER)
| ^ ~~~~~~
>> drivers/media/v4l2-core/v4l2-common.c:510:5: error: assigning to 'struct v4l2_subdev *' from incompatible type 'void'
510 | sd = media_entity_to_v4l2_subdev(pad->entity);
| ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
3 errors generated.
vim +510 drivers/media/v4l2-core/v4l2-common.c
504
505 s64 __v4l2_get_link_freq_pad(struct media_pad *pad, unsigned int mul,
506 unsigned int div)
507 {
508 struct v4l2_subdev *sd;
509
> 510 sd = media_entity_to_v4l2_subdev(pad->entity);
511 if (!sd)
512 return -ENODEV;
513
514 return __v4l2_get_link_freq_ctrl(sd->ctrl_handler, mul, div);
515 }
516 EXPORT_SYMBOL_GPL(__v4l2_get_link_freq_pad);
517
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2024-05-16 11:15 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-05-16 7:05 [PATCH v5 0/4] Use V4L2 mbus config for conveying MEI CSI link frequency Sakari Ailus
2024-05-16 7:05 ` [PATCH v5 1/4] media: v4l: Support passing media pad argument to v4l2_get_link_freq() Sakari Ailus
2024-05-16 11:15 ` kernel test robot
2024-05-16 7:05 ` [PATCH v5 2/4] media: v4l: Support obtaining link frequency via get_mbus_config Sakari Ailus
2024-05-16 7:05 ` [PATCH v5 3/4] media: Documentation: Update link frequency driver documentation Sakari Ailus
2024-05-16 7:05 ` [PATCH v5 4/4] media: ivsc: csi: Obtain link frequency from the media pad Sakari Ailus
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).