v4l2_ctrl_handler_init function is error at TX1 R28.2.

v4l2_ctrl_handler_init function is error at TX1 R28.2.

i use imx219 mipi sensor .

this code is below:

static int imx219_ctrls_init(struct imx219 *priv)
{
	struct i2c_client *client = priv->i2c_client;
	struct v4l2_ctrl *ctrl;
	int num_ctrls;
	int err;
	int i;

	dev_info(&client->dev, "%s++\n", __func__);

	num_ctrls = ARRAY_SIZE(ctrl_config_list);
	v4l2_ctrl_handler_init(&priv->ctrl_handler, num_ctrls);

	for (i = 0; i < num_ctrls; i++) {
		ctrl = v4l2_ctrl_new_custom(&priv->ctrl_handler,
			&ctrl_config_list[i], NULL);
		if (ctrl == NULL) {
			dev_err(&client->dev, "Failed to init %s ctrl\n",
				ctrl_config_list[i].name);
			continue;
		}

		if (ctrl_config_list[i].type == V4L2_CTRL_TYPE_STRING &&
			ctrl_config_list[i].flags & V4L2_CTRL_FLAG_READ_ONLY) {
			ctrl->p_new.p_char = devm_kzalloc(&client->dev,
				ctrl_config_list[i].max + 1, GFP_KERNEL);
			if (!ctrl->p_new.p_char) {
				dev_err(&client->dev,
					"Failed to allocate otp data\n");
				return -ENOMEM;
			}
		}
		priv->ctrls[i] = ctrl;
	}

	priv->num_ctrls = num_ctrls;
	priv->subdev->ctrl_handler = &priv->ctrl_handler;
	if (priv->ctrl_handler.error) {
		dev_err(&client->dev, "Error %d adding controls\n",
			priv->ctrl_handler.error);
		err = priv->ctrl_handler.error;
		goto error;
	}

	err = v4l2_ctrl_handler_setup(&priv->ctrl_handler);
	if (err) {
		dev_err(&client->dev,
			"Error %d setting default controls\n", err);
		goto error;
	}
 dev_info(&client->dev, "%s++ OK\n", __func__);
	return 0;

error:
	v4l2_ctrl_handler_free(&priv->ctrl_handler);
	return err;
}

How can I fix this?

hello sensor_test,

  1. may I know what’s the failure messages pop-up?
  2. please review your sensor driver, it should implemented following v4l2 standards.
  3. you could also refer to our reference camera drivers, such as imx185, imx274, ov5693.

Hi JerryChang,

the failure messages is below.

[    3.203902] i2c /dev entries driver
[    3.210452] [IMX219]: probing v4l2 sensor.
[    3.216579] imx219 6-0010: imx219_ctrls_init++
[    3.222822] imx219 6-0010: Failed to init Gain ctrl
[    3.229514] imx219 6-0010: Failed to init Frame Length ctrl
[    3.236917] imx219 6-0010: Failed to init Coarse Time ctrl
[    3.244242] imx219 6-0010: Failed to init Group Hold ctrl
[    3.251494] imx219 6-0010: Failed to init HDR enable ctrl
[    3.258756] imx219 6-0010: Failed to init Fuse ID ctrl
[    3.265688] imx219 6-0010: Error -34 adding controls

hello sensor_test,

apparently, there’s return NULL of the v4l2_ctrl_new_custom() function.

sources/kernel/kernel-4.4/drivers/media/v4l2-core/v4l2-ctrls.c

please check my suggestions in comment #2, thanks
2) please review your sensor driver, it should implemented following v4l2 standards.
3) you could also refer to our reference camera drivers, such as imx185, imx274, ov5693.