Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit c6f4bc21 authored by Len Brown's avatar Len Brown
Browse files

Pull bugzilla-7349 into test branch

parents 7e23772f 82cae999
Loading
Loading
Loading
Loading
+43 −15
Original line number Original line Diff line number Diff line
@@ -59,6 +59,11 @@
#define ACPI_VIDEO_HEAD_END		(~0u)
#define ACPI_VIDEO_HEAD_END		(~0u)
#define MAX_NAME_LEN	20
#define MAX_NAME_LEN	20


#define ACPI_VIDEO_DISPLAY_CRT	1
#define ACPI_VIDEO_DISPLAY_TV	2
#define ACPI_VIDEO_DISPLAY_DVI	3
#define ACPI_VIDEO_DISPLAY_LCD	4

#define _COMPONENT		ACPI_VIDEO_COMPONENT
#define _COMPONENT		ACPI_VIDEO_COMPONENT
ACPI_MODULE_NAME("acpi_video")
ACPI_MODULE_NAME("acpi_video")


@@ -135,9 +140,10 @@ struct acpi_video_device_flags {
	u8 crt:1;
	u8 crt:1;
	u8 lcd:1;
	u8 lcd:1;
	u8 tvout:1;
	u8 tvout:1;
	u8 dvi:1;
	u8 bios:1;
	u8 bios:1;
	u8 unknown:1;
	u8 unknown:1;
	u8 reserved:3;
	u8 reserved:2;
};
};


struct acpi_video_device_cap {
struct acpi_video_device_cap {
@@ -732,6 +738,8 @@ static int acpi_video_device_info_seq_show(struct seq_file *seq, void *offset)
		seq_printf(seq, "LCD\n");
		seq_printf(seq, "LCD\n");
	else if (dev->flags.tvout)
	else if (dev->flags.tvout)
		seq_printf(seq, "TVOUT\n");
		seq_printf(seq, "TVOUT\n");
	else if (dev->flags.dvi)
		seq_printf(seq, "DVI\n");
	else
	else
		seq_printf(seq, "UNKNOWN\n");
		seq_printf(seq, "UNKNOWN\n");


@@ -1306,6 +1314,16 @@ static int acpi_video_bus_remove_fs(struct acpi_device *device)
   -------------------------------------------------------------------------- */
   -------------------------------------------------------------------------- */


/* device interface */
/* device interface */
static struct acpi_video_device_attrib*
acpi_video_get_device_attr(struct acpi_video_bus *video, unsigned long device_id)
{
	int count;

	for(count = 0; count < video->attached_count; count++)
		if((video->attached_array[count].value.int_val & 0xffff) == device_id)
			return &(video->attached_array[count].value.attrib);
	return NULL;
}


static int
static int
acpi_video_bus_get_one_device(struct acpi_device *device,
acpi_video_bus_get_one_device(struct acpi_device *device,
@@ -1314,7 +1332,7 @@ acpi_video_bus_get_one_device(struct acpi_device *device,
	unsigned long device_id;
	unsigned long device_id;
	int status;
	int status;
	struct acpi_video_device *data;
	struct acpi_video_device *data;

	struct acpi_video_device_attrib* attribute;


	if (!device || !video)
	if (!device || !video)
		return -EINVAL;
		return -EINVAL;
@@ -1335,20 +1353,30 @@ acpi_video_bus_get_one_device(struct acpi_device *device,
		data->video = video;
		data->video = video;
		data->dev = device;
		data->dev = device;


		switch (device_id & 0xffff) {
		attribute = acpi_video_get_device_attr(video, device_id);
		case 0x0100:

		if((attribute != NULL) && attribute->device_id_scheme) {
			switch (attribute->display_type) {
			case ACPI_VIDEO_DISPLAY_CRT:
				data->flags.crt = 1;
				data->flags.crt = 1;
				break;
				break;
		case 0x0400:
			case ACPI_VIDEO_DISPLAY_TV:
			data->flags.lcd = 1;
			break;
		case 0x0200:
				data->flags.tvout = 1;
				data->flags.tvout = 1;
				break;
				break;
			case ACPI_VIDEO_DISPLAY_DVI:
				data->flags.dvi = 1;
				break;
			case ACPI_VIDEO_DISPLAY_LCD:
				data->flags.lcd = 1;
				break;
			default:
			default:
				data->flags.unknown = 1;
				data->flags.unknown = 1;
				break;
				break;
			}
			}
			if(attribute->bios_can_detect)
				data->flags.bios = 1;
		} else
			data->flags.unknown = 1;


		acpi_video_device_bind(video, data);
		acpi_video_device_bind(video, data);
		acpi_video_device_find_cap(data);
		acpi_video_device_find_cap(data);