Hi Steve, I love your patch! Perhaps something to improve: [auto build test WARNING on linuxtv-media/master] [also build test WARNING on v4.16-rc2 next-20180223] [if your patch is applied to the wrong git tree, please drop us a note to help improve the system] url: https://github.com/0day-ci/linux/commits/Steve-Longerbeam/media-imx-Switch-to-subdev-notifiers/20180223-120401 base: git://linuxtv.org/media_tree.git master config: sh-allmodconfig (attached as .config) compiler: sh4-linux-gnu-gcc (Debian 7.2.0-11) 7.2.0 reproduce: wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross chmod +x ~/bin/make.cross # save the attached .config to linux build tree make.cross ARCH=sh All warnings (new ones prefixed by >>): In file included from drivers/media/platform/ti-vpe/cal.c:24:0: >> include/media/v4l2-fwnode.h:399:9: warning: 'struct v4l2_subdev' declared inside parameter list will not be visible outside of this definition or declaration struct v4l2_subdev *sd, size_t asd_struct_size, ^~~~~~~~~~~ -- In file included from drivers/media/platform/davinci/vpif_capture.c:25:0: >> include/media/v4l2-fwnode.h:399:9: warning: 'struct v4l2_subdev' declared inside parameter list will not be visible outside of this definition or declaration struct v4l2_subdev *sd, size_t asd_struct_size, ^~~~~~~~~~~ In file included from arch/sh/include/asm/string.h:3:0, from include/linux/string.h:20, from include/linux/bitmap.h:9, from include/linux/nodemask.h:95, from include/linux/mmzone.h:17, from include/linux/gfp.h:6, from include/linux/umh.h:4, from include/linux/kmod.h:22, from include/linux/module.h:13, from drivers/media/platform/davinci/vpif_capture.c:19: drivers/media/platform/davinci/vpif_capture.c: In function 'vpif_s_dv_timings': arch/sh/include/asm/string_32.h:50:42: warning: array subscript is above array bounds [-Warray-bounds] : "0" (__dest), "1" (__src), "r" (__src+__n) ~~~~~^~~~ vim +399 include/media/v4l2-fwnode.h 215 216 217 /** 218 * typedef parse_endpoint_func - Driver's callback function to be called on 219 * each V4L2 fwnode endpoint. 220 * 221 * @dev: pointer to &struct device 222 * @vep: pointer to &struct v4l2_fwnode_endpoint 223 * @asd: pointer to &struct v4l2_async_subdev 224 * 225 * Return: 226 * * %0 on success 227 * * %-ENOTCONN if the endpoint is to be skipped but this 228 * should not be considered as an error 229 * * %-EINVAL if the endpoint configuration is invalid 230 */ 231 typedef int (*parse_endpoint_func)(struct device *dev, 232 struct v4l2_fwnode_endpoint *vep, 233 struct v4l2_async_subdev *asd); 234 235 236 /** 237 * v4l2_async_notifier_parse_fwnode_endpoints - Parse V4L2 fwnode endpoints in a 238 * device node 239 * @dev: the device the endpoints of which are to be parsed 240 * @notifier: notifier for @dev 241 * @asd_struct_size: size of the driver's async sub-device struct, including 242 * sizeof(struct v4l2_async_subdev). The &struct 243 * v4l2_async_subdev shall be the first member of 244 * the driver's async sub-device struct, i.e. both 245 * begin at the same memory address. 246 * @parse_endpoint: Driver's callback function called on each V4L2 fwnode 247 * endpoint. Optional. 248 * 249 * Parse the fwnode endpoints of the @dev device and populate the async sub- 250 * devices list in the notifier. The @parse_endpoint callback function is 251 * called for each endpoint with the corresponding async sub-device pointer to 252 * let the caller initialize the driver-specific part of the async sub-device 253 * structure. 254 * 255 * The notifier memory shall be zeroed before this function is called on the 256 * notifier. 257 * 258 * This function may not be called on a registered notifier and may be called on 259 * a notifier only once. 260 * 261 * Do not allocate the notifier's subdevs array, or change the notifier's 262 * num_subdevs field. This is because this function uses 263 * @v4l2_async_notifier_add_subdev to populate the notifier's asd_list, 264 * which is in-place-of the subdevs array which must remain unallocated 265 * and unused. 266 * 267 * The &struct v4l2_fwnode_endpoint passed to the callback function 268 * @parse_endpoint is released once the function is finished. If there is a need 269 * to retain that configuration, the user needs to allocate memory for it. 270 * 271 * Any notifier populated using this function must be released with a call to 272 * v4l2_async_notifier_cleanup() after it has been unregistered and the async 273 * sub-devices are no longer in use, even if the function returned an error. 274 * 275 * Return: %0 on success, including when no async sub-devices are found 276 * %-ENOMEM if memory allocation failed 277 * %-EINVAL if graph or endpoint parsing failed 278 * Other error codes as returned by @parse_endpoint 279 */ 280 int v4l2_async_notifier_parse_fwnode_endpoints( 281 struct device *dev, struct v4l2_async_notifier *notifier, 282 size_t asd_struct_size, 283 parse_endpoint_func parse_endpoint); 284 285 /** 286 * v4l2_async_notifier_parse_fwnode_endpoints_by_port - Parse V4L2 fwnode 287 * endpoints of a port in a 288 * device node 289 * @dev: the device the endpoints of which are to be parsed 290 * @notifier: notifier for @dev 291 * @asd_struct_size: size of the driver's async sub-device struct, including 292 * sizeof(struct v4l2_async_subdev). The &struct 293 * v4l2_async_subdev shall be the first member of 294 * the driver's async sub-device struct, i.e. both 295 * begin at the same memory address. 296 * @port: port number where endpoints are to be parsed 297 * @parse_endpoint: Driver's callback function called on each V4L2 fwnode 298 * endpoint. Optional. 299 * 300 * This function is just like v4l2_async_notifier_parse_fwnode_endpoints() with 301 * the exception that it only parses endpoints in a given port. This is useful 302 * on devices that have both sinks and sources: the async sub-devices connected 303 * to sources have already been configured by another driver (on capture 304 * devices). In this case the driver must know which ports to parse. 305 * 306 * Parse the fwnode endpoints of the @dev device on a given @port and populate 307 * the async sub-devices list of the notifier. The @parse_endpoint callback 308 * function is called for each endpoint with the corresponding async sub-device 309 * pointer to let the caller initialize the driver-specific part of the async 310 * sub-device structure. 311 * 312 * The notifier memory shall be zeroed before this function is called on the 313 * notifier the first time. 314 * 315 * This function may not be called on a registered notifier and may be called on 316 * a notifier only once per port. 317 * 318 * Do not allocate the notifier's subdevs array, or change the notifier's 319 * num_subdevs field. This is because this function uses 320 * @v4l2_async_notifier_add_subdev to populate the notifier's asd_list, 321 * which is in-place-of the subdevs array which must remain unallocated 322 * and unused. 323 * 324 * The &struct v4l2_fwnode_endpoint passed to the callback function 325 * @parse_endpoint is released once the function is finished. If there is a need 326 * to retain that configuration, the user needs to allocate memory for it. 327 * 328 * Any notifier populated using this function must be released with a call to 329 * v4l2_async_notifier_cleanup() after it has been unregistered and the async 330 * sub-devices are no longer in use, even if the function returned an error. 331 * 332 * Return: %0 on success, including when no async sub-devices are found 333 * %-ENOMEM if memory allocation failed 334 * %-EINVAL if graph or endpoint parsing failed 335 * Other error codes as returned by @parse_endpoint 336 */ 337 int v4l2_async_notifier_parse_fwnode_endpoints_by_port( 338 struct device *dev, struct v4l2_async_notifier *notifier, 339 size_t asd_struct_size, unsigned int port, 340 parse_endpoint_func parse_endpoint); 341 342 /** 343 * v4l2_fwnode_reference_parse_sensor_common - parse common references on 344 * sensors for async sub-devices 345 * @dev: the device node the properties of which are parsed for references 346 * @notifier: the async notifier where the async subdevs will be added 347 * 348 * Parse common sensor properties for remote devices related to the 349 * sensor and set up async sub-devices for them. 350 * 351 * Any notifier populated using this function must be released with a call to 352 * v4l2_async_notifier_release() after it has been unregistered and the async 353 * sub-devices are no longer in use, even in the case the function returned an 354 * error. 355 * 356 * Return: 0 on success 357 * -ENOMEM if memory allocation failed 358 * -EINVAL if property parsing failed 359 */ 360 int v4l2_async_notifier_parse_fwnode_sensor_common( 361 struct device *dev, struct v4l2_async_notifier *notifier); 362 363 /** 364 * v4l2_async_register_fwnode_subdev - registers a sub-device to the 365 * asynchronous sub-device framework 366 * and parses fwnode endpoints 367 * 368 * @sd: pointer to struct &v4l2_subdev 369 * @asd_struct_size: size of the driver's async sub-device struct, including 370 * sizeof(struct v4l2_async_subdev). The &struct 371 * v4l2_async_subdev shall be the first member of 372 * the driver's async sub-device struct, i.e. both 373 * begin at the same memory address. 374 * @ports: array of port id's to parse for fwnode endpoints. If NULL, will 375 * parse all ports owned by the sub-device. 376 * @num_ports: number of ports in @ports array. Ignored if @ports is NULL. 377 * @parse_endpoint: Driver's callback function called on each V4L2 fwnode 378 * endpoint. Optional. 379 * 380 * This function is just like v4l2_async_register_subdev() with the exception 381 * that calling it will also parse the sub-device's firmware node endpoints 382 * using v4l2_async_notifier_parse_fwnode_endpoints() or 383 * v4l2_async_notifier_parse_fwnode_endpoints_by_port(), and registers the 384 * async sub-devices. The sub-device is similarly unregistered by calling 385 * v4l2_async_unregister_subdev(). 386 * 387 * This function will work as expected if the sub-device fwnode is 388 * itself a port. The endpoints of this single port are parsed using 389 * v4l2_async_notifier_parse_fwnode_endpoints_by_port(), passing the 390 * parent of the sub-device as the port's owner. The caller must not 391 * provide a @ports array, since the sub-device owns only this port. 392 * 393 * While registered, the subdev module is marked as in-use. 394 * 395 * An error is returned if the module is no longer loaded on any attempts 396 * to register it. 397 */ 398 int v4l2_async_register_fwnode_subdev( > 399 struct v4l2_subdev *sd, size_t asd_struct_size, 400 unsigned int *ports, unsigned int num_ports, 401 int (*parse_endpoint)(struct device *dev, 402 struct v4l2_fwnode_endpoint *vep, 403 struct v4l2_async_subdev *asd)); 404 --- 0-DAY kernel test infrastructure Open Source Technology Center https://lists.01.org/pipermail/kbuild-all Intel Corporation
Attachment:
.config.gz
Description: application/gzip