.. | .. |
---|
| 1 | +// SPDX-License-Identifier: GPL-2.0-only |
---|
1 | 2 | /* |
---|
2 | 3 | * Copyright 1998-2009 VIA Technologies, Inc. All Rights Reserved. |
---|
3 | 4 | * Copyright 2001-2008 S3 Graphics, Inc. All Rights Reserved. |
---|
.. | .. |
---|
220 | 221 | } |
---|
221 | 222 | EXPORT_SYMBOL_GPL(viafb_release_dma); |
---|
222 | 223 | |
---|
223 | | - |
---|
224 | | -#if 0 |
---|
225 | | -/* |
---|
226 | | - * Copy a single buffer from FB memory, synchronously. This code works |
---|
227 | | - * but is not currently used. |
---|
228 | | - */ |
---|
229 | | -void viafb_dma_copy_out(unsigned int offset, dma_addr_t paddr, int len) |
---|
230 | | -{ |
---|
231 | | - unsigned long flags; |
---|
232 | | - int csr; |
---|
233 | | - |
---|
234 | | - mutex_lock(&viafb_dma_lock); |
---|
235 | | - init_completion(&viafb_dma_completion); |
---|
236 | | - /* |
---|
237 | | - * Program the controller. |
---|
238 | | - */ |
---|
239 | | - spin_lock_irqsave(&global_dev.reg_lock, flags); |
---|
240 | | - viafb_mmio_write(VDMA_CSR0, VDMA_C_ENABLE|VDMA_C_DONE); |
---|
241 | | - /* Enable ints; must happen after CSR0 write! */ |
---|
242 | | - viafb_mmio_write(VDMA_MR0, VDMA_MR_TDIE); |
---|
243 | | - viafb_mmio_write(VDMA_MARL0, (int) (paddr & 0xfffffff0)); |
---|
244 | | - viafb_mmio_write(VDMA_MARH0, (int) ((paddr >> 28) & 0xfff)); |
---|
245 | | - /* Data sheet suggests DAR0 should be <<4, but it lies */ |
---|
246 | | - viafb_mmio_write(VDMA_DAR0, offset); |
---|
247 | | - viafb_mmio_write(VDMA_DQWCR0, len >> 4); |
---|
248 | | - viafb_mmio_write(VDMA_TMR0, 0); |
---|
249 | | - viafb_mmio_write(VDMA_DPRL0, 0); |
---|
250 | | - viafb_mmio_write(VDMA_DPRH0, 0); |
---|
251 | | - viafb_mmio_write(VDMA_PMR0, 0); |
---|
252 | | - csr = viafb_mmio_read(VDMA_CSR0); |
---|
253 | | - viafb_mmio_write(VDMA_CSR0, VDMA_C_ENABLE|VDMA_C_START); |
---|
254 | | - spin_unlock_irqrestore(&global_dev.reg_lock, flags); |
---|
255 | | - /* |
---|
256 | | - * Now we just wait until the interrupt handler says |
---|
257 | | - * we're done. |
---|
258 | | - */ |
---|
259 | | - wait_for_completion_interruptible(&viafb_dma_completion); |
---|
260 | | - viafb_mmio_write(VDMA_MR0, 0); /* Reset int enable */ |
---|
261 | | - mutex_unlock(&viafb_dma_lock); |
---|
262 | | -} |
---|
263 | | -EXPORT_SYMBOL_GPL(viafb_dma_copy_out); |
---|
264 | | -#endif |
---|
265 | | - |
---|
266 | 224 | /* |
---|
267 | 225 | * Do a scatter/gather DMA copy from FB memory. You must have done |
---|
268 | 226 | * a successful call to viafb_request_dma() first. |
---|
.. | .. |
---|
484 | 442 | */ |
---|
485 | 443 | vdev->engine_start = pci_resource_start(vdev->pdev, 1); |
---|
486 | 444 | vdev->engine_len = pci_resource_len(vdev->pdev, 1); |
---|
487 | | - vdev->engine_mmio = ioremap_nocache(vdev->engine_start, |
---|
| 445 | + vdev->engine_mmio = ioremap(vdev->engine_start, |
---|
488 | 446 | vdev->engine_len); |
---|
489 | 447 | if (vdev->engine_mmio == NULL) |
---|
490 | 448 | dev_err(&vdev->pdev->dev, |
---|
.. | .. |
---|
600 | 558 | /* |
---|
601 | 559 | * Power management functions |
---|
602 | 560 | */ |
---|
603 | | -#ifdef CONFIG_PM |
---|
604 | | -static LIST_HEAD(viafb_pm_hooks); |
---|
605 | | -static DEFINE_MUTEX(viafb_pm_hooks_lock); |
---|
| 561 | +static __maybe_unused LIST_HEAD(viafb_pm_hooks); |
---|
| 562 | +static __maybe_unused DEFINE_MUTEX(viafb_pm_hooks_lock); |
---|
606 | 563 | |
---|
607 | 564 | void viafb_pm_register(struct viafb_pm_hooks *hooks) |
---|
608 | 565 | { |
---|
.. | .. |
---|
622 | 579 | } |
---|
623 | 580 | EXPORT_SYMBOL_GPL(viafb_pm_unregister); |
---|
624 | 581 | |
---|
625 | | -static int via_suspend(struct pci_dev *pdev, pm_message_t state) |
---|
| 582 | +static int __maybe_unused via_suspend(struct device *dev) |
---|
626 | 583 | { |
---|
627 | 584 | struct viafb_pm_hooks *hooks; |
---|
628 | 585 | |
---|
629 | | - if (state.event != PM_EVENT_SUSPEND) |
---|
630 | | - return 0; |
---|
631 | 586 | /* |
---|
632 | 587 | * "I've occasionally hit a few drivers that caused suspend |
---|
633 | 588 | * failures, and each and every time it was a driver bug, and |
---|
.. | .. |
---|
642 | 597 | hooks->suspend(hooks->private); |
---|
643 | 598 | mutex_unlock(&viafb_pm_hooks_lock); |
---|
644 | 599 | |
---|
645 | | - pci_save_state(pdev); |
---|
646 | | - pci_disable_device(pdev); |
---|
647 | | - pci_set_power_state(pdev, pci_choose_state(pdev, state)); |
---|
648 | 600 | return 0; |
---|
649 | 601 | } |
---|
650 | 602 | |
---|
651 | | -static int via_resume(struct pci_dev *pdev) |
---|
| 603 | +static int __maybe_unused via_resume(struct device *dev) |
---|
652 | 604 | { |
---|
653 | 605 | struct viafb_pm_hooks *hooks; |
---|
654 | | - |
---|
655 | | - /* Get the bus side powered up */ |
---|
656 | | - pci_set_power_state(pdev, PCI_D0); |
---|
657 | | - pci_restore_state(pdev); |
---|
658 | | - if (pci_enable_device(pdev)) |
---|
659 | | - return 0; |
---|
660 | | - |
---|
661 | | - pci_set_master(pdev); |
---|
662 | 606 | |
---|
663 | 607 | /* Now bring back any subdevs */ |
---|
664 | 608 | mutex_lock(&viafb_pm_hooks_lock); |
---|
.. | .. |
---|
668 | 612 | |
---|
669 | 613 | return 0; |
---|
670 | 614 | } |
---|
671 | | -#endif /* CONFIG_PM */ |
---|
672 | 615 | |
---|
673 | 616 | static int via_pci_probe(struct pci_dev *pdev, const struct pci_device_id *ent) |
---|
674 | 617 | { |
---|
.. | .. |
---|
754 | 697 | }; |
---|
755 | 698 | MODULE_DEVICE_TABLE(pci, via_pci_table); |
---|
756 | 699 | |
---|
| 700 | +static const struct dev_pm_ops via_pm_ops = { |
---|
| 701 | +#ifdef CONFIG_PM_SLEEP |
---|
| 702 | + .suspend = via_suspend, |
---|
| 703 | + .resume = via_resume, |
---|
| 704 | + .freeze = NULL, |
---|
| 705 | + .thaw = via_resume, |
---|
| 706 | + .poweroff = NULL, |
---|
| 707 | + .restore = via_resume, |
---|
| 708 | +#endif |
---|
| 709 | +}; |
---|
| 710 | + |
---|
757 | 711 | static struct pci_driver via_driver = { |
---|
758 | 712 | .name = "viafb", |
---|
759 | 713 | .id_table = via_pci_table, |
---|
760 | 714 | .probe = via_pci_probe, |
---|
761 | 715 | .remove = via_pci_remove, |
---|
762 | | -#ifdef CONFIG_PM |
---|
763 | | - .suspend = via_suspend, |
---|
764 | | - .resume = via_resume, |
---|
765 | | -#endif |
---|
| 716 | + .driver.pm = &via_pm_ops, |
---|
766 | 717 | }; |
---|
767 | 718 | |
---|
768 | 719 | static int __init via_core_init(void) |
---|