Re: [PATCH 4/5] media: adv748x: Implement .get_frame_desc()

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Jacopo,

I love your patch! Perhaps something to improve:

[auto build test WARNING on media-tree/master]
[also build test WARNING on v5.16-rc5 next-20211215]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch]

url:    https://github.com/0day-ci/linux/commits/Jacopo-Mondi/media-adv748x-Add-CSI-2-VC-support/20211217-010519
base:   git://linuxtv.org/media_tree.git master
config: arm-randconfig-r032-20211216 (https://download.01.org/0day-ci/archive/20211217/202112171102.NMwa0uem-lkp@xxxxxxxxx/config)
compiler: clang version 14.0.0 (https://github.com/llvm/llvm-project dd245bab9fbb364faa1581e4f92ba3119a872fba)
reproduce (this is a W=1 build):
        wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
        chmod +x ~/bin/make.cross
        # install arm cross compiling tool for clang build
        # apt-get install binutils-arm-linux-gnueabi
        # https://github.com/0day-ci/linux/commit/3baa5f567748a7235338c2547dcec595902888b7
        git remote add linux-review https://github.com/0day-ci/linux
        git fetch --no-tags linux-review Jacopo-Mondi/media-adv748x-Add-CSI-2-VC-support/20211217-010519
        git checkout 3baa5f567748a7235338c2547dcec595902888b7
        # save the config file to linux build tree
        mkdir build_dir
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross W=1 O=build_dir ARCH=arm SHELL=/bin/bash drivers/media/i2c/adv748x/ kernel/

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@xxxxxxxxx>

All warnings (new ones prefixed by >>):

   drivers/media/i2c/adv748x/adv748x-csi2.c:190:33: error: array has incomplete element type 'struct v4l2_subdev_route'
           struct v4l2_subdev_route routes[ADV748X_CSI2_STREAMS] = {
                                          ^
   drivers/media/i2c/adv748x/adv748x-csi2.c:190:9: note: forward declaration of 'struct v4l2_subdev_route'
           struct v4l2_subdev_route routes[ADV748X_CSI2_STREAMS] = {
                  ^
   drivers/media/i2c/adv748x/adv748x-csi2.c:196:13: error: use of undeclared identifier 'V4L2_SUBDEV_ROUTE_FL_ACTIVE'; did you mean 'V4L2_SUBDEV_FORMAT_ACTIVE'?
                           .flags = V4L2_SUBDEV_ROUTE_FL_ACTIVE,
                                    ^~~~~~~~~~~~~~~~~~~~~~~~~~~
                                    V4L2_SUBDEV_FORMAT_ACTIVE
   include/uapi/linux/v4l2-subdev.h:39:2: note: 'V4L2_SUBDEV_FORMAT_ACTIVE' declared here
           V4L2_SUBDEV_FORMAT_ACTIVE = 1,
           ^
   drivers/media/i2c/adv748x/adv748x-csi2.c:217:30: error: variable has incomplete type 'struct v4l2_subdev_krouting'
           struct v4l2_subdev_krouting routing;
                                       ^
   drivers/media/i2c/adv748x/adv748x-csi2.c:217:9: note: forward declaration of 'struct v4l2_subdev_krouting'
           struct v4l2_subdev_krouting routing;
                  ^
   drivers/media/i2c/adv748x/adv748x-csi2.c:223:2: error: implicit declaration of function 'v4l2_subdev_lock_state' [-Werror,-Wimplicit-function-declaration]
           v4l2_subdev_lock_state(state);
           ^
   drivers/media/i2c/adv748x/adv748x-csi2.c:223:2: note: did you mean 'v4l2_subdev_alloc_state'?
   include/media/v4l2-subdev.h:1144:27: note: 'v4l2_subdev_alloc_state' declared here
   struct v4l2_subdev_state *v4l2_subdev_alloc_state(struct v4l2_subdev *sd);
                             ^
   drivers/media/i2c/adv748x/adv748x-csi2.c:224:8: error: implicit declaration of function 'v4l2_subdev_set_routing' [-Werror,-Wimplicit-function-declaration]
           ret = v4l2_subdev_set_routing(sd, state, &routing);
                 ^
   drivers/media/i2c/adv748x/adv748x-csi2.c:225:2: error: implicit declaration of function 'v4l2_subdev_unlock_state' [-Werror,-Wimplicit-function-declaration]
           v4l2_subdev_unlock_state(state);
           ^
   drivers/media/i2c/adv748x/adv748x-csi2.c:225:2: note: did you mean 'v4l2_subdev_lock_state'?
   drivers/media/i2c/adv748x/adv748x-csi2.c:223:2: note: 'v4l2_subdev_lock_state' declared here
           v4l2_subdev_lock_state(state);
           ^
   drivers/media/i2c/adv748x/adv748x-csi2.c:241:2: error: implicit declaration of function 'v4l2_subdev_lock_state' [-Werror,-Wimplicit-function-declaration]
           v4l2_subdev_lock_state(sd_state);
           ^
   drivers/media/i2c/adv748x/adv748x-csi2.c:242:8: error: implicit declaration of function 'v4l2_state_get_stream_format' [-Werror,-Wimplicit-function-declaration]
           fmt = v4l2_state_get_stream_format(sd_state, sdformat->pad,
                 ^
   drivers/media/i2c/adv748x/adv748x-csi2.c:242:8: note: did you mean 'v4l2_subdev_get_try_format'?
   include/media/v4l2-subdev.h:994:1: note: 'v4l2_subdev_get_try_format' declared here
   v4l2_subdev_get_try_format(struct v4l2_subdev *sd,
   ^
   drivers/media/i2c/adv748x/adv748x-csi2.c:243:19: error: no member named 'stream' in 'struct v4l2_subdev_format'
                                              sdformat->stream);
                                              ~~~~~~~~  ^
   drivers/media/i2c/adv748x/adv748x-csi2.c:251:8: error: implicit declaration of function 'v4l2_subdev_state_get_opposite_stream_format' [-Werror,-Wimplicit-function-declaration]
           fmt = v4l2_subdev_state_get_opposite_stream_format(sd_state, sdformat->pad,
                 ^
   drivers/media/i2c/adv748x/adv748x-csi2.c:252:21: error: no member named 'stream' in 'struct v4l2_subdev_format'
                                                              sdformat->stream);
                                                              ~~~~~~~~  ^
   drivers/media/i2c/adv748x/adv748x-csi2.c:260:2: error: implicit declaration of function 'v4l2_subdev_unlock_state' [-Werror,-Wimplicit-function-declaration]
           v4l2_subdev_unlock_state(sd_state);
           ^
   drivers/media/i2c/adv748x/adv748x-csi2.c:309:10: error: implicit declaration of function 'v4l2_subdev_lock_active_state' [-Werror,-Wimplicit-function-declaration]
           state = v4l2_subdev_lock_active_state(sd);
                   ^
>> drivers/media/i2c/adv748x/adv748x-csi2.c:309:8: warning: incompatible integer to pointer conversion assigning to 'struct v4l2_subdev_state *' from 'int' [-Wint-conversion]
           state = v4l2_subdev_lock_active_state(sd);
                 ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/media/i2c/adv748x/adv748x-csi2.c:312:18: error: no member named 'routing' in 'struct v4l2_subdev_state'
           route = &state->routing.routes[0];
                    ~~~~~  ^
   drivers/media/i2c/adv748x/adv748x-csi2.c:313:8: error: implicit declaration of function 'v4l2_state_get_stream_format' [-Werror,-Wimplicit-function-declaration]
           fmt = v4l2_state_get_stream_format(state, pad, route->source_stream);
                 ^
   drivers/media/i2c/adv748x/adv748x-csi2.c:313:54: error: incomplete definition of type 'struct v4l2_subdev_route'
           fmt = v4l2_state_get_stream_format(state, pad, route->source_stream);
                                                          ~~~~~^
   drivers/media/i2c/adv748x/adv748x-csi2.c:301:9: note: forward declaration of 'struct v4l2_subdev_route'
           struct v4l2_subdev_route *route;
                  ^
   drivers/media/i2c/adv748x/adv748x-csi2.c:327:6: error: no member named 'type' in 'struct v4l2_mbus_frame_desc'
           fd->type = V4L2_MBUS_FRAME_DESC_TYPE_CSI2;
           ~~  ^
   drivers/media/i2c/adv748x/adv748x-csi2.c:327:13: error: use of undeclared identifier 'V4L2_MBUS_FRAME_DESC_TYPE_CSI2'; did you mean 'V4L2_MBUS_FRAME_DESC_FL_BLOB'?
           fd->type = V4L2_MBUS_FRAME_DESC_TYPE_CSI2;
                      ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                      V4L2_MBUS_FRAME_DESC_FL_BLOB
   include/media/v4l2-subdev.h:327:2: note: 'V4L2_MBUS_FRAME_DESC_FL_BLOB' declared here
           V4L2_MBUS_FRAME_DESC_FL_BLOB    = BIT(1),
           ^
   drivers/media/i2c/adv748x/adv748x-csi2.c:330:9: error: no member named 'stream' in 'struct v4l2_mbus_frame_desc_entry'
           entry->stream = 0;
           ~~~~~  ^
   fatal error: too many errors emitted, stopping now [-ferror-limit=]
   1 warning and 20 errors generated.


vim +309 drivers/media/i2c/adv748x/adv748x-csi2.c

   229	
   230	static int adv748x_csi2_set_format(struct v4l2_subdev *sd,
   231					   struct v4l2_subdev_state *sd_state,
   232					   struct v4l2_subdev_format *sdformat)
   233	{
   234		struct v4l2_mbus_framefmt *fmt;
   235		int ret = 0;
   236	
   237		/* Do not allow to set format on the multiplexed source pad. */
   238		if (sdformat->pad == ADV748X_CSI2_SOURCE)
   239			return -EINVAL;
   240	
   241		v4l2_subdev_lock_state(sd_state);
   242		fmt = v4l2_state_get_stream_format(sd_state, sdformat->pad,
   243						   sdformat->stream);
   244		if (!fmt) {
   245			ret = -EINVAL;
   246			goto out;
   247		};
   248		*fmt = sdformat->format;
   249	
   250		/* Propagate format to the other end of the route. */
   251		fmt = v4l2_subdev_state_get_opposite_stream_format(sd_state, sdformat->pad,
 > 252								   sdformat->stream);
   253		if (!fmt) {
   254			ret = -EINVAL;
   255			goto out;
   256		}
   257		*fmt = sdformat->format;
   258	
   259	out:
   260		v4l2_subdev_unlock_state(sd_state);
   261	
   262		return ret;
   263	}
   264	
   265	static int adv748x_csi2_get_mbus_config(struct v4l2_subdev *sd, unsigned int pad,
   266						struct v4l2_mbus_config *config)
   267	{
   268		struct adv748x_csi2 *tx = adv748x_sd_to_csi2(sd);
   269	
   270		if (pad != ADV748X_CSI2_SOURCE)
   271			return -EINVAL;
   272	
   273		config->type = V4L2_MBUS_CSI2_DPHY;
   274		switch (tx->active_lanes) {
   275		case 1:
   276			config->flags = V4L2_MBUS_CSI2_1_LANE;
   277			break;
   278	
   279		case 2:
   280			config->flags = V4L2_MBUS_CSI2_2_LANE;
   281			break;
   282	
   283		case 3:
   284			config->flags = V4L2_MBUS_CSI2_3_LANE;
   285			break;
   286	
   287		case 4:
   288			config->flags = V4L2_MBUS_CSI2_4_LANE;
   289			break;
   290		}
   291	
   292		return 0;
   293	}
   294	
   295	static int adv748x_csi2_get_frame_desc(struct v4l2_subdev *sd, unsigned int pad,
   296					       struct v4l2_mbus_frame_desc *fd)
   297	{
   298		struct adv748x_csi2 *tx = adv748x_sd_to_csi2(sd);
   299		struct adv748x_csi2_format_info info = {};
   300		struct v4l2_mbus_frame_desc_entry *entry;
   301		struct v4l2_subdev_route *route;
   302		struct v4l2_subdev_state *state;
   303		struct v4l2_mbus_framefmt *fmt;
   304		int ret;
   305	
   306		if (pad != ADV748X_CSI2_SOURCE)
   307			return -EINVAL;
   308	
 > 309		state = v4l2_subdev_lock_active_state(sd);
   310	
   311		/* A single route is available. */
   312		route = &state->routing.routes[0];
   313		fmt = v4l2_state_get_stream_format(state, pad, route->source_stream);
   314		if (!fmt) {
   315			ret = -EINVAL;
   316			goto out;
   317		}
   318	
   319		ret = adv748x_csi2_get_format_info(tx, fmt->code, &info);
   320		if (ret)
   321			goto out;
   322	
   323		memset(fd, 0, sizeof(*fd));
   324	
   325		/* A single stream is available. */
   326		fd->num_entries = 1;
   327		fd->type = V4L2_MBUS_FRAME_DESC_TYPE_CSI2;
   328	
   329		entry = &fd->entry[0];
   330		entry->stream = 0;
   331		entry->flags = V4L2_MBUS_FRAME_DESC_FL_LEN_MAX;
   332		entry->length = fmt->width * fmt->height * info.bpp / 8;
   333		entry->pixelcode = fmt->code;
   334		entry->bus.csi2.vc = route->source_stream;
   335		entry->bus.csi2.dt = info.dt;
   336	
   337	out:
   338		v4l2_subdev_unlock_state(state);
   339	
   340		return ret;
   341	}
   342	

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@xxxxxxxxxxxx



[Index of Archives]     [Linux Input]     [Video for Linux]     [Gstreamer Embedded]     [Mplayer Users]     [Linux USB Devel]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Yosemite Backpacking]

  Powered by Linux