Linux 2.6.38.1
Subsystems (46)
Documentation/i2c/instantiating-devices +1 -1
@@ -100,7 +100,7 @@ static int __devinit usb_hcd_pnx4008_probe(struct platform_device *pdev) (...) i2c_adap = i2c_get_adapter(2); memset(&i2c_info, 0, sizeof(struct i2c_board_info)); - strlcpy(i2c_info.name, "isp1301_pnx", I2C_NAME_SIZE); + strlcpy(i2c_info.type, "isp1301_pnx", I2C_NAME_SIZE); isp1301_i2c_client = i2c_new_probed_device(i2c_adap, &i2c_info, normal_i2c, NULL); i2c_put_adapter(i2c_adap);
Makefile +1 -1
@@ -1,7 +1,7 @@ VERSION = 2 PATCHLEVEL = 6 SUBLEVEL = 38 -EXTRAVERSION = +EXTRAVERSION = .1 NAME = Flesh-Eating Bats with Fangs # *DOCUMENTATION*
arch/arm/mach-davinci/board-dm644x-evm.c +3 -5
@@ -440,11 +440,6 @@ evm_u35_setup(struct i2c_client *client, int gpio, unsigned ngpio, void *c)gpio_request (gpio +7 ,"nCF_SEL" );gpio_direction_output (gpio +7 ,1 ); -/* irlml6401 switches over 1A, in under 8 msec; -* now it can be managed by nDRV_VBUS ... -*/ -davinci_setup_usb (1000 ,8 ); -return 0 ; }
@@ -705,6 +700,9 @@ static __init void davinci_evm_init(void)davinci_serial_init (&uart_config);dm644x_init_asp (&dm644x_evm_snd_data); +/* irlml6401 switches over 1A, in under 8 msec */ +davinci_setup_usb (1000 ,8 ); + soc_info->emac_pdata->phy_id =DM644X_EVM_PHY_ID ;/* Register the fixup for PHY on DaVinci */ phy_register_fixup_for_uid(LXT971_PHY_ID, LXT971_PHY_MASK,
arch/microblaze/include/asm/uaccess.h +4 -4
@@ -120,16 +120,16 @@ static inline unsigned long __must_check __clear_user(void __user *to, {/* normal memset with two words to __ex_table */ __asm__ __volatile__ ( \ -"1: sb r0, %2, r0;" \ +"1: sb r0, %1, r0;" \" addik %0, %0, -1;" \" bneid %0, 1b;" \ -" addik %2, %2, 1;" \ +" addik %1, %1, 1;" \"2: " \ __EX_TABLE_SECTION \".word 1b,2b;" \".previous;" \ - :"=r" (n) \ - :"0" (n),"r" (to) + :"=r" (n),"=r" (to) \ + :"0" (n),"1" (to) );return n; }
arch/parisc/kernel/irq.c +1 -1
@@ -108,7 +108,7 @@ int cpu_check_affinity(unsigned int irq, const struct cpumask *dest)int cpu_dest;/* timer and ipi have to always be received on all CPUs */ -if (CHECK_IRQ_PER_CPU (irq)) { +if (CHECK_IRQ_PER_CPU (irq_to_desc (irq)->status)) {/* Bad linux design decision. The mask has already * been set; we must reset it */ cpumask_setall (irq_desc[irq].affinity);
arch/powerpc/include/asm/reg.h +1 -0
@@ -880,6 +880,7 @@#define PV_970 0x0039#define PV_POWER5 0x003A#define PV_POWER5p 0x003B +#define PV_POWER7 0x003F#define PV_970FX 0x003C#define PV_630 0x0040#define PV_630p 0x0041
arch/powerpc/kernel/perf_event.c +23 -1
@@ -1269,6 +1269,28 @@ unsigned long perf_instruction_pointer(struct pt_regs *regs)return ip; } +static bool pmc_overflow (unsigned long val) +{ +if ((int )val <0 ) +return true; + +/* +* Events on POWER7 can roll back if a speculative event doesn't +* eventually complete. Unfortunately in some rare cases they will +* raise a performance monitor exception. We need to catch this to +* ensure we reset the PMC. In all cases the PMC will be 256 or less +* cycles from overflow. +* +* We only do this if the first pass fails to find any overflowing +* PMCs because a user might set a period of less than 256 and we +* don't want to mistakenly reset them. +*/ +if (__is_processor (PV_POWER7 ) && ((0x80000000 - val) <=256 )) +return true; + +return false; +} +/* * Performance monitor interrupt stuff */
@@ -1316,7 +1338,7 @@ static void perf_event_interrupt(struct pt_regs *regs)if (is_limited_pmc (i +1 ))continue ; val =read_pmc (i +1 ); -if ((int )val <0 ) +if (pmc_overflow (val))write_pmc (i +1 ,0 ); } }
arch/x86/include/asm/pgtable-3level.h +3 -8
@@ -69,8 +69,6 @@ static inline void native_pmd_clear(pmd_t *pmd)static inline void pud_clear (pud_t *pudp) { -unsigned long pgd; -set_pud (pudp,__pud (0 ));/*
@@ -79,13 +77,10 @@ static inline void pud_clear(pud_t *pudp)* section 8.1: in PAE mode we explicitly have to flush the * TLB via cr3 if the top-level pgd is changed... * -* Make sure the pud entry we're updating is within the -* current pgd to avoid unnecessary TLB flushes. +* Currently all places where pud_clear() is called either have +* flush_tlb_mm() followed or don't need TLB flush (x86_64 code or +* pud_clear_bad()), so we don't need TLB flush here. */ - pgd =read_cr3 (); -if (__pa (pudp) >= pgd &&__pa (pudp) < - (pgd +sizeof (pgd_t)*PTRS_PER_PGD )) -write_cr3 (pgd); }#ifdef CONFIG_SMP
arch/x86/kernel/alternative.c +6 -1
@@ -620,7 +620,12 @@ static int __kprobes stop_machine_text_poke(void *data)flush_icache_range ((unsigned long )p->addr, (unsigned long )p->addr + p->len); } - +/* +* Intel Archiecture Software Developer's Manual section 7.1.3 specifies +* that a core serializing instruction such as "cpuid" should be +* executed on _each_ core before the new instruction is made visible. +*/ +sync_core ();return 0 ; }
arch/x86/kernel/e820.c +8 -2
@@ -847,15 +847,21 @@ static int __init parse_memopt(char *p)if (!p)return -EINVAL ; -#ifdef CONFIG_X86_32 if (!strcmp (p,"nopentium" )) { +#ifdef CONFIG_X86_32 setup_clear_cpu_cap (X86_FEATURE_PSE );return 0 ; - } +#else +printk (KERN_WARNING "mem=nopentium ignored! (only supported on x86_32)\n" ); +return -EINVAL ;#endif + } userdef =1 ; mem_size =memparse (p, &p); +/* don't remove all of memory when handling "mem={invalid}" param */ +if (mem_size ==0 ) +return -EINVAL ;e820_remove_range (mem_size,ULLONG_MAX - mem_size,E820_RAM ,1 );return 0 ;
arch/x86/kernel/early-quirks.c +6 -1
@@ -159,7 +159,12 @@ static void __init ati_bugs_contd(int num, int slot, int func)if (rev >=0x40 ) acpi_fix_pin2_polarity =1 ; -if (rev >0x13 ) +/* +* SB600: revisions 0x11, 0x12, 0x13, 0x14, ... +* SB700: revisions 0x39, 0x3a, ... +* SB800: revisions 0x40, 0x41, ... +*/ +if (rev >=0x39 )return ;if (acpi_use_timer_override)
arch/x86/kernel/entry_64.S +1 -1
@@ -1248,7 +1248,7 @@ ENTRY(xen_do_hypervisor_callback) # do_hypervisor_callback(struct *pt_regs) decl PER_CPU_VAR(irq_count) jmp error_exit CFI_ENDPROC -END(do_hypervisor_callback) +END(xen_do_hypervisor_callback) /* * Hypervisor uses this for application faults while it executes.
arch/x86/mm/pgtable.c +1 -2
@@ -168,8 +168,7 @@ void pud_populate(struct mm_struct *mm, pud_t *pudp, pmd_t *pmd)* section 8.1: in PAE mode we explicitly have to flush the * TLB via cr3 if the top-level pgd is changed... */ -if (mm == current->active_mm) - write_cr3(read_cr3()); + flush_tlb_mm(mm); }#else /* !CONFIG_X86_PAE */
drivers/ata/ahci.c +3 -0
@@ -260,6 +260,7 @@ static const struct pci_device_id ahci_pci_tbl[] = { { PCI_VDEVICE(INTEL, 0x1d02), board_ahci }, /* PBG AHCI */ { PCI_VDEVICE(INTEL, 0x1d04), board_ahci }, /* PBG RAID */ { PCI_VDEVICE(INTEL, 0x1d06), board_ahci }, /* PBG RAID */ + { PCI_VDEVICE(INTEL, 0x2826), board_ahci }, /* PBG RAID */ { PCI_VDEVICE(INTEL, 0x2323), board_ahci }, /* DH89xxCC AHCI */ /* JMicron 360/1/3/5/6, match class to avoid IDE function */
@@ -383,6 +384,8 @@ static const struct pci_device_id ahci_pci_tbl[] = { .class = PCI_CLASS_STORAGE_SATA_AHCI, .class_mask = 0xffffff, .driver_data = board_ahci_yes_fbs }, /* 88se9128 */ + { PCI_DEVICE(0x1b4b, 0x9125), + .driver_data = board_ahci_yes_fbs }, /* 88se9125 *//* Promise */ { PCI_VDEVICE(PROMISE, 0x3f20), board_ahci }, /* PDC42819 */
drivers/ata/libata-eh.c +1 -1
@@ -1618,7 +1618,7 @@ static void ata_eh_analyze_serror(struct ata_link *link)* host links. For disabled PMP links, only N bit is * considered as X bit is left at 1 for link plugging. */ -if (link->lpm_policy !=ATA_LPM_MAX_POWER ) +if (link->lpm_policy >ATA_LPM_MAX_POWER ) hotplug_mask =0 ;/* hotplug doesn't work w/ LPM */ else if (!(link->flags &ATA_LFLAG_DISABLED ) ||ata_is_host_link (link)) hotplug_mask =SERR_PHYRDY_CHG |SERR_DEV_XCHG ;
drivers/gpu/drm/drm_sysfs.c +7 -0
@@ -158,8 +158,15 @@ static ssize_t status_show(struct device *device, {struct drm_connector *connector =to_drm_connector (device);enum drm_connector_status status; +int ret; + + ret =mutex_lock_interruptible (&connector->dev->mode_config.mutex); +if (ret) +return ret; status = connector->funcs->detect (connector, true); +mutex_unlock (&connector->dev->mode_config.mutex); +return snprintf (buf,PAGE_SIZE ,"%s\n" ,drm_get_connector_status_name (status)); }
drivers/gpu/drm/i915/i915_irq.c +9 -0
@@ -1377,7 +1377,12 @@ int i915_enable_vblank(struct drm_device *dev, int pipe)else i915_enable_pipestat (dev_priv, pipe,PIPE_VBLANK_INTERRUPT_ENABLE ); + +/* maintain vblank delivery even in deep C-states */ +if (dev_priv->info->gen ==3 ) +I915_WRITE (INSTPM ,INSTPM_AGPBUSY_DIS <<16 );spin_unlock_irqrestore (&dev_priv->irq_lock, irqflags); +return 0 ; }
@@ -1390,6 +1395,10 @@ void i915_disable_vblank(struct drm_device *dev, int pipe)unsigned long irqflags;spin_lock_irqsave (&dev_priv->irq_lock, irqflags); +if (dev_priv->info->gen ==3 ) +I915_WRITE (INSTPM , +INSTPM_AGPBUSY_DIS <<16 |INSTPM_AGPBUSY_DIS ); +if (HAS_PCH_SPLIT (dev))ironlake_disable_display_irq (dev_priv, (pipe ==0 ) ?DE_PIPEA_VBLANK :DE_PIPEB_VBLANK );
drivers/gpu/drm/i915/i915_reg.h +4 -1
@@ -405,9 +405,12 @@#define I915_ERROR_INSTRUCTION (1<<0)#define INSTPM 0x020c0#define INSTPM_SELF_EN (1<<12)/* 915GM only */ +#define INSTPM_AGPBUSY_DIS (1<<11)/* gen3: when disabled, pending interrupts +will not assert AGPBUSY# and will only +be delivered when out of C3. */ #define ACTHD 0x020c8#define FW_BLC 0x020d8 -#define FW_BLC2 0x020dc +#define FW_BLC2 0x020dc#define FW_BLC_SELF 0x020e0/* 915+ only */ #define FW_BLC_SELF_EN_MASK (1<<31)#define FW_BLC_SELF_FIFO_MASK (1<<16)/* 945 only */
drivers/gpu/drm/radeon/atombios_crtc.c +2 -2
@@ -61,8 +61,8 @@ static void atombios_overscan_setup(struct drm_crtc *crtc, args.usOverscanLeft =cpu_to_le16 ((adjusted_mode->crtc_hdisplay - (a2 / mode->crtc_vdisplay)) /2 ); args.usOverscanRight =cpu_to_le16 ((adjusted_mode->crtc_hdisplay - (a2 / mode->crtc_vdisplay)) /2 ); }else if (a2 > a1) { - args.usOverscanLeft =cpu_to_le16 ((adjusted_mode->crtc_vdisplay - (a1 / mode->crtc_hdisplay)) /2 ); - args.usOverscanRight =cpu_to_le16 ((adjusted_mode->crtc_vdisplay - (a1 / mode->crtc_hdisplay)) /2 ); + args.usOverscanTop =cpu_to_le16 ((adjusted_mode->crtc_vdisplay - (a1 / mode->crtc_hdisplay)) /2 ); + args.usOverscanBottom =cpu_to_le16 ((adjusted_mode->crtc_vdisplay - (a1 / mode->crtc_hdisplay)) /2 ); }break ;case RMX_FULL :
drivers/hid/Kconfig +10 -4
@@ -68,9 +68,15 @@ config HID_A4TECH ---help--- Support for A4 tech X5 and WOP-35 / Trust 450L mice. -config HID_ACRUX_FF - tristate "ACRUX force feedback" +config HID_ACRUX + tristate "ACRUX game controller support" depends on USB_HID + ---help--- + Say Y here if you want to enable support for ACRUX game controllers. + +config HID_ACRUX_FF + tristate "ACRUX force feedback support" + depends on HID_ACRUX select INPUT_FF_MEMLESS ---help--- Say Y here if you want to enable force feedback support for ACRUX
@@ -319,10 +325,10 @@ config HID_NTRIG Support for N-Trig touch screen. config HID_ORTEK - tristate "Ortek WKB-2000 wireless keyboard and mouse trackpad" + tristate "Ortek PKB-1700/WKB-2000 wireless keyboard and mouse trackpad" depends on USB_HID ---help--- - Support for Ortek WKB-2000 wireless keyboard + mouse trackpad. + Support for Ortek PKB-1700/WKB-2000 wireless keyboard + mouse trackpad. config HID_PANTHERLORD tristate "Pantherlord/GreenAsia game controller"
drivers/hid/Makefile +1 -1
@@ -27,7 +27,7 @@ endif obj-$(CONFIG_HID_3M_PCT) += hid-3m-pct.o obj-$(CONFIG_HID_A4TECH) += hid-a4tech.o -obj-$(CONFIG_HID_ACRUX_FF) += hid-axff.o +obj-$(CONFIG_HID_ACRUX) += hid-axff.o obj-$(CONFIG_HID_APPLE) += hid-apple.o obj-$(CONFIG_HID_BELKIN) += hid-belkin.o obj-$(CONFIG_HID_CANDO) += hid-cando.o
drivers/hid/hid-apple.c +6 -0
@@ -481,6 +481,12 @@ 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_WELLSPRING4A_JIS), .driver_data = APPLE_HAS_FN | APPLE_RDESC_JIS }, + { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING5_ANSI), + .driver_data = APPLE_HAS_FN }, + { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING5_ISO), + .driver_data = APPLE_HAS_FN | APPLE_ISO_KEYBOARD }, + { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING5_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),
drivers/hid/hid-axff.c +28 -3
@@ -33,6 +33,8 @@#include <linux/hid.h> #include "hid-ids.h" + +#ifdef CONFIG_HID_ACRUX_FF #include "usbhid/usbhid.h" struct axff_device {
@@ -109,6 +111,12 @@ err_free_mem:kfree (axff); return error; } +#else +static inline int axff_init (struct hid_device *hid) +{ +return 0 ; +} +#endif static int ax_probe (struct hid_device *hdev,const struct hid_device_id *id) {
@@ -139,9 +147,25 @@ static int ax_probe(struct hid_device *hdev, const struct hid_device_id *id) error); } +/* +* We need to start polling device right away, otherwise +* it will go into a coma. +*/ + error =hid_hw_open (hdev); +if (error) { +dev_err (&hdev->dev,"hw open failed\n" ); +return error; + } +return 0 ; } +static void ax_remove (struct hid_device *hdev) +{ +hid_hw_close (hdev); +hid_hw_stop (hdev); +} +static const struct hid_device_id ax_devices[] = { {HID_USB_DEVICE (USB_VENDOR_ID_ACRUX ,0x0802 ), }, { }
@@ -149,9 +173,10 @@ static const struct hid_device_id ax_devices[] = {MODULE_DEVICE_TABLE (hid, ax_devices);static struct hid_driver ax_driver = { - .name ="acrux" , - .id_table = ax_devices, - .probe = ax_probe, + .name ="acrux" , + .id_table = ax_devices, + .probe = ax_probe, + .remove = ax_remove, };static int __init ax_init (void )
drivers/hid/hid-core.c +7 -2
@@ -1256,9 +1256,7 @@ static const struct hid_device_id hid_have_special_driver[] = { { HID_USB_DEVICE(USB_VENDOR_ID_A4TECH, USB_DEVICE_ID_A4TECH_WCP32PU) }, { HID_USB_DEVICE(USB_VENDOR_ID_A4TECH, USB_DEVICE_ID_A4TECH_X5_005D) }, { HID_USB_DEVICE(USB_VENDOR_ID_A4TECH, USB_DEVICE_ID_A4TECH_RP_649) }, -#if defined(CONFIG_HID_ACRUX_FF) || defined(CONFIG_HID_ACRUX_FF_MODULE) { HID_USB_DEVICE(USB_VENDOR_ID_ACRUX, 0x0802) }, -#endif { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_ATV_IRCONTROL) }, { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_IRCONTROL4) }, { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_MIGHTYMOUSE) },
@@ -1302,6 +1300,9 @@ static const struct hid_device_id hid_have_special_driver[] = { { 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_WELLSPRING5_ANSI) }, + { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING5_ISO) }, + { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING5_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) },
@@ -1400,6 +1401,7 @@ static const struct hid_device_id hid_have_special_driver[] = { { HID_USB_DEVICE(USB_VENDOR_ID_NTRIG, USB_DEVICE_ID_NTRIG_TOUCH_SCREEN_16) }, { HID_USB_DEVICE(USB_VENDOR_ID_NTRIG, USB_DEVICE_ID_NTRIG_TOUCH_SCREEN_17) }, { HID_USB_DEVICE(USB_VENDOR_ID_NTRIG, USB_DEVICE_ID_NTRIG_TOUCH_SCREEN_18) }, + { HID_USB_DEVICE(USB_VENDOR_ID_ORTEK, USB_DEVICE_ID_ORTEK_PKB1700) }, { HID_USB_DEVICE(USB_VENDOR_ID_ORTEK, USB_DEVICE_ID_ORTEK_WKB2000) }, { HID_USB_DEVICE(USB_VENDOR_ID_PETALYNX, USB_DEVICE_ID_PETALYNX_MAXTER_REMOTE) }, { HID_USB_DEVICE(USB_VENDOR_ID_QUANTA, USB_DEVICE_ID_QUANTA_OPTICAL_TOUCH) },
@@ -1801,6 +1803,9 @@ static const struct hid_device_id hid_mouse_ignore_list[] = { { 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_WELLSPRING5_ANSI) }, + { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING5_ISO) }, + { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING5_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) }, { }
drivers/hid/hid-ids.h +4 -0
@@ -103,6 +103,9 @@#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_WELLSPRING5_ANSI 0x0245 +#define USB_DEVICE_ID_APPLE_WELLSPRING5_ISO 0x0246 +#define USB_DEVICE_ID_APPLE_WELLSPRING5_JIS 0x0247#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
@@ -466,6 +469,7 @@#define USB_DEVICE_ID_ONTRAK_ADU100 0x0064#define USB_VENDOR_ID_ORTEK 0x05a4 +#define USB_DEVICE_ID_ORTEK_PKB1700 0x1700#define USB_DEVICE_ID_ORTEK_WKB2000 0x2000#define USB_VENDOR_ID_PANJIT 0x134c
drivers/hid/hid-input.c +21 -9
@@ -290,14 +290,6 @@ static void hidinput_configure_usage(struct hid_input *hidinput, struct hid_fiel goto ignore; } -if (field->report_type ==HID_FEATURE_REPORT ) { -if (device->driver->feature_mapping) { - device->driver->feature_mapping (device, hidinput, field, - usage); - } - goto ignore; - } -if (device->driver->input_mapping) {int ret = device->driver->input_mapping (device, hidinput, field, usage, &bit, &max);
@@ -835,6 +827,24 @@ static void hidinput_close(struct input_dev *dev)hid_hw_close (hid); } +static void report_features (struct hid_device *hid) +{ +struct hid_driver *drv = hid->driver; +struct hid_report_enum *rep_enum; +struct hid_report *rep; +int i, j; + +if (!drv->feature_mapping) +return ; + + rep_enum = &hid->report_enum[HID_FEATURE_REPORT ]; +list_for_each_entry (rep, &rep_enum->report_list, list) +for (i =0 ; i < rep->maxfield; i++) +for (j =0 ; j < rep->field[i]->maxusage; j++) + drv->feature_mapping (hid, rep->field[i], + rep->field[i]->usage + j); +} +/* * Register the input device; print a message. * Configure the input layer interface
@@ -863,7 +873,9 @@ int hidinput_connect(struct hid_device *hid, unsigned int force)return -1 ; } -for (k =HID_INPUT_REPORT ; k <=HID_FEATURE_REPORT ; k++) { +report_features (hid); + +for (k =HID_INPUT_REPORT ; k <=HID_OUTPUT_REPORT ; k++) {if (k ==HID_OUTPUT_REPORT && hid->quirks &HID_QUIRK_SKIP_OUTPUT_REPORTS )continue ;
drivers/hid/hid-magicmouse.c +2 -2
@@ -258,7 +258,7 @@ static void magicmouse_emit_touch(struct magicmouse_sc *msc, int raw_id, u8 *tdainput_report_abs (input,ABS_MT_TRACKING_ID , id);input_report_abs (input,ABS_MT_TOUCH_MAJOR , touch_major <<2 );input_report_abs (input,ABS_MT_TOUCH_MINOR , touch_minor <<2 ); -input_report_abs (input,ABS_MT_ORIENTATION , orientation); +input_report_abs (input,ABS_MT_ORIENTATION , -orientation);input_report_abs (input,ABS_MT_POSITION_X , x);input_report_abs (input,ABS_MT_POSITION_Y , y);
@@ -397,7 +397,7 @@ static void magicmouse_setup_input(struct input_dev *input, struct hid_device *hinput_set_abs_params (input,ABS_MT_TRACKING_ID ,0 ,15 ,0 ,0 );input_set_abs_params (input,ABS_MT_TOUCH_MAJOR ,0 ,255 ,4 ,0 );input_set_abs_params (input,ABS_MT_TOUCH_MINOR ,0 ,255 ,4 ,0 ); -input_set_abs_params (input,ABS_MT_ORIENTATION ,-32 ,31 ,1 ,0 ); +input_set_abs_params (input,ABS_MT_ORIENTATION ,-31 ,32 ,1 ,0 );/* Note: Touch Y position from the device is inverted relative * to how pointer motion is reported (and relative to how USB
drivers/hid/hid-multitouch.c +1 -1
@@ -122,7 +122,7 @@ struct mt_class mt_classes[] = { { } }; -static void mt_feature_mapping (struct hid_device *hdev,struct hid_input *hi, +static void mt_feature_mapping (struct hid_device *hdev,struct hid_field *field,struct hid_usage *usage) {if (usage->hid ==HID_DG_INPUTMODE ) {
drivers/hid/hid-ortek.c +2 -1
@@ -1,5 +1,5 @@/* -* HID driver for Ortek WKB-2000 (wireless keyboard + mouse trackpad). +* HID driver for Ortek PKB-1700/WKB-2000 (wireless keyboard + mouse trackpad). * Fixes LogicalMaximum error in USB report description, see * http://bugzilla.kernel.org/show_bug.cgi?id=14787 *
@@ -30,6 +30,7 @@ static __u8 *ortek_report_fixup(struct hid_device *hdev, __u8 *rdesc, }static const struct hid_device_id ortek_devices[] = { + {HID_USB_DEVICE (USB_VENDOR_ID_ORTEK ,USB_DEVICE_ID_ORTEK_PKB1700 ) }, {HID_USB_DEVICE (USB_VENDOR_ID_ORTEK ,USB_DEVICE_ID_ORTEK_WKB2000 ) }, { } };
drivers/hwmon/sht15.c +2 -2
@@ -333,11 +333,11 @@ static inline int sht15_calc_humid(struct sht15_data *data)const int c1 =-4 ;const int c2 =40500 ;/* x 10 ^ -6 */ -const int c3 =-2800 ;/* x10 ^ -9 */ +const int c3 =-28 ;/* x 10 ^ -7 */ RHlinear = c1*1000 + c2 * data->val_humid/1000 - + (data->val_humid * data->val_humid * c3)/1000000 ; + + (data->val_humid * data->val_humid * c3) /10000 ;return (temp -25000 ) * (10000 +80 * data->val_humid) /1000000 + RHlinear; }
drivers/infiniband/core/cm.c +1 -0
@@ -2989,6 +2989,7 @@ static int cm_sidr_req_handler(struct cm_work *work) goto out;/* No match. */ }atomic_inc (&cur_cm_id_priv->refcount); +atomic_inc (&cm_id_priv->refcount);spin_unlock_irq (&cm.lock); cm_id_priv->id.cm_handler = cur_cm_id_priv->id.cm_handler;
drivers/infiniband/core/cma.c +15 -0
@@ -1210,6 +1210,11 @@ static int cma_req_handler(struct ib_cm_id *cm_id, struct ib_cm_event *ib_event) cm_id->context = conn_id; cm_id->cm_handler = cma_ib_handler; +/* +* Protect against the user destroying conn_id from another thread +* until we're done accessing it. +*/ +atomic_inc (&conn_id->refcount); ret = conn_id->id.event_handler (&conn_id->id, &event);if (!ret) {/*
@@ -1222,8 +1227,10 @@ static int cma_req_handler(struct ib_cm_id *cm_id, struct ib_cm_event *ib_event)ib_send_cm_mra (cm_id,CMA_CM_MRA_SETTING ,NULL ,0 );mutex_unlock (&lock);mutex_unlock (&conn_id->handler_mutex); +cma_deref_id (conn_id); goto out; } +cma_deref_id (conn_id);/* Destroy the CM ID by returning a non-zero value. */ conn_id->cm_id.ib =NULL ;
@@ -1425,17 +1432,25 @@ static int iw_conn_req_handler(struct iw_cm_id *cm_id, event.param.conn.private_data_len = iw_event->private_data_len; event.param.conn.initiator_depth = attr.max_qp_init_rd_atom; event.param.conn.responder_resources = attr.max_qp_rd_atom; + +/* +* Protect against the user destroying conn_id from another thread +* until we're done accessing it. +*/ +atomic_inc (&conn_id->refcount); ret = conn_id->id.event_handler (&conn_id->id, &event);if (ret) {/* User wants to destroy the CM ID */ conn_id->cm_id.iw =NULL ;cma_exch (conn_id,CMA_DESTROYING );mutex_unlock (&conn_id->handler_mutex); +cma_deref_id (conn_id);rdma_destroy_id (&conn_id->id); goto out; }mutex_unlock (&conn_id->handler_mutex); +cma_deref_id (conn_id); out:if (dev)
drivers/input/mouse/bcm5974.c +20 -0
@@ -63,6 +63,10 @@#define USB_DEVICE_ID_APPLE_WELLSPRING4A_ANSI 0x0242#define USB_DEVICE_ID_APPLE_WELLSPRING4A_ISO 0x0243#define USB_DEVICE_ID_APPLE_WELLSPRING4A_JIS 0x0244 +/* Macbook8 (unibody, March 2011) */ +#define USB_DEVICE_ID_APPLE_WELLSPRING5_ANSI 0x0245 +#define USB_DEVICE_ID_APPLE_WELLSPRING5_ISO 0x0246 +#define USB_DEVICE_ID_APPLE_WELLSPRING5_JIS 0x0247#define BCM5974_DEVICE (prod) { \ .match_flags = (USB_DEVICE_ID_MATCH_DEVICE | \
@@ -96,6 +100,10 @@ static const struct usb_device_id bcm5974_table[] = {BCM5974_DEVICE (USB_DEVICE_ID_APPLE_WELLSPRING4A_ANSI ),BCM5974_DEVICE (USB_DEVICE_ID_APPLE_WELLSPRING4A_ISO ),BCM5974_DEVICE (USB_DEVICE_ID_APPLE_WELLSPRING4A_JIS ), +/* MacbookPro8 */ +BCM5974_DEVICE (USB_DEVICE_ID_APPLE_WELLSPRING5_ANSI ), +BCM5974_DEVICE (USB_DEVICE_ID_APPLE_WELLSPRING5_ISO ), + BCM5974_DEVICE(USB_DEVICE_ID_APPLE_WELLSPRING5_JIS), /* Terminating entry */ {} };
@@ -274,6 +282,18 @@ static const struct bcm5974_config bcm5974_config_table[] = { { DIM_X, DIM_X / SN_COORD, -4616, 5112 }, { DIM_Y, DIM_Y / SN_COORD, -142, 5234 } }, + { +USB_DEVICE_ID_APPLE_WELLSPRING5_ANSI , +USB_DEVICE_ID_APPLE_WELLSPRING5_ISO , +USB_DEVICE_ID_APPLE_WELLSPRING5_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, -4415, 5050 }, + { DIM_Y, DIM_Y / SN_COORD, -55, 6680 } + }, {} };
drivers/mmc/core/sdio.c +8 -0
@@ -395,6 +395,14 @@ static int mmc_sdio_init_card(struct mmc_host *host, u32 ocr,if (err) goto remove; +/* +* Update oldcard with the new RCA received from the SDIO +* device -- we're doing this so that it's updated in the +* "card" struct when oldcard overwrites that later. +*/ +if (oldcard) + oldcard->rca = card->rca; +mmc_set_bus_mode (host,MMC_BUSMODE_PUSHPULL ); }
drivers/mmc/host/sdhci-pci.c +8 -0
@@ -547,6 +547,14 @@ static const struct pci_device_id pci_ids[] __devinitdata = { }, { + .vendor = PCI_VENDOR_ID_RICOH, + .device = 0xe823, + .subvendor = PCI_ANY_ID, + .subdevice = PCI_ANY_ID, + .driver_data = (kernel_ulong_t)&sdhci_ricoh_mmc, + }, + + { .vendor = PCI_VENDOR_ID_ENE, .device = PCI_DEVICE_ID_ENE_CB712_SD, .subvendor = PCI_ANY_ID,
drivers/net/wireless/ath/ath9k/hw.c +11 -10
@@ -495,6 +495,17 @@ static int __ath9k_hw_init(struct ath_hw *ah)if (ah->hw_version.devid ==AR5416_AR9100_DEVID ) ah->hw_version.macVersion =AR_SREV_VERSION_9100 ; +/* +* Read back AR_WA into a permanent copy and set bits 14 and 17. +* We need to do this to avoid RMW of this register. We cannot +* read the reg when chip is asleep. +*/ + ah->WARegVal =REG_READ (ah,AR_WA ); + ah->WARegVal |= (AR_WA_D3_L1_DISABLE | +AR_WA_ASPM_TIMER_BASED_DISABLE ); + +ath9k_hw_read_revisions (ah); +if (!ath9k_hw_set_reset_reg (ah,ATH9K_RESET_POWER_ON )) {ath_err (common,"Couldn't reset chip\n" );return -EIO ;
@@ -563,14 +574,6 @@ static int __ath9k_hw_init(struct ath_hw *ah)ath9k_hw_init_mode_regs (ah); -/* -* Read back AR_WA into a permanent copy and set bits 14 and 17. -* We need to do this to avoid RMW of this register. We cannot -* read the reg when chip is asleep. -*/ - ah->WARegVal =REG_READ (ah,AR_WA ); - ah->WARegVal |= (AR_WA_D3_L1_DISABLE | -AR_WA_ASPM_TIMER_BASED_DISABLE );if (ah->is_pciexpress)ath9k_hw_configpcipowersave (ah,0 ,0 );
@@ -1082,8 +1085,6 @@ static bool ath9k_hw_set_reset_power_on(struct ath_hw *ah)return false; } -ath9k_hw_read_revisions (ah); -return ath9k_hw_set_reset (ah,ATH9K_RESET_WARM ); }
drivers/net/wireless/ath/ath9k/recv.c +1 -3
@@ -439,9 +439,7 @@ u32 ath_calcrxfilter(struct ath_softc *sc)* mode interface or when in monitor mode. AP mode does not need this * since it receives all in-BSS frames anyway. */ -if (((sc->sc_ah->opmode !=NL80211_IFTYPE_AP ) && - (sc->rx.rxfilter &FIF_PROMISC_IN_BSS )) || - (sc->sc_ah->is_monitoring)) +if (sc->sc_ah->is_monitoring) rfilt |=ATH9K_RX_FILTER_PROM ;if (sc->rx.rxfilter &FIF_CONTROL )
drivers/net/wireless/rtl818x/rtl8187/dev.c +20 -5
@@ -871,23 +871,35 @@ static void rtl8187_work(struct work_struct *work)/* The RTL8187 returns the retry count through register 0xFFFA. In * addition, it appears to be a cumulative retry count, not the * value for the current TX packet. When multiple TX entries are -* queued, the retry count will be valid for the last one in the queue. -* The "error" should not matter for purposes of rate setting. */ +* waiting in the queue, the retry count will be the total for all. +* The "error" may matter for purposes of rate setting, but there is +* no other choice with this hardware. +*/ struct rtl8187_priv *priv = container_of(work, struct rtl8187_priv, work.work);struct ieee80211_tx_info *info;struct ieee80211_hw *dev = priv->dev;static u16 retry;u16 tmp; +u16 avg_retry; +int length;mutex_lock (&priv->conf_mutex); tmp =rtl818x_ioread16 (priv, (__le16 *)0xFFFA ); + length =skb_queue_len (&priv->b_tx_status.queue); +if (unlikely (!length)) + length =1 ; +if (unlikely (tmp < retry)) + tmp = retry; + avg_retry = (tmp - retry) / length;while (skb_queue_len (&priv->b_tx_status.queue) >0 ) {struct sk_buff *old_skb; old_skb =skb_dequeue (&priv->b_tx_status.queue); info =IEEE80211_SKB_CB (old_skb); - info->status.rates[0 ].count = tmp - retry +1 ; + info->status.rates[0 ].count = avg_retry +1 ; +if (info->status.rates[0 ].count >RETRY_COUNT ) + info->flags &= ~IEEE80211_TX_STAT_ACK ;ieee80211_tx_status_irqsafe (dev, old_skb); } retry = tmp;
@@ -933,8 +945,8 @@ static int rtl8187_start(struct ieee80211_hw *dev)rtl818x_iowrite32 (priv, &priv->map->TX_CONF,RTL818X_TX_CONF_HW_SEQNUM |RTL818X_TX_CONF_DISREQQSIZE | - (7 <<8 /* short retry limit */ ) | - (7 <<0 /* long retry limit */ ) | + (RETRY_COUNT <<8 /* short retry limit */ ) | + (RETRY_COUNT <<0 /* long retry limit */ ) | (7 <<21 /* MAX TX DMA */ ));rtl8187_init_urbs (dev);rtl8187b_init_status_urb (dev);
@@ -1378,6 +1390,9 @@ static int __devinit rtl8187_probe(struct usb_interface *intf, dev->flags =IEEE80211_HW_HOST_BROADCAST_PS_BUFFERING |IEEE80211_HW_SIGNAL_DBM |IEEE80211_HW_RX_INCLUDES_FCS ; +/* Initialize rate-control variables */ + dev->max_rates =1 ; + dev->max_rate_tries =RETRY_COUNT ; eeprom.data = dev; eeprom.register_read = rtl8187_eeprom_register_read;
drivers/net/wireless/rtl818x/rtl8187/rtl8187.h +2 -0
@@ -35,6 +35,8 @@#define RFKILL_MASK_8187_89_97 0x2#define RFKILL_MASK_8198 0x4 +#define RETRY_COUNT 7 +struct rtl8187_rx_info {struct urb *urb;struct ieee80211_hw *dev;
drivers/pci/pci-sysfs.c +1 -1
@@ -1088,7 +1088,7 @@ static int pci_create_capabilities_sysfs(struct pci_dev *dev) attr->write = write_vpd_attr; retval =sysfs_create_bin_file (&dev->dev.kobj, attr);if (retval) { -kfree (dev->vpd->attr); +kfree (attr);return retval; } dev->vpd->attr = attr;
drivers/pci/quirks.c +53 -60
141 lines not on this page · raw message
drivers/scsi/device_handler/scsi_dh_alua.c +2 -1
@@ -285,7 +285,8 @@ static void stpg_endio(struct request *req, int error) print_alua_state(h->state)); } done: -blk_put_request (req); + req->end_io_data =NULL ; +__blk_put_request (req->q, req);if (h->callback_fn) { h->callback_fn (h->callback_data, err); h->callback_fn = h->callback_data =NULL ;
drivers/staging/tidspbridge/rmgr/proc.c +14 -5
@@ -781,12 +781,14 @@ int proc_begin_dma(void *hprocessor, void *pmpu_addr, u32 ul_size, (u32 )pmpu_addr, ul_size, dir); +mutex_lock (&proc_lock); +/* find requested memory are in cached mapping information */ map_obj =find_containing_mapping (pr_ctxt, (u32 ) pmpu_addr, ul_size);if (!map_obj) {pr_err ("%s: find_containing_mapping failed\n" , __func__); status = -EFAULT ; - goto err_out; + goto no_map; }if (memory_give_ownership (map_obj, (u32 ) pmpu_addr, ul_size, dir)) {
@@ -795,6 +797,8 @@ int proc_begin_dma(void *hprocessor, void *pmpu_addr, u32 ul_size, status = -EFAULT ; } +no_map: +mutex_unlock (&proc_lock); err_out:return status;
@@ -819,21 +823,24 @@ int proc_end_dma(void *hprocessor, void *pmpu_addr, u32 ul_size, (u32 )pmpu_addr, ul_size, dir); +mutex_lock (&proc_lock); +/* find requested memory are in cached mapping information */ map_obj =find_containing_mapping (pr_ctxt, (u32 ) pmpu_addr, ul_size);if (!map_obj) {pr_err ("%s: find_containing_mapping failed\n" , __func__); status = -EFAULT ; - goto err_out; + goto no_map; }if (memory_regain_ownership (map_obj, (u32 ) pmpu_addr, ul_size, dir)) {pr_err ("%s: InValid address parameters %p %x\n" , __func__, pmpu_addr, ul_size); status = -EFAULT ; - goto err_out; } +no_map: +mutex_unlock (&proc_lock); err_out:return status; }
@@ -1726,9 +1733,8 @@ int proc_un_map(void *hprocessor, void *map_addr, (p_proc_object->hbridge_context, va_align, size_align); } -mutex_unlock (&proc_lock);if (status) - goto func_end; + goto unmap_failed;/* * A successful unmap should be followed by removal of map_obj
@@ -1737,6 +1743,9 @@ int proc_un_map(void *hprocessor, void *map_addr,*/ remove_mapping_information (pr_ctxt, (u32 ) map_addr, size_align); +unmap_failed: +mutex_unlock (&proc_lock); + func_end:dev_dbg (bridge,"%s: hprocessor: 0x%p map_addr: 0x%p status: 0x%x\n" , __func__, hprocessor, map_addr, status);
drivers/staging/winbond/core.h +1 -0
@@ -3,6 +3,7 @@#include <linux/wireless.h> #include <linux/types.h> +#include <linux/delay.h> #include "wbhal.h" #include "mto.h"
drivers/target/target_core_cdb.c +7 -1
@@ -667,7 +667,13 @@ target_emulate_readcapacity(struct se_cmd *cmd) {struct se_device *dev =SE_DEV (cmd);unsigned char *buf = cmd->t_task->t_task_buf; -u32 blocks = dev->transport->get_blocks (dev); +unsigned long long blocks_long = dev->transport->get_blocks (dev); +u32 blocks; + +if (blocks_long >=0x00000000ffffffff ) + blocks =0xffffffff ; +else + blocks = (u32 )blocks_long; buf[0 ] = (blocks >>24 ) &0xff ; buf[1 ] = (blocks >>16 ) &0xff ;
drivers/tty/serial/8250.c +21 -12
@@ -954,6 +954,23 @@ static int broken_efr(struct uart_8250_port *up)return 0 ; } +static inline int ns16550a_goto_highspeed (struct uart_8250_port *up) +{ +unsigned char status; + + status =serial_in (up,0x04 );/* EXCR2 */ +#define PRESL (x) ((x) & 0x30) +if (PRESL (status) ==0x10 ) { +/* already in high speed mode */ +return 0 ; + }else { + status &= ~0xB0 ;/* Disable LOCK, mask out PRESL[01] */ + status |=0x10 ;/* 1.625 divisor for baud_base --> 921600 */ +serial_outp (up,0x04 , status); + } +return 1 ; +} +/* * We know that the chip has FIFOs. Does it have an EFR? The * EFR is located in the same register position as the IIR and
@@ -1025,12 +1042,8 @@ static void autoconfig_16550a(struct uart_8250_port *up) quot =serial_dl_read (up); quot <<=3 ; - status1 =serial_in (up,0x04 );/* EXCR2 */ - status1 &= ~0xB0 ;/* Disable LOCK, mask out PRESL[01] */ - status1 |=0x10 ;/* 1.625 divisor for baud_base --> 921600 */ -serial_outp (up,0x04 , status1); - -serial_dl_write (up, quot); +if (ns16550a_goto_highspeed (up)) +serial_dl_write (up, quot);serial_outp (up,UART_LCR ,0 );
@@ -3025,17 +3038,13 @@ void serial8250_resume_port(int line)struct uart_8250_port *up = &serial8250_ports[line];if (up->capabilities &UART_NATSEMI ) { -unsigned char tmp; -/* Ensure it's still in high speed mode */ serial_outp (up,UART_LCR ,0xE0 ); - tmp =serial_in (up,0x04 );/* EXCR2 */ - tmp &= ~0xB0 ;/* Disable LOCK, mask out PRESL[01] */ - tmp |=0x10 ;/* 1.625 divisor for baud_base --> 921600 */ -serial_outp (up,0x04 , tmp); +ns16550a_goto_highspeed (up);serial_outp (up,UART_LCR ,0 ); + up->port.uartclk =921600 *16 ; }uart_resume_port (&serial8250_reg, &up->port); }
drivers/tty/serial/mrst_max3110.c +1 -1
@@ -51,7 +51,7 @@struct uart_max3110 {struct uart_port port;struct spi_device *spi; -char name[24 ]; +char name[SPI_NAME_SIZE ];wait_queue_head_t wq;struct task_struct *main_thread;
drivers/usb/core/hcd-pci.c +6 -7
@@ -363,8 +363,7 @@ static int check_root_hub_suspended(struct device *dev)struct pci_dev *pci_dev =to_pci_dev (dev);struct usb_hcd *hcd =pci_get_drvdata (pci_dev); -if (!(hcd->state ==HC_STATE_SUSPENDED || - hcd->state ==HC_STATE_HALT )) { +if (HCD_RH_RUNNING (hcd)) {dev_warn (dev,"Root hub is not suspended\n" );return -EBUSY ; }
@@ -386,7 +385,7 @@ static int suspend_common(struct device *dev, bool do_wakeup)if (retval)return retval; -if (hcd->driver->pci_suspend) { +if (hcd->driver->pci_suspend && !HCD_DEAD (hcd)) {/* Optimization: Don't suspend if a root-hub wakeup is * pending and it would cause the HCD to wake up anyway. */
@@ -427,7 +426,7 @@ static int resume_common(struct device *dev, int event)struct usb_hcd *hcd =pci_get_drvdata (pci_dev);int retval; -if (hcd->state !=HC_STATE_SUSPENDED ) { +if (HCD_RH_RUNNING (hcd)) {dev_dbg (dev,"can't resume, not suspended!\n" );return 0 ; }
@@ -442,7 +441,7 @@ static int resume_common(struct device *dev, int event)clear_bit (HCD_FLAG_SAW_IRQ , &hcd->flags); -if (hcd->driver->pci_resume) { +if (hcd->driver->pci_resume && !HCD_DEAD (hcd)) {if (event !=PM_EVENT_AUTO_RESUME )wait_for_companions (pci_dev, hcd);
@@ -475,10 +474,10 @@ static int hcd_pci_suspend_noirq(struct device *dev)pci_save_state (pci_dev); -/* If the root hub is HALTed rather than SUSPENDed, +/* If the root hub is dead rather than suspended, * disallow remote wakeup. */ -if (hcd->state ==HC_STATE_HALT ) +if (HCD_DEAD (hcd))device_set_wakeup_enable (dev,0 );dev_dbg (dev,"wakeup: %d\n" ,device_may_wakeup (dev));
drivers/usb/core/hcd.c +41 -14
134 lines not on this page · raw message
drivers/usb/core/urb.c +10 -1
@@ -366,7 +366,16 @@ int usb_submit_urb(struct urb *urb, gfp_t mem_flags)if (xfertype ==USB_ENDPOINT_XFER_ISOC ) {int n, len; -/* FIXME SuperSpeed isoc endpoints have up to 16 bursts */ +/* SuperSpeed isoc endpoints have up to 16 bursts of up to +* 3 packets each +*/ +if (dev->speed ==USB_SPEED_SUPER ) { +int burst =1 + ep->ss_ep_comp.bMaxBurst; +int mult =USB_SS_MULT (ep->ss_ep_comp.bmAttributes); + max *= burst; + max *= mult; + } +/* "high bandwidth" mode, 1-3 packets/uframe? */ if (dev->speed ==USB_SPEED_HIGH ) {int mult =1 + ((max >>11 ) &0x03 );
drivers/usb/host/ehci-hub.c +22 -1
@@ -106,6 +106,27 @@ static void ehci_handover_companion_ports(struct ehci_hcd *ehci) ehci->owned_ports =0 ; } +static int ehci_port_change (struct ehci_hcd *ehci) +{ +int i =HCS_N_PORTS (ehci->hcs_params); + +/* First check if the controller indicates a change event */ + +if (ehci_readl (ehci, &ehci->regs->status) &STS_PCD ) +return 1 ; + +/* +* Not all controllers appear to update this while going from D3 to D0, +* so check the individual port status registers as well +*/ + +while (i--) +if (ehci_readl (ehci, &ehci->regs->port_status[i]) &PORT_CSC ) +return 1 ; + +return 0 ; +} +static void ehci_adjust_port_wakeup_flags (struct ehci_hcd *ehci,bool suspending,bool do_wakeup) {
@@ -173,7 +194,7 @@ static void ehci_adjust_port_wakeup_flags(struct ehci_hcd *ehci, }/* Does the root hub have a port wakeup pending? */ -if (!suspending && (ehci_readl (ehci, &ehci->regs->status) &STS_PCD )) +if (!suspending &&ehci_port_change (ehci))usb_hcd_resume_root_hub (ehci_to_hcd (ehci));spin_unlock_irqrestore (&ehci->lock, flags);
drivers/usb/host/isp1760-hcd.c +16 -6
@@ -33,6 +33,7 @@ struct isp1760_hcd {struct inter_packet_info atl_ints[32 ];struct inter_packet_info int_ints[32 ];struct memory_chunk memory_pool[BLOCKS ]; +u32 atl_queued;/* periodic schedule support */ #define DEFAULT_I_TDPS 1024
@@ -850,6 +851,11 @@ static void enqueue_an_ATL_packet(struct usb_hcd *hcd, struct isp1760_qh *qh, skip_map &= ~queue_entry;isp1760_writel (skip_map, hcd->regs +HC_ATL_PTD_SKIPMAP_REG ); + priv->atl_queued++; +if (priv->atl_queued ==2 ) +isp1760_writel (INTERRUPT_ENABLE_SOT_MASK , + hcd->regs +HC_INTERRUPT_ENABLE ); + buffstatus =isp1760_readl (hcd->regs +HC_BUFFER_STATUS_REG ); buffstatus |=ATL_BUFFER ;isp1760_writel (buffstatus, hcd->regs +HC_BUFFER_STATUS_REG );
@@ -992,6 +998,7 @@ static void do_atl_int(struct usb_hcd *usb_hcd)u32 dw3; status =0 ; + priv->atl_queued--; queue_entry =__ffs (done_map); done_map &= ~(1 << queue_entry);
@@ -1054,11 +1061,6 @@ static void do_atl_int(struct usb_hcd *usb_hcd)* device is not able to send data fast enough. * This happens mostly on slower hardware. */ -printk (KERN_NOTICE "Reloading ptd %p/%p... qh %p read: " -"%d of %zu done: %08x cur: %08x\n" , qtd, - urb, qh,PTD_XFERRED_LENGTH (dw3), - qtd->length, done_map, - (1 << queue_entry));/* RL counter = ERR counter */ dw3 &= ~(0xf <<19 );
@@ -1086,6 +1088,11 @@ static void do_atl_int(struct usb_hcd *usb_hcd)priv_write_copy (priv, (u32 *)&ptd, usb_hcd->regs + atl_regs,sizeof (ptd)); + priv->atl_queued++; +if (priv->atl_queued ==2 ) +isp1760_writel (INTERRUPT_ENABLE_SOT_MASK , + usb_hcd->regs +HC_INTERRUPT_ENABLE ); + buffstatus =isp1760_readl (usb_hcd->regs +HC_BUFFER_STATUS_REG ); buffstatus |=ATL_BUFFER ;
@@ -1191,6 +1198,9 @@ static void do_atl_int(struct usb_hcd *usb_hcd) skip_map =isp1760_readl (usb_hcd->regs +HC_ATL_PTD_SKIPMAP_REG ); } +if (priv->atl_queued <=1 ) +isp1760_writel (INTERRUPT_ENABLE_MASK , + usb_hcd->regs +HC_INTERRUPT_ENABLE ); }static void do_intl_int (struct usb_hcd *usb_hcd)
@@ -1770,7 +1780,7 @@ static irqreturn_t isp1760_irq(struct usb_hcd *usb_hcd) goto leave;isp1760_writel (imask, usb_hcd->regs +HC_INTERRUPT_REG ); -if (imask &HC_ATL_INT ) +if (imask & (HC_ATL_INT |HC_SOT_INT ))do_atl_int (usb_hcd);if (imask &HC_INTL_INT )
drivers/usb/host/isp1760-hcd.h +1 -0
@@ -69,6 +69,7 @@ void deinit_kmem_cache(void);#define HC_INTERRUPT_ENABLE 0x314#define INTERRUPT_ENABLE_MASK (HC_INTL_INT | HC_ATL_INT | HC_EOT_INT) +#define INTERRUPT_ENABLE_SOT_MASK (HC_INTL_INT | HC_SOT_INT | HC_EOT_INT)#define HC_ISO_INT (1 << 9)#define HC_ATL_INT (1 << 8)
drivers/usb/host/xhci-ring.c +40 -3
76 lines not on this page · raw message
drivers/usb/host/xhci.h +9 -0
@@ -644,6 +644,9 @@ struct xhci_ep_ctx {#define AVG_TRB_LENGTH_FOR_EP (p) ((p) & 0xffff)#define MAX_ESIT_PAYLOAD_FOR_EP (p) (((p) & 0xffff) << 16) +/* deq bitmasks */ +#define EP_CTX_CYCLE_MASK (1 << 0) +/** * struct xhci_input_control_context
@@ -746,6 +749,12 @@ struct xhci_virt_ep {struct timer_list stop_cmd_timer;int stop_cmds_pending;struct xhci_hcd *xhci; +/* Dequeue pointer and dequeue segment for a submitted Set TR Dequeue +* command. We'll need to update the ring's dequeue segment and dequeue +* pointer after the command completes. +*/ +struct xhci_segment *queued_deq_seg; +union xhci_trb *queued_deq_ptr;/* * Sometimes the xHC can not process isochronous endpoint ring quickly * enough, and it will miss some isoc tds on the ring and generate
drivers/usb/serial/ch341.c +1 -0
@@ -75,6 +75,7 @@ static int debug;static const struct usb_device_id id_table[] = { {USB_DEVICE (0x4348 ,0x5523 ) }, {USB_DEVICE (0x1a86 ,0x7523 ) }, + {USB_DEVICE (0x1a86 ,0x5523 ) }, { }, };MODULE_DEVICE_TABLE (usb, id_table);
drivers/usb/serial/kobil_sct.c +1 -1
@@ -372,7 +372,7 @@ static void kobil_read_int_callback(struct urb *urb) } tty =tty_port_tty_get (&port->port); -if (urb->actual_length) { +if (tty && urb->actual_length) {/* BEGIN DEBUG */ /*
drivers/usb/serial/option.c +2 -1
@@ -652,7 +652,8 @@ static const struct usb_device_id option_ids[] = { { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0028, 0xff, 0xff, 0xff) }, { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0029, 0xff, 0xff, 0xff) }, { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0030, 0xff, 0xff, 0xff) }, - { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, ZTE_PRODUCT_MF626, 0xff, 0xff, 0xff) }, + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, ZTE_PRODUCT_MF626, 0xff, + 0xff, 0xff), .driver_info = (kernel_ulong_t)&four_g_w14_blacklist }, { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0032, 0xff, 0xff, 0xff) }, { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0033, 0xff, 0xff, 0xff) }, { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0034, 0xff, 0xff, 0xff) },
drivers/usb/serial/usb-serial.c +2 -3
@@ -911,9 +911,8 @@ int usb_serial_probe(struct usb_interface *interface,dev_err (&interface->dev,"No free urbs available\n" ); goto probe_error; } - buffer_size = serial->type->bulk_in_size; -if (!buffer_size) - buffer_size =le16_to_cpu (endpoint->wMaxPacketSize); + buffer_size =max_t (int, serial->type->bulk_in_size, +le16_to_cpu (endpoint->wMaxPacketSize)); port->bulk_in_size = buffer_size; port->bulk_in_endpointAddress = endpoint->bEndpointAddress; port->bulk_in_buffer =kmalloc (buffer_size,GFP_KERNEL );
fs/dcache.c +43 -52
133 lines not on this page · raw message
fs/ext3/namei.c +1 -1
@@ -1540,8 +1540,8 @@ static int ext3_dx_add_entry(handle_t *handle, struct dentry *dentry, goto cleanup; node2 = (struct dx_node *)(bh2->b_data); entries2 = node2->entries; +memset (&node2->fake,0 ,sizeof (struct fake_dirent )); node2->fake.rec_len =ext3_rec_len_to_disk (sb->s_blocksize); - node2->fake.inode =0 ;BUFFER_TRACE (frame->bh,"get_write_access" ); err =ext3_journal_get_write_access (handle, frame->bh);if (err)
fs/partitions/osf.c +1 -1
@@ -10,7 +10,7 @@#include "check.h" #include "osf.h" -#define MAX_OSF_PARTITIONS 8 +#define MAX_OSF_PARTITIONS 18int osf_partition (struct parsed_partitions *state) {
include/linux/ftrace.h +2 -0
@@ -428,6 +428,7 @@ extern void unregister_ftrace_graph(void);extern void ftrace_graph_init_task (struct task_struct *t);extern void ftrace_graph_exit_task (struct task_struct *t); +extern void ftrace_graph_init_idle_task (struct task_struct *t,int cpu);static inline int task_curr_ret_stack (struct task_struct *t) {
@@ -451,6 +452,7 @@ static inline void unpause_graph_tracing(void)static inline void ftrace_graph_init_task (struct task_struct *t) { }static inline void ftrace_graph_exit_task (struct task_struct *t) { } +static inline void ftrace_graph_init_idle_task (struct task_struct *t,int cpu) { }static inline int register_ftrace_graph (trace_func_graph_ret_t retfunc,trace_func_graph_ent_t entryfunc)
include/linux/hid.h +1 -1
@@ -638,7 +638,7 @@ struct hid_driver { struct hid_input *hidinput, struct hid_field *field, struct hid_usage *usage, unsigned long **bit, int *max);void (*feature_mapping)(struct hid_device *hdev, -struct hid_input *hidinput,struct hid_field *field, +struct hid_field *field,struct hid_usage *usage);#ifdef CONFIG_PM int (*suspend)(struct hid_device *hdev,pm_message_t message);
include/linux/usb/ch9.h +2 -0
@@ -585,6 +585,8 @@ struct usb_ss_ep_comp_descriptor {#define USB_DT_SS_EP_COMP_SIZE 6/* Bits 4:0 of bmAttributes if this is a bulk endpoint */ #define USB_SS_MAX_STREAMS (p) (1 << (p & 0x1f)) +/* Bits 1:0 of bmAttributes if this is an isoc endpoint */ +#define USB_SS_MULT (p) (1 + ((p) & 0x3))/*-------------------------------------------------------------------------*/
include/linux/usb/hcd.h +4 -0
@@ -99,6 +99,8 @@ struct usb_hcd {#define HCD_FLAG_POLL_RH 2/* poll for rh status? */ #define HCD_FLAG_POLL_PENDING 3/* status has changed? */ #define HCD_FLAG_WAKEUP_PENDING 4/* root hub is resuming? */ +#define HCD_FLAG_RH_RUNNING 5/* root hub is running? */ +#define HCD_FLAG_DEAD 6/* controller has died? */ /* The flags can be tested using these macros; they are likely to * be slightly faster than test_bit().
@@ -108,6 +110,8 @@ struct usb_hcd {#define HCD_POLL_RH (hcd) ((hcd)->flags & (1U << HCD_FLAG_POLL_RH))#define HCD_POLL_PENDING (hcd) ((hcd)->flags & (1U << HCD_FLAG_POLL_PENDING))#define HCD_WAKEUP_PENDING (hcd) ((hcd)->flags & (1U << HCD_FLAG_WAKEUP_PENDING)) +#define HCD_RH_RUNNING (hcd) ((hcd)->flags & (1U << HCD_FLAG_RH_RUNNING)) +#define HCD_DEAD (hcd) ((hcd)->flags & (1U << HCD_FLAG_DEAD))/* Flags that get set only during HCD registration or removal. */ unsigned rh_registered:1;/* is root hub registered? */
include/linux/usb/serial.h +2 -1
@@ -191,7 +191,8 @@ static inline void usb_set_serial_data(struct usb_serial *serial, void *data)* @id_table: pointer to a list of usb_device_id structures that define all * of the devices this structure can support. * @num_ports: the number of different ports this device will have. -* @bulk_in_size: bytes to allocate for bulk-in buffer (0 = end-point size) +* @bulk_in_size: minimum number of bytes to allocate for bulk-in buffer +* (0 = end-point size) * @bulk_out_size: bytes to allocate for bulk-out buffer (0 = end-point size) * @calc_num_ports: pointer to a function to determine how many ports this * device has dynamically. It will be called after the probe()
kernel/perf_event.c +3 -1
@@ -4567,7 +4567,7 @@ static int perf_exclude_event(struct perf_event *event, struct pt_regs *regs) {if (event->hw.state &PERF_HES_STOPPED ) -return 0 ; +return 1 ;if (regs) {if (event->attr.exclude_user &&user_mode (regs))
@@ -4923,6 +4923,8 @@ static int perf_tp_event_match(struct perf_event *event, struct perf_sample_data *data, struct pt_regs *regs) { +if (event->hw.state &PERF_HES_STOPPED ) +return 0 ;/* * All tracepoints are from kernel-space. */
kernel/sched.c +1 -1
@@ -5572,7 +5572,7 @@ void __cpuinit init_idle(struct task_struct *idle, int cpu)* The idle tasks have their own, simple scheduling class: */ idle->sched_class = &idle_sched_class; -ftrace_graph_init_task (idle); +ftrace_graph_init_idle_task (idle, cpu); }/*
kernel/smp.c +44 -11
86 lines not on this page · raw message
kernel/trace/ftrace.c +45 -7
70 lines not on this page · raw message
net/sunrpc/clnt.c +3 -1
@@ -436,7 +436,9 @@ void rpc_killall_tasks(struct rpc_clnt *clnt)if (!(rovr->tk_flags &RPC_TASK_KILLED )) { rovr->tk_flags |=RPC_TASK_KILLED ;rpc_exit (rovr, -EIO ); -rpc_wake_up_queued_task (rovr->tk_waitqueue, rovr); +if (RPC_IS_QUEUED (rovr)) +rpc_wake_up_queued_task (rovr->tk_waitqueue, + rovr); } }spin_unlock (&clnt->cl_lock);
net/sunrpc/sched.c +6 -8
@@ -637,14 +637,12 @@ static void __rpc_execute(struct rpc_task *task) save_callback = task->tk_callback; task->tk_callback =NULL ;save_callback (task); - } - -/* -* Perform the next FSM step. -* tk_action may be NULL when the task has been killed -* by someone else. -*/ -if (!RPC_IS_QUEUED (task)) { + }else { +/* +* Perform the next FSM step. +* tk_action may be NULL when the task has been killed +* by someone else. +*/ if (task->tk_action ==NULL )break ; task->tk_action (task);
security/tomoyo/file.c +1 -4
@@ -927,7 +927,7 @@ int tomoyo_check_open_permission(struct tomoyo_domain_info *domain, struct path *path, const int flag) {const u8 acc_mode =ACC_MODE (flag); -int error = -ENOMEM ; +int error =0 ;struct tomoyo_path_info buf;struct tomoyo_request_info r;int idx;
@@ -938,9 +938,6 @@ int tomoyo_check_open_permission(struct tomoyo_domain_info *domain, buf.name =NULL ; r.mode =TOMOYO_CONFIG_DISABLED ; idx =tomoyo_read_lock (); -if (!tomoyo_get_realpath (&buf, path)) - goto out; - error =0 ;/* * If the filename is specified by "deny_rewrite" keyword, * we need to check "allow_rewrite" permission when the filename is not
sound/drivers/aloop.c +9 -10
@@ -482,8 +482,9 @@ static unsigned int loopback_pos_update(struct loopback_cable *cable) cable->streams[SNDRV_PCM_STREAM_CAPTURE ];unsigned long delta_play =0 , delta_capt =0 ;unsigned int running; +unsigned long flags; -spin_lock (&cable->lock); +spin_lock_irqsave (&cable->lock, flags); running = cable->running ^ cable->pause;if (running & (1 <<SNDRV_PCM_STREAM_PLAYBACK )) { delta_play = jiffies - dpcm_play->last_jiffies;
@@ -495,10 +496,8 @@ static unsigned int loopback_pos_update(struct loopback_cable *cable) dpcm_capt->last_jiffies += delta_capt; } -if (delta_play ==0 && delta_capt ==0 ) { -spin_unlock (&cable->lock); -return running; - } +if (delta_play ==0 && delta_capt ==0 ) + goto unlock;if (delta_play > delta_capt) { loopback_bytepos_update(dpcm_play, delta_play - delta_capt,
@@ -510,14 +509,14 @@ static unsigned int loopback_pos_update(struct loopback_cable *cable) delta_capt = delta_play; } -if (delta_play ==0 && delta_capt ==0 ) { -spin_unlock (&cable->lock); -return running; - } +if (delta_play ==0 && delta_capt ==0 ) + goto unlock; +/* note delta_capt == delta_play at this moment */ loopback_bytepos_update (dpcm_capt, delta_capt,BYTEPOS_UPDATE_COPY );loopback_bytepos_update (dpcm_play, delta_play,BYTEPOS_UPDATE_POSONLY ); -spin_unlock (&cable->lock); + unlock: +spin_unlock_irqrestore (&cable->lock, flags);return running; }
sound/pci/asihpi/hpioctl.c +5 -0
@@ -155,6 +155,11 @@ long asihpi_hpi_ioctl(struct file *file, unsigned int cmd, unsigned long arg) goto out; } +if (hm->h.adapter_index >=HPI_MAX_ADAPTERS ) { + err = -EINVAL ; + goto out; + } + pa = &adapters[hm->h.adapter_index]; hr->h.size =0 ;if (hm->h.object ==HPI_OBJ_SUBSYSTEM ) {
sound/pci/ctxfi/ctatc.c +1 -1
@@ -869,7 +869,7 @@ spdif_passthru_playback_setup(struct ct_atc *atc, struct ct_atc_pcm *apcm)mutex_lock (&atc->atc_mutex); dao->ops->get_spos (dao, &status);if (((status >>24 ) &IEC958_AES3_CON_FS ) != iec958_con_fs) { - status &= ((~IEC958_AES3_CON_FS ) <<24 ); + status &= ~(IEC958_AES3_CON_FS <<24 ); status |= (iec958_con_fs <<24 ); dao->ops->set_spos (dao, status); dao->ops->commit_write (dao);
sound/pci/ctxfi/ctdaio.c +2 -0
@@ -176,6 +176,7 @@ static int dao_set_left_input(struct dao *dao, struct rsc *input)if (!entry)return -ENOMEM ; + dao->ops->clear_left_input (dao);/* Program master and conjugate resources */ input->ops->master (input); daio->rscl.ops->master (&daio->rscl);
@@ -204,6 +205,7 @@ static int dao_set_right_input(struct dao *dao, struct rsc *input)if (!entry)return -ENOMEM ; + dao->ops->clear_right_input (dao);/* Program master and conjugate resources */ input->ops->master (input); daio->rscr.ops->master (&daio->rscr);
sound/pci/ctxfi/ctmixer.c +5 -14
@@ -566,19 +566,6 @@ static int ct_spdif_get_mask(struct snd_kcontrol *kcontrol,return 0 ; } -static int ct_spdif_default_get (struct snd_kcontrol *kcontrol, -struct snd_ctl_elem_value *ucontrol) -{ -unsigned int status =SNDRV_PCM_DEFAULT_CON_SPDIF ; - - ucontrol->value.iec958.status[0 ] = (status >>0 ) &0xff ; - ucontrol->value.iec958.status[1 ] = (status >>8 ) &0xff ; - ucontrol->value.iec958.status[2 ] = (status >>16 ) &0xff ; - ucontrol->value.iec958.status[3 ] = (status >>24 ) &0xff ; - -return 0 ; -} -static int ct_spdif_get (struct snd_kcontrol *kcontrol,struct snd_ctl_elem_value *ucontrol) {
@@ -586,6 +573,10 @@ static int ct_spdif_get(struct snd_kcontrol *kcontrol,unsigned int status; atc->spdif_out_get_status (atc, &status); + +if (status ==0 ) + status =SNDRV_PCM_DEFAULT_CON_SPDIF ; + ucontrol->value.iec958.status[0 ] = (status >>0 ) &0xff ; ucontrol->value.iec958.status[1 ] = (status >>8 ) &0xff ; ucontrol->value.iec958.status[2 ] = (status >>16 ) &0xff ;
@@ -629,7 +620,7 @@ static struct snd_kcontrol_new iec958_default_ctl = { .name = SNDRV_CTL_NAME_IEC958("", PLAYBACK, DEFAULT), .count = 1, .info = ct_spdif_info, - .get = ct_spdif_default_get, + .get = ct_spdif_get, .put = ct_spdif_put, .private_value = MIXER_IEC958_DEFAULT };
sound/pci/hda/patch_realtek.c +56 -23
165 lines not on this page · raw message
sound/pci/hda/patch_sigmatel.c +8 -3
@@ -757,7 +757,7 @@ static int stac92xx_mux_enum_put(struct snd_kcontrol *kcontrol, struct snd_ctl_estruct sigmatel_spec *spec = codec->spec;unsigned int adc_idx =snd_ctl_get_ioffidx (kcontrol, &ucontrol->id);const struct hda_input_mux *imux = spec->input_mux; -unsigned int idx, prev_idx; +unsigned int idx, prev_idx, didx; idx = ucontrol->value.enumerated.item[0 ];if (idx >= imux->num_items)
@@ -769,7 +769,8 @@ static int stac92xx_mux_enum_put(struct snd_kcontrol *kcontrol, struct snd_ctl_esnd_hda_codec_write_cache (codec, spec->mux_nids[adc_idx],0 ,AC_VERB_SET_CONNECT_SEL , imux->items[idx].index); -if (prev_idx >= spec->num_analog_muxes) { +if (prev_idx >= spec->num_analog_muxes && + spec->mux_nids[adc_idx] != spec->dmux_nids[adc_idx]) { imux = spec->dinput_mux;/* 0 = analog */ snd_hda_codec_write_cache(codec,
@@ -779,9 +780,13 @@ static int stac92xx_mux_enum_put(struct snd_kcontrol *kcontrol, struct snd_ctl_e } }else { imux = spec->dinput_mux; +/* first dimux item is hardcoded to select analog imux, +* so lets skip it +*/ + didx = idx - spec->num_analog_muxes +1 ;snd_hda_codec_write_cache (codec, spec->dmux_nids[adc_idx],0 ,AC_VERB_SET_CONNECT_SEL , - imux->items[idx -1 ].index); + imux->items[didx].index); } spec->cur_mux[adc_idx] = idx;return 1 ;
sound/soc/pxa/z2.c +1 -1
@@ -147,7 +147,7 @@ static int z2_wm8750_init(struct snd_soc_pcm_runtime *rtd)snd_soc_dapm_disable_pin (dapm,"LINPUT3" );snd_soc_dapm_disable_pin (dapm,"RINPUT3" );snd_soc_dapm_disable_pin (dapm,"OUT3" ); -snd_soc_dapm_disable_pin (dapm,"MONO" ); +snd_soc_dapm_disable_pin (dapm,"MONO1" );/* Add z2 specific widgets */ snd_soc_dapm_new_controls(dapm, wm8750_dapm_widgets,
tools/perf/util/PERF-VERSION-GEN +4 -4
@@ -23,10 +23,10 @@ if test -d ../../.git -o -f ../../.git && then VN=$(echo "$VN" | sed -e 's/-/./g'); else - eval `grep '^VERSION\s*=' ../../Makefile|tr -d ' '` - eval `grep '^PATCHLEVEL\s*=' ../../Makefile|tr -d ' '` - eval `grep '^SUBLEVEL\s*=' ../../Makefile|tr -d ' '` - eval `grep '^EXTRAVERSION\s*=' ../../Makefile|tr -d ' '` + eval $(grep '^VERSION[[:space:]]*=' ../../Makefile|tr -d ' ') + eval $(grep '^PATCHLEVEL[[:space:]]*=' ../../Makefile|tr -d ' ') + eval $(grep '^SUBLEVEL[[:space:]]*=' ../../Makefile|tr -d ' ') + eval $(grep '^EXTRAVERSION[[:space:]]*=' ../../Makefile|tr -d ' ') VN="${VERSION}.${PATCHLEVEL}.${SUBLEVEL}${EXTRAVERSION}" fi
I'm announcing the release of the 2.6.38.1 kernel.
All users of the 2.6.38 kernel series must upgrade.
The updated 2.6.38.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-2.6.38.y.git
and can be browsed at the normal kernel.org git web browser:
http://git.kernel.org/?p=linux/kernel/git/stable/linux-2.6.38.y.git;a=summarythanks,
greg k-h
------------
Documentation/i2c/instantiating-devices | 2 Makefile | 2 arch/arm/mach-davinci/board-dm644x-evm.c | 8 - arch/microblaze/include/asm/uaccess.h | 8 - arch/parisc/kernel/irq.c | 2 arch/powerpc/include/asm/reg.h | 1 arch/powerpc/kernel/perf_event.c | 24 +++++ arch/x86/include/asm/pgtable-3level.h | 11 -- arch/x86/kernel/alternative.c | 7 + arch/x86/kernel/e820.c | 10 +- arch/x86/kernel/early-quirks.c | 7 + arch/x86/kernel/entry_64.S | 2 arch/x86/mm/pgtable.c | 3 drivers/ata/ahci.c | 3 drivers/ata/libata-eh.c | 2 drivers/gpu/drm/drm_sysfs.c | 7 + drivers/gpu/drm/i915/i915_irq.c | 9 + drivers/gpu/drm/i915/i915_reg.h | 5 - drivers/gpu/drm/radeon/atombios_crtc.c | 4 drivers/hid/Kconfig | 14 ++- drivers/hid/Makefile | 2 drivers/hid/hid-apple.c | 6 + drivers/hid/hid-axff.c | 31 ++++++ drivers/hid/hid-core.c | 9 + drivers/hid/hid-ids.h | 4 drivers/hid/hid-input.c | 30 ++++-- drivers/hid/hid-magicmouse.c | 4 drivers/hid/hid-multitouch.c | 2 drivers/hid/hid-ortek.c | 3 drivers/hwmon/sht15.c | 4 drivers/infiniband/core/cm.c | 1 drivers/infiniband/core/cma.c | 15 +++ drivers/input/mouse/bcm5974.c | 20 ++++ drivers/mmc/core/sdio.c | 8 + drivers/mmc/host/sdhci-pci.c | 8 + drivers/net/wireless/ath/ath9k/hw.c | 21 ++-- drivers/net/wireless/ath/ath9k/recv.c | 4 drivers/net/wireless/rtl818x/rtl8187/dev.c | 25 ++++- drivers/net/wireless/rtl818x/rtl8187/rtl8187.h | 2 drivers/pci/pci-sysfs.c | 2 drivers/pci/quirks.c | 113 +++++++++++-------------- drivers/scsi/device_handler/scsi_dh_alua.c | 3 drivers/staging/tidspbridge/rmgr/proc.c | 19 +++- drivers/staging/winbond/core.h | 1 drivers/target/target_core_cdb.c | 8 + drivers/tty/serial/8250.c | 33 ++++--- drivers/tty/serial/mrst_max3110.c | 2 drivers/usb/core/hcd-pci.c | 13 +- drivers/usb/core/hcd.c | 55 +++++++++--- drivers/usb/core/urb.c | 11 ++ drivers/usb/host/ehci-hub.c | 23 ++++- drivers/usb/host/isp1760-hcd.c | 22 +++- drivers/usb/host/isp1760-hcd.h | 1 drivers/usb/host/xhci-ring.c | 43 ++++++++- drivers/usb/host/xhci.h | 9 + drivers/usb/serial/ch341.c | 1 drivers/usb/serial/kobil_sct.c | 2 drivers/usb/serial/option.c | 3 drivers/usb/serial/usb-serial.c | 5 - fs/dcache.c | 95 +++++++++------------ fs/ext3/namei.c | 2 fs/partitions/osf.c | 2 include/linux/ftrace.h | 2 include/linux/hid.h | 2 include/linux/usb/ch9.h | 2 include/linux/usb/hcd.h | 4 include/linux/usb/serial.h | 3 kernel/perf_event.c | 4 kernel/sched.c | 2 kernel/smp.c | 55 +++++++++--- kernel/trace/ftrace.c | 52 +++++++++-- net/sunrpc/clnt.c | 4 net/sunrpc/sched.c | 14 +-- security/tomoyo/file.c | 5 - sound/drivers/aloop.c | 19 +--- sound/pci/asihpi/hpioctl.c | 5 + sound/pci/ctxfi/ctatc.c | 2 sound/pci/ctxfi/ctdaio.c | 2 sound/pci/ctxfi/ctmixer.c | 19 +--- sound/pci/hda/patch_realtek.c | 79 ++++++++++++----- sound/pci/hda/patch_sigmatel.c | 11 +- sound/soc/pxa/z2.c | 2 tools/perf/util/PERF-VERSION-GEN | 8 - 83 files changed, 756 insertions(+), 338 deletions(-)
Alan Stern (2):
USB: serial drivers need to use larger bulk-in buffers
USB: move usbcore away from hcd->state
Alex Deucher (1):
drm/radeon/kms: fix typo in atom overscan setup
Alexander van Heukelum (1):
x86, binutils, xen: Fix another wrong size directive
Andreas Herrmann (1):
x86, quirk: Fix SB600 revision check
Andy Botting (1):
Input: bcm5974 - add support for MacBookPro8
Anton Blanchard (1):
perf, powerpc: Handle events that raise an exception without overflowing
Ben Hutchings (1):
PCI: sysfs: Fix failure path for addition of "vpd" attribute
Brandeburg, Jesse (1):
PCI: remove quirk for pre-production systems
Chris Wilson (2):
drm/i915: Replace vblank PM QoS with "Interrupt-Based AGPBUSY#"
drm: Hold the mode mutex whilst probing for sysfs status
Dan Carpenter (1):
serial: mrst_max3110: make buffer larger
Dan Rosenberg (1):
ALSA: sound/pci/asihpi: check adapter index in hpi_ioctl
David Henningsson (4):
ALSA: HDA: Enable surround and subwoofer on Lenovo Ideapad Y530
ALSA: HDA: Fix volume control naming for surround speakers on Realtek auto-parser
ALSA: HDA: Fixup unnecessary volume control index on Realtek ALC88x
ALSA: HDA: Realtek ALC88x: Do not over-initialize speakers and hp that are primary outputs
Dmitry Torokhov (1):
HID: ACRUX - activate the device immediately after binding
Eric Sandeen (1):
ext3: Always set dx_node's fake_dirent explicitly.
Felipe Contreras (1):
staging: tidspbridge: protect dmm_map properly
Felix Fietkau (1):
ath9k: remove support for the FIF_PROMISC_IN_BSS filter flag
Frederic Weisbecker (2):
perf: Fix the software events state check
perf: Handle stopped state with tracepoints
Greg Kroah-Hartman (1):
Linux 2.6.38.1
Henrik Rydberg (2):
HID: hid-magicmouse: Correct touch orientation direction
HID: Do not create input devices for feature reports
Herton Ronaldo Krzesinski (2):
USB: serial: option: Apply OPTION_BLACKLIST_SENDSETUP also for ZTE MF626
HID: add support for Ortek PKB-1700
Jeff Mahoney (1):
staging: winbond: needs <linux/delay.h> for msleep and friends
Jiri Slaby (3):
USB: serial/kobil_sct, fix potential tty NULL dereference
PCI: add more checking to ICH region quirks
PCI: do not create quirk I/O regions below PCIBIOS_MIN_IO for ICH
Joseph Gruher (1):
scsi_dh_alua: fix deadlock in stpg_endio
Josh Hunt (1):
perf tools: Version incorrect with some versions of grep
Kamal Mostafa (2):
x86: Fix panic when handling "mem={invalid}" param
x86: Emit "mem=nopentium ignored" warning when not supported
Larry Finger (1):
rtl8187: Change rate-control feedback
Linus Torvalds (2):
dcache.c: create helper function for duplicated functionality Increase OSF partition limit from 8 to 18
Manoj Iyer (1):
mmc: sdhci: Add Ricoh e823 PCI ID
Mathieu Desnoyers (1):
x86: stop_machine_text_poke() should issue sync_core()
Matthew Garrett (1):
ehci: Check individual port status registers on resume
Milton Miller (3):
call_function_many: fix list delete vs add race
call_function_many: add missing ordering
smp_call_function_many: handle concurrent clearing of mask
Nicholas Bellinger (1):
target: Fix volume size misreporting for volumes > 2TB
Paul Zimmerman (1):
USB: Add support for SuperSpeed isoc endpoints
Per Jessen (1):
ahci: recognize Marvell 88se9125 PCIe SATA 6.0 Gb/s controller
Przemyslaw Bruski (3):
ALSA: ctxfi - Fix incorrect SPDIF status bit mask
ALSA: ctxfi - Fix SPDIF status retrieval
ALSA: ctxfi - Clear input settings before initialization
Roman Fietze (1):
i2c: Fix typo in instantiating-devices document
Sarah Sharp (2):
xhci: Update internal dequeue pointers after stalls.
xhci: Fix cycle bit calculation during stall handling.
Sean Hefty (2):
RDMA/cma: Fix crash in request handlers
IB/cm: Bump reference count on cm_id before invoking callback
Sebastian Andrzej Siewior (1):
USB: isp1760: Implement solution for erratum 2
Senthil Balasubramanian (2):
ath9k_hw: read and backup AR_WA register value even before chip reset on.
ath9k_hw: Fix incorrect macversion and macrev checks
Sergei Shtylyov (1):
davinci: DM644x EVM: register MUSB device earlier
Seth Heasley (1):
ahci: AHCI mode SATA patch for Intel Patsburg SATA RAID controller
Shaohua Li (1):
x86: Flush TLB if PGD entry is changed in i386 PAE mode
Stanislav Kinsbursky (1):
RPC: killing RPC tasks races fixed
Stefan Nilsson XK (1):
mmc: sdio: remember new card RCA when redetecting card
Steven J. Magnani (1):
microblaze: Fix /dev/zero corruption from __clear_user()
Steven Rostedt (1):
ftrace: Fix memory leak with function graph and cpu hotplug
Takashi Iwai (2):
ALSA: hda - Initialize special cases for input src in init phase
ALSA: aloop - Fix possible IRQ lock inversion
Tejun Heo (1):
libata: fix hotplug for drivers which don't implement LPM
Tetsuo Handa (1):
TOMOYO: Fix memory leak upon file open.
Thomas Gleixner (1):
fix per-cpu flag problem in the cpu affinity checkers
Trond Myklebust (2):
VFS: Fix the nfs sillyrename regression in kernel 2.6.38
SUNRPC: Ensure we always run the tk_callback before tk_action
Vasily Khoruzhick (1):
ASoC: PXA: Z2: Fix codec pin name
Vitaliy Kulikov (1):
ALSA: hda - fix digital mic selection in mixer on 92HD8X codecs
Vivien Didelot (1):
hwmon: (sht15) Fix integer overflow in humidity calculation
Yin Kangkai (2):
serial: also set the uartclk value in resume after goes to highspeed
serial: change the divisor latch only when prescalar actually changed
wangyanqing (1):
USB: serial: ch341: add new id