diff options
-rw-r--r-- | drivers/video/via/hw.c | 102 | ||||
-rw-r--r-- | drivers/video/via/hw.h | 9 | ||||
-rw-r--r-- | drivers/video/via/viafbdev.h | 3 |
3 files changed, 114 insertions, 0 deletions
diff --git a/drivers/video/via/hw.c b/drivers/video/via/hw.c index 638cf96c8739..30cc2f0961e3 100644 --- a/drivers/video/via/hw.c +++ b/drivers/video/via/hw.c | |||
@@ -753,6 +753,66 @@ void write_dac_reg(u8 index, u8 r, u8 g, u8 b) | |||
753 | outb(b, LUT_DATA); | 753 | outb(b, LUT_DATA); |
754 | } | 754 | } |
755 | 755 | ||
756 | static u32 get_dvi_devices(int output_interface) | ||
757 | { | ||
758 | switch (output_interface) { | ||
759 | case INTERFACE_DVP0: | ||
760 | return VIA_96 | VIA_6C; | ||
761 | |||
762 | case INTERFACE_DVP1: | ||
763 | if (viaparinfo->chip_info->gfx_chip_name == UNICHROME_CLE266) | ||
764 | return VIA_93; | ||
765 | else | ||
766 | return VIA_DVP1; | ||
767 | |||
768 | case INTERFACE_DFP_HIGH: | ||
769 | if (viaparinfo->chip_info->gfx_chip_name == UNICHROME_CLE266) | ||
770 | return 0; | ||
771 | else | ||
772 | return VIA_LVDS2 | VIA_96; | ||
773 | |||
774 | case INTERFACE_DFP_LOW: | ||
775 | if (viaparinfo->chip_info->gfx_chip_name == UNICHROME_CLE266) | ||
776 | return 0; | ||
777 | else | ||
778 | return VIA_DVP1 | VIA_LVDS1; | ||
779 | |||
780 | case INTERFACE_TMDS: | ||
781 | return VIA_LVDS1; | ||
782 | } | ||
783 | |||
784 | return 0; | ||
785 | } | ||
786 | |||
787 | static u32 get_lcd_devices(int output_interface) | ||
788 | { | ||
789 | switch (output_interface) { | ||
790 | case INTERFACE_DVP0: | ||
791 | return VIA_96; | ||
792 | |||
793 | case INTERFACE_DVP1: | ||
794 | return VIA_DVP1; | ||
795 | |||
796 | case INTERFACE_DFP_HIGH: | ||
797 | return VIA_LVDS2 | VIA_96; | ||
798 | |||
799 | case INTERFACE_DFP_LOW: | ||
800 | return VIA_LVDS1 | VIA_DVP1; | ||
801 | |||
802 | case INTERFACE_DFP: | ||
803 | return VIA_LVDS1 | VIA_LVDS2; | ||
804 | |||
805 | case INTERFACE_LVDS0: | ||
806 | case INTERFACE_LVDS0LVDS1: | ||
807 | return VIA_LVDS1; | ||
808 | |||
809 | case INTERFACE_LVDS1: | ||
810 | return VIA_LVDS2; | ||
811 | } | ||
812 | |||
813 | return 0; | ||
814 | } | ||
815 | |||
756 | /*Set IGA path for each device*/ | 816 | /*Set IGA path for each device*/ |
757 | void viafb_set_iga_path(void) | 817 | void viafb_set_iga_path(void) |
758 | { | 818 | { |
@@ -819,6 +879,48 @@ void viafb_set_iga_path(void) | |||
819 | viaparinfo->tmds_setting_info->iga_path = IGA1; | 879 | viaparinfo->tmds_setting_info->iga_path = IGA1; |
820 | } | 880 | } |
821 | } | 881 | } |
882 | |||
883 | viaparinfo->shared->iga1_devices = 0; | ||
884 | viaparinfo->shared->iga2_devices = 0; | ||
885 | if (viafb_CRT_ON) { | ||
886 | if (viaparinfo->crt_setting_info->iga_path == IGA1) | ||
887 | viaparinfo->shared->iga1_devices |= VIA_CRT; | ||
888 | else | ||
889 | viaparinfo->shared->iga2_devices |= VIA_CRT; | ||
890 | } | ||
891 | |||
892 | if (viafb_DVI_ON) { | ||
893 | if (viaparinfo->tmds_setting_info->iga_path == IGA1) | ||
894 | viaparinfo->shared->iga1_devices |= get_dvi_devices( | ||
895 | viaparinfo->chip_info-> | ||
896 | tmds_chip_info.output_interface); | ||
897 | else | ||
898 | viaparinfo->shared->iga2_devices |= get_dvi_devices( | ||
899 | viaparinfo->chip_info-> | ||
900 | tmds_chip_info.output_interface); | ||
901 | } | ||
902 | |||
903 | if (viafb_LCD_ON) { | ||
904 | if (viaparinfo->lvds_setting_info->iga_path == IGA1) | ||
905 | viaparinfo->shared->iga1_devices |= get_lcd_devices( | ||
906 | viaparinfo->chip_info-> | ||
907 | lvds_chip_info.output_interface); | ||
908 | else | ||
909 | viaparinfo->shared->iga2_devices |= get_lcd_devices( | ||
910 | viaparinfo->chip_info-> | ||
911 | lvds_chip_info.output_interface); | ||
912 | } | ||
913 | |||
914 | if (viafb_LCD2_ON) { | ||
915 | if (viaparinfo->lvds_setting_info2->iga_path == IGA1) | ||
916 | viaparinfo->shared->iga1_devices |= get_lcd_devices( | ||
917 | viaparinfo->chip_info-> | ||
918 | lvds_chip_info2.output_interface); | ||
919 | else | ||
920 | viaparinfo->shared->iga2_devices |= get_lcd_devices( | ||
921 | viaparinfo->chip_info-> | ||
922 | lvds_chip_info2.output_interface); | ||
923 | } | ||
822 | } | 924 | } |
823 | 925 | ||
824 | static void set_color_register(u8 index, u8 red, u8 green, u8 blue) | 926 | static void set_color_register(u8 index, u8 red, u8 green, u8 blue) |
diff --git a/drivers/video/via/hw.h b/drivers/video/via/hw.h index 39f3a69bbbd8..c52a1d5f092d 100644 --- a/drivers/video/via/hw.h +++ b/drivers/video/via/hw.h | |||
@@ -30,6 +30,15 @@ | |||
30 | #define viafb_write_reg(i, p, d) via_write_reg(p, i, d) | 30 | #define viafb_write_reg(i, p, d) via_write_reg(p, i, d) |
31 | #define viafb_write_reg_mask(i, p, d, m) via_write_reg_mask(p, i, d, m) | 31 | #define viafb_write_reg_mask(i, p, d, m) via_write_reg_mask(p, i, d, m) |
32 | 32 | ||
33 | /* VIA output devices */ | ||
34 | #define VIA_6C 0x00000001 | ||
35 | #define VIA_93 0x00000002 | ||
36 | #define VIA_96 0x00000004 | ||
37 | #define VIA_CRT 0x00000010 | ||
38 | #define VIA_DVP1 0x00000020 | ||
39 | #define VIA_LVDS1 0x00000040 | ||
40 | #define VIA_LVDS2 0x00000080 | ||
41 | |||
33 | /*************************************************** | 42 | /*************************************************** |
34 | * Definition IGA1 Design Method of CRTC Registers * | 43 | * Definition IGA1 Design Method of CRTC Registers * |
35 | ****************************************************/ | 44 | ****************************************************/ |
diff --git a/drivers/video/via/viafbdev.h b/drivers/video/via/viafbdev.h index 52a35fabba91..945a47a63c4d 100644 --- a/drivers/video/via/viafbdev.h +++ b/drivers/video/via/viafbdev.h | |||
@@ -40,6 +40,9 @@ | |||
40 | #define VIAFB_NUM_I2C 5 | 40 | #define VIAFB_NUM_I2C 5 |
41 | 41 | ||
42 | struct viafb_shared { | 42 | struct viafb_shared { |
43 | u32 iga1_devices; | ||
44 | u32 iga2_devices; | ||
45 | |||
43 | struct proc_dir_entry *proc_entry; /*viafb proc entry */ | 46 | struct proc_dir_entry *proc_entry; /*viafb proc entry */ |
44 | struct viafb_dev *vdev; /* Global dev info */ | 47 | struct viafb_dev *vdev; /* Global dev info */ |
45 | 48 | ||