diff options
author | Álvaro Fernández Rojas <noltari@gmail.com> | 2021-02-18 18:04:33 +0100 |
---|---|---|
committer | Álvaro Fernández Rojas <noltari@gmail.com> | 2021-02-18 23:42:32 +0100 |
commit | f07e572f6447465d8938679533d604e402b0f066 (patch) | |
tree | cb333bd2a67e59e7c07659514850a0fd55fc825e /target/linux/bcm27xx/patches-5.4/950-0839-staging-vc04_services-isp-Reorder-operations-during-.patch | |
parent | 5d3a6fd970619dfc55f8259035c3027d7613a2a6 (diff) | |
download | upstream-f07e572f6447465d8938679533d604e402b0f066.tar.gz upstream-f07e572f6447465d8938679533d604e402b0f066.tar.bz2 upstream-f07e572f6447465d8938679533d604e402b0f066.zip |
bcm27xx: import latest patches from the RPi foundation
bcm2708: boot tested on RPi B+ v1.2
bcm2709: boot tested on RPi 3B v1.2 and RPi 4B v1.1 4G
bcm2710: boot tested on RPi 3B v1.2
bcm2711: boot tested on RPi 4B v1.1 4G
Signed-off-by: Álvaro Fernández Rojas <noltari@gmail.com>
Diffstat (limited to 'target/linux/bcm27xx/patches-5.4/950-0839-staging-vc04_services-isp-Reorder-operations-during-.patch')
-rw-r--r-- | target/linux/bcm27xx/patches-5.4/950-0839-staging-vc04_services-isp-Reorder-operations-during-.patch | 92 |
1 files changed, 92 insertions, 0 deletions
diff --git a/target/linux/bcm27xx/patches-5.4/950-0839-staging-vc04_services-isp-Reorder-operations-during-.patch b/target/linux/bcm27xx/patches-5.4/950-0839-staging-vc04_services-isp-Reorder-operations-during-.patch new file mode 100644 index 0000000000..3300ed4686 --- /dev/null +++ b/target/linux/bcm27xx/patches-5.4/950-0839-staging-vc04_services-isp-Reorder-operations-during-.patch @@ -0,0 +1,92 @@ +From af066bde5a442efd50868ffed1aad30190400c91 Mon Sep 17 00:00:00 2001 +From: Naushir Patuck <naush@raspberrypi.com> +Date: Tue, 19 May 2020 15:57:08 +0100 +Subject: [PATCH] staging: vc04_services: isp: Reorder operations + during device probe + +Register the video node at the end of the probe, swapping order with +registering the controls. + +Signed-off-by: Naushir Patuck <naush@raspberrypi.com> +--- + .../bcm2835-isp/bcm2835-v4l2-isp.c | 48 ++++++++++++------- + 1 file changed, 32 insertions(+), 16 deletions(-) + +--- a/drivers/staging/vc04_services/bcm2835-isp/bcm2835-v4l2-isp.c ++++ b/drivers/staging/vc04_services/bcm2835-isp/bcm2835-v4l2-isp.c +@@ -1295,21 +1295,6 @@ static int register_node(struct bcm2835_ + } + 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; +@@ -1324,7 +1309,12 @@ static int register_node(struct bcm2835_ + .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; +@@ -1350,13 +1340,39 @@ static int register_node(struct bcm2835_ + } + + 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. */ |