.. | .. |
---|
62 | 62 | |
---|
63 | 63 | /* CRT timing register sets */ |
---|
64 | 64 | |
---|
65 | | -static struct vga_regset vt8623_h_total_regs[] = {{0x00, 0, 7}, {0x36, 3, 3}, VGA_REGSET_END}; |
---|
66 | | -static struct vga_regset vt8623_h_display_regs[] = {{0x01, 0, 7}, VGA_REGSET_END}; |
---|
67 | | -static struct vga_regset vt8623_h_blank_start_regs[] = {{0x02, 0, 7}, VGA_REGSET_END}; |
---|
68 | | -static struct vga_regset vt8623_h_blank_end_regs[] = {{0x03, 0, 4}, {0x05, 7, 7}, {0x33, 5, 5}, VGA_REGSET_END}; |
---|
69 | | -static struct vga_regset vt8623_h_sync_start_regs[] = {{0x04, 0, 7}, {0x33, 4, 4}, VGA_REGSET_END}; |
---|
70 | | -static struct vga_regset vt8623_h_sync_end_regs[] = {{0x05, 0, 4}, VGA_REGSET_END}; |
---|
| 65 | +static const struct vga_regset vt8623_h_total_regs[] = {{0x00, 0, 7}, {0x36, 3, 3}, VGA_REGSET_END}; |
---|
| 66 | +static const struct vga_regset vt8623_h_display_regs[] = {{0x01, 0, 7}, VGA_REGSET_END}; |
---|
| 67 | +static const struct vga_regset vt8623_h_blank_start_regs[] = {{0x02, 0, 7}, VGA_REGSET_END}; |
---|
| 68 | +static const struct vga_regset vt8623_h_blank_end_regs[] = {{0x03, 0, 4}, {0x05, 7, 7}, {0x33, 5, 5}, VGA_REGSET_END}; |
---|
| 69 | +static const struct vga_regset vt8623_h_sync_start_regs[] = {{0x04, 0, 7}, {0x33, 4, 4}, VGA_REGSET_END}; |
---|
| 70 | +static const struct vga_regset vt8623_h_sync_end_regs[] = {{0x05, 0, 4}, VGA_REGSET_END}; |
---|
71 | 71 | |
---|
72 | | -static struct vga_regset vt8623_v_total_regs[] = {{0x06, 0, 7}, {0x07, 0, 0}, {0x07, 5, 5}, {0x35, 0, 0}, VGA_REGSET_END}; |
---|
73 | | -static struct vga_regset vt8623_v_display_regs[] = {{0x12, 0, 7}, {0x07, 1, 1}, {0x07, 6, 6}, {0x35, 2, 2}, VGA_REGSET_END}; |
---|
74 | | -static struct vga_regset vt8623_v_blank_start_regs[] = {{0x15, 0, 7}, {0x07, 3, 3}, {0x09, 5, 5}, {0x35, 3, 3}, VGA_REGSET_END}; |
---|
75 | | -static struct vga_regset vt8623_v_blank_end_regs[] = {{0x16, 0, 7}, VGA_REGSET_END}; |
---|
76 | | -static struct vga_regset vt8623_v_sync_start_regs[] = {{0x10, 0, 7}, {0x07, 2, 2}, {0x07, 7, 7}, {0x35, 1, 1}, VGA_REGSET_END}; |
---|
77 | | -static struct vga_regset vt8623_v_sync_end_regs[] = {{0x11, 0, 3}, VGA_REGSET_END}; |
---|
| 72 | +static const struct vga_regset vt8623_v_total_regs[] = {{0x06, 0, 7}, {0x07, 0, 0}, {0x07, 5, 5}, {0x35, 0, 0}, VGA_REGSET_END}; |
---|
| 73 | +static const struct vga_regset vt8623_v_display_regs[] = {{0x12, 0, 7}, {0x07, 1, 1}, {0x07, 6, 6}, {0x35, 2, 2}, VGA_REGSET_END}; |
---|
| 74 | +static const struct vga_regset vt8623_v_blank_start_regs[] = {{0x15, 0, 7}, {0x07, 3, 3}, {0x09, 5, 5}, {0x35, 3, 3}, VGA_REGSET_END}; |
---|
| 75 | +static const struct vga_regset vt8623_v_blank_end_regs[] = {{0x16, 0, 7}, VGA_REGSET_END}; |
---|
| 76 | +static const struct vga_regset vt8623_v_sync_start_regs[] = {{0x10, 0, 7}, {0x07, 2, 2}, {0x07, 7, 7}, {0x35, 1, 1}, VGA_REGSET_END}; |
---|
| 77 | +static const struct vga_regset vt8623_v_sync_end_regs[] = {{0x11, 0, 3}, VGA_REGSET_END}; |
---|
78 | 78 | |
---|
79 | | -static struct vga_regset vt8623_offset_regs[] = {{0x13, 0, 7}, {0x35, 5, 7}, VGA_REGSET_END}; |
---|
80 | | -static struct vga_regset vt8623_line_compare_regs[] = {{0x18, 0, 7}, {0x07, 4, 4}, {0x09, 6, 6}, {0x33, 0, 2}, {0x35, 4, 4}, VGA_REGSET_END}; |
---|
81 | | -static struct vga_regset vt8623_fetch_count_regs[] = {{0x1C, 0, 7}, {0x1D, 0, 1}, VGA_REGSET_END}; |
---|
82 | | -static struct vga_regset vt8623_start_address_regs[] = {{0x0d, 0, 7}, {0x0c, 0, 7}, {0x34, 0, 7}, {0x48, 0, 1}, VGA_REGSET_END}; |
---|
| 79 | +static const struct vga_regset vt8623_offset_regs[] = {{0x13, 0, 7}, {0x35, 5, 7}, VGA_REGSET_END}; |
---|
| 80 | +static const struct vga_regset vt8623_line_compare_regs[] = {{0x18, 0, 7}, {0x07, 4, 4}, {0x09, 6, 6}, {0x33, 0, 2}, {0x35, 4, 4}, VGA_REGSET_END}; |
---|
| 81 | +static const struct vga_regset vt8623_fetch_count_regs[] = {{0x1C, 0, 7}, {0x1D, 0, 1}, VGA_REGSET_END}; |
---|
| 82 | +static const struct vga_regset vt8623_start_address_regs[] = {{0x0d, 0, 7}, {0x0c, 0, 7}, {0x34, 0, 7}, {0x48, 0, 1}, VGA_REGSET_END}; |
---|
83 | 83 | |
---|
84 | 84 | static const struct svga_timing_regs vt8623_timing_regs = { |
---|
85 | 85 | vt8623_h_total_regs, vt8623_h_display_regs, vt8623_h_blank_start_regs, |
---|
.. | .. |
---|
504 | 504 | (info->var.vmode & FB_VMODE_DOUBLE) ? 2 : 1, 1, |
---|
505 | 505 | 1, info->node); |
---|
506 | 506 | |
---|
| 507 | + if (screen_size > info->screen_size) |
---|
| 508 | + screen_size = info->screen_size; |
---|
507 | 509 | memset_io(info->screen_base, 0x00, screen_size); |
---|
508 | 510 | |
---|
509 | 511 | /* Device and screen back on */ |
---|
.. | .. |
---|
634 | 636 | |
---|
635 | 637 | /* Frame buffer operations */ |
---|
636 | 638 | |
---|
637 | | -static struct fb_ops vt8623fb_ops = { |
---|
| 639 | +static const struct fb_ops vt8623fb_ops = { |
---|
638 | 640 | .owner = THIS_MODULE, |
---|
639 | 641 | .fb_open = vt8623fb_open, |
---|
640 | 642 | .fb_release = vt8623fb_release, |
---|
.. | .. |
---|
669 | 671 | |
---|
670 | 672 | /* Allocate and fill driver data structure */ |
---|
671 | 673 | info = framebuffer_alloc(sizeof(struct vt8623fb_info), &(dev->dev)); |
---|
672 | | - if (! info) { |
---|
673 | | - dev_err(&(dev->dev), "cannot allocate memory\n"); |
---|
| 674 | + if (!info) |
---|
674 | 675 | return -ENOMEM; |
---|
675 | | - } |
---|
676 | 676 | |
---|
677 | 677 | par = info->par; |
---|
678 | 678 | mutex_init(&par->open_lock); |
---|
.. | .. |
---|
817 | 817 | } |
---|
818 | 818 | |
---|
819 | 819 | |
---|
820 | | -#ifdef CONFIG_PM |
---|
821 | 820 | /* PCI suspend */ |
---|
822 | 821 | |
---|
823 | | -static int vt8623_pci_suspend(struct pci_dev* dev, pm_message_t state) |
---|
| 822 | +static int __maybe_unused vt8623_pci_suspend(struct device *dev) |
---|
824 | 823 | { |
---|
825 | | - struct fb_info *info = pci_get_drvdata(dev); |
---|
| 824 | + struct fb_info *info = dev_get_drvdata(dev); |
---|
826 | 825 | struct vt8623fb_info *par = info->par; |
---|
827 | 826 | |
---|
828 | 827 | dev_info(info->device, "suspend\n"); |
---|
.. | .. |
---|
830 | 829 | console_lock(); |
---|
831 | 830 | mutex_lock(&(par->open_lock)); |
---|
832 | 831 | |
---|
833 | | - if ((state.event == PM_EVENT_FREEZE) || (par->ref_count == 0)) { |
---|
| 832 | + if (par->ref_count == 0) { |
---|
834 | 833 | mutex_unlock(&(par->open_lock)); |
---|
835 | 834 | console_unlock(); |
---|
836 | 835 | return 0; |
---|
837 | 836 | } |
---|
838 | 837 | |
---|
839 | 838 | fb_set_suspend(info, 1); |
---|
840 | | - |
---|
841 | | - pci_save_state(dev); |
---|
842 | | - pci_disable_device(dev); |
---|
843 | | - pci_set_power_state(dev, pci_choose_state(dev, state)); |
---|
844 | 839 | |
---|
845 | 840 | mutex_unlock(&(par->open_lock)); |
---|
846 | 841 | console_unlock(); |
---|
.. | .. |
---|
851 | 846 | |
---|
852 | 847 | /* PCI resume */ |
---|
853 | 848 | |
---|
854 | | -static int vt8623_pci_resume(struct pci_dev* dev) |
---|
| 849 | +static int __maybe_unused vt8623_pci_resume(struct device *dev) |
---|
855 | 850 | { |
---|
856 | | - struct fb_info *info = pci_get_drvdata(dev); |
---|
| 851 | + struct fb_info *info = dev_get_drvdata(dev); |
---|
857 | 852 | struct vt8623fb_info *par = info->par; |
---|
858 | 853 | |
---|
859 | 854 | dev_info(info->device, "resume\n"); |
---|
.. | .. |
---|
864 | 859 | if (par->ref_count == 0) |
---|
865 | 860 | goto fail; |
---|
866 | 861 | |
---|
867 | | - pci_set_power_state(dev, PCI_D0); |
---|
868 | | - pci_restore_state(dev); |
---|
869 | | - |
---|
870 | | - if (pci_enable_device(dev)) |
---|
871 | | - goto fail; |
---|
872 | | - |
---|
873 | | - pci_set_master(dev); |
---|
874 | | - |
---|
875 | 862 | vt8623fb_set_par(info); |
---|
876 | 863 | fb_set_suspend(info, 0); |
---|
877 | 864 | |
---|
.. | .. |
---|
881 | 868 | |
---|
882 | 869 | return 0; |
---|
883 | 870 | } |
---|
884 | | -#else |
---|
885 | | -#define vt8623_pci_suspend NULL |
---|
886 | | -#define vt8623_pci_resume NULL |
---|
887 | | -#endif /* CONFIG_PM */ |
---|
| 871 | + |
---|
| 872 | +static const struct dev_pm_ops vt8623_pci_pm_ops = { |
---|
| 873 | +#ifdef CONFIG_PM_SLEEP |
---|
| 874 | + .suspend = vt8623_pci_suspend, |
---|
| 875 | + .resume = vt8623_pci_resume, |
---|
| 876 | + .freeze = NULL, |
---|
| 877 | + .thaw = vt8623_pci_resume, |
---|
| 878 | + .poweroff = vt8623_pci_suspend, |
---|
| 879 | + .restore = vt8623_pci_resume, |
---|
| 880 | +#endif /* CONFIG_PM_SLEEP */ |
---|
| 881 | +}; |
---|
888 | 882 | |
---|
889 | 883 | /* List of boards that we are trying to support */ |
---|
890 | 884 | |
---|
.. | .. |
---|
900 | 894 | .id_table = vt8623_devices, |
---|
901 | 895 | .probe = vt8623_pci_probe, |
---|
902 | 896 | .remove = vt8623_pci_remove, |
---|
903 | | - .suspend = vt8623_pci_suspend, |
---|
904 | | - .resume = vt8623_pci_resume, |
---|
| 897 | + .driver.pm = &vt8623_pci_pm_ops, |
---|
905 | 898 | }; |
---|
906 | 899 | |
---|
907 | 900 | /* Cleanup */ |
---|