FAILED: patch "[PATCH] media: qcom: camss: Fix genpd cleanup" failed to apply to 6.6-stable tree
Subsystems (5)
[email protected]
maintainerThe patch below does not apply to the 6.6-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.
To reproduce the conflict and resubmit, you may use the following commands:
git fetch https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/ linux-6.6.y
git checkout FETCH_HEAD
git cherry-pick -x f69791c39745e64621216fe8919cb73c0065002b
# <resolve conflicts, build, test, etc.>
git commit -s
git send-email --to '<[email protected]>' --in-reply-to '2023112438-dingo-broken-1a0a@gregkh' --subject-prefix 'PATCH 6.6.y' HEAD^..
Possible dependencies:
f69791c39745 ("media: qcom: camss: Fix genpd cleanup") b278080a89f4 ("media: qcom: camss: Fix V4L2 async notifier error path") 7405116519ad ("media: qcom: camss: Fix pm_domain_on sequence in probe")
thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
From f69791c39745e64621216fe8919cb73c0065002b Mon Sep 17 00:00:00 2001
From: Bryan O'Donoghue <[email protected]>
Date: Wed, 30 Aug 2023 16:16:08 +0100
Subject: [PATCH] media: qcom: camss: Fix genpd cleanup
Right now we never release the power-domains properly on the error path. Add a routine to be reused for this purpose and appropriate jumps in probe() to run that routine where necessary.
drivers/media/platform/qcom/camss/camss.c +21 -14
@@ -1538,6 +1538,20 @@ static int camss_icc_get(struct camss *camss)return 0 ; } +static void camss_genpd_cleanup (struct camss *camss) +{ +int i; + +if (camss->genpd_num ==1 ) +return ; + +if (camss->genpd_num > camss->vfe_num) +device_link_del (camss->genpd_link[camss->genpd_num -1 ]); + +for (i =0 ; i < camss->genpd_num; i++) +dev_pm_domain_detach (camss->genpd[i], true); +} +/* * camss_probe - Probe CAMSS platform device * @pdev: Pointer to CAMSS platform device
@@ -1627,11 +1641,11 @@ static int camss_probe(struct platform_device *pdev) ret =camss_init_subdevices (camss);if (ret <0 ) -return ret; + goto err_genpd_cleanup; ret =dma_set_mask_and_coherent (dev,0xffffffff );if (ret) -return ret; + goto err_genpd_cleanup; camss->media_dev.dev = camss->dev; strscpy(camss->media_dev.model, "Qualcomm Camera Subsystem",
@@ -1643,7 +1657,7 @@ static int camss_probe(struct platform_device *pdev) ret =v4l2_device_register (camss->dev, &camss->v4l2_dev);if (ret <0 ) {dev_err (dev,"Failed to register V4L2 device: %d\n" , ret); -return ret; + goto err_genpd_cleanup; }v4l2_async_nf_init (&camss->notifier, &camss->v4l2_dev);
@@ -1693,28 +1707,19 @@ static int camss_probe(struct platform_device *pdev) err_v4l2_device_unregister:v4l2_device_unregister (&camss->v4l2_dev);v4l2_async_nf_cleanup (&camss->notifier); +err_genpd_cleanup: +camss_genpd_cleanup (camss);return ret; }void camss_delete (struct camss *camss) { -int i; -v4l2_device_unregister (&camss->v4l2_dev);media_device_unregister (&camss->media_dev);media_device_cleanup (&camss->media_dev);pm_runtime_disable (camss->dev); - -if (camss->genpd_num ==1 ) -return ; - -if (camss->genpd_num > camss->vfe_num) -device_link_del (camss->genpd_link[camss->genpd_num -1 ]); - -for (i =0 ; i < camss->genpd_num; i++) -dev_pm_domain_detach (camss->genpd[i], true); }/*
@@ -1733,6 +1738,8 @@ static void camss_remove(struct platform_device *pdev)if (atomic_read (&camss->ref_count) ==0 )camss_delete (camss); + +camss_genpd_cleanup (camss); }static const struct of_device_id camss_dt_match[] = {