Linux Input/HID development
 help / color / mirror / Atom feed
* Re: Sony DualShock4 - basic functions work, but looking to improve support
From: David Herrmann @ 2013-12-08 14:41 UTC (permalink / raw)
  To: Simon Wood; +Cc: Linux Input, Antonio Ospite, Jiri Kosina
In-Reply-To: <10aade622f5593ec49af0256e3c60d83.squirrel@mungewell.org>

Hi

On Sat, Dec 7, 2013 at 9:43 PM,  <simon@mungewell.org> wrote:
>> Anyone here want to collaborate?
>
> I've decoded the majority of the HID stream including the multi-touch.

Nice! I already got my hands on one but will probably not find time
for it until February. However, I will gladly test any patches!

Also, could you write your findings down and maybe put it into
./Documentation/hid/? I'm not sure whether we put protocol data there
(Jiri?) but at least you could share the information on the list or
github. I would appreciate that a lot!

Thanks
David

^ permalink raw reply

* Re: synaptics: PS/2 touchpad isn't detected if a keyboard key is held down on boot
From: Andrey Moiseev @ 2013-12-08 15:57 UTC (permalink / raw)
  To: Dmitry Torokhov; +Cc: linux-input, linux-kernel, linux-hotplug
In-Reply-To: <52A351A7.5050407@gmail.com>

With i8042.reset=1, it works properly. Maybe this should be made the
default option? AFAIK, 8042 chip is not guaranteed to be sane and
clean on boot, even provided there's no messing with keyboard on boot.
Though, I don't understand why it flushes one byte on flush() (isn't
it thorough enough?) and then scancodes come and come from time to
time.

On Sat, Dec 7, 2013 at 8:49 PM, Andrey Moiseev <o2g.org.ru@gmail.com> wrote:
> Here is my dmesg. At boot 'H' key was held down.
>
> [    0.000000] Initializing cgroup subsys cpuset
> [    0.000000] Initializing cgroup subsys cpu
> [    0.000000] Initializing cgroup subsys cpuacct
> [    0.000000] Linux version 3.13.0-rc3-ARCH-dirty (o2genum@o2pc) (gcc version 4.8.2 (GCC) ) #10 SMP PREEMPT Sat Dec 7 20:25:41 MSK 2013
> [    0.000000] Command line: BOOT_IMAGE=/boot/vmlinuz-mainline i8042.debug=1 root=UUID=747f676b-e21a-443a-ac61-3f6c4aebb73d rw quiet
> [    0.000000] e820: BIOS-provided physical RAM map:
> [    0.000000] BIOS-e820: [mem 0x0000000000000000-0x000000000009cfff] usable
> [    0.000000] BIOS-e820: [mem 0x000000000009d000-0x000000000009ffff] reserved
> [    0.000000] BIOS-e820: [mem 0x00000000000e0000-0x00000000000fffff] reserved
> [    0.000000] BIOS-e820: [mem 0x0000000000100000-0x000000007b680fff] usable
> [    0.000000] BIOS-e820: [mem 0x000000007b681000-0x000000007b6befff] reserved
> [    0.000000] BIOS-e820: [mem 0x000000007b6bf000-0x000000007b757fff] usable
> [    0.000000] BIOS-e820: [mem 0x000000007b758000-0x000000007b7befff] ACPI NVS
> [    0.000000] BIOS-e820: [mem 0x000000007b7bf000-0x000000007b7e2fff] usable
> [    0.000000] BIOS-e820: [mem 0x000000007b7e3000-0x000000007b7fefff] ACPI data
> [    0.000000] BIOS-e820: [mem 0x000000007b7ff000-0x000000007b7fffff] usable
> [    0.000000] BIOS-e820: [mem 0x000000007b800000-0x000000007bffffff] reserved
> [    0.000000] BIOS-e820: [mem 0x00000000e0000000-0x00000000efffffff] reserved
> [    0.000000] BIOS-e820: [mem 0x00000000feb00000-0x00000000feb03fff] reserved
> [    0.000000] BIOS-e820: [mem 0x00000000fec00000-0x00000000fec00fff] reserved
> [    0.000000] BIOS-e820: [mem 0x00000000fed10000-0x00000000fed13fff] reserved
> [    0.000000] BIOS-e820: [mem 0x00000000fed18000-0x00000000fed19fff] reserved
> [    0.000000] BIOS-e820: [mem 0x00000000fed1b000-0x00000000fed1ffff] reserved
> [    0.000000] BIOS-e820: [mem 0x00000000fee00000-0x00000000fee00fff] reserved
> [    0.000000] BIOS-e820: [mem 0x00000000ffe00000-0x00000000ffffffff] reserved
> [    0.000000] NX (Execute Disable) protection: active
> [    0.000000] SMBIOS 2.6 present.
> [    0.000000] DMI: LENOVO 20035                           /Base Board Product Name, BIOS 1ECN33WW(V5.07) 03/17/2010
> [    0.000000] e820: update [mem 0x00000000-0x00000fff] usable ==> reserved
> [    0.000000] e820: remove [mem 0x000a0000-0x000fffff] usable
> [    0.000000] No AGP bridge found
> [    0.000000] e820: last_pfn = 0x7b800 max_arch_pfn = 0x400000000
> [    0.000000] MTRR default type: uncachable
> [    0.000000] MTRR fixed ranges enabled:
> [    0.000000]   00000-9FFFF write-back
> [    0.000000]   A0000-BFFFF uncachable
> [    0.000000]   C0000-EFFFF write-through
> [    0.000000]   F0000-FFFFF write-combining
> [    0.000000] MTRR variable ranges enabled:
> [    0.000000]   0 base 000000000 mask FC0000000 write-back
> [    0.000000]   1 base 0FFE00000 mask FFFE00000 write-protect
> [    0.000000]   2 base 040000000 mask FC0000000 write-back
> [    0.000000]   3 base 07C000000 mask FFC000000 uncachable
> [    0.000000]   4 base 07B800000 mask FFF800000 uncachable
> [    0.000000]   5 disabled
> [    0.000000]   6 disabled
> [    0.000000]   7 disabled
> [    0.000000] x86 PAT enabled: cpu 0, old 0x7040600070406, new 0x7010600070106
> [    0.000000] Scanning 1 areas for low memory corruption
> [    0.000000] Base memory trampoline at [ffff880000097000] 97000 size 24576
> [    0.000000] init_memory_mapping: [mem 0x00000000-0x000fffff]
> [    0.000000]  [mem 0x00000000-0x000fffff] page 4k
> [    0.000000] BRK [0x01b3c000, 0x01b3cfff] PGTABLE
> [    0.000000] BRK [0x01b3d000, 0x01b3dfff] PGTABLE
> [    0.000000] BRK [0x01b3e000, 0x01b3efff] PGTABLE
> [    0.000000] init_memory_mapping: [mem 0x7b400000-0x7b5fffff]
> [    0.000000]  [mem 0x7b400000-0x7b5fffff] page 2M
> [    0.000000] BRK [0x01b3f000, 0x01b3ffff] PGTABLE
> [    0.000000] init_memory_mapping: [mem 0x78000000-0x7b3fffff]
> [    0.000000]  [mem 0x78000000-0x7b3fffff] page 2M
> [    0.000000] init_memory_mapping: [mem 0x00100000-0x77ffffff]
> [    0.000000]  [mem 0x00100000-0x001fffff] page 4k
> [    0.000000]  [mem 0x00200000-0x77ffffff] page 2M
> [    0.000000] init_memory_mapping: [mem 0x7b600000-0x7b680fff]
> [    0.000000]  [mem 0x7b600000-0x7b680fff] page 4k
> [    0.000000] BRK [0x01b40000, 0x01b40fff] PGTABLE
> [    0.000000] init_memory_mapping: [mem 0x7b6bf000-0x7b757fff]
> [    0.000000]  [mem 0x7b6bf000-0x7b757fff] page 4k
> [    0.000000] init_memory_mapping: [mem 0x7b7bf000-0x7b7e2fff]
> [    0.000000]  [mem 0x7b7bf000-0x7b7e2fff] page 4k
> [    0.000000] init_memory_mapping: [mem 0x7b7ff000-0x7b7fffff]
> [    0.000000]  [mem 0x7b7ff000-0x7b7fffff] page 4k
> [    0.000000] RAMDISK: [mem 0x378d4000-0x37c61fff]
> [    0.000000] ACPI: RSDP 00000000000fe020 000024 (v02 LENOVO)
> [    0.000000] ACPI: XSDT 000000007b7fe120 000084 (v01 LENOVO CB-01    00000001      01000013)
> [    0.000000] ACPI: FACP 000000007b7fc000 0000F4 (v04 LENOVO CB-01    00000001 MSFT 01000013)
> [    0.000000] ACPI: DSDT 000000007b7ef000 00992C (v02 LENOVO CB-01    00000001 MSFT 01000013)
> [    0.000000] ACPI: FACS 000000007b76a000 000040
> [    0.000000] ACPI: ASF! 000000007b7fd000 0000A5 (v32 INTEL  Calpella 00000001 MSFT 01000013)
> [    0.000000] ACPI: HPET 000000007b7fb000 000038 (v01 LENOVO CB-01    00000001 MSFT 01000013)
> [    0.000000] ACPI: APIC 000000007b7fa000 00008C (v02 INTEL  Calpella 00000001 MSFT 01000013)
> [    0.000000] ACPI: MCFG 000000007b7f9000 00003C (v01 LENOVO CB-01    00000001 MSFT 01000013)
> [    0.000000] ACPI: SLIX 000000007b7ee000 000176 (v01 LENOVO CB-01    00000001 MSFT 01000013)
> [    0.000000] ACPI: BOOT 000000007b7eb000 000028 (v01 INTEL  Calpella 00000001 MSFT 01000013)
> [    0.000000] ACPI: ASPT 000000007b7e7000 000034 (v04 INTEL  Calpella 00000001 MSFT 01000013)
> [    0.000000] ACPI: WDRT 000000007b7e6000 000047 (v01 INTEL  Calpella 00000000 MSFT 01000013)
> [    0.000000] ACPI: SSDT 000000007b7e5000 0009F1 (v01  PmRef    CpuPm 00003000 INTL 20051117)
> [    0.000000] ACPI: SSDT 000000007b7e4000 000259 (v01  PmRef  Cpu0Tst 00003000 INTL 20051117)
> [    0.000000] ACPI: SSDT 000000007b7e3000 00049F (v01  PmRef    ApTst 00003000 INTL 20051117)
> [    0.000000] ACPI: Local APIC address 0xfee00000
> [    0.000000] No NUMA configuration found
> [    0.000000] Faking a node at [mem 0x0000000000000000-0x000000007b7fffff]
> [    0.000000] Initmem setup node 0 [mem 0x00000000-0x7b7fffff]
> [    0.000000]   NODE_DATA [mem 0x7b7de000-0x7b7e2fff]
> [    0.000000]  [ffffea0000000000-ffffea0001ffffff] PMD -> [ffff880078e00000-ffff88007adfffff] on node 0
> [    0.000000] Zone ranges:
> [    0.000000]   DMA      [mem 0x00001000-0x00ffffff]
> [    0.000000]   DMA32    [mem 0x01000000-0xffffffff]
> [    0.000000]   Normal   empty
> [    0.000000] Movable zone start for each node
> [    0.000000] Early memory node ranges
> [    0.000000]   node   0: [mem 0x00001000-0x0009cfff]
> [    0.000000]   node   0: [mem 0x00100000-0x7b680fff]
> [    0.000000]   node   0: [mem 0x7b6bf000-0x7b757fff]
> [    0.000000]   node   0: [mem 0x7b7bf000-0x7b7e2fff]
> [    0.000000]   node   0: [mem 0x7b7ff000-0x7b7fffff]
> [    0.000000] On node 0 totalpages: 505563
> [    0.000000]   DMA zone: 64 pages used for memmap
> [    0.000000]   DMA zone: 21 pages reserved
> [    0.000000]   DMA zone: 3996 pages, LIFO batch:0
> [    0.000000]   DMA32 zone: 7840 pages used for memmap
> [    0.000000]   DMA32 zone: 501567 pages, LIFO batch:31
> [    0.000000] ACPI: PM-Timer IO Port: 0x408
> [    0.000000] ACPI: Local APIC address 0xfee00000
> [    0.000000] ACPI: LAPIC (acpi_id[0x01] lapic_id[0x00] enabled)
> [    0.000000] ACPI: LAPIC (acpi_id[0x02] lapic_id[0x01] enabled)
> [    0.000000] ACPI: LAPIC (acpi_id[0x03] lapic_id[0x04] enabled)
> [    0.000000] ACPI: LAPIC (acpi_id[0x04] lapic_id[0x05] enabled)
> [    0.000000] ACPI: LAPIC (acpi_id[0x05] lapic_id[0x00] disabled)
> [    0.000000] ACPI: LAPIC (acpi_id[0x06] lapic_id[0x00] disabled)
> [    0.000000] ACPI: LAPIC (acpi_id[0x07] lapic_id[0x00] disabled)
> [    0.000000] ACPI: LAPIC (acpi_id[0x08] lapic_id[0x00] disabled)
> [    0.000000] ACPI: IOAPIC (id[0x02] address[0xfec00000] gsi_base[0])
> [    0.000000] IOAPIC[0]: apic_id 2, version 32, address 0xfec00000, GSI 0-23
> [    0.000000] ACPI: INT_SRC_OVR (bus 0 bus_irq 0 global_irq 2 dfl dfl)
> [    0.000000] ACPI: INT_SRC_OVR (bus 0 bus_irq 9 global_irq 9 high level)
> [    0.000000] ACPI: IRQ0 used by override.
> [    0.000000] ACPI: IRQ2 used by override.
> [    0.000000] ACPI: IRQ9 used by override.
> [    0.000000] Using ACPI (MADT) for SMP configuration information
> [    0.000000] ACPI: HPET id: 0x8086a201 base: 0xfed00000
> [    0.000000] smpboot: Allowing 8 CPUs, 4 hotplug CPUs
> [    0.000000] nr_irqs_gsi: 40
> [    0.000000] PM: Registered nosave memory: [mem 0x0009d000-0x0009ffff]
> [    0.000000] PM: Registered nosave memory: [mem 0x000a0000-0x000dffff]
> [    0.000000] PM: Registered nosave memory: [mem 0x000e0000-0x000fffff]
> [    0.000000] PM: Registered nosave memory: [mem 0x7b681000-0x7b6befff]
> [    0.000000] PM: Registered nosave memory: [mem 0x7b758000-0x7b7befff]
> [    0.000000] PM: Registered nosave memory: [mem 0x7b7e3000-0x7b7fefff]
> [    0.000000] e820: [mem 0x7c000000-0xdfffffff] available for PCI devices
> [    0.000000] Booting paravirtualized kernel on bare hardware
> [    0.000000] setup_percpu: NR_CPUS:128 nr_cpumask_bits:128 nr_cpu_ids:8 nr_node_ids:1
> [    0.000000] PERCPU: Embedded 29 pages/cpu @ffff88007b400000 s86272 r8192 d24320 u262144
> [    0.000000] pcpu-alloc: s86272 r8192 d24320 u262144 alloc=1*2097152
> [    0.000000] pcpu-alloc: [0] 0 1 2 3 4 5 6 7
> [    0.000000] Built 1 zonelists in Node order, mobility grouping on.  Total pages: 497638
> [    0.000000] Policy zone: DMA32
> [    0.000000] Kernel command line: BOOT_IMAGE=/boot/vmlinuz-mainline i8042.debug=1 root=UUID=747f676b-e21a-443a-ac61-3f6c4aebb73d rw quiet
> [    0.000000] PID hash table entries: 4096 (order: 3, 32768 bytes)
> [    0.000000] Checking aperture...
> [    0.000000] No AGP bridge found
> [    0.000000] Calgary: detecting Calgary via BIOS EBDA area
> [    0.000000] Calgary: Unable to locate Rio Grande table in EBDA - bailing!
> [    0.000000] Memory: 1973032K/2022252K available (5151K kernel code, 815K rwdata, 1728K rodata, 1160K init, 1304K bss, 49220K reserved)
> [    0.000000] SLUB: HWalign=64, Order=0-3, MinObjects=0, CPUs=8, Nodes=1
> [    0.000000] Preemptible hierarchical RCU implementation.
> [    0.000000]  RCU dyntick-idle grace-period acceleration is enabled.
> [    0.000000]  Dump stacks of tasks blocking RCU-preempt GP.
> [    0.000000]  RCU restricting CPUs from NR_CPUS=128 to nr_cpu_ids=8.
> [    0.000000] NR_IRQS:8448 nr_irqs:744 16
> [    0.000000] Console: colour dummy device 80x25
> [    0.000000] console [tty0] enabled
> [    0.000000] allocated 8388608 bytes of page_cgroup
> [    0.000000] please try 'cgroup_disable=memory' option if you don't want memory cgroups
> [    0.000000] hpet clockevent registered
> [    0.000000] tsc: Fast TSC calibration using PIT
> [    0.003333] tsc: Detected 2127.841 MHz processor
> [    0.000004] Calibrating delay loop (skipped), value calculated using timer frequency.. 4257.00 BogoMIPS (lpj=7092803)
> [    0.000007] pid_max: default: 32768 minimum: 301
> [    0.000040] Security Framework initialized
> [    0.000052] AppArmor: AppArmor disabled by boot time parameter
> [    0.000053] Yama: becoming mindful.
> [    0.000227] Dentry cache hash table entries: 262144 (order: 9, 2097152 bytes)
> [    0.000932] Inode-cache hash table entries: 131072 (order: 8, 1048576 bytes)
> [    0.001223] Mount-cache hash table entries: 256
> [    0.001448] Initializing cgroup subsys memory
> [    0.001456] Initializing cgroup subsys devices
> [    0.001459] Initializing cgroup subsys freezer
> [    0.001461] Initializing cgroup subsys net_cls
> [    0.001462] Initializing cgroup subsys blkio
> [    0.001486] CPU: Physical Processor ID: 0
> [    0.001488] CPU: Processor Core ID: 0
> [    0.001494] mce: CPU supports 9 MCE banks
> [    0.001505] CPU0: Thermal monitoring enabled (TM1)
> [    0.001516] Last level iTLB entries: 4KB 512, 2MB 7, 4MB 7
> Last level dTLB entries: 4KB 512, 2MB 32, 4MB 32
> tlb_flushall_shift: 6
> [    0.001606] Freeing SMP alternatives memory: 20K (ffffffff819ef000 - ffffffff819f4000)
> [    0.002796] ACPI: Core revision 20131115
> [    0.012879] ACPI: All ACPI Tables successfully acquired
> [    0.179442] ftrace: allocating 20458 entries in 80 pages
> [    0.191816] ..TIMER: vector=0x30 apic1=0 pin1=2 apic2=-1 pin2=-1
> [    0.224806] smpboot: CPU0: Intel(R) Core(TM) i3 CPU       M 330  @ 2.13GHz (fam: 06, model: 25, stepping: 02)
> [    0.330332] Performance Events: PEBS fmt1+, 16-deep LBR, Westmere events, Intel PMU driver.
> [    0.330340] perf_event_intel: CPUID marked event: 'bus cycles' unavailable
> [    0.330343] ... version:                3
> [    0.330344] ... bit width:              48
> [    0.330345] ... generic registers:      4
> [    0.330346] ... value mask:             0000ffffffffffff
> [    0.330347] ... max period:             000000007fffffff
> [    0.330348] ... fixed-purpose events:   3
> [    0.330349] ... event mask:             000000070000000f
> [    0.357070] x86: Booting SMP configuration:
> [    0.370446] NMI watchdog: enabled on all CPUs, permanently consumes one hw-PMU counter.
> [    0.357072] .... node  #0, CPUs:      #1 #2 #3
> [    0.410323] x86: Booted up 1 node, 4 CPUs
> [    0.410328] smpboot: Total of 4 processors activated (17029.00 BogoMIPS)
> [    0.412942] devtmpfs: initialized
> [    0.416343] PM: Registering ACPI NVS region [mem 0x7b758000-0x7b7befff] (421888 bytes)
> [    0.417415] RTC time: 16:39:27, date: 12/07/13
> [    0.417460] NET: Registered protocol family 16
> [    0.417574] cpuidle: using governor ladder
> [    0.417576] cpuidle: using governor menu
> [    0.417592] ACPI FADT declares the system doesn't support PCIe ASPM, so disable it
> [    0.417594] ACPI: bus type PCI registered
> [    0.417596] acpiphp: ACPI Hot Plug PCI Controller Driver version: 0.5
> [    0.417675] PCI: MMCONFIG for domain 0000 [bus 00-ff] at [mem 0xe0000000-0xefffffff] (base 0xe0000000)
> [    0.417678] PCI: MMCONFIG at [mem 0xe0000000-0xefffffff] reserved in E820
> [    0.438612] PCI: Using configuration type 1 for base access
> [    0.438752] mtrr: your CPUs had inconsistent variable MTRR settings
> [    0.438753] mtrr: probably your BIOS does not setup all CPUs.
> [    0.438754] mtrr: corrected configuration.
> [    0.439244] bio: create slab <bio-0> at 0
> [    0.439371] ACPI: Added _OSI(Module Device)
> [    0.439374] ACPI: Added _OSI(Processor Device)
> [    0.439375] ACPI: Added _OSI(3.0 _SCP Extensions)
> [    0.439377] ACPI: Added _OSI(Processor Aggregator Device)
> [    0.443160] ACPI: Executed 1 blocks of module-level executable AML code
> [    0.470309] [Firmware Bug]: ACPI: BIOS _OSI(Linux) query ignored
> [    0.470733] ACPI: SSDT 000000007b691c18 0003A0 (v01  PmRef  Cpu0Ist 00003000 INTL 20051117)
> [    0.471190] ACPI: Dynamic OEM Table Load:
> [    0.471192] ACPI: SSDT           (null) 0003A0 (v01  PmRef  Cpu0Ist 00003000 INTL 20051117)
> [    0.471342] ACPI: SSDT 000000007b68f618 0005CD (v01  PmRef  Cpu0Cst 00003001 INTL 20051117)
> [    0.471783] ACPI: Dynamic OEM Table Load:
> [    0.471785] ACPI: SSDT           (null) 0005CD (v01  PmRef  Cpu0Cst 00003001 INTL 20051117)
> [    0.497221] ACPI: SSDT 000000007b690a98 000303 (v01  PmRef    ApIst 00003000 INTL 20051117)
> [    0.497727] ACPI: Dynamic OEM Table Load:
> [    0.497729] ACPI: SSDT           (null) 000303 (v01  PmRef    ApIst 00003000 INTL 20051117)
> [    0.510396] ACPI: SSDT 000000007b68ed98 000119 (v01  PmRef    ApCst 00003000 INTL 20051117)
> [    0.510866] ACPI: Dynamic OEM Table Load:
> [    0.510868] ACPI: SSDT           (null) 000119 (v01  PmRef    ApCst 00003000 INTL 20051117)
> [    0.535990] ACPI: Interpreter enabled
> [    0.536002] ACPI Exception: AE_NOT_FOUND, While evaluating Sleep State [\_S1_] (20131115/hwxface-580)
> [    0.536009] ACPI Exception: AE_NOT_FOUND, While evaluating Sleep State [\_S2_] (20131115/hwxface-580)
> [    0.536033] ACPI: (supports S0 S3 S4 S5)
> [    0.536035] ACPI: Using IOAPIC for interrupt routing
> [    0.536076] PCI: Using host bridge windows from ACPI; if necessary, use "pci=nocrs" and report a bug
> [    0.536263] ACPI: No dock devices found.
> [    0.621788] ACPI: PCI Root Bridge [PCI0] (domain 0000 [bus 00-fe])
> [    0.621795] acpi PNP0A08:00: _OSC: OS supports [ExtendedConfig ASPM ClockPM Segments MSI]
> [    0.621831] \_SB_.PCI0:_OSC invalid UUID
> [    0.621833] _OSC request data:1 1f 0
> [    0.621837] acpi PNP0A08:00: _OSC failed (AE_ERROR); disabling ASPM
> [    0.622688] ACPI: \_SB_.PCI0.PDRC: can't evaluate _ADR (0x5)
> [    0.622691] ACPI: \_SB_.PCI0.MIR_: can't evaluate _ADR (0x5)
> [    0.622703] PCI host bridge to bus 0000:00
> [    0.622705] pci_bus 0000:00: root bus resource [bus 00-fe]
> [    0.622708] pci_bus 0000:00: root bus resource [io  0x0000-0x0cf7]
> [    0.622710] pci_bus 0000:00: root bus resource [io  0x0d00-0xffff]
> [    0.622712] pci_bus 0000:00: root bus resource [mem 0x000a0000-0x000bffff]
> [    0.622714] pci_bus 0000:00: root bus resource [mem 0x7c000000-0xfeafffff]
> [    0.622722] pci 0000:00:00.0: [8086:0044] type 00 class 0x060000
> [    0.622742] DMAR: BIOS has allocated no shadow GTT; disabling IOMMU for graphics
> [    0.622827] pci 0000:00:01.0: [8086:0045] type 01 class 0x060400
> [    0.622864] pci 0000:00:01.0: PME# supported from D0 D3hot D3cold
> [    0.622916] pci 0000:00:01.0: System wakeup disabled by ACPI
> [    0.622993] pci 0000:00:1a.0: [8086:3b3c] type 00 class 0x0c0320
> [    0.623376] pci 0000:00:1a.0: reg 0x10: [mem 0x99105c00-0x99105fff]
> [    0.625583] pci 0000:00:1a.0: PME# supported from D0 D3hot D3cold
> [    0.625668] pci 0000:00:1a.0: System wakeup disabled by ACPI
> [    0.625718] pci 0000:00:1b.0: [8086:3b56] type 00 class 0x040300
> [    0.625742] pci 0000:00:1b.0: reg 0x10: [mem 0x99100000-0x99103fff 64bit]
> [    0.625842] pci 0000:00:1b.0: PME# supported from D0 D3hot D3cold
> [    0.625905] pci 0000:00:1b.0: System wakeup disabled by ACPI
> [    0.625946] pci 0000:00:1c.0: [8086:3b42] type 01 class 0x060400
> [    0.626048] pci 0000:00:1c.0: PME# supported from D0 D3hot D3cold
> [    0.626112] pci 0000:00:1c.0: System wakeup disabled by ACPI
> [    0.626151] pci 0000:00:1c.1: [8086:3b44] type 01 class 0x060400
> [    0.626253] pci 0000:00:1c.1: PME# supported from D0 D3hot D3cold
> [    0.626351] pci 0000:00:1c.2: [8086:3b46] type 01 class 0x060400
> [    0.626454] pci 0000:00:1c.2: PME# supported from D0 D3hot D3cold
> [    0.626562] pci 0000:00:1d.0: [8086:3b34] type 00 class 0x0c0320
> [    0.626942] pci 0000:00:1d.0: reg 0x10: [mem 0x99105800-0x99105bff]
> [    0.629155] pci 0000:00:1d.0: PME# supported from D0 D3hot D3cold
> [    0.629238] pci 0000:00:1d.0: System wakeup disabled by ACPI
> [    0.629284] pci 0000:00:1e.0: [8086:2448] type 01 class 0x060401
> [    0.629410] pci 0000:00:1e.0: System wakeup disabled by ACPI
> [    0.629448] pci 0000:00:1f.0: [8086:3b09] type 00 class 0x060100
> [    0.629647] pci 0000:00:1f.2: [8086:3b29] type 00 class 0x010601
> [    0.629675] pci 0000:00:1f.2: reg 0x10: [io  0x5048-0x504f]
> [    0.629687] pci 0000:00:1f.2: reg 0x14: [io  0x5054-0x5057]
> [    0.629699] pci 0000:00:1f.2: reg 0x18: [io  0x5040-0x5047]
> [    0.629710] pci 0000:00:1f.2: reg 0x1c: [io  0x5050-0x5053]
> [    0.629722] pci 0000:00:1f.2: reg 0x20: [io  0x5020-0x503f]
> [    0.629734] pci 0000:00:1f.2: reg 0x24: [mem 0x99105000-0x991057ff]
> [    0.629802] pci 0000:00:1f.2: PME# supported from D3hot
> [    0.629893] pci 0000:00:1f.3: [8086:3b30] type 00 class 0x0c0500
> [    0.629915] pci 0000:00:1f.3: reg 0x10: [mem 0x99106000-0x991060ff 64bit]
> [    0.629946] pci 0000:00:1f.3: reg 0x20: [io  0x5000-0x501f]
> [    0.630105] pci 0000:01:00.0: [10de:0a34] type 00 class 0x030000
> [    0.630120] pci 0000:01:00.0: reg 0x10: [mem 0x92000000-0x92ffffff]
> [    0.630134] pci 0000:01:00.0: reg 0x14: [mem 0x80000000-0x8fffffff 64bit pref]
> [    0.630148] pci 0000:01:00.0: reg 0x1c: [mem 0x90000000-0x91ffffff 64bit pref]
> [    0.630158] pci 0000:01:00.0: reg 0x24: [io  0x4000-0x407f]
> [    0.630168] pci 0000:01:00.0: reg 0x30: [mem 0xfff80000-0xffffffff pref]
> [    0.630280] pci 0000:01:00.1: [10de:0be2] type 00 class 0x040300
> [    0.630294] pci 0000:01:00.1: reg 0x10: [mem 0x93000000-0x93003fff]
> [    0.630446] pci 0000:00:01.0: PCI bridge to [bus 01]
> [    0.630449] pci 0000:00:01.0:   bridge window [io  0x4000-0x4fff]
> [    0.630452] pci 0000:00:01.0:   bridge window [mem 0x92000000-0x930fffff]
> [    0.630456] pci 0000:00:01.0:   bridge window [mem 0x80000000-0x91ffffff 64bit pref]
> [    0.630544] acpiphp: Slot [1] registered
> [    0.630551] pci 0000:00:1c.0: PCI bridge to [bus 02-05]
> [    0.630556] pci 0000:00:1c.0:   bridge window [io  0x3000-0x3fff]
> [    0.630562] pci 0000:00:1c.0:   bridge window [mem 0x98100000-0x990fffff]
> [    0.630569] pci 0000:00:1c.0:   bridge window [mem 0x93100000-0x940fffff 64bit pref]
> [    0.630690] pci 0000:06:00.0: [168c:002b] type 00 class 0x028000
> [    0.630722] pci 0000:06:00.0: reg 0x10: [mem 0x97100000-0x9710ffff 64bit]
> [    0.630868] pci 0000:06:00.0: supports D1
> [    0.630870] pci 0000:06:00.0: PME# supported from D0 D1 D3hot
> [    0.640219] pci 0000:00:1c.1: PCI bridge to [bus 06]
> [    0.640230] pci 0000:00:1c.1:   bridge window [io  0x2000-0x2fff]
> [    0.640239] pci 0000:00:1c.1:   bridge window [mem 0x97100000-0x980fffff]
> [    0.640252] pci 0000:00:1c.1:   bridge window [mem 0x94100000-0x950fffff 64bit pref]
> [    0.640408] pci 0000:07:00.0: [14e4:1692] type 00 class 0x020000
> [    0.640452] pci 0000:07:00.0: reg 0x10: [mem 0x96100000-0x9610ffff 64bit]
> [    0.640680] pci 0000:07:00.0: PME# supported from D3hot D3cold
> [    0.640737] pci 0000:07:00.0: System wakeup disabled by ACPI
> [    0.650242] pci 0000:00:1c.2: PCI bridge to [bus 07]
> [    0.650254] pci 0000:00:1c.2:   bridge window [io  0x1000-0x1fff]
> [    0.650259] pci 0000:00:1c.2:   bridge window [mem 0x96100000-0x970fffff]
> [    0.650267] pci 0000:00:1c.2:   bridge window [mem 0x95100000-0x960fffff 64bit pref]
> [    0.650353] pci 0000:00:1e.0: PCI bridge to [bus 08] (subtractive decode)
> [    0.650366] pci 0000:00:1e.0:   bridge window [io  0x0000-0x0cf7] (subtractive decode)
> [    0.650369] pci 0000:00:1e.0:   bridge window [io  0x0d00-0xffff] (subtractive decode)
> [    0.650371] pci 0000:00:1e.0:   bridge window [mem 0x000a0000-0x000bffff] (subtractive decode)
> [    0.650373] pci 0000:00:1e.0:   bridge window [mem 0x7c000000-0xfeafffff] (subtractive decode)
> [    0.677353] ACPI: PCI Interrupt Link [LNKA] (IRQs 1 3 4 *5 6 7 10 12 14 15)
> [    0.677413] ACPI: PCI Interrupt Link [LNKB] (IRQs 1 3 4 5 6 7 11 12 14 15) *10
> [    0.677471] ACPI: PCI Interrupt Link [LNKC] (IRQs 1 3 4 5 6 7 10 12 14 15) *11
> [    0.677528] ACPI: PCI Interrupt Link [LNKD] (IRQs 1 3 4 5 6 7 11 12 14 15) *10
> [    0.677585] ACPI: PCI Interrupt Link [LNKE] (IRQs 1 3 4 5 6 7 10 12 14 15) *0, disabled.
> [    0.677642] ACPI: PCI Interrupt Link [LNKF] (IRQs 1 3 4 5 6 7 *11 12 14 15)
> [    0.677699] ACPI: PCI Interrupt Link [LNKG] (IRQs 1 3 4 5 6 7 10 12 14 15) *11
> [    0.677756] ACPI: PCI Interrupt Link [LNKH] (IRQs 1 3 4 *5 6 7 11 12 14 15)
> [    0.677805] ACPI: PCI Root Bridge [CPBG] (domain 0000 [bus ff])
> [    0.677809] acpi PNP0A03:00: _OSC: OS supports [ExtendedConfig ASPM ClockPM Segments MSI]
> [    0.677814] acpi PNP0A03:00: _OSC failed (AE_NOT_FOUND); disabling ASPM
> [    0.677888] PCI host bridge to bus 0000:ff
> [    0.677891] pci_bus 0000:ff: root bus resource [bus ff]
> [    0.677897] pci 0000:ff:00.0: [8086:2c62] type 00 class 0x060000
> [    0.677943] pci 0000:ff:00.1: [8086:2d01] type 00 class 0x060000
> [    0.677991] pci 0000:ff:02.0: [8086:2d10] type 00 class 0x060000
> [    0.678037] pci 0000:ff:02.1: [8086:2d11] type 00 class 0x060000
> [    0.678080] pci 0000:ff:02.2: [8086:2d12] type 00 class 0x060000
> [    0.678122] pci 0000:ff:02.3: [8086:2d13] type 00 class 0x060000
> [    0.678493] ACPI: Enabled 6 GPEs in block 00 to 3F
> [    0.678501] ACPI: \_SB_.PCI0: notify handler is installed
> [    0.678560] ACPI: \_SB_.CPBG: notify handler is installed
> [    0.678571] Found 2 acpi root devices
> [    0.678604] ACPI : EC: GPE = 0x17, I/O: command/status = 0x66, data = 0x62
> [    0.678714] vgaarb: device added: PCI:0000:01:00.0,decodes=io+mem,owns=io+mem,locks=none
> [    0.678717] vgaarb: loaded
> [    0.678718] vgaarb: bridge control possible 0000:01:00.0
> [    0.678760] PCI: Using ACPI for IRQ routing
> [    0.688654] PCI: pci_cache_line_size set to 64 bytes
> [    0.688788] e820: reserve RAM buffer [mem 0x0009d000-0x0009ffff]
> [    0.688790] e820: reserve RAM buffer [mem 0x7b681000-0x7bffffff]
> [    0.688792] e820: reserve RAM buffer [mem 0x7b758000-0x7bffffff]
> [    0.688794] e820: reserve RAM buffer [mem 0x7b7e3000-0x7bffffff]
> [    0.688795] e820: reserve RAM buffer [mem 0x7b800000-0x7bffffff]
> [    0.688898] NetLabel: Initializing
> [    0.688899] NetLabel:  domain hash size = 128
> [    0.688900] NetLabel:  protocols = UNLABELED CIPSOv4
> [    0.688919] NetLabel:  unlabeled traffic allowed by default
> [    0.688949] hpet0: at MMIO 0xfed00000, IRQs 2, 8, 0, 0, 0, 0, 0, 0
> [    0.688954] hpet0: 8 comparators, 64-bit 14.318180 MHz counter
> [    0.690986] Switched to clocksource hpet
> [    0.695899] pnp: PnP ACPI init
> [    0.695917] ACPI: bus type PNP registered
> [    0.717714] pnp 00:00: [dma 4]
> [    0.717752] pnp 00:00: Plug and Play ACPI device, IDs PNP0200 (active)
> [    0.717778] pnp 00:01: Plug and Play ACPI device, IDs INT0800 (active)
> [    0.717900] pnp 00:02: Plug and Play ACPI device, IDs PNP0103 (active)
> [    0.717939] pnp 00:03: Plug and Play ACPI device, IDs PNP0c04 (active)
> [    0.717963] pnp 00:04: disabling [io  0x164e-0x164f] because it overlaps 0000:00:1c.2 BAR 13 [io  0x1000-0x1fff]
> [    0.718003] system 00:04: [io  0x0680-0x069f] has been reserved
> [    0.718006] system 00:04: [io  0x0800-0x080f] has been reserved
> [    0.718008] system 00:04: [io  0xffff] has been reserved
> [    0.718010] system 00:04: [io  0xffff] has been reserved
> [    0.718013] system 00:04: [io  0x0400-0x047f] could not be reserved
> [    0.718015] system 00:04: [io  0x0500-0x057f] has been reserved
> [    0.718019] system 00:04: Plug and Play ACPI device, IDs PNP0c02 (active)
> [    0.718051] pnp 00:05: Plug and Play ACPI device, IDs PNP0b00 (active)
> [    0.718083] pnp 00:06: Plug and Play ACPI device, IDs SYN0716 SYN0700 SYN0002 PNP0f13 (active)
> [    0.718113] pnp 00:07: Plug and Play ACPI device, IDs PNP0303 (active)
> [    0.718606] pnp 00:08: disabling [mem 0xfffff000-0xffffffff] because it overlaps 0000:01:00.0 BAR 6 [mem 0xfff80000-0xffffffff pref]
> [    0.718638] system 00:08: [mem 0xfed1c000-0xfed1ffff] has been reserved
> [    0.718641] system 00:08: [mem 0xfed10000-0xfed13fff] has been reserved
> [    0.718643] system 00:08: [mem 0xfed18000-0xfed18fff] has been reserved
> [    0.718645] system 00:08: [mem 0xfed19000-0xfed19fff] has been reserved
> [    0.718648] system 00:08: [mem 0xe0000000-0xefffffff] has been reserved
> [    0.718650] system 00:08: [mem 0xfed20000-0xfed3ffff] has been reserved
> [    0.718652] system 00:08: [mem 0xfed45000-0xfed8ffff] has been reserved
> [    0.718654] system 00:08: [mem 0xff000000-0xffffffff] could not be reserved
> [    0.718657] system 00:08: [mem 0xfee00000-0xfeefffff] could not be reserved
> [    0.718660] system 00:08: Plug and Play ACPI device, IDs PNP0c02 (active)
> [    0.718708] pnp 00:09: Plug and Play ACPI device, IDs ENE0201 (active)
> [    0.718831] pnp: PnP ACPI: found 10 devices
> [    0.718833] ACPI: bus type PNP unregistered
> [    0.725668] pci 0000:01:00.0: no compatible bridge window for [mem 0xfff80000-0xffffffff pref]
> [    0.725719] pci 0000:01:00.0: BAR 6: assigned [mem 0x93080000-0x930fffff pref]
> [    0.725723] pci 0000:00:01.0: PCI bridge to [bus 01]
> [    0.725725] pci 0000:00:01.0:   bridge window [io  0x4000-0x4fff]
> [    0.725729] pci 0000:00:01.0:   bridge window [mem 0x92000000-0x930fffff]
> [    0.725732] pci 0000:00:01.0:   bridge window [mem 0x80000000-0x91ffffff 64bit pref]
> [    0.725736] pci 0000:00:1c.0: PCI bridge to [bus 02-05]
> [    0.725739] pci 0000:00:1c.0:   bridge window [io  0x3000-0x3fff]
> [    0.725746] pci 0000:00:1c.0:   bridge window [mem 0x98100000-0x990fffff]
> [    0.725751] pci 0000:00:1c.0:   bridge window [mem 0x93100000-0x940fffff 64bit pref]
> [    0.725759] pci 0000:00:1c.1: PCI bridge to [bus 06]
> [    0.725762] pci 0000:00:1c.1:   bridge window [io  0x2000-0x2fff]
> [    0.725769] pci 0000:00:1c.1:   bridge window [mem 0x97100000-0x980fffff]
> [    0.725774] pci 0000:00:1c.1:   bridge window [mem 0x94100000-0x950fffff 64bit pref]
> [    0.725782] pci 0000:00:1c.2: PCI bridge to [bus 07]
> [    0.725785] pci 0000:00:1c.2:   bridge window [io  0x1000-0x1fff]
> [    0.725792] pci 0000:00:1c.2:   bridge window [mem 0x96100000-0x970fffff]
> [    0.725797] pci 0000:00:1c.2:   bridge window [mem 0x95100000-0x960fffff 64bit pref]
> [    0.725805] pci 0000:00:1e.0: PCI bridge to [bus 08]
> [    0.725821] pci_bus 0000:00: resource 4 [io  0x0000-0x0cf7]
> [    0.725823] pci_bus 0000:00: resource 5 [io  0x0d00-0xffff]
> [    0.725825] pci_bus 0000:00: resource 6 [mem 0x000a0000-0x000bffff]
> [    0.725827] pci_bus 0000:00: resource 7 [mem 0x7c000000-0xfeafffff]
> [    0.725829] pci_bus 0000:01: resource 0 [io  0x4000-0x4fff]
> [    0.725831] pci_bus 0000:01: resource 1 [mem 0x92000000-0x930fffff]
> [    0.725833] pci_bus 0000:01: resource 2 [mem 0x80000000-0x91ffffff 64bit pref]
> [    0.725835] pci_bus 0000:02: resource 0 [io  0x3000-0x3fff]
> [    0.725837] pci_bus 0000:02: resource 1 [mem 0x98100000-0x990fffff]
> [    0.725839] pci_bus 0000:02: resource 2 [mem 0x93100000-0x940fffff 64bit pref]
> [    0.725841] pci_bus 0000:06: resource 0 [io  0x2000-0x2fff]
> [    0.725843] pci_bus 0000:06: resource 1 [mem 0x97100000-0x980fffff]
> [    0.725845] pci_bus 0000:06: resource 2 [mem 0x94100000-0x950fffff 64bit pref]
> [    0.725847] pci_bus 0000:07: resource 0 [io  0x1000-0x1fff]
> [    0.725849] pci_bus 0000:07: resource 1 [mem 0x96100000-0x970fffff]
> [    0.725851] pci_bus 0000:07: resource 2 [mem 0x95100000-0x960fffff 64bit pref]
> [    0.725854] pci_bus 0000:08: resource 4 [io  0x0000-0x0cf7]
> [    0.725856] pci_bus 0000:08: resource 5 [io  0x0d00-0xffff]
> [    0.725858] pci_bus 0000:08: resource 6 [mem 0x000a0000-0x000bffff]
> [    0.725860] pci_bus 0000:08: resource 7 [mem 0x7c000000-0xfeafffff]
> [    0.725898] NET: Registered protocol family 2
> [    0.726091] TCP established hash table entries: 16384 (order: 5, 131072 bytes)
> [    0.726161] TCP bind hash table entries: 16384 (order: 6, 262144 bytes)
> [    0.726250] TCP: Hash tables configured (established 16384 bind 16384)
> [    0.726281] TCP: reno registered
> [    0.726287] UDP hash table entries: 1024 (order: 3, 32768 bytes)
> [    0.726307] UDP-Lite hash table entries: 1024 (order: 3, 32768 bytes)
> [    0.726387] NET: Registered protocol family 1
> [    0.751130] pci 0000:01:00.0: Boot video device
> [    0.751191] PCI: CLS 64 bytes, default 64
> [    0.751240] Unpacking initramfs...
> [    0.830311] Freeing initrd memory: 3640K (ffff8800378d4000 - ffff880037c62000)
> [    0.830354] Simple Boot Flag at 0x44 set to 0x1
> [    0.830570] Scanning for low memory corruption every 60 seconds
> [    0.830914] audit: initializing netlink socket (disabled)
> [    0.830954] type=2000 audit(1386434366.563:1): initialized
> [    0.844182] HugeTLB registered 2 MB page size, pre-allocated 0 pages
> [    0.845481] zbud: loaded
> [    0.845672] VFS: Disk quotas dquot_6.5.2
> [    0.845718] Dquot-cache hash table entries: 512 (order 0, 4096 bytes)
> [    0.845899] msgmni has been set to 3860
> [    0.846287] Block layer SCSI generic (bsg) driver version 0.4 loaded (major 252)
> [    0.846349] io scheduler noop registered
> [    0.846351] io scheduler deadline registered
> [    0.846381] io scheduler cfq registered (default)
> [    0.846596] pcieport 0000:00:01.0: irq 40 for MSI/MSI-X
> [    0.847065] pci_hotplug: PCI Hot Plug PCI Core version: 0.5
> [    0.847080] pciehp: PCI Express Hot Plug Controller Driver version: 0.4
> [    0.847127] vesafb: mode is 640x480x32, linelength=2560, pages=0
> [    0.847128] vesafb: scrolling: redraw
> [    0.847130] vesafb: Truecolor: size=8:8:8:8, shift=24:16:8:0
> [    0.847251] vesafb: framebuffer at 0x91000000, mapped to 0xffffc90010400000, using 1216k, total 1216k
> [    0.888867] Console: switching to colour frame buffer device 80x30
> [    0.929312] fb0: VESA VGA frame buffer device
> [    0.929324] intel_idle: MWAIT substates: 0x1120
> [    0.929326] intel_idle: v0.4 model 0x25
> [    0.929327] intel_idle: lapic_timer_reliable_states 0xffffffff
> [    0.929481] GHES: HEST is not enabled!
> [    0.929543] Serial: 8250/16550 driver, 4 ports, IRQ sharing disabled
> [    0.930041] Linux agpgart interface v0.103
> [    0.930113] i8042: PNP: PS/2 Controller [PNP0303:PS2K,PNP0f13:MSS0] at 0x60,0x64 irq 1,12
> [    0.930126] i8042: [0] d1 -> i8042 (command)
> [    0.930132] i8042: [0] df -> i8042 (parameter)
> [    0.930138] i8042: [0] ff -> i8042 (command)
> [    0.930198] i8042: [0] 23 <- i8042 (flush, kbd)
> [    0.930222] i8042: [0] 20 -> i8042 (command)
> [    0.930231] i8042: [0] 67 <- i8042 (return)
> [    0.930285] i8042: [0] 20 -> i8042 (command)
> [    0.930293] i8042: [0] 67 <- i8042 (return)
> [    0.930300] i8042: [0] 60 -> i8042 (command)
> [    0.932731] i8042: [0] 76 -> i8042 (parameter)
> [    0.935388] i8042: [1] d3 -> i8042 (command)
> [    0.938557] i8042: [1] 5a -> i8042 (parameter)
> [    0.938565] i8042: [1]      -- i8042 (auxerr)
> [    0.940211] i8042: [3] a9 -> i8042 (command)
> [    0.940219] i8042: [3] 23 <- i8042 (return)
> [    0.940239] i8042: [3] Interrupt 1, without any data
> [    0.943719] i8042: [4] 60 -> i8042 (command)
> [    0.946731] i8042: [4] 67 -> i8042 (parameter)
> [    0.946743] serio: i8042 KBD port at 0x60,0x64 irq 1
> [    0.946867] mousedev: PS/2 mouse device common for all mice
> [    0.948785] i8042: [6] f2 -> i8042 (kbd-data)
> [    0.948796] i8042: [6] 00 <- i8042 (interrupt, 0, 1)
> [    0.948854] rtc_cmos 00:05: RTC can wake from S4
> [    0.949019] rtc_cmos 00:05: rtc core: registered rtc_cmos as rtc0
> [    0.949053] rtc_cmos 00:05: alarms up to one year, y3k, 242 bytes nvram, hpet irqs
> [    0.949134] drop_monitor: Initializing network drop monitor service
> [    0.949204] TCP: cubic registered
> [    0.949326] NET: Registered protocol family 10
> [    0.949533] NET: Registered protocol family 17
> [    0.949546] Key type dns_resolver registered
> [    0.949901] registered taskstats version 1
> [    0.950565]   Magic number: 9:392:691
> [    0.957376] i8042: [7] 60 -> i8042 (command)
> [    0.960548] i8042: [9] 66 -> i8042 (parameter)
> [    0.960567] rtc_cmos 00:05: setting system clock to 2013-12-07 16:39:27 UTC (1386434367)
> [    0.960628] PM: Hibernation image not present or could not be loaded.
> [    0.962636] i8042: [9] 60 -> i8042 (command)
> [    0.965649] i8042: [11] 67 -> i8042 (parameter)
> [    0.965670] i8042: [11] 5a <- i8042 (interrupt, 1, 0)
> [    0.966669] Freeing unused kernel memory: 1160K (ffffffff818cd000 - ffffffff819ef000)
> [    0.966672] Write protecting the kernel read-only data: 8192k
> [    0.967662] i8042: [12] fa <- i8042 (interrupt, 0, 1)
> [    0.968027] i8042: [12] f2 -> i8042 (kbd-data)
> [    0.968249] i8042: [12] ab <- i8042 (interrupt, 0, 1)
> [    0.969630] Freeing unused kernel memory: 980K (ffff88000150b000 - ffff880001600000)
> [    0.970570] Freeing unused kernel memory: 320K (ffff8800017b0000 - ffff880001800000)
> [    0.976683] i8042: [14] fa <- i8042 (interrupt, 0, 1)
> [    0.978343] i8042: [15] ab <- i8042 (interrupt, 0, 1)
> [    0.978930] systemd-udevd[57]: starting version 208
> [    0.980041] i8042: [15] 41 <- i8042 (interrupt, 0, 1)
> [    0.980057] i8042: [15] f5 -> i8042 (kbd-data)
> [    0.981681] i8042: [16] 23 <- i8042 (interrupt, 0, 1)
> [    0.982631] [drm] Initialized drm 1.1.0 20060810
> [    0.983985] wmi: Mapper loaded
> [    0.984709] i8042: [17] fa <- i8042 (interrupt, 0, 1)
> [    0.984736] i8042: [17] ed -> i8042 (kbd-data)
> [    0.984739] ACPI: Video Device [VGA] (multi-head: yes  rom: no  post: no)
> [    0.986132] i8042: [17] 23 <- i8042 (interrupt, 0, 1)
> [    0.989692] i8042: [18] fa <- i8042 (interrupt, 0, 1)
> [    0.989721] i8042: [18] 00 -> i8042 (kbd-data)
> [    0.994055] i8042: [19] fa <- i8042 (interrupt, 0, 1)
> [    0.994079] i8042: [19] f3 -> i8042 (kbd-data)
> [    1.000465] i8042: [21] fa <- i8042 (interrupt, 0, 1)
> [    1.000485] i8042: [21] 00 -> i8042 (kbd-data)
> [    1.006166] i8042: [23] fa <- i8042 (interrupt, 0, 1)
> [    1.006204] i8042: [23] f4 -> i8042 (kbd-data)
> [    1.012989] i8042: [25] fa <- i8042 (interrupt, 0, 1)
> [    1.013139] input: AT Translated Set 2 keyboard as /devices/platform/i8042/serio0/input/input1
> [    1.020504] i8042: [27] 23 <- i8042 (interrupt, 0, 1)
> [    1.026812] acpi device:0b: registered as cooling_device0
> [    1.026938] input: Video Bus as /devices/LNXSYSTM:00/device:00/PNP0A08:00/device:09/LNXVIDEO:01/input/input2
> [    1.028000] input: Power Button as /devices/LNXSYSTM:00/device:00/PNP0A08:00/device:0e/PNP0C0C:00/input/input3
> [    1.028005] ACPI: Power Button [PWRB]
> [    1.028046] input: Sleep Button as /devices/LNXSYSTM:00/device:00/PNP0A08:00/device:0e/PNP0C0E:00/input/input4
> [    1.028049] ACPI: Sleep Button [SLPB]
> [    1.028109] input: Lid Switch as /devices/LNXSYSTM:00/device:00/PNP0A08:00/device:0e/PNP0C0D:00/input/input5
> [    1.028143] ACPI: Lid Switch [LID0]
> [    1.028204] input: Power Button as /devices/LNXSYSTM:00/LNXPWRBN:00/input/input6
> [    1.028207] ACPI: Power Button [PWRF]
> [    1.032472] checking generic (91000000 130000) vs hw (80000000 10000000)
> [    1.032476] checking generic (91000000 130000) vs hw (90000000 2000000)
> [    1.032477] fb: conflicting fb hw usage nouveaufb vs VESA VGA - removing generic driver
> [    1.032495] Console: switching to colour dummy device 80x25
> [    1.033206] nouveau  [  DEVICE][0000:01:00.0] BOOT0  : 0x0a5a00a2
> [    1.033210] nouveau  [  DEVICE][0000:01:00.0] Chipset: GT216 (NVA5)
> [    1.033212] nouveau  [  DEVICE][0000:01:00.0] Family : NV50
> [    1.034746] nouveau  [   VBIOS][0000:01:00.0] checking PRAMIN for image...
> [    1.090203] i8042: [48] a3 <- i8042 (interrupt, 0, 1)
> [    1.164871] nouveau  [   VBIOS][0000:01:00.0] ... appears to be valid
> [    1.164874] nouveau  [   VBIOS][0000:01:00.0] using image from PRAMIN
> [    1.165013] nouveau  [   VBIOS][0000:01:00.0] BIT signature found
> [    1.165016] nouveau  [   VBIOS][0000:01:00.0] version 70.16.1c.00.21
> [    1.186752] nouveau 0000:01:00.0: irq 41 for MSI/MSI-X
> [    1.186768] nouveau  [     PMC][0000:01:00.0] MSI interrupts enabled
> [    1.186808] nouveau  [     PFB][0000:01:00.0] RAM type: DDR3
> [    1.186810] nouveau  [     PFB][0000:01:00.0] RAM size: 1024 MiB
> [    1.186812] nouveau  [     PFB][0000:01:00.0]    ZCOMP: 1920 tags
> [    1.193268] nouveau  [    VOLT][0000:01:00.0] GPU voltage: 850000uv
> [    1.216778] nouveau  [  PTHERM][0000:01:00.0] FAN control: none / external
> [    1.216786] nouveau  [  PTHERM][0000:01:00.0] fan management: automatic
> [    1.216793] nouveau  [  PTHERM][0000:01:00.0] internal sensor: yes
> [    1.216865] nouveau  [     CLK][0000:01:00.0] 03: core 135 MHz shader 270 MHz memory 135 MHz
> [    1.216868] nouveau  [     CLK][0000:01:00.0] 07: core 405 MHz shader 810 MHz memory 324 MHz
> [    1.216872] nouveau  [     CLK][0000:01:00.0] 0f: core 550 MHz shader 1210 MHz memory 790 MHz
> [    1.216915] nouveau  [     CLK][0000:01:00.0] --: core 405 MHz shader 810 MHz memory 324 MHz
> [    1.217077] [TTM] Zone  kernel: Available graphics memory: 989576 kiB
> [    1.217079] [TTM] Initializing pool allocator
> [    1.217088] [TTM] Initializing DMA pool allocator
> [    1.217100] nouveau  [     DRM] VRAM: 1024 MiB
> [    1.217102] nouveau  [     DRM] GART: 1048576 MiB
> [    1.217105] nouveau  [     DRM] TMDS table version 2.0
> [    1.217107] nouveau  [     DRM] DCB version 4.0
> [    1.217110] nouveau  [     DRM] DCB outp 00: 01010323 00010034
> [    1.217112] nouveau  [     DRM] DCB outp 01: 02001300 00000000
> [    1.217114] nouveau  [     DRM] DCB outp 02: 02022362 00020010
> [    1.217115] nouveau  [     DRM] DCB conn 00: 00000040
> [    1.217117] nouveau  [     DRM] DCB conn 01: 00000100
> [    1.217119] nouveau  [     DRM] DCB conn 02: 00002261
> [    1.262069] [drm] Supports vblank timestamp caching Rev 2 (21.10.2013).
> [    1.262071] [drm] No driver support for vblank timestamp query.
> [    1.262074] nouveau  [     DRM] ACPI backlight interface available, not registering our own
> [    1.312004] nouveau  [     DRM] MM: using COPY for buffer copies
> [    1.378061] nouveau  [     DRM] allocated 1366x768 fb: 0x70000, bo ffff880076b12400
> [    1.378412] fbcon: nouveaufb (fb0) is primary device
> [    1.830558] tsc: Refined TSC clocksource calibration: 2128.004 MHz
> [    2.720296] Console: switching to colour frame buffer device 170x48
> [    2.720896] nouveau 0000:01:00.0: fb0: nouveaufb frame buffer device
> [    2.720898] nouveau 0000:01:00.0: registered panic notifier
> [    2.720904] [drm] Initialized nouveau 1.1.1 20120801 for 0000:01:00.0 on minor 0
> [    2.781027] SCSI subsystem initialized
> [    2.785979] ACPI: bus type USB registered
> [    2.786039] usbcore: registered new interface driver usbfs
> [    2.786061] usbcore: registered new interface driver hub
> [    2.786522] usbcore: registered new device driver usb
> [    2.787074] libata version 3.00 loaded.
> [    2.788578] ahci 0000:00:1f.2: version 3.0
> [    2.788891] ahci 0000:00:1f.2: irq 42 for MSI/MSI-X
> [    2.788948] ahci 0000:00:1f.2: SSS flag set, parallel bus scan disabled
> [    2.789000] ahci 0000:00:1f.2: AHCI 0001.0300 32 slots 4 ports 3 Gbps 0x13 impl SATA mode
> [    2.789007] ahci 0000:00:1f.2: flags: 64bit ncq sntf ilck stag pm led clo pio slum part ems sxs apst
> [    2.789274] ehci_hcd: USB 2.0 'Enhanced' Host Controller (EHCI) Driver
> [    2.789510] ehci-pci: EHCI PCI platform driver
> [    2.803104] scsi0 : ahci
> [    2.803592] scsi1 : ahci
> [    2.803715] scsi2 : ahci
> [    2.804500] scsi3 : ahci
> [    2.805114] scsi4 : ahci
> [    2.805363] ata1: SATA max UDMA/133 abar m2048@0x99105000 port 0x99105100 irq 42
> [    2.805422] ata2: SATA max UDMA/133 abar m2048@0x99105000 port 0x99105180 irq 42
> [    2.805425] ata3: DUMMY
> [    2.805427] ata4: DUMMY
> [    2.805432] ata5: SATA max UDMA/133 abar m2048@0x99105000 port 0x99105300 irq 42
> [    2.805663] ehci-pci 0000:00:1a.0: EHCI Host Controller
> [    2.805676] ehci-pci 0000:00:1a.0: new USB bus registered, assigned bus number 1
> [    2.805696] ehci-pci 0000:00:1a.0: debug port 2
> [    2.809687] ehci-pci 0000:00:1a.0: cache line size of 64 is not supported
> [    2.809710] ehci-pci 0000:00:1a.0: irq 16, io mem 0x99105c00
> [    2.816769] ehci-pci 0000:00:1a.0: USB 2.0 started, EHCI 1.00
> [    2.816979] hub 1-0:1.0: USB hub found
> [    2.816988] hub 1-0:1.0: 3 ports detected
> [    2.817239] ehci-pci 0000:00:1d.0: EHCI Host Controller
> [    2.817246] ehci-pci 0000:00:1d.0: new USB bus registered, assigned bus number 2
> [    2.817260] ehci-pci 0000:00:1d.0: debug port 2
> [    2.821197] ehci-pci 0000:00:1d.0: cache line size of 64 is not supported
> [    2.821219] ehci-pci 0000:00:1d.0: irq 23, io mem 0x99105800
> [    2.830120] ehci-pci 0000:00:1d.0: USB 2.0 started, EHCI 1.00
> [    2.830223] Switched to clocksource tsc
> [    2.830611] hub 2-0:1.0: USB hub found
> [    2.830632] hub 2-0:1.0: 3 ports detected
> [    3.123413] usb 1-1: new high-speed USB device number 2 using ehci-pci
> [    3.126695] ata1: SATA link up 3.0 Gbps (SStatus 123 SControl 300)
> [    3.127390] ata1.00: ATA-9: OCZ-VERTEX4, 1.5, max UDMA/133
> [    3.127398] ata1.00: 250069680 sectors, multi 16: LBA48 NCQ (depth 31/32), AA
> [    3.128201] ata1.00: configured for UDMA/133
> [    3.128425] scsi 0:0:0:0: Direct-Access     ATA      OCZ-VERTEX4      1.5  PQ: 0 ANSI: 5
> [    3.247461] hub 1-1:1.0: USB hub found
> [    3.247625] hub 1-1:1.0: 6 ports detected
> [    3.353282] usb 2-1: new high-speed USB device number 2 using ehci-pci
> [    3.446596] ata2: SATA link up 1.5 Gbps (SStatus 113 SControl 300)
> [    3.459677] ata2.00: ATAPI: Optiarc DVD RW AD-7580S, F820, max UDMA/100
> [    3.474591] ata2.00: configured for UDMA/100
> [    3.477642] hub 2-1:1.0: USB hub found
> [    3.477746] hub 2-1:1.0: 8 ports detected
> [    3.477899] scsi 1:0:0:0: CD-ROM            Optiarc  DVD RW AD-7580S  F820 PQ: 0 ANSI: 5
> [    3.546651] usb 1-1.4: new full-speed USB device number 3 using ehci-pci
> [    3.743314] usb 2-1.3: new high-speed USB device number 3 using ehci-pci
> [    3.796436] ata5: SATA link down (SStatus 0 SControl 300)
> [    3.800088] sd 0:0:0:0: [sda] 250069680 512-byte logical blocks: (128 GB/119 GiB)
> [    3.800206] sd 0:0:0:0: [sda] Write Protect is off
> [    3.800215] sd 0:0:0:0: [sda] Mode Sense: 00 3a 00 00
> [    3.800282] sd 0:0:0:0: [sda] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA
> [    3.803451]  sda: sda1 sda2 sda3
> [    3.804130] sd 0:0:0:0: [sda] Attached SCSI disk
> [    3.804470] sr0: scsi3-mmc drive: 62x/62x writer dvd-ram cd/rw xa/form2 cdda tray
> [    3.804474] cdrom: Uniform CD-ROM driver Revision: 3.20
> [    3.804735] sr 1:0:0:0: Attached scsi CD-ROM sr0
> [    4.195399] EXT4-fs (sda2): mounted filesystem with ordered data mode. Opts: (null)
> [    4.270424] systemd[1]: systemd 208 running in system mode. (+PAM -LIBWRAP -AUDIT -SELINUX -IMA -SYSVINIT +LIBCRYPTSETUP +GCRYPT +ACL +XZ)
> [    4.271582] systemd[1]: Set hostname to <o2pc>.
> [    4.274329] random: systemd urandom read with 72 bits of entropy available
> [    4.341107] systemd[1]: Cannot add dependency job for unit display-manager.service, ignoring: Unit display-manager.service failed to load: No such file or directory.
> [    4.341540] systemd[1]: Starting Forward Password Requests to Wall Directory Watch.
> [    4.341661] systemd[1]: Started Forward Password Requests to Wall Directory Watch.
> [    4.341689] systemd[1]: Starting Remote File Systems.
> [    4.341713] systemd[1]: Reached target Remote File Systems.
> [    4.341732] systemd[1]: Starting Device-mapper event daemon FIFOs.
> [    4.341791] systemd[1]: Listening on Device-mapper event daemon FIFOs.
> [    4.341810] systemd[1]: Starting LVM2 metadata daemon socket.
> [    4.341863] systemd[1]: Listening on LVM2 metadata daemon socket.
> [    4.341882] systemd[1]: Starting /dev/initctl Compatibility Named Pipe.
> [    4.341918] systemd[1]: Listening on /dev/initctl Compatibility Named Pipe.
> [    4.341936] systemd[1]: Starting Delayed Shutdown Socket.
> [    4.341976] systemd[1]: Listening on Delayed Shutdown Socket.
> [    4.342035] systemd[1]: Starting Arbitrary Executable File Formats File System Automount Point.
> [    4.342219] systemd[1]: Set up automount Arbitrary Executable File Formats File System Automount Point.
> [    4.342248] systemd[1]: Starting Dispatch Password Requests to Console Directory Watch.
> [    4.342315] systemd[1]: Started Dispatch Password Requests to Console Directory Watch.
> [    4.342334] systemd[1]: Starting Paths.
> [    4.342355] systemd[1]: Reached target Paths.
> [    4.342372] systemd[1]: Starting Encrypted Volumes.
> [    4.342391] systemd[1]: Reached target Encrypted Volumes.
> [    4.342414] systemd[1]: Starting udev Kernel Socket.
> [    4.342454] systemd[1]: Listening on udev Kernel Socket.
> [    4.342476] systemd[1]: Starting udev Control Socket.
> [    4.342518] systemd[1]: Listening on udev Control Socket.
> [    4.342540] systemd[1]: Starting Journal Socket.
> [    4.342625] systemd[1]: Listening on Journal Socket.
> [    4.342666] systemd[1]: Mounting Huge Pages File System...
> [    4.344185] systemd[1]: Started Set Up Additional Binary Formats.
> [    4.344231] systemd[1]: Starting udev Coldplug all Devices...
> [    4.344940] systemd[1]: Mounting Debug File System...
> [    4.346524] systemd[1]: Starting Apply Kernel Variables...
> [    4.347091] systemd[1]: Starting Setup Virtual Console...
> [    4.353930] systemd[1]: Starting Create list of required static device nodes for the current kernel...
> [    4.354487] systemd[1]: Mounting POSIX Message Queue File System...
> [    4.357367] systemd[1]: Starting Load Kernel Modules...
> [    4.357702] systemd[1]: Starting Journal Service...
> [    4.358782] systemd[1]: Started Journal Service.
> [    4.371482] EXT4-fs (sda2): re-mounted. Opts: discard
> [    4.375670] i2c /dev entries driver
> [    4.376362] systemd-journald[132]: Vacuuming done, freed 0 bytes
> [    4.400629] ACPI Warning: 0x0000000000005000-0x000000000000501f SystemIO conflicts with Region \_SB_.PCI0.SBUS.SMBI 1 (20131115/utaddress-251)
> [    4.400637] ACPI: If an ACPI driver is available for this device, you should use it instead of the native driver
> [    4.429366] systemd-udevd[157]: starting version 208
> [    4.434254] systemd-journald[132]: Received request to flush runtime journal from PID 1
> [    4.527006] shpchp: Standard Hot Plug PCI Controller Driver version: 0.4
> [    4.533311] ene_ir: chip is 0x3926 - kbver = 0x00, rev = 0xd2
> [    4.533313] ene_ir: PLL freq = 1000
> [    4.533315] ene_ir: KB3926D or higher detected
> [    4.533330] ene_ir: Firmware regs: cc 00
> [    4.533331] ene_ir: Hardware features:
> [    4.533332] ene_ir: * Uses GPIO 40 for IR demodulated input
> [    4.533333] ene_ir: * Uses new style input buffer
> [    4.533381] ene_ir: Hardware uses 2 extended buffers:
> [    4.533382] ene_ir:   0xfa48 - len : 15
> [    4.533384] ene_ir:   0xfa00 - len : 17
> [    4.533385] ene_ir: Total buffer len = 40
> [    4.538176] ACPI: AC Adapter [ACAD] (on-line)
> [    4.555652] snd_hda_intel 0000:00:1b.0: irq 43 for MSI/MSI-X
> [    4.557643] ACPI : EC: GPE storm detected(9 GPEs), transactions will use polling mode
> [    4.559700] Registered IR keymap rc-rc6-mce
> [    4.560655] input: ENE eHome Infrared Remote Receiver as /devices/virtual/rc/rc0/input7
> [    4.560923] rc0: ENE eHome Infrared Remote Receiver as /devices/virtual/rc/rc0
> [    4.566518] IR RC6 protocol handler initialized
> [    4.566814] IR RC5(x) protocol handler initialized
> [    4.567212] IR JVC protocol handler initialized
> [    4.569200] IR NEC protocol handler initialized
> [    4.570794] pps_core: LinuxPPS API ver. 1 registered
> [    4.570798] pps_core: Software ver. 5.3.6 - Copyright 2005-2007 Rodolfo Giometti <giometti@linux.it>
> [    4.571733] IR MCE Keyboard/mouse protocol handler initialized
> [    4.571838] IR SANYO protocol handler initialized
> [    4.571976] input: MCE IR Keyboard/Mouse (ene_ir) as /devices/virtual/input/input8
> [    4.572324] PTP clock support registered
> [    4.573220] ene_ir: driver has been successfully loaded
> [    4.574320] IR Sony protocol handler initialized
> [    4.576848] input: HDA Digital PCBeep as /devices/pci0000:00/0000:00:1b.0/input/input9
> [    4.578547] lirc_dev: IR Remote Control driver registered, major 249
> [    4.580568] tg3.c:v3.134 (Sep 16, 2013)
> [    4.582159] rc rc0: lirc_dev: driver ir-lirc-codec (ene_ir) registered at minor = 0
> [    4.582166] IR LIRC bridge handler initialized
> [    4.587881] cfg80211: Calling CRDA to update world regulatory domain
> [    4.589851] input: HDA Intel MID Front Headphone as /devices/pci0000:00/0000:00:1b.0/sound/card0/input11
> [    4.590134] input: HDA Intel MID Mic as /devices/pci0000:00/0000:00:1b.0/sound/card0/input10
> [    4.593140] ACPI Warning: 0x0000000000000428-0x000000000000042f SystemIO conflicts with Region \PMIO 1 (20131115/utaddress-251)
> [    4.593148] ACPI: If an ACPI driver is available for this device, you should use it instead of the native driver
> [    4.593154] ACPI Warning: 0x0000000000000540-0x000000000000054f SystemIO conflicts with Region \GPIO 1 (20131115/utaddress-251)
> [    4.593158] ACPI: If an ACPI driver is available for this device, you should use it instead of the native driver
> [    4.593160] ACPI Warning: 0x0000000000000530-0x000000000000053f SystemIO conflicts with Region \GPIO 1 (20131115/utaddress-251)
> [    4.593165] ACPI: If an ACPI driver is available for this device, you should use it instead of the native driver
> [    4.593167] ACPI Warning: 0x0000000000000500-0x000000000000052f SystemIO conflicts with Region \GPIO 1 (20131115/utaddress-251)
> [    4.593171] ACPI: If an ACPI driver is available for this device, you should use it instead of the native driver
> [    4.593173] lpc_ich: Resource conflict(s) found affecting gpio_ich
> [    4.593242] libphy: tg3 mdio bus: probed
> [    4.593957] hda_intel: Disabling MSI
> [    4.593964] hda-intel 0000:01:00.1: Handle VGA-switcheroo audio client
> [    4.603384] tg3 0000:07:00.0 eth0: Tigon3 [partno(BCM57780) rev 57780001] (PCI Express) MAC address 70:5a:b6:5f:4c:c4
> [    4.603388] tg3 0000:07:00.0 eth0: attached PHY driver [Broadcom BCM57780] (mii_bus:phy_addr=700:01)
> [    4.603391] tg3 0000:07:00.0 eth0: RXcsums[1] LinkChgREG[0] MIirq[0] ASF[0] TSOcap[1]
> [    4.603393] tg3 0000:07:00.0 eth0: dma_rwctrl[76180000] dma_mask[64-bit]
> [    4.618176] microcode: CPU0 sig=0x20652, pf=0x10, revision=0x9
> [    4.624032] platform microcode: Direct firmware load failed with error -2
> [    4.624038] platform microcode: Falling back to user helper
> [    4.631780] ideapad_slidebar: Laptop model 'Lenovo IdeaPad Y550P'
> [    4.672633] Adding 4190204k swap on /dev/sda3.  Priority:-1 extents:1 across:4190204k SSFS
> [    4.696164] ACPI: Invalid active0 threshold
> [    4.701631] ath: phy0: Enable LNA combining
> [    4.704418] ath: phy0: ASPM enabled: 0x43
> [    4.704422] ath: EEPROM regdomain: 0x6a
> [    4.704424] ath: EEPROM indicates we should expect a direct regpair map
> [    4.704427] ath: Country alpha2 being used: 00
> [    4.704428] ath: Regpair used: 0x6a
> [    4.709441] input: Ideapad extra buttons as /devices/platform/VPC2004:00/input/input12
> [    4.716028] random: nonblocking pool is initialized
> [    4.717198] Bluetooth: Core ver 2.17
> [    4.717218] NET: Registered protocol family 31
> [    4.717220] Bluetooth: HCI device and connection manager initialized
> [    4.717231] Bluetooth: HCI socket layer initialized
> [    4.717234] Bluetooth: L2CAP socket layer initialized
> [    4.717240] Bluetooth: SCO socket layer initialized
> [    4.719068] usbcore: registered new interface driver btusb
> [    4.719106] ieee80211 phy0: Selected rate control algorithm 'minstrel_ht'
> [    4.719425] ieee80211 phy0: Atheros AR9285 Rev:2 mem=0xffffc90015200000, irq=17
> [    4.727739] media: Linux media interface: v0.10
> [    4.731785] Linux video capture interface: v2.00
> [    4.740364] uvcvideo: Found UVC 1.00 device Lenovo EasyCamera (090c:7371)
> [    4.796054] thermal LNXTHERM:00: registered as thermal_zone0
> [    4.796059] ACPI: Thermal Zone [TZ00] (51 C)
> [    4.801246] iTCO_vendor_support: vendor-support=0
> [    4.803147] microcode: CPU1 sig=0x20652, pf=0x10, revision=0x9
> [    4.803165] platform microcode: Direct firmware load failed with error -2
> [    4.803168] platform microcode: Falling back to user helper
> [    4.803903] iTCO_wdt: Intel TCO WatchDog Timer Driver v1.10
> [    4.804016] iTCO_wdt: Found a HM55 TCO device (Version=2, TCOBASE=0x0460)
> [    4.804188] iTCO_wdt: initialized. heartbeat=30 sec (nowayout=0)
> [    4.816117] systemd-udevd[171]: renamed network interface eth0 to enp7s0
> [    4.827947] microcode: CPU2 sig=0x20652, pf=0x10, revision=0x9
> [    4.827967] platform microcode: Direct firmware load failed with error -2
> [    4.827969] platform microcode: Falling back to user helper
> [    4.832522] systemd-udevd[174]: renamed network interface wlan0 to wlp6s0
> [    4.833834] microcode: CPU3 sig=0x20652, pf=0x10, revision=0x9
> [    4.833865] platform microcode: Direct firmware load failed with error -2
> [    4.833871] platform microcode: Falling back to user helper
> [    4.836900] microcode: Microcode Update Driver: v2.00 <tigran@aivazian.fsnet.co.uk>, Peter Oruba
> [    4.859130] kvm: disabled by bios
> [    4.919434] input: Lenovo EasyCamera as /devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.3/2-1.3:1.0/input/input13
> [    4.919720] usbcore: registered new interface driver uvcvideo
> [    4.919725] USB Video Class driver (1.1.1)
> [    5.269471] ACPI: Battery Slot [BAT1] (battery present)
> [    5.275917] input: HDA NVidia HDMI/DP,pcm=9 as /devices/pci0000:00/0000:00:01.0/0000:01:00.1/sound/card1/input17
> [    5.276022] input: HDA NVidia HDMI/DP,pcm=8 as /devices/pci0000:00/0000:00:01.0/0000:01:00.1/sound/card1/input16
> [    5.276113] input: HDA NVidia HDMI/DP,pcm=7 as /devices/pci0000:00/0000:00:01.0/0000:01:00.1/sound/card1/input15
> [    5.276200] input: HDA NVidia HDMI/DP,pcm=3 as /devices/pci0000:00/0000:00:01.0/0000:01:00.1/sound/card1/input14
> [    5.336683] IPv6: ADDRCONF(NETDEV_UP): wlp6s0: link is not ready
> [    5.339221] tg3 0000:07:00.0: irq 44 for MSI/MSI-X
> [    5.360249] IPv6: ADDRCONF(NETDEV_UP): enp7s0: link is not ready
> [    5.405775] i8042: [1344] a8 -> i8042 (command)
> [    5.405928] input: PC Speaker as /devices/platform/pcspkr/input/input18
> [    5.406262] input: IdeaPad Slidebar as /devices/platform/ideapad_slidebar/input/input19
> [    5.603395] tg3 0000:07:00.0 enp7s0: Link is down
>
>
> On 12/07/2013 08:02 PM, Dmitry Torokhov wrote:
>> On Sat, Dec 07, 2013 at 05:47:09PM +0400, Andrey Moiseev wrote:
>>> I inserted a printk into ps2_handle_response(struct ps2dev *ps2dev,
>>> unsigned char data) in "drivers/input/serio/libps2.c" and other
>>> functions in the file.
>>> It really eats scancodes from the keyboard, as I see (0x23 is the 'H'
>>> press scancode). Seems like the scancodes are mixed with reasonable
>>> values. Is it a bug in the controller?
>>
>> Not necessarily... Can you boot with i8042.debug=1 and post full dmesg?
>>
>> Thanks.
>>
>

^ permalink raw reply

* Re: [PATCH] input synaptics-rmi4: elliminate multiple sensor support from rmi_f11.c
From: Christopher Heiny @ 2013-12-09  0:10 UTC (permalink / raw)
  To: Dmitry Torokhov
  Cc: Andrew Duggan, Linux Input, Vincent Huang, Vivian Ly,
	Daniel Rosenberg, Jean Delvare, Joerie de Gram, Linus Walleij,
	Benjamin Tissoires
In-Reply-To: <20131207160527.GB11635@core.coreip.homeip.net>

On 12/07/2013 08:05 AM, Dmitry Torokhov wrote:
> Hi Andrew,
> 
> On Thu, Dec 05, 2013 at 05:59:27PM -0800, Andrew Duggan wrote:
>> > This patch implements changes to the synaptics-rmi4 branch of
>> > Dmitry's input tree.  The base for the patch is commit
>> > 8ca01dc61a42b6f7bcba052a8c084000f7057a34.
>> > 
>> > This patch elliminates support for multiple sensors in rmi_f11. This feature
>> > has been removed from the RMI4 spec and no devices have every used multiple
>> > F11 sensors on a single device.
>> > 
>> > Signed-off-by: Andrew Duggan <aduggan@synaptics.com>
> I am a bit confused here - has this been coordinated with recent
> submission by Chris? I'd prefer if there was a single person from
> Synaptics posting patches at the same time, so that I know they are
> properly sequenced.

Hi,

To make things go faster, Andrew working with me to split the large
patch into manageable bites, and I asked him to go ahead and submit that
one.  That patch is in sequence - I'll sign off on it in a moment.
We'll run future patches through my email.

					Chris

^ permalink raw reply

* Re: [PATCH] input synaptics-rmi4: elliminate multiple sensor support from rmi_f11.c
From: Christopher Heiny @ 2013-12-09  0:11 UTC (permalink / raw)
  To: Andrew Duggan
  Cc: Dmitry Torokhov, Linux Input, Vincent Huang, Vivian Ly,
	Daniel Rosenberg, Jean Delvare, Joerie de Gram, Linus Walleij,
	Benjamin Tissoires
In-Reply-To: <1386295167-866-1-git-send-email-aduggan@synaptics.com>

On 12/05/2013 05:59 PM, Andrew Duggan wrote:
> This patch implements changes to the synaptics-rmi4 branch of
> Dmitry's input tree.  The base for the patch is commit
> 8ca01dc61a42b6f7bcba052a8c084000f7057a34.
> 
> This patch elliminates support for multiple sensors in rmi_f11. This feature
> has been removed from the RMI4 spec and no devices have every used multiple
> F11 sensors on a single device.
> 
> Signed-off-by: Andrew Duggan <aduggan@synaptics.com>


Sign-off-by: Christopher Heiny <cheiny@synaptics.com>

^ permalink raw reply

* Re: Sony DualShock4 - basic functions work, but looking to improve support
From: simon @ 2013-12-09  0:51 UTC (permalink / raw)
  To: simon; +Cc: Linux Input, Antonio Ospite
In-Reply-To: <61a33717137a02a1d0eac5a2d1cb257e.squirrel@mungewell.org>

[-- Attachment #1: Type: text/plain, Size: 956 bytes --]

Following a very useful post on Reddit:
http://np.reddit.com/r/PS4/comments/1p9y0l/pairing_your_ds4_controller_via_bluetooth/

I was able to put the DS4 into discoverable mode, pair and connect using
the 'hidd --connect 1C:66:6D:07:C3:E0' to get a working wireless/BT
joystick.

discoverable - hold 'PS' and 'Share' until light bar fast strobes.
connected - light bar turns on constant.
turn device off - hold 'PS' until light bar turns off.

Not sure why, but under a bluetooth connection the 'hidraw0' device only
outputs the first 10 bytes (compared to 64 bytes with USB connection)
--
$ hexdump -v -e '10/1 "%02x " "\n"' < /dev/hidraw0
01 7d 7e 82 7e 08 00 00 00 00
01 7d 7e 83 7e 08 00 00 00 00
01 7d 7e 81 7e 08 00 00 00 00
01 7d 7e 82 7e 08 00 00 00 00
01 7d 7e 80 7f 08 00 00 00 00
--

Attached are some bluetooth details for the device. No idea on how to get
audio to/from the device - I was kind of hoping it would behave like a BT
headset.
Simon

[-- Attachment #2: hcitool_info.txt --]
[-- Type: text/plain, Size: 1017 bytes --]

simon@womble:~$ hcitool info 1C:66:6D:07:C3:E0
Requesting information ...
	BD Address:  1C:66:6D:07:C3:E0
	Device Name: Wireless Controller
	LMP Version: 3.0 (0x5) LMP Subversion: 0x0
	Manufacturer: Atheros Communications, Inc. (69)
	Features: 0xff 0xfe 0x0d 0xfe 0x98 0x7f 0x79 0x87
		<3-slot packets> <5-slot packets> <encryption> <slot offset> 
		<timing accuracy> <role switch> <hold mode> <sniff mode> 
		<RSSI> <channel quality> <SCO link> <HV2 packets> 
		<HV3 packets> <u-law log> <A-law log> <CVSD> <power control> 
		<transparent SCO> <EDR ACL 2 Mbps> <EDR ACL 3 Mbps> 
		<enhanced iscan> <interlaced iscan> <interlaced pscan> 
		<inquiry with RSSI> <extended SCO> <AFH cap. slave> 
		<AFH class. slave> <3-slot EDR ACL> <5-slot EDR ACL> 
		<sniff subrating> <pause encryption> <AFH cap. master> 
		<AFH class. master> <EDR eSCO 2 Mbps> <EDR eSCO 3 Mbps> 
		<extended inquiry> <simple pairing> <encapsulated PDU> 
		<err. data report> <non-flush flag> <LSTO> <inquiry TX power> 
		<EPC> <extended features> 

[-- Attachment #3: sdptool_records.txt --]
[-- Type: text/plain, Size: 736 bytes --]

simon@womble:~/dualshock4$ sdptool records 1C:66:6D:07:C3:E0
Service Name: Wireless Controller
Service Description: Game Controller
Service Provider: Sony Computer Entertainment
Service RecHandle: 0x10001
Service Class ID List:
  "Human Interface Device" (0x1124)
Protocol Descriptor List:
  "L2CAP" (0x0100)
    PSM: 17
  "HIDP" (0x0011)
Language Base Attr List:
  code_ISO639: 0x656e
  encoding:    0x6a
  base_offset: 0x100
Profile Descriptor List:
  "Human Interface Device" (0x1124)
    Version: 0x0100

Service RecHandle: 0x10002
Service Class ID List:
  "PnP Information" (0x1200)
Protocol Descriptor List:
  "L2CAP" (0x0100)
    PSM: 1
  "SDP" (0x0001)
Profile Descriptor List:
  "PnP Information" (0x1200)
    Version: 0x0103


^ permalink raw reply

* [PATCH] Add: (1) Detection for newer Elantech touchpads, so that kernel doesn't fall-back to default PS/2 driver. (2) Enable hardware version 4 touchpad right click function.
From: Duson Lin @ 2013-12-09  2:59 UTC (permalink / raw)
  To: linux-kernel, linux-input, dmitry.torokhov; +Cc: Duson Lin

Modify:
(1) crc_enabled only support for v3 and v4 touchpad, so initialize crc_enabled as false first and
check this hardware flag when hw_version as 3 or 4.

Signed-off-by: Duson Lin <dusonlin@emc.com.tw>
---
 drivers/input/mouse/elantech.c |   30 ++++++++++++++----------------
 drivers/input/mouse/elantech.h |    2 +-
 2 files changed, 15 insertions(+), 17 deletions(-)

diff --git a/drivers/input/mouse/elantech.c b/drivers/input/mouse/elantech.c
index 8551dca..b3627cf 100644
--- a/drivers/input/mouse/elantech.c
+++ b/drivers/input/mouse/elantech.c
@@ -1,5 +1,5 @@
 /*
- * Elantech Touchpad driver (v6)
+ * Elantech Touchpad driver (v7)
  *
  * Copyright (C) 2007-2009 Arjan Opmeer <arjan@opmeer.net>
  *
@@ -486,6 +486,7 @@ static void elantech_input_sync_v4(struct psmouse *psmouse)
 	unsigned char *packet = psmouse->packet;
 
 	input_report_key(dev, BTN_LEFT, packet[0] & 0x01);
+	input_report_key(dev, BTN_RIGHT, packet[0] & 0x02);
 	input_mt_report_pointer_emulation(dev, true);
 	input_sync(dev);
 }
@@ -1047,9 +1048,7 @@ static int elantech_set_input_params(struct psmouse *psmouse)
 			 */
 			psmouse_warn(psmouse, "couldn't query resolution data.\n");
 		}
-		/* v4 is clickpad, with only one button. */
 		__set_bit(INPUT_PROP_BUTTONPAD, dev->propbit);
-		__clear_bit(BTN_RIGHT, dev->keybit);
 		__set_bit(BTN_TOOL_QUADTAP, dev->keybit);
 		/* For X to recognize me as touchpad. */
 		input_set_abs_params(dev, ABS_X, x_min, x_max, 0, 0);
@@ -1186,19 +1185,12 @@ static struct attribute_group elantech_attr_group = {
 
 static bool elantech_is_signature_valid(const unsigned char *param)
 {
-	static const unsigned char rates[] = { 200, 100, 80, 60, 40, 20, 10 };
-	int i;
-
 	if (param[0] == 0)
 		return false;
 
 	if (param[1] == 0)
 		return true;
 
-	for (i = 0; i < ARRAY_SIZE(rates); i++)
-		if (param[2] == rates[i])
-			return false;
-
 	return true;
 }
 
@@ -1298,6 +1290,14 @@ static int elantech_set_properties(struct elantech_data *etd)
 {
 	/* This represents the version of IC body. */
 	int ver = (etd->fw_version & 0x0f0000) >> 16;
+	/*
+	 * The signatures of v3 and v4 packets change depending on the
+	 * value of this hardware flag. But the v1 and v2 have not crc
+	 * check mechanism and the same hardware flag are also defined
+	 * as other function. So crc_enabled must be initialized as false 
+	 * first and checking by different hw_version.
+	 */
+	etd->crc_enabled = false;
 
 	/* Early version of Elan touchpads doesn't obey the rule. */
 	if (etd->fw_version < 0x020030 || etd->fw_version == 0x020600)
@@ -1309,10 +1309,14 @@ static int elantech_set_properties(struct elantech_data *etd)
 			etd->hw_version = 2;
 			break;
 		case 5:
+			etd->crc_enabled = ((etd->fw_version & 0x4000) == 0x4000);
 			etd->hw_version = 3;
 			break;
 		case 6:
 		case 7:
+		case 8:
+		case 10:
+			etd->crc_enabled = ((etd->fw_version & 0x4000) == 0x4000);
 			etd->hw_version = 4;
 			break;
 		default:
@@ -1343,12 +1347,6 @@ static int elantech_set_properties(struct elantech_data *etd)
 			etd->reports_pressure = true;
 	}
 
-	/*
-	 * The signatures of v3 and v4 packets change depending on the
-	 * value of this hardware flag.
-	 */
-	etd->crc_enabled = ((etd->fw_version & 0x4000) == 0x4000);
-
 	return 0;
 }
 
diff --git a/drivers/input/mouse/elantech.h b/drivers/input/mouse/elantech.h
index 036a04a..c963ac8 100644
--- a/drivers/input/mouse/elantech.h
+++ b/drivers/input/mouse/elantech.h
@@ -1,5 +1,5 @@
 /*
- * Elantech Touchpad driver (v6)
+ * Elantech Touchpad driver (v7)
  *
  * Copyright (C) 2007-2009 Arjan Opmeer <arjan@opmeer.net>
  *
-- 
1.7.10.4


^ permalink raw reply related

* Re: [PATCH] Add: (1) Detection for newer Elantech touchpads, so that kernel doesn't fall-back to default PS/2 driver. (2) Enable hardware version 4 touchpad right click function.
From: Dmitry Torokhov @ 2013-12-09  6:32 UTC (permalink / raw)
  To: Duson Lin; +Cc: linux-kernel, linux-input
In-Reply-To: <1386557990-27445-1-git-send-email-dusonlin@emc.com.tw>

Hi Duson.


On Mon, Dec 09, 2013 at 10:59:50AM +0800, Duson Lin wrote:
> Modify:
> (1) crc_enabled only support for v3 and v4 touchpad, so initialize crc_enabled as false first and
> check this hardware flag when hw_version as 3 or 4.

It looks to me there are several fixes rolled up together in this patch:

1. Support for the new hardware signatures (8 and 10, although I already
applied patch for 8)
2. Fix to handle CRC check
3. Changes to report BTN_RIGHT.

Could you please split them up please?

Also, I am not sure if we can simply start reporting BTN_RIGHT as
present, even on devices that don't actually have the right button, as
this will interfere with userspace providing emulation for multiple
buttons.

Is it possible to determine if a given model had right button or not?

Thanks.

> 
> Signed-off-by: Duson Lin <dusonlin@emc.com.tw>
> ---
>  drivers/input/mouse/elantech.c |   30 ++++++++++++++----------------
>  drivers/input/mouse/elantech.h |    2 +-
>  2 files changed, 15 insertions(+), 17 deletions(-)
> 
> diff --git a/drivers/input/mouse/elantech.c b/drivers/input/mouse/elantech.c
> index 8551dca..b3627cf 100644
> --- a/drivers/input/mouse/elantech.c
> +++ b/drivers/input/mouse/elantech.c
> @@ -1,5 +1,5 @@
>  /*
> - * Elantech Touchpad driver (v6)
> + * Elantech Touchpad driver (v7)
>   *
>   * Copyright (C) 2007-2009 Arjan Opmeer <arjan@opmeer.net>
>   *
> @@ -486,6 +486,7 @@ static void elantech_input_sync_v4(struct psmouse *psmouse)
>  	unsigned char *packet = psmouse->packet;
>  
>  	input_report_key(dev, BTN_LEFT, packet[0] & 0x01);
> +	input_report_key(dev, BTN_RIGHT, packet[0] & 0x02);
>  	input_mt_report_pointer_emulation(dev, true);
>  	input_sync(dev);
>  }
> @@ -1047,9 +1048,7 @@ static int elantech_set_input_params(struct psmouse *psmouse)
>  			 */
>  			psmouse_warn(psmouse, "couldn't query resolution data.\n");
>  		}
> -		/* v4 is clickpad, with only one button. */
>  		__set_bit(INPUT_PROP_BUTTONPAD, dev->propbit);
> -		__clear_bit(BTN_RIGHT, dev->keybit);
>  		__set_bit(BTN_TOOL_QUADTAP, dev->keybit);
>  		/* For X to recognize me as touchpad. */
>  		input_set_abs_params(dev, ABS_X, x_min, x_max, 0, 0);
> @@ -1186,19 +1185,12 @@ static struct attribute_group elantech_attr_group = {
>  
>  static bool elantech_is_signature_valid(const unsigned char *param)
>  {
> -	static const unsigned char rates[] = { 200, 100, 80, 60, 40, 20, 10 };
> -	int i;
> -
>  	if (param[0] == 0)
>  		return false;
>  
>  	if (param[1] == 0)
>  		return true;
>  
> -	for (i = 0; i < ARRAY_SIZE(rates); i++)
> -		if (param[2] == rates[i])
> -			return false;
> -
>  	return true;
>  }
>  
> @@ -1298,6 +1290,14 @@ static int elantech_set_properties(struct elantech_data *etd)
>  {
>  	/* This represents the version of IC body. */
>  	int ver = (etd->fw_version & 0x0f0000) >> 16;
> +	/*
> +	 * The signatures of v3 and v4 packets change depending on the
> +	 * value of this hardware flag. But the v1 and v2 have not crc
> +	 * check mechanism and the same hardware flag are also defined
> +	 * as other function. So crc_enabled must be initialized as false 
> +	 * first and checking by different hw_version.
> +	 */
> +	etd->crc_enabled = false;
>  
>  	/* Early version of Elan touchpads doesn't obey the rule. */
>  	if (etd->fw_version < 0x020030 || etd->fw_version == 0x020600)
> @@ -1309,10 +1309,14 @@ static int elantech_set_properties(struct elantech_data *etd)
>  			etd->hw_version = 2;
>  			break;
>  		case 5:
> +			etd->crc_enabled = ((etd->fw_version & 0x4000) == 0x4000);
>  			etd->hw_version = 3;
>  			break;
>  		case 6:
>  		case 7:
> +		case 8:
> +		case 10:
> +			etd->crc_enabled = ((etd->fw_version & 0x4000) == 0x4000);
>  			etd->hw_version = 4;
>  			break;
>  		default:
> @@ -1343,12 +1347,6 @@ static int elantech_set_properties(struct elantech_data *etd)
>  			etd->reports_pressure = true;
>  	}
>  
> -	/*
> -	 * The signatures of v3 and v4 packets change depending on the
> -	 * value of this hardware flag.
> -	 */
> -	etd->crc_enabled = ((etd->fw_version & 0x4000) == 0x4000);
> -
>  	return 0;
>  }
>  
> diff --git a/drivers/input/mouse/elantech.h b/drivers/input/mouse/elantech.h
> index 036a04a..c963ac8 100644
> --- a/drivers/input/mouse/elantech.h
> +++ b/drivers/input/mouse/elantech.h
> @@ -1,5 +1,5 @@
>  /*
> - * Elantech Touchpad driver (v6)
> + * Elantech Touchpad driver (v7)
>   *
>   * Copyright (C) 2007-2009 Arjan Opmeer <arjan@opmeer.net>
>   *
> -- 
> 1.7.10.4
> 

-- 
Dmitry

^ permalink raw reply

* Re: [PATCH] Input: samsung-keypad - favor platform data if present
From: Jingoo Han @ 2013-12-09  8:04 UTC (permalink / raw)
  To: 'Dmitry Torokhov', linux-input
  Cc: 'Sachin Kamat', 'Thomas Abraham',
	'Joonyoung Shim', linux-kernel, 'Jingoo Han'
In-Reply-To: <20131206100215.GA27763@core.coreip.homeip.net>

On Friday, December 06, 2013 7:02 PM, Dmitry Torokhov wrote:
> 
> We should be able to override firmware-provided parameters with in-kernel
> data, if needed. To that effect favor platform data, if present, over
> devicetree data.
> 
> Signed-off-by: Dmitry Torokhov <dtor@mail.ru>

It looks good.

Reviewed-by: Jingoo Han <jg1.han@samsung.com>

Best regards,
Jingoo Han

> ---
>  drivers/input/keyboard/samsung-keypad.c | 36 +++++++++++++++++++--------------
>  1 file changed, 21 insertions(+), 15 deletions(-)



^ permalink raw reply

* Re: ADXL34X orientation definition
From: Michael Hennerich @ 2013-12-09  8:11 UTC (permalink / raw)
  To: Dmitry Torokhov; +Cc: linux-input@vger.kernel.org
In-Reply-To: <20131207095335.GA10573@core.coreip.homeip.net>

On 12/07/2013 10:53 AM, Dmitry Torokhov wrote:
> Hi Michael,
>
> I was going though Coverity reports and it looks like definition of
>
> #define ADXL346_2D_ORIENT(x)            (((x) & 0x3) >> 4)
>
> is not correct as it will always evaluate to 0. Should the mask be 0x30
> instead?
>
> Thanks.
>
Hi Dmitry,

Good catch!

Yes, of course  - the mask should be 0x30.
Shall I send a patch?

-- 
Greetings,
Michael

--
Analog Devices GmbH      Wilhelm-Wagenfeld-Str. 6      80807 Muenchen
Sitz der Gesellschaft: Muenchen; Registergericht: Muenchen HRB 40368;
Geschaeftsfuehrer:Dr.Carsten Suckrow, Thomas Wessel, William A. Martin,
Margaret Seif



^ permalink raw reply

* Re: Sony DualShock4 - basic functions work, but looking to improve support
From: David Herrmann @ 2013-12-09  9:05 UTC (permalink / raw)
  To: Simon Wood; +Cc: Linux Input, Antonio Ospite
In-Reply-To: <a26fde1f94cf430dd54a5045f82ac260.squirrel@mungewell.org>

Hi

On Mon, Dec 9, 2013 at 1:51 AM,  <simon@mungewell.org> wrote:
> Following a very useful post on Reddit:
> http://np.reddit.com/r/PS4/comments/1p9y0l/pairing_your_ds4_controller_via_bluetooth/
>
> I was able to put the DS4 into discoverable mode, pair and connect using
> the 'hidd --connect 1C:66:6D:07:C3:E0' to get a working wireless/BT
> joystick.
>
> discoverable - hold 'PS' and 'Share' until light bar fast strobes.
> connected - light bar turns on constant.
> turn device off - hold 'PS' until light bar turns off.
>
> Not sure why, but under a bluetooth connection the 'hidraw0' device only
> outputs the first 10 bytes (compared to 64 bytes with USB connection)
> --
> $ hexdump -v -e '10/1 "%02x " "\n"' < /dev/hidraw0
> 01 7d 7e 82 7e 08 00 00 00 00
> 01 7d 7e 83 7e 08 00 00 00 00
> 01 7d 7e 81 7e 08 00 00 00 00
> 01 7d 7e 82 7e 08 00 00 00 00
> 01 7d 7e 80 7f 08 00 00 00 00
> --
>
> Attached are some bluetooth details for the device. No idea on how to get
> audio to/from the device - I was kind of hoping it would behave like a BT
> headset.

Regarding Bluetooth: hidd is deprecated. It should be all handled by
bluetoothd now. But once it's connected, HIDP is handled by the kernel
so this shouldn't be an issue here.

The SDP/hcitool information are pretty sparse so they won't help much.
All they tell is that the device uses HIDP (and a bit about BT
internals). No A2DP or alike. I guess sound is transmitted through the
HIDP channel (which is also what the wiimote does) and allows the same
transmission via USB and BT.

The report descriptor actually describes a lot more report-IDs than
just "0x01" which you describe in hidraw.txt. Are you sure the
report-descriptors are the same for USB and BT? 64bytes also seems
quite large for HID reports, I thought BT had a limit of 22 (but I'm
not sure). At least your report-descriptor says the biggest report is
63 bytes so that seems to be right for USB at least. You could turn on
BT debugging, the HIDP layer will then print size/content information
for incoming L2CAP skbs. This should help finding the culprit.

Thanks
David

^ permalink raw reply

* Re: ADXL34X orientation definition
From: Dmitry Torokhov @ 2013-12-09 11:18 UTC (permalink / raw)
  To: michael.hennerich; +Cc: linux-input@vger.kernel.org
In-Reply-To: <52A57B3A.7030607@analog.com>

On Monday, December 09, 2013 09:11:38 AM Michael Hennerich wrote:
> On 12/07/2013 10:53 AM, Dmitry Torokhov wrote:
> > Hi Michael,
> > 
> > I was going though Coverity reports and it looks like definition of
> > 
> > #define ADXL346_2D_ORIENT(x)            (((x) & 0x3) >> 4)
> > 
> > is not correct as it will always evaluate to 0. Should the mask be 0x30
> > instead?
> > 
> > Thanks.
> 
> Hi Dmitry,
> 
> Good catch!
> 
> Yes, of course  - the mask should be 0x30.
> Shall I send a patch?

That would be great.

-- 
Dmitry

^ permalink raw reply

* [PATCH] drivers/input/misc/adxl34x: Fix bug in definition of ADXL346_2D_ORIENT
From: michael.hennerich @ 2013-12-09 11:35 UTC (permalink / raw)
  To: dmitry.torokhov; +Cc: linux-input, Michael Hennerich

From: Michael Hennerich <michael.hennerich@analog.com>

Coverity report pointet out by Dmitry

Reported-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
Signed-off-by: Michael Hennerich <michael.hennerich@analog.com>
---
 drivers/input/misc/adxl34x.c |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/input/misc/adxl34x.c b/drivers/input/misc/adxl34x.c
index 0735de3..1cb1da2 100644
--- a/drivers/input/misc/adxl34x.c
+++ b/drivers/input/misc/adxl34x.c
@@ -158,7 +158,7 @@
 
 /* ORIENT ADXL346 only */
 #define ADXL346_2D_VALID		(1 << 6)
-#define ADXL346_2D_ORIENT(x)		(((x) & 0x3) >> 4)
+#define ADXL346_2D_ORIENT(x)		(((x) & 0x30) >> 4)
 #define ADXL346_3D_VALID		(1 << 3)
 #define ADXL346_3D_ORIENT(x)		((x) & 0x7)
 #define ADXL346_2D_PORTRAIT_POS		0	/* +X */
-- 
1.7.9.5



^ permalink raw reply related

* [PATCH] drivers/input/misc: new PC speaker sounds, clicks and notes
From: Karl Dahlke @ 2013-12-09 12:22 UTC (permalink / raw)
  To: linux-input, linux-kernel

From: Karl Dahlke <eklhad@gmail.com>

The speaker driver can play a tone at a specified frequency,
or the standard control G bell,
which is a special case of TONE at 1000 hz 0.1 seconds.
This patch adds kd_mkpulse() to generate a soft click.
This is introduced to support accessibility modules and adapters in the future.
With this in place, a module can easily provide soft clicks,
i.e. audible feedback, whenever a key is depressed,
or when that keystroke is echoed on screen, whichever you prefer.
(Many people find the latter more valuable.)
This allows a blind user, for example, to have ongoing feedback while typing,
even if he is, at the same time, listening to text that is already on screen.
This is faster and more convenient than having characters echoed verbally.
And it works all the time, even if speech or braille is not working
for whatever reason.  And there are many reasons those adapters could fail.
Misconfigured sound card, bad serial connection,
software synth not loading, etc.
Thus these forms of audio feedback are very important.

This should not be confused with the click function in certain specialized
keyboards such as lkkbd.c.
That function does a serio write to the client to activate clicks locally.
In contrast, this function generates a one-time pulse at the pc speaker,
or through a similar driver, so that modules can click whenever they want,
e.g. when a key is echoed back to you by a running application,
perhaps a thousand miles away over ssh, so you know all is well.
A module may want to click, or issue a series of clicks, for many reasons.

Another function introduced by this patch is kd_mknotes,
which plays a series of tones in the background.
You could do this yourself with kd_mksound and timers,
but why should everyone reinvent the wheel?
It is better to write the function once, properly, in the kernel,
and let modules use it thereafter.
Again, this is a means to an end.
Accessibility modules can generate rapid sequences of notes
to indicate various conditions, even error conditions,
especially if speech or braille is not working.
These notes may be the only feedback the user has to diagnose the problem.
Again, extremely valuable in a difficult situation.
This may be useful to other developers in other situations as well.

A third function kd_mksteps builds a chromatic scale,
from one frequency to another in steps.
This is a convenience on top of kd_mknotes.
The half-tone scale, with a step of 6%, starting at middle C, is approximately
kd_mksteps(260, 530, 6, 150);
Use a negative step for a descending scale.

Signed-off-by: Karl Dahlke <eklhad@gmail.com>
---

A few personal comments if I may.
I have tried for 15 years to get some of my work into the kernel,
without success.
That is partly understandable, because my early work was quite intrusive,
especially in 2.2 and 2.4,
and it was specifically one adapter, my adapter, and not a general approach.
So you were wise to say no.
But two years ago I redesigned everything,
so that almost all of my adapter runs in user space, and connects to the kernel
through a device driver.
The driver is not specific to my adapter, it supports any text based adapter
in any language (unicode).
It is a general approach, a much better design.
I asked, two years ago, if someone would help me usher these changes
into the 2.6 kernel, since Linux hacking is tremendously difficult,
even if you can see!
My ideas were well received, but the overall response was,
"This isn't a high priority for us."
That is a direct quote.
Needless to say this made me sad.
But not unexpected; accessibility has never been a priority
for Linux, or Microsoft, and Aple only gets half a nod for its VoiceOver.
There really are a lot of things vying for our atention, aren't there?

Well it's been two years and I thought I'd try again,
in the spirit of SubmittingPatches section 10, Don't Get Discouraged.
If this or subsequent patches cannot be applied as-is,
please work with me on this project,
don't just tell me to read chapter 17 of some 8,000 page manual.
I might really need some help from someone on the inside to make this fly.
It would be much appreciated.

Here is the first patch, enhancing sounds as described in the commit log above.
After this would come a supporting module, and then a device driver,
and that's it.
Well possibly one more patch for a notifier sleep function,
but I would have to discuss that one with you-all.
That one is a bit more complicated.
So this is the first step.

The code passes the style checker,
and has been exercised, in 3.12.3, by myself and others.

diff -uprN a/drivers/input/misc/pcspkr.c b/drivers/input/misc/pcspkr.c
--- a/drivers/input/misc/pcspkr.c	2013-12-08 19:02:31.000000000 -0500
+++ b/drivers/input/misc/pcspkr.c	2013-12-08 19:02:31.000000000 -0500
@@ -19,6 +19,8 @@
 #include <linux/input.h>
 #include <linux/platform_device.h>
 #include <linux/timex.h>
+#include <linux/delay.h>
+
 #include <asm/io.h>
 
 MODULE_AUTHOR("Vojtech Pavlik <vojtech@ucw.cz>");
@@ -26,25 +28,26 @@ MODULE_DESCRIPTION("PC Speaker beeper dr
 MODULE_LICENSE("GPL");
 MODULE_ALIAS("platform:pcspkr");
 
-static int pcspkr_event(struct input_dev *dev, unsigned int type, unsigned int code, int value)
+/* Toggle the speaker, but not if a tone is sounding */
+static void speaker_toggle(void)
 {
-	unsigned int count = 0;
+	char c;
 	unsigned long flags;
 
-	if (type != EV_SND)
-		return -1;
-
-	switch (code) {
-		case SND_BELL: if (value) value = 1000;
-		case SND_TONE: break;
-		default: return -1;
+	raw_spin_lock_irqsave(&i8253_lock, flags);
+	c = inb_p(0x61);
+	if ((c&3) != 3) {
+		c &= 0xfe;
+		c ^= 2; /* toggle */
+		outb(c, 0x61);
 	}
+	raw_spin_unlock_irqrestore(&i8253_lock, flags);
+}
 
-	if (value > 20 && value < 32767)
-		count = PIT_TICK_RATE / value;
-
+static void speaker_sing(unsigned int count)
+{
+	unsigned long flags;
 	raw_spin_lock_irqsave(&i8253_lock, flags);
-
 	if (count) {
 		/* set command for counter 2, 2 byte write */
 		outb_p(0xB6, 0x43);
@@ -57,8 +60,44 @@ static int pcspkr_event(struct input_dev
 		/* disable counter 2 */
 		outb(inb_p(0x61) & 0xFC, 0x61);
 	}
-
 	raw_spin_unlock_irqrestore(&i8253_lock, flags);
+}
+
+static int pcspkr_event(struct input_dev *dev, unsigned int type, unsigned int code, int value)
+{
+	unsigned int count;
+
+	if (type != EV_SND)
+		return -1;
+
+	switch (code) {
+	case SND_BELL:
+		if (value)
+			value = 1000;
+		/* fall through */
+
+	case SND_TONE:
+		count = 0;
+		if (value > 20 && value < 32767)
+			count = PIT_TICK_RATE / value;
+		speaker_sing(count);
+		break;
+
+	case SND_PULSE:
+		/* Don't hold the cpu for more than 1ms */
+		/* no reason for a pulse to ever be longer than that. */
+		if (value > 1000)
+			value = 1000;
+		/* if a pulse is too short it can't be heard anyways. */
+		if (value < 20)
+			break;
+		speaker_toggle();
+		udelay(value);
+		speaker_toggle();
+		break;
+
+	default: return -1;
+	}
 
 	return 0;
 }
@@ -81,7 +120,8 @@ static int pcspkr_probe(struct platform_
 	pcspkr_dev->dev.parent = &dev->dev;
 
 	pcspkr_dev->evbit[0] = BIT_MASK(EV_SND);
-	pcspkr_dev->sndbit[0] = BIT_MASK(SND_BELL) | BIT_MASK(SND_TONE);
+	pcspkr_dev->sndbit[0] = BIT_MASK(SND_BELL) | BIT_MASK(SND_TONE) |
+		BIT_MASK(SND_PULSE);
 	pcspkr_dev->event = pcspkr_event;
 
 	err = input_register_device(pcspkr_dev);
diff -uprN a/drivers/tty/vt/keyboard.c b/drivers/tty/vt/keyboard.c
--- a/drivers/tty/vt/keyboard.c	2013-12-08 19:02:31.000000000 -0500
+++ b/drivers/tty/vt/keyboard.c	2013-12-08 19:02:31.000000000 -0500
@@ -261,6 +261,213 @@ void kd_mksound(unsigned int hz, unsigne
 }
 EXPORT_SYMBOL(kd_mksound);
 
+static int kd_pulse_helper(struct input_handle *handle, void *data)
+{
+	unsigned int *width = data;
+	struct input_dev *dev = handle->dev;
+
+	if (*width == 0)
+		return 0;
+
+	if (test_bit(EV_SND, dev->evbit)) {
+		if (test_bit(SND_PULSE, dev->sndbit)) {
+			input_inject_event(handle, EV_SND, SND_PULSE, *width);
+			return 0;
+		}
+	}
+
+	return 0;
+}
+
+/* the width of the pulse is in microseconds, must be between 20 and 1000 */
+void kd_mkpulse(unsigned int width)
+{
+	input_handler_for_each_handle(&kbd_handler, &width, kd_pulse_helper);
+}
+EXPORT_SYMBOL(kd_mkpulse);
+
+/*
+ * Push notes onto a sound fifo and play them via an asynchronous thread.
+ * kd_mksound is a single tone, but kd_mknotes is a series of notes.
+ * this is used primarily by the accessibility modules, to sound
+ * various alerts and conditions for blind users.
+ * This is particularly helpful when the adapter is not working,
+ * for whatever reason.  These functions are central to the kernel,
+ * and do not depend on sound cards, loadable modules, etc.
+ * These notes can also alert a system administrator to conditions
+ * that warrant immediate attention.
+ * Each note is specified by 2 shorts.  The first is the frequency in hurtz,
+ * and the second is the duration in hundredths of a second.
+ * A frequency of -1 is a rest.
+ * A frequency of 0 ends the list of notes.
+ */
+
+#define SF_LEN 64		/* length of sound fifo */
+static short sf_fifo[SF_LEN];
+static int sf_head, sf_tail;
+static DEFINE_RAW_SPINLOCK(soundfifo_lock);
+
+/* Pop the next sound out of the sound fifo. */
+static void pop_soundfifo(unsigned long);
+static DEFINE_TIMER(kd_mknotes_timer, pop_soundfifo, 0, 0);
+static void pop_soundfifo(unsigned long notUsed)
+{
+	unsigned long flags;
+	int freq, duration;
+	int i;
+	long jifpause;
+
+	raw_spin_lock_irqsave(&soundfifo_lock, flags);
+
+	i = sf_tail;
+	if (i == sf_head) {
+		freq = 0;
+		duration = 0;
+	} else {
+		freq = sf_fifo[i];
+		duration = sf_fifo[i + 1];
+		i += 2;
+		if (i == SF_LEN)
+			i = 0;
+		sf_tail = i;
+	}
+
+	raw_spin_unlock_irqrestore(&soundfifo_lock, flags);
+
+	if (freq == 0) {
+		/* turn off singing speaker */
+		kd_nosound(0);
+		return;
+	}
+
+	jifpause = msecs_to_jiffies(duration);
+	/* not sure of the rounding, if duration < HZ */
+	if (jifpause == 0)
+		jifpause = 1;
+	mod_timer(&kd_mknotes_timer, jiffies + jifpause);
+
+	if (freq < 0) {
+		/* This is a rest between notes */
+		kd_nosound(0);
+	} else {
+		input_handler_for_each_handle(&kbd_handler, &freq,
+		kd_sound_helper);
+	}
+}
+
+/* Push a string of notes into the sound fifo. */
+void kd_mknotes(const short *p)
+{
+	int i;
+	bool wake = false;
+	unsigned long flags;
+
+	if (*p == 0)
+		return; /* empty list */
+
+	raw_spin_lock_irqsave(&soundfifo_lock, flags);
+
+	i = sf_head;
+	if (i == sf_tail)
+		wake = true;
+
+	/* Copy shorts into the fifo, until the terminating zero. */
+	while (*p) {
+		sf_fifo[i++] = *p++;
+		sf_fifo[i++] = (*p++) * 10;
+		if (i == SF_LEN)
+			i = 0;	/* wrap around */
+		if (i == sf_tail) {
+			/* fifo is full */
+			goto done;
+		}
+		sf_head = i;
+	}
+
+	/* try to add on a rest, to carry the last note through */
+	sf_fifo[i++] = -1;
+	sf_fifo[i++] = 10;
+	if (i == SF_LEN)
+		i = 0;	/* wrap around */
+	if (i != sf_tail)
+		sf_head = i;
+
+done:
+	raw_spin_unlock_irqrestore(&soundfifo_lock, flags);
+
+	/* first sound,  get things started. */
+	if (wake)
+		pop_soundfifo(0);
+}
+EXPORT_SYMBOL(kd_mknotes);
+
+/* Push an ascending or descending sequence of notes into the sound fifo.
+ * Step is a geometric factor on frequency, increase by x percent.
+ * 100% goes up by octaves, -50% goes down by octaves.
+ * 12% is a wholetone scale, while 6% is a chromatic scale.
+ * Duration is in milliseconds, for very fast frequency sweeps.  But this
+ * is based on jiffies timing, so is subject to the resolution of HZ. */
+void kd_mksteps(int f1, int f2, int step, int duration)
+{
+	int i;
+	bool wake = false;
+	unsigned long flags;
+
+	/* are the parameters in range? */
+	if (step != (char)step)
+		return;
+	if (duration <= 0 || duration > 2000)
+		return;
+	if (f1 < 50 || f1 > 8000)
+		return;
+	if (f2 < 50 || f2 > 8000)
+		return;
+
+	/* avoid infinite loops */
+	if (step == 0 ||
+	(f1 < f2 && step < 0) ||
+	(f1 > f2 && step > 0))
+		return;
+
+	raw_spin_lock_irqsave(&soundfifo_lock, flags);
+
+	i = sf_head;
+	if (i == sf_tail)
+		wake = true;
+
+	/* Copy shorts into the fifo, until start reaches end */
+	while ((step > 0 && f1 < f2) || (step < 0 && f1 > f2)) {
+		sf_fifo[i++] = f1;
+		sf_fifo[i++] = duration;
+		if (i == SF_LEN)
+			i = 0;	/* wrap around */
+		if (i == sf_tail) {
+			/* fifo is full */
+			goto done;
+		}
+		sf_head = i;
+		f1 = f1 * (100+step) / 100;
+		if (f1 < 50 || f1 > 8000)
+			break;
+	}
+
+	/* try to add on a rest, to carry the last note through */
+	sf_fifo[i++] = -1;
+	sf_fifo[i++] = 10;
+	if (i == SF_LEN)
+		i = 0;	/* wrap around */
+	if (i != sf_tail)
+		sf_head = i;
+
+done:
+	raw_spin_unlock_irqrestore(&soundfifo_lock, flags);
+
+	/* first sound,  get things started. */
+	if (wake)
+		pop_soundfifo(0);
+}
+EXPORT_SYMBOL(kd_mksteps);
+
 /*
  * Setting the keyboard rate.
  */
diff -uprN a/include/linux/vt_kern.h b/include/linux/vt_kern.h
--- a/include/linux/vt_kern.h	2013-12-08 19:02:31.000000000 -0500
+++ b/include/linux/vt_kern.h	2013-12-08 19:02:31.000000000 -0500
@@ -28,6 +28,9 @@
 #endif
 
 extern void kd_mksound(unsigned int hz, unsigned int ticks);
+extern void kd_mkpulse(unsigned int width);
+extern void kd_mknotes(const short *p);
+extern void kd_mksteps(int freq1, int freq2, int step, int duration);
 extern int kbd_rate(struct kbd_repeat *rep);
 extern int fg_console, last_console, want_console;
 
diff -uprN a/include/uapi/linux/input.h b/include/uapi/linux/input.h
--- a/include/uapi/linux/input.h	2013-12-08 19:02:31.000000000 -0500
+++ b/include/uapi/linux/input.h	2013-12-08 19:02:31.000000000 -0500
@@ -906,6 +906,7 @@ struct input_keymap_entry {
 #define SND_CLICK		0x00
 #define SND_BELL		0x01
 #define SND_TONE		0x02
+#define SND_PULSE		0x03
 #define SND_MAX			0x07
 #define SND_CNT			(SND_MAX+1)
 

^ permalink raw reply

* [PATCH 1/2] elantech: Properly differentiate between clickpads and normal touchpads
From: Hans de Goede @ 2013-12-09 14:32 UTC (permalink / raw)
  To: linux-input; +Cc: Peter Hutterer, Hans de Goede

The current assumption in the elantech driver that hw version 3 touchpads are
never clickpads and hw version 4 touchpads are always clickpads is wrong.

There are several bug reports for this, ie:
https://bugzilla.redhat.com/show_bug.cgi?id=1030802
http://superuser.com/questions/619582/right-elantech-touchpad-button-not-working-in-linux

I've spend a couple of hours wading through various bugzillas,
launchpads and forum posts to create a list of fw-versions and capabilities
for different laptop models to find a good method to differentiate between
clickpads and versions with separate hardware buttons.

Which shows that a device being a clickpad is reliable indicated by bit 12
being set in the fw_version. I've included the gathered list inside the driver,
so that we've this info at hand if we need to revisit this later.

Signed-off-by: Hans de Goede <hdegoede@redhat.com>
---
 drivers/input/mouse/elantech.c | 43 +++++++++++++++++++++++++++++++++++++++---
 1 file changed, 40 insertions(+), 3 deletions(-)

diff --git a/drivers/input/mouse/elantech.c b/drivers/input/mouse/elantech.c
index 8551dca..f7baa32 100644
--- a/drivers/input/mouse/elantech.c
+++ b/drivers/input/mouse/elantech.c
@@ -486,6 +486,7 @@ static void elantech_input_sync_v4(struct psmouse *psmouse)
 	unsigned char *packet = psmouse->packet;
 
 	input_report_key(dev, BTN_LEFT, packet[0] & 0x01);
+	input_report_key(dev, BTN_RIGHT, packet[0] & 0x02);
 	input_mt_report_pointer_emulation(dev, true);
 	input_sync(dev);
 }
@@ -984,6 +985,42 @@ static int elantech_get_resolution_v4(struct psmouse *psmouse,
 }
 
 /*
+ * Advertise INPUT_PROP_BUTTONPAD for clickpads. The testing of bit 12 in
+ * fw_version for this is based on the following fw_version & caps table:
+ *
+ * Laptop-model:           fw_version:     caps:           buttons:
+ * Acer S3                 0x461f00        10, 13, 0e      clickpad
+ * Acer S7-392             0x581f01        50, 17, 0d      clickpad
+ * Acer V5-131             0x461f02        01, 16, 0c      clickpad
+ * Acer V5-551             0x461f00        ?               clickpad
+ * Asus K53SV              0x450f01        78, 15, 0c      2 hw buttons
+ * Asus G46VW              0x460f02        00, 18, 0c      2 hw buttons
+ * Asus G750JX             0x360f00        00, 16, 0c      2 hw buttons
+ * Asus UX31               0x361f00        20, 15, 0e      clickpad
+ * Asus UX32VD             0x361f02        00, 15, 0e      clickpad
+ * Avatar AVIU-145A2       0x361f00        ?               clickpad
+ * Gigabyte U2442          0x450f01        58, 17, 0c      2 hw buttons
+ * Lenovo L430             0x350f02        b9, 15, 0c      2 hw buttons (*)
+ * Samsung NF210           0x150b00        78, 14, 0a      2 hw buttons
+ * Samsung NP770Z5E        0x575f01        10, 15, 0f      clickpad
+ * Samsung NP700Z5B        0x361f06        21, 15, 0f      clickpad
+ * Samsung NP900X3E-A02    0x575f03        ?               clickpad
+ * Samsung NP-QX410        0x851b00        19, 14, 0c      clickpad
+ * Samsung RC512           0x450f00        08, 15, 0c      2 hw buttons
+ * Samsung RF710           0x450f00        ?               2 hw buttons
+ * System76 Pangolin       0x250f01        ?               2 hw buttons
+ * (*) + 3 trackpoint buttons
+ */
+static void elantech_set_buttonpad_prop(struct psmouse *psmouse)
+{
+	struct input_dev *dev = psmouse->dev;
+	struct elantech_data *etd = psmouse->private;
+
+	if (etd->fw_version & 0x001000)
+		__set_bit(INPUT_PROP_BUTTONPAD, dev->propbit);
+}
+
+/*
  * Set the appropriate event bits for the input subsystem
  */
 static int elantech_set_input_params(struct psmouse *psmouse)
@@ -1026,6 +1063,8 @@ static int elantech_set_input_params(struct psmouse *psmouse)
 		__set_bit(INPUT_PROP_SEMI_MT, dev->propbit);
 		/* fall through */
 	case 3:
+		if (etd->hw_version == 3)
+			elantech_set_buttonpad_prop(psmouse);
 		input_set_abs_params(dev, ABS_X, x_min, x_max, 0, 0);
 		input_set_abs_params(dev, ABS_Y, y_min, y_max, 0, 0);
 		if (etd->reports_pressure) {
@@ -1047,9 +1086,7 @@ static int elantech_set_input_params(struct psmouse *psmouse)
 			 */
 			psmouse_warn(psmouse, "couldn't query resolution data.\n");
 		}
-		/* v4 is clickpad, with only one button. */
-		__set_bit(INPUT_PROP_BUTTONPAD, dev->propbit);
-		__clear_bit(BTN_RIGHT, dev->keybit);
+		elantech_set_buttonpad_prop(psmouse);
 		__set_bit(BTN_TOOL_QUADTAP, dev->keybit);
 		/* For X to recognize me as touchpad. */
 		input_set_abs_params(dev, ABS_X, x_min, x_max, 0, 0);
-- 
1.8.4.2


^ permalink raw reply related

* [PATCH 2/2] elantech: Add support for IC-body version 8
From: Hans de Goede @ 2013-12-09 14:32 UTC (permalink / raw)
  To: linux-input; +Cc: Peter Hutterer, Hans de Goede
In-Reply-To: <1386599551-2339-1-git-send-email-hdegoede@redhat.com>

Acording to: https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1232877
a patch for this has been send before, but I don't see this in 3.13-rc3,
so here is another one.

Signed-off-by: Hans de Goede <hdegoede@redhat.com>
---
 drivers/input/mouse/elantech.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/drivers/input/mouse/elantech.c b/drivers/input/mouse/elantech.c
index f7baa32..fc72446 100644
--- a/drivers/input/mouse/elantech.c
+++ b/drivers/input/mouse/elantech.c
@@ -1350,6 +1350,7 @@ static int elantech_set_properties(struct elantech_data *etd)
 			break;
 		case 6:
 		case 7:
+		case 8:
 			etd->hw_version = 4;
 			break;
 		default:
-- 
1.8.4.2


^ permalink raw reply related

* Re: [PATCH v1] HID: hid-sensor-hub: Fix kernel warning and failure
From: Jiri Kosina @ 2013-12-09 14:46 UTC (permalink / raw)
  To: Srinivas Pandruvada; +Cc: linux-input
In-Reply-To: <1386290065-31813-2-git-send-email-srinivas.pandruvada@linux.intel.com>

On Thu, 5 Dec 2013, Srinivas Pandruvada wrote:

> Fix kernel warning and failure to register sensor hub devices with MFD.
> Now many devices has in-built sensor hubs. So by default this HID hub,
> is properly parsed and register individual sensors as platform device
> using MFD framework. But if a second sensor hub is attached via USB,
> which has same sensors, it will result in kernel warning and failure
> to register MFD cell as the platform device sysfs file name will be
> same as created by in-built sensor hubs. This patch sets MFD cell id
> to PLATFORM_DEVID_AUTO. In this way there will never
> be duplicate sysfs file names.
> 
> Signed-off-by: Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com>

Applied, thanks Srinivas.

-- 
Jiri Kosina
SUSE Labs

^ permalink raw reply

* Re: [PATCH 2/2] Documentation: dt: Document TSC2005 DT binding
From: Tony Lindgren @ 2013-12-09 17:46 UTC (permalink / raw)
  To: Sebastian Reichel
  Cc: Sebastian Reichel, Dmitry Torokhov, Dmitry Torokhov, linux-input,
	Rob Herring, Pawel Moll, Mark Rutland, Stephen Warren,
	Ian Campbell, Rob Landley, Grant Likely, devicetree, linux-omap,
	linux-kernel
In-Reply-To: <1386284979-9680-3-git-send-email-sre@debian.org>

* Sebastian Reichel <sre@debian.org> [131205 15:11]:
> Add devicetree binding documentation for TSC2005 touchscreen.
> 
> Signed-off-by: Sebastian Reichel <sre@debian.org>
> ---
>  .../bindings/input/touchscreen/tsc2005.txt         | 49 ++++++++++++++++++++++
>  1 file changed, 49 insertions(+)
>  create mode 100644 Documentation/devicetree/bindings/input/touchscreen/tsc2005.txt
> 
> diff --git a/Documentation/devicetree/bindings/input/touchscreen/tsc2005.txt b/Documentation/devicetree/bindings/input/touchscreen/tsc2005.txt
> new file mode 100644
> index 0000000..4e7df0b
> --- /dev/null
> +++ b/Documentation/devicetree/bindings/input/touchscreen/tsc2005.txt
> @@ -0,0 +1,49 @@
> +* TSC2005 Touchscreen
> +
> +Required properties:
> + - compatible		      : "ti,tsc2005"
> + - reg			      : SPI device address
> + - spi-max-frequency	      : Maximal SPI speed
> + - interrupts		      : IRQ specifier
> + - reset-gpio		      : GPIO specifier
> +
> +Optional properties:
> + - ti,fuzz-x		      : integer, X noise value of the touchscreen
> +				(defaults to 4)
> + - ti,fuzz-y		      : integer, Y noise value of the touchscreen
> +				(defaults to 8)
> + - ti,fuzz-pressure	      : integer, pressure noise value of the touchscreen
> +				(defaults to 2)
> + - ti,max-x		      : integer, maximum reported x value
> +				(defaults to 4096)
> + - ti,max-y		      : integer, maximum reported y value
> +				(defaults to 4096)
> + - ti,max-pressure	      : integer, maximum reported pressure
> +				(defaults to 4096)
> + - ti,x-plate-resistance      : integer, resistance of the touchscreen's X plates
> +				in ohm (defaults to 280)
> + - ti,esd-recovery-timeout-ms : integer, if the touchscreen does not respond after
> +				the configured time (in milli seconds), the driver
> +				will reset it. This is disabled by default.

Instead of adding these optional ti,* properties you can set them in the
driver directly in the of_match table based on the compatible flag. Then
you can pass compatible flag like ti,tsc2005-nokia-n900, or the name of
the LCD panel. Most likely these depend on the LCD panel selected.

Regards,

Tony


> +Example:
> +
> +&mcspi1 {
> +	tsc2005@0 {
> +		compatible = "ti,tsc2005";
> +		spi-max-frequency = <6000000>;
> +		reg = <0>;
> +		reset-gpio = <&gpio4 8 GPIO_ACTIVE_HIGH>; /* 104 */
> +		interrupt-parent = <&gpio4>;
> +		interrupts = <4 IRQ_TYPE_NONE>; /* gpio line 100 */
> +
> +		ti,fuzz-x = <4>;
> +		ti,fuzz-y = <7>;
> +		ti,fuzz-pressure = <2>;
> +		ti,max-x = <4096>;
> +		ti,max-y = <4096>;
> +		ti,max-pressure = <2048>;
> +		ti,x-plate-resistance = <280>;
> +		ti,esd-recovery-timeout-ms = <8000>;
> +	};
> +}
> -- 
> 1.8.4.3
> 
> --
> To unsubscribe from this list: send the line "unsubscribe linux-omap" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html

^ permalink raw reply

* Re: [PATCH 2/2] elantech: Add support for IC-body version 8
From: Benjamin Tissoires @ 2013-12-09 17:50 UTC (permalink / raw)
  To: Hans de Goede; +Cc: linux-input, Peter Hutterer
In-Reply-To: <1386599551-2339-2-git-send-email-hdegoede@redhat.com>

On Mon, Dec 9, 2013 at 9:32 AM, Hans de Goede <hdegoede@redhat.com> wrote:
> Acording to: https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1232877
> a patch for this has been send before, but I don't see this in 3.13-rc3,
> so here is another one.
>
> Signed-off-by: Hans de Goede <hdegoede@redhat.com>
> ---
>

Hey Hans,

good to see you on linux-input :)

anyway, Dmitry already took this patch in his tree:
https://git.kernel.org/cgit/linux/kernel/git/dtor/input.git/commit/?h=for-linus&id=9cb80b965eaf7af1369f6e16f48a05fbaaccc021

And this patch is part of the pull request for 3.13-rc3 (so should be in rc4).

Cheers,
Benjamin

^ permalink raw reply

* Re: [PATCH 1/2] elantech: Properly differentiate between clickpads and normal touchpads
From: Benjamin Tissoires @ 2013-12-09 18:02 UTC (permalink / raw)
  To: Hans de Goede; +Cc: linux-input, Peter Hutterer, Duson Lin, Dmitry Torokhov
In-Reply-To: <1386599551-2339-1-git-send-email-hdegoede@redhat.com>

Hi Hans,

adding in CC Duson, who seems to be working on the same driver
currently, and Dmitry, the input maintainer.

On Mon, Dec 9, 2013 at 9:32 AM, Hans de Goede <hdegoede@redhat.com> wrote:
> The current assumption in the elantech driver that hw version 3 touchpads are
> never clickpads and hw version 4 touchpads are always clickpads is wrong.
>
> There are several bug reports for this, ie:
> https://bugzilla.redhat.com/show_bug.cgi?id=1030802
> http://superuser.com/questions/619582/right-elantech-touchpad-button-not-working-in-linux
>
> I've spend a couple of hours wading through various bugzillas,
> launchpads and forum posts to create a list of fw-versions and capabilities
> for different laptop models to find a good method to differentiate between
> clickpads and versions with separate hardware buttons.
>
> Which shows that a device being a clickpad is reliable indicated by bit 12
> being set in the fw_version. I've included the gathered list inside the driver,
> so that we've this info at hand if we need to revisit this later.

Duson, can you confirm this? It's not that I don't trust Hans, but if
we could have the hardware maker validating this part, this would be
great.

>
> Signed-off-by: Hans de Goede <hdegoede@redhat.com>
> ---
>  drivers/input/mouse/elantech.c | 43 +++++++++++++++++++++++++++++++++++++++---
>  1 file changed, 40 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/input/mouse/elantech.c b/drivers/input/mouse/elantech.c
> index 8551dca..f7baa32 100644
> --- a/drivers/input/mouse/elantech.c
> +++ b/drivers/input/mouse/elantech.c
> @@ -486,6 +486,7 @@ static void elantech_input_sync_v4(struct psmouse *psmouse)
>         unsigned char *packet = psmouse->packet;
>
>         input_report_key(dev, BTN_LEFT, packet[0] & 0x01);
> +       input_report_key(dev, BTN_RIGHT, packet[0] & 0x02);
>         input_mt_report_pointer_emulation(dev, true);
>         input_sync(dev);
>  }
> @@ -984,6 +985,42 @@ static int elantech_get_resolution_v4(struct psmouse *psmouse,
>  }
>
>  /*
> + * Advertise INPUT_PROP_BUTTONPAD for clickpads. The testing of bit 12 in
> + * fw_version for this is based on the following fw_version & caps table:
> + *
> + * Laptop-model:           fw_version:     caps:           buttons:
> + * Acer S3                 0x461f00        10, 13, 0e      clickpad
> + * Acer S7-392             0x581f01        50, 17, 0d      clickpad
> + * Acer V5-131             0x461f02        01, 16, 0c      clickpad
> + * Acer V5-551             0x461f00        ?               clickpad
> + * Asus K53SV              0x450f01        78, 15, 0c      2 hw buttons
> + * Asus G46VW              0x460f02        00, 18, 0c      2 hw buttons
> + * Asus G750JX             0x360f00        00, 16, 0c      2 hw buttons
> + * Asus UX31               0x361f00        20, 15, 0e      clickpad
> + * Asus UX32VD             0x361f02        00, 15, 0e      clickpad
> + * Avatar AVIU-145A2       0x361f00        ?               clickpad
> + * Gigabyte U2442          0x450f01        58, 17, 0c      2 hw buttons
> + * Lenovo L430             0x350f02        b9, 15, 0c      2 hw buttons (*)
> + * Samsung NF210           0x150b00        78, 14, 0a      2 hw buttons
> + * Samsung NP770Z5E        0x575f01        10, 15, 0f      clickpad
> + * Samsung NP700Z5B        0x361f06        21, 15, 0f      clickpad
> + * Samsung NP900X3E-A02    0x575f03        ?               clickpad
> + * Samsung NP-QX410        0x851b00        19, 14, 0c      clickpad
> + * Samsung RC512           0x450f00        08, 15, 0c      2 hw buttons
> + * Samsung RF710           0x450f00        ?               2 hw buttons
> + * System76 Pangolin       0x250f01        ?               2 hw buttons
> + * (*) + 3 trackpoint buttons
> + */
> +static void elantech_set_buttonpad_prop(struct psmouse *psmouse)
> +{
> +       struct input_dev *dev = psmouse->dev;
> +       struct elantech_data *etd = psmouse->private;
> +
> +       if (etd->fw_version & 0x001000)
> +               __set_bit(INPUT_PROP_BUTTONPAD, dev->propbit);

Small question here: if the touchpad is a clickpad, should'nt we also
remove the BTN_RIGHT bit too?

Cheers,
Benjamin

> +}
> +
> +/*
>   * Set the appropriate event bits for the input subsystem
>   */
>  static int elantech_set_input_params(struct psmouse *psmouse)
> @@ -1026,6 +1063,8 @@ static int elantech_set_input_params(struct psmouse *psmouse)
>                 __set_bit(INPUT_PROP_SEMI_MT, dev->propbit);
>                 /* fall through */
>         case 3:
> +               if (etd->hw_version == 3)
> +                       elantech_set_buttonpad_prop(psmouse);
>                 input_set_abs_params(dev, ABS_X, x_min, x_max, 0, 0);
>                 input_set_abs_params(dev, ABS_Y, y_min, y_max, 0, 0);
>                 if (etd->reports_pressure) {
> @@ -1047,9 +1086,7 @@ static int elantech_set_input_params(struct psmouse *psmouse)
>                          */
>                         psmouse_warn(psmouse, "couldn't query resolution data.\n");
>                 }
> -               /* v4 is clickpad, with only one button. */
> -               __set_bit(INPUT_PROP_BUTTONPAD, dev->propbit);
> -               __clear_bit(BTN_RIGHT, dev->keybit);
> +               elantech_set_buttonpad_prop(psmouse);
>                 __set_bit(BTN_TOOL_QUADTAP, dev->keybit);
>                 /* For X to recognize me as touchpad. */
>                 input_set_abs_params(dev, ABS_X, x_min, x_max, 0, 0);
> --
> 1.8.4.2
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-input" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html

^ permalink raw reply

* Re: [PATCH 2/2] Documentation: dt: Document TSC2005 DT binding
From: Sebastian Reichel @ 2013-12-09 18:24 UTC (permalink / raw)
  To: Tony Lindgren
  Cc: Dmitry Torokhov, Dmitry Torokhov, linux-input, Rob Herring,
	Pawel Moll, Mark Rutland, Stephen Warren, Ian Campbell,
	Rob Landley, Grant Likely, devicetree, linux-omap, linux-kernel
In-Reply-To: <20131209174638.GC12527@atomide.com>

[-- Attachment #1: Type: text/plain, Size: 1501 bytes --]

On Mon, Dec 09, 2013 at 09:46:38AM -0800, Tony Lindgren wrote:
> > +Optional properties:
> > + - ti,fuzz-x		      : integer, X noise value of the touchscreen
> > +				(defaults to 4)
> > + - ti,fuzz-y		      : integer, Y noise value of the touchscreen
> > +				(defaults to 8)
> > + - ti,fuzz-pressure	      : integer, pressure noise value of the touchscreen
> > +				(defaults to 2)
> > + - ti,max-x		      : integer, maximum reported x value
> > +				(defaults to 4096)
> > + - ti,max-y		      : integer, maximum reported y value
> > +				(defaults to 4096)
> > + - ti,max-pressure	      : integer, maximum reported pressure
> > +				(defaults to 4096)
> > + - ti,x-plate-resistance      : integer, resistance of the touchscreen's X plates
> > +				in ohm (defaults to 280)
> > + - ti,esd-recovery-timeout-ms : integer, if the touchscreen does not respond after
> > +				the configured time (in milli seconds), the driver
> > +				will reset it. This is disabled by default.
> 
> Instead of adding these optional ti,* properties you can set them in the
> driver directly in the of_match table based on the compatible flag. Then
> you can pass compatible flag like ti,tsc2005-nokia-n900, or the name of
> the LCD panel. Most likely these depend on the LCD panel selected.

I could certainly do this, but it would move the board specific data
from the boardcode into the driver. That looks contra-productive to
me. Is there a good reason to do it this way?

-- Sebastian

[-- Attachment #2: Digital signature --]
[-- Type: application/pgp-signature, Size: 836 bytes --]

^ permalink raw reply

* Re: [PATCH V2] input synaptics-rmi4: Fix ms calculation in poll interval
From: Benjamin Tissoires @ 2013-12-09 18:53 UTC (permalink / raw)
  To: Christopher Heiny, Dmitry Torokhov
  Cc: Linux Input, Andrew Duggan, Vincent Huang, Vivian Ly,
	Daniel Rosenberg, Jean Delvare, Joerie de Gram, Linus Walleij
In-Reply-To: <1386288825-11837-1-git-send-email-cheiny@synaptics.com>

On 05/12/13 19:13, Christopher Heiny wrote:
> [Previous patch re-used an old template for the subject line.  Sorry about that]
> 
> This patch implements changes to the synaptics-rmi4 branch of
> Dmitry's input tree.  The base for the patch is commit
> 8ca01dc61a42b6f7bcba052a8c084000f7057a34.
> 
> Fix computation of poll interval milliseconds.
> 
> Signed-off-by: Christopher Heiny <cheiny@synaptics.com>
> Cc: Dmitry Torokhov <dmitry.torokhov@gmail.com>
> Cc: Jean Delvare <khali@linux-fr.org>
> Cc: Linus Walleij <linus.walleij@stericsson.com>
> Cc: Joerie de Gram <j.de.gram@gmail.com>
> Cc: Benjamin Tissoires <benjamin.tissoires@redhat.com>
> 

Reviewed-by: Benjamin Tissoires <benjamin.tissoires@redhat.com>

Cheers,
Benjamin

> ---
>  drivers/input/rmi4/rmi_driver.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/drivers/input/rmi4/rmi_driver.c b/drivers/input/rmi4/rmi_driver.c
> index 9af297e..dffbfa0 100644
> --- a/drivers/input/rmi4/rmi_driver.c
> +++ b/drivers/input/rmi4/rmi_driver.c
> @@ -934,7 +934,7 @@ static int rmi_driver_probe(struct device *dev)
>  	} else
>  		data->poll_interval = ktime_set(0,
>  			(pdata->poll_interval_ms ? pdata->poll_interval_ms :
> -			DEFAULT_POLL_INTERVAL_MS) * 1000);
> +			DEFAULT_POLL_INTERVAL_MS) * 1000 * 1000);
>  
>  	if (data->f01_container->dev.driver) {
>  		/* Driver already bound, so enable ATTN now. */
> 


^ permalink raw reply

* Re: [PATCH 1/2] elantech: Properly differentiate between clickpads and normal touchpads
From: Hans de Goede @ 2013-12-09 19:14 UTC (permalink / raw)
  To: Benjamin Tissoires
  Cc: linux-input, Peter Hutterer, Duson Lin, Dmitry Torokhov
In-Reply-To: <CAN+gG=Eh72eBS67db_KNsUzXRNsOUXB8YkzuuHoJca22xRAkdQ@mail.gmail.com>

Hi,

On 12/09/2013 07:02 PM, Benjamin Tissoires wrote:
> Hi Hans,
>
> adding in CC Duson, who seems to be working on the same driver
> currently, and Dmitry, the input maintainer.
>
> On Mon, Dec 9, 2013 at 9:32 AM, Hans de Goede <hdegoede@redhat.com> wrote:
>> The current assumption in the elantech driver that hw version 3 touchpads are
>> never clickpads and hw version 4 touchpads are always clickpads is wrong.
>>
>> There are several bug reports for this, ie:
>> https://bugzilla.redhat.com/show_bug.cgi?id=1030802
>> http://superuser.com/questions/619582/right-elantech-touchpad-button-not-working-in-linux
>>
>> I've spend a couple of hours wading through various bugzillas,
>> launchpads and forum posts to create a list of fw-versions and capabilities
>> for different laptop models to find a good method to differentiate between
>> clickpads and versions with separate hardware buttons.
>>
>> Which shows that a device being a clickpad is reliable indicated by bit 12
>> being set in the fw_version. I've included the gathered list inside the driver,
>> so that we've this info at hand if we need to revisit this later.
>
> Duson, can you confirm this? It's not that I don't trust Hans, but if
> we could have the hardware maker validating this part, this would be
> great.
>
>>
>> Signed-off-by: Hans de Goede <hdegoede@redhat.com>
>> ---
>>   drivers/input/mouse/elantech.c | 43 +++++++++++++++++++++++++++++++++++++++---
>>   1 file changed, 40 insertions(+), 3 deletions(-)
>>
>> diff --git a/drivers/input/mouse/elantech.c b/drivers/input/mouse/elantech.c
>> index 8551dca..f7baa32 100644
>> --- a/drivers/input/mouse/elantech.c
>> +++ b/drivers/input/mouse/elantech.c
>> @@ -486,6 +486,7 @@ static void elantech_input_sync_v4(struct psmouse *psmouse)
>>          unsigned char *packet = psmouse->packet;
>>
>>          input_report_key(dev, BTN_LEFT, packet[0] & 0x01);
>> +       input_report_key(dev, BTN_RIGHT, packet[0] & 0x02);
>>          input_mt_report_pointer_emulation(dev, true);
>>          input_sync(dev);
>>   }
>> @@ -984,6 +985,42 @@ static int elantech_get_resolution_v4(struct psmouse *psmouse,
>>   }
>>
>>   /*
>> + * Advertise INPUT_PROP_BUTTONPAD for clickpads. The testing of bit 12 in
>> + * fw_version for this is based on the following fw_version & caps table:
>> + *
>> + * Laptop-model:           fw_version:     caps:           buttons:
>> + * Acer S3                 0x461f00        10, 13, 0e      clickpad
>> + * Acer S7-392             0x581f01        50, 17, 0d      clickpad
>> + * Acer V5-131             0x461f02        01, 16, 0c      clickpad
>> + * Acer V5-551             0x461f00        ?               clickpad
>> + * Asus K53SV              0x450f01        78, 15, 0c      2 hw buttons
>> + * Asus G46VW              0x460f02        00, 18, 0c      2 hw buttons
>> + * Asus G750JX             0x360f00        00, 16, 0c      2 hw buttons
>> + * Asus UX31               0x361f00        20, 15, 0e      clickpad
>> + * Asus UX32VD             0x361f02        00, 15, 0e      clickpad
>> + * Avatar AVIU-145A2       0x361f00        ?               clickpad
>> + * Gigabyte U2442          0x450f01        58, 17, 0c      2 hw buttons
>> + * Lenovo L430             0x350f02        b9, 15, 0c      2 hw buttons (*)
>> + * Samsung NF210           0x150b00        78, 14, 0a      2 hw buttons
>> + * Samsung NP770Z5E        0x575f01        10, 15, 0f      clickpad
>> + * Samsung NP700Z5B        0x361f06        21, 15, 0f      clickpad
>> + * Samsung NP900X3E-A02    0x575f03        ?               clickpad
>> + * Samsung NP-QX410        0x851b00        19, 14, 0c      clickpad
>> + * Samsung RC512           0x450f00        08, 15, 0c      2 hw buttons
>> + * Samsung RF710           0x450f00        ?               2 hw buttons
>> + * System76 Pangolin       0x250f01        ?               2 hw buttons
>> + * (*) + 3 trackpoint buttons
>> + */
>> +static void elantech_set_buttonpad_prop(struct psmouse *psmouse)
>> +{
>> +       struct input_dev *dev = psmouse->dev;
>> +       struct elantech_data *etd = psmouse->private;
>> +
>> +       if (etd->fw_version & 0x001000)
>> +               __set_bit(INPUT_PROP_BUTTONPAD, dev->propbit);
>
> Small question here: if the touchpad is a clickpad, should'nt we also
> remove the BTN_RIGHT bit too?

We could, but I don't see much value in that, and it would also require
if statements in the sync methods to ensure that we don't tree to send
a button event for a button we don't advertise.

Regards,

Hans

^ permalink raw reply

* Re: [PATCH 1/2] elantech: Properly differentiate between clickpads and normal touchpads
From: Benjamin Tissoires @ 2013-12-09 19:21 UTC (permalink / raw)
  To: Hans de Goede; +Cc: linux-input, Peter Hutterer, Duson Lin, Dmitry Torokhov
In-Reply-To: <52A6169C.1020904@redhat.com>

On Mon, Dec 9, 2013 at 2:14 PM, Hans de Goede <hdegoede@redhat.com> wrote:
> Hi,
>
>
> On 12/09/2013 07:02 PM, Benjamin Tissoires wrote:
>>
>> Hi Hans,
>>
>> adding in CC Duson, who seems to be working on the same driver
>> currently, and Dmitry, the input maintainer.
>>
>> On Mon, Dec 9, 2013 at 9:32 AM, Hans de Goede <hdegoede@redhat.com> wrote:
>>>
>>> The current assumption in the elantech driver that hw version 3 touchpads
>>> are
>>> never clickpads and hw version 4 touchpads are always clickpads is wrong.
>>>
>>> There are several bug reports for this, ie:
>>> https://bugzilla.redhat.com/show_bug.cgi?id=1030802
>>>
>>> http://superuser.com/questions/619582/right-elantech-touchpad-button-not-working-in-linux
>>>
>>> I've spend a couple of hours wading through various bugzillas,
>>> launchpads and forum posts to create a list of fw-versions and
>>> capabilities
>>> for different laptop models to find a good method to differentiate
>>> between
>>> clickpads and versions with separate hardware buttons.
>>>
>>> Which shows that a device being a clickpad is reliable indicated by bit
>>> 12
>>> being set in the fw_version. I've included the gathered list inside the
>>> driver,
>>> so that we've this info at hand if we need to revisit this later.
>>
>>
>> Duson, can you confirm this? It's not that I don't trust Hans, but if
>> we could have the hardware maker validating this part, this would be
>> great.
>>
>>>
>>> Signed-off-by: Hans de Goede <hdegoede@redhat.com>
>>> ---
>>>   drivers/input/mouse/elantech.c | 43
>>> +++++++++++++++++++++++++++++++++++++++---
>>>   1 file changed, 40 insertions(+), 3 deletions(-)
>>>
>>> diff --git a/drivers/input/mouse/elantech.c
>>> b/drivers/input/mouse/elantech.c
>>> index 8551dca..f7baa32 100644
>>> --- a/drivers/input/mouse/elantech.c
>>> +++ b/drivers/input/mouse/elantech.c
>>> @@ -486,6 +486,7 @@ static void elantech_input_sync_v4(struct psmouse
>>> *psmouse)
>>>          unsigned char *packet = psmouse->packet;
>>>
>>>          input_report_key(dev, BTN_LEFT, packet[0] & 0x01);
>>> +       input_report_key(dev, BTN_RIGHT, packet[0] & 0x02);
>>>          input_mt_report_pointer_emulation(dev, true);
>>>          input_sync(dev);
>>>   }
>>> @@ -984,6 +985,42 @@ static int elantech_get_resolution_v4(struct psmouse
>>> *psmouse,
>>>   }
>>>
>>>   /*
>>> + * Advertise INPUT_PROP_BUTTONPAD for clickpads. The testing of bit 12
>>> in
>>> + * fw_version for this is based on the following fw_version & caps
>>> table:
>>> + *
>>> + * Laptop-model:           fw_version:     caps:           buttons:
>>> + * Acer S3                 0x461f00        10, 13, 0e      clickpad
>>> + * Acer S7-392             0x581f01        50, 17, 0d      clickpad
>>> + * Acer V5-131             0x461f02        01, 16, 0c      clickpad
>>> + * Acer V5-551             0x461f00        ?               clickpad
>>> + * Asus K53SV              0x450f01        78, 15, 0c      2 hw buttons
>>> + * Asus G46VW              0x460f02        00, 18, 0c      2 hw buttons
>>> + * Asus G750JX             0x360f00        00, 16, 0c      2 hw buttons
>>> + * Asus UX31               0x361f00        20, 15, 0e      clickpad
>>> + * Asus UX32VD             0x361f02        00, 15, 0e      clickpad
>>> + * Avatar AVIU-145A2       0x361f00        ?               clickpad
>>> + * Gigabyte U2442          0x450f01        58, 17, 0c      2 hw buttons
>>> + * Lenovo L430             0x350f02        b9, 15, 0c      2 hw buttons
>>> (*)
>>> + * Samsung NF210           0x150b00        78, 14, 0a      2 hw buttons
>>> + * Samsung NP770Z5E        0x575f01        10, 15, 0f      clickpad
>>> + * Samsung NP700Z5B        0x361f06        21, 15, 0f      clickpad
>>> + * Samsung NP900X3E-A02    0x575f03        ?               clickpad
>>> + * Samsung NP-QX410        0x851b00        19, 14, 0c      clickpad
>>> + * Samsung RC512           0x450f00        08, 15, 0c      2 hw buttons
>>> + * Samsung RF710           0x450f00        ?               2 hw buttons
>>> + * System76 Pangolin       0x250f01        ?               2 hw buttons
>>> + * (*) + 3 trackpoint buttons
>>> + */
>>> +static void elantech_set_buttonpad_prop(struct psmouse *psmouse)
>>> +{
>>> +       struct input_dev *dev = psmouse->dev;
>>> +       struct elantech_data *etd = psmouse->private;
>>> +
>>> +       if (etd->fw_version & 0x001000)
>>> +               __set_bit(INPUT_PROP_BUTTONPAD, dev->propbit);
>>
>>
>> Small question here: if the touchpad is a clickpad, should'nt we also
>> remove the BTN_RIGHT bit too?
>
>
> We could, but I don't see much value in that, and it would also require
> if statements in the sync methods to ensure that we don't tree to send
> a button event for a button we don't advertise.

We don't need this test in the sync method. The test is already
implemented in input_event. So now, it's just a matter of taste
regarding upper layers. Peter, any thoughts on this?

Anyway, other than that:
Reviewed-by: Benjamin Tissoires <benjamin.tissoires@redhat.com>

Cheers,
Benjamin

>
> Regards,
>
> Hans

^ permalink raw reply

* Re: [PATCH V2] input synaptics-rmi4: Reorder declarations in rmi_bus.c
From: Benjamin Tissoires @ 2013-12-09 20:14 UTC (permalink / raw)
  To: Christopher Heiny, Dmitry Torokhov
  Cc: Linux Input, Andrew Duggan, Vincent Huang, Vivian Ly,
	Daniel Rosenberg, Jean Delvare, Joerie de Gram, Linus Walleij
In-Reply-To: <1386289756-12429-1-git-send-email-cheiny@synaptics.com>

Hi Chris,

On 05/12/13 19:29, Christopher Heiny wrote:
> This patch implements changes to the synaptics-rmi4 branch of
> Dmitry's input tree.  The base for the patch is commit
> 8ca01dc61a42b6f7bcba052a8c084000f7057a34.
> 
> This patch primarily reorders the various declarations in rmi_bus.c in order to
> group related elements together, along with some typo fixes.  The code is still
> horribly broken, but this change should make the following fixes easier to
>  review.
> 
> Signed-off-by: Christopher Heiny <cheiny@synaptics.com>
> Cc: Dmitry Torokhov <dmitry.torokhov@gmail.com>
> Cc: Jean Delvare <khali@linux-fr.org>
> Cc: Linus Walleij <linus.walleij@stericsson.com>
> Cc: Joerie de Gram <j.de.gram@gmail.com>
> Cc: Benjamin Tissoires <benjamin.tissoires@redhat.com>
> 
> ---

FWIW, I made a review of the patch.
The patches does not only reorder the functions, but also fix some few
things I will detail later (plus fixes of whitespace/comments issues).
It also changes the exported functions as GPL.

Dmitry, given the current state of the driver (which does not work at
all if I understood correctly), maybe you can pick this one in its
current state.

>  drivers/input/rmi4/rmi_bus.c | 189 +++++++++++++++++++++----------------------
>  1 file changed, 90 insertions(+), 99 deletions(-)
> 
> diff --git a/drivers/input/rmi4/rmi_bus.c b/drivers/input/rmi4/rmi_bus.c
> index 88f60ca..d9c450b 100644
> --- a/drivers/input/rmi4/rmi_bus.c
> +++ b/drivers/input/rmi4/rmi_bus.c
> @@ -1,5 +1,5 @@
>  /*
> - * Copyright (c) 2011, 2012 Synaptics Incorporated
> + * Copyright (c) 2011-2013 Synaptics Incorporated
>   * Copyright (c) 2011 Unixphere
>   *
>   * This program is free software; you can redistribute it and/or modify it
> @@ -19,77 +19,20 @@
>  #include "rmi_bus.h"
>  #include "rmi_driver.h"
>  
> -static int rmi_function_match(struct device *dev, struct device_driver *drv)
> -{
> -	struct rmi_function_handler *handler = to_rmi_function_handler(drv);
> -	struct rmi_function *fn = to_rmi_function(dev);
> -
> -	return fn->fd.function_number == handler->func;
> -}
> -
> -static int rmi_bus_match(struct device *dev, struct device_driver *drv)
> -{
> -	bool physical = rmi_is_physical_device(dev);
> -
> -	/* First see if types are not compatible */
> -	if (physical != rmi_is_physical_driver(drv))
> -		return 0;
> -
> -	return physical || rmi_function_match(dev, drv);
> -}
> -
> -struct bus_type rmi_bus_type = {
> -	.match		= rmi_bus_match,
> -	.name		= "rmi",
> -};
> -
> -#ifdef CONFIG_RMI4_DEBUG
> -
> -static struct dentry *rmi_debugfs_root;
> -
> -static void rmi_bus_setup_debugfs(void)
> -{
> -	rmi_debugfs_root = debugfs_create_dir(rmi_bus_type.name, NULL);
> -	if (!rmi_debugfs_root)
> -		pr_err("%s: Failed to create debugfs root\n",
> -		       __func__);
> -}
> -
> -static void rmi_bus_teardown_debugfs(void)
> -{
> -	if (rmi_debugfs_root)
> -		debugfs_remove_recursive(rmi_debugfs_root);
> -}
> -
> -#else
> -
> -static void rmi_bus_setup_debugfs(void)
> -{
> -}
> -
> -static void rmi_bus_teardown_debugfs(void)
> -{
> -}
> -
> -#endif
> -
> -
>  /*
>   * RMI Physical devices
>   *
>   * Physical RMI device consists of several functions serving particular
> - * purpose. For example F11 is a 2D touch sensor while F10 is a generic
> + * purpose. For example F11 is a 2D touch sensor while F01 is a generic
>   * function present in every RMI device.
>   */
>  
>  static void rmi_release_device(struct device *dev)
>  {
>  	struct rmi_device *rmi_dev = to_rmi_device(dev);
> -
>  	kfree(rmi_dev);
>  }
>  
> -/* Device type for physical RMI devices */
>  struct device_type rmi_device_type = {
>  	.name		= "rmi_sensor",
>  	.release	= rmi_release_device,
> @@ -118,7 +61,7 @@ static void rmi_physical_teardown_debugfs(struct rmi_device *rmi_dev)
>  
>  #else
>  
> -static void rmi_physocal_setup_debugfs(struct rmi_device *rmi_dev)
> +static void rmi_physical_setup_debugfs(struct rmi_device *rmi_dev)

This typo makes me wonder how nobody saw this before. This will not
compile without CONFIG_RMI4_DEBUG... :(

>  {
>  }
>  
> @@ -128,7 +71,6 @@ static void rmi_physical_teardown_debugfs(struct rmi_device *rmi_dev)
>  
>  #endif
>  
> -
>  /**
>   * rmi_register_physical_device - register a physical device connection on the RMI
>   * bus.  Physical drivers provide communication from the devices on the bus to
> @@ -174,7 +116,7 @@ int rmi_register_physical_device(struct rmi_phys_device *phys)
>  
>  	return 0;
>  }
> -EXPORT_SYMBOL(rmi_register_physical_device);
> +EXPORT_SYMBOL_GPL(rmi_register_physical_device);
>  
>  /**
>   * rmi_unregister_physical_device - unregister a physical device connection
> @@ -191,18 +133,14 @@ void rmi_unregister_physical_device(struct rmi_phys_device *phys)
>  EXPORT_SYMBOL(rmi_unregister_physical_device);
>  
>  
> -/*
> - * RMI Function devices and their handlers
> - */
> +/* Function specific stuff */
>  
>  static void rmi_release_function(struct device *dev)
>  {
>  	struct rmi_function *fn = to_rmi_function(dev);
> -
>  	kfree(fn);
>  }
>  
> -/* Device type for RMI Function devices */
>  struct device_type rmi_function_type = {
>  	.name		= "rmi_function",
>  	.release	= rmi_release_function,
> @@ -244,35 +182,12 @@ static void rmi_function_teardown_debugfs(struct rmi_function *fn)
>  
>  #endif
>  
> -int rmi_register_function(struct rmi_function *fn)
> +static int rmi_function_match(struct device *dev, struct device_driver *drv)
>  {
> -	struct rmi_device *rmi_dev = fn->rmi_dev;
> -	int error;
> -
> -	dev_set_name(&fn->dev, "%s.fn%02x",
> -		     dev_name(&rmi_dev->dev), fn->fd.function_number);
> -
> -	fn->dev.parent = &rmi_dev->dev;
> -	fn->dev.type = &rmi_function_type;
> -	fn->dev.bus = &rmi_bus_type;
> -
> -	error = device_register(&fn->dev);
> -	if (error) {
> -		dev_err(&rmi_dev->dev,
> -			"Failed device_register function device %s\n",
> -			dev_name(&fn->dev));
> -	}
> -
> -	dev_dbg(&rmi_dev->dev, "Registered F%02X.\n", fn->fd.function_number);
> -
> -	rmi_function_setup_debugfs(fn);
> -	return 0;
> -}
> +	struct rmi_function_handler *handler = to_rmi_function_handler(drv);
> +	struct rmi_function *fn = to_rmi_function(dev);
>  
> -void rmi_unregister_function(struct rmi_function *fn)
> -{
> -	rmi_function_teardown_debugfs(fn);
> -	device_unregister(&fn->dev);
> +	return fn->fd.function_number == handler->func;
>  }
>  
>  static int rmi_function_probe(struct device *dev)
> @@ -302,6 +217,38 @@ static int rmi_function_remove(struct device *dev)
>  	return 0;
>  }
>  
> +int rmi_register_function(struct rmi_function *fn)
> +{
> +	struct rmi_device *rmi_dev = fn->rmi_dev;
> +	int error;
> +
> +	dev_set_name(&fn->dev, "%s.fn%02x",
> +		     dev_name(&rmi_dev->dev), fn->fd.function_number);
> +
> +	fn->dev.parent = &rmi_dev->dev;
> +	fn->dev.type = &rmi_function_type;
> +	fn->dev.bus = &rmi_bus_type;
> +
> +	error = device_register(&fn->dev);
> +	if (error) {
> +		dev_err(&rmi_dev->dev,
> +			"Failed device_register function device %s\n",
> +			dev_name(&fn->dev));
> +		return error;

this return statement was not in the previous version of rmi_bus.c, but
it looks obviously correct.

So to sum up:
Reviewed-by: benjamin Tissoires <benjamin.tissoires@redhat.com>

Cheers,
Benjamin

> +	}
> +
> +	dev_dbg(&rmi_dev->dev, "Registered F%02X.\n", fn->fd.function_number);
> +
> +	rmi_function_setup_debugfs(fn);
> +	return 0;
> +}
> +
> +void rmi_unregister_function(struct rmi_function *fn)
> +{
> +	rmi_function_teardown_debugfs(fn);
> +	device_unregister(&fn->dev);
> +}
> +
>  /**
>   * rmi_register_function_handler - register a handler for an RMI function
>   * @handler: RMI handler that should be registered.
> @@ -334,7 +281,7 @@ int __rmi_register_function_handler(struct rmi_function_handler *handler,
>  
>  	return 0;
>  }
> -EXPORT_SYMBOL(__rmi_register_function_handler);
> +EXPORT_SYMBOL_GPL(__rmi_register_function_handler);
>  
>  /**
>   * rmi_unregister_function_handler - unregister given RMI function handler
> @@ -347,11 +294,55 @@ void rmi_unregister_function_handler(struct rmi_function_handler *handler)
>  {
>  	driver_unregister(&handler->driver);
>  }
> -EXPORT_SYMBOL(rmi_unregister_function_handler);
> +EXPORT_SYMBOL_GPL(rmi_unregister_function_handler);
>  
> -/*
> - * Bus registration and tear-down
> - */
> +/* Bus specific stuff */
> +
> +static int rmi_bus_match(struct device *dev, struct device_driver *drv)
> +{
> +	bool physical = rmi_is_physical_device(dev);
> +
> +	/* First see if types are not compatible */
> +	if (physical != rmi_is_physical_driver(drv))
> +		return 0;
> +
> +	return physical || rmi_function_match(dev, drv);
> +}
> +
> +struct bus_type rmi_bus_type = {
> +	.match		= rmi_bus_match,
> +	.name		= "rmi",
> +};
> +
> +#ifdef CONFIG_RMI4_DEBUG
> +
> +static struct dentry *rmi_debugfs_root;
> +
> +static void rmi_bus_setup_debugfs(void)
> +{
> +	rmi_debugfs_root = debugfs_create_dir(rmi_bus_type.name, NULL);
> +	if (!rmi_debugfs_root)
> +		pr_err("%s: Failed to create debugfs root\n",
> +		       __func__);
> +}
> +
> +static void rmi_bus_teardown_debugfs(void)
> +{
> +	if (rmi_debugfs_root)
> +		debugfs_remove_recursive(rmi_debugfs_root);
> +}
> +
> +#else
> +
> +static void rmi_bus_setup_debugfs(void)
> +{
> +}
> +
> +static void rmi_bus_teardown_debugfs(void)
> +{
> +}
> +
> +#endif
>  
>  static int __init rmi_bus_init(void)
>  {
> 


^ permalink raw reply

* Re: [PATCH] input synaptics-rmi4: elliminate multiple sensor support from rmi_f11.c
From: Benjamin Tissoires @ 2013-12-09 21:03 UTC (permalink / raw)
  To: Andrew Duggan, Dmitry Torokhov
  Cc: Linux Input, Christopher Heiny, Vincent Huang, Vivian Ly,
	Daniel Rosenberg, Jean Delvare, Joerie de Gram, Linus Walleij
In-Reply-To: <1386295167-866-1-git-send-email-aduggan@synaptics.com>

On 05/12/13 20:59, Andrew Duggan wrote:
> This patch implements changes to the synaptics-rmi4 branch of
> Dmitry's input tree.  The base for the patch is commit
> 8ca01dc61a42b6f7bcba052a8c084000f7057a34.

FWIW, these three lines above could (should) go after the very first
"---" before the stats. This way, you will tell the list which base is
the patch based, but this will not go into Linus' tree (which would be
irrelevant).

> 
> This patch elliminates support for multiple sensors in rmi_f11. This feature
> has been removed from the RMI4 spec and no devices have every used multiple
> F11 sensors on a single device.
> 
> Signed-off-by: Andrew Duggan <aduggan@synaptics.com>
> ---

I did not saw anything but what the commit message claims. So:
Reviewed-by: Benjamin Tissoires <benjamin.tissoires@redhat.com>

Cheers,
Benjamin

^ permalink raw reply


This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox