lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <202507160002.wqQBk380-lkp@intel.com>
Date: Wed, 16 Jul 2025 00:45:29 +0800
From: kernel test robot <lkp@...el.com>
To: Pratap Nirujogi <pratap.nirujogi@....com>, mchehab@...nel.org,
	sakari.ailus@...ux.intel.com, laurent.pinchart@...asonboard.com,
	kieran.bingham@...asonboard.com, bryan.odonoghue@...aro.org,
	hao.yao@...el.com, mehdi.djait@...ux.intel.com,
	dongcheng.yan@...ux.intel.com, hverkuil@...all.nl, krzk@...nel.org,
	dave.stevenson@...pberrypi.com, hdegoede@...hat.com,
	jai.luthra@...asonboard.com, tomi.valkeinen@...asonboard.com
Cc: oe-kbuild-all@...ts.linux.dev, linux-media@...r.kernel.org,
	linux-kernel@...r.kernel.org, benjamin.chan@....com, bin.du@....com,
	grosikop@....com, king.li@....com, dantony@....com,
	vengutta@....com, Phil.Jawich@....com,
	Pratap Nirujogi <pratap.nirujogi@....com>
Subject: Re: [PATCH v4] media: i2c: Add OV05C10 camera sensor driver

Hi Pratap,

kernel test robot noticed the following build warnings:

[auto build test WARNING on linuxtv-media-pending/master]
[also build test WARNING on sailus-media-tree/master linus/master v6.16-rc6 next-20250715]
[cannot apply to sailus-media-tree/streams media-tree/master]
[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#_base_tree_information]

url:    https://github.com/intel-lab-lkp/linux/commits/Pratap-Nirujogi/media-i2c-Add-OV05C10-camera-sensor-driver/20250715-050130
base:   https://git.linuxtv.org/media-ci/media-pending.git master
patch link:    https://lore.kernel.org/r/20250714205805.1329403-1-pratap.nirujogi%40amd.com
patch subject: [PATCH v4] media: i2c: Add OV05C10 camera sensor driver
config: um-allyesconfig (https://download.01.org/0day-ci/archive/20250716/202507160002.wqQBk380-lkp@intel.com/config)
compiler: gcc-12 (Debian 12.2.0-14+deb12u1) 12.2.0
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20250716/202507160002.wqQBk380-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@...el.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202507160002.wqQBk380-lkp@intel.com/

All warnings (new ones prefixed by >>):

   drivers/media/i2c/ov05c10.c: In function 'ov05c10_init_controls':
   drivers/media/i2c/ov05c10.c:790:13: warning: variable 'max_items' set but not used [-Wunused-but-set-variable]
     790 |         u32 max_items;
         |             ^~~~~~~~~
   drivers/media/i2c/ov05c10.c: In function 'ov05c10_probe':
   drivers/media/i2c/ov05c10.c:964:24: error: implicit declaration of function 'devm_v4l2_sensor_clk_get' [-Werror=implicit-function-declaration]
     964 |         ov05c10->clk = devm_v4l2_sensor_clk_get(&client->dev, NULL);
         |                        ^~~~~~~~~~~~~~~~~~~~~~~~
>> drivers/media/i2c/ov05c10.c:964:22: warning: assignment to 'struct clk *' from 'int' makes pointer from integer without a cast [-Wint-conversion]
     964 |         ov05c10->clk = devm_v4l2_sensor_clk_get(&client->dev, NULL);
         |                      ^
   cc1: some warnings being treated as errors


vim +964 drivers/media/i2c/ov05c10.c

   780	
   781	static int ov05c10_init_controls(struct ov05c10 *ov05c10)
   782	{
   783		struct v4l2_ctrl_handler *ctrl_hdlr = &ov05c10->ctrl_handler;
   784		const struct ov05c10_mode *mode = ov05c10->cur_mode;
   785		struct v4l2_fwnode_device_properties props;
   786		s64 pixel_rate_max;
   787		s64 exposure_max;
   788		s64 vblank_def;
   789		s64 vblank_min;
 > 790		u32 max_items;
   791		s64 hblank;
   792		int ret;
   793	
   794		ret = v4l2_fwnode_device_parse(ov05c10->dev, &props);
   795		if (ret)
   796			goto err_hdl_free;
   797	
   798		ret = v4l2_ctrl_handler_init(ctrl_hdlr, 10);
   799		if (ret)
   800			return ret;
   801	
   802		max_items = ARRAY_SIZE(ov05c10_link_freq_menu_items) - 1;
   803		ov05c10->link_freq =
   804			v4l2_ctrl_new_int_menu(ctrl_hdlr,
   805					       NULL,
   806					       V4L2_CID_LINK_FREQ,
   807					       __fls(ov05c10->link_freq_bitmap),
   808					       __ffs(ov05c10->link_freq_bitmap),
   809					       ov05c10_link_freq_menu_items);
   810		if (ov05c10->link_freq)
   811			ov05c10->link_freq->flags |= V4L2_CTRL_FLAG_READ_ONLY;
   812	
   813		pixel_rate_max =
   814			link_freq_to_pixel_rate(ov05c10_link_freq_menu_items[0],
   815						mode->lanes);
   816		ov05c10->pixel_rate = v4l2_ctrl_new_std(ctrl_hdlr, NULL,
   817							V4L2_CID_PIXEL_RATE,
   818							0, pixel_rate_max,
   819							1, pixel_rate_max);
   820	
   821		vblank_def = mode->vts_def - mode->height;
   822		vblank_min = mode->vts_min - mode->height;
   823		ov05c10->vblank = v4l2_ctrl_new_std(ctrl_hdlr, &ov05c10_ctrl_ops,
   824						    V4L2_CID_VBLANK,
   825						    vblank_min,
   826						    OV05C10_VTS_MAX - mode->height,
   827						    1, vblank_def);
   828	
   829		hblank = mode->hts - mode->width;
   830		ov05c10->hblank = v4l2_ctrl_new_std(ctrl_hdlr, NULL,
   831						    V4L2_CID_HBLANK,
   832						    hblank, hblank, 1, hblank);
   833		if (ov05c10->hblank)
   834			ov05c10->hblank->flags |= V4L2_CTRL_FLAG_READ_ONLY;
   835	
   836		exposure_max = mode->vts_def - OV05C10_EXPOSURE_MAX_MARGIN;
   837		ov05c10->exposure = v4l2_ctrl_new_std(ctrl_hdlr, &ov05c10_ctrl_ops,
   838						      V4L2_CID_EXPOSURE,
   839						      OV05C10_EXPOSURE_MIN,
   840						      exposure_max,
   841						      OV05C10_EXPOSURE_STEP,
   842						      exposure_max);
   843	
   844		v4l2_ctrl_new_std(ctrl_hdlr, &ov05c10_ctrl_ops, V4L2_CID_ANALOGUE_GAIN,
   845				  OV05C10_ANA_GAIN_MIN, OV05C10_ANA_GAIN_MAX,
   846				  OV05C10_ANA_GAIN_STEP, OV05C10_ANA_GAIN_DEFAULT);
   847	
   848		v4l2_ctrl_new_std(ctrl_hdlr, &ov05c10_ctrl_ops, V4L2_CID_DIGITAL_GAIN,
   849				  OV05C10_DGTL_GAIN_MIN, OV05C10_DGTL_GAIN_MAX,
   850				  OV05C10_DGTL_GAIN_STEP, OV05C10_DGTL_GAIN_DEFAULT);
   851	
   852		v4l2_ctrl_new_std_menu_items(ctrl_hdlr, &ov05c10_ctrl_ops,
   853					     V4L2_CID_TEST_PATTERN,
   854					     ARRAY_SIZE(ov05c10_test_pattern_menu) - 1,
   855					     0, 0, ov05c10_test_pattern_menu);
   856	
   857		ret = v4l2_ctrl_new_fwnode_properties(ctrl_hdlr, &ov05c10_ctrl_ops,
   858						      &props);
   859		if (ret)
   860			goto err_hdl_free;
   861	
   862		if (ctrl_hdlr->error) {
   863			ret = ctrl_hdlr->error;
   864			dev_err(ov05c10->dev, "V4L2 control init failed (%d)\n", ret);
   865			goto err_hdl_free;
   866		}
   867	
   868		ov05c10->sd.ctrl_handler = ctrl_hdlr;
   869	
   870		return 0;
   871	
   872	err_hdl_free:
   873		v4l2_ctrl_handler_free(ctrl_hdlr);
   874	
   875		return ret;
   876	}
   877	
   878	static int ov05c10_parse_endpoint(struct ov05c10 *ov05c10,
   879					  struct fwnode_handle *fwnode)
   880	{
   881		struct v4l2_fwnode_endpoint bus_cfg = {
   882			.bus_type = V4L2_MBUS_CSI2_DPHY
   883		};
   884		struct device *dev = ov05c10->dev;
   885		struct fwnode_handle *ep;
   886		int ret;
   887	
   888		ep = fwnode_graph_get_next_endpoint(fwnode, NULL);
   889		if (!ep) {
   890			dev_err(dev, "Failed to get next endpoint\n");
   891			return -ENXIO;
   892		}
   893	
   894		ret = v4l2_fwnode_endpoint_alloc_parse(ep, &bus_cfg);
   895		fwnode_handle_put(ep);
   896		if (ret)
   897			return ret;
   898	
   899		if (bus_cfg.bus.mipi_csi2.num_data_lanes != OV05C10_DATA_LANES) {
   900			dev_err(dev,
   901				"number of CSI2 data lanes %d is not supported\n",
   902				bus_cfg.bus.mipi_csi2.num_data_lanes);
   903			ret = -EINVAL;
   904			goto err_endpoint_free;
   905		}
   906	
   907		ret = v4l2_link_freq_to_bitmap(dev, bus_cfg.link_frequencies,
   908					       bus_cfg.nr_of_link_frequencies,
   909					       ov05c10_link_freq_menu_items,
   910					       ARRAY_SIZE(ov05c10_link_freq_menu_items),
   911					       &ov05c10->link_freq_bitmap);
   912		if (ret)
   913			dev_err(dev, "v4l2_link_freq_to_bitmap fail with %d\n", ret);
   914	err_endpoint_free:
   915		v4l2_fwnode_endpoint_free(&bus_cfg);
   916	
   917		return ret;
   918	}
   919	
   920	static int ov05c10_runtime_resume(struct device *dev)
   921	{
   922		struct v4l2_subdev *sd = dev_get_drvdata(dev);
   923		struct ov05c10 *ov05c10 = to_ov05c10(sd);
   924		int ret;
   925	
   926		ret = clk_prepare_enable(ov05c10->clk);
   927		if (ret) {
   928			dev_err(dev, "failed to enable clock %d\n", ret);
   929			goto error;
   930		}
   931	
   932		ov05c10_sensor_power_set(ov05c10, true);
   933	
   934	error:
   935		return ret;
   936	}
   937	
   938	static int ov05c10_runtime_suspend(struct device *dev)
   939	{
   940		struct v4l2_subdev *sd = dev_get_drvdata(dev);
   941		struct ov05c10 *ov05c10 = to_ov05c10(sd);
   942	
   943		ov05c10_sensor_power_set(ov05c10, false);
   944		clk_disable_unprepare(ov05c10->clk);
   945	
   946		return 0;
   947	}
   948	
   949	static int ov05c10_probe(struct i2c_client *client)
   950	{
   951		struct ov05c10 *ov05c10;
   952		u32 clkfreq;
   953		int ret;
   954	
   955		ov05c10 = devm_kzalloc(&client->dev, sizeof(*ov05c10), GFP_KERNEL);
   956		if (!ov05c10)
   957			return -ENOMEM;
   958	
   959		ov05c10->dev = &client->dev;
   960		ov05c10->cur_mode = &ov05c10_supported_modes[0];
   961	
   962		struct fwnode_handle *fwnode = dev_fwnode(ov05c10->dev);
   963	
 > 964		ov05c10->clk = devm_v4l2_sensor_clk_get(&client->dev, NULL);
   965		if (IS_ERR(ov05c10->clk))
   966			return dev_err_probe(&client->dev, PTR_ERR(ov05c10->clk),
   967					     "failed to get clk\n");
   968	
   969		clkfreq = clk_get_rate(ov05c10->clk);
   970		if (clkfreq != OV05C10_REF_CLK)
   971			return dev_err_probe(ov05c10->dev, -EINVAL,
   972					     "fail invalid clock freq %u, %lu expected\n",
   973					     clkfreq, OV05C10_REF_CLK);
   974	
   975		ret = ov05c10_parse_endpoint(ov05c10, fwnode);
   976		if (ret)
   977			return dev_err_probe(ov05c10->dev, -EINVAL,
   978					     "fail to parse endpoint\n");
   979	
   980		ov05c10->enable_gpio = devm_gpiod_get(ov05c10->dev, "enable",
   981						      GPIOD_OUT_LOW);
   982		if (IS_ERR(ov05c10->enable_gpio))
   983			return dev_err_probe(ov05c10->dev,
   984					     PTR_ERR(ov05c10->enable_gpio),
   985					     "fail to get enable gpio\n");
   986	
   987		ov05c10->regmap = devm_cci_regmap_init_i2c(client, 8);
   988		if (IS_ERR(ov05c10->regmap))
   989			return dev_err_probe(ov05c10->dev, PTR_ERR(ov05c10->regmap),
   990					     "fail to init cci\n");
   991	
   992		ov05c10->cur_page = -1;
   993		ov05c10->page_ctrl_reg = OV05C10_REG_PAGE_CTL;
   994	
   995		/*
   996		 * Enable power management. The driver supports runtime PM, but needs to
   997		 * work when runtime PM is disabled in the kernel. To that end, power
   998		 * the sensor on manually here.
   999		 */
  1000		ov05c10_sensor_power_set(ov05c10, true);
  1001	
  1002		/*
  1003		 * Enable runtime PM with autosuspend. As the device has been powered
  1004		 * manually, mark it as active, and increase the usage count without
  1005		 * resuming the device.
  1006		 */
  1007		pm_runtime_set_active(ov05c10->dev);
  1008		pm_runtime_get_noresume(ov05c10->dev);
  1009		pm_runtime_enable(ov05c10->dev);
  1010		pm_runtime_set_autosuspend_delay(ov05c10->dev, 1000);
  1011		pm_runtime_use_autosuspend(ov05c10->dev);
  1012	
  1013		v4l2_i2c_subdev_init(&ov05c10->sd, client, &ov05c10_subdev_ops);
  1014	
  1015		ret = ov05c10_runtime_resume(&client->dev);
  1016		if (ret)
  1017			return dev_err_probe(&client->dev, ret,
  1018					     "failed to power-on the sensor");
  1019	
  1020		ret = ov05c10_init_controls(ov05c10);
  1021		if (ret) {
  1022			dev_err(ov05c10->dev, "fail to init ov05c10 ctl %d\n", ret);
  1023			goto err_pm;
  1024		}
  1025	
  1026		ov05c10->sd.internal_ops = &ov05c10_internal_ops;
  1027		ov05c10->sd.flags |= V4L2_SUBDEV_FL_HAS_DEVNODE;
  1028		ov05c10->sd.entity.ops = &ov05c10_subdev_entity_ops;
  1029		ov05c10->sd.entity.function = MEDIA_ENT_F_CAM_SENSOR;
  1030	
  1031		ov05c10->pad.flags = MEDIA_PAD_FL_SOURCE;
  1032	
  1033		ret = media_entity_pads_init(&ov05c10->sd.entity, OV05C10_NUM_OF_PADS,
  1034					     &ov05c10->pad);
  1035		if (ret) {
  1036			dev_err(ov05c10->dev, "fail to init ov05c10 pads %d\n", ret);
  1037			goto err_hdl_free;
  1038		}
  1039	
  1040		ret = v4l2_subdev_init_finalize(&ov05c10->sd);
  1041		if (ret < 0) {
  1042			dev_err(ov05c10->dev, "fail to finalize ov05c10 subdev init %d\n", ret);
  1043			goto err_media_entity_cleanup;
  1044		}
  1045	
  1046		ret = v4l2_async_register_subdev_sensor(&ov05c10->sd);
  1047		if (ret) {
  1048			dev_err(ov05c10->dev, "fail to register ov05c10 subdev %d\n", ret);
  1049			goto err_media_entity_cleanup;
  1050		}
  1051	
  1052		return 0;
  1053	
  1054	err_media_entity_cleanup:
  1055		media_entity_cleanup(&ov05c10->sd.entity);
  1056	err_hdl_free:
  1057		v4l2_ctrl_handler_free(ov05c10->sd.ctrl_handler);
  1058	err_pm:
  1059		pm_runtime_disable(ov05c10->dev);
  1060		pm_runtime_put_noidle(ov05c10->dev);
  1061		ov05c10_sensor_power_set(ov05c10, false);
  1062		return ret;
  1063	}
  1064	

-- 
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ