Merge branch 'for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mchehab...
Linus Torvalds [Mon, 13 Oct 2008 21:03:59 +0000 (14:03 -0700)]
* 'for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-2.6: (313 commits)
  V4L/DVB (9186): Added support for Prof 7300 DVB-S/S2 cards
  V4L/DVB (9185): S2API: Ensure we have a reasonable ROLLOFF default
  V4L/DVB (9184): cx24116: Change the default SNR units back to percentage by default.
  V4L/DVB (9183): S2API: Return error of the caller provides 0 commands.
  V4L/DVB (9182): S2API: Added support for DTV_HIERARCHY
  V4L/DVB (9181): S2API: Add support fot DTV_GUARD_INTERVAL and DTV_TRANSMISSION_MODE
  V4L/DVB (9180): S2API: Added support for DTV_CODE_RATE_HP/LP
  V4L/DVB (9179): S2API: frontend.h cleanup
  V4L/DVB (9178): cx24116: Add module parameter to return SNR as ESNO.
  V4L/DVB (9177): S2API: Change _8PSK / _16APSK to PSK_8 and APSK_16
  V4L/DVB (9176): Add support for DvbWorld USB cards with STV0288 demodulator.
  V4L/DVB (9175): Remove NULL pointer in stb6000 driver.
  V4L/DVB (9174): Allow custom inittab for ST STV0288 demodulator.
  V4L/DVB (9173): S2API: Remove the hardcoded command limit during validation
  V4L/DVB (9172): S2API: Bugfix related to DVB-S / DVB-S2 tuning for the legacy API.
  V4L/DVB (9171): S2API: Stop an OOPS if illegal commands are dumped in S2API.
  V4L/DVB (9170): cx24116: Sanity checking to data input via S2API to the cx24116 demod.
  V4L/DVB (9169): uvcvideo: Support two new Bison Electronics webcams.
  V4L/DVB (9168): Add support for MSI TV@nywhere Plus remote
  V4L/DVB: v4l2-dev: remove duplicated #include
  ...

828 files changed:
Documentation/00-INDEX
Documentation/blackfin/kgdb.txt [deleted file]
Documentation/feature-removal-schedule.txt
Documentation/filesystems/ext4.txt
Documentation/filesystems/proc.txt
Documentation/kernel-parameters.txt
Documentation/sound/alsa/DocBook/writing-an-alsa-driver.tmpl
Documentation/sparc/sbus_drivers.txt [deleted file]
Documentation/timers/00-INDEX [new file with mode: 0644]
Documentation/timers/hpet.txt [moved from Documentation/hpet.txt with 81% similarity]
MAINTAINERS
arch/Kconfig
arch/alpha/Kconfig
arch/alpha/include/asm/statfs.h
arch/arm/Kconfig
arch/arm/include/asm/statfs.h
arch/arm/kernel/dma.c
arch/arm/mach-orion5x/include/mach/orion5x.h
arch/arm/plat-omap/devices.c
arch/avr32/boards/atngw100/setup.c
arch/avr32/boards/atstk1000/atstk1002.c
arch/avr32/boards/atstk1000/atstk1003.c
arch/avr32/boards/atstk1000/atstk1004.c
arch/avr32/include/asm/a.out.h [deleted file]
arch/avr32/include/asm/atmel-mci.h
arch/avr32/include/asm/byteorder.h
arch/avr32/include/asm/io.h
arch/avr32/kernel/process.c
arch/avr32/kernel/setup.c
arch/avr32/mach-at32ap/at32ap700x.c
arch/avr32/mach-at32ap/clock.c
arch/avr32/mach-at32ap/clock.h
arch/avr32/mach-at32ap/include/mach/at32ap700x.h
arch/avr32/mach-at32ap/include/mach/board.h
arch/avr32/mach-at32ap/include/mach/io.h
arch/avr32/mach-at32ap/include/mach/portmux.h
arch/avr32/mach-at32ap/pdc.c
arch/avr32/mach-at32ap/pio.c
arch/avr32/oprofile/Makefile
arch/avr32/oprofile/backtrace.c [new file with mode: 0644]
arch/avr32/oprofile/op_model_avr32.c
arch/blackfin/Kconfig
arch/blackfin/Kconfig.debug
arch/blackfin/Makefile
arch/blackfin/configs/BF526-EZBRD_defconfig [new file with mode: 0644]
arch/blackfin/configs/H8606_defconfig
arch/blackfin/include/asm/a.out.h [deleted file]
arch/blackfin/include/asm/bfin-global.h
arch/blackfin/include/asm/bfrom.h [new file with mode: 0644]
arch/blackfin/include/asm/cacheflush.h
arch/blackfin/include/asm/cplb.h
arch/blackfin/include/asm/cplbinit.h
arch/blackfin/include/asm/cpumask.h [deleted file]
arch/blackfin/include/asm/dma-mapping.h
arch/blackfin/include/asm/kgdb.h
arch/blackfin/include/asm/mmu_context.h
arch/blackfin/include/asm/processor.h
arch/blackfin/include/asm/ptrace.h
arch/blackfin/include/asm/traps.h
arch/blackfin/kernel/asm-offsets.c
arch/blackfin/kernel/bfin_dma_5xx.c
arch/blackfin/kernel/bfin_gpio.c
arch/blackfin/kernel/cplb-mpu/cplbinit.c
arch/blackfin/kernel/cplb-mpu/cplbmgr.c
arch/blackfin/kernel/cplb-nompu/cplbinit.c
arch/blackfin/kernel/early_printk.c
arch/blackfin/kernel/kgdb.c
arch/blackfin/kernel/ptrace.c
arch/blackfin/kernel/reboot.c
arch/blackfin/kernel/setup.c
arch/blackfin/kernel/traps.c
arch/blackfin/mach-bf527/boards/Kconfig
arch/blackfin/mach-bf527/boards/Makefile
arch/blackfin/mach-bf527/boards/cm_bf527.c
arch/blackfin/mach-bf527/boards/ezbrd.c [new file with mode: 0644]
arch/blackfin/mach-bf527/boards/ezkit.c
arch/blackfin/mach-bf527/head.S
arch/blackfin/mach-bf527/include/mach/anomaly.h
arch/blackfin/mach-bf527/include/mach/bf527.h
arch/blackfin/mach-bf527/include/mach/bfin_serial_5xx.h
arch/blackfin/mach-bf527/include/mach/defBF52x_base.h
arch/blackfin/mach-bf527/include/mach/portmux.h
arch/blackfin/mach-bf533/boards/H8606.c
arch/blackfin/mach-bf533/head.S
arch/blackfin/mach-bf533/include/mach/anomaly.h
arch/blackfin/mach-bf533/include/mach/bf533.h
arch/blackfin/mach-bf533/include/mach/bfin_serial_5xx.h
arch/blackfin/mach-bf537/boards/stamp.c
arch/blackfin/mach-bf537/head.S
arch/blackfin/mach-bf537/include/mach/anomaly.h
arch/blackfin/mach-bf537/include/mach/bf537.h
arch/blackfin/mach-bf537/include/mach/bfin_serial_5xx.h
arch/blackfin/mach-bf548/boards/cm_bf548.c
arch/blackfin/mach-bf548/boards/ezkit.c
arch/blackfin/mach-bf548/head.S
arch/blackfin/mach-bf548/include/mach/anomaly.h
arch/blackfin/mach-bf548/include/mach/bf548.h
arch/blackfin/mach-bf548/include/mach/bfin_serial_5xx.h
arch/blackfin/mach-bf548/include/mach/mem_map.h
arch/blackfin/mach-bf561/head.S
arch/blackfin/mach-bf561/include/mach/anomaly.h
arch/blackfin/mach-bf561/include/mach/bf561.h
arch/blackfin/mach-bf561/include/mach/bfin_serial_5xx.h
arch/blackfin/mach-bf561/include/mach/mem_map.h
arch/blackfin/mach-common/entry.S
arch/blackfin/mach-common/head.S
arch/blackfin/mach-common/interrupt.S
arch/blackfin/mach-common/ints-priority.c
arch/blackfin/mm/Makefile
arch/blackfin/mm/isram-driver.c [new file with mode: 0644]
arch/blackfin/mm/sram-alloc.c [moved from arch/blackfin/mm/blackfin_sram.c with 96% similarity]
arch/cris/arch-v10/boot/tools/build.c
arch/h8300/Kconfig
arch/h8300/include/asm/a.out.h [deleted file]
arch/h8300/kernel/process.c
arch/ia64/include/asm/a.out.h [deleted file]
arch/ia64/include/asm/siginfo.h
arch/ia64/include/asm/statfs.h
arch/ia64/mm/init.c
arch/m32r/Kconfig
arch/m68k/Kconfig
arch/m68knommu/Kconfig
arch/m68knommu/include/asm/a.out.h [deleted file]
arch/m68knommu/kernel/process.c
arch/m68knommu/kernel/traps.c
arch/mips/include/asm/a.out.h [deleted file]
arch/mips/kernel/process.c
arch/mips/kernel/syscall.c
arch/mn10300/Kconfig
arch/parisc/Kconfig
arch/powerpc/include/asm/a.out.h [deleted file]
arch/powerpc/include/asm/siginfo.h
arch/powerpc/include/asm/statfs.h
arch/powerpc/kernel/softemu8xx.c
arch/powerpc/kernel/traps.c
arch/powerpc/platforms/cell/spufs/inode.c
arch/powerpc/platforms/chrp/setup.c
arch/powerpc/platforms/maple/setup.c
arch/powerpc/platforms/powermac/setup.c
arch/powerpc/platforms/pseries/setup.c
arch/s390/hypfs/inode.c
arch/s390/include/asm/statfs.h
arch/sparc/Kconfig
arch/sparc/include/asm/Kbuild
arch/sparc/include/asm/asmmacro.h
arch/sparc/include/asm/bpp.h [deleted file]
arch/sparc/include/asm/bugs.h
arch/sparc/include/asm/cpudata_64.h
arch/sparc/include/asm/dma-mapping_32.h
arch/sparc/include/asm/dma.h
arch/sparc/include/asm/dma_32.h [deleted file]
arch/sparc/include/asm/dma_64.h [deleted file]
arch/sparc/include/asm/ebus.h [deleted file]
arch/sparc/include/asm/ebus_32.h [deleted file]
arch/sparc/include/asm/ebus_64.h [deleted file]
arch/sparc/include/asm/ebus_dma.h [new file with mode: 0644]
arch/sparc/include/asm/elf_32.h
arch/sparc/include/asm/fhc.h
arch/sparc/include/asm/floppy_32.h
arch/sparc/include/asm/floppy_64.h
arch/sparc/include/asm/gpio.h [new file with mode: 0644]
arch/sparc/include/asm/io-unit.h
arch/sparc/include/asm/io_32.h
arch/sparc/include/asm/io_64.h
arch/sparc/include/asm/iommu_64.h
arch/sparc/include/asm/irq_64.h
arch/sparc/include/asm/mc146818rtc_64.h
arch/sparc/include/asm/memctrl.h [new file with mode: 0644]
arch/sparc/include/asm/mostek.h [deleted file]
arch/sparc/include/asm/mostek_32.h [deleted file]
arch/sparc/include/asm/mostek_64.h [deleted file]
arch/sparc/include/asm/obio.h
arch/sparc/include/asm/of_device.h
arch/sparc/include/asm/of_platform.h
arch/sparc/include/asm/oplib_32.h
arch/sparc/include/asm/page_32.h
arch/sparc/include/asm/page_64.h
arch/sparc/include/asm/parport.h
arch/sparc/include/asm/pci_32.h
arch/sparc/include/asm/pgtable_32.h
arch/sparc/include/asm/pgtable_64.h
arch/sparc/include/asm/prom.h
arch/sparc/include/asm/ptrace_64.h
arch/sparc/include/asm/reboot.h [deleted file]
arch/sparc/include/asm/rtc.h [deleted file]
arch/sparc/include/asm/sbus.h [deleted file]
arch/sparc/include/asm/sbus_32.h [deleted file]
arch/sparc/include/asm/sbus_64.h [deleted file]
arch/sparc/include/asm/serial.h [new file with mode: 0644]
arch/sparc/include/asm/spinlock_32.h
arch/sparc/include/asm/spinlock_64.h
arch/sparc/include/asm/sstate.h [deleted file]
arch/sparc/include/asm/starfire.h
arch/sparc/include/asm/statfs.h
arch/sparc/include/asm/statfs_32.h [deleted file]
arch/sparc/include/asm/statfs_64.h [deleted file]
arch/sparc/include/asm/sun4paddr.h [deleted file]
arch/sparc/include/asm/sun4prom.h [deleted file]
arch/sparc/include/asm/system_32.h
arch/sparc/include/asm/system_64.h
arch/sparc/include/asm/thread_info_32.h
arch/sparc/include/asm/timer_32.h
arch/sparc/include/asm/vac-ops.h
arch/sparc/include/asm/vfc_ioctls.h [deleted file]
arch/sparc/include/asm/visasm.h
arch/sparc/kernel/Makefile
arch/sparc/kernel/apc.c
arch/sparc/kernel/auxio.c
arch/sparc/kernel/devices.c
arch/sparc/kernel/dma.c [new file with mode: 0644]
arch/sparc/kernel/dma.h [new file with mode: 0644]
arch/sparc/kernel/ebus.c [deleted file]
arch/sparc/kernel/entry.S
arch/sparc/kernel/head.S
arch/sparc/kernel/idprom.c
arch/sparc/kernel/ioport.c
arch/sparc/kernel/irq.h
arch/sparc/kernel/of_device.c
arch/sparc/kernel/pcic.c
arch/sparc/kernel/pmc.c
arch/sparc/kernel/process.c
arch/sparc/kernel/prom.c
arch/sparc/kernel/setup.c
arch/sparc/kernel/sparc_ksyms.c
arch/sparc/kernel/sun4c_irq.c
arch/sparc/kernel/sun4d_irq.c
arch/sparc/kernel/sun4d_smp.c
arch/sparc/kernel/sun4m_irq.c
arch/sparc/kernel/sun4m_smp.c
arch/sparc/kernel/sun4setup.c [deleted file]
arch/sparc/kernel/sys_sparc.c
arch/sparc/kernel/tick14.c
arch/sparc/kernel/time.c
arch/sparc/kernel/traps.c
arch/sparc/mm/Makefile
arch/sparc/mm/btfixup.c
arch/sparc/mm/fault.c
arch/sparc/mm/init.c
arch/sparc/mm/io-unit.c
arch/sparc/mm/iommu.c
arch/sparc/mm/nosrmmu.c [deleted file]
arch/sparc/mm/srmmu.c
arch/sparc/mm/sun4c.c
arch/sparc/prom/Makefile
arch/sparc/prom/bootstr.c
arch/sparc/prom/console.c
arch/sparc/prom/init.c
arch/sparc/prom/memory.c
arch/sparc/prom/ranges.c
arch/sparc/prom/sun4prom.c [deleted file]
arch/sparc64/Kconfig
arch/sparc64/Makefile
arch/sparc64/kernel/Makefile
arch/sparc64/kernel/auxio.c
arch/sparc64/kernel/central.c
arch/sparc64/kernel/chmc.c
arch/sparc64/kernel/cpu.c
arch/sparc64/kernel/ds.c
arch/sparc64/kernel/ebus.c
arch/sparc64/kernel/entry.h
arch/sparc64/kernel/head.S
arch/sparc64/kernel/hvapi.c
arch/sparc64/kernel/hvcalls.S
arch/sparc64/kernel/irq.c
arch/sparc64/kernel/of_device.c
arch/sparc64/kernel/pci.c
arch/sparc64/kernel/pci_common.c
arch/sparc64/kernel/pci_fire.c
arch/sparc64/kernel/pci_impl.h
arch/sparc64/kernel/pci_msi.c
arch/sparc64/kernel/pci_psycho.c
arch/sparc64/kernel/pci_sabre.c
arch/sparc64/kernel/pci_schizo.c
arch/sparc64/kernel/pci_sun4v.c
arch/sparc64/kernel/pci_sun4v_asm.S
arch/sparc64/kernel/power.c
arch/sparc64/kernel/process.c
arch/sparc64/kernel/prom.c
arch/sparc64/kernel/psycho_common.c [new file with mode: 0644]
arch/sparc64/kernel/psycho_common.h [new file with mode: 0644]
arch/sparc64/kernel/ptrace.c
arch/sparc64/kernel/reboot.c [new file with mode: 0644]
arch/sparc64/kernel/sbus.c
arch/sparc64/kernel/smp.c
arch/sparc64/kernel/sparc64_ksyms.c
arch/sparc64/kernel/sstate.c
arch/sparc64/kernel/starfire.c
arch/sparc64/kernel/sys_sparc32.c
arch/sparc64/kernel/syscalls.S
arch/sparc64/kernel/systbls.S
arch/sparc64/kernel/time.c
arch/sparc64/kernel/traps.c
arch/sparc64/kernel/vio.c
arch/sparc64/kernel/visemul.c
arch/sparc64/mm/fault.c
arch/sparc64/mm/init.c
arch/sparc64/mm/init.h [new file with mode: 0644]
arch/sparc64/mm/tlb.c
arch/um/Kconfig.i386
arch/um/Kconfig.x86_64
arch/um/drivers/line.c
arch/x86/Kconfig
arch/x86/Kconfig.cpu
arch/x86/Kconfig.debug
arch/x86/Makefile_32.cpu
arch/x86/boot/Makefile
arch/x86/boot/compressed/Makefile
arch/x86/boot/edd.c
arch/x86/boot/video-vesa.c
arch/x86/configs/i386_defconfig
arch/x86/configs/x86_64_defconfig
arch/x86/ia32/ia32_signal.c
arch/x86/ia32/ia32entry.S
arch/x86/kernel/Makefile
arch/x86/kernel/acpi/boot.c
arch/x86/kernel/alternative.c
arch/x86/kernel/amd_iommu_init.c
arch/x86/kernel/apic_32.c
arch/x86/kernel/apic_64.c
arch/x86/kernel/cpu/common.c
arch/x86/kernel/doublefault_32.c
arch/x86/kernel/dumpstack_32.c [new file with mode: 0644]
arch/x86/kernel/dumpstack_64.c [new file with mode: 0644]
arch/x86/kernel/early-quirks.c
arch/x86/kernel/early_printk.c
arch/x86/kernel/entry_32.S
arch/x86/kernel/entry_64.S
arch/x86/kernel/es7000_32.c
arch/x86/kernel/genx2apic_uv_x.c
arch/x86/kernel/head.c
arch/x86/kernel/hpet.c
arch/x86/kernel/i387.c
arch/x86/kernel/io_apic_64.c
arch/x86/kernel/irqinit_64.c
arch/x86/kernel/ldt.c
arch/x86/kernel/microcode.c [deleted file]
arch/x86/kernel/microcode_amd.c [new file with mode: 0644]
arch/x86/kernel/microcode_core.c [new file with mode: 0644]
arch/x86/kernel/microcode_intel.c [new file with mode: 0644]
arch/x86/kernel/paravirt-spinlocks.c [new file with mode: 0644]
arch/x86/kernel/paravirt.c
arch/x86/kernel/process_32.c
arch/x86/kernel/process_64.c
arch/x86/kernel/ptrace.c
arch/x86/kernel/quirks.c
arch/x86/kernel/setup.c
arch/x86/kernel/signal_32.c
arch/x86/kernel/signal_64.c
arch/x86/kernel/smp.c
arch/x86/kernel/smpboot.c
arch/x86/kernel/time_32.c
arch/x86/kernel/time_64.c
arch/x86/kernel/tlb_32.c
arch/x86/kernel/traps.c [moved from arch/x86/kernel/traps_32.c with 57% similarity]
arch/x86/kernel/traps_64.c [deleted file]
arch/x86/kernel/vmlinux_64.lds.S
arch/x86/kernel/xsave.c
arch/x86/mach-generic/es7000.c
arch/x86/mm/Makefile
arch/x86/mm/fault.c
arch/x86/mm/gup.c
arch/x86/mm/init_32.c
arch/x86/mm/init_64.c
arch/x86/mm/ioremap.c
arch/x86/mm/numa_32.c [moved from arch/x86/mm/discontig_32.c with 100% similarity]
arch/x86/mm/srat_64.c
arch/x86/oprofile/Makefile
arch/x86/oprofile/nmi_int.c
arch/x86/oprofile/op_model_amd.c [new file with mode: 0644]
arch/x86/oprofile/op_model_athlon.c [deleted file]
arch/x86/oprofile/op_x86_model.h
arch/x86/pci/fixup.c
arch/x86/xen/Kconfig
arch/x86/xen/Makefile
arch/x86/xen/debugfs.c [new file with mode: 0644]
arch/x86/xen/debugfs.h [new file with mode: 0644]
arch/x86/xen/enlighten.c
arch/x86/xen/irq.c [new file with mode: 0644]
arch/x86/xen/mmu.c
arch/x86/xen/mmu.h
arch/x86/xen/multicalls.c
arch/x86/xen/smp.c
arch/x86/xen/spinlock.c [new file with mode: 0644]
arch/x86/xen/time.c
arch/x86/xen/xen-asm_32.S
arch/x86/xen/xen-asm_64.S
arch/x86/xen/xen-ops.h
drivers/acpi/Kconfig
drivers/acpi/glue.c
drivers/ata/Kconfig
drivers/atm/fore200e.c
drivers/atm/fore200e.h
drivers/block/sunvdc.c
drivers/block/xen-blkfront.c
drivers/bluetooth/hci_ldisc.c
drivers/char/Kconfig
drivers/char/Makefile
drivers/char/amiserial.c
drivers/char/applicom.c
drivers/char/cyclades.c
drivers/char/epca.c
drivers/char/generic_serial.c
drivers/char/hpet.c
drivers/char/hvc_console.c
drivers/char/hvc_xen.c
drivers/char/hw_random/n2-drv.c
drivers/char/ip2/Makefile
drivers/char/ip2/i2ellis.c
drivers/char/ip2/i2ellis.h
drivers/char/ip2/ip2base.c [deleted file]
drivers/char/ip2/ip2main.c
drivers/char/isicom.c
drivers/char/istallion.c
drivers/char/moxa.c
drivers/char/mxser.c
drivers/char/n_hdlc.c
drivers/char/n_r3964.c
drivers/char/n_tty.c
drivers/char/nozomi.c
drivers/char/pcmcia/ipwireless/tty.c
drivers/char/pty.c
drivers/char/rtc.c
drivers/char/stallion.c
drivers/char/sx.c
drivers/char/tpm/tpm.c
drivers/char/tpm/tpm.h
drivers/char/tpm/tpm_tis.c
drivers/char/tty_audit.c
drivers/char/tty_buffer.c [new file with mode: 0644]
drivers/char/tty_io.c
drivers/char/tty_ioctl.c
drivers/char/tty_port.c [new file with mode: 0644]
drivers/char/vt.c
drivers/char/vt_ioctl.c
drivers/hwmon/Kconfig
drivers/hwmon/Makefile
drivers/hwmon/ultra45_env.c [new file with mode: 0644]
drivers/infiniband/ulp/srp/ib_srp.c
drivers/input/misc/sparcspkr.c
drivers/input/serio/i8042-sparcio.h
drivers/input/xen-kbdfront.c
drivers/isdn/capi/capi.c
drivers/isdn/gigaset/ser-gigaset.c
drivers/leds/Kconfig
drivers/leds/Makefile
drivers/leds/leds-sunfire.c [new file with mode: 0644]
drivers/media/video/cafe_ccic.c
drivers/mmc/Kconfig
drivers/mmc/card/Kconfig
drivers/mmc/card/block.c
drivers/mmc/card/queue.c
drivers/mmc/core/mmc_ops.c
drivers/mmc/core/sdio.c
drivers/mmc/core/sdio_irq.c
drivers/mmc/host/Kconfig
drivers/mmc/host/atmel-mci-regs.h
drivers/mmc/host/atmel-mci.c
drivers/mmc/host/mmc_spi.c
drivers/mmc/host/sdhci-pci.c
drivers/mmc/host/sdhci.c
drivers/mmc/host/sdhci.h
drivers/mtd/maps/sun_uflash.c
drivers/mtd/nand/cafe_nand.c
drivers/net/au1000_eth.c
drivers/net/bfin_mac.c
drivers/net/e1000/e1000_main.c
drivers/net/jme.c
drivers/net/myri_sbus.c
drivers/net/myri_sbus.h
drivers/net/niu.c
drivers/net/qlge/qlge_ethtool.c
drivers/net/qlge/qlge_main.c
drivers/net/r8169.c
drivers/net/sky2.c
drivers/net/smc911x.c
drivers/net/smc911x.h
drivers/net/sunbmac.c
drivers/net/sunbmac.h
drivers/net/sunhme.c
drivers/net/sunhme.h
drivers/net/sunlance.c
drivers/net/sunqe.c
drivers/net/sunqe.h
drivers/net/sunvnet.c
drivers/net/tc35815.c
drivers/net/wan/Kconfig
drivers/net/xen-netfront.c
drivers/oprofile/buffer_sync.c
drivers/oprofile/cpu_buffer.c
drivers/oprofile/cpu_buffer.h
drivers/parport/parport_sunbpp.c
drivers/power/Kconfig
drivers/rtc/Kconfig
drivers/rtc/Makefile
drivers/rtc/rtc-bq4802.c [new file with mode: 0644]
drivers/rtc/rtc-cmos.c
drivers/rtc/rtc-m48t59.c
drivers/rtc/rtc-starfire.c [new file with mode: 0644]
drivers/rtc/rtc-sun4v.c [new file with mode: 0644]
drivers/s390/char/fs3270.c
drivers/sbus/Makefile
drivers/sbus/char/Kconfig
drivers/sbus/char/Makefile
drivers/sbus/char/bbc_envctrl.c
drivers/sbus/char/bbc_i2c.c
drivers/sbus/char/bbc_i2c.h
drivers/sbus/char/bpp.c [deleted file]
drivers/sbus/char/cpwatchdog.c [deleted file]
drivers/sbus/char/display7seg.c
drivers/sbus/char/envctrl.c
drivers/sbus/char/flash.c
drivers/sbus/char/rtc.c [deleted file]
drivers/sbus/char/uctrl.c
drivers/sbus/char/vfc.h [deleted file]
drivers/sbus/char/vfc_dev.c [deleted file]
drivers/sbus/char/vfc_i2c.c [deleted file]
drivers/sbus/char/vfc_i2c.h [deleted file]
drivers/sbus/dvma.c [deleted file]
drivers/sbus/sbus.c [deleted file]
drivers/scsi/esp_scsi.h
drivers/scsi/qlogicpti.c
drivers/scsi/qlogicpti.h
drivers/scsi/sun_esp.c
drivers/serial/8250.c
drivers/serial/8250_pci.c
drivers/serial/Kconfig
drivers/serial/Makefile
drivers/serial/bfin_5xx.c
drivers/serial/crisv10.c
drivers/serial/mcfserial.c [deleted file]
drivers/serial/mcfserial.h [deleted file]
drivers/serial/serial_core.c
drivers/serial/sunhv.c
drivers/serial/sunsab.c
drivers/serial/sunsu.c
drivers/serial/sunzilog.c
drivers/usb/core/inode.c
drivers/usb/host/ehci.h
drivers/usb/serial/aircable.c
drivers/usb/serial/belkin_sa.c
drivers/usb/serial/console.c
drivers/usb/serial/cyberjack.c
drivers/usb/serial/cypress_m8.c
drivers/usb/serial/digi_acceleport.c
drivers/usb/serial/empeg.c
drivers/usb/serial/ftdi_sio.c
drivers/usb/serial/garmin_gps.c
drivers/usb/serial/generic.c
drivers/usb/serial/io_edgeport.c
drivers/usb/serial/io_ti.c
drivers/usb/serial/ipaq.c
drivers/usb/serial/ipw.c
drivers/usb/serial/ir-usb.c
drivers/usb/serial/iuu_phoenix.c
drivers/usb/serial/keyspan.c
drivers/usb/serial/keyspan_pda.c
drivers/usb/serial/kl5kusb105.c
drivers/usb/serial/kobil_sct.c
drivers/usb/serial/mct_u232.c
drivers/usb/serial/mos7720.c
drivers/usb/serial/mos7840.c
drivers/usb/serial/navman.c
drivers/usb/serial/omninet.c
drivers/usb/serial/option.c
drivers/usb/serial/oti6858.c
drivers/usb/serial/pl2303.c
drivers/usb/serial/safe_serial.c
drivers/usb/serial/sierra.c
drivers/usb/serial/spcp8x5.c
drivers/usb/serial/ti_usb_3410_5052.c
drivers/usb/serial/usb-serial.c
drivers/usb/serial/visor.c
drivers/usb/serial/whiteheat.c
drivers/video/Kconfig
drivers/video/backlight/mbp_nvidia_bl.c
drivers/video/bw2.c
drivers/video/cg14.c
drivers/video/cg3.c
drivers/video/cg6.c
drivers/video/console/Kconfig
drivers/video/ffb.c
drivers/video/leo.c
drivers/video/p9100.c
drivers/video/tcx.c
drivers/video/xen-fbfront.c
drivers/watchdog/Kconfig
drivers/watchdog/Makefile
drivers/watchdog/at91sam9_wdt.c [new file with mode: 0644]
drivers/watchdog/cpwd.c [new file with mode: 0644]
drivers/watchdog/it87_wdt.c [new file with mode: 0644]
drivers/watchdog/omap_wdt.c
drivers/watchdog/omap_wdt.h
drivers/watchdog/orion5x_wdt.c [new file with mode: 0644]
drivers/watchdog/riowd.c [moved from drivers/sbus/char/riowatchdog.c with 51% similarity]
drivers/watchdog/w83697ug_wdt.c [new file with mode: 0644]
drivers/xen/Makefile
drivers/xen/balloon.c
drivers/xen/cpu_hotplug.c [new file with mode: 0644]
drivers/xen/events.c
drivers/xen/grant-table.c
drivers/xen/xenbus/xenbus_probe.c
fs/9p/v9fs.c
fs/Kconfig
fs/Kconfig.binfmt
fs/adfs/super.c
fs/affs/super.c
fs/afs/super.c
fs/autofs/inode.c
fs/autofs4/inode.c
fs/befs/linuxvfs.c
fs/cifs/misc.c
fs/debugfs/inode.c
fs/devpts/inode.c
fs/dquot.c
fs/ecryptfs/main.c
fs/efs/super.c
fs/ext2/super.c
fs/ext3/super.c
fs/ext4/ext4.h
fs/ext4/ioctl.c
fs/ext4/super.c
fs/fat/inode.c
fs/fuse/inode.c
fs/gfs2/mount.c
fs/hfs/super.c
fs/hfsplus/options.c
fs/hpfs/super.c
fs/hugetlbfs/inode.c
fs/ioctl.c
fs/isofs/inode.c
fs/jbd2/checkpoint.c
fs/jbd2/commit.c
fs/jbd2/journal.c
fs/jbd2/recovery.c
fs/jfs/super.c
fs/nfs/nfsroot.c
fs/nfs/super.c
fs/ocfs2/super.c
fs/omfs/inode.c
fs/open.c
fs/proc/Kconfig
fs/proc/array.c
fs/proc/base.c
fs/proc/inode.c
fs/proc/internal.h
fs/proc/proc_misc.c
fs/proc/proc_sysctl.c
fs/proc/task_mmu.c
fs/proc/task_nommu.c
fs/proc/vmcore.c
fs/ubifs/super.c
fs/udf/super.c
fs/ufs/super.c
fs/xfs/linux-2.6/xfs_super.c
include/asm-cris/a.out.h [deleted file]
include/asm-generic/siginfo.h
include/asm-generic/statfs.h
include/asm-m32r/a.out.h [deleted file]
include/asm-parisc/a.out.h [deleted file]
include/asm-parisc/siginfo.h
include/asm-parisc/statfs.h
include/asm-x86/bios_ebda.h
include/asm-x86/boot.h
include/asm-x86/desc.h
include/asm-x86/es7000/mpparse.h
include/asm-x86/fixmap_32.h
include/asm-x86/fixmap_64.h
include/asm-x86/io.h
include/asm-x86/io_64.h
include/asm-x86/ioctls.h
include/asm-x86/irqflags.h
include/asm-x86/kdebug.h
include/asm-x86/kprobes.h
include/asm-x86/mach-default/mach_traps.h
include/asm-x86/microcode.h [new file with mode: 0644]
include/asm-x86/mmzone_64.h
include/asm-x86/module.h
include/asm-x86/nmi.h
include/asm-x86/page.h
include/asm-x86/page_32.h
include/asm-x86/paravirt.h
include/asm-x86/pgtable.h
include/asm-x86/processor.h
include/asm-x86/ptrace.h
include/asm-x86/segment.h
include/asm-x86/smp.h
include/asm-x86/spinlock.h
include/asm-x86/statfs.h
include/asm-x86/system.h
include/asm-x86/tlbflush.h
include/asm-x86/traps.h
include/asm-x86/xen/hypervisor.h
include/asm-xtensa/a.out.h [deleted file]
include/linux/devpts_fs.h
include/linux/dmi.h
include/linux/elf.h
include/linux/hpet.h
include/linux/jbd2.h
include/linux/kernel.h
include/linux/key.h
include/linux/magic.h
include/linux/mm.h
include/linux/mm_types.h
include/linux/mmc/host.h
include/linux/mmdebug.h [new file with mode: 0644]
include/linux/mod_devicetable.h
include/linux/oprofile.h
include/linux/parser.h
include/linux/pci_ids.h
include/linux/rtc/m48t59.h
include/linux/sched.h
include/linux/serial.h
include/linux/serial_core.h
include/linux/termios.h
include/linux/tty.h
include/linux/tty_driver.h
include/linux/usb/ehci_def.h [new file with mode: 0644]
include/linux/vt_kern.h
include/net/cipso_ipv4.h
include/net/netlabel.h
include/sound/core.h
include/sound/memalloc.h
include/sound/soc-dapm.h
include/xen/balloon.h [deleted file]
include/xen/events.h
init/Kconfig
kernel/acct.c
kernel/auditsc.c
kernel/fork.c
kernel/printk.c
kernel/sched_debug.c
kernel/sys.c
kernel/sysctl.c
lib/Kconfig.debug
lib/cmdline.c
lib/parser.c
mm/shmem.c
mm/vmalloc.c
net/9p/client.c
net/9p/trans_fd.c
net/core/skb_dma_map.c
net/ipv4/cipso_ipv4.c
net/ipv4/ip_gre.c
net/ipv4/ip_options.c
net/mac80211/rx.c
net/netfilter/ipvs/Kconfig
net/netfilter/nf_tproxy_core.c
net/netlabel/Makefile
net/netlabel/netlabel_addrlist.c [new file with mode: 0644]
net/netlabel/netlabel_addrlist.h [new file with mode: 0644]
net/netlabel/netlabel_cipso_v4.c
net/netlabel/netlabel_cipso_v4.h
net/netlabel/netlabel_domainhash.c
net/netlabel/netlabel_domainhash.h
net/netlabel/netlabel_kapi.c
net/netlabel/netlabel_mgmt.c
net/netlabel/netlabel_mgmt.h
net/netlabel/netlabel_unlabeled.c
net/wireless/core.c
scripts/Kbuild.include
scripts/mod/file2alias.c
security/inode.c
security/selinux/hooks.c
security/selinux/include/netlabel.h
security/selinux/include/objsec.h
security/selinux/netlabel.c
security/selinux/ss/services.c
security/smack/smack_lsm.c
security/smack/smackfs.c
sound/core/memalloc.c
sound/oss/ac97_codec.c
sound/pci/ac97/ac97_patch.c
sound/pci/hda/patch_sigmatel.c
sound/soc/at91/Kconfig
sound/soc/at91/Makefile
sound/soc/at91/at91-ssc.c
sound/soc/at91/eti_b1_wm8731.c [deleted file]
sound/soc/blackfin/Kconfig
sound/soc/blackfin/Makefile
sound/soc/blackfin/bf5xx-ac97-pcm.c
sound/soc/blackfin/bf5xx-ac97.c
sound/soc/blackfin/bf5xx-ad73311.c [new file with mode: 0644]
sound/soc/blackfin/bf5xx-i2s.c
sound/soc/blackfin/bf5xx-sport.h
sound/soc/codecs/Kconfig
sound/soc/codecs/Makefile
sound/soc/codecs/ac97.c
sound/soc/codecs/ad1980.c
sound/soc/codecs/ad73311.c [new file with mode: 0644]
sound/soc/codecs/ad73311.h [new file with mode: 0644]
sound/soc/codecs/ak4535.c
sound/soc/codecs/ssm2602.c
sound/soc/codecs/tlv320aic23.c [new file with mode: 0644]
sound/soc/codecs/tlv320aic23.h [new file with mode: 0644]
sound/soc/codecs/tlv320aic3x.c
sound/soc/codecs/uda1380.c
sound/soc/codecs/wm8510.c
sound/soc/codecs/wm8510.h
sound/soc/codecs/wm8580.c
sound/soc/codecs/wm8731.c
sound/soc/codecs/wm8750.c
sound/soc/codecs/wm8753.c
sound/soc/codecs/wm8753.h
sound/soc/codecs/wm8900.c
sound/soc/codecs/wm8903.c
sound/soc/codecs/wm8971.c
sound/soc/codecs/wm8990.c
sound/soc/codecs/wm9712.c
sound/soc/codecs/wm9713.c
sound/soc/omap/Kconfig
sound/soc/omap/Makefile
sound/soc/omap/n810.c
sound/soc/omap/omap-mcbsp.c
sound/soc/omap/omap-mcbsp.h
sound/soc/omap/omap-pcm.c
sound/soc/omap/osk5912.c [new file with mode: 0644]
sound/soc/pxa/corgi.c
sound/soc/pxa/em-x270.c
sound/soc/pxa/poodle.c
sound/soc/pxa/pxa2xx-i2s.c
sound/soc/pxa/spitz.c
sound/soc/pxa/tosa.c
sound/soc/s3c24xx/neo1973_wm8753.c
sound/soc/soc-core.c
sound/soc/soc-dapm.c
sound/sparc/amd7930.c
sound/sparc/cs4231.c
sound/sparc/dbri.c

index 7306081..4382778 100644 (file)
@@ -159,8 +159,6 @@ hayes-esp.txt
        - info on using the Hayes ESP serial driver.
 highuid.txt
        - notes on the change from 16 bit to 32 bit user/group IDs.
-hpet.txt
-       - High Precision Event Timer Driver for Linux.
 timers/
        - info on the timer related topics
 hw_random.txt
diff --git a/Documentation/blackfin/kgdb.txt b/Documentation/blackfin/kgdb.txt
deleted file mode 100644 (file)
index 84f6a48..0000000
+++ /dev/null
@@ -1,155 +0,0 @@
-                       A Simple Guide to Configure KGDB
-
-                       Sonic Zhang <sonic.zhang@analog.com>
-                               Aug. 24th 2006
-
-
-This KGDB patch enables the kernel developer to do source level debugging on
-the kernel for the Blackfin architecture.  The debugging works over either the
-ethernet interface or one of the uarts.  Both software breakpoints and
-hardware breakpoints are supported in this version.
-http://docs.blackfin.uclinux.org/doku.php?id=kgdb
-
-
-2 known issues:
-1. This bug:
-       http://blackfin.uclinux.org/tracker/index.php?func=detail&aid=544&group_id=18&atid=145
-   The GDB client for Blackfin uClinux causes incorrect values of local
-   variables to be displayed when the user breaks the running of kernel in GDB.
-2. Because of a hardware bug in Blackfin 533 v1.0.3:
-       05000067 - Watchpoints (Hardware Breakpoints) are not supported
-   Hardware breakpoints cannot be set properly.
-
-
-Debug over Ethernet:
-1. Compile and install the cross platform version of gdb for blackfin, which
-   can be found at $(BINROOT)/bfin-elf-gdb.
-
-2. Apply this patch to the 2.6.x kernel.  Select the menuconfig option under
-   "Kernel hacking" -> "Kernel debugging" -> "KGDB: kernel debug with remote gdb".
-   With this selected, option "Full Symbolic/Source Debugging support" and 
-   "Compile the kernel with frame pointers" are also selected.
-
-3. Select option "KGDB: connect over (Ethernet)".  Add "kgdboe=@target-IP/,@host-IP/" to
-   the option "Compiled-in Kernel Boot Parameter" under "Kernel hacking".
-
-4. Connect minicom to the serial port and boot the kernel image.
-
-5. Configure the IP "/> ifconfig eth0 target-IP"
-
-6. Start GDB client "bfin-elf-gdb vmlinux".
-
-7. Connect to the target "(gdb) target remote udp:target-IP:6443".
-
-8. Set software breakpoint "(gdb) break sys_open".
-
-9. Continue "(gdb) c".
-
-10. Run ls in the target console "/> ls".
-
-11. Breakpoint hits. "Breakpoint 1: sys_open(..."
-
-12. Display local variables and function paramters.
-    (*) This operation gives wrong results, see known issue 1.
-
-13. Single stepping "(gdb) si".
-
-14. Remove breakpoint 1. "(gdb) del 1"
-
-15. Set hardware breakpoint "(gdb) hbreak sys_open".
-
-16. Continue "(gdb) c".
-
-17. Run ls in the target console "/> ls".
-
-18. Hardware breakpoint hits. "Breakpoint 1: sys_open(...".
-    (*) This hardware breakpoint will not be hit, see known issue 2.
-
-19. Continue "(gdb) c".
-
-20. Interrupt the target in GDB "Ctrl+C".
-
-21. Detach from the target "(gdb) detach".
-
-22. Exit GDB "(gdb) quit".
-
-
-Debug over the UART:
-
-1. Compile and install the cross platform version of gdb for blackfin, which
-   can be found at $(BINROOT)/bfin-elf-gdb.
-
-2. Apply this patch to the 2.6.x kernel.  Select the menuconfig option under
-   "Kernel hacking" -> "Kernel debugging" -> "KGDB: kernel debug with remote gdb".
-   With this selected, option "Full Symbolic/Source Debugging support" and 
-   "Compile the kernel with frame pointers" are also selected.
-
-3. Select option "KGDB: connect over (UART)".  Set "KGDB: UART port number" to be
-   a different one from the console.  Don't forget to change the mode of
-   blackfin serial driver to PIO.  Otherwise kgdb works incorrectly on UART.
-4. If you want connect to kgdb when the kernel boots, enable
-   "KGDB: Wait for gdb connection early" 
-
-5. Compile kernel.
-
-6. Connect minicom to the serial port of the console and boot the kernel image.
-
-7. Start GDB client "bfin-elf-gdb vmlinux".
-
-8. Set the baud rate in GDB "(gdb) set remotebaud 57600".
-
-9. Connect to the target on the second serial port "(gdb) target remote /dev/ttyS1".
-
-10. Set software breakpoint "(gdb) break sys_open".
-
-11. Continue "(gdb) c". 
-
-12. Run ls in the target console "/> ls". 
-
-13. A breakpoint is hit. "Breakpoint 1: sys_open(..."
-
-14. All other operations are the same as that in KGDB over Ethernet. 
-
-
-Debug over the same UART as console:
-
-1. Compile and install the cross platform version of gdb for blackfin, which
-   can be found at $(BINROOT)/bfin-elf-gdb.
-
-2. Apply this patch to the 2.6.x kernel.  Select the menuconfig option under
-   "Kernel hacking" -> "Kernel debugging" -> "KGDB: kernel debug with remote gdb".
-   With this selected, option "Full Symbolic/Source Debugging support" and 
-   "Compile the kernel with frame pointers" are also selected.
-
-3. Select option "KGDB: connect over UART".  Set "KGDB: UART port number" to console.
-   Don't forget to change the mode of blackfin serial driver to PIO.
-   Otherwise kgdb works incorrectly on UART.
-4. If you want connect to kgdb when the kernel boots, enable
-   "KGDB: Wait for gdb connection early" 
-
-5. Connect minicom to the serial port and boot the kernel image. 
-
-6. (Optional) Ask target to wait for gdb connection by entering Ctrl+A. In minicom, you should enter Ctrl+A+A.
-
-7. Start GDB client "bfin-elf-gdb vmlinux".
-
-8. Set the baud rate in GDB "(gdb) set remotebaud 57600".
-
-9. Connect to the target "(gdb) target remote /dev/ttyS0".
-
-10. Set software breakpoint "(gdb) break sys_open".
-
-11. Continue "(gdb) c". Then enter Ctrl+C twice to stop GDB connection.
-
-12. Run ls in the target console "/> ls". Dummy string can be seen on the console.
-
-13. Then connect the gdb to target again. "(gdb) target remote /dev/ttyS0".
-    Now you will find a breakpoint is hit. "Breakpoint 1: sys_open(..."
-
-14. All other operations are the same as that in KGDB over Ethernet.  The only
-    difference is that after continue command in GDB, please stop GDB
-    connection by 2 "Ctrl+C"s and connect again after breakpoints are hit or
-    Ctrl+A is entered.
index 3d2d0c2..cc8093c 100644 (file)
@@ -287,14 +287,6 @@ Who:       Glauber Costa <gcosta@redhat.com>
 
 ---------------------------
 
-What:  old style serial driver for ColdFire (CONFIG_SERIAL_COLDFIRE)
-When:  2.6.28
-Why:   This driver still uses the old interface and has been replaced
-       by CONFIG_SERIAL_MCF.
-Who:   Sebastian Siewior <sebastian@breakpoint.cc>
-
----------------------------
-
 What:  /sys/o2cb symlink
 When:  January 2010
 Why:   /sys/fs/o2cb is the proper location for this information - /sys/o2cb
index 74484e6..eb154ef 100644 (file)
@@ -223,6 +223,11 @@ errors=remount-ro(*)       Remount the filesystem read-only on an error.
 errors=continue                Keep going on a filesystem error.
 errors=panic           Panic and halt the machine if an error occurs.
 
+data_err=ignore(*)     Just print an error message if an error occurs
+                       in a file data buffer in ordered mode.
+data_err=abort         Abort the journal if an error occurs in a file
+                       data buffer in ordered mode.
+
 grpid                  Give objects the same group ID as their creator.
 bsdgroups
 
index d831d24..b488eda 100644 (file)
@@ -1331,13 +1331,6 @@ determine whether or not they are still functioning properly.
 Because the NMI watchdog shares registers with oprofile, by disabling the NMI
 watchdog, oprofile may have more registers to utilize.
 
-maps_protect
-------------
-
-Enables/Disables the protection of the per-process proc entries "maps" and
-"smaps".  When enabled, the contents of these files are visible only to
-readers that are allowed to ptrace() the given process.
-
 msgmni
 ------
 
index 25efbaf..2443f5b 100644 (file)
@@ -658,11 +658,12 @@ and is between 256 and 4096 characters. It is defined in the file
        earlyprintk=    [X86-32,X86-64,SH,BLACKFIN]
                        earlyprintk=vga
                        earlyprintk=serial[,ttySn[,baudrate]]
+                       earlyprintk=dbgp
 
                        Append ",keep" to not disable it when the real console
                        takes over.
 
-                       Only vga or serial at a time, not both.
+                       Only vga or serial or usb debug port at a time.
 
                        Currently only ttyS0 and ttyS1 are supported.
 
@@ -1231,6 +1232,29 @@ and is between 256 and 4096 characters. It is defined in the file
                                 or
                                 memmap=0x10000$0x18690000
 
+       memory_corruption_check=0/1 [X86]
+                       Some BIOSes seem to corrupt the first 64k of
+                       memory when doing things like suspend/resume.
+                       Setting this option will scan the memory
+                       looking for corruption.  Enabling this will
+                       both detect corruption and prevent the kernel
+                       from using the memory being corrupted.
+                       However, its intended as a diagnostic tool; if
+                       repeatable BIOS-originated corruption always
+                       affects the same memory, you can use memmap=
+                       to prevent the kernel from using that memory.
+
+       memory_corruption_check_size=size [X86]
+                       By default it checks for corruption in the low
+                       64k, making this memory unavailable for normal
+                       use.  Use this parameter to scan for
+                       corruption in more or less memory.
+
+       memory_corruption_check_period=seconds [X86]
+                       By default it checks for corruption every 60
+                       seconds.  Use this parameter to check at some
+                       other rate.  0 disables periodic checking.
+
        memtest=        [KNL,X86] Enable memtest
                        Format: <integer>
                        range: 0,4 : pattern number
index b54cb50..87a7c07 100644 (file)
@@ -5073,8 +5073,7 @@ struct _snd_pcm_runtime {
       with <constant>SNDRV_DMA_TYPE_CONTINUOUS</constant> type and the
       <function>snd_dma_continuous_data(GFP_KERNEL)</function> device pointer,
       where <constant>GFP_KERNEL</constant> is the kernel allocation flag to
-      use.  For the SBUS, <constant>SNDRV_DMA_TYPE_SBUS</constant> and
-      <function>snd_dma_sbus_data(sbus_dev)</function> are used instead.
+      use.
       For the PCI scatter-gather buffers, use
       <constant>SNDRV_DMA_TYPE_DEV_SG</constant> with
       <function>snd_dma_pci_data(pci)</function>
diff --git a/Documentation/sparc/sbus_drivers.txt b/Documentation/sparc/sbus_drivers.txt
deleted file mode 100644 (file)
index eb1e28a..0000000
+++ /dev/null
@@ -1,309 +0,0 @@
-
-               Writing SBUS Drivers
-
-           David S. Miller (davem@redhat.com)
-
-       The SBUS driver interfaces of the Linux kernel have been
-revamped completely for 2.4.x for several reasons.  Foremost were
-performance and complexity concerns.  This document details these
-new interfaces and how they are used to write an SBUS device driver.
-
-       SBUS drivers need to include <asm/sbus.h> to get access
-to functions and structures described here.
-
-               Probing and Detection
-
-       Each SBUS device inside the machine is described by a
-structure called "struct sbus_dev".  Likewise, each SBUS bus
-found in the system is described by a "struct sbus_bus".  For
-each SBUS bus, the devices underneath are hung in a tree-like
-fashion off of the bus structure.
-
-       The SBUS device structure contains enough information
-for you to implement your device probing algorithm and obtain
-the bits necessary to run your device.  The most commonly
-used members of this structure, and their typical usage,
-will be detailed below.
-
-       Here is a piece of skeleton code for performing a device
-probe in an SBUS driver under Linux:
-
-       static int __devinit mydevice_probe_one(struct sbus_dev *sdev)
-       {
-               struct mysdevice *mp = kzalloc(sizeof(*mp), GFP_KERNEL);
-
-               if (!mp)
-                       return -ENODEV;
-
-               ...
-               dev_set_drvdata(&sdev->ofdev.dev, mp);
-               return 0;
-               ...
-       }
-
-       static int __devinit mydevice_probe(struct of_device *dev,
-                                           const struct of_device_id *match)
-       {
-               struct sbus_dev *sdev = to_sbus_device(&dev->dev);
-
-               return mydevice_probe_one(sdev);
-       }
-
-       static int __devexit mydevice_remove(struct of_device *dev)
-       {
-               struct sbus_dev *sdev = to_sbus_device(&dev->dev);
-               struct mydevice *mp = dev_get_drvdata(&dev->dev);
-
-               return mydevice_remove_one(sdev, mp);
-       }
-
-       static struct of_device_id mydevice_match[] = {
-               {
-                       .name = "mydevice",
-               },
-               {},
-       };
-
-       MODULE_DEVICE_TABLE(of, mydevice_match);
-
-       static struct of_platform_driver mydevice_driver = {
-               .match_table    = mydevice_match,
-               .probe          = mydevice_probe,
-               .remove         = __devexit_p(mydevice_remove),
-               .driver         = {
-                       .name           = "mydevice",
-               },
-       };
-
-       static int __init mydevice_init(void)
-       {
-               return of_register_driver(&mydevice_driver, &sbus_bus_type);
-       }
-
-       static void __exit mydevice_exit(void)
-       {
-               of_unregister_driver(&mydevice_driver);
-       }
-
-       module_init(mydevice_init);
-       module_exit(mydevice_exit);
-
-       The mydevice_match table is a series of entries which
-describes what SBUS devices your driver is meant for.  In the
-simplest case you specify a string for the 'name' field.  Every
-SBUS device with a 'name' property matching your string will
-be passed one-by-one to your .probe method.
-
-       You should store away your device private state structure
-pointer in the drvdata area so that you can retrieve it later on
-in your .remove method.
-
-       Any memory allocated, registers mapped, IRQs registered,
-etc. must be undone by your .remove method so that all resources
-of your device are released by the time it returns.
-
-       You should _NOT_ use the for_each_sbus(), for_each_sbusdev(),
-and for_all_sbusdev() interfaces.  They are deprecated, will be
-removed, and no new driver should reference them ever.
-
-               Mapping and Accessing I/O Registers
-
-       Each SBUS device structure contains an array of descriptors
-which describe each register set. We abuse struct resource for that.
-They each correspond to the "reg" properties provided by the OBP firmware.
-
-       Before you can access your device's registers you must map
-them.  And later if you wish to shutdown your driver (for module
-unload or similar) you must unmap them.  You must treat them as
-a resource, which you allocate (map) before using and free up
-(unmap) when you are done with it.
-
-       The mapping information is stored in an opaque value
-typed as an "unsigned long".  This is the type of the return value
-of the mapping interface, and the arguments to the unmapping
-interface.  Let's say you want to map the first set of registers.
-Perhaps part of your driver software state structure looks like:
-
-       struct mydevice {
-               unsigned long control_regs;
-          ...
-               struct sbus_dev *sdev;
-          ...
-       };
-
-       At initialization time you then use the sbus_ioremap
-interface to map in your registers, like so:
-
-       static void init_one_mydevice(struct sbus_dev *sdev)
-       {
-               struct mydevice *mp;
-               ...
-
-               mp->control_regs = sbus_ioremap(&sdev->resource[0], 0,
-                                       CONTROL_REGS_SIZE, "mydevice regs");
-               if (!mp->control_regs) {
-                       /* Failure, cleanup and return. */
-               }
-       }
-
-       Second argument to sbus_ioremap is an offset for
-cranky devices with broken OBP PROM. The sbus_ioremap uses only
-a start address and flags from the resource structure.
-Therefore it is possible to use the same resource to map
-several sets of registers or even to fabricate a resource
-structure if driver gets physical address from some private place.
-This practice is discouraged though. Use whatever OBP PROM
-provided to you.
-
-       And here is how you might unmap these registers later at
-driver shutdown or module unload time, using the sbus_iounmap
-interface:
-
-       static void mydevice_unmap_regs(struct mydevice *mp)
-       {
-               sbus_iounmap(mp->control_regs, CONTROL_REGS_SIZE);
-       }
-
-       Finally, to actually access your registers there are 6
-interface routines at your disposal.  Accesses are byte (8 bit),
-word (16 bit), or longword (32 bit) sized.  Here they are:
-
-       u8 sbus_readb(unsigned long reg)                /* read byte */
-       u16 sbus_readw(unsigned long reg)               /* read word */
-       u32 sbus_readl(unsigned long reg)               /* read longword */
-       void sbus_writeb(u8 value, unsigned long reg)   /* write byte */
-       void sbus_writew(u16 value, unsigned long reg)  /* write word */
-       void sbus_writel(u32 value, unsigned long reg)  /* write longword */
-
-       So, let's say your device has a control register of some sort
-at offset zero.  The following might implement resetting your device:
-
-       #define CONTROL         0x00UL
-
-       #define CONTROL_RESET   0x00000001      /* Reset hardware */
-
-       static void mydevice_reset(struct mydevice *mp)
-       {
-               sbus_writel(CONTROL_RESET, mp->regs + CONTROL);
-       }
-
-       Or perhaps there is a data port register at an offset of
-16 bytes which allows you to read bytes from a fifo in the device:
-
-       #define DATA            0x10UL
-
-       static u8 mydevice_get_byte(struct mydevice *mp)
-       {
-               return sbus_readb(mp->regs + DATA);
-       }
-
-       It's pretty straightforward, and clueful readers may have
-noticed that these interfaces mimick the PCI interfaces of the
-Linux kernel.  This was not by accident.
-
-       WARNING:
-
-               DO NOT try to treat these opaque register mapping
-               values as a memory mapped pointer to some structure
-               which you can dereference.
-
-               It may be memory mapped, it may not be.  In fact it
-               could be a physical address, or it could be the time
-               of day xor'd with 0xdeadbeef.  :-)
-
-               Whatever it is, it's an implementation detail.  The
-               interface was done this way to shield the driver
-               author from such complexities.
-
-                       Doing DVMA
-
-       SBUS devices can perform DMA transactions in a way similar
-to PCI but dissimilar to ISA, e.g. DMA masters supply address.
-In contrast to PCI, however, that address (a bus address) is
-translated by IOMMU before a memory access is performed and therefore
-it is virtual. Sun calls this procedure DVMA.
-
-       Linux supports two styles of using SBUS DVMA: "consistent memory"
-and "streaming DVMA". CPU view of consistent memory chunk is, well,
-consistent with a view of a device. Think of it as an uncached memory.
-Typically this way of doing DVMA is not very fast and drivers use it
-mostly for control blocks or queues. On some CPUs we cannot flush or
-invalidate individual pages or cache lines and doing explicit flushing
-over ever little byte in every control block would be wasteful.
-
-Streaming DVMA is a preferred way to transfer large amounts of data.
-This process works in the following way:
-1. a CPU stops accessing a certain part of memory,
-   flushes its caches covering that memory;
-2. a device does DVMA accesses, then posts an interrupt;
-3. CPU invalidates its caches and starts to access the memory.
-
-A single streaming DVMA operation can touch several discontiguous
-regions of a virtual bus address space. This is called a scatter-gather
-DVMA.
-
-[TBD: Why do not we neither Solaris attempt to map disjoint pages
-into a single virtual chunk with the help of IOMMU, so that non SG
-DVMA masters would do SG? It'd be very helpful for RAID.]
-
-       In order to perform a consistent DVMA a driver does something
-like the following:
-
-       char *mem;              /* Address in the CPU space */
-       u32 busa;               /* Address in the SBus space */
-
-       mem = (char *) sbus_alloc_consistent(sdev, MYMEMSIZE, &busa);
-
-       Then mem is used when CPU accesses this memory and u32
-is fed to the device so that it can do DVMA. This is typically
-done with an sbus_writel() into some device register.
-
-       Do not forget to free the DVMA resources once you are done:
-
-       sbus_free_consistent(sdev, MYMEMSIZE, mem, busa);
-
-       Streaming DVMA is more interesting. First you allocate some
-memory suitable for it or pin down some user pages. Then it all works
-like this:
-
-       char *mem = argumen1;
-       unsigned int size = argument2;
-       u32 busa;               /* Address in the SBus space */
-
-       *mem = 1;               /* CPU can access */
-       busa = sbus_map_single(sdev, mem, size);
-       if (busa == 0) .......
-
-       /* Tell the device to use busa here */
-       /* CPU cannot access the memory without sbus_dma_sync_single() */
-
-       sbus_unmap_single(sdev, busa, size);
-       if (*mem == 0) ....     /* CPU can access again */
-
-       It is possible to retain mappings and ask the device to
-access data again and again without calling sbus_unmap_single.
-However, CPU caches must be invalidated with sbus_dma_sync_single
-before such access.
-
-[TBD but what about writeback caches here... do we have any?]
-
-       There is an equivalent set of functions doing the same thing
-only with several memory segments at once for devices capable of
-scatter-gather transfers. Use the Source, Luke.
-
-                       Examples
-
-       drivers/net/sunhme.c
-       This is a complicated driver which illustrates many concepts
-discussed above and plus it handles both PCI and SBUS boards.
-
-       drivers/scsi/esp.c
-       Check it out for scatter-gather DVMA.
-
-       drivers/sbus/char/bpp.c
-       A non-DVMA device.
-
-       drivers/net/sunlance.c
-       Lance driver abuses consistent mappings for data transfer.
-It is a nifty trick which we do not particularly recommend...
-Just check it out and know that it's legal.
diff --git a/Documentation/timers/00-INDEX b/Documentation/timers/00-INDEX
new file mode 100644 (file)
index 0000000..397dc35
--- /dev/null
@@ -0,0 +1,10 @@
+00-INDEX
+       - this file
+highres.txt
+       - High resolution timers and dynamic ticks design notes
+hpet.txt
+       - High Precision Event Timer Driver for Linux
+hrtimers.txt
+       - subsystem for high-resolution kernel timers
+timer_stats.txt
+       - timer usage statistics
similarity index 81%
rename from Documentation/hpet.txt
rename to Documentation/timers/hpet.txt
index 6ad52d9..e7c09ab 100644 (file)
@@ -1,21 +1,32 @@
                High Precision Event Timer Driver for Linux
 
-The High Precision Event Timer (HPET) hardware is the future replacement
-for the 8254 and Real Time Clock (RTC) periodic timer functionality.
-Each HPET can have up to 32 timers.  It is possible to configure the
-first two timers as legacy replacements for 8254 and RTC periodic timers.
-A specification done by Intel and Microsoft can be found at
-<http://www.intel.com/technology/architecture/hpetspec.htm>.
+The High Precision Event Timer (HPET) hardware follows a specification
+by Intel and Microsoft which can be found at
+
+       http://www.intel.com/technology/architecture/hpetspec.htm
+
+Each HPET has one fixed-rate counter (at 10+ MHz, hence "High Precision")
+and up to 32 comparators.  Normally three or more comparators are provided,
+each of which can generate oneshot interupts and at least one of which has
+additional hardware to support periodic interrupts.  The comparators are
+also called "timers", which can be misleading since usually timers are
+independent of each other ... these share a counter, complicating resets.
+
+HPET devices can support two interrupt routing modes.  In one mode, the
+comparators are additional interrupt sources with no particular system
+role.  Many x86 BIOS writers don't route HPET interrupts at all, which
+prevents use of that mode.  They support the other "legacy replacement"
+mode where the first two comparators block interrupts from 8254 timers
+and from the RTC.
 
 The driver supports detection of HPET driver allocation and initialization
 of the HPET before the driver module_init routine is called.  This enables
 platform code which uses timer 0 or 1 as the main timer to intercept HPET
 initialization.  An example of this initialization can be found in
-arch/i386/kernel/time_hpet.c.
+arch/x86/kernel/hpet.c.
 
-The driver provides two APIs which are very similar to the API found in
-the rtc.c driver.  There is a user space API and a kernel space API.
-An example user space program is provided below.
+The driver provides a userspace API which resembles the API found in the
+RTC driver framework.  An example user space program is provided below.
 
 #include <stdio.h>
 #include <stdlib.h>
@@ -286,15 +297,3 @@ out:
 
        return;
 }
-
-The kernel API has three interfaces exported from the driver:
-
-       hpet_register(struct hpet_task *tp, int periodic)
-       hpet_unregister(struct hpet_task *tp)
-       hpet_control(struct hpet_task *tp, unsigned int cmd, unsigned long arg)
-
-The kernel module using this interface fills in the ht_func and ht_data
-members of the hpet_task structure before calling hpet_register.
-hpet_control simply vectors to the hpet_ioctl routine and has the same
-commands and respective arguments as the user API.  hpet_unregister
-is used to terminate usage of the HPET timer reserved by hpet_register.
index 587f418..988b0a8 100644 (file)
@@ -72,6 +72,7 @@ M: Mail patches to
 L: Mailing list that is relevant to this area
 W: Web-page with status/info
 T: SCM tree type and location.  Type is one of: git, hg, quilt.
+F: Applicable files and/or directories
 S: Status, one of the following:
 
        Supported:      Someone is actually paid to look after this.
@@ -102,14 +103,14 @@ M:        dave@thedillows.org
 L:     netdev@vger.kernel.org
 S:     Maintained
 
-3W-XXXX ATA-RAID CONTROLLER DRIVER
+3W-9XXX SATA-RAID CONTROLLER DRIVER
 P:     Adam Radford
 M:     linuxraid@amcc.com
 L:     linux-scsi@vger.kernel.org
 W:     http://www.amcc.com
 S:     Supported
 
-3W-9XXX SATA-RAID CONTROLLER DRIVER
+3W-XXXX ATA-RAID CONTROLLER DRIVER
 P:     Adam Radford
 M:     linuxraid@amcc.com
 L:     linux-scsi@vger.kernel.org
@@ -163,16 +164,11 @@ M:        A2232@gmx.net
 L:     linux-m68k@lists.linux-m68k.org
 S:     Maintained
 
-AFS FILESYSTEM & AF_RXRPC SOCKET DOMAIN
-P:     David Howells
-M:     dhowells@redhat.com
-L:     linux-afs@lists.infradead.org
-S:     Supported
-
-AIO
-P:     Benjamin LaHaise
-M:     bcrl@kvack.org
-L:     linux-aio@kvack.org
+AACRAID SCSI RAID DRIVER
+P:     Adaptec OEM Raid Solutions
+M:     aacraid@adaptec.com
+L:     linux-scsi@vger.kernel.org
+W:     http://www.adaptec.com/
 S:     Supported
 
 ABIT UGURU 1,2 HARDWARE MONITOR DRIVER
@@ -193,27 +189,6 @@ M: jes@trained-monkey.org
 L:     linux-acenic@sunsite.dk
 S:     Maintained
 
-IPS SCSI RAID DRIVER
-P:     Adaptec OEM Raid Solutions
-M:     aacraid@adaptec.com
-L:     linux-scsi@vger.kernel.org
-W:     http://www.adaptec.com/
-S:     Maintained
-
-DPT_I2O SCSI RAID DRIVER
-P:     Adaptec OEM Raid Solutions
-M:     aacraid@adaptec.com
-L:     linux-scsi@vger.kernel.org
-W:     http://www.adaptec.com/
-S:     Maintained
-
-AACRAID SCSI RAID DRIVER
-P:     Adaptec OEM Raid Solutions
-M:     aacraid@adaptec.com
-L:     linux-scsi@vger.kernel.org
-W:     http://www.adaptec.com/
-S:     Supported
-
 ACER WMI LAPTOP EXTRAS
 P:     Carlos Corbacho
 M:     carlos@strangeworlds.co.uk
@@ -327,6 +302,12 @@ P: Roman Zippel
 M:     zippel@linux-m68k.org
 S:     Maintained
 
+AFS FILESYSTEM & AF_RXRPC SOCKET DOMAIN
+P:     David Howells
+M:     dhowells@redhat.com
+L:     linux-afs@lists.infradead.org
+S:     Supported
+
 AGPGART DRIVER
 P:     David Airlie
 M:     airlied@linux.ie
@@ -345,6 +326,12 @@ M: hare@suse.de
 L:     linux-scsi@vger.kernel.org
 S:     Maintained
 
+AIO
+P:     Benjamin LaHaise
+M:     bcrl@kvack.org
+L:     linux-aio@kvack.org
+S:     Supported
+
 ALCATEL SPEEDTOUCH USB DRIVER
 P:     Duncan Sands
 M:     duncan.sands@free.fr
@@ -390,6 +377,11 @@ L: iommu@lists.linux-foundation.org
 T:     git://git.kernel.org/pub/scm/linux/kernel/git/joro/linux-2.6-iommu.git
 S:     Supported
 
+AMD MICROCODE UPDATE SUPPORT
+P:      Peter Oruba
+M:      peter.oruba@amd.com
+S:      Supported
+
 AMS (Apple Motion Sensor) DRIVER
 P:     Stelian Pop
 M:     stelian@popies.net
@@ -732,7 +724,7 @@ L:  linux-kernel@vger.kernel.org
 W:     http://sourceforge.net/projects/xscaleiop
 S:     Supported
 
-ATA OVER ETHERNET DRIVER
+ATA OVER ETHERNET (AOE) DRIVER
 P:     Ed L. Cashin
 M:     ecashin@coraid.com
 W:     http://www.coraid.com/support/linux
@@ -865,11 +857,48 @@ L:        linux-hams@vger.kernel.org
 W:     http://www.linux-ax25.org/
 S:     Maintained
 
+B43 WIRELESS DRIVER
+P:     Michael Buesch
+M:     mb@bu3sch.de
+P:     Stefano Brivio
+M:     stefano.brivio@polimi.it
+L:     linux-wireless@vger.kernel.org
+W:     http://linuxwireless.org/en/users/Drivers/b43
+S:     Maintained
+
+B43LEGACY WIRELESS DRIVER
+P:     Larry Finger
+M:     Larry.Finger@lwfinger.net
+P:     Stefano Brivio
+M:     stefano.brivio@polimi.it
+L:     linux-wireless@vger.kernel.org
+W:     http://linuxwireless.org/en/users/Drivers/b43
+S:     Maintained
+
 BACKLIGHT CLASS/SUBSYSTEM
 P:     Richard Purdie
 M:     rpurdie@rpsys.net
 S:     Maintained
 
+BAYCOM/HDLCDRV DRIVERS FOR AX.25
+P:     Thomas Sailer
+M:     t.sailer@alumni.ethz.ch
+L:     linux-hams@vger.kernel.org
+W:     http://www.baycom.org/~tom/ham/ham.html
+S:     Maintained
+
+BEFS FILE SYSTEM
+P:     Sergey S. Kostyliov
+M:     rathamahata@php4.ru
+L:     linux-kernel@vger.kernel.org
+S:     Maintained
+
+BFS FILE SYSTEM
+P:     Tigran A. Aivazian
+M:     tigran@aivazian.fsnet.co.uk
+L:     linux-kernel@vger.kernel.org
+S:     Maintained
+
 BLACKFIN ARCHITECTURE
 P:     Bryan Wu
 M:     cooloney@kernel.org
@@ -905,43 +934,6 @@ L: uclinux-dist-devel@blackfin.uclinux.org (subscribers-only)
 W:     http://blackfin.uclinux.org
 S:     Supported
 
-BAYCOM/HDLCDRV DRIVERS FOR AX.25
-P:     Thomas Sailer
-M:     t.sailer@alumni.ethz.ch
-L:     linux-hams@vger.kernel.org
-W:     http://www.baycom.org/~tom/ham/ham.html
-S:     Maintained
-
-B43 WIRELESS DRIVER
-P:     Michael Buesch
-M:     mb@bu3sch.de
-P:     Stefano Brivio
-M:     stefano.brivio@polimi.it
-L:     linux-wireless@vger.kernel.org
-W:     http://linuxwireless.org/en/users/Drivers/b43
-S:     Maintained
-
-B43LEGACY WIRELESS DRIVER
-P:     Larry Finger
-M:     Larry.Finger@lwfinger.net
-P:     Stefano Brivio
-M:     stefano.brivio@polimi.it
-L:     linux-wireless@vger.kernel.org
-W:     http://linuxwireless.org/en/users/Drivers/b43
-S:     Maintained
-
-BEFS FILE SYSTEM
-P:     Sergey S. Kostyliov
-M:     rathamahata@php4.ru
-L:     linux-kernel@vger.kernel.org
-S:     Maintained
-
-BFS FILE SYSTEM
-P:     Tigran A. Aivazian
-M:     tigran@aivazian.fsnet.co.uk
-L:     linux-kernel@vger.kernel.org
-S:     Maintained
-
 BLACKFIN I2C TWI DRIVER
 P:     Sonic Zhang
 M:     sonic.zhang@analog.com
@@ -1035,15 +1027,6 @@ M:       corbet@lwn.net
 L:     video4linux-list@redhat.com
 S:     Maintained
 
-CAN NETWORK LAYER
-P:     Urs Thuermann
-M:     urs.thuermann@volkswagen.de
-P:     Oliver Hartkopp
-M:     oliver.hartkopp@volkswagen.de
-L:     socketcan-core@lists.berlios.de (subscribers-only)
-W:     http://developer.berlios.de/projects/socketcan/
-S:     Maintained
-
 CALGARY x86-64 IOMMU
 P:     Muli Ben-Yehuda
 M:     muli@il.ibm.com
@@ -1053,6 +1036,15 @@ L:       linux-kernel@vger.kernel.org
 L:     discuss@x86-64.org
 S:     Maintained
 
+CAN NETWORK LAYER
+P:     Urs Thuermann
+M:     urs.thuermann@volkswagen.de
+P:     Oliver Hartkopp
+M:     oliver.hartkopp@volkswagen.de
+L:     socketcan-core@lists.berlios.de (subscribers-only)
+W:     http://developer.berlios.de/projects/socketcan/
+S:     Maintained
+
 CELL BROADBAND ENGINE ARCHITECTURE
 P:     Arnd Bergmann
 M:     arnd@arndb.de
@@ -1061,13 +1053,6 @@ L:       cbe-oss-dev@ozlabs.org
 W:     http://www.ibm.com/developerworks/power/cell/
 S:     Supported
 
-CISCO 10G ETHERNET DRIVER
-P:     Scott Feldman
-M:     scofeldm@cisco.com
-P:     Joe Eykholt
-M:     jeykholt@cisco.com
-S:     Supported
-
 CFAG12864B LCD DRIVER
 P:     Miguel Ojeda Sandonis
 M:     miguel.ojeda.sandonis@gmail.com
@@ -1099,19 +1084,11 @@ P:      Joel Schopp
 M:     jschopp@austin.ibm.com
 S:     Supported
 
-COMMON INTERNET FILE SYSTEM (CIFS)
-P:     Steve French
-M:     sfrench@samba.org
-L:     linux-cifs-client@lists.samba.org
-L:     samba-technical@lists.samba.org
-W:     http://linux-cifs.samba.org/
-T:     git kernel.org:/pub/scm/linux/kernel/git/sfrench/cifs-2.6.git
-S:     Supported
-
-CONFIGFS
-P:     Joel Becker
-M:     joel.becker@oracle.com
-L:     linux-kernel@vger.kernel.org
+CISCO 10G ETHERNET DRIVER
+P:     Scott Feldman
+M:     scofeldm@cisco.com
+P:     Joe Eykholt
+M:     jeykholt@cisco.com
 S:     Supported
 
 CIRRUS LOGIC EP93XX ETHERNET DRIVER
@@ -1147,6 +1124,15 @@ L:       codalist@coda.cs.cmu.edu
 W:     http://www.coda.cs.cmu.edu/
 S:     Maintained
 
+COMMON INTERNET FILE SYSTEM (CIFS)
+P:     Steve French
+M:     sfrench@samba.org
+L:     linux-cifs-client@lists.samba.org
+L:     samba-technical@lists.samba.org
+W:     http://linux-cifs.samba.org/
+T:     git kernel.org:/pub/scm/linux/kernel/git/sfrench/cifs-2.6.git
+S:     Supported
+
 COMPACTPCI HOTPLUG CORE
 P:     Scott Murray
 M:     scottm@somanetworks.com
@@ -1186,6 +1172,12 @@ L:       accessrunner-general@lists.sourceforge.net
 W:     http://accessrunner.sourceforge.net/
 S:     Maintained
 
+CONFIGFS
+P:     Joel Becker
+M:     joel.becker@oracle.com
+L:     linux-kernel@vger.kernel.org
+S:     Supported
+
 CONTROL GROUPS (CGROUPS)
 P:     Paul Menage
 M:     menage@google.com
@@ -1309,6 +1301,20 @@ W:       http://www.qsl.net/dl1bke/
 L:     linux-hams@vger.kernel.org
 S:     Maintained
 
+DAVICOM FAST ETHERNET (DMFE) NETWORK DRIVER
+P:     Tobias Ringstrom
+M:     tori@unhappy.mine.nu
+L:     netdev@vger.kernel.org
+S:     Maintained
+
+DC390/AM53C974 SCSI driver
+P:     Kurt Garloff
+M:     garloff@suse.de
+W:     http://www.garloff.de/kurt/linux/dc390/
+P:     Guennadi Liakhovetski
+M:     g.liakhovetski@gmx.de
+S:     Maintained
+
 DC395x SCSI driver
 P:     Oliver Neukum
 M:     oliver@neukum.name
@@ -1321,14 +1327,6 @@ L:       dc395x@twibble.org
 L:     http://lists.twibble.org/mailman/listinfo/dc395x/
 S:     Maintained
 
-DC390/AM53C974 SCSI driver
-P:     Kurt Garloff
-M:     garloff@suse.de
-W:     http://www.garloff.de/kurt/linux/dc390/
-P:     Guennadi Liakhovetski
-M:     g.liakhovetski@gmx.de
-S:     Maintained
-
 DCCP PROTOCOL
 P:     Arnaldo Carvalho de Melo
 M:     acme@ghostprotocols.net
@@ -1359,12 +1357,6 @@ P:       Doug Warzecha
 M:     Douglas_Warzecha@dell.com
 S:     Maintained
 
-DEVICE-MAPPER  (LVM)
-P:     Alasdair Kergon
-L:     dm-devel@redhat.com
-W:     http://sources.redhat.com/dm
-S:     Maintained
-
 DEVICE NUMBER REGISTRY
 P:     Torben Mathiasen
 M:     device@lanana.org
@@ -1372,6 +1364,12 @@ W:       http://lanana.org/docs/device-list/index.html
 L:     linux-kernel@vger.kernel.org
 S:     Maintained
 
+DEVICE-MAPPER  (LVM)
+P:     Alasdair Kergon
+L:     dm-devel@redhat.com
+W:     http://sources.redhat.com/dm
+S:     Maintained
+
 DIGI INTL. EPCA DRIVER
 P:     Digi International, Inc
 M:     Eng.Linux@digi.com
@@ -1379,7 +1377,7 @@ L:        Eng.Linux@digi.com
 W:     http://www.digi.com
 S:     Orphan
 
-DIRECTORY NOTIFICATION
+DIRECTORY NOTIFICATION (DNOTIFY)
 P:     Stephen Rothwell
 M:     sfr@canb.auug.org.au
 L:     linux-kernel@vger.kernel.org
@@ -1393,13 +1391,13 @@ W:      http://www.win.tue.nl/~aeb/linux/zip/zip-1.html
 W:     http://www.win.tue.nl/~aeb/partitions/partition_types-1.html
 S:     Maintained
 
-DISKQUOTA:
+DISKQUOTA
 P:     Jan Kara
 M:     jack@suse.cz
 L:     linux-kernel@vger.kernel.org
 S:     Maintained
 
-DISTRIBUTED LOCK MANAGER
+DISTRIBUTED LOCK MANAGER (DLM)
 P:     Christine Caulfield
 M:     ccaulfie@redhat.com
 P:     David Teigland
@@ -1409,12 +1407,6 @@ W:       http://sources.redhat.com/cluster/
 T:     git kernel.org:/pub/scm/linux/kernel/git/teigland/dlm.git
 S:     Supported
 
-DAVICOM FAST ETHERNET (DMFE) NETWORK DRIVER
-P:     Tobias Ringstrom
-M:     tori@unhappy.mine.nu
-L:     netdev@vger.kernel.org
-S:     Maintained
-
 DMA GENERIC OFFLOAD ENGINE SUBSYSTEM
 P:     Maciej Sosnowski
 M:     maciej.sosnowski@intel.com
@@ -1454,6 +1446,13 @@ M:       jrv@vanzandt.mv.com
 L:     blinux-list@redhat.com
 S:     Maintained
 
+DPT_I2O SCSI RAID DRIVER
+P:     Adaptec OEM Raid Solutions
+M:     aacraid@adaptec.com
+L:     linux-scsi@vger.kernel.org
+W:     http://www.adaptec.com/
+S:     Maintained
+
 DRIVER CORE, KOBJECTS, AND SYSFS
 P:     Greg Kroah-Hartman
 M:     gregkh@suse.de
@@ -1602,7 +1601,7 @@ EFS FILESYSTEM
 W:     http://aeschi.ch.eu.org/efs/
 S:     Orphan
 
-EHCA (IBM GX bus InfiniBand adapter) DRIVER:
+EHCA (IBM GX bus InfiniBand adapter) DRIVER
 P:     Hoang-Nam Nguyen
 M:     hnguyen@de.ibm.com
 P:     Christoph Raisch
@@ -1682,6 +1681,42 @@ P:       Akinobu Mita
 M:     akinobu.mita@gmail.com
 S:     Supported
 
+FILE LOCKING (flock() and fcntl()/lockf())
+P:     Matthew Wilcox
+M:     matthew@wil.cx
+L:     linux-fsdevel@vger.kernel.org
+S:     Maintained
+
+FILESYSTEMS (VFS and infrastructure)
+P:     Alexander Viro
+M:     viro@zeniv.linux.org.uk
+L:     linux-fsdevel@vger.kernel.org
+S:     Maintained
+
+FIREWIRE SUBSYSTEM (drivers/firewire, <linux/firewire*.h>)
+P:     Kristian Hoegsberg, Stefan Richter
+M:     krh@redhat.com, stefanr@s5r6.in-berlin.de
+L:     linux1394-devel@lists.sourceforge.net
+W:     http://www.linux1394.org/
+T:     git kernel.org:/pub/scm/linux/kernel/git/ieee1394/linux1394-2.6.git
+S:     Maintained
+
+FIRMWARE LOADER (request_firmware)
+L:     linux-kernel@vger.kernel.org
+S:     Orphan
+
+FPU EMULATOR
+P:     Bill Metzenthen
+M:     billm@suburbia.net
+W:     http://suburbia.net/~billm/floating-point/emulator/
+S:     Maintained
+
+FRAME RELAY DLCI/FRAD (Sangoma drivers too)
+P:     Mike McLagan
+M:     mike.mclagan@linux.org
+L:     netdev@vger.kernel.org
+S:     Maintained
+
 FRAMEBUFFER LAYER
 P:     Antonino Daplas
 M:     adaplas@gmail.com
@@ -1747,42 +1782,6 @@ L:       alsa-devel@alsa-project.org
 L:     linuxppc-dev@ozlabs.org
 S:     Supported
 
-FILE LOCKING (flock() and fcntl()/lockf())
-P:     Matthew Wilcox
-M:     matthew@wil.cx
-L:     linux-fsdevel@vger.kernel.org
-S:     Maintained
-
-FILESYSTEMS (VFS and infrastructure)
-P:     Alexander Viro
-M:     viro@zeniv.linux.org.uk
-L:     linux-fsdevel@vger.kernel.org
-S:     Maintained
-
-FIREWIRE SUBSYSTEM (drivers/firewire, <linux/firewire*.h>)
-P:     Kristian Hoegsberg, Stefan Richter
-M:     krh@redhat.com, stefanr@s5r6.in-berlin.de
-L:     linux1394-devel@lists.sourceforge.net
-W:     http://www.linux1394.org/
-T:     git kernel.org:/pub/scm/linux/kernel/git/ieee1394/linux1394-2.6.git
-S:     Maintained
-
-FIRMWARE LOADER (request_firmware)
-L:     linux-kernel@vger.kernel.org
-S:     Orphan
-
-FPU EMULATOR
-P:     Bill Metzenthen
-M:     billm@suburbia.net
-W:     http://suburbia.net/~billm/floating-point/emulator/
-S:     Maintained
-
-FRAME RELAY DLCI/FRAD (Sangoma drivers too)
-P:     Mike McLagan
-M:     mike.mclagan@linux.org
-L:     netdev@vger.kernel.org
-S:     Maintained
-
 FREEVXFS FILESYSTEM
 P:     Christoph Hellwig
 M:     hch@infradead.org
@@ -1854,6 +1853,13 @@ L:       gigaset307x-common@lists.sourceforge.net
 W:     http://gigaset307x.sourceforge.net/
 S:     Maintained
 
+HARD DRIVE ACTIVE PROTECTION SYSTEM (HDAPS) DRIVER
+P:     Robert Love
+M:     rlove@rlove.org
+M:     linux-kernel@vger.kernel.org
+W:     http://www.kernel.org/pub/linux/kernel/people/rml/hdaps/
+S:     Maintained
+
 HARDWARE MONITORING
 L:     lm-sensors@lm-sensors.org
 W:     http://www.lm-sensors.org/
@@ -1862,13 +1868,6 @@ S:       Orphan
 HARDWARE RANDOM NUMBER GENERATOR CORE
 S:     Orphan
 
-HARD DRIVE ACTIVE PROTECTION SYSTEM (HDAPS) DRIVER
-P:     Robert Love
-M:     rlove@rlove.org
-M:     linux-kernel@vger.kernel.org
-W:     http://www.kernel.org/pub/linux/kernel/people/rml/hdaps/
-S:     Maintained
-
 HARMONY SOUND DRIVER
 P:     Kyle McMartin
 M:     kyle@mcmartin.ca
@@ -1882,6 +1881,24 @@ L:       linux-kernel@vger.kernel.org
 W:     http://www.nyx.net/~arobinso
 S:     Maintained
 
+HEWLETT-PACKARD FIBRE CHANNEL 64-bit/66MHz PCI non-intelligent HBA
+P:     Chirag Kantharia
+M:     chirag.kantharia@hp.com
+L:     iss_storagedev@hp.com
+S:     Maintained
+
+HEWLETT-PACKARD SMART2 RAID DRIVER
+P:     Chirag Kantharia
+M:     chirag.kantharia@hp.com
+L:     iss_storagedev@hp.com
+S:     Maintained
+
+HEWLETT-PACKARD SMART CISS RAID DRIVER (cciss)
+P:     Mike Miller
+M:     mike.miller@hp.com
+L:     iss_storagedev@hp.com
+S:     Supported
+
 HFS FILESYSTEM
 P:     Roman Zippel
 M:     zippel@linux-m68k.org
@@ -1895,6 +1912,14 @@ L:       linux-nvidia@lists.surfsouth.com
 W:     http://drama.obuda.kando.hu/~fero/cgi-bin/hgafb.shtml
 S:     Maintained
 
+HIBERNATION (aka Software Suspend, aka swsusp)
+P:     Pavel Machek
+M:     pavel@suse.cz
+P:     Rafael J. Wysocki
+M:     rjw@sisk.pl
+L:     linux-pm@lists.linux-foundation.org
+S:     Supported
+
 HID CORE LAYER
 P:     Jiri Kosina
 M:     jkosina@suse.cz
@@ -1927,24 +1952,6 @@ M:       jes@trained-monkey.org
 L:     linux-hippi@sunsite.dk
 S:     Maintained
 
-HEWLETT-PACKARD FIBRE CHANNEL 64-bit/66MHz PCI non-intelligent HBA
-P:     Chirag Kantharia
-M:     chirag.kantharia@hp.com
-L:     iss_storagedev@hp.com
-S:     Maintained
-
-HEWLETT-PACKARD SMART2 RAID DRIVER
-P:     Chirag Kantharia
-M:     chirag.kantharia@hp.com
-L:     iss_storagedev@hp.com
-S:     Maintained
-
-HEWLETT-PACKARD SMART CISS RAID DRIVER (cciss)
-P:     Mike Miller
-M:     mike.miller@hp.com
-L:     iss_storagedev@hp.com
-S:     Supported
-
 HOST AP DRIVER
 P:     Jouni Malinen
 M:     j@w1.fi
@@ -1953,16 +1960,16 @@ L:      linux-wireless@vger.kernel.org
 W:     http://hostap.epitest.fi/
 S:     Maintained
 
-HP100: Driver for HP 10/100 Mbit/s Voice Grade Network Adapter Series
-P:     Jaroslav Kysela
-M:     perex@perex.cz
-S:     Maintained
-
 HP COMPAQ TC1100 TABLET WMI EXTRAS DRIVER
 P:     Carlos Corbacho
 M:     carlos@strangeworlds.co.uk
 S:     Odd Fixes
 
+HP100: Driver for HP 10/100 Mbit/s Voice Grade Network Adapter Series
+P:     Jaroslav Kysela
+M:     perex@perex.cz
+S:     Maintained
+
 HPET:  High Precision Event Timers driver (drivers/char/hpet.c)
 P:     Clemens Ladisch
 M:     clemens@ladisch.de
@@ -2042,14 +2049,6 @@ W:       http://www.ia64-linux.org/
 T:     git kernel.org:/pub/scm/linux/kernel/git/aegl/linux-2.6.git
 S:     Maintained
 
-SN-IA64 (Itanium) SUB-PLATFORM
-P:     Jes Sorensen
-M:     jes@sgi.com
-L:     linux-altix@sgi.com
-L:     linux-ia64@vger.kernel.org
-W:     http://www.sgi.com/altix
-S:     Maintained
-
 IBM MCA SCSI SUBSYSTEM DRIVER
 P:     Michael Lang
 M:     langa2@kph.uni-mainz.de
@@ -2133,14 +2132,6 @@ W:       http://www.openib.org/
 T:     git kernel.org:/pub/scm/linux/kernel/git/roland/infiniband.git
 S:     Supported
 
-INPUT (KEYBOARD, MOUSE, JOYSTICK, TOUCHSCREEN) DRIVERS
-P:     Dmitry Torokhov
-M:     dmitry.torokhov@gmail.com
-M:     dtor@mail.ru
-L:     linux-input@vger.kernel.org
-T:     git kernel.org:/pub/scm/linux/kernel/git/dtor/input.git
-S:     Maintained
-
 INOTIFY
 P:     John McCutchan
 M:     ttb@tentacle.dhs.org
@@ -2149,6 +2140,14 @@ M:       rml@novell.com
 L:     linux-kernel@vger.kernel.org
 S:     Maintained
 
+INPUT (KEYBOARD, MOUSE, JOYSTICK, TOUCHSCREEN) DRIVERS
+P:     Dmitry Torokhov
+M:     dmitry.torokhov@gmail.com
+M:     dtor@mail.ru
+L:     linux-input@vger.kernel.org
+T:     git kernel.org:/pub/scm/linux/kernel/git/dtor/input.git
+S:     Maintained
+
 INTEL FRAMEBUFFER DRIVER (excluding 810 and 815)
 P:     Sylvain Meyer
 M:     sylvain.meyer@worldonline.fr
@@ -2253,7 +2252,7 @@ M:        pfg@sgi.com
 L:     linux-mips@linux-mips.org
 S:     Maintained
 
-IP MASQUERADING:
+IP MASQUERADING
 P:     Juanjo Ciarlante
 M:     jjciarla@raiz.uncu.edu.ar
 S:     Maintained
@@ -2268,7 +2267,7 @@ M:        jesse@icplus.com.tw
 L:     netdev@vger.kernel.org
 S:     Maintained
 
-IPATH DRIVER:
+IPATH DRIVER
 P:     Ralph Campbell
 M:     infinipath@qlogic.com
 L:     general@lists.openfabrics.org
@@ -2282,13 +2281,25 @@ L:      openipmi-developer@lists.sourceforge.net
 W:     http://openipmi.sourceforge.net/
 S:     Supported
 
-IPX NETWORK LAYER
-P:     Arnaldo Carvalho de Melo
-M:     acme@ghostprotocols.net
+IPS SCSI RAID DRIVER
+P:     Adaptec OEM Raid Solutions
+M:     aacraid@adaptec.com
+L:     linux-scsi@vger.kernel.org
+W:     http://www.adaptec.com/
+S:     Maintained
+
+IPVS
+P:     Wensong Zhang
+M:     wensong@linux-vs.org
+P:     Simon Horman
+M:     horms@verge.net.au
+P:     Julian Anastasov
+M:     ja@ssi.bg
 L:     netdev@vger.kernel.org
+L:     lvs-devel@vger.kernel.org
 S:     Maintained
 
-IPWIRELES DRIVER
+IPWIRELESS DRIVER
 P:     Jiri Kosina
 M:     jkosina@suse.cz
 P:     David Sterba
@@ -2296,6 +2307,12 @@ M:       dsterba@suse.cz
 S:     Maintained
 T:     git://git.kernel.org/pub/scm/linux/kernel/git/jikos/ipwireless_cs.git
 
+IPX NETWORK LAYER
+P:     Arnaldo Carvalho de Melo
+M:     acme@ghostprotocols.net
+L:     netdev@vger.kernel.org
+S:     Maintained
+
 IRDA SUBSYSTEM
 P:     Samuel Ortiz
 M:     samuel@sortiz.org
@@ -2303,6 +2320,11 @@ L:       irda-users@lists.sourceforge.net (subscribers-only)
 W:     http://irda.sourceforge.net/
 S:     Maintained
 
+ISAPNP
+P:     Jaroslav Kysela
+M:     perex@perex.cz
+S:     Maintained
+
 ISCSI
 P:     Mike Christie
 M:     michaelc@cs.wisc.edu
@@ -2311,11 +2333,6 @@ W:       www.open-iscsi.org
 T:     git kernel.org:/pub/scm/linux/kernel/mnc/linux-2.6-iscsi.git
 S:     Maintained
 
-ISAPNP
-P:     Jaroslav Kysela
-M:     perex@perex.cz
-S:     Maintained
-
 ISDN SUBSYSTEM
 P:     Karsten Keil
 M:     kkeil@suse.de
@@ -2340,6 +2357,14 @@ L:       video4linux-list@redhat.com
 W:     http://www.ivtvdriver.org
 S:     Maintained
 
+JFS FILESYSTEM
+P:     Dave Kleikamp
+M:     shaggy@austin.ibm.com
+L:     jfs-discussion@lists.sourceforge.net
+W:     http://jfs.sourceforge.net/
+T:     git kernel.org:/pub/scm/linux/kernel/git/shaggy/jfs-2.6.git
+S:     Supported
+
 JME NETWORK DRIVER
 P:     Guo-Fu Tseng
 M:     cooldavid@cooldavid.org
@@ -2353,24 +2378,6 @@ L:       linux-mtd@lists.infradead.org
 W:     http://www.linux-mtd.infradead.org/doc/jffs2.html
 S:     Maintained
 
-UBI FILE SYSTEM (UBIFS)
-P:     Artem Bityutskiy
-M:     dedekind@infradead.org
-P:     Adrian Hunter
-M:     ext-adrian.hunter@nokia.com
-L:     linux-mtd@lists.infradead.org
-T:     git git://git.infradead.org/~dedekind/ubifs-2.6.git
-W:     http://www.linux-mtd.infradead.org/doc/ubifs.html
-S:     Maintained
-
-JFS FILESYSTEM
-P:     Dave Kleikamp
-M:     shaggy@austin.ibm.com
-L:     jfs-discussion@lists.sourceforge.net
-W:     http://jfs.sourceforge.net/
-T:     git kernel.org:/pub/scm/linux/kernel/git/shaggy/jfs-2.6.git
-S:     Supported
-
 JOURNALLING LAYER FOR BLOCK DEVICES (JBD)
 P:     Stephen Tweedie, Andrew Morton
 M:     sct@redhat.com, akpm@linux-foundation.org
@@ -2607,11 +2614,6 @@ W:       http://www.pasemi.com/
 L:     linuxppc-dev@ozlabs.org
 S:     Supported
 
-LLC (802.2)
-P:     Arnaldo Carvalho de Melo
-M:     acme@ghostprotocols.net
-S:     Maintained
-
 LINUX SECURITY MODULE (LSM) FRAMEWORK
 P:     Chris Wright
 M:     chrisw@sous-sol.org
@@ -2619,6 +2621,11 @@ L:       linux-security-module@vger.kernel.org
 T:     git kernel.org:/pub/scm/linux/kernel/git/chrisw/lsm-2.6.git
 S:     Supported
 
+LLC (802.2)
+P:     Arnaldo Carvalho de Melo
+M:     acme@ghostprotocols.net
+S:     Maintained
+
 LM83 HARDWARE MONITOR DRIVER
 P:     Jean Delvare
 M:     khali@linux-fr.org
@@ -2719,14 +2726,6 @@ M:       kaber@trash.net
 L:     netdev@vger.kernel.org
 S:     Maintained
 
-MARVELL YUKON / SYSKONNECT DRIVER
-P:     Mirko Lindner
-M:     mlindner@syskonnect.de
-P:     Ralph Roesler
-M:     rroesler@syskonnect.de
-W:     http://www.syskonnect.com
-S:     Supported
-
 MAN-PAGES: MANUAL PAGES FOR LINUX -- Sections 2, 3, 4, 5, and 7
 P:     Michael Kerrisk
 M:     mtk.manpages@gmail.com
@@ -2746,6 +2745,14 @@ M:       buytenh@marvell.com
 L:     netdev@vger.kernel.org
 S:     Supported
 
+MARVELL YUKON / SYSKONNECT DRIVER
+P:     Mirko Lindner
+M:     mlindner@syskonnect.de
+P:     Ralph Roesler
+M:     rroesler@syskonnect.de
+W:     http://www.syskonnect.com
+S:     Supported
+
 MATROX FRAMEBUFFER DRIVER
 P:     Petr Vandrovec
 M:     vandrove@vc.cvut.cz
@@ -2782,15 +2789,6 @@ L:       linux-mm@kvack.org
 L:     linux-kernel@vger.kernel.org
 S:     Maintained
 
-MEI MN10300/AM33 PORT
-P:     David Howells
-M:     dhowells@redhat.com
-P:     Koichi Yasutake
-M:     yasutake.koichi@jp.panasonic.com
-L:     linux-am33-list@redhat.com (moderated for non-subscribers)
-W:     ftp://ftp.redhat.com/pub/redhat/gnupro/AM33/
-S:     Maintained
-
 MEMORY TECHNOLOGY DEVICES (MTD)
 P:     David Woodhouse
 M:     dwmw2@infradead.org
@@ -2799,14 +2797,6 @@ L:       linux-mtd@lists.infradead.org
 T:     git git://git.infradead.org/mtd-2.6.git
 S:     Maintained
 
-UNSORTED BLOCK IMAGES (UBI)
-P:     Artem Bityutskiy
-M:     dedekind@infradead.org
-W:     http://www.linux-mtd.infradead.org/
-L:     linux-mtd@lists.infradead.org
-T:     git git://git.infradead.org/~dedekind/ubi-2.6.git
-S:     Maintained
-
 MICROTEK X6 SCANNER
 P:     Oliver Neukum
 M:     oliver@neukum.name
@@ -3038,17 +3028,6 @@ L:       netdev@vger.kernel.org
 W:     http://www.netxen.com
 S:     Supported
 
-IPVS
-P:     Wensong Zhang
-M:     wensong@linux-vs.org
-P:     Simon Horman
-M:     horms@verge.net.au
-P:     Julian Anastasov
-M:     ja@ssi.bg
-L:     netdev@vger.kernel.org
-L:     lvs-devel@vger.kernel.org
-S:     Maintained
-
 NFS, SUNRPC, AND LOCKD CLIENTS
 P:     Trond Myklebust
 M:     Trond.Myklebust@netapp.com
@@ -3094,22 +3073,6 @@ M:       adaplas@gmail.com
 L:     linux-fbdev-devel@lists.sourceforge.net (moderated for non-subscribers)
 S:     Maintained
 
-OPENCORES I2C BUS DRIVER
-P:     Peter Korsgaard
-M:     jacmet@sunsite.dk
-L:     i2c@lm-sensors.org
-S:     Maintained
-
-ORACLE CLUSTER FILESYSTEM 2 (OCFS2)
-P:     Mark Fasheh
-M:     mfasheh@suse.com
-P:     Joel Becker
-M:     joel.becker@oracle.com
-L:     ocfs2-devel@oss.oracle.com (moderated for non-subscribers)
-W:     http://oss.oracle.com/projects/ocfs2/
-T:     git git://git.kernel.org/pub/scm/linux/kernel/git/mfasheh/ocfs2.git
-S:     Supported
-
 OMFS FILESYSTEM
 P:     Bob Copeland
 M:     me@bobcopeland.com
@@ -3145,12 +3108,28 @@ L:      osst-users@lists.sourceforge.net
 L:     linux-scsi@vger.kernel.org
 S:     Maintained
 
+OPENCORES I2C BUS DRIVER
+P:     Peter Korsgaard
+M:     jacmet@sunsite.dk
+L:     i2c@lm-sensors.org
+S:     Maintained
+
 OPROFILE
 P:     Robert Richter
 M:     robert.richter@amd.com
 L:     oprofile-list@lists.sf.net
 S:     Maintained
 
+ORACLE CLUSTER FILESYSTEM 2 (OCFS2)
+P:     Mark Fasheh
+M:     mfasheh@suse.com
+P:     Joel Becker
+M:     joel.becker@oracle.com
+L:     ocfs2-devel@oss.oracle.com (moderated for non-subscribers)
+W:     http://oss.oracle.com/projects/ocfs2/
+T:     git git://git.kernel.org/pub/scm/linux/kernel/git/mfasheh/ocfs2.git
+S:     Supported
+
 ORINOCO DRIVER
 P:     Pavel Roskin
 M:     proski@gnu.org
@@ -3162,6 +3141,14 @@ L:       orinoco-devel@lists.sourceforge.net
 W:     http://www.nongnu.org/orinoco/
 S:     Maintained
 
+P54 WIRELESS DRIVER
+P:     Michael Wu
+M:     flamingice@sourmilk.net
+L:     linux-wireless@vger.kernel.org
+W:     http://prism54.org
+T:     git kernel.org:/pub/scm/linux/kernel/git/mwu/mac80211-drivers.git
+S:     Maintained
+
 PA SEMI ETHERNET DRIVER
 P:     Olof Johansson
 M:     olof@lixom.net
@@ -3174,10 +3161,32 @@ M:      olof@lixom.net
 L:     i2c@lm-sensors.org
 S:     Maintained
 
+PANASONIC MN10300/AM33 PORT
+P:     David Howells
+M:     dhowells@redhat.com
+P:     Koichi Yasutake
+M:     yasutake.koichi@jp.panasonic.com
+L:     linux-am33-list@redhat.com (moderated for non-subscribers)
+W:     ftp://ftp.redhat.com/pub/redhat/gnupro/AM33/
+S:     Maintained
+
 PARALLEL PORT SUPPORT
 L:     linux-parport@lists.infradead.org (subscribers-only)
 S:     Orphan
 
+PARAVIRT_OPS INTERFACE
+P:     Jeremy Fitzhardinge
+M:     jeremy@xensource.com
+P:     Chris Wright
+M:     chrisw@sous-sol.org
+P:     Zachary Amsden
+M:     zach@vmware.com
+P:     Rusty Russell
+M:     rusty@rustcorp.com.au
+L:     virtualization@lists.osdl.org
+L:     linux-kernel@vger.kernel.org
+S:     Supported
+
 PARIDE DRIVERS FOR PARALLEL PORT IDE DEVICES
 P:     Tim Waugh
 M:     tim@cyberelk.net
@@ -3197,19 +3206,6 @@ W:       http://www.parisc-linux.org/
 T:     git kernel.org:/pub/scm/linux/kernel/git/kyle/parisc-2.6.git
 S:     Maintained
 
-PARAVIRT_OPS INTERFACE
-P:     Jeremy Fitzhardinge
-M:     jeremy@xensource.com
-P:     Chris Wright
-M:     chrisw@sous-sol.org
-P:     Zachary Amsden
-M:     zach@vmware.com
-P:     Rusty Russell
-M:     rusty@rustcorp.com.au
-L:     virtualization@lists.osdl.org
-L:     linux-kernel@vger.kernel.org
-S:     Supported
-
 PC87360 HARDWARE MONITORING DRIVER
 P:     Jim Cromie
 M:     jim.cromie@gmail.com
@@ -3339,14 +3335,6 @@ L:       kpreempt-tech@lists.sourceforge.net
 W:     ftp://ftp.kernel.org/pub/linux/kernel/people/rml/preempt-kernel
 S:     Supported
 
-P54 WIRELESS DRIVER
-P:     Michael Wu
-M:     flamingice@sourmilk.net
-L:     linux-wireless@vger.kernel.org
-W:     http://prism54.org
-T:     git kernel.org:/pub/scm/linux/kernel/git/mwu/mac80211-drivers.git
-S:     Maintained
-
 PRISM54 WIRELESS DRIVER
 P:     Luis R. Rodriguez
 M:     mcgrof@gmail.com
@@ -3437,13 +3425,7 @@ M:       paulus@samba.org
 L:     linux-fbdev-devel@lists.sourceforge.net (moderated for non-subscribers)
 S:     Maintained
 
-RAYLINK/WEBGEAR 802.11 WIRELESS LAN DRIVER
-P:     Corey Thomas
-M:     coreythomas@charter.net
-L:     linux-wireless@vger.kernel.org
-S:     Maintained
-
-RALINK RT2X00 WLAN DRIVER
+RALINK RT2X00 WIRELESS LAN DRIVER
 P:     rt2x00 project
 L:     linux-wireless@vger.kernel.org
 L:     rt2400-devel@lists.sourceforge.net
@@ -3468,6 +3450,18 @@ M:       mporter@kernel.crashing.org
 L:     linux-kernel@vger.kernel.org
 S:     Maintained
 
+RAYLINK/WEBGEAR 802.11 WIRELESS LAN DRIVER
+P:     Corey Thomas
+M:     coreythomas@charter.net
+L:     linux-wireless@vger.kernel.org
+S:     Maintained
+
+RCUTORTURE MODULE
+P:     Josh Triplett
+M:     josh@freedesktop.org
+L:     linux-kernel@vger.kernel.org
+S:     Maintained
+
 RDC R-321X SoC
 P:     Florian Fainelli
 M:     florian.fainelli@telecomint.eu
@@ -3487,12 +3481,6 @@ W:       http://www.rdrop.com/users/paulmck/rclock/
 L:     linux-kernel@vger.kernel.org
 S:     Supported
 
-RCUTORTURE MODULE
-P:     Josh Triplett
-M:     josh@freedesktop.org
-L:     linux-kernel@vger.kernel.org
-S:     Maintained
-
 REAL TIME CLOCK DRIVER
 P:     Paul Gortmaker
 M:     p_gortmaker@yahoo.com
@@ -3516,6 +3504,9 @@ L:        netdev@vger.kernel.org
 S:     Maintained
 F:     net/rfkill
 
+RISCOM8 DRIVER
+S:     Orphan
+
 ROCKETPORT DRIVER
 P:     Comtrol Corp.
 W:     http://www.comtrol.com
@@ -3528,9 +3519,6 @@ L:        linux-hams@vger.kernel.org
 W:     http://www.linux-ax25.org/
 S:     Maintained
 
-RISCOM8 DRIVER
-S:     Orphan
-
 RTL818X WIRELESS DRIVER
 P:     Michael Wu
 M:     flamingice@sourmilk.net
@@ -3670,6 +3658,12 @@ M:       saschasommer@freenet.de
 L:     sdricohcs-devel@lists.sourceforge.net (subscribers-only)
 S:     Maintained
 
+SECURE DIGITAL HOST CONTROLLER INTERFACE (SDHCI) DRIVER
+P:     Pierre Ossman
+M:     drzeus-sdhci@drzeus.cx
+L:     sdhci-devel@list.drzeus.cx
+S:     Maintained
+
 SECURITY CONTACT
 P:     Security Officers
 M:     security@kernel.org
@@ -3693,19 +3687,13 @@ P:      Jiri Slaby
 M:     jirislaby@gmail.com
 S:     Maintained
 
-SERIAL ATA (SATA) SUBSYSTEM:
+SERIAL ATA (SATA) SUBSYSTEM
 P:     Jeff Garzik
 M:     jgarzik@pobox.com
 L:     linux-ide@vger.kernel.org
 T:     git kernel.org:/pub/scm/linux/kernel/git/jgarzik/libata-dev.git
 S:     Supported
 
-SGI SN-IA64 (Altix) SERIAL CONSOLE DRIVER
-P:     Pat Gefre
-M:     pfg@sgi.com
-L:     linux-ia64@vger.kernel.org
-S:     Supported
-
 SFC NETWORK DRIVER
 P:     Steve Hodgson
 P:     Ben Hutchings
@@ -3713,6 +3701,17 @@ P:       Robert Stonehouse
 M:     linux-net-drivers@solarflare.com
 S:     Supported
 
+SGI GRU DRIVER
+P:     Jack Steiner
+M:     steiner@sgi.com
+S:     Maintained
+
+SGI SN-IA64 (Altix) SERIAL CONSOLE DRIVER
+P:     Pat Gefre
+M:     pfg@sgi.com
+L:     linux-ia64@vger.kernel.org
+S:     Supported
+
 SGI VISUAL WORKSTATION 320 AND 540
 P:     Andrey Panin
 M:     pazke@donpac.ru
@@ -3720,16 +3719,24 @@ L:      linux-visws-devel@lists.sf.net
 W:     http://linux-visws.sf.net
 S:     Maintained for 2.6.
 
-SGI GRU DRIVER
-P:     Jack Steiner
-M:     steiner@sgi.com
-S:     Maintained
-
 SGI XP/XPC/XPNET DRIVER
 P:     Dean Nelson
 M:     dcn@sgi.com
 S:     Maintained
 
+SHARP LH SUPPORT (LH7952X & LH7A40X)
+P:     Marc Singer
+M:     elf@buici.com
+W:     http://projects.buici.com/arm
+L:     linux-arm-kernel@lists.arm.linux.org.uk (subscribers-only)
+S:     Maintained
+
+SHPC HOTPLUG DRIVER
+P:     Kristen Carlson Accardi
+M:     kristen.c.accardi@intel.com
+L:     linux-pci@vger.kernel.org
+S:     Supported
+
 SIMTEC EB110ATX (Chalice CATS)
 P:     Ben Dooks
 P:     Vincent Sanders
@@ -3775,6 +3782,12 @@ M:       thomas@winischhofer.net
 W:     http://www.winischhofer.at/linuxsisusbvga.shtml
 S:     Maintained
 
+SKGE, SKY2 10/100/1000 GIGABIT ETHERNET DRIVERS
+P:     Stephen Hemminger
+M:     shemminger@linux-foundation.org
+L:     netdev@vger.kernel.org
+S:     Maintained
+
 SLAB ALLOCATOR
 P:     Christoph Lameter
 M:     cl@linux-foundation.org
@@ -3801,12 +3814,25 @@ P:      Ben Nizette
 M:     bn@niasdigital.com
 S:     Maintained
 
+SN-IA64 (Itanium) SUB-PLATFORM
+P:     Jes Sorensen
+M:     jes@sgi.com
+L:     linux-altix@sgi.com
+L:     linux-ia64@vger.kernel.org
+W:     http://www.sgi.com/altix
+S:     Maintained
+
 SOC-CAMERA V4L2 SUBSYSTEM
 P:     Guennadi Liakhovetski
 M:     g.liakhovetski@gmx.de
 L:     video4linux-list@redhat.com
 S:     Maintained
 
+SOEKRIS NET48XX LED SUPPORT
+P:     Chris Boot
+M:     bootc@bootc.net
+S:     Maintained
+
 SOFTWARE RAID (Multiple Disks) SUPPORT
 P:     Ingo Molnar
 M:     mingo@redhat.com
@@ -3815,24 +3841,6 @@ M:       neilb@suse.de
 L:     linux-raid@vger.kernel.org
 S:     Supported
 
-HIBERNATION (aka Software Suspend, aka swsusp):
-P:     Pavel Machek
-M:     pavel@suse.cz
-P:     Rafael J. Wysocki
-M:     rjw@sisk.pl
-L:     linux-pm@lists.linux-foundation.org
-S:     Supported
-
-SUSPEND TO RAM:
-P:     Len Brown
-M:     len.brown@intel.com
-P:     Pavel Machek
-M:     pavel@suse.cz
-P:     Rafael J. Wysocki
-M:     rjw@sisk.pl
-L:     linux-pm@lists.linux-foundation.org
-S:     Supported
-
 SONIC NETWORK DRIVER
 P:     Thomas Bogendoerfer
 M:     tsbogend@alpha.franken.de
@@ -3877,59 +3885,7 @@ L:       alsa-devel@alsa-project.org (subscribers-only)
 W:     http://alsa-project.org/main/index.php/ASoC
 S:     Supported
 
-SPI SUBSYSTEM
-P:     David Brownell
-M:     dbrownell@users.sourceforge.net
-L:     spi-devel-general@lists.sourceforge.net
-S:     Maintained
-
-SPU FILE SYSTEM
-P:     Jeremy Kerr
-M:     jk@ozlabs.org
-L:     linuxppc-dev@ozlabs.org
-L:     cbe-oss-dev@ozlabs.org
-W:     http://www.ibm.com/developerworks/power/cell/
-S:     Supported
-
-STABLE BRANCH:
-P:     Greg Kroah-Hartman
-M:     greg@kroah.com
-P:     Chris Wright
-M:     chrisw@sous-sol.org
-L:     stable@kernel.org
-S:     Maintained
-
-SHARP LH SUPPORT (LH7952X & LH7A40X)
-P:     Marc Singer
-M:     elf@buici.com
-W:     http://projects.buici.com/arm
-L:     linux-arm-kernel@lists.arm.linux.org.uk (subscribers-only)
-S:     Maintained
-
-SHPC HOTPLUG DRIVER
-P:     Kristen Carlson Accardi
-M:     kristen.c.accardi@intel.com
-L:     linux-pci@vger.kernel.org
-S:     Supported
-
-SECURE DIGITAL HOST CONTROLLER INTERFACE DRIVER
-P:     Pierre Ossman
-M:     drzeus-sdhci@drzeus.cx
-L:     sdhci-devel@list.drzeus.cx
-S:     Maintained
-
-SKGE, SKY2 10/100/1000 GIGABIT ETHERNET DRIVERS
-P:     Stephen Hemminger
-M:     shemminger@linux-foundation.org
-L:     netdev@vger.kernel.org
-S:     Maintained
-
-SOEKRIS NET48XX LED SUPPORT
-P:     Chris Boot
-M:     bootc@bootc.net
-S:     Maintained
-
-SPARC (sparc32):
+SPARC (sparc32)
 P:     William L. Irwin
 M:     wli@holomorphy.com
 L:     sparclinux@vger.kernel.org
@@ -3941,6 +3897,12 @@ M:       R.E.Wolff@BitWizard.nl
 L:     linux-kernel@vger.kernel.org ?
 S:     Supported
 
+SPI SUBSYSTEM
+P:     David Brownell
+M:     dbrownell@users.sourceforge.net
+L:     spi-devel-general@lists.sourceforge.net
+S:     Maintained
+
 SPIDERNET NETWORK DRIVER for CELL
 P:     Ishizaki Kou
 M:     kou.ishizaki@toshiba.co.jp
@@ -3949,12 +3911,28 @@ M:      jens@de.ibm.com
 L:     netdev@vger.kernel.org
 S:     Supported
 
+SPU FILE SYSTEM
+P:     Jeremy Kerr
+M:     jk@ozlabs.org
+L:     linuxppc-dev@ozlabs.org
+L:     cbe-oss-dev@ozlabs.org
+W:     http://www.ibm.com/developerworks/power/cell/
+S:     Supported
+
 SRM (Alpha) environment access
 P:     Jan-Benedict Glaw
 M:     jbglaw@lug-owl.de
 L:     linux-kernel@vger.kernel.org
 S:     Maintained
 
+STABLE BRANCH:
+P:     Greg Kroah-Hartman
+M:     greg@kroah.com
+P:     Chris Wright
+M:     chrisw@sous-sol.org
+L:     stable@kernel.org
+S:     Maintained
+
 STARFIRE/DURALAN NETWORK DRIVER
 P:     Ion Badulescu
 M:     ionut@cs.columbia.edu
@@ -3970,6 +3948,12 @@ M:       laredo@gnu.org
 W:     http://www.stradis.com/
 S:     Maintained
 
+SUN3/3X
+P:     Sam Creasey
+M:     sammy@sammy.net
+W:     http://sammy.net/sun3/
+S:     Maintained
+
 SUPERH
 P:     Paul Mundt
 M:     lethal@linux-sh.org
@@ -3978,11 +3962,15 @@ W:      http://www.linux-sh.org
 T:     git kernel.org:/pub/scm/linux/kernel/git/lethal/sh-2.6.git
 S:     Supported
 
-SUN3/3X
-P:     Sam Creasey
-M:     sammy@sammy.net
-W:     http://sammy.net/sun3/
-S:     Maintained
+SUSPEND TO RAM
+P:     Len Brown
+M:     len.brown@intel.com
+P:     Pavel Machek
+M:     pavel@suse.cz
+P:     Rafael J. Wysocki
+M:     rjw@sisk.pl
+L:     linux-pm@lists.linux-foundation.org
+S:     Supported
 
 SVGA HANDLING
 P:     Martin Mares
@@ -4028,7 +4016,7 @@ P:        Mark Gross
 M:     mark.gross@intel.com
 S:     Supported
 
-TENSILICA XTENSA PORT (xtensa):
+TENSILICA XTENSA PORT (xtensa)
 P:     Chris Zankel
 M:     chris@zankel.net
 S:     Maintained
@@ -4142,6 +4130,16 @@ M:       ballabio_dario@emc.com
 L:     linux-scsi@vger.kernel.org
 S:     Maintained
 
+UBI FILE SYSTEM (UBIFS)
+P:     Artem Bityutskiy
+M:     dedekind@infradead.org
+P:     Adrian Hunter
+M:     ext-adrian.hunter@nokia.com
+L:     linux-mtd@lists.infradead.org
+T:     git git://git.infradead.org/~dedekind/ubifs-2.6.git
+W:     http://www.linux-mtd.infradead.org/doc/ubifs.html
+S:     Maintained
+
 UCLINUX (AND M68KNOMMU)
 P:     Greg Ungerer
 M:     gerg@uclinux.org
@@ -4167,7 +4165,7 @@ M:        dushistov@mail.ru
 L:     linux-kernel@vger.kernel.org
 S:     Maintained
 
-UltraSPARC (sparc64):
+UltraSPARC (sparc64)
 P:     David S. Miller
 M:     davem@davemloft.net
 L:     sparclinux@vger.kernel.org
@@ -4181,6 +4179,14 @@ L:       linux-kernel@vger.kernel.org
 W:     http://www.kernel.dk
 S:     Maintained
 
+UNSORTED BLOCK IMAGES (UBI)
+P:     Artem Bityutskiy
+M:     dedekind@infradead.org
+W:     http://www.linux-mtd.infradead.org/
+L:     linux-mtd@lists.infradead.org
+T:     git git://git.infradead.org/~dedekind/ubi-2.6.git
+S:     Maintained
+
 USB ACM DRIVER
 P:     Oliver Neukum
 M:     oliver@neukum.name
@@ -4450,7 +4456,7 @@ L:        video4linux-list@redhat.com
 W:     http://royale.zerezo.com/zr364xx/
 S:     Maintained
 
-USER-MODE LINUX
+USER-MODE LINUX (UML)
 P:     Jeff Dike
 M:     jdike@addtoit.com
 L:     user-mode-linux-devel@lists.sourceforge.net
@@ -4474,7 +4480,7 @@ W:        http://kernel.org/~kzak/util-linux-ng/
 T:     git://git.kernel.org/pub/scm/utils/util-linux-ng/util-linux-ng.git
 S:     Maintained
 
-VFAT/FAT/MSDOS FILESYSTEM:
+VFAT/FAT/MSDOS FILESYSTEM
 P:     OGAWA Hirofumi
 M:     hirofumi@mail.parknet.co.jp
 L:     linux-kernel@vger.kernel.org
@@ -4497,7 +4503,7 @@ M:        romieu@fr.zoreil.com
 L:     netdev@vger.kernel.org
 S:     Maintained
 
-VIDEO FOR LINUX
+VIDEO FOR LINUX (V4L)
 P:     Mauro Carvalho Chehab
 M:     mchehab@infradead.org
 M:     v4l-dvb-maintainer@linuxtv.org
@@ -4603,6 +4609,17 @@ M:       eis@baty.hanse.de
 L:     linux-x25@vger.kernel.org
 S:     Maintained
 
+X86 ARCHITECTURE (32-BIT AND 64-BIT)
+P:     Thomas Gleixner
+M:     tglx@linutronix.de
+P:     Ingo Molnar
+M:     mingo@redhat.com
+P:     H. Peter Anvin
+M:     hpa@zytor.com
+L:     linux-kernel@vger.kernel.org
+T:     git://git.kernel.org/pub/scm/linux/kernel/git/x86/linux-2.6-x86.git
+S:     Maintained
+
 XEN HYPERVISOR INTERFACE
 P:     Jeremy Fitzhardinge
 M:     jeremy@xensource.com
@@ -4634,17 +4651,6 @@ M:       jacmet@sunsite.dk
 L:     linux-serial@vger.kernel.org
 S:     Maintained
 
-X86 ARCHITECTURE (32-BIT AND 64-BIT)
-P:     Thomas Gleixner
-M:     tglx@linutronix.de
-P:     Ingo Molnar
-M:     mingo@redhat.com
-P:     H. Peter Anvin
-M:     hpa@zytor.com
-L:     linux-kernel@vger.kernel.org
-T:     git://git.kernel.org/pub/scm/linux/kernel/git/x86/linux-2.6-x86.git
-S:     Maintained
-
 YAM DRIVER FOR AX.25
 P:     Jean-Paul Roubelat
 M:     jpr@f6fbb.org
index 364c6da..0267bab 100644 (file)
@@ -13,6 +13,20 @@ config OPROFILE
 
          If unsure, say N.
 
+config OPROFILE_IBS
+       bool "OProfile AMD IBS support (EXPERIMENTAL)"
+       default n
+       depends on OPROFILE && SMP && X86
+       help
+          Instruction-Based Sampling (IBS) is a new profiling
+          technique that provides rich, precise program performance
+          information. IBS is introduced by AMD Family10h processors
+          (AMD Opteron Quad-Core processor “Barcelona”) to overcome
+          the limitations of conventional performance counter
+          sampling.
+
+         If unsure, say N.
+
 config HAVE_OPROFILE
        def_bool n
 
index 1bec55d..ee35226 100644 (file)
@@ -5,6 +5,7 @@
 config ALPHA
        bool
        default y
+       select HAVE_AOUT
        select HAVE_IDE
        select HAVE_OPROFILE
        help
@@ -68,9 +69,6 @@ config AUTO_IRQ_AFFINITY
        depends on SMP
        default y
 
-config ARCH_SUPPORTS_AOUT
-       def_bool y
-
 source "init/Kconfig"
 
 
index ad15830..de35cd4 100644 (file)
@@ -1,6 +1,10 @@
 #ifndef _ALPHA_STATFS_H
 #define _ALPHA_STATFS_H
 
+/* Alpha is the only 64-bit platform with 32-bit statfs. And doesn't
+   even seem to implement statfs64 */
+#define __statfs_word __u32
+
 #include <asm-generic/statfs.h>
 
 #endif
index efeed65..4853f9d 100644 (file)
@@ -8,6 +8,7 @@ mainmenu "Linux Kernel Configuration"
 config ARM
        bool
        default y
+       select HAVE_AOUT
        select HAVE_IDE
        select RTC_LIB
        select SYS_SUPPORTS_APM_EMULATION
@@ -140,9 +141,6 @@ config GENERIC_CALIBRATE_DELAY
        bool
        default y
 
-config ARCH_SUPPORTS_AOUT
-       def_bool y
-
 config ARCH_MAY_HAVE_PC_FDC
        bool
 
index a02e6a8..079447c 100644 (file)
@@ -1,42 +1,12 @@
 #ifndef _ASMARM_STATFS_H
 #define _ASMARM_STATFS_H
 
-#ifndef __KERNEL_STRICT_NAMES
-# include <linux/types.h>
-typedef __kernel_fsid_t        fsid_t;
-#endif
-
-struct statfs {
-       __u32 f_type;
-       __u32 f_bsize;
-       __u32 f_blocks;
-       __u32 f_bfree;
-       __u32 f_bavail;
-       __u32 f_files;
-       __u32 f_ffree;
-       __kernel_fsid_t f_fsid;
-       __u32 f_namelen;
-       __u32 f_frsize;
-       __u32 f_spare[5];
-};
-
 /*
  * With EABI there is 4 bytes of padding added to this structure.
  * Let's pack it so the padding goes away to simplify dual ABI support.
  * Note that user space does NOT have to pack this structure.
  */
-struct statfs64 {
-       __u32 f_type;
-       __u32 f_bsize;
-       __u64 f_blocks;
-       __u64 f_bfree;
-       __u64 f_bavail;
-       __u64 f_files;
-       __u64 f_ffree;
-       __kernel_fsid_t f_fsid;
-       __u32 f_namelen;
-       __u32 f_frsize;
-       __u32 f_spare[5];
-} __attribute__ ((packed,aligned(4)));
+#define ARCH_PACK_STATFS64 __attribute__((packed,aligned(4)))
 
+#include <asm-generic/statfs.h>
 #endif
index ba99a20..d006085 100644 (file)
@@ -26,23 +26,6 @@ EXPORT_SYMBOL(dma_spin_lock);
 static dma_t dma_chan[MAX_DMA_CHANNELS];
 
 /*
- * Get dma list for /proc/dma
- */
-int get_dma_list(char *buf)
-{
-       dma_t *dma;
-       char *p = buf;
-       int i;
-
-       for (i = 0, dma = dma_chan; i < MAX_DMA_CHANNELS; i++, dma++)
-               if (dma->lock)
-                       p += sprintf(p, "%2d: %14s %s\n", i,
-                                    dma->d_ops->type, dma->device_id);
-
-       return p - buf;
-}
-
-/*
  * Request DMA channel
  *
  * On certain platforms, we have to allocate an interrupt as well...
index e67c843..9f5ce1c 100644 (file)
 #define CPU_CONF               ORION5X_BRIDGE_REG(0x100)
 #define CPU_CTRL               ORION5X_BRIDGE_REG(0x104)
 #define CPU_RESET_MASK         ORION5X_BRIDGE_REG(0x108)
+#define  WDT_RESET             0x0002
 #define CPU_SOFT_RESET         ORION5X_BRIDGE_REG(0x10c)
 #define POWER_MNG_CTRL_REG     ORION5X_BRIDGE_REG(0x11C)
 #define BRIDGE_CAUSE           ORION5X_BRIDGE_REG(0x110)
+#define  WDT_INT_REQ           0x0008
 #define BRIDGE_MASK            ORION5X_BRIDGE_REG(0x114)
 #define  BRIDGE_INT_TIMER0     0x0002
 #define  BRIDGE_INT_TIMER1     0x0004
index a716ecd..97187fa 100644 (file)
@@ -441,16 +441,8 @@ static inline void omap_init_uwire(void) {}
 
 #if    defined(CONFIG_OMAP_WATCHDOG) || defined(CONFIG_OMAP_WATCHDOG_MODULE)
 
-#ifdef CONFIG_ARCH_OMAP24XX
-#define        OMAP_WDT_BASE           0x48022000
-#else
-#define        OMAP_WDT_BASE           0xfffeb000
-#endif
-
 static struct resource wdt_resources[] = {
        {
-               .start          = OMAP_WDT_BASE,
-               .end            = OMAP_WDT_BASE + 0x4f,
                .flags          = IORESOURCE_MEM,
        },
 };
@@ -464,6 +456,19 @@ static struct platform_device omap_wdt_device = {
 
 static void omap_init_wdt(void)
 {
+       if (cpu_is_omap16xx())
+               wdt_resources[0].start = 0xfffeb000;
+       else if (cpu_is_omap2420())
+               wdt_resources[0].start = 0x48022000; /* WDT2 */
+       else if (cpu_is_omap2430())
+               wdt_resources[0].start = 0x49016000; /* WDT2 */
+       else if (cpu_is_omap343x())
+               wdt_resources[0].start = 0x48314000; /* WDT2 */
+       else
+               return;
+
+       wdt_resources[0].end = wdt_resources[0].start + 0x4f;
+
        (void) platform_device_register(&omap_wdt_device);
 }
 #else
index b8286f1..6c54580 100644 (file)
@@ -9,6 +9,7 @@
  */
 #include <linux/clk.h>
 #include <linux/etherdevice.h>
+#include <linux/gpio.h>
 #include <linux/irq.h>
 #include <linux/i2c.h>
 #include <linux/i2c-gpio.h>
@@ -53,8 +54,11 @@ static struct spi_board_info spi0_board_info[] __initdata = {
 };
 
 static struct mci_platform_data __initdata mci0_data = {
-       .detect_pin     = GPIO_PIN_PC(25),
-       .wp_pin         = GPIO_PIN_PE(0),
+       .slot[0] = {
+               .bus_width      = 4,
+               .detect_pin     = GPIO_PIN_PC(25),
+               .wp_pin         = GPIO_PIN_PE(0),
+       },
 };
 
 /*
@@ -190,7 +194,7 @@ static int __init atngw100_init(void)
         * PB28/EXTINT3 doesn't; it should be SMBALERT# (for PMBus),
         * but it's not available off-board.
         */
-       at32_select_periph(GPIO_PIN_PB(28), 0, AT32_GPIOF_PULLUP);
+       at32_select_periph(GPIO_PIOB_BASE, 1 << 28, 0, AT32_GPIOF_PULLUP);
        at32_select_gpio(i2c_gpio_data.sda_pin,
                AT32_GPIOF_MULTIDRV | AT32_GPIOF_OUTPUT | AT32_GPIOF_HIGH);
        at32_select_gpio(i2c_gpio_data.scl_pin,
@@ -204,6 +208,15 @@ postcore_initcall(atngw100_init);
 
 static int __init atngw100_arch_init(void)
 {
+       /* PB30 is the otherwise unused jumper on the mainboard, with an
+        * external pullup; the jumper grounds it.  Use it however you
+        * like, including letting U-Boot or Linux tweak boot sequences.
+        */
+       at32_select_gpio(GPIO_PIN_PB(30), 0);
+       gpio_request(GPIO_PIN_PB(30), "j15");
+       gpio_direction_input(GPIO_PIN_PB(30));
+       gpio_export(GPIO_PIN_PB(30), false);
+
        /* set_irq_type() after the arch_initcall for EIC has run, and
         * before the I2C subsystem could try using this IRQ.
         */
index dfc3443..29e5b51 100644 (file)
@@ -232,7 +232,7 @@ static void __init atstk1002_setup_extdac(void)
                goto err_set_clk;
        }
 
-       at32_select_periph(GPIO_PIN_PA(30), GPIO_PERIPH_A, 0);
+       at32_select_periph(GPIO_PIOA_BASE, (1 << 30), GPIO_PERIPH_A, 0);
        at73c213_data.dac_clk = gclk;
 
 err_set_clk:
@@ -264,16 +264,20 @@ void __init setup_board(void)
 
 #ifndef CONFIG_BOARD_ATSTK100X_SW2_CUSTOM
 
+static struct mci_platform_data __initdata mci0_data = {
+       .slot[0] = {
+               .bus_width      = 4,
+
 /* MMC card detect requires MACB0 *NOT* be used */
 #ifdef CONFIG_BOARD_ATSTK1002_SW6_CUSTOM
-static struct mci_platform_data __initdata mci0_data = {
-       .detect_pin     = GPIO_PIN_PC(14),      /* gpio30/sdcd */
-       .wp_pin         = GPIO_PIN_PC(15),      /* gpio31/sdwp */
-};
-#define MCI_PDATA      &mci0_data
+               .detect_pin     = GPIO_PIN_PC(14), /* gpio30/sdcd */
+               .wp_pin         = GPIO_PIN_PC(15), /* gpio31/sdwp */
 #else
-#define MCI_PDATA      NULL
+               .detect_pin     = -ENODEV,
+               .wp_pin         = -ENODEV,
 #endif /* SW6 for sd{cd,wp} routing */
+       },
+};
 
 #endif /* SW2 for MMC signal routing */
 
@@ -326,13 +330,14 @@ static int __init atstk1002_init(void)
        at32_add_device_spi(1, spi1_board_info, ARRAY_SIZE(spi1_board_info));
 #endif
 #ifndef CONFIG_BOARD_ATSTK100X_SW2_CUSTOM
-       at32_add_device_mci(0, MCI_PDATA);
+       at32_add_device_mci(0, &mci0_data);
 #endif
 #ifdef CONFIG_BOARD_ATSTK1002_SW5_CUSTOM
        set_hw_addr(at32_add_device_eth(1, &eth_data[1]));
 #else
        at32_add_device_lcdc(0, &atstk1000_lcdc_data,
-                            fbmem_start, fbmem_size, 0);
+                            fbmem_start, fbmem_size,
+                            ATMEL_LCDC_PRI_24BIT | ATMEL_LCDC_PRI_CONTROL);
 #endif
        at32_add_device_usba(0, NULL);
 #ifndef CONFIG_BOARD_ATSTK100X_SW3_CUSTOM
index 0cf6641..be089d7 100644 (file)
@@ -19,6 +19,7 @@
 #include <linux/spi/spi.h>
 
 #include <asm/setup.h>
+#include <asm/atmel-mci.h>
 
 #include <mach/at32ap700x.h>
 #include <mach/board.h>
@@ -66,6 +67,16 @@ static struct spi_board_info spi1_board_info[] __initdata = { {
 } };
 #endif
 
+#ifndef CONFIG_BOARD_ATSTK100X_SW2_CUSTOM
+static struct mci_platform_data __initdata mci0_data = {
+       .slot[0] = {
+               .bus_width      = 4,
+               .detect_pin     = -ENODEV,
+               .wp_pin         = -ENODEV,
+       },
+};
+#endif
+
 #ifdef CONFIG_BOARD_ATSTK1000_EXTDAC
 static void __init atstk1003_setup_extdac(void)
 {
@@ -84,7 +95,7 @@ static void __init atstk1003_setup_extdac(void)
                goto err_set_clk;
        }
 
-       at32_select_periph(GPIO_PIN_PA(30), GPIO_PERIPH_A, 0);
+       at32_select_periph(GPIO_PIOA_BASE, (1 << 30), GPIO_PERIPH_A, 0);
        at73c213_data.dac_clk = gclk;
 
 err_set_clk:
@@ -154,7 +165,7 @@ static int __init atstk1003_init(void)
        at32_add_device_spi(1, spi1_board_info, ARRAY_SIZE(spi1_board_info));
 #endif
 #ifndef CONFIG_BOARD_ATSTK100X_SW2_CUSTOM
-       at32_add_device_mci(0, NULL);
+       at32_add_device_mci(0, &mci0_data);
 #endif
        at32_add_device_usba(0, NULL);
 #ifndef CONFIG_BOARD_ATSTK100X_SW3_CUSTOM
index 50a5273..248ef23 100644 (file)
@@ -21,6 +21,7 @@
 #include <video/atmel_lcdc.h>
 
 #include <asm/setup.h>
+#include <asm/atmel-mci.h>
 
 #include <mach/at32ap700x.h>
 #include <mach/board.h>
@@ -71,6 +72,16 @@ static struct spi_board_info spi1_board_info[] __initdata = { {
 } };
 #endif
 
+#ifndef CONFIG_BOARD_ATSTK100X_SW2_CUSTOM
+static struct mci_platform_data __initdata mci0_data = {
+       .slot[0] = {
+               .bus_width      = 4,
+               .detect_pin     = -ENODEV,
+               .wp_pin         = -ENODEV,
+       },
+};
+#endif
+
 #ifdef CONFIG_BOARD_ATSTK1000_EXTDAC
 static void __init atstk1004_setup_extdac(void)
 {
@@ -89,7 +100,7 @@ static void __init atstk1004_setup_extdac(void)
                goto err_set_clk;
        }
 
-       at32_select_periph(GPIO_PIN_PA(30), GPIO_PERIPH_A, 0);
+       at32_select_periph(GPIO_PIOA_BASE, (1 << 30), GPIO_PERIPH_A, 0);
        at73c213_data.dac_clk = gclk;
 
 err_set_clk:
@@ -137,10 +148,11 @@ static int __init atstk1004_init(void)
        at32_add_device_spi(1, spi1_board_info, ARRAY_SIZE(spi1_board_info));
 #endif
 #ifndef CONFIG_BOARD_ATSTK100X_SW2_CUSTOM
-       at32_add_device_mci(0, NULL);
+       at32_add_device_mci(0, &mci0_data);
 #endif
        at32_add_device_lcdc(0, &atstk1000_lcdc_data,
-                            fbmem_start, fbmem_size, 0);
+                            fbmem_start, fbmem_size,
+                            ATMEL_LCDC_PRI_24BIT | ATMEL_LCDC_PRI_CONTROL);
        at32_add_device_usba(0, NULL);
 #ifndef CONFIG_BOARD_ATSTK100X_SW3_CUSTOM
        at32_add_device_ssc(0, ATMEL_SSC_TX);
diff --git a/arch/avr32/include/asm/a.out.h b/arch/avr32/include/asm/a.out.h
deleted file mode 100644 (file)
index e46375a..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-#ifndef __ASM_AVR32_A_OUT_H
-#define __ASM_AVR32_A_OUT_H
-
-struct exec
-{
-  unsigned long a_info;                /* Use macros N_MAGIC, etc for access */
-  unsigned a_text;             /* length of text, in bytes */
-  unsigned a_data;             /* length of data, in bytes */
-  unsigned a_bss;              /* length of uninitialized data area for file, in bytes */
-  unsigned a_syms;             /* length of symbol table data in file, in bytes */
-  unsigned a_entry;            /* start address */
-  unsigned a_trsize;           /* length of relocation info for text, in bytes */
-  unsigned a_drsize;           /* length of relocation info for data, in bytes */
-};
-
-#define N_TRSIZE(a)    ((a).a_trsize)
-#define N_DRSIZE(a)    ((a).a_drsize)
-#define N_SYMSIZE(a)   ((a).a_syms)
-
-#endif /* __ASM_AVR32_A_OUT_H */
index c2ea6e1..59f3fad 100644 (file)
@@ -1,9 +1,39 @@
 #ifndef __ASM_AVR32_ATMEL_MCI_H
 #define __ASM_AVR32_ATMEL_MCI_H
 
-struct mci_platform_data {
+#define ATMEL_MCI_MAX_NR_SLOTS 2
+
+struct dma_slave;
+
+/**
+ * struct mci_slot_pdata - board-specific per-slot configuration
+ * @bus_width: Number of data lines wired up the slot
+ * @detect_pin: GPIO pin wired to the card detect switch
+ * @wp_pin: GPIO pin wired to the write protect sensor
+ *
+ * If a given slot is not present on the board, @bus_width should be
+ * set to 0. The other fields are ignored in this case.
+ *
+ * Any pins that aren't available should be set to a negative value.
+ *
+ * Note that support for multiple slots is experimental -- some cards
+ * might get upset if we don't get the clock management exactly right.
+ * But in most cases, it should work just fine.
+ */
+struct mci_slot_pdata {
+       unsigned int            bus_width;
        int                     detect_pin;
        int                     wp_pin;
 };
 
+/**
+ * struct mci_platform_data - board-specific MMC/SDcard configuration
+ * @dma_slave: DMA slave interface to use in data transfers, or NULL.
+ * @slot: Per-slot configuration data.
+ */
+struct mci_platform_data {
+       struct dma_slave        *dma_slave;
+       struct mci_slot_pdata   slot[ATMEL_MCI_MAX_NR_SLOTS];
+};
+
 #endif /* __ASM_AVR32_ATMEL_MCI_H */
index d77b48b..8e3af02 100644 (file)
@@ -7,6 +7,9 @@
 #include <asm/types.h>
 #include <linux/compiler.h>
 
+#define __BIG_ENDIAN
+#define __SWAB_64_THRU_32__
+
 #ifdef __CHECKER__
 extern unsigned long __builtin_bswap_32(unsigned long x);
 extern unsigned short __builtin_bswap_16(unsigned short x);
@@ -17,15 +20,18 @@ extern unsigned short __builtin_bswap_16(unsigned short x);
  * the result.
  */
 #if !(__GNUC__ == 4 && __GNUC_MINOR__ < 2)
-#define __arch__swab32(x) __builtin_bswap_32(x)
-#define __arch__swab16(x) __builtin_bswap_16(x)
-#endif
+static inline __attribute_const__ __u16 __arch_swab16(__u16 val)
+{
+       return __builtin_bswap_16(val);
+}
+#define __arch_swab16 __arch_swab16
 
-#if !defined(__STRICT_ANSI__) || defined(__KERNEL__)
-# define __BYTEORDER_HAS_U64__
-# define __SWAB_64_THRU_32__
+static inline __attribute_const__ __u32 __arch_swab32(__u32 val)
+{
+       return __builtin_bswap_32(val);
+}
+#define __arch_swab32 __arch_swab32
 #endif
 
-#include <linux/byteorder/big_endian.h>
-
+#include <linux/byteorder.h>
 #endif /* __ASM_AVR32_BYTEORDER_H */
index a520f77..22c97ef 100644 (file)
@@ -160,6 +160,14 @@ BUILDIO_IOPORT(l, u32)
 #define readw_relaxed                  readw
 #define readl_relaxed                  readl
 
+#define readb_be                       __raw_readb
+#define readw_be                       __raw_readw
+#define readl_be                       __raw_readl
+
+#define writeb_be                      __raw_writeb
+#define writew_be                      __raw_writew
+#define writel_be                      __raw_writel
+
 #define __BUILD_MEMORY_STRING(bwl, type)                               \
 static inline void writes##bwl(volatile void __iomem *addr,            \
                               const void *data, unsigned int count)    \
index 2c08ac9..134d530 100644 (file)
@@ -9,6 +9,7 @@
 #include <linux/module.h>
 #include <linux/kallsyms.h>
 #include <linux/fs.h>
+#include <linux/pm.h>
 #include <linux/ptrace.h>
 #include <linux/reboot.h>
 #include <linux/tick.h>
@@ -20,7 +21,7 @@
 
 #include <mach/pm.h>
 
-void (*pm_power_off)(void) = NULL;
+void (*pm_power_off)(void);
 EXPORT_SYMBOL(pm_power_off);
 
 /*
index d8e623c..5c70839 100644 (file)
@@ -283,6 +283,25 @@ static int __init early_parse_fbmem(char *p)
 }
 early_param("fbmem", early_parse_fbmem);
 
+/*
+ * Pick out the memory size.  We look for mem=size@start,
+ * where start and size are "size[KkMmGg]"
+ */
+static int __init early_mem(char *p)
+{
+       resource_size_t size, start;
+
+       start = system_ram->start;
+       size  = memparse(p, &p);
+       if (*p == '@')
+               start = memparse(p + 1, &p);
+
+       system_ram->start = start;
+       system_ram->end = system_ram->start + size - 1;
+       return 0;
+}
+early_param("mem", early_mem);
+
 static int __init parse_tag_core(struct tag *tag)
 {
        if (tag->hdr.size > 2) {
index e01dbe4..813b684 100644 (file)
@@ -82,8 +82,9 @@ static struct platform_device _name##_id##_device = {         \
        .num_resources  = ARRAY_SIZE(_name##_id##_resource),    \
 }
 
-#define select_peripheral(pin, periph, flags)                  \
-       at32_select_periph(GPIO_PIN_##pin, GPIO_##periph, flags)
+#define select_peripheral(port, pin_mask, periph, flags)       \
+       at32_select_periph(GPIO_##port##_BASE, pin_mask,        \
+                          GPIO_##periph, flags)
 
 #define DEV_CLK(_name, devname, bus, _index)                   \
 static struct clk devname##_##_name = {                                \
@@ -871,6 +872,7 @@ static struct clk atmel_psif1_pclk = {
 struct platform_device *__init at32_add_device_psif(unsigned int id)
 {
        struct platform_device *pdev;
+       u32 pin_mask;
 
        if (!(id == 0 || id == 1))
                return NULL;
@@ -881,20 +883,22 @@ struct platform_device *__init at32_add_device_psif(unsigned int id)
 
        switch (id) {
        case 0:
+               pin_mask  = (1 << 8) | (1 << 9); /* CLOCK & DATA */
+
                if (platform_device_add_resources(pdev, atmel_psif0_resource,
                                        ARRAY_SIZE(atmel_psif0_resource)))
                        goto err_add_resources;
                atmel_psif0_pclk.dev = &pdev->dev;
-               select_peripheral(PA(8), PERIPH_A, 0); /* CLOCK */
-               select_peripheral(PA(9), PERIPH_A, 0); /* DATA  */
+               select_peripheral(PIOA, pin_mask, PERIPH_A, 0);
                break;
        case 1:
+               pin_mask  = (1 << 11) | (1 << 12); /* CLOCK & DATA */
+
                if (platform_device_add_resources(pdev, atmel_psif1_resource,
                                        ARRAY_SIZE(atmel_psif1_resource)))
                        goto err_add_resources;
                atmel_psif1_pclk.dev = &pdev->dev;
-               select_peripheral(PB(11), PERIPH_A, 0); /* CLOCK */
-               select_peripheral(PB(12), PERIPH_A, 0); /* DATA  */
+               select_peripheral(PIOB, pin_mask, PERIPH_A, 0);
                break;
        default:
                return NULL;
@@ -958,26 +962,30 @@ DEV_CLK(usart, atmel_usart3, pba, 6);
 
 static inline void configure_usart0_pins(void)
 {
-       select_peripheral(PA(8),  PERIPH_B, 0); /* RXD  */
-       select_peripheral(PA(9),  PERIPH_B, 0); /* TXD  */
+       u32 pin_mask = (1 << 8) | (1 << 9); /* RXD & TXD */
+
+       select_peripheral(PIOA, pin_mask, PERIPH_B, 0);
 }
 
 static inline void configure_usart1_pins(void)
 {
-       select_peripheral(PA(17), PERIPH_A, 0); /* RXD  */
-       select_peripheral(PA(18), PERIPH_A, 0); /* TXD  */
+       u32 pin_mask = (1 << 17) | (1 << 18); /* RXD & TXD */
+
+       select_peripheral(PIOA, pin_mask, PERIPH_A, 0);
 }
 
 static inline void configure_usart2_pins(void)
 {
-       select_peripheral(PB(26), PERIPH_B, 0); /* RXD  */
-       select_peripheral(PB(27), PERIPH_B, 0); /* TXD  */
+       u32 pin_mask = (1 << 26) | (1 << 27); /* RXD & TXD */
+
+       select_peripheral(PIOB, pin_mask, PERIPH_B, 0);
 }
 
 static inline void configure_usart3_pins(void)
 {
-       select_peripheral(PB(18), PERIPH_B, 0); /* RXD  */
-       select_peripheral(PB(17), PERIPH_B, 0); /* TXD  */
+       u32 pin_mask = (1 << 18) | (1 << 17); /* RXD & TXD */
+
+       select_peripheral(PIOB, pin_mask, PERIPH_B, 0);
 }
 
 static struct platform_device *__initdata at32_usarts[4];
@@ -1057,59 +1065,69 @@ struct platform_device *__init
 at32_add_device_eth(unsigned int id, struct eth_platform_data *data)
 {
        struct platform_device *pdev;
+       u32 pin_mask;
 
        switch (id) {
        case 0:
                pdev = &macb0_device;
 
-               select_peripheral(PC(3),  PERIPH_A, 0); /* TXD0 */
-               select_peripheral(PC(4),  PERIPH_A, 0); /* TXD1 */
-               select_peripheral(PC(7),  PERIPH_A, 0); /* TXEN */
-               select_peripheral(PC(8),  PERIPH_A, 0); /* TXCK */
-               select_peripheral(PC(9),  PERIPH_A, 0); /* RXD0 */
-               select_peripheral(PC(10), PERIPH_A, 0); /* RXD1 */
-               select_peripheral(PC(13), PERIPH_A, 0); /* RXER */
-               select_peripheral(PC(15), PERIPH_A, 0); /* RXDV */
-               select_peripheral(PC(16), PERIPH_A, 0); /* MDC  */
-               select_peripheral(PC(17), PERIPH_A, 0); /* MDIO */
+               pin_mask  = (1 << 3);   /* TXD0 */
+               pin_mask |= (1 << 4);   /* TXD1 */
+               pin_mask |= (1 << 7);   /* TXEN */
+               pin_mask |= (1 << 8);   /* TXCK */
+               pin_mask |= (1 << 9);   /* RXD0 */
+               pin_mask |= (1 << 10);  /* RXD1 */
+               pin_mask |= (1 << 13);  /* RXER */
+               pin_mask |= (1 << 15);  /* RXDV */
+               pin_mask |= (1 << 16);  /* MDC  */
+               pin_mask |= (1 << 17);  /* MDIO */
 
                if (!data->is_rmii) {
-                       select_peripheral(PC(0),  PERIPH_A, 0); /* COL  */
-                       select_peripheral(PC(1),  PERIPH_A, 0); /* CRS  */
-                       select_peripheral(PC(2),  PERIPH_A, 0); /* TXER */
-                       select_peripheral(PC(5),  PERIPH_A, 0); /* TXD2 */
-                       select_peripheral(PC(6),  PERIPH_A, 0); /* TXD3 */
-                       select_peripheral(PC(11), PERIPH_A, 0); /* RXD2 */
-                       select_peripheral(PC(12), PERIPH_A, 0); /* RXD3 */
-                       select_peripheral(PC(14), PERIPH_A, 0); /* RXCK */
-                       select_peripheral(PC(18), PERIPH_A, 0); /* SPD  */
+                       pin_mask |= (1 << 0);   /* COL  */
+                       pin_mask |= (1 << 1);   /* CRS  */
+                       pin_mask |= (1 << 2);   /* TXER */
+                       pin_mask |= (1 << 5);   /* TXD2 */
+                       pin_mask |= (1 << 6);   /* TXD3 */
+                       pin_mask |= (1 << 11);  /* RXD2 */
+                       pin_mask |= (1 << 12);  /* RXD3 */
+                       pin_mask |= (1 << 14);  /* RXCK */
+                       pin_mask |= (1 << 18);  /* SPD  */
                }
+
+               select_peripheral(PIOC, pin_mask, PERIPH_A, 0);
+
                break;
 
        case 1:
                pdev = &macb1_device;
 
-               select_peripheral(PD(13), PERIPH_B, 0);         /* TXD0 */
-               select_peripheral(PD(14), PERIPH_B, 0);         /* TXD1 */
-               select_peripheral(PD(11), PERIPH_B, 0);         /* TXEN */
-               select_peripheral(PD(12), PERIPH_B, 0);         /* TXCK */
-               select_peripheral(PD(10), PERIPH_B, 0);         /* RXD0 */
-               select_peripheral(PD(6),  PERIPH_B, 0);         /* RXD1 */
-               select_peripheral(PD(5),  PERIPH_B, 0);         /* RXER */
-               select_peripheral(PD(4),  PERIPH_B, 0);         /* RXDV */
-               select_peripheral(PD(3),  PERIPH_B, 0);         /* MDC  */
-               select_peripheral(PD(2),  PERIPH_B, 0);         /* MDIO */
+               pin_mask  = (1 << 13);  /* TXD0 */
+               pin_mask |= (1 << 14);  /* TXD1 */
+               pin_mask |= (1 << 11);  /* TXEN */
+               pin_mask |= (1 << 12);  /* TXCK */
+               pin_mask |= (1 << 10);  /* RXD0 */
+               pin_mask |= (1 << 6);   /* RXD1 */
+               pin_mask |= (1 << 5);   /* RXER */
+               pin_mask |= (1 << 4);   /* RXDV */
+               pin_mask |= (1 << 3);   /* MDC  */
+               pin_mask |= (1 << 2);   /* MDIO */
+
+               if (!data->is_rmii)
+                       pin_mask |= (1 << 15);  /* SPD  */
+
+               select_peripheral(PIOD, pin_mask, PERIPH_B, 0);
 
                if (!data->is_rmii) {
-                       select_peripheral(PC(19), PERIPH_B, 0); /* COL  */
-                       select_peripheral(PC(23), PERIPH_B, 0); /* CRS  */
-                       select_peripheral(PC(26), PERIPH_B, 0); /* TXER */
-                       select_peripheral(PC(27), PERIPH_B, 0); /* TXD2 */
-                       select_peripheral(PC(28), PERIPH_B, 0); /* TXD3 */
-                       select_peripheral(PC(29), PERIPH_B, 0); /* RXD2 */
-                       select_peripheral(PC(30), PERIPH_B, 0); /* RXD3 */
-                       select_peripheral(PC(24), PERIPH_B, 0); /* RXCK */
-                       select_peripheral(PD(15), PERIPH_B, 0); /* SPD  */
+                       pin_mask  = (1 << 19);  /* COL  */
+                       pin_mask |= (1 << 23);  /* CRS  */
+                       pin_mask |= (1 << 26);  /* TXER */
+                       pin_mask |= (1 << 27);  /* TXD2 */
+                       pin_mask |= (1 << 28);  /* TXD3 */
+                       pin_mask |= (1 << 29);  /* RXD2 */
+                       pin_mask |= (1 << 30);  /* RXD3 */
+                       pin_mask |= (1 << 24);  /* RXCK */
+
+                       select_peripheral(PIOC, pin_mask, PERIPH_B, 0);
                }
                break;
 
@@ -1177,23 +1195,28 @@ at32_add_device_spi(unsigned int id, struct spi_board_info *b, unsigned int n)
                { GPIO_PIN_PB(2), GPIO_PIN_PB(3),
                  GPIO_PIN_PB(4), GPIO_PIN_PA(27), };
        struct platform_device *pdev;
+       u32 pin_mask;
 
        switch (id) {
        case 0:
                pdev = &atmel_spi0_device;
+               pin_mask  = (1 << 1) | (1 << 2);        /* MOSI & SCK */
+
                /* pullup MISO so a level is always defined */
-               select_peripheral(PA(0),  PERIPH_A, AT32_GPIOF_PULLUP);
-               select_peripheral(PA(1),  PERIPH_A, 0); /* MOSI  */
-               select_peripheral(PA(2),  PERIPH_A, 0); /* SCK   */
+               select_peripheral(PIOA, (1 << 0), PERIPH_A, AT32_GPIOF_PULLUP);
+               select_peripheral(PIOA, pin_mask, PERIPH_A, 0);
+
                at32_spi_setup_slaves(0, b, n, spi0_pins);
                break;
 
        case 1:
                pdev = &atmel_spi1_device;
+               pin_mask  = (1 << 1) | (1 << 5);        /* MOSI */
+
                /* pullup MISO so a level is always defined */
-               select_peripheral(PB(0),  PERIPH_B, AT32_GPIOF_PULLUP);
-               select_peripheral(PB(1),  PERIPH_B, 0); /* MOSI  */
-               select_peripheral(PB(5),  PERIPH_B, 0); /* SCK   */
+               select_peripheral(PIOB, (1 << 0), PERIPH_B, AT32_GPIOF_PULLUP);
+               select_peripheral(PIOB, pin_mask, PERIPH_B, 0);
+
                at32_spi_setup_slaves(1, b, n, spi1_pins);
                break;
 
@@ -1226,6 +1249,7 @@ struct platform_device *__init at32_add_device_twi(unsigned int id,
                                                    unsigned int n)
 {
        struct platform_device *pdev;
+       u32 pin_mask;
 
        if (id != 0)
                return NULL;
@@ -1238,8 +1262,9 @@ struct platform_device *__init at32_add_device_twi(unsigned int id,
                                ARRAY_SIZE(atmel_twi0_resource)))
                goto err_add_resources;
 
-       select_peripheral(PA(6),  PERIPH_A, 0); /* SDA  */
-       select_peripheral(PA(7),  PERIPH_A, 0); /* SDL  */
+       pin_mask  = (1 << 6) | (1 << 7);        /* SDA & SDL */
+
+       select_peripheral(PIOA, pin_mask, PERIPH_A, 0);
 
        atmel_twi0_pclk.dev = &pdev->dev;
 
@@ -1272,10 +1297,16 @@ static struct clk atmel_mci0_pclk = {
 struct platform_device *__init
 at32_add_device_mci(unsigned int id, struct mci_platform_data *data)
 {
-       struct mci_platform_data        _data;
        struct platform_device          *pdev;
+       struct dw_dma_slave             *dws;
+       u32                             pioa_mask;
+       u32                             piob_mask;
 
-       if (id != 0)
+       if (id != 0 || !data)
+               return NULL;
+
+       /* Must have at least one usable slot */
+       if (!data->slot[0].bus_width && !data->slot[1].bus_width)
                return NULL;
 
        pdev = platform_device_alloc("atmel_mci", id);
@@ -1286,28 +1317,80 @@ at32_add_device_mci(unsigned int id, struct mci_platform_data *data)
                                ARRAY_SIZE(atmel_mci0_resource)))
                goto fail;
 
-       if (!data) {
-               data = &_data;
-               memset(data, -1, sizeof(struct mci_platform_data));
-               data->detect_pin = GPIO_PIN_NONE;
-               data->wp_pin = GPIO_PIN_NONE;
-       }
+       if (data->dma_slave)
+               dws = kmemdup(to_dw_dma_slave(data->dma_slave),
+                               sizeof(struct dw_dma_slave), GFP_KERNEL);
+       else
+               dws = kzalloc(sizeof(struct dw_dma_slave), GFP_KERNEL);
+
+       dws->slave.dev = &pdev->dev;
+       dws->slave.dma_dev = &dw_dmac0_device.dev;
+       dws->slave.reg_width = DMA_SLAVE_WIDTH_32BIT;
+       dws->cfg_hi = (DWC_CFGH_SRC_PER(0)
+                               | DWC_CFGH_DST_PER(1));
+       dws->cfg_lo &= ~(DWC_CFGL_HS_DST_POL
+                               | DWC_CFGL_HS_SRC_POL);
+
+       data->dma_slave = &dws->slave;
 
        if (platform_device_add_data(pdev, data,
                                sizeof(struct mci_platform_data)))
                goto fail;
 
-       select_peripheral(PA(10), PERIPH_A, 0); /* CLK   */
-       select_peripheral(PA(11), PERIPH_A, 0); /* CMD   */
-       select_peripheral(PA(12), PERIPH_A, 0); /* DATA0 */
-       select_peripheral(PA(13), PERIPH_A, 0); /* DATA1 */
-       select_peripheral(PA(14), PERIPH_A, 0); /* DATA2 */
-       select_peripheral(PA(15), PERIPH_A, 0); /* DATA3 */
+       /* CLK line is common to both slots */
+       pioa_mask = 1 << 10;
 
-       if (gpio_is_valid(data->detect_pin))
-               at32_select_gpio(data->detect_pin, 0);
-       if (gpio_is_valid(data->wp_pin))
-               at32_select_gpio(data->wp_pin, 0);
+       switch (data->slot[0].bus_width) {
+       case 4:
+               pioa_mask |= 1 << 13;           /* DATA1 */
+               pioa_mask |= 1 << 14;           /* DATA2 */
+               pioa_mask |= 1 << 15;           /* DATA3 */
+               /* fall through */
+       case 1:
+               pioa_mask |= 1 << 11;           /* CMD   */
+               pioa_mask |= 1 << 12;           /* DATA0 */
+
+               if (gpio_is_valid(data->slot[0].detect_pin))
+                       at32_select_gpio(data->slot[0].detect_pin, 0);
+               if (gpio_is_valid(data->slot[0].wp_pin))
+                       at32_select_gpio(data->slot[0].wp_pin, 0);
+               break;
+       case 0:
+               /* Slot is unused */
+               break;
+       default:
+               goto fail;
+       }
+
+       select_peripheral(PIOA, pioa_mask, PERIPH_A, 0);
+       piob_mask = 0;
+
+       switch (data->slot[1].bus_width) {
+       case 4:
+               piob_mask |= 1 <<  8;           /* DATA1 */
+               piob_mask |= 1 <<  9;           /* DATA2 */
+               piob_mask |= 1 << 10;           /* DATA3 */
+               /* fall through */
+       case 1:
+               piob_mask |= 1 <<  6;           /* CMD   */
+               piob_mask |= 1 <<  7;           /* DATA0 */
+               select_peripheral(PIOB, piob_mask, PERIPH_B, 0);
+
+               if (gpio_is_valid(data->slot[1].detect_pin))
+                       at32_select_gpio(data->slot[1].detect_pin, 0);
+               if (gpio_is_valid(data->slot[1].wp_pin))
+                       at32_select_gpio(data->slot[1].wp_pin, 0);
+               break;
+       case 0:
+               /* Slot is unused */
+               break;
+       default:
+               if (!data->slot[0].bus_width)
+                       goto fail;
+
+               data->slot[1].bus_width = 0;
+               break;
+       }
 
        atmel_mci0_pclk.dev = &pdev->dev;
 
@@ -1353,13 +1436,14 @@ static struct clk atmel_lcdfb0_pixclk = {
 struct platform_device *__init
 at32_add_device_lcdc(unsigned int id, struct atmel_lcdfb_info *data,
                     unsigned long fbmem_start, unsigned long fbmem_len,
-                    unsigned int pin_config)
+                    u64 pin_mask)
 {
        struct platform_device *pdev;
        struct atmel_lcdfb_info *info;
        struct fb_monspecs *monspecs;
        struct fb_videomode *modedb;
        unsigned int modedb_size;
+       u32 portc_mask, portd_mask, porte_mask;
 
        /*
         * Do a deep copy of the fb data, monspecs and modedb. Make
@@ -1381,76 +1465,21 @@ at32_add_device_lcdc(unsigned int id, struct atmel_lcdfb_info *data,
        case 0:
                pdev = &atmel_lcdfb0_device;
 
-               switch (pin_config) {
-               case 0:
-                       select_peripheral(PC(19), PERIPH_A, 0); /* CC     */
-                       select_peripheral(PC(20), PERIPH_A, 0); /* HSYNC  */
-                       select_peripheral(PC(21), PERIPH_A, 0); /* PCLK   */
-                       select_peripheral(PC(22), PERIPH_A, 0); /* VSYNC  */
-                       select_peripheral(PC(23), PERIPH_A, 0); /* DVAL   */
-                       select_peripheral(PC(24), PERIPH_A, 0); /* MODE   */
-                       select_peripheral(PC(25), PERIPH_A, 0); /* PWR    */
-                       select_peripheral(PC(26), PERIPH_A, 0); /* DATA0  */
-                       select_peripheral(PC(27), PERIPH_A, 0); /* DATA1  */
-                       select_peripheral(PC(28), PERIPH_A, 0); /* DATA2  */
-                       select_peripheral(PC(29), PERIPH_A, 0); /* DATA3  */
-                       select_peripheral(PC(30), PERIPH_A, 0); /* DATA4  */
-                       select_peripheral(PC(31), PERIPH_A, 0); /* DATA5  */
-                       select_peripheral(PD(0),  PERIPH_A, 0); /* DATA6  */
-                       select_peripheral(PD(1),  PERIPH_A, 0); /* DATA7  */
-                       select_peripheral(PD(2),  PERIPH_A, 0); /* DATA8  */
-                       select_peripheral(PD(3),  PERIPH_A, 0); /* DATA9  */
-                       select_peripheral(PD(4),  PERIPH_A, 0); /* DATA10 */
-                       select_peripheral(PD(5),  PERIPH_A, 0); /* DATA11 */
-                       select_peripheral(PD(6),  PERIPH_A, 0); /* DATA12 */
-                       select_peripheral(PD(7),  PERIPH_A, 0); /* DATA13 */
-                       select_peripheral(PD(8),  PERIPH_A, 0); /* DATA14 */
-                       select_peripheral(PD(9),  PERIPH_A, 0); /* DATA15 */
-                       select_peripheral(PD(10), PERIPH_A, 0); /* DATA16 */
-                       select_peripheral(PD(11), PERIPH_A, 0); /* DATA17 */
-                       select_peripheral(PD(12), PERIPH_A, 0); /* DATA18 */
-                       select_peripheral(PD(13), PERIPH_A, 0); /* DATA19 */
-                       select_peripheral(PD(14), PERIPH_A, 0); /* DATA20 */
-                       select_peripheral(PD(15), PERIPH_A, 0); /* DATA21 */
-                       select_peripheral(PD(16), PERIPH_A, 0); /* DATA22 */
-                       select_peripheral(PD(17), PERIPH_A, 0); /* DATA23 */
-                       break;
-               case 1:
-                       select_peripheral(PE(0),  PERIPH_B, 0); /* CC     */
-                       select_peripheral(PC(20), PERIPH_A, 0); /* HSYNC  */
-                       select_peripheral(PC(21), PERIPH_A, 0); /* PCLK   */
-                       select_peripheral(PC(22), PERIPH_A, 0); /* VSYNC  */
-                       select_peripheral(PE(1),  PERIPH_B, 0); /* DVAL   */
-                       select_peripheral(PE(2),  PERIPH_B, 0); /* MODE   */
-                       select_peripheral(PC(25), PERIPH_A, 0); /* PWR    */
-                       select_peripheral(PE(3),  PERIPH_B, 0); /* DATA0  */
-                       select_peripheral(PE(4),  PERIPH_B, 0); /* DATA1  */
-                       select_peripheral(PE(5),  PERIPH_B, 0); /* DATA2  */
-                       select_peripheral(PE(6),  PERIPH_B, 0); /* DATA3  */
-                       select_peripheral(PE(7),  PERIPH_B, 0); /* DATA4  */
-                       select_peripheral(PC(31), PERIPH_A, 0); /* DATA5  */
-                       select_peripheral(PD(0),  PERIPH_A, 0); /* DATA6  */
-                       select_peripheral(PD(1),  PERIPH_A, 0); /* DATA7  */
-                       select_peripheral(PE(8),  PERIPH_B, 0); /* DATA8  */
-                       select_peripheral(PE(9),  PERIPH_B, 0); /* DATA9  */
-                       select_peripheral(PE(10), PERIPH_B, 0); /* DATA10 */
-                       select_peripheral(PE(11), PERIPH_B, 0); /* DATA11 */
-                       select_peripheral(PE(12), PERIPH_B, 0); /* DATA12 */
-                       select_peripheral(PD(7),  PERIPH_A, 0); /* DATA13 */
-                       select_peripheral(PD(8),  PERIPH_A, 0); /* DATA14 */
-                       select_peripheral(PD(9),  PERIPH_A, 0); /* DATA15 */
-                       select_peripheral(PE(13), PERIPH_B, 0); /* DATA16 */
-                       select_peripheral(PE(14), PERIPH_B, 0); /* DATA17 */
-                       select_peripheral(PE(15), PERIPH_B, 0); /* DATA18 */
-                       select_peripheral(PE(16), PERIPH_B, 0); /* DATA19 */
-                       select_peripheral(PE(17), PERIPH_B, 0); /* DATA20 */
-                       select_peripheral(PE(18), PERIPH_B, 0); /* DATA21 */
-                       select_peripheral(PD(16), PERIPH_A, 0); /* DATA22 */
-                       select_peripheral(PD(17), PERIPH_A, 0); /* DATA23 */
-                       break;
-               default:
-                       goto err_invalid_id;
-               }
+               if (pin_mask == 0ULL)
+                       /* Default to "full" lcdc control signals and 24bit */
+                       pin_mask = ATMEL_LCDC_PRI_24BIT | ATMEL_LCDC_PRI_CONTROL;
+
+               /* LCDC on port C */
+               portc_mask = (pin_mask & 0xfff80000) >> 19;
+               select_peripheral(PIOC, portc_mask, PERIPH_A, 0);
+
+               /* LCDC on port D */
+               portd_mask = pin_mask & 0x0003ffff;
+               select_peripheral(PIOD, portd_mask, PERIPH_A, 0);
+
+               /* LCDC on port E */
+               porte_mask = (pin_mask >> 32) & 0x0007ffff;
+               select_peripheral(PIOE, porte_mask, PERIPH_B, 0);
 
                clk_set_parent(&atmel_lcdfb0_pixclk, &pll0);
                clk_set_rate(&atmel_lcdfb0_pixclk, clk_get_rate(&pll0));
@@ -1499,6 +1528,7 @@ static struct clk atmel_pwm0_mck = {
 struct platform_device *__init at32_add_device_pwm(u32 mask)
 {
        struct platform_device *pdev;
+       u32 pin_mask;
 
        if (!mask)
                return NULL;
@@ -1514,14 +1544,21 @@ struct platform_device *__init at32_add_device_pwm(u32 mask)
        if (platform_device_add_data(pdev, &mask, sizeof(mask)))
                goto out_free_pdev;
 
+       pin_mask = 0;
        if (mask & (1 << 0))
-               select_peripheral(PA(28), PERIPH_A, 0);
+               pin_mask |= (1 << 28);
        if (mask & (1 << 1))
-               select_peripheral(PA(29), PERIPH_A, 0);
+               pin_mask |= (1 << 29);
+       if (pin_mask > 0)
+               select_peripheral(PIOA, pin_mask, PERIPH_A, 0);
+
+       pin_mask = 0;
        if (mask & (1 << 2))
-               select_peripheral(PA(21), PERIPH_B, 0);
+               pin_mask |= (1 << 21);
        if (mask & (1 << 3))
-               select_peripheral(PA(22), PERIPH_B, 0);
+               pin_mask |= (1 << 22);
+       if (pin_mask > 0)
+               select_peripheral(PIOA, pin_mask, PERIPH_B, 0);
 
        atmel_pwm0_mck.dev = &pdev->dev;
 
@@ -1562,52 +1599,65 @@ struct platform_device *__init
 at32_add_device_ssc(unsigned int id, unsigned int flags)
 {
        struct platform_device *pdev;
+       u32 pin_mask = 0;
 
        switch (id) {
        case 0:
                pdev = &ssc0_device;
                if (flags & ATMEL_SSC_RF)
-                       select_peripheral(PA(21), PERIPH_A, 0); /* RF */
+                       pin_mask |= (1 << 21);  /* RF */
                if (flags & ATMEL_SSC_RK)
-                       select_peripheral(PA(22), PERIPH_A, 0); /* RK */
+                       pin_mask |= (1 << 22);  /* RK */
                if (flags & ATMEL_SSC_TK)
-                       select_peripheral(PA(23), PERIPH_A, 0); /* TK */
+                       pin_mask |= (1 << 23);  /* TK */
                if (flags & ATMEL_SSC_TF)
-                       select_peripheral(PA(24), PERIPH_A, 0); /* TF */
+                       pin_mask |= (1 << 24);  /* TF */
                if (flags & ATMEL_SSC_TD)
-                       select_peripheral(PA(25), PERIPH_A, 0); /* TD */
+                       pin_mask |= (1 << 25);  /* TD */
                if (flags & ATMEL_SSC_RD)
-                       select_peripheral(PA(26), PERIPH_A, 0); /* RD */
+                       pin_mask |= (1 << 26);  /* RD */
+
+               if (pin_mask > 0)
+                       select_peripheral(PIOA, pin_mask, PERIPH_A, 0);
+
                break;
        case 1:
                pdev = &ssc1_device;
                if (flags & ATMEL_SSC_RF)
-                       select_peripheral(PA(0), PERIPH_B, 0);  /* RF */
+                       pin_mask |= (1 << 0);   /* RF */
                if (flags & ATMEL_SSC_RK)
-                       select_peripheral(PA(1), PERIPH_B, 0);  /* RK */
+                       pin_mask |= (1 << 1);   /* RK */
                if (flags & ATMEL_SSC_TK)
-                       select_peripheral(PA(2), PERIPH_B, 0);  /* TK */
+                       pin_mask |= (1 << 2);   /* TK */
                if (flags & ATMEL_SSC_TF)
-                       select_peripheral(PA(3), PERIPH_B, 0);  /* TF */
+                       pin_mask |= (1 << 3);   /* TF */
                if (flags & ATMEL_SSC_TD)
-                       select_peripheral(PA(4), PERIPH_B, 0);  /* TD */
+                       pin_mask |= (1 << 4);   /* TD */
                if (flags & ATMEL_SSC_RD)
-                       select_peripheral(PA(5), PERIPH_B, 0);  /* RD */
+                       pin_mask |= (1 << 5);   /* RD */
+
+               if (pin_mask > 0)
+                       select_peripheral(PIOA, pin_mask, PERIPH_B, 0);
+
                break;
        case 2:
                pdev = &ssc2_device;
                if (flags & ATMEL_SSC_TD)
-                       select_peripheral(PB(13), PERIPH_A, 0); /* TD */
+                       pin_mask |= (1 << 13);  /* TD */
                if (flags & ATMEL_SSC_RD)
-                       select_peripheral(PB(14), PERIPH_A, 0); /* RD */
+                       pin_mask |= (1 << 14);  /* RD */
                if (flags & ATMEL_SSC_TK)
-                       select_peripheral(PB(15), PERIPH_A, 0); /* TK */
+                       pin_mask |= (1 << 15);  /* TK */
                if (flags & ATMEL_SSC_TF)
-                       select_peripheral(PB(16), PERIPH_A, 0); /* TF */
+                       pin_mask |= (1 << 16);  /* TF */
                if (flags & ATMEL_SSC_RF)
-                       select_peripheral(PB(17), PERIPH_A, 0); /* RF */
+                       pin_mask |= (1 << 17);  /* RF */
                if (flags & ATMEL_SSC_RK)
-                       select_peripheral(PB(18), PERIPH_A, 0); /* RK */
+                       pin_mask |= (1 << 18);  /* RK */
+
+               if (pin_mask > 0)
+                       select_peripheral(PIOB, pin_mask, PERIPH_A, 0);
+
                break;
        default:
                return NULL;
@@ -1745,14 +1795,15 @@ static int __init at32_init_ide_or_cf(struct platform_device *pdev,
                unsigned int cs, unsigned int extint)
 {
        static unsigned int extint_pin_map[4] __initdata = {
-               GPIO_PIN_PB(25),
-               GPIO_PIN_PB(26),
-               GPIO_PIN_PB(27),
-               GPIO_PIN_PB(28),
+               (1 << 25),
+               (1 << 26),
+               (1 << 27),
+               (1 << 28),
        };
        static bool common_pins_initialized __initdata = false;
        unsigned int extint_pin;
        int ret;
+       u32 pin_mask;
 
        if (extint >= ARRAY_SIZE(extint_pin_map))
                return -EINVAL;
@@ -1766,7 +1817,8 @@ static int __init at32_init_ide_or_cf(struct platform_device *pdev,
                if (ret)
                        return ret;
 
-               select_peripheral(PE(21), PERIPH_A, 0); /* NCS4   -> OE_N  */
+               /* NCS4   -> OE_N  */
+               select_peripheral(PIOE, (1 << 21), PERIPH_A, 0);
                hmatrix_sfr_set_bits(HMATRIX_SLAVE_EBI, HMATRIX_EBI_CF0_ENABLE);
                break;
        case 5:
@@ -1776,7 +1828,8 @@ static int __init at32_init_ide_or_cf(struct platform_device *pdev,
                if (ret)
                        return ret;
 
-               select_peripheral(PE(22), PERIPH_A, 0); /* NCS5   -> OE_N  */
+               /* NCS5   -> OE_N  */
+               select_peripheral(PIOE, (1 << 22), PERIPH_A, 0);
                hmatrix_sfr_set_bits(HMATRIX_SLAVE_EBI, HMATRIX_EBI_CF1_ENABLE);
                break;
        default:
@@ -1784,14 +1837,17 @@ static int __init at32_init_ide_or_cf(struct platform_device *pdev,
        }
 
        if (!common_pins_initialized) {
-               select_peripheral(PE(19), PERIPH_A, 0); /* CFCE1  -> CS0_N */
-               select_peripheral(PE(20), PERIPH_A, 0); /* CFCE2  -> CS1_N */
-               select_peripheral(PE(23), PERIPH_A, 0); /* CFRNW  -> DIR   */
-               select_peripheral(PE(24), PERIPH_A, 0); /* NWAIT  <- IORDY */
+               pin_mask  = (1 << 19);  /* CFCE1  -> CS0_N */
+               pin_mask |= (1 << 20);  /* CFCE2  -> CS1_N */
+               pin_mask |= (1 << 23);  /* CFRNW  -> DIR   */
+               pin_mask |= (1 << 24);  /* NWAIT  <- IORDY */
+
+               select_peripheral(PIOE, pin_mask, PERIPH_A, 0);
+
                common_pins_initialized = true;
        }
 
-       at32_select_periph(extint_pin, GPIO_PERIPH_A, AT32_GPIOF_DEGLITCH);
+       select_peripheral(PIOB, extint_pin, PERIPH_A, AT32_GPIOF_DEGLITCH);
 
        pdev->resource[1].start = EIM_IRQ_BASE + extint;
        pdev->resource[1].end = pdev->resource[1].start;
@@ -1930,6 +1986,7 @@ at32_add_device_ac97c(unsigned int id, struct ac97c_platform_data *data)
 {
        struct platform_device *pdev;
        struct ac97c_platform_data _data;
+       u32 pin_mask;
 
        if (id != 0)
                return NULL;
@@ -1956,10 +2013,10 @@ at32_add_device_ac97c(unsigned int id, struct ac97c_platform_data *data)
                                sizeof(struct ac97c_platform_data)))
                goto fail;
 
-       select_peripheral(PB(20), PERIPH_B, 0); /* SDO  */
-       select_peripheral(PB(21), PERIPH_B, 0); /* SYNC */
-       select_peripheral(PB(22), PERIPH_B, 0); /* SCLK */
-       select_peripheral(PB(23), PERIPH_B, 0); /* SDI  */
+       pin_mask  = (1 << 20) | (1 << 21);      /* SDO & SYNC */
+       pin_mask |= (1 << 22) | (1 << 23);      /* SCLK & SDI */
+
+       select_peripheral(PIOB, pin_mask, PERIPH_B, 0);
 
        /* TODO: gpio_is_valid(data->reset_pin) with kernel 2.6.26. */
        if (data->reset_pin != GPIO_PIN_NONE)
@@ -2001,6 +2058,7 @@ static struct clk abdac0_sample_clk = {
 struct platform_device *__init at32_add_device_abdac(unsigned int id)
 {
        struct platform_device *pdev;
+       u32 pin_mask;
 
        if (id != 0)
                return NULL;
@@ -2013,10 +2071,10 @@ struct platform_device *__init at32_add_device_abdac(unsigned int id)
                                ARRAY_SIZE(abdac0_resource)))
                goto err_add_resources;
 
-       select_peripheral(PB(20), PERIPH_A, 0); /* DATA1        */
-       select_peripheral(PB(21), PERIPH_A, 0); /* DATA0        */
-       select_peripheral(PB(22), PERIPH_A, 0); /* DATAN1       */
-       select_peripheral(PB(23), PERIPH_A, 0); /* DATAN0       */
+       pin_mask  = (1 << 20) | (1 << 22);      /* DATA1 & DATAN1 */
+       pin_mask |= (1 << 21) | (1 << 23);      /* DATA0 & DATAN0 */
+
+       select_peripheral(PIOB, pin_mask, PERIPH_A, 0);
 
        abdac0_pclk.dev = &pdev->dev;
        abdac0_sample_clk.dev = &pdev->dev;
@@ -2073,7 +2131,7 @@ static struct clk gclk4 = {
        .index          = 4,
 };
 
-struct clk *at32_clock_list[] = {
+static __initdata struct clk *init_clocks[] = {
        &osc32k,
        &osc0,
        &osc1,
@@ -2137,7 +2195,6 @@ struct clk *at32_clock_list[] = {
        &gclk3,
        &gclk4,
 };
-unsigned int at32_nr_clocks = ARRAY_SIZE(at32_clock_list);
 
 void __init setup_platform(void)
 {
@@ -2168,14 +2225,19 @@ void __init setup_platform(void)
        genclk_init_parent(&abdac0_sample_clk);
 
        /*
-        * Turn on all clocks that have at least one user already, and
-        * turn off everything else. We only do this for module
-        * clocks, and even though it isn't particularly pretty to
-        * check the address of the mode function, it should do the
-        * trick...
+        * Build initial dynamic clock list by registering all clocks
+        * from the array.
+        * At the same time, turn on all clocks that have at least one
+        * user already, and turn off everything else. We only do this
+        * for module clocks, and even though it isn't particularly
+        * pretty to  check the address of the mode function, it should
+        * do the trick...
         */
-       for (i = 0; i < ARRAY_SIZE(at32_clock_list); i++) {
-               struct clk *clk = at32_clock_list[i];
+       for (i = 0; i < ARRAY_SIZE(init_clocks); i++) {
+               struct clk *clk = init_clocks[i];
+
+               /* first, register clock */
+               at32_clk_register(clk);
 
                if (clk->users == 0)
                        continue;
index 6c27dda..138a00a 100644 (file)
 #include <linux/err.h>
 #include <linux/device.h>
 #include <linux/string.h>
+#include <linux/list.h>
 
 #include <mach/chip.h>
 
 #include "clock.h"
 
+/* at32 clock list */
+static LIST_HEAD(at32_clock_list);
+
 static DEFINE_SPINLOCK(clk_lock);
+static DEFINE_SPINLOCK(clk_list_lock);
+
+void at32_clk_register(struct clk *clk)
+{
+       spin_lock(&clk_list_lock);
+       /* add the new item to the end of the list */
+       list_add_tail(&clk->list, &at32_clock_list);
+       spin_unlock(&clk_list_lock);
+}
 
 struct clk *clk_get(struct device *dev, const char *id)
 {
-       int i;
+       struct clk *clk;
 
-       for (i = 0; i < at32_nr_clocks; i++) {
-               struct clk *clk = at32_clock_list[i];
+       spin_lock(&clk_list_lock);
 
-               if (clk->dev == dev && strcmp(id, clk->name) == 0)
+       list_for_each_entry(clk, &at32_clock_list, list) {
+               if (clk->dev == dev && strcmp(id, clk->name) == 0) {
+                       spin_unlock(&clk_list_lock);
                        return clk;
+               }
        }
 
+       spin_unlock(&clk_list_lock);
        return ERR_PTR(-ENOENT);
 }
 EXPORT_SYMBOL(clk_get);
@@ -203,8 +219,8 @@ dump_clock(struct clk *parent, struct clkinf *r)
 
        /* cost of this scan is small, but not linear... */
        r->nest = nest + NEST_DELTA;
-       for (i = 3; i < at32_nr_clocks; i++) {
-               clk = at32_clock_list[i];
+
+       list_for_each_entry(clk, &at32_clock_list, list) {
                if (clk->parent == parent)
                        dump_clock(clk, r);
        }
@@ -215,6 +231,7 @@ static int clk_show(struct seq_file *s, void *unused)
 {
        struct clkinf   r;
        int             i;
+       struct clk      *clk;
 
        /* show all the power manager registers */
        seq_printf(s, "MCCTRL  = %8x\n", pm_readl(MCCTRL));
@@ -234,14 +251,25 @@ static int clk_show(struct seq_file *s, void *unused)
 
        seq_printf(s, "\n");
 
-       /* show clock tree as derived from the three oscillators
-        * we "know" are at the head of the list
-        */
        r.s = s;
        r.nest = 0;
-       dump_clock(at32_clock_list[0], &r);
-       dump_clock(at32_clock_list[1], &r);
-       dump_clock(at32_clock_list[2], &r);
+       /* protected from changes on the list while dumping */
+       spin_lock(&clk_list_lock);
+
+       /* show clock tree as derived from the three oscillators */
+       clk = clk_get(NULL, "osc32k");
+       dump_clock(clk, &r);
+       clk_put(clk);
+
+       clk = clk_get(NULL, "osc0");
+       dump_clock(clk, &r);
+       clk_put(clk);
+
+       clk = clk_get(NULL, "osc1");
+       dump_clock(clk, &r);
+       clk_put(clk);
+
+       spin_unlock(&clk_list_lock);
 
        return 0;
 }
index bb8e1f2..623bf0e 100644 (file)
  * published by the Free Software Foundation.
  */
 #include <linux/clk.h>
+#include <linux/list.h>
+
+
+void at32_clk_register(struct clk *clk);
 
 struct clk {
+       struct list_head list;          /* linking element */
        const char      *name;          /* Clock name/function */
        struct device   *dev;           /* Device the clock is used by */
        struct clk      *parent;        /* Parent clock, if any */
@@ -25,6 +30,3 @@ struct clk {
        u16             users;          /* Enabled if non-zero */
        u16             index;          /* Sibling index */
 };
-
-extern struct clk *at32_clock_list[];
-extern unsigned int at32_nr_clocks;
index 1e9852d..a77d372 100644 (file)
 #define HMATRIX_BASE   0xfff00800
 #define SDRAMC_BASE    0xfff03800
 
+/* LCDC on port C */
+#define ATMEL_LCDC_PC_CC       (1ULL << 19)
+#define ATMEL_LCDC_PC_HSYNC    (1ULL << 20)
+#define ATMEL_LCDC_PC_PCLK     (1ULL << 21)
+#define ATMEL_LCDC_PC_VSYNC    (1ULL << 22)
+#define ATMEL_LCDC_PC_DVAL     (1ULL << 23)
+#define ATMEL_LCDC_PC_MODE     (1ULL << 24)
+#define ATMEL_LCDC_PC_PWR      (1ULL << 25)
+#define ATMEL_LCDC_PC_DATA0    (1ULL << 26)
+#define ATMEL_LCDC_PC_DATA1    (1ULL << 27)
+#define ATMEL_LCDC_PC_DATA2    (1ULL << 28)
+#define ATMEL_LCDC_PC_DATA3    (1ULL << 29)
+#define ATMEL_LCDC_PC_DATA4    (1ULL << 30)
+#define ATMEL_LCDC_PC_DATA5    (1ULL << 31)
+
+/* LCDC on port D */
+#define ATMEL_LCDC_PD_DATA6    (1ULL << 0)
+#define ATMEL_LCDC_PD_DATA7    (1ULL << 1)
+#define ATMEL_LCDC_PD_DATA8    (1ULL << 2)
+#define ATMEL_LCDC_PD_DATA9    (1ULL << 3)
+#define ATMEL_LCDC_PD_DATA10   (1ULL << 4)
+#define ATMEL_LCDC_PD_DATA11   (1ULL << 5)
+#define ATMEL_LCDC_PD_DATA12   (1ULL << 6)
+#define ATMEL_LCDC_PD_DATA13   (1ULL << 7)
+#define ATMEL_LCDC_PD_DATA14   (1ULL << 8)
+#define ATMEL_LCDC_PD_DATA15   (1ULL << 9)
+#define ATMEL_LCDC_PD_DATA16   (1ULL << 10)
+#define ATMEL_LCDC_PD_DATA17   (1ULL << 11)
+#define ATMEL_LCDC_PD_DATA18   (1ULL << 12)
+#define ATMEL_LCDC_PD_DATA19   (1ULL << 13)
+#define ATMEL_LCDC_PD_DATA20   (1ULL << 14)
+#define ATMEL_LCDC_PD_DATA21   (1ULL << 15)
+#define ATMEL_LCDC_PD_DATA22   (1ULL << 16)
+#define ATMEL_LCDC_PD_DATA23   (1ULL << 17)
+
+/* LCDC on port E */
+#define ATMEL_LCDC_PE_CC       (1ULL << (32 + 0))
+#define ATMEL_LCDC_PE_DVAL     (1ULL << (32 + 1))
+#define ATMEL_LCDC_PE_MODE     (1ULL << (32 + 2))
+#define ATMEL_LCDC_PE_DATA0    (1ULL << (32 + 3))
+#define ATMEL_LCDC_PE_DATA1    (1ULL << (32 + 4))
+#define ATMEL_LCDC_PE_DATA2    (1ULL << (32 + 5))
+#define ATMEL_LCDC_PE_DATA3    (1ULL << (32 + 6))
+#define ATMEL_LCDC_PE_DATA4    (1ULL << (32 + 7))
+#define ATMEL_LCDC_PE_DATA8    (1ULL << (32 + 8))
+#define ATMEL_LCDC_PE_DATA9    (1ULL << (32 + 9))
+#define ATMEL_LCDC_PE_DATA10   (1ULL << (32 + 10))
+#define ATMEL_LCDC_PE_DATA11   (1ULL << (32 + 11))
+#define ATMEL_LCDC_PE_DATA12   (1ULL << (32 + 12))
+#define ATMEL_LCDC_PE_DATA16   (1ULL << (32 + 13))
+#define ATMEL_LCDC_PE_DATA17   (1ULL << (32 + 14))
+#define ATMEL_LCDC_PE_DATA18   (1ULL << (32 + 15))
+#define ATMEL_LCDC_PE_DATA19   (1ULL << (32 + 16))
+#define ATMEL_LCDC_PE_DATA20   (1ULL << (32 + 17))
+#define ATMEL_LCDC_PE_DATA21   (1ULL << (32 + 18))
+
+
+#define ATMEL_LCDC(PORT, PIN)  (ATMEL_LCDC_##PORT##_##PIN)
+
+
+#define ATMEL_LCDC_PRI_24B_DATA        (                                       \
+               ATMEL_LCDC(PC, DATA0)  | ATMEL_LCDC(PC, DATA1)  |       \
+               ATMEL_LCDC(PC, DATA2)  | ATMEL_LCDC(PC, DATA3)  |       \
+               ATMEL_LCDC(PC, DATA4)  | ATMEL_LCDC(PC, DATA5)  |       \
+               ATMEL_LCDC(PD, DATA6)  | ATMEL_LCDC(PD, DATA7)  |       \
+               ATMEL_LCDC(PD, DATA8)  | ATMEL_LCDC(PD, DATA9)  |       \
+               ATMEL_LCDC(PD, DATA10) | ATMEL_LCDC(PD, DATA11) |       \
+               ATMEL_LCDC(PD, DATA12) | ATMEL_LCDC(PD, DATA13) |       \
+               ATMEL_LCDC(PD, DATA14) | ATMEL_LCDC(PD, DATA15) |       \
+               ATMEL_LCDC(PD, DATA16) | ATMEL_LCDC(PD, DATA17) |       \
+               ATMEL_LCDC(PD, DATA18) | ATMEL_LCDC(PD, DATA19) |       \
+               ATMEL_LCDC(PD, DATA20) | ATMEL_LCDC(PD, DATA21) |       \
+               ATMEL_LCDC(PD, DATA22) | ATMEL_LCDC(PD, DATA23))
+
+#define ATMEL_LCDC_ALT_24B_DATA (                                      \
+               ATMEL_LCDC(PE, DATA0)  | ATMEL_LCDC(PE, DATA1)  |       \
+               ATMEL_LCDC(PE, DATA2)  | ATMEL_LCDC(PE, DATA3)  |       \
+               ATMEL_LCDC(PE, DATA4)  | ATMEL_LCDC(PC, DATA5)  |       \
+               ATMEL_LCDC(PD, DATA6)  | ATMEL_LCDC(PD, DATA7)  |       \
+               ATMEL_LCDC(PE, DATA8)  | ATMEL_LCDC(PE, DATA9)  |       \
+               ATMEL_LCDC(PE, DATA10) | ATMEL_LCDC(PE, DATA11) |       \
+               ATMEL_LCDC(PE, DATA12) | ATMEL_LCDC(PD, DATA13) |       \
+               ATMEL_LCDC(PD, DATA14) | ATMEL_LCDC(PD, DATA15) |       \
+               ATMEL_LCDC(PE, DATA16) | ATMEL_LCDC(PE, DATA17) |       \
+               ATMEL_LCDC(PE, DATA18) | ATMEL_LCDC(PE, DATA19) |       \
+               ATMEL_LCDC(PE, DATA20) | ATMEL_LCDC(PE, DATA21) |       \
+               ATMEL_LCDC(PD, DATA22) | ATMEL_LCDC(PD, DATA23))
+
+#define ATMEL_LCDC_PRI_15B_DATA (                                      \
+               ATMEL_LCDC(PC, DATA0)  | ATMEL_LCDC(PC, DATA1)  |       \
+               ATMEL_LCDC(PC, DATA2)  | ATMEL_LCDC(PC, DATA3)  |       \
+               ATMEL_LCDC(PC, DATA4)  | ATMEL_LCDC(PC, DATA5)  |       \
+               ATMEL_LCDC(PD, DATA8)  | ATMEL_LCDC(PD, DATA9)  |       \
+               ATMEL_LCDC(PD, DATA10) | ATMEL_LCDC(PD, DATA11) |       \
+               ATMEL_LCDC(PD, DATA12) | ATMEL_LCDC(PD, DATA16) |       \
+               ATMEL_LCDC(PD, DATA17) | ATMEL_LCDC(PD, DATA18) |       \
+               ATMEL_LCDC(PD, DATA19) | ATMEL_LCDC(PD, DATA20))
+
+#define ATMEL_LCDC_ALT_15B_DATA        (                                       \
+               ATMEL_LCDC(PE, DATA0)  | ATMEL_LCDC(PE, DATA1)  |       \
+               ATMEL_LCDC(PE, DATA2)  | ATMEL_LCDC(PE, DATA3)  |       \
+               ATMEL_LCDC(PE, DATA4)  | ATMEL_LCDC(PC, DATA5)  |       \
+               ATMEL_LCDC(PE, DATA8)  | ATMEL_LCDC(PE, DATA9)  |       \
+               ATMEL_LCDC(PE, DATA10) | ATMEL_LCDC(PE, DATA11) |       \
+               ATMEL_LCDC(PE, DATA12) | ATMEL_LCDC(PE, DATA16) |       \
+               ATMEL_LCDC(PE, DATA17) | ATMEL_LCDC(PE, DATA18) |       \
+               ATMEL_LCDC(PE, DATA19) | ATMEL_LCDC(PE, DATA20))
+
+#define ATMEL_LCDC_PRI_CONTROL (                                       \
+               ATMEL_LCDC(PC, CC)   | ATMEL_LCDC(PC, DVAL) |           \
+               ATMEL_LCDC(PC, MODE) | ATMEL_LCDC(PC, PWR))
+
+#define ATMEL_LCDC_ALT_CONTROL (                                       \
+               ATMEL_LCDC(PE, CC)   | ATMEL_LCDC(PE, DVAL) |           \
+               ATMEL_LCDC(PE, MODE) | ATMEL_LCDC(PC, PWR))
+
+#define ATMEL_LCDC_CONTROL (                                           \
+               ATMEL_LCDC(PC, HSYNC) | ATMEL_LCDC(PC, VSYNC) |         \
+               ATMEL_LCDC(PC, PCLK))
+
+#define ATMEL_LCDC_PRI_24BIT   (ATMEL_LCDC_CONTROL | ATMEL_LCDC_PRI_24B_DATA)
+
+#define ATMEL_LCDC_ALT_24BIT   (ATMEL_LCDC_CONTROL | ATMEL_LCDC_ALT_24B_DATA)
+
+#define ATMEL_LCDC_PRI_15BIT   (ATMEL_LCDC_CONTROL | ATMEL_LCDC_PRI_15B_DATA)
+
+#define ATMEL_LCDC_ALT_15BIT   (ATMEL_LCDC_CONTROL | ATMEL_LCDC_ALT_15B_DATA)
+
 #endif /* __ASM_ARCH_AT32AP700X_H__ */
index e60e907..c48386d 100644 (file)
@@ -43,7 +43,7 @@ struct atmel_lcdfb_info;
 struct platform_device *
 at32_add_device_lcdc(unsigned int id, struct atmel_lcdfb_info *data,
                     unsigned long fbmem_start, unsigned long fbmem_len,
-                    unsigned int pin_config);
+                    u64 pin_mask);
 
 struct usba_platform_data;
 struct platform_device *
index 4ec6abc..22ea79b 100644 (file)
@@ -1,8 +1,7 @@
 #ifndef __ASM_AVR32_ARCH_AT32AP_IO_H
 #define __ASM_AVR32_ARCH_AT32AP_IO_H
 
-/* For "bizarre" halfword swapping */
-#include <linux/byteorder/swabb.h>
+#include <linux/swab.h>
 
 #if defined(CONFIG_AP700X_32_BIT_SMC)
 # define __swizzle_addr_b(addr)        (addr ^ 3UL)
index b1abe6b..21c7937 100644 (file)
 #define AT32_GPIOF_DEGLITCH    0x00000008      /* (IN) Filter glitches */
 #define AT32_GPIOF_MULTIDRV    0x00000010      /* Enable multidriver option */
 
-void at32_select_periph(unsigned int pin, unsigned int periph,
-                       unsigned long flags);
+void at32_select_periph(unsigned int port, unsigned int pin,
+                       unsigned int periph, unsigned long flags);
 void at32_select_gpio(unsigned int pin, unsigned long flags);
+void at32_deselect_pin(unsigned int pin);
 void at32_reserve_pin(unsigned int pin);
 
 #endif /* __ASM_ARCH_PORTMUX_H__ */
index 1040bda..61ab15a 100644 (file)
@@ -35,7 +35,6 @@ static int __init pdc_probe(struct platform_device *pdev)
 }
 
 static struct platform_driver pdc_driver = {
-       .probe          = pdc_probe,
        .driver         = {
                .name   = "pdc",
        },
@@ -43,6 +42,6 @@ static struct platform_driver pdc_driver = {
 
 static int __init pdc_init(void)
 {
-       return platform_driver_register(&pdc_driver);
+       return platform_driver_probe(&pdc_driver, pdc_probe);
 }
 arch_initcall(pdc_init);
index 405ee6b..ed81a8b 100644 (file)
@@ -50,35 +50,48 @@ static struct pio_device *gpio_to_pio(unsigned int gpio)
 }
 
 /* Pin multiplexing API */
+static DEFINE_SPINLOCK(pio_lock);
 
-void __init at32_select_periph(unsigned int pin, unsigned int periph,
-                              unsigned long flags)
+void __init at32_select_periph(unsigned int port, u32 pin_mask,
+                              unsigned int periph, unsigned long flags)
 {
        struct pio_device *pio;
-       unsigned int pin_index = pin & 0x1f;
-       u32 mask = 1 << pin_index;
 
-       pio = gpio_to_pio(pin);
+       /* assign and verify pio */
+       pio = gpio_to_pio(port);
        if (unlikely(!pio)) {
-               printk("pio: invalid pin %u\n", pin);
+               printk(KERN_WARNING "pio: invalid port %u\n", port);
                goto fail;
        }
 
-       if (unlikely(test_and_set_bit(pin_index, &pio->pinmux_mask)
-                        || gpiochip_is_requested(&pio->chip, pin_index))) {
-               printk("%s: pin %u is busy\n", pio->name, pin_index);
+       /* Test if any of the requested pins is already muxed */
+       spin_lock(&pio_lock);
+       if (unlikely(pio->pinmux_mask & pin_mask)) {
+               printk(KERN_WARNING "%s: pin(s) busy (requested 0x%x, busy 0x%x)\n",
+                      pio->name, pin_mask, pio->pinmux_mask & pin_mask);
+               spin_unlock(&pio_lock);
                goto fail;
        }
 
-       pio_writel(pio, PUER, mask);
+       pio->pinmux_mask |= pin_mask;
+
+       /* enable pull ups */
+       pio_writel(pio, PUER, pin_mask);
+
+       /* select either peripheral A or B */
        if (periph)
-               pio_writel(pio, BSR, mask);
+               pio_writel(pio, BSR, pin_mask);
        else
-               pio_writel(pio, ASR, mask);
+               pio_writel(pio, ASR, pin_mask);
+
+       /* enable peripheral control */
+       pio_writel(pio, PDR, pin_mask);
 
-       pio_writel(pio, PDR, mask);
+       /* Disable pull ups if not requested. */
        if (!(flags & AT32_GPIOF_PULLUP))
-               pio_writel(pio, PUDR, mask);
+               pio_writel(pio, PUDR, pin_mask);
+
+       spin_unlock(&pio_lock);
 
        return;
 
@@ -134,6 +147,25 @@ fail:
        dump_stack();
 }
 
+/*
+ * Undo a previous pin reservation. Will not affect the hardware
+ * configuration.
+ */
+void at32_deselect_pin(unsigned int pin)
+{
+       struct pio_device *pio;
+       unsigned int pin_index = pin & 0x1f;
+
+       pio = gpio_to_pio(pin);
+       if (unlikely(!pio)) {
+               printk("pio: invalid pin %u\n", pin);
+               dump_stack();
+               return;
+       }
+
+       clear_bit(pin_index, &pio->pinmux_mask);
+}
+
 /* Reserve a pin, preventing anyone else from changing its configuration. */
 void __init at32_reserve_pin(unsigned int pin)
 {
@@ -382,7 +414,6 @@ static int __init pio_probe(struct platform_device *pdev)
 }
 
 static struct platform_driver pio_driver = {
-       .probe          = pio_probe,
        .driver         = {
                .name           = "pio",
        },
@@ -390,7 +421,7 @@ static struct platform_driver pio_driver = {
 
 static int __init pio_init(void)
 {
-       return platform_driver_register(&pio_driver);
+       return platform_driver_probe(&pio_driver, pio_probe);
 }
 postcore_initcall(pio_init);
 
index 1fe81c3..e0eb520 100644 (file)
@@ -5,4 +5,4 @@ oprofile-y              := $(addprefix ../../../drivers/oprofile/,      \
                                event_buffer.o oprofile_files.o         \
                                oprofilefs.o oprofile_stats.o           \
                                timer_int.o)
-oprofile-y             += op_model_avr32.o
+oprofile-y             += op_model_avr32.o backtrace.o
diff --git a/arch/avr32/oprofile/backtrace.c b/arch/avr32/oprofile/backtrace.c
new file mode 100644 (file)
index 0000000..75d9ad6
--- /dev/null
@@ -0,0 +1,81 @@
+/*
+ * AVR32 specific backtracing code for oprofile
+ *
+ * Copyright 2008 Weinmann GmbH
+ *
+ * Author: Nikolaus Voss <n.voss@weinmann.de>
+ *
+ * Based on i386 oprofile backtrace code by John Levon and David Smith
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ *
+ */
+
+#include <linux/oprofile.h>
+#include <linux/sched.h>
+#include <linux/uaccess.h>
+
+/* The first two words of each frame on the stack look like this if we have
+ * frame pointers */
+struct frame_head {
+       unsigned long lr;
+       struct frame_head *fp;
+};
+
+/* copied from arch/avr32/kernel/process.c */
+static inline int valid_stack_ptr(struct thread_info *tinfo, unsigned long p)
+{
+       return (p > (unsigned long)tinfo)
+               && (p < (unsigned long)tinfo + THREAD_SIZE - 3);
+}
+
+/* copied from arch/x86/oprofile/backtrace.c */
+static struct frame_head *dump_user_backtrace(struct frame_head *head)
+{
+       struct frame_head bufhead[2];
+
+       /* Also check accessibility of one struct frame_head beyond */
+       if (!access_ok(VERIFY_READ, head, sizeof(bufhead)))
+               return NULL;
+       if (__copy_from_user_inatomic(bufhead, head, sizeof(bufhead)))
+               return NULL;
+
+       oprofile_add_trace(bufhead[0].lr);
+
+       /* frame pointers should strictly progress back up the stack
+        * (towards higher addresses) */
+       if (bufhead[0].fp <= head)
+               return NULL;
+
+       return bufhead[0].fp;
+}
+
+void avr32_backtrace(struct pt_regs * const regs, unsigned int depth)
+{
+       /* Get first frame pointer */
+       struct frame_head *head = (struct frame_head *)(regs->r7);
+
+       if (!user_mode(regs)) {
+#ifdef CONFIG_FRAME_POINTER
+               /*
+                * Traverse the kernel stack from frame to frame up to
+                * "depth" steps.
+                */
+               while (depth-- && valid_stack_ptr(task_thread_info(current),
+                                                 (unsigned long)head)) {
+                       oprofile_add_trace(head->lr);
+                       if (head->fp <= head)
+                               break;
+                       head = head->fp;
+               }
+#endif
+       } else {
+               /* Assume we have frame pointers in user mode process */
+               while (depth-- && head)
+                       head = dump_user_backtrace(head);
+       }
+}
+
+