Skip to content

Commit

Permalink
staging: vc04_services: isp: Reorder operations during device probe
Browse files Browse the repository at this point in the history
Register the video node at the end of the probe, swapping order with
registering the controls.

Signed-off-by: Naushir Patuck <naush@raspberrypi.com>
  • Loading branch information
naushir committed Jun 29, 2020
1 parent 67ae452 commit 66a3e23
Showing 1 changed file with 32 additions and 16 deletions.
48 changes: 32 additions & 16 deletions drivers/staging/vc04_services/bcm2835-isp/bcm2835-v4l2-isp.c
Original file line number Diff line number Diff line change
Expand Up @@ -1290,21 +1290,6 @@ static int register_node(struct bcm2835_isp_dev *dev,
}
node->queue_init = true;

/* Define the device names */
snprintf(vfd->name, sizeof(node->vfd.name), "%s-%s%d", BCM2835_ISP_NAME,
node->name, node->id);

ret = video_register_device(vfd, VFL_TYPE_GRABBER, video_nr + index);
if (ret) {
v4l2_err(&dev->v4l2_dev,
"Failed to register video %s[%d] device node\n",
node->name, node->id);
return ret;
}

node->registered = true;
video_set_drvdata(vfd, node);

/* Set some controls and defaults, but only on the VIDEO_OUTPUT node. */
if (node_is_output(node)) {
unsigned int i;
Expand All @@ -1319,7 +1304,12 @@ static int register_node(struct bcm2835_isp_dev *dev,
.step = 1,
};

v4l2_ctrl_handler_init(&dev->ctrl_handler, 4);
ret = v4l2_ctrl_handler_init(&dev->ctrl_handler, 12);
if (ret) {
v4l2_err(&dev->v4l2_dev, "ctrl_handler init failed (%d)\n",
ret);
return ret;
}

dev->r_gain = 1000;
dev->b_gain = 1000;
Expand All @@ -1345,13 +1335,39 @@ static int register_node(struct bcm2835_isp_dev *dev,
}

node->vfd.ctrl_handler = &dev->ctrl_handler;
if (dev->ctrl_handler.error) {
ret = dev->ctrl_handler.error;
v4l2_err(&dev->v4l2_dev, "controls init failed (%d)\n",
ret);
v4l2_ctrl_handler_free(&dev->ctrl_handler);
goto ctrl_cleanup;
}
}

/* Define the device names */
snprintf(vfd->name, sizeof(node->vfd.name), "%s-%s%d", BCM2835_ISP_NAME,
node->name, node->id);

ret = video_register_device(vfd, VFL_TYPE_GRABBER, video_nr + index);
if (ret) {
v4l2_err(&dev->v4l2_dev,
"Failed to register video %s[%d] device node\n",
node->name, node->id);
goto ctrl_cleanup;
}

node->registered = true;
video_set_drvdata(vfd, node);

v4l2_info(&dev->v4l2_dev,
"Device node %s[%d] registered as /dev/video%d\n",
node->name, node->id, vfd->num);

return 0;

ctrl_cleanup:
v4l2_ctrl_handler_free(&dev->ctrl_handler);
return ret;
}

/* Unregister one of the /dev/video<N> nodes associated with the ISP. */
Expand Down

0 comments on commit 66a3e23

Please # to comment.