From 49854e169e6a5fb020290b40a31ebf9443f265f2 Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Sun, 8 Feb 2009 13:17:11 -0800 Subject: [PATCH] more .28 patches --- ...ble-acpi-cleanly-when-bad-rsdp-found.patch | 50 ++++++ ...r_entry-video-vga-already-registered.patch | 36 ++++ ...locking-from-pm1x_sts-register-reads.patch | 49 ++++++ ...rst-two-elements-in-the-_bcl-package.patch | 72 ++++++++ ...x-table-entry-truncation-calculation.patch | 47 ++++++ ...-port-rs-232-mic-3620-from-advantech.patch | 43 +++++ ...ssing-coef-initialization-for-alc887.patch | 26 +++ ...dd-missing-initialization-for-alc272.patch | 29 ++++ ...a-hda-add-quirk-for-fsc-amilo-xi2550.patch | 32 ++++ queue-2.6.28/asus_acpi-add-r1f-support.patch | 58 +++++++ queue-2.6.28/panasonic-laptop-fix-x.patch | 30 ++++ ...-up-aspm-link-state-on-device-remove.patch | 47 ++++++ ...rn-error-on-failure-to-read-pci-roms.patch | 146 ++++++++++++++++ .../seq_file-fix-big-enough-lseek-read.patch | 31 ++++ ...erse-so-it-can-be-used-from-seq_read.patch | 159 ++++++++++++++++++ ...s-ex-41092-dual-16950-serial-adapter.patch | 46 +++++ queue-2.6.28/series | 16 ++ 17 files changed, 917 insertions(+) create mode 100644 queue-2.6.28/acpi-disable-acpi-cleanly-when-bad-rsdp-found.patch create mode 100644 queue-2.6.28/acpi-proc_dir_entry-video-vga-already-registered.patch create mode 100644 queue-2.6.28/acpi-remove-locking-from-pm1x_sts-register-reads.patch create mode 100644 queue-2.6.28/acpi-skip-the-first-two-elements-in-the-_bcl-package.patch create mode 100644 queue-2.6.28/acpica-fix-table-entry-truncation-calculation.patch create mode 100644 queue-2.6.28/add-support-for-8-port-rs-232-mic-3620-from-advantech.patch create mode 100644 queue-2.6.28/alsa-hda-add-missing-coef-initialization-for-alc887.patch create mode 100644 queue-2.6.28/alsa-hda-add-missing-initialization-for-alc272.patch create mode 100644 queue-2.6.28/alsa-hda-add-quirk-for-fsc-amilo-xi2550.patch create mode 100644 queue-2.6.28/asus_acpi-add-r1f-support.patch create mode 100644 queue-2.6.28/panasonic-laptop-fix-x.patch create mode 100644 queue-2.6.28/pci-properly-clean-up-aspm-link-state-on-device-remove.patch create mode 100644 queue-2.6.28/pci-return-error-on-failure-to-read-pci-roms.patch create mode 100644 queue-2.6.28/seq_file-fix-big-enough-lseek-read.patch create mode 100644 queue-2.6.28/seq_file-move-traverse-so-it-can-be-used-from-seq_read.patch create mode 100644 queue-2.6.28/serial-set-correct-baud_base-for-oxford-semiconductor-ltd-exsys-ex-41092-dual-16950-serial-adapter.patch diff --git a/queue-2.6.28/acpi-disable-acpi-cleanly-when-bad-rsdp-found.patch b/queue-2.6.28/acpi-disable-acpi-cleanly-when-bad-rsdp-found.patch new file mode 100644 index 00000000000..8947bc2bec2 --- /dev/null +++ b/queue-2.6.28/acpi-disable-acpi-cleanly-when-bad-rsdp-found.patch @@ -0,0 +1,50 @@ +From 9e3a9d1ed8cc8db93e5c53e9a5b09065bd95de8b Mon Sep 17 00:00:00 2001 +From: Len Brown +Date: Fri, 6 Feb 2009 14:00:56 -0500 +Subject: ACPI: disable ACPI cleanly when bad RSDP found + +From: Len Brown + +commit 9e3a9d1ed8cc8db93e5c53e9a5b09065bd95de8b upstream. + +When ACPI is disabled in the BIOS of this VIA C3 box, +it invalidates the RSDP, which Linux notices: + +ACPI Error (tbxfroot-0218): A valid RSDP was not found [20080926] + +Bug Linux neglected to disable ACPI at that stage, +and later scribbled on smp_found_config: + +ACPI: No APIC-table, disabling MPS + +But this box doesn't run well in legacy PIC mode, +it needed IOAPIC mode to perform correctly: + +http://lkml.org/lkml/2009/2/5/39 + +So exit ACPI mode cleanly when we first detect +that it is hopeless. + +Signed-off-by: Len Brown +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/acpi/tables.c | 7 ++++++- + 1 file changed, 6 insertions(+), 1 deletion(-) + +--- a/drivers/acpi/tables.c ++++ b/drivers/acpi/tables.c +@@ -293,7 +293,12 @@ static void __init check_multiple_madt(v + + int __init acpi_table_init(void) + { +- acpi_initialize_tables(initial_tables, ACPI_MAX_TABLES, 0); ++ acpi_status status; ++ ++ status = acpi_initialize_tables(initial_tables, ACPI_MAX_TABLES, 0); ++ if (ACPI_FAILURE(status)) ++ return 1; ++ + check_multiple_madt(); + return 0; + } diff --git a/queue-2.6.28/acpi-proc_dir_entry-video-vga-already-registered.patch b/queue-2.6.28/acpi-proc_dir_entry-video-vga-already-registered.patch new file mode 100644 index 00000000000..088b303d268 --- /dev/null +++ b/queue-2.6.28/acpi-proc_dir_entry-video-vga-already-registered.patch @@ -0,0 +1,36 @@ +From f3b39f1393d5cebe56f43a584ef47efbebd2702c Mon Sep 17 00:00:00 2001 +From: Zhao Yakui +Date: Mon, 2 Feb 2009 22:55:01 -0500 +Subject: ACPI: proc_dir_entry 'video/VGA' already registered + +From: Zhao Yakui + +commit f3b39f1393d5cebe56f43a584ef47efbebd2702c upstream. + +eliminate the duplicate the name of "VGA" + +http://bugzilla.kernel.org/show_bug.cgi?id=12514 + +Signed-off-by: Zhao Yakui +Signed-off-by: Len Brown +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/acpi/video.c | 6 ++++++ + 1 file changed, 6 insertions(+) + +--- a/drivers/acpi/video.c ++++ b/drivers/acpi/video.c +@@ -1991,6 +1991,12 @@ static int acpi_video_bus_add(struct acp + device->pnp.bus_id[3] = '0' + instance; + instance ++; + } ++ /* a hack to fix the duplicate name "VGA" problem on Pa 3553 */ ++ if (!strcmp(device->pnp.bus_id, "VGA")) { ++ if (instance) ++ device->pnp.bus_id[3] = '0' + instance; ++ instance++; ++ } + + video->device = device; + strcpy(acpi_device_name(device), ACPI_VIDEO_BUS_NAME); diff --git a/queue-2.6.28/acpi-remove-locking-from-pm1x_sts-register-reads.patch b/queue-2.6.28/acpi-remove-locking-from-pm1x_sts-register-reads.patch new file mode 100644 index 00000000000..cae2a243987 --- /dev/null +++ b/queue-2.6.28/acpi-remove-locking-from-pm1x_sts-register-reads.patch @@ -0,0 +1,49 @@ +From a2b7b01c072435b7832ab392167545a1b38cabc3 Mon Sep 17 00:00:00 2001 +From: Len Brown +Date: Wed, 28 Jan 2009 12:47:15 -0500 +Subject: ACPI: remove locking from PM1x_STS register reads + +From: Len Brown + +commit a2b7b01c072435b7832ab392167545a1b38cabc3 upstream. + +PM1a_STS and PM1b_STS are twins that get OR'd together +on reads, and all writes are repeated to both. + +The fields in PM1x_STS are single bits only, +there are no multi-bit fields. + +So it is not necessary to lock PM1x_STS reads against +writes because it is impossible to read an intermediate +value of a single bit. It will either be 0 or 1, +even if a write is in progress during the read. +Reads are asynchronous to writes no matter if a lock +is used or not. + +Signed-off-by: Len Brown +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/acpi/processor_idle.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +--- a/drivers/acpi/processor_idle.c ++++ b/drivers/acpi/processor_idle.c +@@ -446,7 +446,7 @@ static void acpi_processor_idle(void) + + pr->power.bm_activity <<= diff; + +- acpi_get_register(ACPI_BITREG_BUS_MASTER_STATUS, &bm_status); ++ acpi_get_register_unlocked(ACPI_BITREG_BUS_MASTER_STATUS, &bm_status); + if (bm_status) { + pr->power.bm_activity |= 0x1; + acpi_set_register(ACPI_BITREG_BUS_MASTER_STATUS, 1); +@@ -1382,7 +1382,7 @@ static int acpi_idle_bm_check(void) + { + u32 bm_status = 0; + +- acpi_get_register(ACPI_BITREG_BUS_MASTER_STATUS, &bm_status); ++ acpi_get_register_unlocked(ACPI_BITREG_BUS_MASTER_STATUS, &bm_status); + if (bm_status) + acpi_set_register(ACPI_BITREG_BUS_MASTER_STATUS, 1); + /* diff --git a/queue-2.6.28/acpi-skip-the-first-two-elements-in-the-_bcl-package.patch b/queue-2.6.28/acpi-skip-the-first-two-elements-in-the-_bcl-package.patch new file mode 100644 index 00000000000..9cf2472f3a9 --- /dev/null +++ b/queue-2.6.28/acpi-skip-the-first-two-elements-in-the-_bcl-package.patch @@ -0,0 +1,72 @@ +From 0a3db1cec5d476804185114ff5d1845aed3936b3 Mon Sep 17 00:00:00 2001 +From: Zhao Yakui +Date: Mon, 2 Feb 2009 11:33:41 +0800 +Subject: ACPI: Skip the first two elements in the _BCL package + +From: Zhao Yakui + +commit 0a3db1cec5d476804185114ff5d1845aed3936b3 upstream. + +According to the Spec the first two elements in the _BCL package won't be + +regarded as the available brightness level. The first is the brightness when +full power is connected to the box(It means that the AC adapter is plugged). +The second is the brightness level when the box is on battery. + If the first two elements are still used while finding the next brightness +level, it will fall back to the lowest level when keeping on pressing +hotkey. (On some boxes the brightness will be changed twice when hotkey is +pressed once. One is in the ACPI video driver. The other is changed by sys I/F. +In the ACPI video driver the first two elements will be used while changing +the brightness. But the first two elements is skipped while using sys I/F. +In such case there exists the inconsistency). + So he first two elements had better be skipped while showing the available +brightness or finding the next brightness level. + +http://bugzilla.kernel.org/show_bug.cgi?id=12450 + +Signed-off-by: Zhao Yakui +Signed-off-by: Len Brown +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/acpi/video.c | 8 ++++---- + 1 file changed, 4 insertions(+), 4 deletions(-) + +--- a/drivers/acpi/video.c ++++ b/drivers/acpi/video.c +@@ -1005,7 +1005,7 @@ acpi_video_device_brightness_seq_show(st + } + + seq_printf(seq, "levels: "); +- for (i = 0; i < dev->brightness->count; i++) ++ for (i = 2; i < dev->brightness->count; i++) + seq_printf(seq, " %d", dev->brightness->levels[i]); + seq_printf(seq, "\ncurrent: %d\n", dev->brightness->curr); + +@@ -1044,7 +1044,7 @@ acpi_video_device_write_brightness(struc + return -EFAULT; + + /* validate through the list of available levels */ +- for (i = 0; i < dev->brightness->count; i++) ++ for (i = 2; i < dev->brightness->count; i++) + if (level == dev->brightness->levels[i]) { + if (ACPI_SUCCESS + (acpi_video_device_lcd_set_level(dev, level))) +@@ -1697,7 +1697,7 @@ acpi_video_get_next_level(struct acpi_vi + max = max_below = 0; + min = min_above = 255; + /* Find closest level to level_current */ +- for (i = 0; i < device->brightness->count; i++) { ++ for (i = 2; i < device->brightness->count; i++) { + l = device->brightness->levels[i]; + if (abs(l - level_current) < abs(delta)) { + delta = l - level_current; +@@ -1707,7 +1707,7 @@ acpi_video_get_next_level(struct acpi_vi + } + /* Ajust level_current to closest available level */ + level_current += delta; +- for (i = 0; i < device->brightness->count; i++) { ++ for (i = 2; i < device->brightness->count; i++) { + l = device->brightness->levels[i]; + if (l < min) + min = l; diff --git a/queue-2.6.28/acpica-fix-table-entry-truncation-calculation.patch b/queue-2.6.28/acpica-fix-table-entry-truncation-calculation.patch new file mode 100644 index 00000000000..1c3cb4a2565 --- /dev/null +++ b/queue-2.6.28/acpica-fix-table-entry-truncation-calculation.patch @@ -0,0 +1,47 @@ +From 386e4a8358239f90275e1f93d5ad11cdc93c6453 Mon Sep 17 00:00:00 2001 +From: Myron Stowe +Date: Fri, 30 Jan 2009 15:44:53 -0700 +Subject: ACPICA: Fix table entry truncation calculation + +From: Myron Stowe + +commit 386e4a8358239f90275e1f93d5ad11cdc93c6453 upstream. + +During early boot, ACPI RSDT/XSDT table entries are gathered into the +'initial_tables[]' array. This array is currently statically defined (see +./drivers/acpi/tables.c). When there are more table entries than can be +held in the 'initial_tables[]' array, the message "Truncating N table +entries!" is output. As currently implemented, this message will always +erroneously calculate N as 0. + +This patch fixes the calculation that determines how many table entries +will be missing (truncated). + +This modification may be used under either the GPL or the BSD-style +license used for Intel ACPI CA code. + +Signed-off-by: Myron Stowe +Signed-off-by: Andrew Morton +Signed-off-by: Len Brown +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/acpi/tables/tbutils.c | 7 +++---- + 1 file changed, 3 insertions(+), 4 deletions(-) + +--- a/drivers/acpi/tables/tbutils.c ++++ b/drivers/acpi/tables/tbutils.c +@@ -512,10 +512,9 @@ acpi_tb_parse_root_table(acpi_physical_a + if (ACPI_FAILURE(status)) { + ACPI_WARNING((AE_INFO, + "Truncating %u table entries!", +- (unsigned) +- (acpi_gbl_root_table_list.size - +- acpi_gbl_root_table_list. +- count))); ++ (unsigned) (table_count - ++ (acpi_gbl_root_table_list. ++ count - 2)))); + break; + } + } diff --git a/queue-2.6.28/add-support-for-8-port-rs-232-mic-3620-from-advantech.patch b/queue-2.6.28/add-support-for-8-port-rs-232-mic-3620-from-advantech.patch new file mode 100644 index 00000000000..d8b4d79b8fa --- /dev/null +++ b/queue-2.6.28/add-support-for-8-port-rs-232-mic-3620-from-advantech.patch @@ -0,0 +1,43 @@ +From 78d70d48132ce4c678a95b771ffa1af4fb5a03ec Mon Sep 17 00:00:00 2001 +From: Michael Bramer +Date: Tue, 27 Jan 2009 11:51:16 +0000 +Subject: Add support for '8-port RS-232 MIC-3620 from advantech' + +From: Michael Bramer + +commit 78d70d48132ce4c678a95b771ffa1af4fb5a03ec upstream. + +This Patch add the device information for the +MIC-3620 8-port RS-232 cPCI card from Advantech Co. Ltd. + +Signed-off-by: Michael Bramer +Signed-off-by: Alan Cox +Signed-off-by: Linus Torvalds +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/serial/8250_pci.c | 6 ++++++ + 1 file changed, 6 insertions(+) + +--- a/drivers/serial/8250_pci.c ++++ b/drivers/serial/8250_pci.c +@@ -766,6 +766,8 @@ pci_default_setup(struct serial_private + #define PCI_SUBDEVICE_ID_OCTPRO422 0x0208 + #define PCI_SUBDEVICE_ID_POCTAL232 0x0308 + #define PCI_SUBDEVICE_ID_POCTAL422 0x0408 ++#define PCI_VENDOR_ID_ADVANTECH 0x13fe ++#define PCI_DEVICE_ID_ADVANTECH_PCI3620 0x3620 + + /* Unknown vendors/cards - this should not be in linux/pci_ids.h */ + #define PCI_SUBDEVICE_ID_UNKNOWN_0x1584 0x1584 +@@ -2132,6 +2134,10 @@ static int pciserial_resume_one(struct p + #endif + + static struct pci_device_id serial_pci_tbl[] = { ++ /* Advantech use PCI_DEVICE_ID_ADVANTECH_PCI3620 (0x3620) as 'PCI_SUBVENDOR_ID' */ ++ { PCI_VENDOR_ID_ADVANTECH, PCI_DEVICE_ID_ADVANTECH_PCI3620, ++ PCI_DEVICE_ID_ADVANTECH_PCI3620, 0x0001, 0, 0, ++ pbn_b2_8_921600 }, + { PCI_VENDOR_ID_V3, PCI_DEVICE_ID_V3_V960, + PCI_SUBVENDOR_ID_CONNECT_TECH, + PCI_SUBDEVICE_ID_CONNECT_TECH_BH8_232, 0, 0, diff --git a/queue-2.6.28/alsa-hda-add-missing-coef-initialization-for-alc887.patch b/queue-2.6.28/alsa-hda-add-missing-coef-initialization-for-alc887.patch new file mode 100644 index 00000000000..86ef506d34d --- /dev/null +++ b/queue-2.6.28/alsa-hda-add-missing-coef-initialization-for-alc887.patch @@ -0,0 +1,26 @@ +From 4a5a4c56b443a213fa9c2ad27984a8681a3d7087 Mon Sep 17 00:00:00 2001 +From: Takashi Iwai +Date: Fri, 6 Feb 2009 12:46:59 +0100 +Subject: ALSA: hda - Add missing COEF initialization for ALC887 + +From: Takashi Iwai + +commit 4a5a4c56b443a213fa9c2ad27984a8681a3d7087 upstream. + +Signed-off-by: Takashi Iwai +Signed-off-by: Greg Kroah-Hartman + +--- + sound/pci/hda/patch_realtek.c | 1 + + 1 file changed, 1 insertion(+) + +--- a/sound/pci/hda/patch_realtek.c ++++ b/sound/pci/hda/patch_realtek.c +@@ -995,6 +995,7 @@ do_sku: + case 0x10ec0882: + case 0x10ec0883: + case 0x10ec0885: ++ case 0x10ec0887: + case 0x10ec0889: + snd_hda_codec_write(codec, 0x20, 0, + AC_VERB_SET_COEF_INDEX, 7); diff --git a/queue-2.6.28/alsa-hda-add-missing-initialization-for-alc272.patch b/queue-2.6.28/alsa-hda-add-missing-initialization-for-alc272.patch new file mode 100644 index 00000000000..af0f5c864ce --- /dev/null +++ b/queue-2.6.28/alsa-hda-add-missing-initialization-for-alc272.patch @@ -0,0 +1,29 @@ +From c6e8f2daadc6d61a32b7486a1058c8f1f9baa499 Mon Sep 17 00:00:00 2001 +From: Takashi Iwai +Date: Fri, 6 Feb 2009 12:45:52 +0100 +Subject: ALSA: hda - Add missing initialization for ALC272 + +From: Takashi Iwai + +commit c6e8f2daadc6d61a32b7486a1058c8f1f9baa499 upstream. + +ALC272 needs EAPD for speaker outputs as well as other similar ALC +codecs. + +Signed-off-by: Takashi Iwai +Signed-off-by: Greg Kroah-Hartman + +--- + sound/pci/hda/patch_realtek.c | 1 + + 1 file changed, 1 insertion(+) + +--- a/sound/pci/hda/patch_realtek.c ++++ b/sound/pci/hda/patch_realtek.c +@@ -967,6 +967,7 @@ do_sku: + case 0x10ec0267: + case 0x10ec0268: + case 0x10ec0269: ++ case 0x10ec0272: + case 0x10ec0660: + case 0x10ec0662: + case 0x10ec0663: diff --git a/queue-2.6.28/alsa-hda-add-quirk-for-fsc-amilo-xi2550.patch b/queue-2.6.28/alsa-hda-add-quirk-for-fsc-amilo-xi2550.patch new file mode 100644 index 00000000000..826f71c6ab8 --- /dev/null +++ b/queue-2.6.28/alsa-hda-add-quirk-for-fsc-amilo-xi2550.patch @@ -0,0 +1,32 @@ +From f67d8176ba9a3dbc33454cd67057184b2ef5ee31 Mon Sep 17 00:00:00 2001 +From: Takashi Iwai +Date: Wed, 4 Feb 2009 23:30:19 +0100 +Subject: ALSA: hda - Add quirk for FSC Amilo Xi2550 + +From: Takashi Iwai + +commit f67d8176ba9a3dbc33454cd67057184b2ef5ee31 upstream. + +Added model=fujisu-pi2515 for FSC Amilo Xi2550 with ALC883 codec. + +Refernece: Novell bnc#450979 + https://bugzilla.novell.com/show_bug.cgi?id=450979 + +Signed-off-by: Takashi Iwai +Signed-off-by: Greg Kroah-Hartman + +--- + sound/pci/hda/patch_realtek.c | 2 ++ + 1 file changed, 2 insertions(+) + +--- a/sound/pci/hda/patch_realtek.c ++++ b/sound/pci/hda/patch_realtek.c +@@ -8463,6 +8463,8 @@ static struct snd_pci_quirk alc883_cfg_t + SND_PCI_QUIRK(0x1558, 0, "Clevo laptop", ALC883_LAPTOP_EAPD), + SND_PCI_QUIRK(0x15d9, 0x8780, "Supermicro PDSBA", ALC883_3ST_6ch), + SND_PCI_QUIRK(0x161f, 0x2054, "Medion laptop", ALC883_MEDION), ++ SND_PCI_QUIRK(0x1734, 0x1107, "FSC AMILO Xi2550", ++ ALC883_FUJITSU_PI2515), + SND_PCI_QUIRK(0x1734, 0x1108, "Fujitsu AMILO Pi2515", ALC883_FUJITSU_PI2515), + SND_PCI_QUIRK(0x17aa, 0x101e, "Lenovo 101e", ALC883_LENOVO_101E_2ch), + SND_PCI_QUIRK(0x17aa, 0x2085, "Lenovo NB0763", ALC883_LENOVO_NB0763), diff --git a/queue-2.6.28/asus_acpi-add-r1f-support.patch b/queue-2.6.28/asus_acpi-add-r1f-support.patch new file mode 100644 index 00000000000..4f3453d77d4 --- /dev/null +++ b/queue-2.6.28/asus_acpi-add-r1f-support.patch @@ -0,0 +1,58 @@ +From 1021e2119eb33a990a2b9ff1410805dd9bdf7997 Mon Sep 17 00:00:00 2001 +From: Corentin Chary +Date: Tue, 20 Jan 2009 16:17:41 +0100 +Subject: asus_acpi: Add R1F support + +From: Corentin Chary + +commit 1021e2119eb33a990a2b9ff1410805dd9bdf7997 upstream. + +Add R1F support + +Signed-off-by: Corentin Chary +Signed-off-by: Len Brown +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/acpi/asus_acpi.c | 16 +++++++++++++++- + 1 file changed, 15 insertions(+), 1 deletion(-) + +--- a/drivers/acpi/asus_acpi.c ++++ b/drivers/acpi/asus_acpi.c +@@ -143,6 +143,7 @@ struct asus_hotk { + S1300N, S5200N*/ + A4S, /* Z81sp */ + F3Sa, /* (Centrino) */ ++ R1F, + END_MODEL + } model; /* Models currently supported */ + u16 event_count[128]; /* Count for each event TODO make this better */ +@@ -420,7 +421,18 @@ static struct model_data model_conf[END_ + .display_get = "\\ADVG", + .display_set = "SDSP", + }, +- ++ { ++ .name = "R1F", ++ .mt_bt_switch = "BLED", ++ .mt_mled = "MLED", ++ .mt_wled = "WLED", ++ .mt_lcd_switch = "\\Q10", ++ .lcd_status = "\\GP06", ++ .brightness_set = "SPLV", ++ .brightness_get = "GPLV", ++ .display_set = "SDSP", ++ .display_get = "\\INFB" ++ } + }; + + /* procdir we use */ +@@ -1165,6 +1177,8 @@ static int asus_model_match(char *model) + return W3V; + else if (strncmp(model, "W5A", 3) == 0) + return W5A; ++ else if (strncmp(model, "R1F", 3) == 0) ++ return R1F; + else if (strncmp(model, "A4S", 3) == 0) + return A4S; + else if (strncmp(model, "F3Sa", 4) == 0) diff --git a/queue-2.6.28/panasonic-laptop-fix-x.patch b/queue-2.6.28/panasonic-laptop-fix-x.patch new file mode 100644 index 00000000000..8d3f60bdb0b --- /dev/null +++ b/queue-2.6.28/panasonic-laptop-fix-x.patch @@ -0,0 +1,30 @@ +From 2b190e76def5233c542f6025b4a133b1d4bd1a37 Mon Sep 17 00:00:00 2001 +From: Roel Kluin +Date: Sat, 17 Jan 2009 15:51:27 +0100 +Subject: panasonic-laptop: fix X[ ARRAY_SIZE(X) ] + +From: Roel Kluin + +commit 2b190e76def5233c542f6025b4a133b1d4bd1a37 upstream. + +Ensure pcc->keymap[ ARRAY_SIZE(pcc->keymap) ] does not occur. + +Signed-off-by: Roel Kluin +Signed-off-by: Len Brown +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/misc/panasonic-laptop.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +--- a/drivers/misc/panasonic-laptop.c ++++ b/drivers/misc/panasonic-laptop.c +@@ -515,7 +515,7 @@ static void acpi_pcc_generate_keyinput(s + + hkey_num = result & 0xf; + +- if (hkey_num < 0 || hkey_num > ARRAY_SIZE(pcc->keymap)) { ++ if (hkey_num < 0 || hkey_num >= ARRAY_SIZE(pcc->keymap)) { + ACPI_DEBUG_PRINT((ACPI_DB_ERROR, + "hotkey number out of range: %d\n", + hkey_num)); diff --git a/queue-2.6.28/pci-properly-clean-up-aspm-link-state-on-device-remove.patch b/queue-2.6.28/pci-properly-clean-up-aspm-link-state-on-device-remove.patch new file mode 100644 index 00000000000..c4f13ef6b80 --- /dev/null +++ b/queue-2.6.28/pci-properly-clean-up-aspm-link-state-on-device-remove.patch @@ -0,0 +1,47 @@ +From 3419c75e15f82c3ab09bd944fddbde72c9e4b3ea Mon Sep 17 00:00:00 2001 +From: Alex Chiang +Date: Wed, 28 Jan 2009 14:59:18 -0700 +Subject: PCI: properly clean up ASPM link state on device remove + +From: Alex Chiang + +commit 3419c75e15f82c3ab09bd944fddbde72c9e4b3ea upstream. + +We only want to disable ASPM when the last function is removed from +the parent's device list. We determine this by checking to see if +the parent's device list is completely empty. + +Unfortunately, we never hit that code because the parent is considered +an upstream port, and never had an ASPM link_state associated with it. + +The early check for !link_state causes us to return early, we never +discover that our device list is empty, and thus we never remove the +downstream ports' link_state nodes. + +Instead of checking to see if the parent's device list is empty, we can +check to see if we are the last device on the list, and if so, then we +know that we can clean up properly. + +Cc: Shaohua Li +Signed-off-by: Alex Chiang +Signed-off-by: Jesse Barnes +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/pci/pcie/aspm.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +--- a/drivers/pci/pcie/aspm.c ++++ b/drivers/pci/pcie/aspm.c +@@ -713,9 +713,9 @@ void pcie_aspm_exit_link_state(struct pc + + /* + * All PCIe functions are in one slot, remove one function will remove +- * the the whole slot, so just wait ++ * the whole slot, so just wait until we are the last function left. + */ +- if (!list_empty(&parent->subordinate->devices)) ++ if (!list_is_last(&pdev->bus_list, &parent->subordinate->devices)) + goto out; + + /* All functions are removed, so just disable ASPM for the link */ diff --git a/queue-2.6.28/pci-return-error-on-failure-to-read-pci-roms.patch b/queue-2.6.28/pci-return-error-on-failure-to-read-pci-roms.patch new file mode 100644 index 00000000000..5a997731e8c --- /dev/null +++ b/queue-2.6.28/pci-return-error-on-failure-to-read-pci-roms.patch @@ -0,0 +1,146 @@ +From 97c44836cdec1ea713a15d84098a1a908157e68f Mon Sep 17 00:00:00 2001 +From: Timothy S. Nelson +Date: Fri, 30 Jan 2009 06:12:47 +1100 +Subject: PCI: return error on failure to read PCI ROMs + +From: Timothy S. Nelson + +commit 97c44836cdec1ea713a15d84098a1a908157e68f upstream. + +This patch makes the ROM reading code return an error to user space if +the size of the ROM read is equal to 0. + +The patch also emits a warnings if the contents of the ROM are invalid, +and documents the effects of the "enable" file on ROM reading. + +Signed-off-by: Timothy S. Nelson +Acked-by: Alex Villacis-Lasso +Signed-off-by: Jesse Barnes +Signed-off-by: Greg Kroah-Hartman + +--- + Documentation/filesystems/sysfs-pci.txt | 13 ++++++++++++- + arch/ia64/sn/kernel/io_acpi_init.c | 2 +- + arch/ia64/sn/kernel/io_init.c | 2 +- + drivers/pci/pci-sysfs.c | 4 ++-- + drivers/pci/rom.c | 8 +++++--- + include/linux/pci.h | 2 +- + 6 files changed, 22 insertions(+), 9 deletions(-) + +--- a/arch/ia64/sn/kernel/io_acpi_init.c ++++ b/arch/ia64/sn/kernel/io_acpi_init.c +@@ -434,7 +434,7 @@ sn_acpi_slot_fixup(struct pci_dev *dev) + size = pci_resource_len(dev, PCI_ROM_RESOURCE); + addr = ioremap(pcidev_info->pdi_pio_mapped_addr[PCI_ROM_RESOURCE], + size); +- image_size = pci_get_rom_size(addr, size); ++ image_size = pci_get_rom_size(dev, addr, size); + dev->resource[PCI_ROM_RESOURCE].start = (unsigned long) addr; + dev->resource[PCI_ROM_RESOURCE].end = + (unsigned long) addr + image_size - 1; +--- a/arch/ia64/sn/kernel/io_init.c ++++ b/arch/ia64/sn/kernel/io_init.c +@@ -269,7 +269,7 @@ sn_io_slot_fixup(struct pci_dev *dev) + + rom = ioremap(pci_resource_start(dev, PCI_ROM_RESOURCE), + size + 1); +- image_size = pci_get_rom_size(rom, size + 1); ++ image_size = pci_get_rom_size(dev, rom, size + 1); + dev->resource[PCI_ROM_RESOURCE].end = + dev->resource[PCI_ROM_RESOURCE].start + + image_size - 1; +--- a/Documentation/filesystems/sysfs-pci.txt ++++ b/Documentation/filesystems/sysfs-pci.txt +@@ -9,6 +9,7 @@ that support it. For example, a given b + | |-- class + | |-- config + | |-- device ++ | |-- enable + | |-- irq + | |-- local_cpus + | |-- resource +@@ -32,6 +33,7 @@ files, each with their own function. + class PCI class (ascii, ro) + config PCI config space (binary, rw) + device PCI device (ascii, ro) ++ enable Whether the device is enabled (ascii, rw) + irq IRQ number (ascii, ro) + local_cpus nearby CPU mask (cpumask, ro) + resource PCI resource host addresses (ascii, ro) +@@ -57,10 +59,19 @@ used to do actual device programming fro + don't support mmapping of certain resources, so be sure to check the return + value from any attempted mmap. + ++The 'enable' file provides a counter that indicates how many times the device ++has been enabled. If the 'enable' file currently returns '4', and a '1' is ++echoed into it, it will then return '5'. Echoing a '0' into it will decrease ++the count. Even when it returns to 0, though, some of the initialisation ++may not be reversed. ++ + The 'rom' file is special in that it provides read-only access to the device's + ROM file, if available. It's disabled by default, however, so applications + should write the string "1" to the file to enable it before attempting a read +-call, and disable it following the access by writing "0" to the file. ++call, and disable it following the access by writing "0" to the file. Note ++that the device must be enabled for a rom read to return data succesfully. ++In the event a driver is not bound to the device, it can be enabled using the ++'enable' file, documented above. + + Accessing legacy resources through sysfs + ---------------------------------------- +--- a/drivers/pci/pci-sysfs.c ++++ b/drivers/pci/pci-sysfs.c +@@ -777,8 +777,8 @@ pci_read_rom(struct kobject *kobj, struc + return -EINVAL; + + rom = pci_map_rom(pdev, &size); /* size starts out as PCI window size */ +- if (!rom) +- return 0; ++ if (!rom || !size) ++ return -EIO; + + if (off >= size) + count = 0; +--- a/drivers/pci/rom.c ++++ b/drivers/pci/rom.c +@@ -63,7 +63,7 @@ void pci_disable_rom(struct pci_dev *pde + * The PCI window size could be much larger than the + * actual image size. + */ +-size_t pci_get_rom_size(void __iomem *rom, size_t size) ++size_t pci_get_rom_size(struct pci_dev *pdev, void __iomem *rom, size_t size) + { + void __iomem *image; + int last_image; +@@ -72,8 +72,10 @@ size_t pci_get_rom_size(void __iomem *ro + do { + void __iomem *pds; + /* Standard PCI ROMs start out with these bytes 55 AA */ +- if (readb(image) != 0x55) ++ if (readb(image) != 0x55) { ++ dev_err(&pdev->dev, "Invalid ROM contents\n"); + break; ++ } + if (readb(image + 1) != 0xAA) + break; + /* get the PCI data structure and check its signature */ +@@ -159,7 +161,7 @@ void __iomem *pci_map_rom(struct pci_dev + * size is much larger than the actual size of the ROM. + * True size is important if the ROM is going to be copied. + */ +- *size = pci_get_rom_size(rom, *size); ++ *size = pci_get_rom_size(pdev, rom, *size); + return rom; + } + +--- a/include/linux/pci.h ++++ b/include/linux/pci.h +@@ -651,7 +651,7 @@ int pci_enable_rom(struct pci_dev *pdev) + void pci_disable_rom(struct pci_dev *pdev); + void __iomem __must_check *pci_map_rom(struct pci_dev *pdev, size_t *size); + void pci_unmap_rom(struct pci_dev *pdev, void __iomem *rom); +-size_t pci_get_rom_size(void __iomem *rom, size_t size); ++size_t pci_get_rom_size(struct pci_dev *pdev, void __iomem *rom, size_t size); + + /* Power management related routines */ + int pci_save_state(struct pci_dev *dev); diff --git a/queue-2.6.28/seq_file-fix-big-enough-lseek-read.patch b/queue-2.6.28/seq_file-fix-big-enough-lseek-read.patch new file mode 100644 index 00000000000..4958e8b0768 --- /dev/null +++ b/queue-2.6.28/seq_file-fix-big-enough-lseek-read.patch @@ -0,0 +1,31 @@ +From f01d1d546abb2f4028b5299092f529eefb01253a Mon Sep 17 00:00:00 2001 +From: Alexey Dobriyan +Date: Fri, 6 Feb 2009 00:30:05 +0300 +Subject: seq_file: fix big-enough lseek() + read() + +From: Alexey Dobriyan + +commit f01d1d546abb2f4028b5299092f529eefb01253a upstream. + +lseek() further than length of the file will leave stale ->index +(second-to-last during iteration). Next seq_read() will not notice +that ->f_pos is big enough to return 0, but will print last item +as if ->f_pos is pointing to it. + +Introduced in commit cb510b8172602a66467f3551b4be1911f5a7c8c2 +aka "seq_file: more atomicity in traverse()". + +Signed-off-by: Alexey Dobriyan +Signed-off-by: Linus Torvalds +Signed-off-by: Greg Kroah-Hartman + +--- a/fs/seq_file.c ++++ b/fs/seq_file.c +@@ -102,6 +102,7 @@ static int traverse(struct seq_file *m, loff_t offset) + p = m->op->next(m, p, &index); + } + m->op->stop(m, p); ++ m->index = index; + return error; + + Eoverflow: diff --git a/queue-2.6.28/seq_file-move-traverse-so-it-can-be-used-from-seq_read.patch b/queue-2.6.28/seq_file-move-traverse-so-it-can-be-used-from-seq_read.patch new file mode 100644 index 00000000000..6f79a97b259 --- /dev/null +++ b/queue-2.6.28/seq_file-move-traverse-so-it-can-be-used-from-seq_read.patch @@ -0,0 +1,159 @@ +From 33da8892a2f9e7d4b2d9a35fc80833ba2d2b1aa6 Mon Sep 17 00:00:00 2001 +From: Eric Biederman +Date: Wed, 4 Feb 2009 15:12:25 -0800 +Subject: seq_file: move traverse so it can be used from seq_read + +From: Eric Biederman + +commit 33da8892a2f9e7d4b2d9a35fc80833ba2d2b1aa6 upstream. + +In 2.6.25 some /proc files were converted to use the seq_file +infrastructure. But seq_files do not correctly support pread(), which +broke some usersapce applications. + +To handle pread correctly we can't assume that f_pos is where we left it +in seq_read. So move traverse() so that we can eventually use it in +seq_read and do thus some day support pread(). + +Signed-off-by: Eric Biederman +Cc: Paul Turner +Cc: Alexey Dobriyan +Cc: Al Viro +Signed-off-by: Andrew Morton +Signed-off-by: Linus Torvalds +Signed-off-by: Greg Kroah-Hartman + +--- + fs/seq_file.c | 114 +++++++++++++++++++++++++++++----------------------------- + 1 file changed, 57 insertions(+), 57 deletions(-) + +--- a/fs/seq_file.c ++++ b/fs/seq_file.c +@@ -54,6 +54,63 @@ int seq_open(struct file *file, const st + } + EXPORT_SYMBOL(seq_open); + ++static int traverse(struct seq_file *m, loff_t offset) ++{ ++ loff_t pos = 0, index; ++ int error = 0; ++ void *p; ++ ++ m->version = 0; ++ index = 0; ++ m->count = m->from = 0; ++ if (!offset) { ++ m->index = index; ++ return 0; ++ } ++ if (!m->buf) { ++ m->buf = kmalloc(m->size = PAGE_SIZE, GFP_KERNEL); ++ if (!m->buf) ++ return -ENOMEM; ++ } ++ p = m->op->start(m, &index); ++ while (p) { ++ error = PTR_ERR(p); ++ if (IS_ERR(p)) ++ break; ++ error = m->op->show(m, p); ++ if (error < 0) ++ break; ++ if (unlikely(error)) { ++ error = 0; ++ m->count = 0; ++ } ++ if (m->count == m->size) ++ goto Eoverflow; ++ if (pos + m->count > offset) { ++ m->from = offset - pos; ++ m->count -= m->from; ++ m->index = index; ++ break; ++ } ++ pos += m->count; ++ m->count = 0; ++ if (pos == offset) { ++ index++; ++ m->index = index; ++ break; ++ } ++ p = m->op->next(m, p, &index); ++ } ++ m->op->stop(m, p); ++ return error; ++ ++Eoverflow: ++ m->op->stop(m, p); ++ kfree(m->buf); ++ m->buf = kmalloc(m->size <<= 1, GFP_KERNEL); ++ return !m->buf ? -ENOMEM : -EAGAIN; ++} ++ + /** + * seq_read - ->read() method for sequential files. + * @file: the file to read from +@@ -186,63 +243,6 @@ Efault: + } + EXPORT_SYMBOL(seq_read); + +-static int traverse(struct seq_file *m, loff_t offset) +-{ +- loff_t pos = 0, index; +- int error = 0; +- void *p; +- +- m->version = 0; +- index = 0; +- m->count = m->from = 0; +- if (!offset) { +- m->index = index; +- return 0; +- } +- if (!m->buf) { +- m->buf = kmalloc(m->size = PAGE_SIZE, GFP_KERNEL); +- if (!m->buf) +- return -ENOMEM; +- } +- p = m->op->start(m, &index); +- while (p) { +- error = PTR_ERR(p); +- if (IS_ERR(p)) +- break; +- error = m->op->show(m, p); +- if (error < 0) +- break; +- if (unlikely(error)) { +- error = 0; +- m->count = 0; +- } +- if (m->count == m->size) +- goto Eoverflow; +- if (pos + m->count > offset) { +- m->from = offset - pos; +- m->count -= m->from; +- m->index = index; +- break; +- } +- pos += m->count; +- m->count = 0; +- if (pos == offset) { +- index++; +- m->index = index; +- break; +- } +- p = m->op->next(m, p, &index); +- } +- m->op->stop(m, p); +- return error; +- +-Eoverflow: +- m->op->stop(m, p); +- kfree(m->buf); +- m->buf = kmalloc(m->size <<= 1, GFP_KERNEL); +- return !m->buf ? -ENOMEM : -EAGAIN; +-} +- + /** + * seq_lseek - ->llseek() method for sequential files. + * @file: the file in question diff --git a/queue-2.6.28/serial-set-correct-baud_base-for-oxford-semiconductor-ltd-exsys-ex-41092-dual-16950-serial-adapter.patch b/queue-2.6.28/serial-set-correct-baud_base-for-oxford-semiconductor-ltd-exsys-ex-41092-dual-16950-serial-adapter.patch new file mode 100644 index 00000000000..ebb61b45ee2 --- /dev/null +++ b/queue-2.6.28/serial-set-correct-baud_base-for-oxford-semiconductor-ltd-exsys-ex-41092-dual-16950-serial-adapter.patch @@ -0,0 +1,46 @@ +From 39aced68d664291db3324d0fcf0985ab5626aac2 Mon Sep 17 00:00:00 2001 +From: Niels de Vos +Date: Fri, 2 Jan 2009 13:46:58 +0000 +Subject: serial: set correct baud_base for Oxford Semiconductor Ltd EXSYS EX-41092 Dual 16950 Serial adapter + +From: Niels de Vos + +commit 39aced68d664291db3324d0fcf0985ab5626aac2 upstream. + +The PCI-card identified as "Oxford Semiconductor Ltd EXSYS EX-41092 Dual +16950 Serial adapter" is only usable with other devices (i.e. not the same +card) after doing a "setserial /dev/ttyS baud_base 115200". This +baud_base should be default for this card. + +Signed-off-by: Niels de Vos +Signed-off-by: Alan Cox +Signed-off-by: Linus Torvalds +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/serial/8250_pci.c | 3 +++ + include/linux/pci_ids.h | 1 + + 2 files changed, 4 insertions(+) + +--- a/drivers/serial/8250_pci.c ++++ b/drivers/serial/8250_pci.c +@@ -2375,6 +2375,9 @@ static struct pci_device_id serial_pci_t + * For now just used the hex ID 0x950a. + */ + { PCI_VENDOR_ID_OXSEMI, 0x950a, ++ PCI_SUBVENDOR_ID_SIIG, PCI_SUBDEVICE_ID_SIIG_DUAL_SERIAL, 0, 0, ++ pbn_b0_2_115200 }, ++ { PCI_VENDOR_ID_OXSEMI, 0x950a, + PCI_ANY_ID, PCI_ANY_ID, 0, 0, + pbn_b0_2_1130000 }, + { PCI_VENDOR_ID_OXSEMI, PCI_DEVICE_ID_OXSEMI_16PCI954, +--- a/include/linux/pci_ids.h ++++ b/include/linux/pci_ids.h +@@ -1770,6 +1770,7 @@ + #define PCI_DEVICE_ID_SIIG_8S_20x_650 0x2081 + #define PCI_DEVICE_ID_SIIG_8S_20x_850 0x2082 + #define PCI_SUBDEVICE_ID_SIIG_QUARTET_SERIAL 0x2050 ++#define PCI_SUBDEVICE_ID_SIIG_DUAL_SERIAL 0x2530 + + #define PCI_VENDOR_ID_RADISYS 0x1331 + diff --git a/queue-2.6.28/series b/queue-2.6.28/series index c97da793564..e6c307c1815 100644 --- a/queue-2.6.28/series +++ b/queue-2.6.28/series @@ -23,3 +23,19 @@ e1000-fix-bug-with-shared-interrupt-during-reset.patch e1000-fix-pci-enable-to-honor-the-need_ioport-flag.patch agp-intel-add-support-for-g41-chipset.patch agp-intel-fix-broken-symbol-in-device-name.patch +alsa-hda-add-quirk-for-fsc-amilo-xi2550.patch +alsa-hda-add-missing-coef-initialization-for-alc887.patch +alsa-hda-add-missing-initialization-for-alc272.patch +asus_acpi-add-r1f-support.patch +panasonic-laptop-fix-x.patch +acpi-skip-the-first-two-elements-in-the-_bcl-package.patch +acpi-remove-locking-from-pm1x_sts-register-reads.patch +acpi-proc_dir_entry-video-vga-already-registered.patch +acpi-disable-acpi-cleanly-when-bad-rsdp-found.patch +acpica-fix-table-entry-truncation-calculation.patch +pci-properly-clean-up-aspm-link-state-on-device-remove.patch +pci-return-error-on-failure-to-read-pci-roms.patch +seq_file-move-traverse-so-it-can-be-used-from-seq_read.patch +seq_file-fix-big-enough-lseek-read.patch +serial-set-correct-baud_base-for-oxford-semiconductor-ltd-exsys-ex-41092-dual-16950-serial-adapter.patch +add-support-for-8-port-rs-232-mic-3620-from-advantech.patch -- 2.47.3