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

Commit 97d2ef56 authored by Andi Kleen's avatar Andi Kleen
Browse files

Merge branch 'merge' into release-2.6.27

parents e1469c34 ea51011a
Loading
Loading
Loading
Loading
+20 −11
Original line number Diff line number Diff line
@@ -113,19 +113,22 @@ acpi_pci_link_check_possible(struct acpi_resource *resource, void *context)

	switch (resource->type) {
	case ACPI_RESOURCE_TYPE_START_DEPENDENT:
	case ACPI_RESOURCE_TYPE_END_TAG:
		return AE_OK;
	case ACPI_RESOURCE_TYPE_IRQ:
		{
			struct acpi_resource_irq *p = &resource->data.irq;
			if (!p || !p->interrupt_count) {
				printk(KERN_WARNING PREFIX "Blank IRQ resource\n");
				ACPI_DEBUG_PRINT((ACPI_DB_INFO,
						  "Blank _PRS IRQ resource\n"));
				return AE_OK;
			}
			for (i = 0;
			     (i < p->interrupt_count
			      && i < ACPI_PCI_LINK_MAX_POSSIBLE); i++) {
				if (!p->interrupts[i]) {
					printk(KERN_WARNING PREFIX "Invalid IRQ %d\n",
					printk(KERN_WARNING PREFIX
					       "Invalid _PRS IRQ %d\n",
					       p->interrupts[i]);
					continue;
				}
@@ -143,14 +146,15 @@ acpi_pci_link_check_possible(struct acpi_resource *resource, void *context)
			    &resource->data.extended_irq;
			if (!p || !p->interrupt_count) {
				printk(KERN_WARNING PREFIX
					      "Blank EXT IRQ resource\n");
					      "Blank _PRS EXT IRQ resource\n");
				return AE_OK;
			}
			for (i = 0;
			     (i < p->interrupt_count
			      && i < ACPI_PCI_LINK_MAX_POSSIBLE); i++) {
				if (!p->interrupts[i]) {
					printk(KERN_WARNING PREFIX "Invalid IRQ %d\n",
					printk(KERN_WARNING PREFIX
					       "Invalid _PRS IRQ %d\n",
					       p->interrupts[i]);
					continue;
				}
@@ -163,7 +167,8 @@ acpi_pci_link_check_possible(struct acpi_resource *resource, void *context)
			break;
		}
	default:
		printk(KERN_ERR PREFIX "Resource is not an IRQ entry\n");
		printk(KERN_ERR PREFIX "_PRS resource type 0x%x isn't an IRQ\n",
		       resource->type);
		return AE_OK;
	}

@@ -199,6 +204,9 @@ acpi_pci_link_check_current(struct acpi_resource *resource, void *context)


	switch (resource->type) {
	case ACPI_RESOURCE_TYPE_START_DEPENDENT:
	case ACPI_RESOURCE_TYPE_END_TAG:
		return AE_OK;
	case ACPI_RESOURCE_TYPE_IRQ:
		{
			struct acpi_resource_irq *p = &resource->data.irq;
@@ -208,7 +216,7 @@ acpi_pci_link_check_current(struct acpi_resource *resource, void *context)
				 * particularly those those w/ _STA disabled
				 */
				ACPI_DEBUG_PRINT((ACPI_DB_INFO,
						  "Blank IRQ resource\n"));
						  "Blank _CRS IRQ resource\n"));
				return AE_OK;
			}
			*irq = p->interrupts[0];
@@ -224,7 +232,7 @@ acpi_pci_link_check_current(struct acpi_resource *resource, void *context)
				 * return at least 1 IRQ
				 */
				printk(KERN_WARNING PREFIX
					      "Blank EXT IRQ resource\n");
					      "Blank _CRS EXT IRQ resource\n");
				return AE_OK;
			}
			*irq = p->interrupts[0];
@@ -232,10 +240,11 @@ acpi_pci_link_check_current(struct acpi_resource *resource, void *context)
		}
		break;
	default:
		printk(KERN_ERR PREFIX "Resource %d isn't an IRQ\n", resource->type);
	case ACPI_RESOURCE_TYPE_END_TAG:
		printk(KERN_ERR PREFIX "_CRS resource type 0x%x isn't an IRQ\n",
		       resource->type);
		return AE_OK;
	}

	return AE_CTRL_TERMINATE;
}

+43 −0
Original line number Diff line number Diff line
@@ -769,6 +769,47 @@ static void acpi_thermal_run(unsigned long data)
		acpi_os_execute(OSL_GPE_HANDLER, acpi_thermal_check, (void *)data);
}

static void acpi_thermal_active_off(void *data)
{
	int result = 0;
	struct acpi_thermal *tz = data;
	int i = 0;
	int j = 0;
	struct acpi_thermal_active *active = NULL;

	if (!tz) {
		printk(KERN_ERR PREFIX "Invalid (NULL) context\n");
		return;
	}

	result = acpi_thermal_get_temperature(tz);
	if (result)
		return;

	for (i = 0; i < ACPI_THERMAL_MAX_ACTIVE; i++) {
		active = &(tz->trips.active[i]);
		if (!active || !active->flags.valid)
			break;
		if (tz->temperature >= active->temperature) {
			/*
			 * If the thermal temperature is greater than the
			 * active threshod, unnecessary to turn off the
			 * the active cooling device.
			 */
			continue;
		}
		/*
		 * Below Threshold?
		 * ----------------
		 * Turn OFF all cooling devices associated with this
		 * threshold.
		 */
		for (j = 0; j < active->devices.count; j++)
			result = acpi_bus_set_power(active->devices.handles[j],
						    ACPI_STATE_D3);
	}
}

static void acpi_thermal_check(void *data)
{
	int result = 0;
@@ -1624,6 +1665,8 @@ static int acpi_thermal_add(struct acpi_device *device)

	init_timer(&tz->timer);

	acpi_thermal_active_off(tz);

	acpi_thermal_check(tz);

	status = acpi_install_notify_handler(device->handle,
+12 −2
Original line number Diff line number Diff line
@@ -741,7 +741,7 @@ static void acpi_video_device_find_cap(struct acpi_video_device *device)

	max_level = acpi_video_init_brightness(device);

	if (device->cap._BCL && device->cap._BCM && device->cap._BQC && max_level > 0){
	if (device->cap._BCL && device->cap._BCM && max_level > 0) {
		int result;
		static int count = 0;
		char *name;
@@ -753,7 +753,17 @@ static void acpi_video_device_find_cap(struct acpi_video_device *device)
		device->backlight = backlight_device_register(name,
			NULL, device, &acpi_backlight_ops);
		device->backlight->props.max_brightness = device->brightness->count-3;
		device->backlight->props.brightness = acpi_video_get_brightness(device->backlight);
		/*
		 * If there exists the _BQC object, the _BQC object will be
		 * called to get the current backlight brightness. Otherwise
		 * the brightness will be set to the maximum.
		 */
		if (device->cap._BQC)
			device->backlight->props.brightness =
				acpi_video_get_brightness(device->backlight);
		else
			device->backlight->props.brightness =
				device->backlight->props.max_brightness;
		backlight_update_status(device->backlight);
		kfree(name);