xref: /OK3568_Linux_fs/kernel/drivers/video/fbdev/via/ioctl.c (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun // SPDX-License-Identifier: GPL-2.0-or-later
2*4882a593Smuzhiyun /*
3*4882a593Smuzhiyun  * Copyright 1998-2008 VIA Technologies, Inc. All Rights Reserved.
4*4882a593Smuzhiyun  * Copyright 2001-2008 S3 Graphics, Inc. All Rights Reserved.
5*4882a593Smuzhiyun 
6*4882a593Smuzhiyun  */
7*4882a593Smuzhiyun 
8*4882a593Smuzhiyun #include "global.h"
9*4882a593Smuzhiyun 
viafb_ioctl_get_viafb_info(u_long arg)10*4882a593Smuzhiyun int viafb_ioctl_get_viafb_info(u_long arg)
11*4882a593Smuzhiyun {
12*4882a593Smuzhiyun 	struct viafb_ioctl_info viainfo;
13*4882a593Smuzhiyun 
14*4882a593Smuzhiyun 	memset(&viainfo, 0, sizeof(struct viafb_ioctl_info));
15*4882a593Smuzhiyun 
16*4882a593Smuzhiyun 	viainfo.viafb_id = VIAID;
17*4882a593Smuzhiyun 	viainfo.vendor_id = PCI_VIA_VENDOR_ID;
18*4882a593Smuzhiyun 
19*4882a593Smuzhiyun 	switch (viaparinfo->chip_info->gfx_chip_name) {
20*4882a593Smuzhiyun 	case UNICHROME_CLE266:
21*4882a593Smuzhiyun 		viainfo.device_id = UNICHROME_CLE266_DID;
22*4882a593Smuzhiyun 		break;
23*4882a593Smuzhiyun 
24*4882a593Smuzhiyun 	case UNICHROME_K400:
25*4882a593Smuzhiyun 		viainfo.device_id = UNICHROME_K400_DID;
26*4882a593Smuzhiyun 		break;
27*4882a593Smuzhiyun 
28*4882a593Smuzhiyun 	case UNICHROME_K800:
29*4882a593Smuzhiyun 		viainfo.device_id = UNICHROME_K800_DID;
30*4882a593Smuzhiyun 		break;
31*4882a593Smuzhiyun 
32*4882a593Smuzhiyun 	case UNICHROME_PM800:
33*4882a593Smuzhiyun 		viainfo.device_id = UNICHROME_PM800_DID;
34*4882a593Smuzhiyun 		break;
35*4882a593Smuzhiyun 
36*4882a593Smuzhiyun 	case UNICHROME_CN700:
37*4882a593Smuzhiyun 		viainfo.device_id = UNICHROME_CN700_DID;
38*4882a593Smuzhiyun 		break;
39*4882a593Smuzhiyun 
40*4882a593Smuzhiyun 	case UNICHROME_CX700:
41*4882a593Smuzhiyun 		viainfo.device_id = UNICHROME_CX700_DID;
42*4882a593Smuzhiyun 		break;
43*4882a593Smuzhiyun 
44*4882a593Smuzhiyun 	case UNICHROME_K8M890:
45*4882a593Smuzhiyun 		viainfo.device_id = UNICHROME_K8M890_DID;
46*4882a593Smuzhiyun 		break;
47*4882a593Smuzhiyun 
48*4882a593Smuzhiyun 	case UNICHROME_P4M890:
49*4882a593Smuzhiyun 		viainfo.device_id = UNICHROME_P4M890_DID;
50*4882a593Smuzhiyun 		break;
51*4882a593Smuzhiyun 
52*4882a593Smuzhiyun 	case UNICHROME_P4M900:
53*4882a593Smuzhiyun 		viainfo.device_id = UNICHROME_P4M900_DID;
54*4882a593Smuzhiyun 		break;
55*4882a593Smuzhiyun 	}
56*4882a593Smuzhiyun 
57*4882a593Smuzhiyun 	viainfo.version = VERSION_MAJOR;
58*4882a593Smuzhiyun 	viainfo.revision = VERSION_MINOR;
59*4882a593Smuzhiyun 
60*4882a593Smuzhiyun 	if (copy_to_user((void __user *)arg, &viainfo, sizeof(viainfo)))
61*4882a593Smuzhiyun 		return -EFAULT;
62*4882a593Smuzhiyun 
63*4882a593Smuzhiyun 	return 0;
64*4882a593Smuzhiyun }
65*4882a593Smuzhiyun 
66*4882a593Smuzhiyun /* Hot-Plug Priority: DVI > CRT*/
viafb_ioctl_hotplug(int hres,int vres,int bpp)67*4882a593Smuzhiyun int viafb_ioctl_hotplug(int hres, int vres, int bpp)
68*4882a593Smuzhiyun {
69*4882a593Smuzhiyun 	int DVIsense, status = 0;
70*4882a593Smuzhiyun 	DEBUG_MSG(KERN_INFO "viafb_ioctl_hotplug!!\n");
71*4882a593Smuzhiyun 
72*4882a593Smuzhiyun 	if (viaparinfo->chip_info->tmds_chip_info.tmds_chip_name !=
73*4882a593Smuzhiyun 		NON_TMDS_TRANSMITTER) {
74*4882a593Smuzhiyun 		DVIsense = viafb_dvi_sense();
75*4882a593Smuzhiyun 
76*4882a593Smuzhiyun 		if (DVIsense) {
77*4882a593Smuzhiyun 			DEBUG_MSG(KERN_INFO "DVI Attached...\n");
78*4882a593Smuzhiyun 			if (viafb_DeviceStatus != DVI_Device) {
79*4882a593Smuzhiyun 				viafb_DVI_ON = 1;
80*4882a593Smuzhiyun 				viafb_CRT_ON = 0;
81*4882a593Smuzhiyun 				viafb_LCD_ON = 0;
82*4882a593Smuzhiyun 				viafb_DeviceStatus = DVI_Device;
83*4882a593Smuzhiyun 				viafb_set_iga_path();
84*4882a593Smuzhiyun 				return viafb_DeviceStatus;
85*4882a593Smuzhiyun 			}
86*4882a593Smuzhiyun 			status = 1;
87*4882a593Smuzhiyun 		} else
88*4882a593Smuzhiyun 			DEBUG_MSG(KERN_INFO "DVI De-attached...\n");
89*4882a593Smuzhiyun 	}
90*4882a593Smuzhiyun 
91*4882a593Smuzhiyun 	if ((viafb_DeviceStatus != CRT_Device) && (status == 0)) {
92*4882a593Smuzhiyun 		viafb_CRT_ON = 1;
93*4882a593Smuzhiyun 		viafb_DVI_ON = 0;
94*4882a593Smuzhiyun 		viafb_LCD_ON = 0;
95*4882a593Smuzhiyun 
96*4882a593Smuzhiyun 		viafb_DeviceStatus = CRT_Device;
97*4882a593Smuzhiyun 		viafb_set_iga_path();
98*4882a593Smuzhiyun 		return viafb_DeviceStatus;
99*4882a593Smuzhiyun 	}
100*4882a593Smuzhiyun 
101*4882a593Smuzhiyun 	return 0;
102*4882a593Smuzhiyun }
103