From 50a212ec906f7524620675f0c57357691c26c81f Mon Sep 17 00:00:00 2001
From: hc <hc@nodka.com>
Date: Wed, 16 Oct 2024 01:20:19 +0000
Subject: [PATCH] 修改GPIO导出默认初始值
---
kernel/drivers/video/fbdev/via/via-core.c | 94 +++++++++++++----------------------------------
1 files changed, 26 insertions(+), 68 deletions(-)
diff --git a/kernel/drivers/video/fbdev/via/via-core.c b/kernel/drivers/video/fbdev/via/via-core.c
index b041eb2..0363b47 100644
--- a/kernel/drivers/video/fbdev/via/via-core.c
+++ b/kernel/drivers/video/fbdev/via/via-core.c
@@ -1,3 +1,4 @@
+// SPDX-License-Identifier: GPL-2.0-only
/*
* Copyright 1998-2009 VIA Technologies, Inc. All Rights Reserved.
* Copyright 2001-2008 S3 Graphics, Inc. All Rights Reserved.
@@ -220,49 +221,6 @@
}
EXPORT_SYMBOL_GPL(viafb_release_dma);
-
-#if 0
-/*
- * Copy a single buffer from FB memory, synchronously. This code works
- * but is not currently used.
- */
-void viafb_dma_copy_out(unsigned int offset, dma_addr_t paddr, int len)
-{
- unsigned long flags;
- int csr;
-
- mutex_lock(&viafb_dma_lock);
- init_completion(&viafb_dma_completion);
- /*
- * Program the controller.
- */
- spin_lock_irqsave(&global_dev.reg_lock, flags);
- viafb_mmio_write(VDMA_CSR0, VDMA_C_ENABLE|VDMA_C_DONE);
- /* Enable ints; must happen after CSR0 write! */
- viafb_mmio_write(VDMA_MR0, VDMA_MR_TDIE);
- viafb_mmio_write(VDMA_MARL0, (int) (paddr & 0xfffffff0));
- viafb_mmio_write(VDMA_MARH0, (int) ((paddr >> 28) & 0xfff));
- /* Data sheet suggests DAR0 should be <<4, but it lies */
- viafb_mmio_write(VDMA_DAR0, offset);
- viafb_mmio_write(VDMA_DQWCR0, len >> 4);
- viafb_mmio_write(VDMA_TMR0, 0);
- viafb_mmio_write(VDMA_DPRL0, 0);
- viafb_mmio_write(VDMA_DPRH0, 0);
- viafb_mmio_write(VDMA_PMR0, 0);
- csr = viafb_mmio_read(VDMA_CSR0);
- viafb_mmio_write(VDMA_CSR0, VDMA_C_ENABLE|VDMA_C_START);
- spin_unlock_irqrestore(&global_dev.reg_lock, flags);
- /*
- * Now we just wait until the interrupt handler says
- * we're done.
- */
- wait_for_completion_interruptible(&viafb_dma_completion);
- viafb_mmio_write(VDMA_MR0, 0); /* Reset int enable */
- mutex_unlock(&viafb_dma_lock);
-}
-EXPORT_SYMBOL_GPL(viafb_dma_copy_out);
-#endif
-
/*
* Do a scatter/gather DMA copy from FB memory. You must have done
* a successful call to viafb_request_dma() first.
@@ -484,7 +442,7 @@
*/
vdev->engine_start = pci_resource_start(vdev->pdev, 1);
vdev->engine_len = pci_resource_len(vdev->pdev, 1);
- vdev->engine_mmio = ioremap_nocache(vdev->engine_start,
+ vdev->engine_mmio = ioremap(vdev->engine_start,
vdev->engine_len);
if (vdev->engine_mmio == NULL)
dev_err(&vdev->pdev->dev,
@@ -600,9 +558,8 @@
/*
* Power management functions
*/
-#ifdef CONFIG_PM
-static LIST_HEAD(viafb_pm_hooks);
-static DEFINE_MUTEX(viafb_pm_hooks_lock);
+static __maybe_unused LIST_HEAD(viafb_pm_hooks);
+static __maybe_unused DEFINE_MUTEX(viafb_pm_hooks_lock);
void viafb_pm_register(struct viafb_pm_hooks *hooks)
{
@@ -622,12 +579,10 @@
}
EXPORT_SYMBOL_GPL(viafb_pm_unregister);
-static int via_suspend(struct pci_dev *pdev, pm_message_t state)
+static int __maybe_unused via_suspend(struct device *dev)
{
struct viafb_pm_hooks *hooks;
- if (state.event != PM_EVENT_SUSPEND)
- return 0;
/*
* "I've occasionally hit a few drivers that caused suspend
* failures, and each and every time it was a driver bug, and
@@ -642,23 +597,12 @@
hooks->suspend(hooks->private);
mutex_unlock(&viafb_pm_hooks_lock);
- pci_save_state(pdev);
- pci_disable_device(pdev);
- pci_set_power_state(pdev, pci_choose_state(pdev, state));
return 0;
}
-static int via_resume(struct pci_dev *pdev)
+static int __maybe_unused via_resume(struct device *dev)
{
struct viafb_pm_hooks *hooks;
-
- /* Get the bus side powered up */
- pci_set_power_state(pdev, PCI_D0);
- pci_restore_state(pdev);
- if (pci_enable_device(pdev))
- return 0;
-
- pci_set_master(pdev);
/* Now bring back any subdevs */
mutex_lock(&viafb_pm_hooks_lock);
@@ -668,7 +612,6 @@
return 0;
}
-#endif /* CONFIG_PM */
static int via_pci_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
{
@@ -754,15 +697,23 @@
};
MODULE_DEVICE_TABLE(pci, via_pci_table);
+static const struct dev_pm_ops via_pm_ops = {
+#ifdef CONFIG_PM_SLEEP
+ .suspend = via_suspend,
+ .resume = via_resume,
+ .freeze = NULL,
+ .thaw = via_resume,
+ .poweroff = NULL,
+ .restore = via_resume,
+#endif
+};
+
static struct pci_driver via_driver = {
.name = "viafb",
.id_table = via_pci_table,
.probe = via_pci_probe,
.remove = via_pci_remove,
-#ifdef CONFIG_PM
- .suspend = via_suspend,
- .resume = via_resume,
-#endif
+ .driver.pm = &via_pm_ops,
};
static int __init via_core_init(void)
@@ -774,7 +725,14 @@
return ret;
viafb_i2c_init();
viafb_gpio_init();
- return pci_register_driver(&via_driver);
+ ret = pci_register_driver(&via_driver);
+ if (ret) {
+ viafb_gpio_exit();
+ viafb_i2c_exit();
+ return ret;
+ }
+
+ return 0;
}
static void __exit via_core_exit(void)
--
Gitblit v1.6.2