camera: Handle probe deferral

Probing a driver can be deferred if a resource is not ready and this is
accomplished by returning -EPROBE_DEFER from the .probe function. This
tells to kernel to probe the driver again some time later. When probing
a driver is deferred it is not necessary to print an error message
because this is an expected error case. To avoid printing an error
message on probe deferral, the dev_err_probe() function can be used
which will only print an error if the error code is not -EPROBE_DEFER.
Therefore, update the camera drivers to use dev_err_probe() to avoid
printing an error message when -EPROBE_DEFER if returned from ICC.

This change will also cause the probing of the rtcpu-debug driver to
be deferred if -EPROBE_DEFER is returned and prevent the rtcpu-debug
driver from being probed at all if an real error is encountered.

Bug 4496044

Change-Id: I8a5313750e11b4bd661191c0c544c39e43478089
Signed-off-by: Jon Hunter <jonathanh@nvidia.com>
Reviewed-on: https://git-master.nvidia.com/r/c/linux-nv-oot/+/3084829
Tested-by: mobile promotions <svcmobile_promotions@nvidia.com>
Reviewed-by: mobile promotions <svcmobile_promotions@nvidia.com>
This commit is contained in:
Jon Hunter
2024-02-12 15:25:19 +00:00
committed by mobile promotions
parent e5075835ab
commit f0538cd58d
2 changed files with 7 additions and 10 deletions

View File

@@ -1,5 +1,5 @@
// SPDX-License-Identifier: GPL-2.0 // SPDX-License-Identifier: GPL-2.0
// Copyright (c) 2022-2023, NVIDIA CORPORATION & AFFILIATES. All rights reserved. // SPDX-FileCopyrightText: Copyright (c) 2022-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
#include "soc/tegra/camrtc-dbg-messages.h" #include "soc/tegra/camrtc-dbg-messages.h"
@@ -1882,11 +1882,9 @@ static int camrtc_debug_probe(struct tegra_ivc_channel *ch)
} }
crd->icc_path = devm_of_icc_get(crd->mem_devices[0], "write"); crd->icc_path = devm_of_icc_get(crd->mem_devices[0], "write");
if (IS_ERR(crd->icc_path)) { if (IS_ERR(crd->icc_path))
dev_err(dev, "failed to get icc path for rtcpu, err: %ld\n", return dev_err_probe(dev, PTR_ERR(crd->icc_path),
PTR_ERR(crd->icc_path)); "failed to get icc write handle\n");
crd->icc_path = NULL;
}
if (camrtc_debug_populate(ch)) if (camrtc_debug_populate(ch))
return -ENOMEM; return -ENOMEM;

View File

@@ -252,10 +252,9 @@ static int vi5_probe(struct platform_device *pdev)
vi5 = pdata->private_data; vi5 = pdata->private_data;
vi5->icc_write = devm_of_icc_get(dev, "write"); vi5->icc_write = devm_of_icc_get(dev, "write");
if (IS_ERR(vi5->icc_write)) { if (IS_ERR(vi5->icc_write))
dev_err(dev, "failed to get icc write handle\n"); return dev_err_probe(&pdev->dev, PTR_ERR(vi5->icc_write),
return PTR_ERR(vi5->icc_write); "failed to get icc write handle\n");
}
err = nvhost_client_device_get_resources(pdev); err = nvhost_client_device_get_resources(pdev);
if (err) if (err)