diff options
Diffstat (limited to 'drivers/video')
-rw-r--r-- | drivers/video/via/ioctl.h | 3 | ||||
-rw-r--r-- | drivers/video/via/viafbdev.c | 251 |
2 files changed, 0 insertions, 254 deletions
diff --git a/drivers/video/via/ioctl.h b/drivers/video/via/ioctl.h index c430fa23008a..6010d10b59e8 100644 --- a/drivers/video/via/ioctl.h +++ b/drivers/video/via/ioctl.h | |||
@@ -35,11 +35,9 @@ | |||
35 | #define VIAFB_GET_SAMM_INFO 0x56494107 /* 'VIA\07' */ | 35 | #define VIAFB_GET_SAMM_INFO 0x56494107 /* 'VIA\07' */ |
36 | #define VIAFB_TURN_ON_OUTPUT_DEVICE 0x56494108 /* 'VIA\08' */ | 36 | #define VIAFB_TURN_ON_OUTPUT_DEVICE 0x56494108 /* 'VIA\08' */ |
37 | #define VIAFB_TURN_OFF_OUTPUT_DEVICE 0x56494109 /* 'VIA\09' */ | 37 | #define VIAFB_TURN_OFF_OUTPUT_DEVICE 0x56494109 /* 'VIA\09' */ |
38 | #define VIAFB_SET_DEVICE 0x5649410A | ||
39 | #define VIAFB_GET_DEVICE 0x5649410B | 38 | #define VIAFB_GET_DEVICE 0x5649410B |
40 | #define VIAFB_GET_DRIVER_VERSION 0x56494112 /* 'VIA\12' */ | 39 | #define VIAFB_GET_DRIVER_VERSION 0x56494112 /* 'VIA\12' */ |
41 | #define VIAFB_GET_CHIP_INFO 0x56494113 /* 'VIA\13' */ | 40 | #define VIAFB_GET_CHIP_INFO 0x56494113 /* 'VIA\13' */ |
42 | #define VIAFB_SET_DEVICE_INFO 0x56494114 | ||
43 | #define VIAFB_GET_DEVICE_INFO 0x56494115 | 41 | #define VIAFB_GET_DEVICE_INFO 0x56494115 |
44 | 42 | ||
45 | #define VIAFB_GET_DEVICE_SUPPORT 0x56494118 | 43 | #define VIAFB_GET_DEVICE_SUPPORT 0x56494118 |
@@ -50,7 +48,6 @@ | |||
50 | #define VIAFB_GET_GAMMA_LUT 0x56494124 | 48 | #define VIAFB_GET_GAMMA_LUT 0x56494124 |
51 | #define VIAFB_SET_GAMMA_LUT 0x56494125 | 49 | #define VIAFB_SET_GAMMA_LUT 0x56494125 |
52 | #define VIAFB_GET_GAMMA_SUPPORT_STATE 0x56494126 | 50 | #define VIAFB_GET_GAMMA_SUPPORT_STATE 0x56494126 |
53 | #define VIAFB_SET_SECOND_MODE 0x56494129 | ||
54 | #define VIAFB_SYNC_SURFACE 0x56494130 | 51 | #define VIAFB_SYNC_SURFACE 0x56494130 |
55 | #define VIAFB_GET_DRIVER_CAPS 0x56494131 | 52 | #define VIAFB_GET_DRIVER_CAPS 0x56494131 |
56 | #define VIAFB_GET_IGA_SCALING_INFO 0x56494132 | 53 | #define VIAFB_GET_IGA_SCALING_INFO 0x56494132 |
diff --git a/drivers/video/via/viafbdev.c b/drivers/video/via/viafbdev.c index ab3955264559..1128d516c8a3 100644 --- a/drivers/video/via/viafbdev.c +++ b/drivers/video/via/viafbdev.c | |||
@@ -49,11 +49,6 @@ char *viafb_active_dev; | |||
49 | char *viafb_lcd_port = ""; | 49 | char *viafb_lcd_port = ""; |
50 | char *viafb_dvi_port = ""; | 50 | char *viafb_dvi_port = ""; |
51 | 51 | ||
52 | static void viafb_set_device(struct device_t active_dev); | ||
53 | static int apply_device_setting(struct viafb_ioctl_setting setting_info, | ||
54 | struct fb_info *info); | ||
55 | static void apply_second_mode_setting(struct fb_var_screeninfo | ||
56 | *sec_var); | ||
57 | static void retrieve_device_setting(struct viafb_ioctl_setting | 52 | static void retrieve_device_setting(struct viafb_ioctl_setting |
58 | *setting_info); | 53 | *setting_info); |
59 | static int viafb_pan_display(struct fb_var_screeninfo *var, | 54 | static int viafb_pan_display(struct fb_var_screeninfo *var, |
@@ -478,13 +473,6 @@ static int viafb_ioctl(struct fb_info *info, u_int cmd, u_long arg) | |||
478 | if (gpu32 & LCD_Device) | 473 | if (gpu32 & LCD_Device) |
479 | viafb_lcd_disable(); | 474 | viafb_lcd_disable(); |
480 | break; | 475 | break; |
481 | case VIAFB_SET_DEVICE: | ||
482 | if (copy_from_user(&u.active_dev, (void *)argp, | ||
483 | sizeof(u.active_dev))) | ||
484 | return -EFAULT; | ||
485 | viafb_set_device(u.active_dev); | ||
486 | viafb_set_par(info); | ||
487 | break; | ||
488 | case VIAFB_GET_DEVICE: | 476 | case VIAFB_GET_DEVICE: |
489 | u.active_dev.crt = viafb_CRT_ON; | 477 | u.active_dev.crt = viafb_CRT_ON; |
490 | u.active_dev.dvi = viafb_DVI_ON; | 478 | u.active_dev.dvi = viafb_DVI_ON; |
@@ -527,21 +515,6 @@ static int viafb_ioctl(struct fb_info *info, u_int cmd, u_long arg) | |||
527 | 515 | ||
528 | break; | 516 | break; |
529 | 517 | ||
530 | case VIAFB_SET_DEVICE_INFO: | ||
531 | if (copy_from_user(&u.viafb_setting, | ||
532 | argp, sizeof(u.viafb_setting))) | ||
533 | return -EFAULT; | ||
534 | if (apply_device_setting(u.viafb_setting, info) < 0) | ||
535 | return -EINVAL; | ||
536 | |||
537 | break; | ||
538 | |||
539 | case VIAFB_SET_SECOND_MODE: | ||
540 | if (copy_from_user(&u.sec_var, argp, sizeof(u.sec_var))) | ||
541 | return -EFAULT; | ||
542 | apply_second_mode_setting(&u.sec_var); | ||
543 | break; | ||
544 | |||
545 | case VIAFB_GET_DEVICE_INFO: | 518 | case VIAFB_GET_DEVICE_INFO: |
546 | 519 | ||
547 | retrieve_device_setting(&u.viafb_setting); | 520 | retrieve_device_setting(&u.viafb_setting); |
@@ -913,112 +886,6 @@ static int viafb_sync(struct fb_info *info) | |||
913 | return 0; | 886 | return 0; |
914 | } | 887 | } |
915 | 888 | ||
916 | static void check_available_device_to_enable(int device_id) | ||
917 | { | ||
918 | int device_num = 0; | ||
919 | |||
920 | /* Initialize: */ | ||
921 | viafb_CRT_ON = STATE_OFF; | ||
922 | viafb_DVI_ON = STATE_OFF; | ||
923 | viafb_LCD_ON = STATE_OFF; | ||
924 | viafb_LCD2_ON = STATE_OFF; | ||
925 | viafb_DeviceStatus = None_Device; | ||
926 | |||
927 | if ((device_id & CRT_Device) && (device_num < MAX_ACTIVE_DEV_NUM)) { | ||
928 | viafb_CRT_ON = STATE_ON; | ||
929 | device_num++; | ||
930 | viafb_DeviceStatus |= CRT_Device; | ||
931 | } | ||
932 | |||
933 | if ((device_id & DVI_Device) && (device_num < MAX_ACTIVE_DEV_NUM)) { | ||
934 | viafb_DVI_ON = STATE_ON; | ||
935 | device_num++; | ||
936 | viafb_DeviceStatus |= DVI_Device; | ||
937 | } | ||
938 | |||
939 | if ((device_id & LCD_Device) && (device_num < MAX_ACTIVE_DEV_NUM)) { | ||
940 | viafb_LCD_ON = STATE_ON; | ||
941 | device_num++; | ||
942 | viafb_DeviceStatus |= LCD_Device; | ||
943 | } | ||
944 | |||
945 | if ((device_id & LCD2_Device) && (device_num < MAX_ACTIVE_DEV_NUM)) { | ||
946 | viafb_LCD2_ON = STATE_ON; | ||
947 | device_num++; | ||
948 | viafb_DeviceStatus |= LCD2_Device; | ||
949 | } | ||
950 | |||
951 | if (viafb_DeviceStatus == None_Device) { | ||
952 | /* Use CRT as default active device: */ | ||
953 | viafb_CRT_ON = STATE_ON; | ||
954 | viafb_DeviceStatus = CRT_Device; | ||
955 | } | ||
956 | DEBUG_MSG(KERN_INFO "Device Status:%x", viafb_DeviceStatus); | ||
957 | } | ||
958 | |||
959 | static void viafb_set_device(struct device_t active_dev) | ||
960 | { | ||
961 | /* Check available device to enable: */ | ||
962 | int device_id = None_Device; | ||
963 | if (active_dev.crt) | ||
964 | device_id |= CRT_Device; | ||
965 | if (active_dev.dvi) | ||
966 | device_id |= DVI_Device; | ||
967 | if (active_dev.lcd) | ||
968 | device_id |= LCD_Device; | ||
969 | |||
970 | check_available_device_to_enable(device_id); | ||
971 | |||
972 | /* Check property of LCD: */ | ||
973 | if (viafb_LCD_ON) { | ||
974 | if (active_dev.lcd_dsp_cent) { | ||
975 | viaparinfo->lvds_setting_info->display_method = | ||
976 | viafb_lcd_dsp_method = LCD_CENTERING; | ||
977 | } else { | ||
978 | viaparinfo->lvds_setting_info->display_method = | ||
979 | viafb_lcd_dsp_method = LCD_EXPANDSION; | ||
980 | } | ||
981 | |||
982 | if (active_dev.lcd_mode == LCD_SPWG) { | ||
983 | viaparinfo->lvds_setting_info->lcd_mode = | ||
984 | viafb_lcd_mode = LCD_SPWG; | ||
985 | } else { | ||
986 | viaparinfo->lvds_setting_info->lcd_mode = | ||
987 | viafb_lcd_mode = LCD_OPENLDI; | ||
988 | } | ||
989 | |||
990 | if (active_dev.lcd_panel_id <= LCD_PANEL_ID_MAXIMUM) { | ||
991 | viafb_lcd_panel_id = active_dev.lcd_panel_id; | ||
992 | viafb_init_lcd_size(); | ||
993 | } | ||
994 | } | ||
995 | |||
996 | /* Check property of mode: */ | ||
997 | if (!active_dev.xres1) | ||
998 | viafb_second_xres = 640; | ||
999 | else | ||
1000 | viafb_second_xres = active_dev.xres1; | ||
1001 | if (!active_dev.yres1) | ||
1002 | viafb_second_yres = 480; | ||
1003 | else | ||
1004 | viafb_second_yres = active_dev.yres1; | ||
1005 | if (active_dev.bpp != 0) | ||
1006 | viafb_bpp = active_dev.bpp; | ||
1007 | if (active_dev.bpp1 != 0) | ||
1008 | viafb_bpp1 = active_dev.bpp1; | ||
1009 | if (active_dev.refresh != 0) | ||
1010 | viafb_refresh = active_dev.refresh; | ||
1011 | if (active_dev.refresh1 != 0) | ||
1012 | viafb_refresh1 = active_dev.refresh1; | ||
1013 | if ((active_dev.samm == STATE_OFF) || (active_dev.samm == STATE_ON)) | ||
1014 | viafb_SAMM_ON = active_dev.samm; | ||
1015 | viafb_primary_dev = active_dev.primary_dev; | ||
1016 | |||
1017 | via_set_primary_address(0); | ||
1018 | via_set_secondary_address(viafb_SAMM_ON ? viafb_second_offset : 0); | ||
1019 | viafb_set_iga_path(); | ||
1020 | } | ||
1021 | |||
1022 | static int get_primary_device(void) | 889 | static int get_primary_device(void) |
1023 | { | 890 | { |
1024 | int primary_device = 0; | 891 | int primary_device = 0; |
@@ -1060,124 +927,6 @@ static int get_primary_device(void) | |||
1060 | return primary_device; | 927 | return primary_device; |
1061 | } | 928 | } |
1062 | 929 | ||
1063 | static void apply_second_mode_setting(struct fb_var_screeninfo | ||
1064 | *sec_var) | ||
1065 | { | ||
1066 | u32 htotal, vtotal, long_refresh; | ||
1067 | |||
1068 | htotal = sec_var->xres + sec_var->left_margin + | ||
1069 | sec_var->right_margin + sec_var->hsync_len; | ||
1070 | vtotal = sec_var->yres + sec_var->upper_margin + | ||
1071 | sec_var->lower_margin + sec_var->vsync_len; | ||
1072 | if ((sec_var->xres_virtual * (sec_var->bits_per_pixel >> 3)) & 0x1F) { | ||
1073 | /*Is 32 bytes alignment? */ | ||
1074 | /*32 pixel alignment */ | ||
1075 | sec_var->xres_virtual = (sec_var->xres_virtual + 31) & ~31; | ||
1076 | } | ||
1077 | |||
1078 | htotal = sec_var->xres + sec_var->left_margin + | ||
1079 | sec_var->right_margin + sec_var->hsync_len; | ||
1080 | vtotal = sec_var->yres + sec_var->upper_margin + | ||
1081 | sec_var->lower_margin + sec_var->vsync_len; | ||
1082 | long_refresh = 1000000000UL / sec_var->pixclock * 1000; | ||
1083 | long_refresh /= (htotal * vtotal); | ||
1084 | |||
1085 | viafb_second_xres = sec_var->xres; | ||
1086 | viafb_second_yres = sec_var->yres; | ||
1087 | viafb_second_virtual_xres = sec_var->xres_virtual; | ||
1088 | viafb_second_virtual_yres = sec_var->yres_virtual; | ||
1089 | viafb_bpp1 = sec_var->bits_per_pixel; | ||
1090 | viafb_refresh1 = viafb_get_refresh(sec_var->xres, sec_var->yres, | ||
1091 | long_refresh); | ||
1092 | } | ||
1093 | |||
1094 | static int apply_device_setting(struct viafb_ioctl_setting setting_info, | ||
1095 | struct fb_info *info) | ||
1096 | { | ||
1097 | int need_set_mode = 0; | ||
1098 | DEBUG_MSG(KERN_INFO "apply_device_setting\n"); | ||
1099 | |||
1100 | if (setting_info.device_flag) { | ||
1101 | need_set_mode = 1; | ||
1102 | check_available_device_to_enable(setting_info.device_status); | ||
1103 | } | ||
1104 | |||
1105 | /* Unlock LCD's operation according to LCD flag | ||
1106 | and check if the setting value is valid. */ | ||
1107 | /* If the value is valid, apply the new setting value to the device. */ | ||
1108 | if (viafb_LCD_ON) { | ||
1109 | if (setting_info.lcd_operation_flag & OP_LCD_CENTERING) { | ||
1110 | need_set_mode = 1; | ||
1111 | if (setting_info.lcd_attributes.display_center) { | ||
1112 | /* Centering */ | ||
1113 | viaparinfo->lvds_setting_info->display_method = | ||
1114 | LCD_CENTERING; | ||
1115 | viafb_lcd_dsp_method = LCD_CENTERING; | ||
1116 | viaparinfo->lvds_setting_info2->display_method = | ||
1117 | viafb_lcd_dsp_method = LCD_CENTERING; | ||
1118 | } else { | ||
1119 | /* expandsion */ | ||
1120 | viaparinfo->lvds_setting_info->display_method = | ||
1121 | LCD_EXPANDSION; | ||
1122 | viafb_lcd_dsp_method = LCD_EXPANDSION; | ||
1123 | viaparinfo->lvds_setting_info2->display_method = | ||
1124 | LCD_EXPANDSION; | ||
1125 | viafb_lcd_dsp_method = LCD_EXPANDSION; | ||
1126 | } | ||
1127 | } | ||
1128 | |||
1129 | if (setting_info.lcd_operation_flag & OP_LCD_MODE) { | ||
1130 | need_set_mode = 1; | ||
1131 | if (setting_info.lcd_attributes.lcd_mode == | ||
1132 | LCD_SPWG) { | ||
1133 | viaparinfo->lvds_setting_info->lcd_mode = | ||
1134 | viafb_lcd_mode = LCD_SPWG; | ||
1135 | } else { | ||
1136 | viaparinfo->lvds_setting_info->lcd_mode = | ||
1137 | viafb_lcd_mode = LCD_OPENLDI; | ||
1138 | } | ||
1139 | viaparinfo->lvds_setting_info2->lcd_mode = | ||
1140 | viaparinfo->lvds_setting_info->lcd_mode; | ||
1141 | } | ||
1142 | |||
1143 | if (setting_info.lcd_operation_flag & OP_LCD_PANEL_ID) { | ||
1144 | need_set_mode = 1; | ||
1145 | if (setting_info.lcd_attributes.panel_id <= | ||
1146 | LCD_PANEL_ID_MAXIMUM) { | ||
1147 | viafb_lcd_panel_id = | ||
1148 | setting_info.lcd_attributes.panel_id; | ||
1149 | viafb_init_lcd_size(); | ||
1150 | } | ||
1151 | } | ||
1152 | } | ||
1153 | |||
1154 | if (0 != (setting_info.samm_status & OP_SAMM)) { | ||
1155 | setting_info.samm_status = | ||
1156 | setting_info.samm_status & (~OP_SAMM); | ||
1157 | if (setting_info.samm_status == 0 | ||
1158 | || setting_info.samm_status == 1) { | ||
1159 | viafb_SAMM_ON = setting_info.samm_status; | ||
1160 | |||
1161 | if (viafb_SAMM_ON) | ||
1162 | viafb_primary_dev = setting_info.primary_device; | ||
1163 | |||
1164 | via_set_primary_address(0); | ||
1165 | via_set_secondary_address(viafb_SAMM_ON ? | ||
1166 | viafb_second_offset : 0); | ||
1167 | viafb_set_iga_path(); | ||
1168 | } | ||
1169 | need_set_mode = 1; | ||
1170 | } | ||
1171 | |||
1172 | if (!need_set_mode) { | ||
1173 | ; | ||
1174 | } else { | ||
1175 | viafb_set_iga_path(); | ||
1176 | viafb_set_par(info); | ||
1177 | } | ||
1178 | return true; | ||
1179 | } | ||
1180 | |||
1181 | static void retrieve_device_setting(struct viafb_ioctl_setting | 930 | static void retrieve_device_setting(struct viafb_ioctl_setting |
1182 | *setting_info) | 931 | *setting_info) |
1183 | { | 932 | { |