diff --git a/efi_default_physical.patch b/efi_default_physical.patch index 6e4656059..41de7809e 100644 --- a/efi_default_physical.patch +++ b/efi_default_physical.patch @@ -1,5 +1,5 @@ -Default to physical mode in EFI. Fixes boot problems on some machines, -upstream will probably head in this direction. +Default EFI to physical rather than virtual. Upstream seem to be going +in this direction. diff --git a/arch/x86/include/asm/efi.h b/arch/x86/include/asm/efi.h index 8e4a165..3c62f15 100644 @@ -216,7 +216,7 @@ index 5cab48e..90767b1 100644 +void efi_call_phys_epilog_in_physmode(void) { /* Not supported */ } + diff --git a/arch/x86/platform/efi/efi_64.c b/arch/x86/platform/efi/efi_64.c -index ac0621a..33a8192 100644 +index ac0621a..ad19fe9 100644 --- a/arch/x86/platform/efi/efi_64.c +++ b/arch/x86/platform/efi/efi_64.c @@ -39,7 +39,9 @@ @@ -318,8 +318,8 @@ index ac0621a..33a8192 100644 + memset(efi_pgd, 0, sizeof(efi_pgd)); + for (p = memmap.map; p < memmap.map_end; p += memmap.desc_size) { + md = p; -+ if ((md->type != EFI_RUNTIME_SERVICES_CODE) && -+ (md->type != EFI_RUNTIME_SERVICES_DATA)) ++ if (!(md->type & EFI_RUNTIME_SERVICES_CODE) && ++ !(md->type & EFI_RUNTIME_SERVICES_DATA)) + continue; + + start_pfn = md->phys_addr >> PAGE_SHIFT; @@ -332,7 +332,7 @@ index ac0621a..33a8192 100644 + pud = fill_pud(pgd, vaddr); + pmd = fill_pmd(pud, vaddr); + pte = fill_pte(pmd, vaddr); -+ if (md->type == EFI_RUNTIME_SERVICES_CODE) ++ if (md->type & EFI_RUNTIME_SERVICES_CODE) + set_pte(pte, pfn_pte(pfn, PAGE_KERNEL_EXEC)); + else + set_pte(pte, pfn_pte(pfn, PAGE_KERNEL)); diff --git a/kernel.spec b/kernel.spec index 4f8945d51..4c6713003 100644 --- a/kernel.spec +++ b/kernel.spec @@ -1940,6 +1940,10 @@ fi # || || %changelog +* Fri Dec 17 2010 Matthew Garrett 2.6.37-0.rc6.git0.3 +- efi_default_physical.patch: Revert hunk that breaks boot +- linux-next-macbook-air-input.patch: Add input support for new Macbook Airs + * Thu Dec 16 2010 Matthew Garrett 2.6.37-0.rc6.git0.2 - applesmc_update.patch: Make the driver more generic. Should help Apples. - apple_backlight.patch: Make sure that this loads on all hardware. diff --git a/linux-next-macbook-air-input.patch b/linux-next-macbook-air-input.patch new file mode 100644 index 000000000..16d4d6d39 --- /dev/null +++ b/linux-next-macbook-air-input.patch @@ -0,0 +1,185 @@ +Support for USB HID devices on the new Macbook Airs. From -next. + +diff --git a/drivers/hid/hid-apple.c b/drivers/hid/hid-apple.c +index eaeca56..6c52203 100644 +--- a/drivers/hid/hid-apple.c ++++ b/drivers/hid/hid-apple.c +@@ -59,6 +59,27 @@ struct apple_key_translation { + u8 flags; + }; + ++static const struct apple_key_translation macbookair_fn_keys[] = { ++ { KEY_BACKSPACE, KEY_DELETE }, ++ { KEY_ENTER, KEY_INSERT }, ++ { KEY_F1, KEY_BRIGHTNESSDOWN, APPLE_FLAG_FKEY }, ++ { KEY_F2, KEY_BRIGHTNESSUP, APPLE_FLAG_FKEY }, ++ { KEY_F3, KEY_SCALE, APPLE_FLAG_FKEY }, ++ { KEY_F4, KEY_DASHBOARD, APPLE_FLAG_FKEY }, ++ { KEY_F6, KEY_PREVIOUSSONG, APPLE_FLAG_FKEY }, ++ { KEY_F7, KEY_PLAYPAUSE, APPLE_FLAG_FKEY }, ++ { KEY_F8, KEY_NEXTSONG, APPLE_FLAG_FKEY }, ++ { KEY_F9, KEY_MUTE, APPLE_FLAG_FKEY }, ++ { KEY_F10, KEY_VOLUMEDOWN, APPLE_FLAG_FKEY }, ++ { KEY_F11, KEY_VOLUMEUP, APPLE_FLAG_FKEY }, ++ { KEY_F12, KEY_EJECTCD, APPLE_FLAG_FKEY }, ++ { KEY_UP, KEY_PAGEUP }, ++ { KEY_DOWN, KEY_PAGEDOWN }, ++ { KEY_LEFT, KEY_HOME }, ++ { KEY_RIGHT, KEY_END }, ++ { } ++}; ++ + static const struct apple_key_translation apple_fn_keys[] = { + { KEY_BACKSPACE, KEY_DELETE }, + { KEY_ENTER, KEY_INSERT }, +@@ -157,10 +178,15 @@ static int hidinput_apple_event(struct hid_device *hid, struct input_dev *input, + if (fnmode) { + int do_translate; + +- trans = apple_find_translation((hid->product < 0x21d || +- hid->product >= 0x300) ? +- powerbook_fn_keys : apple_fn_keys, +- usage->code); ++ if(hid->product >= USB_DEVICE_ID_APPLE_WELLSPRING4_ANSI && ++ hid->product <= USB_DEVICE_ID_APPLE_WELLSPRING4A_JIS) { ++ trans = apple_find_translation(macbookair_fn_keys, usage->code); ++ } else if (hid->product < 0x21d || hid->product >= 0x300) { ++ trans = apple_find_translation(powerbook_fn_keys, usage->code); ++ } else { ++ trans = apple_find_translation(apple_fn_keys, usage->code); ++ } ++ + if (trans) { + if (test_bit(usage->code, asc->pressed_fn)) + do_translate = 1; +@@ -436,6 +462,18 @@ static const struct hid_device_id apple_devices[] = { + .driver_data = APPLE_HAS_FN | APPLE_ISO_KEYBOARD }, + { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING3_JIS), + .driver_data = APPLE_HAS_FN | APPLE_RDESC_JIS }, ++ { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING4_ANSI), ++ .driver_data = APPLE_HAS_FN }, ++ { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING4_ISO), ++ .driver_data = APPLE_HAS_FN | APPLE_ISO_KEYBOARD }, ++ { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING4_JIS), ++ .driver_data = APPLE_HAS_FN | APPLE_RDESC_JIS }, ++ { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING4A_ANSI), ++ .driver_data = APPLE_HAS_FN }, ++ { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING4A_ISO), ++ .driver_data = APPLE_HAS_FN | APPLE_ISO_KEYBOARD }, ++ { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING4A_JIS), ++ .driver_data = APPLE_HAS_FN | APPLE_RDESC_JIS }, + { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_ALU_WIRELESS_2009_ANSI), + .driver_data = APPLE_NUMLOCK_EMULATION | APPLE_HAS_FN }, + { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_ALU_WIRELESS_2009_ISO), +diff --git a/drivers/hid/hid-core.c b/drivers/hid/hid-core.c +index b3393e1..53ac909 100644 +--- a/drivers/hid/hid-core.c ++++ b/drivers/hid/hid-core.c +@@ -1274,6 +1274,12 @@ static const struct hid_device_id hid_blacklist[] = { + { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING3_ANSI) }, + { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING3_ISO) }, + { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING3_JIS) }, ++ { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING4_ANSI) }, ++ { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING4_ISO) }, ++ { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING4_JIS) }, ++ { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING4A_ANSI) }, ++ { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING4A_ISO) }, ++ { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING4A_JIS) }, + { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_ALU_WIRELESS_2009_ANSI) }, + { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_ALU_WIRELESS_2009_ISO) }, + { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_ALU_WIRELESS_2009_JIS) }, +@@ -1760,6 +1766,12 @@ static const struct hid_device_id hid_mouse_ignore_list[] = { + { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING3_ANSI) }, + { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING3_ISO) }, + { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING3_JIS) }, ++ { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING4_ANSI) }, ++ { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING4_ISO) }, ++ { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING4_JIS) }, ++ { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING4A_ANSI) }, ++ { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING4A_ISO) }, ++ { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING4A_JIS) }, + { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_FOUNTAIN_TP_ONLY) }, + { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_GEYSER1_TP_ONLY) }, + { } +diff --git a/drivers/hid/hid-ids.h b/drivers/hid/hid-ids.h +index 68114db..104b9f9 100644 +--- a/drivers/hid/hid-ids.h ++++ b/drivers/hid/hid-ids.h +@@ -97,6 +97,12 @@ + #define USB_DEVICE_ID_APPLE_WELLSPRING3_ANSI 0x0236 + #define USB_DEVICE_ID_APPLE_WELLSPRING3_ISO 0x0237 + #define USB_DEVICE_ID_APPLE_WELLSPRING3_JIS 0x0238 ++#define USB_DEVICE_ID_APPLE_WELLSPRING4_ANSI 0x023f ++#define USB_DEVICE_ID_APPLE_WELLSPRING4_ISO 0x0240 ++#define USB_DEVICE_ID_APPLE_WELLSPRING4_JIS 0x0241 ++#define USB_DEVICE_ID_APPLE_WELLSPRING4A_ANSI 0x0242 ++#define USB_DEVICE_ID_APPLE_WELLSPRING4A_ISO 0x0243 ++#define USB_DEVICE_ID_APPLE_WELLSPRING4A_JIS 0x0244 + #define USB_DEVICE_ID_APPLE_ALU_WIRELESS_2009_ANSI 0x0239 + #define USB_DEVICE_ID_APPLE_ALU_WIRELESS_2009_ISO 0x023a + #define USB_DEVICE_ID_APPLE_ALU_WIRELESS_2009_JIS 0x023b + +diff --git a/drivers/input/mouse/bcm5974.c b/drivers/input/mouse/bcm5974.c +index b952317..ee82851 100644 +--- a/drivers/input/mouse/bcm5974.c ++++ b/drivers/input/mouse/bcm5974.c +@@ -55,6 +55,14 @@ + #define USB_DEVICE_ID_APPLE_WELLSPRING3_ANSI 0x0236 + #define USB_DEVICE_ID_APPLE_WELLSPRING3_ISO 0x0237 + #define USB_DEVICE_ID_APPLE_WELLSPRING3_JIS 0x0238 ++/* MacbookAir3,2 (unibody), aka wellspring5 */ ++#define USB_DEVICE_ID_APPLE_WELLSPRING4_ANSI 0x023f ++#define USB_DEVICE_ID_APPLE_WELLSPRING4_ISO 0x0240 ++#define USB_DEVICE_ID_APPLE_WELLSPRING4_JIS 0x0241 ++/* MacbookAir3,1 (unibody), aka wellspring4 */ ++#define USB_DEVICE_ID_APPLE_WELLSPRING4A_ANSI 0x0242 ++#define USB_DEVICE_ID_APPLE_WELLSPRING4A_ISO 0x0243 ++#define USB_DEVICE_ID_APPLE_WELLSPRING4A_JIS 0x0244 + + #define BCM5974_DEVICE(prod) { \ + .match_flags = (USB_DEVICE_ID_MATCH_DEVICE | \ +@@ -80,6 +88,14 @@ static const struct usb_device_id bcm5974_table[] = { + BCM5974_DEVICE(USB_DEVICE_ID_APPLE_WELLSPRING3_ANSI), + BCM5974_DEVICE(USB_DEVICE_ID_APPLE_WELLSPRING3_ISO), + BCM5974_DEVICE(USB_DEVICE_ID_APPLE_WELLSPRING3_JIS), ++ /* MacbookAir3,2 */ ++ BCM5974_DEVICE(USB_DEVICE_ID_APPLE_WELLSPRING4_ANSI), ++ BCM5974_DEVICE(USB_DEVICE_ID_APPLE_WELLSPRING4_ISO), ++ BCM5974_DEVICE(USB_DEVICE_ID_APPLE_WELLSPRING4_JIS), ++ /* MacbookAir3,1 */ ++ BCM5974_DEVICE(USB_DEVICE_ID_APPLE_WELLSPRING4A_ANSI), ++ BCM5974_DEVICE(USB_DEVICE_ID_APPLE_WELLSPRING4A_ISO), ++ BCM5974_DEVICE(USB_DEVICE_ID_APPLE_WELLSPRING4A_JIS), + /* Terminating entry */ + {} + }; +@@ -234,6 +250,30 @@ static const struct bcm5974_config bcm5974_config_table[] = { + { DIM_X, DIM_X / SN_COORD, -4460, 5166 }, + { DIM_Y, DIM_Y / SN_COORD, -75, 6700 } + }, ++ { ++ USB_DEVICE_ID_APPLE_WELLSPRING4_ANSI, ++ USB_DEVICE_ID_APPLE_WELLSPRING4_ISO, ++ USB_DEVICE_ID_APPLE_WELLSPRING4_JIS, ++ HAS_INTEGRATED_BUTTON, ++ 0x84, sizeof(struct bt_data), ++ 0x81, TYPE2, FINGER_TYPE2, FINGER_TYPE2 + SIZEOF_ALL_FINGERS, ++ { DIM_PRESSURE, DIM_PRESSURE / SN_PRESSURE, 0, 300 }, ++ { DIM_WIDTH, DIM_WIDTH / SN_WIDTH, 0, 2048 }, ++ { DIM_X, DIM_X / SN_COORD, -4620, 5140 }, ++ { DIM_Y, DIM_Y / SN_COORD, -150, 6600 } ++ }, ++ { ++ USB_DEVICE_ID_APPLE_WELLSPRING4A_ANSI, ++ USB_DEVICE_ID_APPLE_WELLSPRING4A_ISO, ++ USB_DEVICE_ID_APPLE_WELLSPRING4A_JIS, ++ HAS_INTEGRATED_BUTTON, ++ 0x84, sizeof(struct bt_data), ++ 0x81, TYPE2, FINGER_TYPE2, FINGER_TYPE2 + SIZEOF_ALL_FINGERS, ++ { DIM_PRESSURE, DIM_PRESSURE / SN_PRESSURE, 0, 300 }, ++ { DIM_WIDTH, DIM_WIDTH / SN_WIDTH, 0, 2048 }, ++ { DIM_X, DIM_X / SN_COORD, -4616, 5112 }, ++ { DIM_Y, DIM_Y / SN_COORD, -142, 5234 } ++ }, + {} + };