NVIDIA: SAUCE: usb: host: tegra: Remove manual wake IRQ disposal
We found that calling irq_dispose_mapping() caused a kernel warning when removing the driver. The IRQs are obtained using platform_get_irq(), which returns a Linux virtual IRQ number directly managed by the device core, not by the OF subsystem. Therefore, the driver should not call irq_dispose_mapping() for these IRQs. Bug 5421820 Change-Id: I44bb119def6d85b85fe06e1c0fc6771b63d35fd8 Signed-off-by: Wayne Chang <waynec@nvidia.com> Reviewed-on: https://git-master.nvidia.com/r/c/3rdparty/canonical/linux-noble/+/3479600 Reviewed-by: Henry Lin <henryl@nvidia.com> Reviewed-by: Brad Griffis <bgriffis@nvidia.com> Reviewed-by: WK Tsai <wtsai@nvidia.com> GVS: buildbot_gerritrpt <buildbot_gerritrpt@nvidia.com>
This commit is contained in:
committed by
mobile promotions
parent
9340df62f6
commit
fc8056e062
@@ -2198,7 +2198,6 @@ static int tegra_xusb_setup_wakeup(struct platform_device *pdev, struct tegra_xu
|
|||||||
data = irq_get_irq_data(tegra->wake_irqs[i]);
|
data = irq_get_irq_data(tegra->wake_irqs[i]);
|
||||||
if (!data) {
|
if (!data) {
|
||||||
dev_warn(tegra->dev, "get wake event %d irq data fail\n", i);
|
dev_warn(tegra->dev, "get wake event %d irq data fail\n", i);
|
||||||
irq_dispose_mapping(tegra->wake_irqs[i]);
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2211,16 +2210,6 @@ static int tegra_xusb_setup_wakeup(struct platform_device *pdev, struct tegra_xu
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void tegra_xusb_dispose_wake(struct tegra_xusb *tegra)
|
|
||||||
{
|
|
||||||
unsigned int i;
|
|
||||||
|
|
||||||
for (i = 0; i < tegra->num_wakes; i++)
|
|
||||||
irq_dispose_mapping(tegra->wake_irqs[i]);
|
|
||||||
|
|
||||||
tegra->num_wakes = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int tegra_xusb_probe(struct platform_device *pdev)
|
static int tegra_xusb_probe(struct platform_device *pdev)
|
||||||
{
|
{
|
||||||
struct tegra_xusb *tegra;
|
struct tegra_xusb *tegra;
|
||||||
@@ -2281,10 +2270,8 @@ static int tegra_xusb_probe(struct platform_device *pdev)
|
|||||||
return err;
|
return err;
|
||||||
|
|
||||||
tegra->padctl = tegra_xusb_padctl_get(&pdev->dev);
|
tegra->padctl = tegra_xusb_padctl_get(&pdev->dev);
|
||||||
if (IS_ERR(tegra->padctl)) {
|
if (IS_ERR(tegra->padctl))
|
||||||
err = PTR_ERR(tegra->padctl);
|
return PTR_ERR(tegra->padctl);
|
||||||
goto dispose_wake;
|
|
||||||
}
|
|
||||||
|
|
||||||
np = of_parse_phandle(pdev->dev.of_node, "nvidia,xusb-padctl", 0);
|
np = of_parse_phandle(pdev->dev.of_node, "nvidia,xusb-padctl", 0);
|
||||||
if (!np) {
|
if (!np) {
|
||||||
@@ -2632,8 +2619,6 @@ put_powerdomains:
|
|||||||
put_padctl:
|
put_padctl:
|
||||||
of_node_put(np);
|
of_node_put(np);
|
||||||
tegra_xusb_padctl_put(tegra->padctl);
|
tegra_xusb_padctl_put(tegra->padctl);
|
||||||
dispose_wake:
|
|
||||||
tegra_xusb_dispose_wake(tegra);
|
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2675,8 +2660,6 @@ static void tegra_xusb_remove(struct platform_device *pdev)
|
|||||||
if (tegra->padctl_irq)
|
if (tegra->padctl_irq)
|
||||||
pm_runtime_disable(&pdev->dev);
|
pm_runtime_disable(&pdev->dev);
|
||||||
|
|
||||||
tegra_xusb_dispose_wake(tegra);
|
|
||||||
|
|
||||||
pm_runtime_put(&pdev->dev);
|
pm_runtime_put(&pdev->dev);
|
||||||
|
|
||||||
tegra_xusb_disable(tegra);
|
tegra_xusb_disable(tegra);
|
||||||
|
|||||||
Reference in New Issue
Block a user