浏览代码

Merge branch 'misc' into release

Len Brown 16 年之前
父节点
当前提交
8a3f257c70

+ 1 - 4
MAINTAINERS

@@ -4291,10 +4291,7 @@ W:	http://sourceforge.net/projects/tlan/
 S:	Maintained
 S:	Maintained
 
 
 TOSHIBA ACPI EXTRAS DRIVER
 TOSHIBA ACPI EXTRAS DRIVER
-P:	John Belmonte
-M:	toshiba_acpi@memebeam.org
-W:	http://memebeam.org/toys/ToshibaAcpiDriver
-S:	Maintained
+S:	Orphan
 
 
 TOSHIBA SMM DRIVER
 TOSHIBA SMM DRIVER
 P:	Jonathan Buzzard
 P:	Jonathan Buzzard

+ 1 - 1
arch/x86/kernel/acpi/boot.c

@@ -1548,7 +1548,7 @@ static int __init dmi_ignore_irq0_timer_override(const struct dmi_system_id *d)
 
 
 /*
 /*
  * If your system is blacklisted here, but you find that acpi=force
  * If your system is blacklisted here, but you find that acpi=force
- * works for you, please contact acpi-devel@sourceforge.net
+ * works for you, please contact linux-acpi@vger.kernel.org
  */
  */
 static struct dmi_system_id __initdata acpi_dmi_table[] = {
 static struct dmi_system_id __initdata acpi_dmi_table[] = {
 	/*
 	/*

+ 12 - 0
arch/x86/kernel/cpu/cpufreq/acpi-cpufreq.c

@@ -680,6 +680,18 @@ static int acpi_cpufreq_cpu_init(struct cpufreq_policy *policy)
 			    perf->states[i].transition_latency * 1000;
 			    perf->states[i].transition_latency * 1000;
 	}
 	}
 
 
+	/* Check for high latency (>20uS) from buggy BIOSes, like on T42 */
+	if (perf->control_register.space_id == ACPI_ADR_SPACE_FIXED_HARDWARE &&
+	    policy->cpuinfo.transition_latency > 20 * 1000) {
+		static int print_once;
+		policy->cpuinfo.transition_latency = 20 * 1000;
+		if (!print_once) {
+			print_once = 1;
+			printk(KERN_INFO "Capping off P-state tranision latency"
+				" at 20 uS\n");
+		}
+	}
+
 	data->max_freq = perf->states[0].core_frequency * 1000;
 	data->max_freq = perf->states[0].core_frequency * 1000;
 	/* table init */
 	/* table init */
 	for (i=0; i<perf->state_count; i++) {
 	for (i=0; i<perf->state_count; i++) {

+ 2 - 1
drivers/acpi/dock.c

@@ -1146,9 +1146,10 @@ static int __init dock_init(void)
 static void __exit dock_exit(void)
 static void __exit dock_exit(void)
 {
 {
 	struct dock_station *dock_station;
 	struct dock_station *dock_station;
+	struct dock_station *tmp;
 
 
 	unregister_acpi_bus_notifier(&dock_acpi_notifier);
 	unregister_acpi_bus_notifier(&dock_acpi_notifier);
-	list_for_each_entry(dock_station, &dock_stations, sibiling)
+	list_for_each_entry_safe(dock_station, tmp, &dock_stations, sibiling)
 		dock_remove(dock_station);
 		dock_remove(dock_station);
 }
 }
 
 

+ 8 - 8
drivers/acpi/pci_irq.c

@@ -86,7 +86,7 @@ static struct acpi_prt_entry *acpi_pci_irq_find_prt_entry(struct pci_dev *dev,
 }
 }
 
 
 /* http://bugzilla.kernel.org/show_bug.cgi?id=4773 */
 /* http://bugzilla.kernel.org/show_bug.cgi?id=4773 */
-static struct dmi_system_id medion_md9580[] = {
+static const struct dmi_system_id medion_md9580[] = {
 	{
 	{
 		.ident = "Medion MD9580-F laptop",
 		.ident = "Medion MD9580-F laptop",
 		.matches = {
 		.matches = {
@@ -98,7 +98,7 @@ static struct dmi_system_id medion_md9580[] = {
 };
 };
 
 
 /* http://bugzilla.kernel.org/show_bug.cgi?id=5044 */
 /* http://bugzilla.kernel.org/show_bug.cgi?id=5044 */
-static struct dmi_system_id dell_optiplex[] = {
+static const struct dmi_system_id dell_optiplex[] = {
 	{
 	{
 		.ident = "Dell Optiplex GX1",
 		.ident = "Dell Optiplex GX1",
 		.matches = {
 		.matches = {
@@ -110,7 +110,7 @@ static struct dmi_system_id dell_optiplex[] = {
 };
 };
 
 
 /* http://bugzilla.kernel.org/show_bug.cgi?id=10138 */
 /* http://bugzilla.kernel.org/show_bug.cgi?id=10138 */
-static struct dmi_system_id hp_t5710[] = {
+static const struct dmi_system_id hp_t5710[] = {
 	{
 	{
 		.ident = "HP t5710",
 		.ident = "HP t5710",
 		.matches = {
 		.matches = {
@@ -123,13 +123,13 @@ static struct dmi_system_id hp_t5710[] = {
 };
 };
 
 
 struct prt_quirk {
 struct prt_quirk {
-	struct dmi_system_id	*system;
+	const struct dmi_system_id *system;
 	unsigned int		segment;
 	unsigned int		segment;
 	unsigned int		bus;
 	unsigned int		bus;
 	unsigned int		device;
 	unsigned int		device;
 	unsigned char		pin;
 	unsigned char		pin;
-	char			*source;	/* according to BIOS */
-	char			*actual_source;
+	const char		*source;	/* according to BIOS */
+	const char		*actual_source;
 };
 };
 
 
 #define PCI_INTX_PIN(c)		(c - 'A' + 1)
 #define PCI_INTX_PIN(c)		(c - 'A' + 1)
@@ -139,7 +139,7 @@ struct prt_quirk {
  * interrupt at the listed segment/bus/device/pin is connected to the first
  * interrupt at the listed segment/bus/device/pin is connected to the first
  * link device, but it is actually connected to the second.
  * link device, but it is actually connected to the second.
  */
  */
-static struct prt_quirk prt_quirks[] = {
+static const struct prt_quirk prt_quirks[] = {
 	{ medion_md9580, 0, 0, 9, PCI_INTX_PIN('A'),
 	{ medion_md9580, 0, 0, 9, PCI_INTX_PIN('A'),
 		"\\_SB_.PCI0.ISA_.LNKA",
 		"\\_SB_.PCI0.ISA_.LNKA",
 		"\\_SB_.PCI0.ISA_.LNKB"},
 		"\\_SB_.PCI0.ISA_.LNKB"},
@@ -155,7 +155,7 @@ static void do_prt_fixups(struct acpi_prt_entry *entry,
 			  struct acpi_pci_routing_table *prt)
 			  struct acpi_pci_routing_table *prt)
 {
 {
 	int i;
 	int i;
-	struct prt_quirk *quirk;
+	const struct prt_quirk *quirk;
 
 
 	for (i = 0; i < ARRAY_SIZE(prt_quirks); i++) {
 	for (i = 0; i < ARRAY_SIZE(prt_quirks); i++) {
 		quirk = &prt_quirks[i];
 		quirk = &prt_quirks[i];

+ 2 - 4
drivers/acpi/processor_throttling.c

@@ -783,11 +783,9 @@ static int acpi_get_throttling_state(struct acpi_processor *pr,
 		    (struct acpi_processor_tx_tss *)&(pr->throttling.
 		    (struct acpi_processor_tx_tss *)&(pr->throttling.
 						      states_tss[i]);
 						      states_tss[i]);
 		if (tx->control == value)
 		if (tx->control == value)
-			break;
+			return i;
 	}
 	}
-	if (i > pr->throttling.state_count)
-		i = -1;
-	return i;
+	return -1;
 }
 }
 
 
 static int acpi_get_throttling_value(struct acpi_processor *pr,
 static int acpi_get_throttling_value(struct acpi_processor *pr,

+ 9 - 0
drivers/acpi/sleep.c

@@ -396,6 +396,15 @@ static struct dmi_system_id __initdata acpisleep_dmi_table[] = {
 		DMI_MATCH(DMI_PRODUCT_NAME, "Satellite L300"),
 		DMI_MATCH(DMI_PRODUCT_NAME, "Satellite L300"),
 		},
 		},
 	},
 	},
+	{
+	.callback = init_old_suspend_ordering,
+	.ident = "Panasonic CF51-2L",
+	.matches = {
+		DMI_MATCH(DMI_BOARD_VENDOR,
+				"Matsushita Electric Industrial Co.,Ltd."),
+		DMI_MATCH(DMI_BOARD_NAME, "CF51-2L"),
+		},
+	},
 	{},
 	{},
 };
 };
 #endif /* CONFIG_SUSPEND */
 #endif /* CONFIG_SUSPEND */

+ 5 - 4
drivers/platform/x86/panasonic-laptop.c

@@ -184,6 +184,7 @@ static const struct acpi_device_id pcc_device_ids[] = {
 	{ "MAT0019", 0},
 	{ "MAT0019", 0},
 	{ "", 0},
 	{ "", 0},
 };
 };
+MODULE_DEVICE_TABLE(acpi, pcc_device_ids);
 
 
 static struct acpi_driver acpi_pcc_driver = {
 static struct acpi_driver acpi_pcc_driver = {
 	.name =		ACPI_PCC_DRIVER_NAME,
 	.name =		ACPI_PCC_DRIVER_NAME,
@@ -366,7 +367,7 @@ static ssize_t show_numbatt(struct device *dev, struct device_attribute *attr,
 	if (!acpi_pcc_retrieve_biosdata(pcc, pcc->sinf))
 	if (!acpi_pcc_retrieve_biosdata(pcc, pcc->sinf))
 		return -EIO;
 		return -EIO;
 
 
-	return sprintf(buf, "%u\n", pcc->sinf[SINF_NUM_BATTERIES]);
+	return snprintf(buf, PAGE_SIZE, "%u\n", pcc->sinf[SINF_NUM_BATTERIES]);
 }
 }
 
 
 static ssize_t show_lcdtype(struct device *dev, struct device_attribute *attr,
 static ssize_t show_lcdtype(struct device *dev, struct device_attribute *attr,
@@ -378,7 +379,7 @@ static ssize_t show_lcdtype(struct device *dev, struct device_attribute *attr,
 	if (!acpi_pcc_retrieve_biosdata(pcc, pcc->sinf))
 	if (!acpi_pcc_retrieve_biosdata(pcc, pcc->sinf))
 		return -EIO;
 		return -EIO;
 
 
-	return sprintf(buf, "%u\n", pcc->sinf[SINF_LCD_TYPE]);
+	return snprintf(buf, PAGE_SIZE, "%u\n", pcc->sinf[SINF_LCD_TYPE]);
 }
 }
 
 
 static ssize_t show_mute(struct device *dev, struct device_attribute *attr,
 static ssize_t show_mute(struct device *dev, struct device_attribute *attr,
@@ -390,7 +391,7 @@ static ssize_t show_mute(struct device *dev, struct device_attribute *attr,
 	if (!acpi_pcc_retrieve_biosdata(pcc, pcc->sinf))
 	if (!acpi_pcc_retrieve_biosdata(pcc, pcc->sinf))
 		return -EIO;
 		return -EIO;
 
 
-	return sprintf(buf, "%u\n", pcc->sinf[SINF_MUTE]);
+	return snprintf(buf, PAGE_SIZE, "%u\n", pcc->sinf[SINF_MUTE]);
 }
 }
 
 
 static ssize_t show_sticky(struct device *dev, struct device_attribute *attr,
 static ssize_t show_sticky(struct device *dev, struct device_attribute *attr,
@@ -402,7 +403,7 @@ static ssize_t show_sticky(struct device *dev, struct device_attribute *attr,
 	if (!acpi_pcc_retrieve_biosdata(pcc, pcc->sinf))
 	if (!acpi_pcc_retrieve_biosdata(pcc, pcc->sinf))
 		return -EIO;
 		return -EIO;
 
 
-	return sprintf(buf, "%u\n", pcc->sinf[SINF_STICKY_KEY]);
+	return snprintf(buf, PAGE_SIZE, "%u\n", pcc->sinf[SINF_STICKY_KEY]);
 }
 }
 
 
 static ssize_t set_sticky(struct device *dev, struct device_attribute *attr,
 static ssize_t set_sticky(struct device *dev, struct device_attribute *attr,

+ 3 - 4
drivers/platform/x86/tc1100-wmi.c

@@ -94,9 +94,8 @@ static int get_state(u32 *out, u8 instance)
 		return -ENODEV;
 		return -ENODEV;
 
 
 	obj = (union acpi_object *) result.pointer;
 	obj = (union acpi_object *) result.pointer;
-	if (obj && obj->type == ACPI_TYPE_BUFFER &&
-		obj->buffer.length == sizeof(u32)) {
-		tmp = *((u32 *) obj->buffer.pointer);
+	if (obj && obj->type == ACPI_TYPE_INTEGER) {
+		tmp = obj->integer.value;
 	} else {
 	} else {
 		tmp = 0;
 		tmp = 0;
 	}
 	}
@@ -109,7 +108,7 @@ static int get_state(u32 *out, u8 instance)
 		*out = (tmp == 3) ? 1 : 0;
 		*out = (tmp == 3) ? 1 : 0;
 		return 0;
 		return 0;
 	case TC1100_INSTANCE_JOGDIAL:
 	case TC1100_INSTANCE_JOGDIAL:
-		*out = (tmp == 1) ? 1 : 0;
+		*out = (tmp == 1) ? 0 : 1;
 		return 0;
 		return 0;
 	default:
 	default:
 		return -ENODEV;
 		return -ENODEV;