Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/rafael...
authorLinus Torvalds <torvalds@linux-foundation.org>
Sat, 27 Feb 2010 01:22:53 +0000 (17:22 -0800)
committerLinus Torvalds <torvalds@linux-foundation.org>
Sat, 27 Feb 2010 01:22:53 +0000 (17:22 -0800)
* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/rafael/suspend-2.6:
  PM / Hibernate: Fix preallocating of memory
  PM / Hibernate: Remove swsusp.c finally
  PM / Hibernate: Remove trailing space in message
  PM: Allow SCSI devices to suspend/resume asynchronously
  PM: Allow USB devices to suspend/resume asynchronously
  USB: implement non-tree resume ordering constraints for PCI host controllers
  PM: Allow PCI devices to suspend/resume asynchronously
  PM / Hibernate: Swap, remove useless check from swsusp_read()
  PM / Hibernate: Really deprecate deprecated user ioctls
  PM: Allow device drivers to use dpm_wait()
  PM: Start asynchronous resume threads upfront
  PM: Add facility for advanced testing of async suspend/resume
  PM: Add a switch for disabling/enabling asynchronous suspend/resume
  PM: Asynchronous suspend and resume of devices
  PM: Add parent information to timing messages
  PM: Document device power attributes in sysfs
  PM / Runtime: Add sysfs switch for disabling device run-time PM

844 files changed:
Documentation/DocBook/v4l/io.xml
Documentation/DocBook/v4l/vidioc-qbuf.xml
Documentation/DocBook/v4l/vidioc-querybuf.xml
Documentation/DocBook/v4l/vidioc-reqbufs.xml
Documentation/cachetlb.txt
Documentation/dvb/get_dvb_firmware
Documentation/scsi/ChangeLog.megaraid_sas
Documentation/video4linux/CARDLIST.cx23885
Documentation/video4linux/CARDLIST.saa7134
Documentation/video4linux/CARDLIST.tuner
Documentation/video4linux/README.tlg2300 [new file with mode: 0644]
Documentation/video4linux/gspca.txt
Documentation/video4linux/v4l2-framework.txt
Documentation/video4linux/videobuf [new file with mode: 0644]
MAINTAINERS
arch/arm/include/asm/cacheflush.h
arch/arm/mach-davinci/board-dm365-evm.c
arch/arm/mach-davinci/dm355.c
arch/arm/mach-davinci/dm365.c
arch/arm/mach-davinci/dm644x.c
arch/arm/mach-davinci/include/mach/dm365.h
arch/arm/mach-nomadik/cpu-8815.c
arch/arm/mach-pxa/include/mach/camera.h
arch/parisc/include/asm/cacheflush.h
arch/s390/crypto/aes_s390.c
arch/sh/Kconfig
arch/sh/Kconfig.cpu
arch/sh/Makefile
arch/sh/boards/Kconfig
arch/sh/boards/Makefile
arch/sh/boards/board-magicpanelr2.c
arch/sh/boards/board-polaris.c
arch/sh/boards/board-sh7785lcr.c
arch/sh/boards/board-shmin.c
arch/sh/boards/board-titan.c [moved from arch/sh/boards/mach-titan/setup.c with 56% similarity]
arch/sh/boards/board-urquell.c
arch/sh/boards/mach-ap325rxa/setup.c
arch/sh/boards/mach-cayman/irq.c
arch/sh/boards/mach-dreamcast/irq.c
arch/sh/boards/mach-dreamcast/rtc.c
arch/sh/boards/mach-dreamcast/setup.c
arch/sh/boards/mach-ecovec24/sdram.S
arch/sh/boards/mach-ecovec24/setup.c
arch/sh/boards/mach-highlander/irq-r7780mp.c
arch/sh/boards/mach-highlander/irq-r7780rp.c
arch/sh/boards/mach-highlander/irq-r7785rp.c
arch/sh/boards/mach-highlander/psw.c
arch/sh/boards/mach-highlander/setup.c
arch/sh/boards/mach-hp6xx/hp6xx_apm.c
arch/sh/boards/mach-hp6xx/pm.c
arch/sh/boards/mach-hp6xx/setup.c
arch/sh/boards/mach-kfr2r09/setup.c
arch/sh/boards/mach-landisk/gio.c
arch/sh/boards/mach-landisk/irq.c
arch/sh/boards/mach-landisk/psw.c
arch/sh/boards/mach-landisk/setup.c
arch/sh/boards/mach-lboxre2/setup.c
arch/sh/boards/mach-microdev/io.c
arch/sh/boards/mach-microdev/irq.c
arch/sh/boards/mach-migor/setup.c
arch/sh/boards/mach-r2d/irq.c
arch/sh/boards/mach-r2d/setup.c
arch/sh/boards/mach-rsk/devices-rsk7203.c
arch/sh/boards/mach-sdk7780/irq.c
arch/sh/boards/mach-sdk7780/setup.c
arch/sh/boards/mach-sdk7786/Makefile [new file with mode: 0644]
arch/sh/boards/mach-sdk7786/fpga.c [new file with mode: 0644]
arch/sh/boards/mach-sdk7786/irq.c [new file with mode: 0644]
arch/sh/boards/mach-sdk7786/setup.c [new file with mode: 0644]
arch/sh/boards/mach-se/7206/io.c
arch/sh/boards/mach-se/7206/irq.c
arch/sh/boards/mach-se/7206/setup.c
arch/sh/boards/mach-se/7343/irq.c
arch/sh/boards/mach-se/7343/setup.c
arch/sh/boards/mach-se/770x/irq.c
arch/sh/boards/mach-se/770x/setup.c
arch/sh/boards/mach-se/7721/irq.c
arch/sh/boards/mach-se/7721/setup.c
arch/sh/boards/mach-se/7722/irq.c
arch/sh/boards/mach-se/7722/setup.c
arch/sh/boards/mach-se/7724/irq.c
arch/sh/boards/mach-se/7724/sdram.S
arch/sh/boards/mach-se/7724/setup.c
arch/sh/boards/mach-se/7780/irq.c
arch/sh/boards/mach-se/7780/setup.c
arch/sh/boards/mach-sh03/rtc.c
arch/sh/boards/mach-sh03/setup.c
arch/sh/boards/mach-sh7763rdp/irq.c
arch/sh/boards/mach-sh7763rdp/setup.c
arch/sh/boards/mach-snapgear/setup.c
arch/sh/boards/mach-systemh/irq.c
arch/sh/boards/mach-titan/Makefile [deleted file]
arch/sh/boards/mach-titan/io.c [deleted file]
arch/sh/boards/mach-x3proto/ilsel.c
arch/sh/boards/mach-x3proto/setup.c
arch/sh/boot/Makefile
arch/sh/boot/compressed/Makefile
arch/sh/boot/compressed/misc.c
arch/sh/cchips/hd6446x/hd64461.c
arch/sh/configs/sdk7786_defconfig [new file with mode: 0644]
arch/sh/drivers/dma/dma-pvr2.c
arch/sh/drivers/dma/dma-sh.c
arch/sh/drivers/dma/dmabrg.c
arch/sh/drivers/heartbeat.c
arch/sh/drivers/pci/Makefile
arch/sh/drivers/pci/common.c [new file with mode: 0644]
arch/sh/drivers/pci/fixups-dreamcast.c
arch/sh/drivers/pci/fixups-r7780rp.c
arch/sh/drivers/pci/fixups-rts7751r2d.c
arch/sh/drivers/pci/fixups-sdk7780.c
arch/sh/drivers/pci/fixups-se7751.c
arch/sh/drivers/pci/ops-sh4.c
arch/sh/drivers/pci/pci-dreamcast.c
arch/sh/drivers/pci/pci-sh4.h
arch/sh/drivers/pci/pci-sh5.c
arch/sh/drivers/pci/pci-sh5.h
arch/sh/drivers/pci/pci-sh7751.c
arch/sh/drivers/pci/pci-sh7780.c
arch/sh/drivers/pci/pci-sh7780.h
arch/sh/drivers/pci/pci.c
arch/sh/drivers/pci/pcie-sh7786.c
arch/sh/drivers/pci/pcie-sh7786.h
arch/sh/drivers/superhyway/ops-sh4-202.c
arch/sh/include/asm/Kbuild
arch/sh/include/asm/addrspace.h
arch/sh/include/asm/alignment.h [new file with mode: 0644]
arch/sh/include/asm/atomic-grb.h
arch/sh/include/asm/atomic-llsc.h
arch/sh/include/asm/atomic.h
arch/sh/include/asm/cacheflush.h
arch/sh/include/asm/clock.h
arch/sh/include/asm/cmpxchg-grb.h
arch/sh/include/asm/dma-mapping.h
arch/sh/include/asm/dma-sh.h
arch/sh/include/asm/dwarf.h
arch/sh/include/asm/fixmap.h
arch/sh/include/asm/fpu.h
arch/sh/include/asm/hw_breakpoint.h [new file with mode: 0644]
arch/sh/include/asm/io.h
arch/sh/include/asm/kdebug.h
arch/sh/include/asm/mmu.h
arch/sh/include/asm/mmu_context.h
arch/sh/include/asm/mmu_context_32.h
arch/sh/include/asm/module.h
arch/sh/include/asm/page.h
arch/sh/include/asm/pci.h
arch/sh/include/asm/pgalloc.h
arch/sh/include/asm/pgtable-2level.h [new file with mode: 0644]
arch/sh/include/asm/pgtable-3level.h [new file with mode: 0644]
arch/sh/include/asm/pgtable.h
arch/sh/include/asm/pgtable_32.h
arch/sh/include/asm/pgtable_64.h
arch/sh/include/asm/processor.h
arch/sh/include/asm/processor_32.h
arch/sh/include/asm/processor_64.h
arch/sh/include/asm/ptrace.h
arch/sh/include/asm/reboot.h [new file with mode: 0644]
arch/sh/include/asm/setup.h
arch/sh/include/asm/sh_bios.h
arch/sh/include/asm/suspend.h
arch/sh/include/asm/system.h
arch/sh/include/asm/system_32.h
arch/sh/include/asm/system_64.h
arch/sh/include/asm/thread_info.h
arch/sh/include/asm/tlb.h
arch/sh/include/asm/ubc.h [deleted file]
arch/sh/include/asm/uncached.h [new file with mode: 0644]
arch/sh/include/asm/vmlinux.lds.h
arch/sh/include/asm/watchdog.h
arch/sh/include/cpu-sh2/cpu/ubc.h [deleted file]
arch/sh/include/cpu-sh2/cpu/watchdog.h
arch/sh/include/cpu-sh3/cpu/dac.h
arch/sh/include/cpu-sh3/cpu/dma.h
arch/sh/include/cpu-sh3/cpu/ubc.h [deleted file]
arch/sh/include/cpu-sh4/cpu/addrspace.h
arch/sh/include/cpu-sh4/cpu/dma-sh4a.h
arch/sh/include/cpu-sh4/cpu/dma.h
arch/sh/include/cpu-sh4/cpu/mmu_context.h
arch/sh/include/cpu-sh4/cpu/sq.h
arch/sh/include/cpu-sh4/cpu/ubc.h [deleted file]
arch/sh/include/mach-common/mach/magicpanelr2.h
arch/sh/include/mach-dreamcast/mach/sysasic.h
arch/sh/include/mach-sdk7786/mach/fpga.h [new file with mode: 0644]
arch/sh/include/mach-sdk7786/mach/irq.h [new file with mode: 0644]
arch/sh/include/mach-se/mach/se7343.h
arch/sh/kernel/Makefile
arch/sh/kernel/cpu/Makefile
arch/sh/kernel/cpu/adc.c
arch/sh/kernel/cpu/clock-cpg.c
arch/sh/kernel/cpu/fpu.c [new file with mode: 0644]
arch/sh/kernel/cpu/init.c
arch/sh/kernel/cpu/irq/intc-sh5.c
arch/sh/kernel/cpu/sh2/clock-sh7619.c
arch/sh/kernel/cpu/sh2a/clock-sh7201.c
arch/sh/kernel/cpu/sh2a/clock-sh7203.c
arch/sh/kernel/cpu/sh2a/clock-sh7206.c
arch/sh/kernel/cpu/sh2a/fpu.c
arch/sh/kernel/cpu/sh3/clock-sh3.c
arch/sh/kernel/cpu/sh3/clock-sh7705.c
arch/sh/kernel/cpu/sh3/clock-sh7706.c
arch/sh/kernel/cpu/sh3/clock-sh7709.c
arch/sh/kernel/cpu/sh3/clock-sh7710.c
arch/sh/kernel/cpu/sh3/clock-sh7712.c
arch/sh/kernel/cpu/sh3/ex.S
arch/sh/kernel/cpu/sh3/probe.c
arch/sh/kernel/cpu/sh3/setup-sh3.c
arch/sh/kernel/cpu/sh4/clock-sh4-202.c
arch/sh/kernel/cpu/sh4/clock-sh4.c
arch/sh/kernel/cpu/sh4/fpu.c
arch/sh/kernel/cpu/sh4/probe.c
arch/sh/kernel/cpu/sh4/setup-sh4-202.c
arch/sh/kernel/cpu/sh4/setup-sh7750.c
arch/sh/kernel/cpu/sh4/setup-sh7760.c
arch/sh/kernel/cpu/sh4/sq.c
arch/sh/kernel/cpu/sh4a/Makefile
arch/sh/kernel/cpu/sh4a/clock-sh7343.c
arch/sh/kernel/cpu/sh4a/clock-sh7366.c
arch/sh/kernel/cpu/sh4a/clock-sh7722.c
arch/sh/kernel/cpu/sh4a/clock-sh7723.c
arch/sh/kernel/cpu/sh4a/clock-sh7724.c
arch/sh/kernel/cpu/sh4a/clock-sh7757.c
arch/sh/kernel/cpu/sh4a/clock-sh7763.c
arch/sh/kernel/cpu/sh4a/clock-sh7770.c
arch/sh/kernel/cpu/sh4a/clock-sh7780.c
arch/sh/kernel/cpu/sh4a/clock-sh7785.c
arch/sh/kernel/cpu/sh4a/clock-sh7786.c
arch/sh/kernel/cpu/sh4a/clock-shx3.c
arch/sh/kernel/cpu/sh4a/pinmux-sh7722.c
arch/sh/kernel/cpu/sh4a/setup-sh7722.c
arch/sh/kernel/cpu/sh4a/setup-sh7723.c
arch/sh/kernel/cpu/sh4a/setup-sh7724.c
arch/sh/kernel/cpu/sh4a/setup-sh7757.c
arch/sh/kernel/cpu/sh4a/setup-sh7763.c
arch/sh/kernel/cpu/sh4a/setup-sh7770.c
arch/sh/kernel/cpu/sh4a/setup-sh7780.c
arch/sh/kernel/cpu/sh4a/setup-sh7785.c
arch/sh/kernel/cpu/sh4a/setup-sh7786.c
arch/sh/kernel/cpu/sh4a/smp-shx3.c
arch/sh/kernel/cpu/sh4a/ubc.c [new file with mode: 0644]
arch/sh/kernel/cpu/sh5/clock-sh5.c
arch/sh/kernel/cpu/sh5/entry.S
arch/sh/kernel/cpu/sh5/fpu.c
arch/sh/kernel/cpu/shmobile/pm.c
arch/sh/kernel/cpu/shmobile/sleep.S
arch/sh/kernel/debugtraps.S
arch/sh/kernel/dwarf.c
arch/sh/kernel/early_printk.c [deleted file]
arch/sh/kernel/head_32.S
arch/sh/kernel/head_64.S
arch/sh/kernel/hw_breakpoint.c [new file with mode: 0644]
arch/sh/kernel/idle.c
arch/sh/kernel/io_trapped.c
arch/sh/kernel/kgdb.c
arch/sh/kernel/machine_kexec.c
arch/sh/kernel/process.c [new file with mode: 0644]
arch/sh/kernel/process_32.c
arch/sh/kernel/process_64.c
arch/sh/kernel/ptrace_32.c
arch/sh/kernel/ptrace_64.c
arch/sh/kernel/reboot.c [new file with mode: 0644]
arch/sh/kernel/setup.c
arch/sh/kernel/sh_bios.c
arch/sh/kernel/signal_32.c
arch/sh/kernel/signal_64.c
arch/sh/kernel/smp.c
arch/sh/kernel/traps.c
arch/sh/kernel/traps_32.c
arch/sh/kernel/traps_64.c
arch/sh/kernel/vmlinux.lds.S
arch/sh/math-emu/math.c
arch/sh/mm/Kconfig
arch/sh/mm/Makefile
arch/sh/mm/alignment.c [new file with mode: 0644]
arch/sh/mm/cache-debugfs.c
arch/sh/mm/cache-sh2.c
arch/sh/mm/cache-sh2a.c
arch/sh/mm/cache-sh3.c
arch/sh/mm/cache-sh4.c
arch/sh/mm/cache-sh7705.c
arch/sh/mm/cache.c
arch/sh/mm/fault_32.c
arch/sh/mm/init.c
arch/sh/mm/ioremap.c [moved from arch/sh/mm/ioremap_32.c with 78% similarity]
arch/sh/mm/ioremap_64.c [deleted file]
arch/sh/mm/ioremap_fixed.c [new file with mode: 0644]
arch/sh/mm/nommu.c
arch/sh/mm/pgtable.c [new file with mode: 0644]
arch/sh/mm/pmb.c
arch/sh/mm/tlb-pteaex.c
arch/sh/mm/tlb-sh3.c
arch/sh/mm/tlb-sh4.c
arch/sh/mm/tlb-sh5.c
arch/sh/mm/tlb-urb.c [new file with mode: 0644]
arch/sh/mm/tlbflush_32.c
arch/sh/mm/tlbflush_64.c
arch/sh/mm/uncached.c [new file with mode: 0644]
arch/sh/tools/mach-types
arch/x86/mm/kmemcheck/kmemcheck.c
arch/x86/mm/kmemcheck/shadow.c
arch/x86/mm/kmemcheck/shadow.h
crypto/Kconfig
crypto/Makefile
crypto/ablkcipher.c
crypto/aead.c
crypto/aes_generic.c
crypto/algapi.c
crypto/anubis.c
crypto/api.c
crypto/authenc.c
crypto/blowfish.c
crypto/camellia.c
crypto/cast5.c
crypto/cast6.c
crypto/cipher.c
crypto/compress.c
crypto/crc32c.c
crypto/crypto_null.c
crypto/deflate.c
crypto/des_generic.c
crypto/ecb.c
crypto/fcrypt.c
crypto/gcm.c
crypto/md5.c
crypto/pcrypt.c [new file with mode: 0644]
crypto/testmgr.c
drivers/char/hw_random/Kconfig
drivers/char/hw_random/Makefile
drivers/char/hw_random/nomadik-rng.c [new file with mode: 0644]
drivers/clocksource/sh_cmt.c
drivers/clocksource/sh_mtu2.c
drivers/clocksource/sh_tmu.c
drivers/crypto/amcc/crypto4xx_core.c
drivers/crypto/geode-aes.c
drivers/crypto/talitos.c
drivers/dma/shdma.c
drivers/dma/shdma.h
drivers/firmware/iscsi_ibft.c
drivers/media/IR/Makefile
drivers/media/IR/ir-functions.c
drivers/media/IR/ir-keymaps.c
drivers/media/IR/ir-keytable.c
drivers/media/IR/ir-sysfs.c [new file with mode: 0644]
drivers/media/common/saa7146_fops.c
drivers/media/common/tuners/tuner-types.c
drivers/media/common/tuners/tuner-xc2028.c
drivers/media/dvb/Kconfig
drivers/media/dvb/Makefile
drivers/media/dvb/bt8xx/bt878.c
drivers/media/dvb/bt8xx/dst.c
drivers/media/dvb/dm1105/Kconfig
drivers/media/dvb/dm1105/dm1105.c
drivers/media/dvb/dvb-core/dvb_frontend.c
drivers/media/dvb/dvb-core/dvb_net.c
drivers/media/dvb/dvb-core/dvb_ringbuffer.c
drivers/media/dvb/dvb-usb/Kconfig
drivers/media/dvb/dvb-usb/Makefile
drivers/media/dvb/dvb-usb/af9015.c
drivers/media/dvb/dvb-usb/af9015.h
drivers/media/dvb/dvb-usb/az6027.c [new file with mode: 0644]
drivers/media/dvb/dvb-usb/az6027.h [new file with mode: 0644]
drivers/media/dvb/dvb-usb/cxusb.c
drivers/media/dvb/dvb-usb/dib0700.h
drivers/media/dvb/dvb-usb/dib0700_core.c
drivers/media/dvb/dvb-usb/dib0700_devices.c
drivers/media/dvb/dvb-usb/dvb-usb-ids.h
drivers/media/dvb/dvb-usb/dvb-usb-init.c
drivers/media/dvb/dvb-usb/dvb-usb-remote.c
drivers/media/dvb/dvb-usb/dw2102.c
drivers/media/dvb/dvb-usb/friio-fe.c
drivers/media/dvb/dvb-usb/m920x.c
drivers/media/dvb/dvb-usb/m920x.h
drivers/media/dvb/dvb-usb/opera1.c
drivers/media/dvb/firewire/firedtv-1394.c
drivers/media/dvb/firewire/firedtv-avc.c
drivers/media/dvb/firewire/firedtv-dvb.c
drivers/media/dvb/firewire/firedtv-fw.c
drivers/media/dvb/firewire/firedtv.h
drivers/media/dvb/frontends/af9013.h
drivers/media/dvb/frontends/atbm8830.c
drivers/media/dvb/frontends/dib0090.c
drivers/media/dvb/frontends/dib8000.c
drivers/media/dvb/frontends/dibx000_common.c
drivers/media/dvb/frontends/lnbp21.c
drivers/media/dvb/frontends/si21xx.c
drivers/media/dvb/frontends/stv0900.h
drivers/media/dvb/frontends/stv0900_core.c
drivers/media/dvb/frontends/stv0900_priv.h
drivers/media/dvb/frontends/stv0900_reg.h
drivers/media/dvb/frontends/stv0900_sw.c
drivers/media/dvb/frontends/stv090x.c
drivers/media/dvb/frontends/stv090x.h
drivers/media/dvb/frontends/stv090x_priv.h
drivers/media/dvb/frontends/stv6110x.c
drivers/media/dvb/frontends/stv6110x.h
drivers/media/dvb/frontends/stv6110x_priv.h
drivers/media/dvb/frontends/tda665x.c
drivers/media/dvb/frontends/tda8261.c
drivers/media/dvb/frontends/zl10036.c
drivers/media/dvb/frontends/zl10039.c
drivers/media/dvb/mantis/mantis_hif.c
drivers/media/dvb/mantis/mantis_input.c
drivers/media/dvb/mantis/mantis_pci.c
drivers/media/dvb/ngene/Kconfig [new file with mode: 0644]
drivers/media/dvb/ngene/Makefile [new file with mode: 0644]
drivers/media/dvb/ngene/ngene-core.c [new file with mode: 0644]
drivers/media/dvb/ngene/ngene.h [new file with mode: 0644]
drivers/media/dvb/siano/sms-cards.c
drivers/media/dvb/siano/smscoreapi.c
drivers/media/dvb/siano/smscoreapi.h
drivers/media/dvb/siano/smsdvb.c
drivers/media/dvb/siano/smsir.c
drivers/media/dvb/ttpci/av7110_ir.c
drivers/media/dvb/ttpci/budget-ci.c
drivers/media/dvb/ttpci/budget.c
drivers/media/radio/Kconfig
drivers/media/radio/Makefile
drivers/media/radio/radio-timb.c [new file with mode: 0644]
drivers/media/radio/saa7706h.c [new file with mode: 0644]
drivers/media/radio/si470x/radio-si470x-common.c
drivers/media/radio/si470x/radio-si470x-usb.c
drivers/media/video/Kconfig
drivers/media/video/Makefile
drivers/media/video/bt819.c
drivers/media/video/bt8xx/bttv-driver.c
drivers/media/video/bt8xx/bttv-input.c
drivers/media/video/cafe_ccic.c
drivers/media/video/cpia.c
drivers/media/video/cx18/Kconfig
drivers/media/video/cx18/Makefile
drivers/media/video/cx18/cx18-alsa-main.c [new file with mode: 0644]
drivers/media/video/cx18/cx18-alsa-mixer.c [new file with mode: 0644]
drivers/media/video/cx18/cx18-alsa-mixer.h [new file with mode: 0644]
drivers/media/video/cx18/cx18-alsa-pcm.c [new file with mode: 0644]
drivers/media/video/cx18/cx18-alsa-pcm.h [new file with mode: 0644]
drivers/media/video/cx18/cx18-alsa.h [new file with mode: 0644]
drivers/media/video/cx18/cx18-cards.c
drivers/media/video/cx18/cx18-driver.c
drivers/media/video/cx18/cx18-driver.h
drivers/media/video/cx18/cx18-dvb.c
drivers/media/video/cx18/cx18-fileops.c
drivers/media/video/cx18/cx18-fileops.h
drivers/media/video/cx18/cx18-ioctl.c
drivers/media/video/cx18/cx18-mailbox.c
drivers/media/video/cx18/cx18-queue.c
drivers/media/video/cx18/cx18-streams.c
drivers/media/video/cx18/cx18-streams.h
drivers/media/video/cx18/cx18-version.h
drivers/media/video/cx18/cx23418.h
drivers/media/video/cx231xx/cx231xx-dvb.c
drivers/media/video/cx231xx/cx231xx-input.c
drivers/media/video/cx23885/cx23885-417.c
drivers/media/video/cx23885/cx23885-cards.c
drivers/media/video/cx23885/cx23885-dvb.c
drivers/media/video/cx23885/cx23885-input.c
drivers/media/video/cx23885/cx23885-video.c
drivers/media/video/cx23885/cx23885.h
drivers/media/video/cx25840/cx25840-core.c
drivers/media/video/cx88/cx88-alsa.c
drivers/media/video/cx88/cx88-cards.c
drivers/media/video/cx88/cx88-dvb.c
drivers/media/video/cx88/cx88-input.c
drivers/media/video/cx88/cx88-mpeg.c
drivers/media/video/cx88/cx88.h
drivers/media/video/dabusb.c
drivers/media/video/davinci/Makefile
drivers/media/video/davinci/dm355_ccdc.c
drivers/media/video/davinci/dm644x_ccdc.c
drivers/media/video/davinci/isif.c [new file with mode: 0644]
drivers/media/video/davinci/isif_regs.h [new file with mode: 0644]
drivers/media/video/davinci/vpfe_capture.c
drivers/media/video/davinci/vpss.c
drivers/media/video/em28xx/em28xx-cards.c
drivers/media/video/em28xx/em28xx-core.c
drivers/media/video/em28xx/em28xx-dvb.c
drivers/media/video/em28xx/em28xx-input.c
drivers/media/video/em28xx/em28xx-reg.h
drivers/media/video/em28xx/em28xx-vbi.c
drivers/media/video/em28xx/em28xx-video.c
drivers/media/video/em28xx/em28xx.h
drivers/media/video/et61x251/Kconfig
drivers/media/video/gspca/Kconfig
drivers/media/video/gspca/Makefile
drivers/media/video/gspca/benq.c [new file with mode: 0644]
drivers/media/video/gspca/coarse_expo_autogain.h [new file with mode: 0644]
drivers/media/video/gspca/conex.c
drivers/media/video/gspca/cpia1.c [new file with mode: 0644]
drivers/media/video/gspca/etoms.c
drivers/media/video/gspca/gl860/gl860.c
drivers/media/video/gspca/gspca.c
drivers/media/video/gspca/gspca.h
drivers/media/video/gspca/m5602/m5602_mt9m111.c
drivers/media/video/gspca/m5602/m5602_ov7660.c
drivers/media/video/gspca/m5602/m5602_ov7660.h
drivers/media/video/gspca/m5602/m5602_ov9650.c
drivers/media/video/gspca/m5602/m5602_po1030.c
drivers/media/video/gspca/m5602/m5602_s5k4aa.c
drivers/media/video/gspca/m5602/m5602_s5k83a.c
drivers/media/video/gspca/mars.c
drivers/media/video/gspca/mr97310a.c
drivers/media/video/gspca/ov519.c
drivers/media/video/gspca/ov534.c
drivers/media/video/gspca/ov534_9.c [new file with mode: 0644]
drivers/media/video/gspca/pac207.c
drivers/media/video/gspca/pac7302.c
drivers/media/video/gspca/pac7311.c
drivers/media/video/gspca/pac_common.h
drivers/media/video/gspca/sn9c2028.c [new file with mode: 0644]
drivers/media/video/gspca/sn9c2028.h [new file with mode: 0644]
drivers/media/video/gspca/sn9c20x.c
drivers/media/video/gspca/sonixb.c
drivers/media/video/gspca/sonixj.c
drivers/media/video/gspca/spca500.c
drivers/media/video/gspca/spca501.c
drivers/media/video/gspca/spca505.c
drivers/media/video/gspca/spca506.c
drivers/media/video/gspca/spca508.c
drivers/media/video/gspca/spca561.c
drivers/media/video/gspca/sq905c.c
drivers/media/video/gspca/stk014.c
drivers/media/video/gspca/stv0680.c
drivers/media/video/gspca/stv06xx/stv06xx.c
drivers/media/video/gspca/sunplus.c
drivers/media/video/gspca/t613.c
drivers/media/video/gspca/tv8532.c
drivers/media/video/gspca/vc032x.c
drivers/media/video/gspca/zc3xx.c
drivers/media/video/hdpvr/hdpvr-core.c
drivers/media/video/hdpvr/hdpvr-video.c
drivers/media/video/hdpvr/hdpvr.h
drivers/media/video/hexium_gemini.c
drivers/media/video/hexium_orion.c
drivers/media/video/ir-kbd-i2c.c
drivers/media/video/ivtv/ivtv-cards.c
drivers/media/video/ivtv/ivtv-cards.h
drivers/media/video/ivtv/ivtv-driver.c
drivers/media/video/ivtv/ivtv-firmware.c
drivers/media/video/ivtv/ivtv-irq.c
drivers/media/video/ivtv/ivtv-mailbox.c
drivers/media/video/ivtv/ivtv-mailbox.h
drivers/media/video/ivtv/ivtv-streams.c
drivers/media/video/ivtv/ivtv-udma.c
drivers/media/video/mt9v022.c
drivers/media/video/mxb.c
drivers/media/video/ov772x.c
drivers/media/video/pvrusb2/pvrusb2-hdw-internal.h
drivers/media/video/pvrusb2/pvrusb2-hdw.c
drivers/media/video/pvrusb2/pvrusb2-hdw.h
drivers/media/video/pxa_camera.c
drivers/media/video/rj54n1cb0c.c
drivers/media/video/saa7115.c
drivers/media/video/saa7127.c
drivers/media/video/saa7134/saa7134-cards.c
drivers/media/video/saa7134/saa7134-input.c
drivers/media/video/saa7134/saa7134-video.c
drivers/media/video/saa7134/saa7134.h
drivers/media/video/saa7164/saa7164-api.c
drivers/media/video/sh_mobile_ceu_camera.c
drivers/media/video/sn9c102/Kconfig
drivers/media/video/sn9c102/sn9c102_devtable.h
drivers/media/video/soc_camera.c
drivers/media/video/soc_mediabus.c
drivers/media/video/tlg2300/Kconfig [new file with mode: 0644]
drivers/media/video/tlg2300/Makefile [new file with mode: 0644]
drivers/media/video/tlg2300/pd-alsa.c [new file with mode: 0644]
drivers/media/video/tlg2300/pd-common.h [new file with mode: 0644]
drivers/media/video/tlg2300/pd-dvb.c [new file with mode: 0644]
drivers/media/video/tlg2300/pd-main.c [new file with mode: 0644]
drivers/media/video/tlg2300/pd-radio.c [new file with mode: 0644]
drivers/media/video/tlg2300/pd-video.c [new file with mode: 0644]
drivers/media/video/tlg2300/vendorcmds.h [new file with mode: 0644]
drivers/media/video/tuner-core.c
drivers/media/video/tveeprom.c
drivers/media/video/tvp7002.c [new file with mode: 0644]
drivers/media/video/tvp7002_reg.h [new file with mode: 0644]
drivers/media/video/tw9910.c
drivers/media/video/usbvision/usbvision-video.c
drivers/media/video/uvc/uvc_ctrl.c
drivers/media/video/uvc/uvc_driver.c
drivers/media/video/uvc/uvc_queue.c
drivers/media/video/uvc/uvc_v4l2.c
drivers/media/video/uvc/uvc_video.c
drivers/media/video/uvc/uvcvideo.h
drivers/media/video/v4l2-compat-ioctl32.c
drivers/media/video/videobuf-dma-sg.c
drivers/media/video/videobuf-vmalloc.c
drivers/media/video/vivi.c
drivers/media/video/zc0301/Kconfig
drivers/media/video/zoran/zoran_device.c
drivers/media/video/zoran/zoran_driver.c
drivers/media/video/zr364xx.c
drivers/message/fusion/mptbase.c
drivers/message/fusion/mptbase.h
drivers/message/fusion/mptctl.c
drivers/message/fusion/mptfc.c
drivers/message/fusion/mptsas.c
drivers/message/fusion/mptscsih.c
drivers/mfd/Kconfig
drivers/mfd/Makefile
drivers/mfd/timberdale.c [new file with mode: 0644]
drivers/mfd/timberdale.h [new file with mode: 0644]
drivers/mtd/nand/Kconfig
drivers/mtd/nand/sh_flctl.c
drivers/platform/x86/Kconfig
drivers/platform/x86/classmate-laptop.c
drivers/platform/x86/compal-laptop.c
drivers/platform/x86/dell-laptop.c
drivers/platform/x86/hp-wmi.c
drivers/platform/x86/toshiba_acpi.c
drivers/s390/scsi/zfcp_aux.c
drivers/s390/scsi/zfcp_ccw.c
drivers/s390/scsi/zfcp_dbf.c
drivers/s390/scsi/zfcp_dbf.h
drivers/s390/scsi/zfcp_def.h
drivers/s390/scsi/zfcp_erp.c
drivers/s390/scsi/zfcp_ext.h
drivers/s390/scsi/zfcp_fc.c
drivers/s390/scsi/zfcp_fsf.c
drivers/s390/scsi/zfcp_qdio.c
drivers/s390/scsi/zfcp_qdio.h [new file with mode: 0644]
drivers/s390/scsi/zfcp_reqlist.h [new file with mode: 0644]
drivers/s390/scsi/zfcp_scsi.c
drivers/s390/scsi/zfcp_sysfs.c
drivers/scsi/FlashPoint.c
drivers/scsi/be2iscsi/be.h
drivers/scsi/be2iscsi/be_cmds.c
drivers/scsi/be2iscsi/be_cmds.h
drivers/scsi/be2iscsi/be_iscsi.c
drivers/scsi/be2iscsi/be_iscsi.h
drivers/scsi/be2iscsi/be_main.c
drivers/scsi/be2iscsi/be_main.h
drivers/scsi/be2iscsi/be_mgmt.c
drivers/scsi/be2iscsi/be_mgmt.h
drivers/scsi/bnx2i/bnx2i_iscsi.c
drivers/scsi/constants.c
drivers/scsi/cxgb3i/cxgb3i_iscsi.c
drivers/scsi/cxgb3i/cxgb3i_offload.c
drivers/scsi/cxgb3i/cxgb3i_pdu.c
drivers/scsi/device_handler/scsi_dh_alua.c
drivers/scsi/eata.c
drivers/scsi/esp_scsi.c
drivers/scsi/fnic/fnic.h
drivers/scsi/fnic/fnic_main.c
drivers/scsi/fnic/vnic_devcmd.h
drivers/scsi/gdth.c
drivers/scsi/gdth.h
drivers/scsi/gdth_ioctl.h
drivers/scsi/gdth_proc.c
drivers/scsi/gdth_proc.h
drivers/scsi/hpsa.c
drivers/scsi/hpsa.h
drivers/scsi/hpsa_cmd.h
drivers/scsi/ibmmca.c
drivers/scsi/ibmvscsi/ibmvscsi.c
drivers/scsi/iscsi_tcp.c
drivers/scsi/libiscsi.c
drivers/scsi/libsrp.c
drivers/scsi/lpfc/lpfc.h
drivers/scsi/lpfc/lpfc_attr.c
drivers/scsi/lpfc/lpfc_bsg.c
drivers/scsi/lpfc/lpfc_bsg.h [new file with mode: 0644]
drivers/scsi/lpfc/lpfc_crtn.h
drivers/scsi/lpfc/lpfc_ct.c
drivers/scsi/lpfc/lpfc_els.c
drivers/scsi/lpfc/lpfc_hbadisc.c
drivers/scsi/lpfc/lpfc_hw.h
drivers/scsi/lpfc/lpfc_hw4.h
drivers/scsi/lpfc/lpfc_init.c
drivers/scsi/lpfc/lpfc_mbox.c
drivers/scsi/lpfc/lpfc_nl.h
drivers/scsi/lpfc/lpfc_nportdisc.c
drivers/scsi/lpfc/lpfc_scsi.c
drivers/scsi/lpfc/lpfc_scsi.h
drivers/scsi/lpfc/lpfc_sli.c
drivers/scsi/lpfc/lpfc_sli.h
drivers/scsi/lpfc/lpfc_sli4.h
drivers/scsi/lpfc/lpfc_version.h
drivers/scsi/lpfc/lpfc_vport.c
drivers/scsi/mac_esp.c
drivers/scsi/megaraid/megaraid_sas.c
drivers/scsi/megaraid/megaraid_sas.h
drivers/scsi/mpt2sas/Kconfig
drivers/scsi/mpt2sas/mpi/mpi2.h
drivers/scsi/mpt2sas/mpi/mpi2_cnfg.h
drivers/scsi/mpt2sas/mpi/mpi2_history.txt
drivers/scsi/mpt2sas/mpi/mpi2_init.h
drivers/scsi/mpt2sas/mpi/mpi2_ioc.h
drivers/scsi/mpt2sas/mpi/mpi2_sas.h
drivers/scsi/mpt2sas/mpt2sas_base.c
drivers/scsi/mpt2sas/mpt2sas_base.h
drivers/scsi/mpt2sas/mpt2sas_config.c
drivers/scsi/mpt2sas/mpt2sas_ctl.c
drivers/scsi/mpt2sas/mpt2sas_scsih.c
drivers/scsi/mpt2sas/mpt2sas_transport.c
drivers/scsi/pm8001/pm8001_init.c
drivers/scsi/qla1280.c
drivers/scsi/qla2xxx/qla_attr.c
drivers/scsi/qla2xxx/qla_def.h
drivers/scsi/qla2xxx/qla_fw.h
drivers/scsi/qla2xxx/qla_gbl.h
drivers/scsi/qla2xxx/qla_init.c
drivers/scsi/qla2xxx/qla_iocb.c
drivers/scsi/qla2xxx/qla_isr.c
drivers/scsi/qla2xxx/qla_mbx.c
drivers/scsi/qla2xxx/qla_os.c
drivers/scsi/qla2xxx/qla_version.h
drivers/scsi/qla4xxx/ql4_init.c
drivers/scsi/raid_class.c
drivers/scsi/scsi.c
drivers/scsi/scsi_lib.c
drivers/scsi/scsi_sas_internal.h
drivers/scsi/scsi_scan.c
drivers/scsi/scsi_sysfs.c
drivers/scsi/scsi_transport_fc.c
drivers/scsi/scsi_transport_sas.c
drivers/scsi/sd.c
drivers/scsi/ses.c
drivers/scsi/u14-34f.c
drivers/scsi/vmw_pvscsi.c
drivers/serial/sh-sci.h
drivers/sh/intc.c
drivers/sh/pfc.c
drivers/staging/go7007/s2250-board.c
drivers/video/pvr2fb.c
drivers/video/sh_mobile_lcdcfb.c
fs/dlm/ast.c
fs/dlm/ast.h
fs/dlm/debug_fs.c
fs/dlm/dlm_internal.h
fs/dlm/lock.c
fs/dlm/lockspace.c
fs/dlm/user.c
fs/dlm/user.h
fs/nfs/Kconfig
fs/xfs/Makefile
fs/xfs/linux-2.6/kmem.c
fs/xfs/linux-2.6/kmem.h
fs/xfs/linux-2.6/xfs_acl.c
fs/xfs/linux-2.6/xfs_buf.c
fs/xfs/linux-2.6/xfs_buf.h
fs/xfs/linux-2.6/xfs_fs_subr.c
fs/xfs/linux-2.6/xfs_ioctl.c
fs/xfs/linux-2.6/xfs_ioctl.h
fs/xfs/linux-2.6/xfs_ioctl32.c
fs/xfs/linux-2.6/xfs_iops.c
fs/xfs/linux-2.6/xfs_lrw.c
fs/xfs/linux-2.6/xfs_lrw.h
fs/xfs/linux-2.6/xfs_super.c
fs/xfs/linux-2.6/xfs_sync.c
fs/xfs/linux-2.6/xfs_sync.h
fs/xfs/linux-2.6/xfs_trace.h
fs/xfs/linux-2.6/xfs_xattr.c
fs/xfs/quota/xfs_dquot.c
fs/xfs/quota/xfs_dquot_item.c
fs/xfs/quota/xfs_dquot_item.h
fs/xfs/quota/xfs_qm.c
fs/xfs/quota/xfs_qm_bhv.c
fs/xfs/quota/xfs_qm_syscalls.c
fs/xfs/quota/xfs_trans_dquot.c
fs/xfs/xfs_acl.h
fs/xfs/xfs_ag.h
fs/xfs/xfs_alloc.c
fs/xfs/xfs_alloc_btree.c
fs/xfs/xfs_attr.c
fs/xfs/xfs_attr.h
fs/xfs/xfs_attr_leaf.c
fs/xfs/xfs_attr_sf.h
fs/xfs/xfs_bmap.c
fs/xfs/xfs_bmap_btree.c
fs/xfs/xfs_bmap_btree.h
fs/xfs/xfs_btree.c
fs/xfs/xfs_buf_item.c
fs/xfs/xfs_da_btree.c
fs/xfs/xfs_da_btree.h
fs/xfs/xfs_dfrag.c
fs/xfs/xfs_dfrag.h
fs/xfs/xfs_dir2.c
fs/xfs/xfs_dir2.h
fs/xfs/xfs_dir2_block.c
fs/xfs/xfs_dir2_leaf.c
fs/xfs/xfs_dir2_node.c
fs/xfs/xfs_dir2_node.h
fs/xfs/xfs_dir2_sf.c
fs/xfs/xfs_extfree_item.c
fs/xfs/xfs_filestream.c
fs/xfs/xfs_filestream.h
fs/xfs/xfs_fsops.c
fs/xfs/xfs_ialloc.c
fs/xfs/xfs_iget.c
fs/xfs/xfs_inode.c
fs/xfs/xfs_inode.h
fs/xfs/xfs_inode_item.c
fs/xfs/xfs_inode_item.h
fs/xfs/xfs_itable.c
fs/xfs/xfs_log.c
fs/xfs/xfs_log.h
fs/xfs/xfs_log_priv.h
fs/xfs/xfs_log_recover.c
fs/xfs/xfs_log_recover.h
fs/xfs/xfs_mount.c
fs/xfs/xfs_mount.h
fs/xfs/xfs_mru_cache.c
fs/xfs/xfs_mru_cache.h
fs/xfs/xfs_quota.h
fs/xfs/xfs_rw.c
fs/xfs/xfs_rw.h
fs/xfs/xfs_trans.c
fs/xfs/xfs_trans.h
fs/xfs/xfs_trans_ail.c
fs/xfs/xfs_trans_buf.c
fs/xfs/xfs_types.h
fs/xfs/xfs_vnodeops.c
fs/xfs/xfs_vnodeops.h
include/crypto/md5.h [new file with mode: 0644]
include/crypto/pcrypt.h [new file with mode: 0644]
include/linux/highmem.h
include/linux/mtd/sh_flctl.h
include/linux/padata.h [new file with mode: 0644]
include/linux/pfkeyv2.h
include/linux/raid_class.h
include/linux/sh_intc.h
include/linux/videodev2.h
include/media/davinci/isif.h [new file with mode: 0644]
include/media/davinci/vpss.h
include/media/ir-common.h
include/media/ir-core.h
include/media/ir-kbd-i2c.h
include/media/ov772x.h
include/media/saa7146_vv.h
include/media/soc_camera.h
include/media/timb_radio.h [new file with mode: 0644]
include/media/tuner.h
include/media/tvp7002.h [new file with mode: 0644]
include/media/tw9910.h
include/media/v4l2-chip-ident.h
include/media/v4l2-subdev.h
include/scsi/scsi_device.h
include/scsi/scsi_transport_sas.h
include/video/sh_mobile_lcdc.h
init/Kconfig
kernel/Makefile
kernel/padata.c [new file with mode: 0644]
lib/Kconfig.debug
mm/Kconfig
net/xfrm/xfrm_algo.c

index f92f24323b2aad000a4f6890368c03aec5dcaf7b..e870330cbf772fc757f5c6400ed4cfb61ed72486 100644 (file)
@@ -589,7 +589,8 @@ number of a video input as in &v4l2-input; field
            <entry></entry>
            <entry>A place holder for future extensions and custom
 (driver defined) buffer types
-<constant>V4L2_BUF_TYPE_PRIVATE</constant> and higher.</entry>
+<constant>V4L2_BUF_TYPE_PRIVATE</constant> and higher. Applications
+should set this to 0.</entry>
          </row>
        </tbody>
       </tgroup>
index 1870817781548b409889d9ed93220cb26162ec74..b843bd7b389735725bd7d68954560509efe5cc41 100644 (file)
@@ -54,12 +54,10 @@ to enqueue an empty (capturing) or filled (output) buffer in the
 driver's incoming queue. The semantics depend on the selected I/O
 method.</para>
 
-    <para>To enqueue a <link linkend="mmap">memory mapped</link>
-buffer applications set the <structfield>type</structfield> field of a
-&v4l2-buffer; to the same buffer type as previously &v4l2-format;
-<structfield>type</structfield> and &v4l2-requestbuffers;
-<structfield>type</structfield>, the <structfield>memory</structfield>
-field to <constant>V4L2_MEMORY_MMAP</constant> and the
+    <para>To enqueue a buffer applications set the <structfield>type</structfield>
+field of a &v4l2-buffer; to the same buffer type as was previously used
+with &v4l2-format; <structfield>type</structfield> and &v4l2-requestbuffers;
+<structfield>type</structfield>. Applications must also set the
 <structfield>index</structfield> field. Valid index numbers range from
 zero to the number of buffers allocated with &VIDIOC-REQBUFS;
 (&v4l2-requestbuffers; <structfield>count</structfield>) minus one. The
@@ -70,8 +68,19 @@ intended for output (<structfield>type</structfield> is
 <constant>V4L2_BUF_TYPE_VBI_OUTPUT</constant>) applications must also
 initialize the <structfield>bytesused</structfield>,
 <structfield>field</structfield> and
-<structfield>timestamp</structfield> fields. See <xref
-       linkend="buffer" /> for details. When
+<structfield>timestamp</structfield> fields, see <xref
+linkend="buffer" /> for details.
+Applications must also set <structfield>flags</structfield> to 0. If a driver
+supports capturing from specific video inputs and you want to specify a video
+input, then <structfield>flags</structfield> should be set to
+<constant>V4L2_BUF_FLAG_INPUT</constant> and the field
+<structfield>input</structfield> must be initialized to the desired input.
+The <structfield>reserved</structfield> field must be set to 0.
+</para>
+
+    <para>To enqueue a <link linkend="mmap">memory mapped</link>
+buffer applications set the <structfield>memory</structfield>
+field to <constant>V4L2_MEMORY_MMAP</constant>. When
 <constant>VIDIOC_QBUF</constant> is called with a pointer to this
 structure the driver sets the
 <constant>V4L2_BUF_FLAG_MAPPED</constant> and
@@ -81,14 +90,10 @@ structure the driver sets the
 &EINVAL;.</para>
 
     <para>To enqueue a <link linkend="userp">user pointer</link>
-buffer applications set the <structfield>type</structfield> field of a
-&v4l2-buffer; to the same buffer type as previously &v4l2-format;
-<structfield>type</structfield> and &v4l2-requestbuffers;
-<structfield>type</structfield>, the <structfield>memory</structfield>
-field to <constant>V4L2_MEMORY_USERPTR</constant> and the
+buffer applications set the <structfield>memory</structfield>
+field to <constant>V4L2_MEMORY_USERPTR</constant>, the
 <structfield>m.userptr</structfield> field to the address of the
-buffer and <structfield>length</structfield> to its size. When the
-buffer is intended for output additional fields must be set as above.
+buffer and <structfield>length</structfield> to its size.
 When <constant>VIDIOC_QBUF</constant> is called with a pointer to this
 structure the driver sets the <constant>V4L2_BUF_FLAG_QUEUED</constant>
 flag and clears the <constant>V4L2_BUF_FLAG_MAPPED</constant> and
@@ -96,13 +101,14 @@ flag and clears the <constant>V4L2_BUF_FLAG_MAPPED</constant> and
 <structfield>flags</structfield> field, or it returns an error code.
 This ioctl locks the memory pages of the buffer in physical memory,
 they cannot be swapped out to disk. Buffers remain locked until
-dequeued, until the &VIDIOC-STREAMOFF; or &VIDIOC-REQBUFS; ioctl are
+dequeued, until the &VIDIOC-STREAMOFF; or &VIDIOC-REQBUFS; ioctl is
 called, or until the device is closed.</para>
 
     <para>Applications call the <constant>VIDIOC_DQBUF</constant>
 ioctl to dequeue a filled (capturing) or displayed (output) buffer
 from the driver's outgoing queue. They just set the
-<structfield>type</structfield> and <structfield>memory</structfield>
+<structfield>type</structfield>, <structfield>memory</structfield>
+and <structfield>reserved</structfield>
 fields of a &v4l2-buffer; as above, when <constant>VIDIOC_DQBUF</constant>
 is called with a pointer to this structure the driver fills the
 remaining fields or returns an error code.</para>
index d834993e619172df3dae1f2b05495034c7ce1c73..e649805a4908838d2f4028099a8aa24a234c6db7 100644 (file)
@@ -54,12 +54,13 @@ buffer at any time after buffers have been allocated with the
 &VIDIOC-REQBUFS; ioctl.</para>
 
     <para>Applications set the <structfield>type</structfield> field
-    of a &v4l2-buffer; to the same buffer type as previously
+    of a &v4l2-buffer; to the same buffer type as was previously used with
 &v4l2-format; <structfield>type</structfield> and &v4l2-requestbuffers;
 <structfield>type</structfield>, and the <structfield>index</structfield>
     field. Valid index numbers range from zero
 to the number of buffers allocated with &VIDIOC-REQBUFS;
     (&v4l2-requestbuffers; <structfield>count</structfield>) minus one.
+The <structfield>reserved</structfield> field should to set to 0.
 After calling <constant>VIDIOC_QUERYBUF</constant> with a pointer to
     this structure drivers return an error code or fill the rest of
 the structure.</para>
@@ -68,8 +69,8 @@ the structure.</para>
 <constant>V4L2_BUF_FLAG_MAPPED</constant>,
 <constant>V4L2_BUF_FLAG_QUEUED</constant> and
 <constant>V4L2_BUF_FLAG_DONE</constant> flags will be valid. The
-<structfield>memory</structfield> field will be set to
-<constant>V4L2_MEMORY_MMAP</constant>, the <structfield>m.offset</structfield>
+<structfield>memory</structfield> field will be set to the current
+I/O method, the <structfield>m.offset</structfield>
 contains the offset of the buffer from the start of the device memory,
 the <structfield>length</structfield> field its size. The driver may
 or may not set the remaining fields and flags, they are meaningless in
index bab38084454fd0370985a72ff9cd44b4c457bfa0..1c08163720741d7f5fc081f8e0681e957fec0232 100644 (file)
@@ -54,23 +54,23 @@ I/O. Memory mapped buffers are located in device memory and must be
 allocated with this ioctl before they can be mapped into the
 application's address space. User buffers are allocated by
 applications themselves, and this ioctl is merely used to switch the
-driver into user pointer I/O mode.</para>
+driver into user pointer I/O mode and to setup some internal structures.</para>
 
-    <para>To allocate device buffers applications initialize three
-fields of a <structname>v4l2_requestbuffers</structname> structure.
+    <para>To allocate device buffers applications initialize all
+fields of the <structname>v4l2_requestbuffers</structname> structure.
 They set the <structfield>type</structfield> field to the respective
 stream or buffer type, the <structfield>count</structfield> field to
-the desired number of buffers, and <structfield>memory</structfield>
-must be set to <constant>V4L2_MEMORY_MMAP</constant>. When the ioctl
-is called with a pointer to this structure the driver attempts to
-allocate the requested number of buffers and stores the actual number
+the desired number of buffers, <structfield>memory</structfield>
+must be set to the requested I/O method and the reserved array
+must be zeroed. When the ioctl
+is called with a pointer to this structure the driver will attempt to allocate
+the requested number of buffers and it stores the actual number
 allocated in the <structfield>count</structfield> field. It can be
 smaller than the number requested, even zero, when the driver runs out
-of free memory. A larger number is possible when the driver requires
-more buffers to function correctly.<footnote>
-       <para>For example video output requires at least two buffers,
+of free memory. A larger number is also possible when the driver requires
+more buffers to function correctly. For example video output requires at least two buffers,
 one displayed and one filled by the application.</para>
-       </footnote> When memory mapping I/O is not supported the ioctl
+    <para>When the I/O method is not supported the ioctl
 returns an &EINVAL;.</para>
 
     <para>Applications can call <constant>VIDIOC_REQBUFS</constant>
@@ -81,14 +81,6 @@ in progress, an implicit &VIDIOC-STREAMOFF;. <!-- mhs: I see no
 reason why munmap()ping one or even all buffers must imply
 streamoff.--></para>
 
-    <para>To negotiate user pointer I/O, applications initialize only
-the <structfield>type</structfield> field and set
-<structfield>memory</structfield> to
-<constant>V4L2_MEMORY_USERPTR</constant>. When the ioctl is called
-with a pointer to this structure the driver prepares for user pointer
-I/O, when this I/O method is not supported the ioctl returns an
-&EINVAL;.</para>
-
     <table pgwide="1" frame="none" id="v4l2-requestbuffers">
       <title>struct <structname>v4l2_requestbuffers</structname></title>
       <tgroup cols="3">
@@ -97,9 +89,7 @@ I/O, when this I/O method is not supported the ioctl returns an
          <row>
            <entry>__u32</entry>
            <entry><structfield>count</structfield></entry>
-           <entry>The number of buffers requested or granted. This
-field is only used when <structfield>memory</structfield> is set to
-<constant>V4L2_MEMORY_MMAP</constant>.</entry>
+           <entry>The number of buffers requested or granted.</entry>
          </row>
          <row>
            <entry>&v4l2-buf-type;</entry>
@@ -120,7 +110,7 @@ as the &v4l2-format; <structfield>type</structfield> field. See <xref
            <entry><structfield>reserved</structfield>[2]</entry>
            <entry>A place holder for future extensions and custom
 (driver defined) buffer types <constant>V4L2_BUF_TYPE_PRIVATE</constant> and
-higher.</entry>
+higher. This array should be zeroed by applications.</entry>
          </row>
        </tbody>
       </tgroup>
index da42ab414c4864db4bb9d35b0cca9005b27670d2..b231414bb8bc4b84d218fc2f2f75d5665d0a0761 100644 (file)
@@ -377,3 +377,27 @@ maps this page at its virtual address.
        All the functionality of flush_icache_page can be implemented in
        flush_dcache_page and update_mmu_cache. In 2.7 the hope is to
        remove this interface completely.
+
+The final category of APIs is for I/O to deliberately aliased address
+ranges inside the kernel.  Such aliases are set up by use of the
+vmap/vmalloc API.  Since kernel I/O goes via physical pages, the I/O
+subsystem assumes that the user mapping and kernel offset mapping are
+the only aliases.  This isn't true for vmap aliases, so anything in
+the kernel trying to do I/O to vmap areas must manually manage
+coherency.  It must do this by flushing the vmap range before doing
+I/O and invalidating it after the I/O returns.
+
+  void flush_kernel_vmap_range(void *vaddr, int size)
+       flushes the kernel cache for a given virtual address range in
+       the vmap area.  This is to make sure that any data the kernel
+       modified in the vmap range is made visible to the physical
+       page.  The design is to make this area safe to perform I/O on.
+       Note that this API does *not* also flush the offset map alias
+       of the area.
+
+  void invalidate_kernel_vmap_range(void *vaddr, int size) invalidates
+       the cache for a given virtual address range in the vmap area
+       which prevents the processor from making the cache stale by
+       speculatively reading data while the I/O was occurring to the
+       physical pages.  This is only necessary for data reads into the
+       vmap area.
index 14b7b5a3bcb9a1c2b4f36948974c649c472afaa2..239cbdbf4d120edc39869cd1af74764c01c4acbe 100644 (file)
@@ -26,7 +26,7 @@ use IO::Handle;
                "dec3000s", "vp7041", "dibusb", "nxt2002", "nxt2004",
                "or51211", "or51132_qam", "or51132_vsb", "bluebird",
                "opera1", "cx231xx", "cx18", "cx23885", "pvrusb2", "mpc718",
-               "af9015");
+               "af9015", "ngene");
 
 # Check args
 syntax() if (scalar(@ARGV) != 1);
@@ -39,7 +39,7 @@ for ($i=0; $i < scalar(@components); $i++) {
        die $@ if $@;
        print STDERR <<EOF;
 Firmware(s) $outfile extracted successfully.
-Now copy it(they) to either /usr/lib/hotplug/firmware or /lib/firmware
+Now copy it(them) to either /usr/lib/hotplug/firmware or /lib/firmware
 (depending on configuration of firmware hotplug).
 EOF
        exit(0);
@@ -549,6 +549,24 @@ sub af9015 {
        close INFILE;
 }
 
+sub ngene {
+    my $url = "http://www.digitaldevices.de/download/";
+    my $file1 = "ngene_15.fw";
+    my $hash1 = "d798d5a757121174f0dbc5f2833c0c85";
+    my $file2 = "ngene_17.fw";
+    my $hash2 = "26b687136e127b8ac24b81e0eeafc20b";
+
+    checkstandard();
+
+    wgetfile($file1, $url . $file1);
+    verify($file1, $hash1);
+
+    wgetfile($file2, $url . $file2);
+    verify($file2, $hash2);
+
+    "$file1, $file2";
+}
+
 # ---------------------------------------------------------------
 # Utilities
 
@@ -667,6 +685,7 @@ sub delzero{
 sub syntax() {
     print STDERR "syntax: get_dvb_firmware <component>\n";
     print STDERR "Supported components:\n";
+    @components = sort @components;
     for($i=0; $i < scalar(@components); $i++) {
        print STDERR "\t" . $components[$i] . "\n";
     }
index 17ffa06077126a96441b867cc77fea8cfd093ed6..30023568805e2a56077fa4cfbd088ee666522ab0 100644 (file)
@@ -1,3 +1,19 @@
+1 Release Date    : Thur.  Oct 29, 2009 09:12:45 PST 2009 -
+                       (emaild-id:megaraidlinux@lsi.com)
+                       Bo Yang
+
+2 Current Version : 00.00.04.17.1-rc1
+3 Older Version   : 00.00.04.12
+
+1.     Add the pad_0 in mfi frame structure to 0 to fix the
+       context value larger than 32bit value issue.
+
+2.     Add the logic drive list to the driver.  Driver will
+       keep the logic drive list internal after driver load.
+
+3.     driver fixed the device update issue after get the AEN
+       PD delete/ADD, LD add/delete from FW.
+
 1 Release Date    : Tues.  July 28, 2009 10:12:45 PST 2009 -
                        (emaild-id:megaraidlinux@lsi.com)
                        Bo Yang
index 7539e8fa1ffd91ba02dcbc2c4a422e0d2dd24d9e..16ca030e11856d93f246e86c8812784aff6837d9 100644 (file)
@@ -26,3 +26,4 @@
  25 -> Compro VideoMate E800                               [1858:e800]
  26 -> Hauppauge WinTV-HVR1290                             [0070:8551]
  27 -> Mygica X8558 PRO DMB-TH                             [14f1:8578]
+ 28 -> LEADTEK WinFast PxTV1200                            [107d:6f22]
index fce1e7eb047484bf7c50fd019a3e3842fd9434ce..b4a767060ed775f24f037ec858e58b41f2e0a8bc 100644 (file)
 173 -> Zolid Hybrid TV Tuner PCI                [1131:2004]
 174 -> Asus Europa Hybrid OEM                   [1043:4847]
 175 -> Leadtek Winfast DTV1000S                 [107d:6655]
+176 -> Beholder BeholdTV 505 RDS                [0000:5051]
index e0d298fe8830ce7f69e434a1542f632d56b7c286..9b2e0dd6017ed6b14d369e88a7dcbd02a4fb4808 100644 (file)
@@ -81,3 +81,4 @@ tuner=80 - Philips FQ1216LME MK3 PAL/SECAM w/active loopthrough
 tuner=81 - Partsnic (Daewoo) PTI-5NF05
 tuner=82 - Philips CU1216L
 tuner=83 - NXP TDA18271
+tuner=84 - Sony BTF-Pxn01Z
diff --git a/Documentation/video4linux/README.tlg2300 b/Documentation/video4linux/README.tlg2300
new file mode 100644 (file)
index 0000000..416ccb9
--- /dev/null
@@ -0,0 +1,47 @@
+tlg2300 release notes
+====================
+
+This is a v4l2/dvb device driver for the tlg2300 chip.
+
+
+current status
+==============
+
+video
+       - support mmap and read().(no overlay)
+
+audio
+       - The driver will register a ALSA card for the audio input.
+
+vbi
+       - Works for almost TV norms.
+
+dvb-t
+       - works for DVB-T
+
+FM
+       - Works for radio.
+
+---------------------------------------------------------------------------
+TESTED APPLICATIONS:
+
+-VLC1.0.4 test the video and dvb. The GUI is friendly to use.
+
+-Mplayer test the video.
+
+-Mplayer test the FM. The mplayer should be compiled with --enable-radio and
+        --enable-radio-capture.
+       The command runs as this(The alsa audio registers to card 1):
+       #mplayer radio://103.7/capture/ -radio adevice=hw=1,0:arate=48000 \
+               -rawaudio rate=48000:channels=2
+
+---------------------------------------------------------------------------
+KNOWN PROBLEMS:
+about preemphasis:
+       You can set the preemphasis for radio by the following command:
+       #v4l2-ctl -d /dev/radio0 --set-ctrl=pre_emphasis_settings=1
+
+       "pre_emphasis_settings=1" means that you select the 50us. If you want
+       to select the 75us, please use "pre_emphasis_settings=2"
+
+
index 1800a62cf13538e72e61d90e23d0abf327159210..181b9e6fd984ec62a80f5ba423566b85b0332572 100644 (file)
@@ -42,6 +42,7 @@ ov519         041e:4064       Creative Live! VISTA VF0420
 ov519          041e:4067       Creative Live! Cam Video IM (VF0350)
 ov519          041e:4068       Creative Live! VISTA VF0470
 spca561                0458:7004       Genius VideoCAM Express V2
+sn9c2028       0458:7005       Genius Smart 300, version 2
 sunplus                0458:7006       Genius Dsc 1.3 Smart
 zc3xx          0458:7007       Genius VideoCam V2
 zc3xx          0458:700c       Genius VideoCam V3
@@ -109,6 +110,7 @@ sunplus             04a5:3003       Benq DC 1300
 sunplus                04a5:3008       Benq DC 1500
 sunplus                04a5:300a       Benq DC 3410
 spca500                04a5:300c       Benq DC 1016
+benq           04a5:3035       Benq DC E300
 finepix                04cb:0104       Fujifilm FinePix 4800
 finepix                04cb:0109       Fujifilm FinePix A202
 finepix                04cb:010b       Fujifilm FinePix A203
@@ -142,6 +144,7 @@ sunplus             04fc:5360       Sunplus Generic
 spca500                04fc:7333       PalmPixDC85
 sunplus                04fc:ffff       Pure DigitalDakota
 spca501                0506:00df       3Com HomeConnect Lite
+sunplus                052b:1507       Megapixel 5 Pretec DC-1007
 sunplus                052b:1513       Megapix V4
 sunplus                052b:1803       MegaImage VI
 tv8532         0545:808b       Veo Stingray
@@ -151,6 +154,7 @@ sunplus             0546:3191       Polaroid Ion 80
 sunplus                0546:3273       Polaroid PDC2030
 ov519          054c:0154       Sonny toy4
 ov519          054c:0155       Sonny toy5
+cpia1          0553:0002       CPIA CPiA (version1) based cameras
 zc3xx          055f:c005       Mustek Wcam300A
 spca500                055f:c200       Mustek Gsmart 300
 sunplus                055f:c211       Kowa Bs888e Microcamera
@@ -188,8 +192,7 @@ spca500             06bd:0404       Agfa CL20
 spca500                06be:0800       Optimedia
 sunplus                06d6:0031       Trust 610 LCD PowerC@m Zoom
 spca506                06e1:a190       ADS Instant VCD
-ov534          06f8:3002       Hercules Blog Webcam
-ov534          06f8:3003       Hercules Dualpix HD Weblog
+ov534_9                06f8:3003       Hercules Dualpix HD Weblog
 sonixj         06f8:3004       Hercules Classic Silver
 sonixj         06f8:3008       Hercules Deluxe Optical Glass
 pac7302                06f8:3009       Hercules Classic Link
@@ -204,6 +207,7 @@ sunplus             0733:2221       Mercury Digital Pro 3.1p
 sunplus                0733:3261       Concord 3045 spca536a
 sunplus                0733:3281       Cyberpix S550V
 spca506                0734:043b       3DeMon USB Capture aka
+cpia1          0813:0001       QX3 camera
 ov519          0813:0002       Dual Mode USB Camera Plus
 spca500                084d:0003       D-Link DSC-350
 spca500                08ca:0103       Aiptek PocketDV
@@ -225,7 +229,8 @@ sunplus             08ca:2050       Medion MD 41437
 sunplus                08ca:2060       Aiptek PocketDV5300
 tv8532         0923:010f       ICM532 cams
 mars           093a:050f       Mars-Semi Pc-Camera
-mr97310a       093a:010f       Sakar Digital no. 77379
+mr97310a       093a:010e       All known CIF cams with this ID
+mr97310a       093a:010f       All known VGA cams with this ID
 pac207         093a:2460       Qtec Webcam 100
 pac207         093a:2461       HP Webcam
 pac207         093a:2463       Philips SPC 220 NC
@@ -302,6 +307,7 @@ sonixj              0c45:613b       Surfer SN-206
 sonixj         0c45:613c       Sonix Pccam168
 sonixj         0c45:6143       Sonix Pccam168
 sonixj         0c45:6148       Digitus DA-70811/ZSMC USB PC Camera ZS211/Microdia
+sonixj         0c45:614a       Frontech E-Ccam (JIL-2225)
 sn9c20x                0c45:6240       PC Camera (SN9C201 + MT9M001)
 sn9c20x                0c45:6242       PC Camera (SN9C201 + MT9M111)
 sn9c20x                0c45:6248       PC Camera (SN9C201 + OV9655)
@@ -324,6 +330,10 @@ sn9c20x            0c45:62b0       PC Camera (SN9C202 + MT9V011/MT9V111/MT9V112)
 sn9c20x                0c45:62b3       PC Camera (SN9C202 + OV9655)
 sn9c20x                0c45:62bb       PC Camera (SN9C202 + OV7660)
 sn9c20x                0c45:62bc       PC Camera (SN9C202 + HV7131R)
+sn9c2028       0c45:8001       Wild Planet Digital Spy Camera
+sn9c2028       0c45:8003       Sakar #11199, #6637x, #67480 keychain cams
+sn9c2028       0c45:8008       Mini-Shotz ms-350
+sn9c2028       0c45:800a       Vivitar Vivicam 3350B
 sunplus                0d64:0303       Sunplus FashionCam DXG
 ov519          0e96:c001       TRUST 380 USB2 SPACEC@M
 etoms          102c:6151       Qcam Sangha CIF
@@ -341,10 +351,11 @@ spca501           1776:501c       Arowana 300K CMOS Camera
 t613           17a1:0128       TASCORP JPEG Webcam, NGS Cyclops
 vc032x         17ef:4802       Lenovo Vc0323+MI1310_SOC
 pac207         2001:f115       D-Link DSB-C120
-sq905c         2770:9050       sq905c
-sq905c         2770:905c       DualCamera
-sq905          2770:9120       Argus Digital Camera DC1512
-sq905c         2770:913d       sq905c
+sq905c         2770:9050       Disney pix micro (CIF)
+sq905c         2770:9052       Disney pix micro 2 (VGA)
+sq905c         2770:905c       All 11 known cameras with this ID
+sq905          2770:9120       All 24 known cameras with this ID
+sq905c         2770:913d       All 4 known cameras with this ID
 spca500                2899:012c       Toptro Industrial
 ov519          8020:ef04       ov519
 spca508                8086:0110       Intel Easy PC Camera
index 74d677c8b036c076b49ffa8cc287f7948fe9f0e1..5155700c206b9bcd35d8edbdbb1c0bf56679e3d7 100644 (file)
@@ -599,99 +599,13 @@ video_device::minor fields.
 video buffer helper functions
 -----------------------------
 
-The v4l2 core API provides a standard method for dealing with video
-buffers. Those methods allow a driver to implement read(), mmap() and
-overlay() on a consistent way.
-
-There are currently methods for using video buffers on devices that
-supports DMA with scatter/gather method (videobuf-dma-sg), DMA with
-linear access (videobuf-dma-contig), and vmalloced buffers, mostly
-used on USB drivers (videobuf-vmalloc).
-
-Any driver using videobuf should provide operations (callbacks) for
-four handlers:
-
-ops->buf_setup   - calculates the size of the video buffers and avoid they
-                  to waste more than some maximum limit of RAM;
-ops->buf_prepare - fills the video buffer structs and calls
-                  videobuf_iolock() to alloc and prepare mmaped memory;
-ops->buf_queue   - advices the driver that another buffer were
-                  requested (by read() or by QBUF);
-ops->buf_release - frees any buffer that were allocated.
-
-In order to use it, the driver need to have a code (generally called at
-interrupt context) that will properly handle the buffer request lists,
-announcing that a new buffer were filled.
-
-The irq handling code should handle the videobuf task lists, in order
-to advice videobuf that a new frame were filled, in order to honor to a
-request. The code is generally like this one:
-       if (list_empty(&dma_q->active))
-               return;
-
-       buf = list_entry(dma_q->active.next, struct vbuffer, vb.queue);
-
-       if (!waitqueue_active(&buf->vb.done))
-               return;
-
-       /* Some logic to handle the buf may be needed here */
-
-       list_del(&buf->vb.queue);
-       do_gettimeofday(&buf->vb.ts);
-       wake_up(&buf->vb.done);
-
-Those are the videobuffer functions used on drivers, implemented on
-videobuf-core:
-
-- Videobuf init functions
-  videobuf_queue_sg_init()
-      Initializes the videobuf infrastructure. This function should be
-      called before any other videobuf function on drivers that uses DMA
-      Scatter/Gather buffers.
-
-  videobuf_queue_dma_contig_init
-      Initializes the videobuf infrastructure. This function should be
-      called before any other videobuf function on drivers that need DMA
-      contiguous buffers.
-
-  videobuf_queue_vmalloc_init()
-      Initializes the videobuf infrastructure. This function should be
-      called before any other videobuf function on USB (and other drivers)
-      that need a vmalloced type of videobuf.
-
-- videobuf_iolock()
-  Prepares the videobuf memory for the proper method (read, mmap, overlay).
-
-- videobuf_queue_is_busy()
-  Checks if a videobuf is streaming.
-
-- videobuf_queue_cancel()
-  Stops video handling.
-
-- videobuf_mmap_free()
-  frees mmap buffers.
-
-- videobuf_stop()
-  Stops video handling, ends mmap and frees mmap and other buffers.
-
-- V4L2 api functions. Those functions correspond to VIDIOC_foo ioctls:
-   videobuf_reqbufs(), videobuf_querybuf(), videobuf_qbuf(),
-   videobuf_dqbuf(), videobuf_streamon(), videobuf_streamoff().
-
-- V4L1 api function (corresponds to VIDIOCMBUF ioctl):
-   videobuf_cgmbuf()
-      This function is used to provide backward compatibility with V4L1
-      API.
-
-- Some help functions for read()/poll() operations:
-   videobuf_read_stream()
-      For continuous stream read()
-   videobuf_read_one()
-      For snapshot read()
-   videobuf_poll_stream()
-      polling help function
-
-The better way to understand it is to take a look at vivi driver. One
-of the main reasons for vivi is to be a videobuf usage example. the
-vivi_thread_tick() does the task that the IRQ callback would do on PCI
-drivers (or the irq callback on USB).
+The v4l2 core API provides a set of standard methods (called "videobuf")
+for dealing with video buffers. Those methods allow a driver to implement
+read(), mmap() and overlay() in a consistent way.  There are currently
+methods for using video buffers on devices that supports DMA with
+scatter/gather method (videobuf-dma-sg), DMA with linear access
+(videobuf-dma-contig), and vmalloced buffers, mostly used on USB drivers
+(videobuf-vmalloc).
+
+Please see Documentation/video4linux/videobuf for more information on how
+to use the videobuf layer.
diff --git a/Documentation/video4linux/videobuf b/Documentation/video4linux/videobuf
new file mode 100644 (file)
index 0000000..17a1f9a
--- /dev/null
@@ -0,0 +1,360 @@
+An introduction to the videobuf layer
+Jonathan Corbet <corbet@lwn.net>
+Current as of 2.6.33
+
+The videobuf layer functions as a sort of glue layer between a V4L2 driver
+and user space.  It handles the allocation and management of buffers for
+the storage of video frames.  There is a set of functions which can be used
+to implement many of the standard POSIX I/O system calls, including read(),
+poll(), and, happily, mmap().  Another set of functions can be used to
+implement the bulk of the V4L2 ioctl() calls related to streaming I/O,
+including buffer allocation, queueing and dequeueing, and streaming
+control.  Using videobuf imposes a few design decisions on the driver
+author, but the payback comes in the form of reduced code in the driver and
+a consistent implementation of the V4L2 user-space API.
+
+Buffer types
+
+Not all video devices use the same kind of buffers.  In fact, there are (at
+least) three common variations:
+
+ - Buffers which are scattered in both the physical and (kernel) virtual
+   address spaces.  (Almost) all user-space buffers are like this, but it
+   makes great sense to allocate kernel-space buffers this way as well when
+   it is possible.  Unfortunately, it is not always possible; working with
+   this kind of buffer normally requires hardware which can do
+   scatter/gather DMA operations.
+
+ - Buffers which are physically scattered, but which are virtually
+   contiguous; buffers allocated with vmalloc(), in other words.  These
+   buffers are just as hard to use for DMA operations, but they can be
+   useful in situations where DMA is not available but virtually-contiguous
+   buffers are convenient.
+
+ - Buffers which are physically contiguous.  Allocation of this kind of
+   buffer can be unreliable on fragmented systems, but simpler DMA
+   controllers cannot deal with anything else.
+
+Videobuf can work with all three types of buffers, but the driver author
+must pick one at the outset and design the driver around that decision.
+
+[It's worth noting that there's a fourth kind of buffer: "overlay" buffers
+which are located within the system's video memory.  The overlay
+functionality is considered to be deprecated for most use, but it still
+shows up occasionally in system-on-chip drivers where the performance
+benefits merit the use of this technique.  Overlay buffers can be handled
+as a form of scattered buffer, but there are very few implementations in
+the kernel and a description of this technique is currently beyond the
+scope of this document.]
+
+Data structures, callbacks, and initialization
+
+Depending on which type of buffers are being used, the driver should
+include one of the following files:
+
+    <media/videobuf-dma-sg.h>          /* Physically scattered */
+    <media/videobuf-vmalloc.h>         /* vmalloc() buffers    */
+    <media/videobuf-dma-contig.h>      /* Physically contiguous */
+
+The driver's data structure describing a V4L2 device should include a
+struct videobuf_queue instance for the management of the buffer queue,
+along with a list_head for the queue of available buffers.  There will also
+need to be an interrupt-safe spinlock which is used to protect (at least)
+the queue.
+
+The next step is to write four simple callbacks to help videobuf deal with
+the management of buffers:
+
+    struct videobuf_queue_ops {
+       int (*buf_setup)(struct videobuf_queue *q,
+                        unsigned int *count, unsigned int *size);
+       int (*buf_prepare)(struct videobuf_queue *q,
+                          struct videobuf_buffer *vb,
+                          enum v4l2_field field);
+       void (*buf_queue)(struct videobuf_queue *q,
+                         struct videobuf_buffer *vb);
+       void (*buf_release)(struct videobuf_queue *q,
+                           struct videobuf_buffer *vb);
+    };
+
+buf_setup() is called early in the I/O process, when streaming is being
+initiated; its purpose is to tell videobuf about the I/O stream.  The count
+parameter will be a suggested number of buffers to use; the driver should
+check it for rationality and adjust it if need be.  As a practical rule, a
+minimum of two buffers are needed for proper streaming, and there is
+usually a maximum (which cannot exceed 32) which makes sense for each
+device.  The size parameter should be set to the expected (maximum) size
+for each frame of data.
+
+Each buffer (in the form of a struct videobuf_buffer pointer) will be
+passed to buf_prepare(), which should set the buffer's size, width, height,
+and field fields properly.  If the buffer's state field is
+VIDEOBUF_NEEDS_INIT, the driver should pass it to:
+
+    int videobuf_iolock(struct videobuf_queue* q, struct videobuf_buffer *vb,
+                       struct v4l2_framebuffer *fbuf);
+
+Among other things, this call will usually allocate memory for the buffer.
+Finally, the buf_prepare() function should set the buffer's state to
+VIDEOBUF_PREPARED.
+
+When a buffer is queued for I/O, it is passed to buf_queue(), which should
+put it onto the driver's list of available buffers and set its state to
+VIDEOBUF_QUEUED.  Note that this function is called with the queue spinlock
+held; if it tries to acquire it as well things will come to a screeching
+halt.  Yes, this is the voice of experience.  Note also that videobuf may
+wait on the first buffer in the queue; placing other buffers in front of it
+could again gum up the works.  So use list_add_tail() to enqueue buffers.
+
+Finally, buf_release() is called when a buffer is no longer intended to be
+used.  The driver should ensure that there is no I/O active on the buffer,
+then pass it to the appropriate free routine(s):
+
+    /* Scatter/gather drivers */
+    int videobuf_dma_unmap(struct videobuf_queue *q,
+                          struct videobuf_dmabuf *dma);
+    int videobuf_dma_free(struct videobuf_dmabuf *dma);
+
+    /* vmalloc drivers */
+    void videobuf_vmalloc_free (struct videobuf_buffer *buf);
+
+    /* Contiguous drivers */
+    void videobuf_dma_contig_free(struct videobuf_queue *q,
+                                 struct videobuf_buffer *buf);
+
+One way to ensure that a buffer is no longer under I/O is to pass it to:
+
+    int videobuf_waiton(struct videobuf_buffer *vb, int non_blocking, int intr);
+
+Here, vb is the buffer, non_blocking indicates whether non-blocking I/O
+should be used (it should be zero in the buf_release() case), and intr
+controls whether an interruptible wait is used.
+
+File operations
+
+At this point, much of the work is done; much of the rest is slipping
+videobuf calls into the implementation of the other driver callbacks.  The
+first step is in the open() function, which must initialize the
+videobuf queue.  The function to use depends on the type of buffer used:
+
+    void videobuf_queue_sg_init(struct videobuf_queue *q,
+                               struct videobuf_queue_ops *ops,
+                               struct device *dev,
+                               spinlock_t *irqlock,
+                               enum v4l2_buf_type type,
+                               enum v4l2_field field,
+                               unsigned int msize,
+                               void *priv);
+
+    void videobuf_queue_vmalloc_init(struct videobuf_queue *q,
+                               struct videobuf_queue_ops *ops,
+                               struct device *dev,
+                               spinlock_t *irqlock,
+                               enum v4l2_buf_type type,
+                               enum v4l2_field field,
+                               unsigned int msize,
+                               void *priv);
+
+    void videobuf_queue_dma_contig_init(struct videobuf_queue *q,
+                                      struct videobuf_queue_ops *ops,
+                                      struct device *dev,
+                                      spinlock_t *irqlock,
+                                      enum v4l2_buf_type type,
+                                      enum v4l2_field field,
+                                      unsigned int msize,
+                                      void *priv);
+
+In each case, the parameters are the same: q is the queue structure for the
+device, ops is the set of callbacks as described above, dev is the device
+structure for this video device, irqlock is an interrupt-safe spinlock to
+protect access to the data structures, type is the buffer type used by the
+device (cameras will use V4L2_BUF_TYPE_VIDEO_CAPTURE, for example), field
+describes which field is being captured (often V4L2_FIELD_NONE for
+progressive devices), msize is the size of any containing structure used
+around struct videobuf_buffer, and priv is a private data pointer which
+shows up in the priv_data field of struct videobuf_queue.  Note that these
+are void functions which, evidently, are immune to failure.
+
+V4L2 capture drivers can be written to support either of two APIs: the
+read() system call and the rather more complicated streaming mechanism.  As
+a general rule, it is necessary to support both to ensure that all
+applications have a chance of working with the device.  Videobuf makes it
+easy to do that with the same code.  To implement read(), the driver need
+only make a call to one of:
+
+    ssize_t videobuf_read_one(struct videobuf_queue *q,
+                             char __user *data, size_t count,
+                             loff_t *ppos, int nonblocking);
+
+    ssize_t videobuf_read_stream(struct videobuf_queue *q,
+                                char __user *data, size_t count,
+                                loff_t *ppos, int vbihack, int nonblocking);
+
+Either one of these functions will read frame data into data, returning the
+amount actually read; the difference is that videobuf_read_one() will only
+read a single frame, while videobuf_read_stream() will read multiple frames
+if they are needed to satisfy the count requested by the application.  A
+typical driver read() implementation will start the capture engine, call
+one of the above functions, then stop the engine before returning (though a
+smarter implementation might leave the engine running for a little while in
+anticipation of another read() call happening in the near future).
+
+The poll() function can usually be implemented with a direct call to:
+
+    unsigned int videobuf_poll_stream(struct file *file,
+                                     struct videobuf_queue *q,
+                                     poll_table *wait);
+
+Note that the actual wait queue eventually used will be the one associated
+with the first available buffer.
+
+When streaming I/O is done to kernel-space buffers, the driver must support
+the mmap() system call to enable user space to access the data.  In many
+V4L2 drivers, the often-complex mmap() implementation simplifies to a
+single call to:
+
+    int videobuf_mmap_mapper(struct videobuf_queue *q,
+                            struct vm_area_struct *vma);
+
+Everything else is handled by the videobuf code.
+
+The release() function requires two separate videobuf calls:
+
+    void videobuf_stop(struct videobuf_queue *q);
+    int videobuf_mmap_free(struct videobuf_queue *q);
+
+The call to videobuf_stop() terminates any I/O in progress - though it is
+still up to the driver to stop the capture engine.  The call to
+videobuf_mmap_free() will ensure that all buffers have been unmapped; if
+so, they will all be passed to the buf_release() callback.  If buffers
+remain mapped, videobuf_mmap_free() returns an error code instead.  The
+purpose is clearly to cause the closing of the file descriptor to fail if
+buffers are still mapped, but every driver in the 2.6.32 kernel cheerfully
+ignores its return value.
+
+ioctl() operations
+
+The V4L2 API includes a very long list of driver callbacks to respond to
+the many ioctl() commands made available to user space.  A number of these
+- those associated with streaming I/O - turn almost directly into videobuf
+calls.  The relevant helper functions are:
+
+    int videobuf_reqbufs(struct videobuf_queue *q,
+                        struct v4l2_requestbuffers *req);
+    int videobuf_querybuf(struct videobuf_queue *q, struct v4l2_buffer *b);
+    int videobuf_qbuf(struct videobuf_queue *q, struct v4l2_buffer *b);
+    int videobuf_dqbuf(struct videobuf_queue *q, struct v4l2_buffer *b,
+                      int nonblocking);
+    int videobuf_streamon(struct videobuf_queue *q);
+    int videobuf_streamoff(struct videobuf_queue *q);
+    int videobuf_cgmbuf(struct videobuf_queue *q, struct video_mbuf *mbuf,
+                       int count);
+
+So, for example, a VIDIOC_REQBUFS call turns into a call to the driver's
+vidioc_reqbufs() callback which, in turn, usually only needs to locate the
+proper struct videobuf_queue pointer and pass it to videobuf_reqbufs().
+These support functions can replace a great deal of buffer management
+boilerplate in a lot of V4L2 drivers.
+
+The vidioc_streamon() and vidioc_streamoff() functions will be a bit more
+complex, of course, since they will also need to deal with starting and
+stopping the capture engine.  videobuf_cgmbuf(), called from the driver's
+vidiocgmbuf() function, only exists if the V4L1 compatibility module has
+been selected with CONFIG_VIDEO_V4L1_COMPAT, so its use must be surrounded
+with #ifdef directives.
+
+Buffer allocation
+
+Thus far, we have talked about buffers, but have not looked at how they are
+allocated.  The scatter/gather case is the most complex on this front.  For
+allocation, the driver can leave buffer allocation entirely up to the
+videobuf layer; in this case, buffers will be allocated as anonymous
+user-space pages and will be very scattered indeed.  If the application is
+using user-space buffers, no allocation is needed; the videobuf layer will
+take care of calling get_user_pages() and filling in the scatterlist array.
+
+If the driver needs to do its own memory allocation, it should be done in
+the vidioc_reqbufs() function, *after* calling videobuf_reqbufs().  The
+first step is a call to:
+
+    struct videobuf_dmabuf *videobuf_to_dma(struct videobuf_buffer *buf);
+
+The returned videobuf_dmabuf structure (defined in
+<media/videobuf-dma-sg.h>) includes a couple of relevant fields:
+
+    struct scatterlist  *sglist;
+    int                 sglen;
+
+The driver must allocate an appropriately-sized scatterlist array and
+populate it with pointers to the pieces of the allocated buffer; sglen
+should be set to the length of the array.
+
+Drivers using the vmalloc() method need not (and cannot) concern themselves
+with buffer allocation at all; videobuf will handle those details.  The
+same is normally true of contiguous-DMA drivers as well; videobuf will
+allocate the buffers (with dma_alloc_coherent()) when it sees fit.  That
+means that these drivers may be trying to do high-order allocations at any
+time, an operation which is not always guaranteed to work.  Some drivers
+play tricks by allocating DMA space at system boot time; videobuf does not
+currently play well with those drivers.
+
+As of 2.6.31, contiguous-DMA drivers can work with a user-supplied buffer,
+as long as that buffer is physically contiguous.  Normal user-space
+allocations will not meet that criterion, but buffers obtained from other
+kernel drivers, or those contained within huge pages, will work with these
+drivers.
+
+Filling the buffers
+
+The final part of a videobuf implementation has no direct callback - it's
+the portion of the code which actually puts frame data into the buffers,
+usually in response to interrupts from the device.  For all types of
+drivers, this process works approximately as follows:
+
+ - Obtain the next available buffer and make sure that somebody is actually
+   waiting for it.
+
+ - Get a pointer to the memory and put video data there.
+
+ - Mark the buffer as done and wake up the process waiting for it.
+
+Step (1) above is done by looking at the driver-managed list_head structure
+- the one which is filled in the buf_queue() callback.  Because starting
+the engine and enqueueing buffers are done in separate steps, it's possible
+for the engine to be running without any buffers available - in the
+vmalloc() case especially.  So the driver should be prepared for the list
+to be empty.  It is equally possible that nobody is yet interested in the
+buffer; the driver should not remove it from the list or fill it until a
+process is waiting on it.  That test can be done by examining the buffer's
+done field (a wait_queue_head_t structure) with waitqueue_active().
+
+A buffer's state should be set to VIDEOBUF_ACTIVE before being mapped for
+DMA; that ensures that the videobuf layer will not try to do anything with
+it while the device is transferring data.
+
+For scatter/gather drivers, the needed memory pointers will be found in the
+scatterlist structure described above.  Drivers using the vmalloc() method
+can get a memory pointer with:
+
+    void *videobuf_to_vmalloc(struct videobuf_buffer *buf);
+
+For contiguous DMA drivers, the function to use is:
+
+    dma_addr_t videobuf_to_dma_contig(struct videobuf_buffer *buf);
+
+The contiguous DMA API goes out of its way to hide the kernel-space address
+of the DMA buffer from drivers.
+
+The final step is to set the size field of the relevant videobuf_buffer
+structure to the actual size of the captured image, set state to
+VIDEOBUF_DONE, then call wake_up() on the done queue.  At this point, the
+buffer is owned by the videobuf layer and the driver should not touch it
+again.
+
+Developers who are interested in more information can go into the relevant
+header files; there are a few low-level functions declared there which have
+not been talked about here.  Also worthwhile is the vivi driver
+(drivers/media/video/vivi.c), which is maintained as an example of how V4L2
+drivers should be written.  Vivi only uses the vmalloc() API, but it's good
+enough to get started with.  Note also that all of these calls are exported
+GPL-only, so they will not be available to non-GPL kernel modules.
index 317ed38826d7e57214cc6b46c96ec3ce599f8ca4..2653b44f90dad7beb7bba8a42276482ba114566a 100644 (file)
@@ -221,6 +221,7 @@ F:  drivers/net/acenic*
 
 ACER ASPIRE ONE TEMPERATURE AND FAN DRIVER
 M:     Peter Feuerer <peter@piie.net>
+L:     platform-driver-x86@vger.kernel.org
 W:     http://piie.net/?section=acerhdf
 S:     Maintained
 F:     drivers/platform/x86/acerhdf.c
@@ -228,6 +229,7 @@ F:  drivers/platform/x86/acerhdf.c
 ACER WMI LAPTOP EXTRAS
 M:     Carlos Corbacho <carlos@strangeworlds.co.uk>
 L:     aceracpi@googlegroups.com (subscribers-only)
+L:     platform-driver-x86@vger.kernel.org
 W:     http://code.google.com/p/aceracpi
 S:     Maintained
 F:     drivers/platform/x86/acer-wmi.c
@@ -288,7 +290,7 @@ F:  drivers/acpi/video.c
 
 ACPI WMI DRIVER
 M:     Carlos Corbacho <carlos@strangeworlds.co.uk>
-L:     linux-acpi@vger.kernel.org
+L:     platform-driver-x86@vger.kernel.org
 W:     http://www.lesswatts.org/projects/acpi/
 S:     Maintained
 F:     drivers/platform/x86/wmi.c
@@ -968,6 +970,7 @@ ASUS ACPI EXTRAS DRIVER
 M:     Corentin Chary <corentincj@iksaif.net>
 M:     Karol Kozimor <sziwan@users.sourceforge.net>
 L:     acpi4asus-user@lists.sourceforge.net
+L:     platform-driver-x86@vger.kernel.org
 W:     http://acpi4asus.sf.net
 S:     Maintained
 F:     drivers/platform/x86/asus_acpi.c
@@ -981,6 +984,7 @@ F:  drivers/hwmon/asb100.c
 ASUS LAPTOP EXTRAS DRIVER
 M:     Corentin Chary <corentincj@iksaif.net>
 L:     acpi4asus-user@lists.sourceforge.net
+L:     platform-driver-x86@vger.kernel.org
 W:     http://acpi4asus.sf.net
 S:     Maintained
 F:     drivers/platform/x86/asus-laptop.c
@@ -1473,6 +1477,7 @@ F:        drivers/scsi/fnic/
 CMPC ACPI DRIVER
 M:     Thadeu Lima de Souza Cascardo <cascardo@holoscopio.com>
 M:     Daniel Oliveira Nascimento <don@syst.com.br>
+L:     platform-driver-x86@vger.kernel.org
 S:     Supported
 F:     drivers/platform/x86/classmate-laptop.c
 
@@ -1516,6 +1521,7 @@ F:        drivers/pci/hotplug/cpcihp_generic.c
 
 COMPAL LAPTOP SUPPORT
 M:     Cezary Jackiewicz <cezary.jackiewicz@gmail.com>
+L:     platform-driver-x86@vger.kernel.org
 S:     Maintained
 F:     drivers/platform/x86/compal-laptop.c
 
@@ -1746,6 +1752,7 @@ F:        drivers/net/defxx.*
 
 DELL LAPTOP DRIVER
 M:     Matthew Garrett <mjg59@srcf.ucam.org>
+L:     platform-driver-x86@vger.kernel.org
 S:     Maintained
 F:     drivers/platform/x86/dell-laptop.c
 
@@ -2028,6 +2035,7 @@ F:        drivers/edac/r82600_edac.c
 EEEPC LAPTOP EXTRAS DRIVER
 M:     Corentin Chary <corentincj@iksaif.net>
 L:     acpi4asus-user@lists.sourceforge.net
+L:     platform-driver-x86@vger.kernel.org
 W:     http://acpi4asus.sf.net
 S:     Maintained
 F:     drivers/platform/x86/eeepc-laptop.c
@@ -2141,6 +2149,17 @@ S:       Supported
 F:     Documentation/fault-injection/
 F:     lib/fault-inject.c
 
+FCOE SUBSYSTEM (libfc, libfcoe, fcoe)
+M:     Robert Love <robert.w.love@intel.com>
+L:     devel@open-fcoe.org
+W:     www.Open-FCoE.org
+S:     Supported
+F:     drivers/scsi/libfc/
+F:     drivers/scsi/fcoe/
+F:     include/scsi/fc/
+F:     include/scsi/libfc.h
+F:     include/scsi/libfcoe.h
+
 FILE LOCKING (flock() and fcntl()/lockf())
 M:     Matthew Wilcox <matthew@wil.cx>
 L:     linux-fsdevel@vger.kernel.org
@@ -2295,7 +2314,7 @@ F:        arch/frv/
 
 FUJITSU LAPTOP EXTRAS
 M:     Jonathan Woithe <jwoithe@physics.adelaide.edu.au>
-L:     linux-acpi@vger.kernel.org
+L:     platform-driver-x86@vger.kernel.org
 S:     Maintained
 F:     drivers/platform/x86/fujitsu-laptop.c
 
@@ -2399,6 +2418,12 @@ L:       virtualization@lists.linux-foundation.org
 S:     Maintained
 F:     drivers/char/virtio_console.c
 
+iSCSI BOOT FIRMWARE TABLE (iBFT) DRIVER
+M:     Peter Jones <pjones@redhat.com>
+M:     Konrad Rzeszutek Wilk <konrad@kernel.org>
+S:     Maintained
+F:     drivers/firmware/iscsi_ibft*
+
 GSPCA FINEPIX SUBDRIVER
 M:     Frank Zago <frank@zago.net>
 L:     linux-media@vger.kernel.org
@@ -2567,6 +2592,7 @@ F:        drivers/net/wireless/hostap/
 
 HP COMPAQ TC1100 TABLET WMI EXTRAS DRIVER
 M:     Carlos Corbacho <carlos@strangeworlds.co.uk>
+L:     platform-driver-x86@vger.kernel.org
 S:     Odd Fixes
 F:     drivers/platform/x86/tc1100-wmi.c
 
@@ -2777,7 +2803,7 @@ F:        drivers/video/i810/
 
 INTEL MENLOW THERMAL DRIVER
 M:     Sujith Thomas <sujith.thomas@intel.com>
-L:     linux-acpi@vger.kernel.org
+L:     platform-driver-x86@vger.kernel.org
 W:     http://www.lesswatts.org/projects/acpi/
 S:     Supported
 F:     drivers/platform/x86/intel_menlow.c
@@ -3643,6 +3669,7 @@ F:        drivers/char/mxser.*
 
 MSI LAPTOP SUPPORT
 M:     Lennart Poettering <mzxreary@0pointer.de>
+L:     platform-driver-x86@vger.kernel.org
 W:     https://tango.0pointer.de/mailman/listinfo/s270-linux
 W:     http://0pointer.de/lennart/tchibo.html
 S:     Maintained
@@ -3650,6 +3677,7 @@ F:        drivers/platform/x86/msi-laptop.c
 
 MSI WMI SUPPORT
 M:     Anisse Astier <anisse@astier.eu>
+L:     platform-driver-x86@vger.kernel.org
 S:     Supported
 F:     drivers/platform/x86/msi-wmi.c
 
@@ -4102,6 +4130,7 @@ F:        drivers/i2c/busses/i2c-pasemi.c
 
 PANASONIC LAPTOP ACPI EXTRAS DRIVER
 M:     Harald Welte <laforge@gnumonks.org>
+L:     platform-driver-x86@vger.kernel.org
 S:     Maintained
 F:     drivers/platform/x86/panasonic-laptop.c
 
@@ -4682,6 +4711,13 @@ F:       drivers/media/common/saa7146*
 F:     drivers/media/video/*7146*
 F:     include/media/*7146*
 
+TLG2300 VIDEO4LINUX-2 DRIVER
+M:     Huang Shijie <shijie8@gmail.com>
+M:     Kang Yong <kangyong@telegent.com>
+M:     Zhang Xiaobing <xbzhang@telegent.com>
+S:     Supported
+F:     drivers/media/video/tlg2300
+
 SC1200 WDT DRIVER
 M:     Zwane Mwaikambo <zwane@arm.linux.org.uk>
 S:     Maintained
@@ -5040,7 +5076,7 @@ F:        include/linux/ssb/
 
 SONY VAIO CONTROL DEVICE DRIVER
 M:     Mattia Dongili <malattia@linux.it>
-L:     linux-acpi@vger.kernel.org
+L:     platform-driver-x86@vger.kernel.org
 W:     http://www.linux.it/~malattia/wiki/index.php/Sony_drivers
 S:     Maintained
 F:     Documentation/laptops/sony-laptop.txt
@@ -5246,6 +5282,7 @@ F:        arch/xtensa/
 THINKPAD ACPI EXTRAS DRIVER
 M:     Henrique de Moraes Holschuh <ibm-acpi@hmh.eng.br>
 L:     ibm-acpi-devel@lists.sourceforge.net
+L:     platform-driver-x86@vger.kernel.org
 W:     http://ibm-acpi.sourceforge.net
 W:     http://thinkwiki.org/wiki/Ibm-acpi
 T:     git git://repo.or.cz/linux-2.6/linux-acpi-2.6/ibm-acpi-2.6.git
@@ -5299,10 +5336,12 @@ F:      security/tomoyo/
 
 TOPSTAR LAPTOP EXTRAS DRIVER
 M:     Herton Ronaldo Krzesinski <herton@mandriva.com.br>
+L:     platform-driver-x86@vger.kernel.org
 S:     Maintained
 F:     drivers/platform/x86/topstar-laptop.c
 
 TOSHIBA ACPI EXTRAS DRIVER
+L:     platform-driver-x86@vger.kernel.org
 S:     Orphan
 F:     drivers/platform/x86/toshiba_acpi.c
 
@@ -6030,6 +6069,12 @@ S:       Maintained
 F:     Documentation/x86/
 F:     arch/x86/
 
+X86 PLATFORM DRIVERS
+M:     Matthew Garrett <mjg@redhat.com>
+L:     platform-driver-x86@vger.kernel.org
+S:     Maintained
+F:     drivers/platform/x86
+
 XEN HYPERVISOR INTERFACE
 M:     Jeremy Fitzhardinge <jeremy@xensource.com>
 M:     Chris Wright <chrisw@sous-sol.org>
index 8113bb5fb66eb6f92378ad43ce0d2607fda3b08c..5fe4a2ad7fa34deb2e7be770fdfa782359f6d245 100644 (file)
@@ -447,6 +447,16 @@ static inline void __flush_icache_all(void)
            : "r" (0));
 #endif
 }
+static inline void flush_kernel_vmap_range(void *addr, int size)
+{
+       if ((cache_is_vivt() || cache_is_vipt_aliasing()))
+         __cpuc_flush_dcache_area(addr, (size_t)size);
+}
+static inline void invalidate_kernel_vmap_range(void *addr, int size)
+{
+       if ((cache_is_vivt() || cache_is_vipt_aliasing()))
+         __cpuc_flush_dcache_area(addr, (size_t)size);
+}
 
 #define ARCH_HAS_FLUSH_ANON_PAGE
 static inline void flush_anon_page(struct vm_area_struct *vma,
index b476395d2cd4369581e4307eb0df6dccba65f71d..38e9033d2e86dfe0e70b09e91edf58a907034f44 100644 (file)
@@ -37,6 +37,8 @@
 #include <mach/nand.h>
 #include <mach/keyscan.h>
 
+#include <media/tvp514x.h>
+
 static inline int have_imager(void)
 {
        /* REVISIT when it's supported, trigger via Kconfig */
@@ -306,6 +308,73 @@ static void dm365evm_mmc_configure(void)
        davinci_cfg_reg(DM365_SD1_DATA0);
 }
 
+static struct tvp514x_platform_data tvp5146_pdata = {
+       .clk_polarity = 0,
+       .hs_polarity = 1,
+       .vs_polarity = 1
+};
+
+#define TVP514X_STD_ALL        (V4L2_STD_NTSC | V4L2_STD_PAL)
+/* Inputs available at the TVP5146 */
+static struct v4l2_input tvp5146_inputs[] = {
+       {
+               .index = 0,
+               .name = "Composite",
+               .type = V4L2_INPUT_TYPE_CAMERA,
+               .std = TVP514X_STD_ALL,
+       },
+       {
+               .index = 1,
+               .name = "S-Video",
+               .type = V4L2_INPUT_TYPE_CAMERA,
+               .std = TVP514X_STD_ALL,
+       },
+};
+
+/*
+ * this is the route info for connecting each input to decoder
+ * ouput that goes to vpfe. There is a one to one correspondence
+ * with tvp5146_inputs
+ */
+static struct vpfe_route tvp5146_routes[] = {
+       {
+               .input = INPUT_CVBS_VI2B,
+               .output = OUTPUT_10BIT_422_EMBEDDED_SYNC,
+       },
+{
+               .input = INPUT_SVIDEO_VI2C_VI1C,
+               .output = OUTPUT_10BIT_422_EMBEDDED_SYNC,
+       },
+};
+
+static struct vpfe_subdev_info vpfe_sub_devs[] = {
+       {
+               .name = "tvp5146",
+               .grp_id = 0,
+               .num_inputs = ARRAY_SIZE(tvp5146_inputs),
+               .inputs = tvp5146_inputs,
+               .routes = tvp5146_routes,
+               .can_route = 1,
+               .ccdc_if_params = {
+                       .if_type = VPFE_BT656,
+                       .hdpol = VPFE_PINPOL_POSITIVE,
+                       .vdpol = VPFE_PINPOL_POSITIVE,
+               },
+               .board_info = {
+                       I2C_BOARD_INFO("tvp5146", 0x5d),
+                       .platform_data = &tvp5146_pdata,
+               },
+       },
+};
+
+static struct vpfe_config vpfe_cfg = {
+       .num_subdevs = ARRAY_SIZE(vpfe_sub_devs),
+       .sub_devs = vpfe_sub_devs,
+       .i2c_adapter_id = 1,
+       .card_name = "DM365 EVM",
+       .ccdc = "ISIF",
+};
+
 static void __init evm_init_i2c(void)
 {
        davinci_init_i2c(&i2c_pdata);
@@ -497,6 +566,8 @@ static struct davinci_uart_config uart_config __initdata = {
 
 static void __init dm365_evm_map_io(void)
 {
+       /* setup input configuration for VPFE input devices */
+       dm365_set_vpfe_config(&vpfe_cfg);
        dm365_init();
 }
 
index dedf4d4f3a27ce3db98f30d50da84f6d8620fb7d..d84e85414d20d9c4a098e97459b22b2f254d3371 100644 (file)
@@ -125,7 +125,6 @@ static struct clk vpss_slave_clk = {
        .lpsc = DAVINCI_LPSC_VPSSSLV,
 };
 
-
 static struct clk clkout1_clk = {
        .name = "clkout1",
        .parent = &pll1_aux_clk,
@@ -665,6 +664,17 @@ static struct platform_device dm355_asp1_device = {
        .resource       = dm355_asp1_resources,
 };
 
+static void dm355_ccdc_setup_pinmux(void)
+{
+       davinci_cfg_reg(DM355_VIN_PCLK);
+       davinci_cfg_reg(DM355_VIN_CAM_WEN);
+       davinci_cfg_reg(DM355_VIN_CAM_VD);
+       davinci_cfg_reg(DM355_VIN_CAM_HD);
+       davinci_cfg_reg(DM355_VIN_YIN_EN);
+       davinci_cfg_reg(DM355_VIN_CINL_EN);
+       davinci_cfg_reg(DM355_VIN_CINH_EN);
+}
+
 static struct resource dm355_vpss_resources[] = {
        {
                /* VPSS BL Base address */
@@ -701,6 +711,10 @@ static struct resource vpfe_resources[] = {
                .end            = IRQ_VDINT1,
                .flags          = IORESOURCE_IRQ,
        },
+};
+
+static u64 vpfe_capture_dma_mask = DMA_BIT_MASK(32);
+static struct resource dm355_ccdc_resource[] = {
        /* CCDC Base address */
        {
                .flags          = IORESOURCE_MEM,
@@ -708,8 +722,18 @@ static struct resource vpfe_resources[] = {
                .end            = 0x01c70600 + 0x1ff,
        },
 };
+static struct platform_device dm355_ccdc_dev = {
+       .name           = "dm355_ccdc",
+       .id             = -1,
+       .num_resources  = ARRAY_SIZE(dm355_ccdc_resource),
+       .resource       = dm355_ccdc_resource,
+       .dev = {
+               .dma_mask               = &vpfe_capture_dma_mask,
+               .coherent_dma_mask      = DMA_BIT_MASK(32),
+               .platform_data          = dm355_ccdc_setup_pinmux,
+       },
+};
 
-static u64 vpfe_capture_dma_mask = DMA_BIT_MASK(32);
 static struct platform_device vpfe_capture_dev = {
        .name           = CAPTURE_DRV_NAME,
        .id             = -1,
@@ -857,20 +881,13 @@ static int __init dm355_init_devices(void)
        if (!cpu_is_davinci_dm355())
                return 0;
 
+       /* Add ccdc clock aliases */
+       clk_add_alias("master", dm355_ccdc_dev.name, "vpss_master", NULL);
+       clk_add_alias("slave", dm355_ccdc_dev.name, "vpss_master", NULL);
        davinci_cfg_reg(DM355_INT_EDMA_CC);
        platform_device_register(&dm355_edma_device);
        platform_device_register(&dm355_vpss_device);
-       /*
-        * setup Mux configuration for vpfe input and register
-        * vpfe capture platform device
-        */
-       davinci_cfg_reg(DM355_VIN_PCLK);
-       davinci_cfg_reg(DM355_VIN_CAM_WEN);
-       davinci_cfg_reg(DM355_VIN_CAM_VD);
-       davinci_cfg_reg(DM355_VIN_CAM_HD);
-       davinci_cfg_reg(DM355_VIN_YIN_EN);
-       davinci_cfg_reg(DM355_VIN_CINL_EN);
-       davinci_cfg_reg(DM355_VIN_CINH_EN);
+       platform_device_register(&dm355_ccdc_dev);
        platform_device_register(&vpfe_capture_dev);
 
        return 0;
index f53735cb922ebf756f17f29692ce56bf752430f6..ce9da43a628b91c9a471359976ee03d05c4a786d 100644 (file)
@@ -1008,6 +1008,97 @@ void __init dm365_init(void)
        davinci_common_init(&davinci_soc_info_dm365);
 }
 
+static struct resource dm365_vpss_resources[] = {
+       {
+               /* VPSS ISP5 Base address */
+               .name           = "isp5",
+               .start          = 0x01c70000,
+               .end            = 0x01c70000 + 0xff,
+               .flags          = IORESOURCE_MEM,
+       },
+       {
+               /* VPSS CLK Base address */
+               .name           = "vpss",
+               .start          = 0x01c70200,
+               .end            = 0x01c70200 + 0xff,
+               .flags          = IORESOURCE_MEM,
+       },
+};
+
+static struct platform_device dm365_vpss_device = {
+       .name                   = "vpss",
+       .id                     = -1,
+       .dev.platform_data      = "dm365_vpss",
+       .num_resources          = ARRAY_SIZE(dm365_vpss_resources),
+       .resource               = dm365_vpss_resources,
+};
+
+static struct resource vpfe_resources[] = {
+       {
+               .start          = IRQ_VDINT0,
+               .end            = IRQ_VDINT0,
+               .flags          = IORESOURCE_IRQ,
+       },
+       {
+               .start          = IRQ_VDINT1,
+               .end            = IRQ_VDINT1,
+               .flags          = IORESOURCE_IRQ,
+       },
+};
+
+static u64 vpfe_capture_dma_mask = DMA_BIT_MASK(32);
+static struct platform_device vpfe_capture_dev = {
+       .name           = CAPTURE_DRV_NAME,
+       .id             = -1,
+       .num_resources  = ARRAY_SIZE(vpfe_resources),
+       .resource       = vpfe_resources,
+       .dev = {
+               .dma_mask               = &vpfe_capture_dma_mask,
+               .coherent_dma_mask      = DMA_BIT_MASK(32),
+       },
+};
+
+static void dm365_isif_setup_pinmux(void)
+{
+       davinci_cfg_reg(DM365_VIN_CAM_WEN);
+       davinci_cfg_reg(DM365_VIN_CAM_VD);
+       davinci_cfg_reg(DM365_VIN_CAM_HD);
+       davinci_cfg_reg(DM365_VIN_YIN4_7_EN);
+       davinci_cfg_reg(DM365_VIN_YIN0_3_EN);
+}
+
+static struct resource isif_resource[] = {
+       /* ISIF Base address */
+       {
+               .start          = 0x01c71000,
+               .end            = 0x01c71000 + 0x1ff,
+               .flags          = IORESOURCE_MEM,
+       },
+       /* ISIF Linearization table 0 */
+       {
+               .start          = 0x1C7C000,
+               .end            = 0x1C7C000 + 0x2ff,
+               .flags          = IORESOURCE_MEM,
+       },
+       /* ISIF Linearization table 1 */
+       {
+               .start          = 0x1C7C400,
+               .end            = 0x1C7C400 + 0x2ff,
+               .flags          = IORESOURCE_MEM,
+       },
+};
+static struct platform_device dm365_isif_dev = {
+       .name           = "isif",
+       .id             = -1,
+       .num_resources  = ARRAY_SIZE(isif_resource),
+       .resource       = isif_resource,
+       .dev = {
+               .dma_mask               = &vpfe_capture_dma_mask,
+               .coherent_dma_mask      = DMA_BIT_MASK(32),
+               .platform_data          = dm365_isif_setup_pinmux,
+       },
+};
+
 static int __init dm365_init_devices(void)
 {
        if (!cpu_is_davinci_dm365())
@@ -1016,7 +1107,16 @@ static int __init dm365_init_devices(void)
        davinci_cfg_reg(DM365_INT_EDMA_CC);
        platform_device_register(&dm365_edma_device);
        platform_device_register(&dm365_emac_device);
-
+       /* Add isif clock alias */
+       clk_add_alias("master", dm365_isif_dev.name, "vpss_master", NULL);
+       platform_device_register(&dm365_vpss_device);
+       platform_device_register(&dm365_isif_dev);
+       platform_device_register(&vpfe_capture_dev);
        return 0;
 }
 postcore_initcall(dm365_init_devices);
+
+void dm365_set_vpfe_config(struct vpfe_config *cfg)
+{
+       vpfe_capture_dev.dev.platform_data = cfg;
+}
index 2cd008156deaa6da7d055df27572ef9ae52383b3..92aeb560068010b126cf8bd08390d7ead77c584e 100644 (file)
@@ -612,6 +612,11 @@ static struct resource vpfe_resources[] = {
                .end            = IRQ_VDINT1,
                .flags          = IORESOURCE_IRQ,
        },
+};
+
+static u64 vpfe_capture_dma_mask = DMA_BIT_MASK(32);
+static struct resource dm644x_ccdc_resource[] = {
+       /* CCDC Base address */
        {
                .start          = 0x01c70400,
                .end            = 0x01c70400 + 0xff,
@@ -619,7 +624,17 @@ static struct resource vpfe_resources[] = {
        },
 };
 
-static u64 vpfe_capture_dma_mask = DMA_BIT_MASK(32);
+static struct platform_device dm644x_ccdc_dev = {
+       .name           = "dm644x_ccdc",
+       .id             = -1,
+       .num_resources  = ARRAY_SIZE(dm644x_ccdc_resource),
+       .resource       = dm644x_ccdc_resource,
+       .dev = {
+               .dma_mask               = &vpfe_capture_dma_mask,
+               .coherent_dma_mask      = DMA_BIT_MASK(32),
+       },
+};
+
 static struct platform_device vpfe_capture_dev = {
        .name           = CAPTURE_DRV_NAME,
        .id             = -1,
@@ -769,9 +784,13 @@ static int __init dm644x_init_devices(void)
        if (!cpu_is_davinci_dm644x())
                return 0;
 
+       /* Add ccdc clock aliases */
+       clk_add_alias("master", dm644x_ccdc_dev.name, "vpss_master", NULL);
+       clk_add_alias("slave", dm644x_ccdc_dev.name, "vpss_slave", NULL);
        platform_device_register(&dm644x_edma_device);
        platform_device_register(&dm644x_emac_device);
        platform_device_register(&dm644x_vpss_device);
+       platform_device_register(&dm644x_ccdc_dev);
        platform_device_register(&vpfe_capture_dev);
 
        return 0;
index f1710a30e7baf2a7dbfca2bf7a98a9145eb030fb..9fc5a64a536424103361485102d32259e904f81c 100644 (file)
@@ -18,6 +18,7 @@
 #include <mach/emac.h>
 #include <mach/asp.h>
 #include <mach/keyscan.h>
+#include <media/davinci/vpfe_capture.h>
 
 #define DM365_EMAC_BASE                        (0x01D07000)
 #define DM365_EMAC_CNTRL_OFFSET                (0x0000)
@@ -36,4 +37,5 @@ void __init dm365_init_asp(struct snd_platform_data *pdata);
 void __init dm365_init_ks(struct davinci_ks_platform_data *pdata);
 void __init dm365_init_rtc(void);
 
+void dm365_set_vpfe_config(struct vpfe_config *cfg);
 #endif /* __ASM_ARCH_DM365_H */
index f93c596341914f48954d35e04dd2cbc384814e54..9bf33b30a0251f4172d4ae4a33c320459f08087d 100644 (file)
@@ -86,11 +86,19 @@ static struct amba_device cpu8815_amba_gpio[] = {
        },
 };
 
+static struct amba_device cpu8815_amba_rng = {
+       .dev = {
+               .init_name = "rng",
+       },
+       __MEM_4K_RESOURCE(NOMADIK_RNG_BASE),
+};
+
 static struct amba_device *amba_devs[] __initdata = {
        cpu8815_amba_gpio + 0,
        cpu8815_amba_gpio + 1,
        cpu8815_amba_gpio + 2,
        cpu8815_amba_gpio + 3,
+       &cpu8815_amba_rng
 };
 
 static int __init cpu8815_init(void)
index 31abe6d514b896b259224cbf48ae01d0213b4893..6709b1cd7c77b7b4eb48b2fc7f7ce208b20a3d94 100644 (file)
@@ -35,8 +35,6 @@
 #define PXA_CAMERA_VSP         0x400
 
 struct pxacamera_platform_data {
-       int (*init)(struct device *);
-
        unsigned long flags;
        unsigned long mclk_10khz;
 };
index 7a73b615c23d29c7d2702958d2688d8fc6fd1e85..477277739da5f8bd895b8bd814fd59c733dfc962 100644 (file)
@@ -38,6 +38,18 @@ void flush_cache_mm(struct mm_struct *mm);
 
 #define flush_kernel_dcache_range(start,size) \
        flush_kernel_dcache_range_asm((start), (start)+(size));
+/* vmap range flushes and invalidates.  Architecturally, we don't need
+ * the invalidate, because the CPU should refuse to speculate once an
+ * area has been flushed, so invalidate is left empty */
+static inline void flush_kernel_vmap_range(void *vaddr, int size)
+{
+       unsigned long start = (unsigned long)vaddr;
+
+       flush_kernel_dcache_range_asm(start, start + size);
+}
+static inline void invalidate_kernel_vmap_range(void *vaddr, int size)
+{
+}
 
 #define flush_cache_vmap(start, end)           flush_cache_all()
 #define flush_cache_vunmap(start, end)         flush_cache_all()
index 6be4503201ac4b03d6943fd3c37edacb795f2779..58f46734465ffad0f7dcb8412799b747c923ffd2 100644 (file)
@@ -78,14 +78,14 @@ static int setkey_fallback_cip(struct crypto_tfm *tfm, const u8 *in_key,
        struct s390_aes_ctx *sctx = crypto_tfm_ctx(tfm);
        int ret;
 
-       sctx->fallback.blk->base.crt_flags &= ~CRYPTO_TFM_REQ_MASK;
-       sctx->fallback.blk->base.crt_flags |= (tfm->crt_flags &
+       sctx->fallback.cip->base.crt_flags &= ~CRYPTO_TFM_REQ_MASK;
+       sctx->fallback.cip->base.crt_flags |= (tfm->crt_flags &
                        CRYPTO_TFM_REQ_MASK);
 
        ret = crypto_cipher_setkey(sctx->fallback.cip, in_key, key_len);
        if (ret) {
                tfm->crt_flags &= ~CRYPTO_TFM_RES_MASK;
-               tfm->crt_flags |= (sctx->fallback.blk->base.crt_flags &
+               tfm->crt_flags |= (sctx->fallback.cip->base.crt_flags &
                                CRYPTO_TFM_RES_MASK);
        }
        return ret;
index 2121fbb2ff4c313c5f0891b783ea4cbf3a571fe0..05cef50612930d76cc62c318b230eeeb0b1de368 100644 (file)
@@ -13,7 +13,6 @@ config SUPERH
        select HAVE_LMB
        select HAVE_OPROFILE
        select HAVE_GENERIC_DMA_COHERENT
-       select HAVE_IOREMAP_PROT if MMU
        select HAVE_ARCH_TRACEHOOK
        select HAVE_DMA_API_DEBUG
        select HAVE_DMA_ATTRS
@@ -22,6 +21,7 @@ config SUPERH
        select HAVE_KERNEL_GZIP
        select HAVE_KERNEL_BZIP2
        select HAVE_KERNEL_LZMA
+       select HAVE_KERNEL_LZO
        select HAVE_SYSCALL_TRACEPOINTS
        select RTC_LIB
        select GENERIC_ATOMIC64
@@ -35,6 +35,7 @@ config SUPERH32
        def_bool ARCH = "sh"
        select HAVE_KPROBES
        select HAVE_KRETPROBES
+       select HAVE_IOREMAP_PROT if MMU && !X2TLB
        select HAVE_FUNCTION_TRACER
        select HAVE_FTRACE_MCOUNT_RECORD
        select HAVE_DYNAMIC_FTRACE
@@ -42,6 +43,8 @@ config SUPERH32
        select HAVE_FTRACE_NMI_ENTER if DYNAMIC_FTRACE
        select HAVE_FUNCTION_GRAPH_TRACER
        select HAVE_ARCH_KGDB
+       select HAVE_HW_BREAKPOINT
+       select PERF_EVENTS if HAVE_HW_BREAKPOINT
        select ARCH_HIBERNATION_POSSIBLE if MMU
 
 config SUPERH64
@@ -78,11 +81,12 @@ config GENERIC_HARDIRQS
 config GENERIC_HARDIRQS_NO__DO_IRQ
        def_bool y
 
-config GENERIC_IRQ_PROBE
+config IRQ_PER_CPU
        def_bool y
 
-config IRQ_PER_CPU
+config SPARSE_IRQ
        def_bool y
+       depends on SUPERH32
 
 config GENERIC_GPIO
        def_bool n
@@ -548,8 +552,7 @@ config SH_PCLK_FREQ
                              CPU_SUBTYPE_SH7203 || \
                              CPU_SUBTYPE_SH7206 || \
                              CPU_SUBTYPE_SH7263 || \
-                             CPU_SUBTYPE_MXG    || \
-                             CPU_SUBTYPE_SH7786
+                             CPU_SUBTYPE_MXG
        default "60000000" if CPU_SUBTYPE_SH7751 || CPU_SUBTYPE_SH7751R
        default "66000000" if CPU_SUBTYPE_SH4_202
        default "50000000"
@@ -563,7 +566,8 @@ config SH_CLK_CPG
 
 config SH_CLK_CPG_LEGACY
        depends on SH_CLK_CPG
-       def_bool y if !CPU_SUBTYPE_SH7785 && !ARCH_SHMOBILE
+       def_bool y if !CPU_SUBTYPE_SH7785 && !ARCH_SHMOBILE && \
+                     !CPU_SUBTYPE_SH7786
 
 config SH_CLK_MD
        int "CPU Mode Pin Setting"
@@ -725,18 +729,6 @@ config GUSA_RB
          LLSC, this should be more efficient than the other alternative of
          disabling interrupts around the atomic sequence.
 
-config SPARSE_IRQ
-       bool "Support sparse irq numbering"
-       depends on EXPERIMENTAL
-       help
-         This enables support for sparse irqs. This is useful in general
-         as most CPUs have a fairly sparse array of IRQ vectors, which
-         the irq_desc then maps directly on to. Systems with a high
-         number of off-chip IRQs will want to treat this as
-         experimental until they have been independently verified.
-
-         If you don't know what to do here, say N.
-
 endmenu
 
 menu "Boot options"
@@ -822,11 +814,15 @@ config MAPLE
 config PCI
        bool "PCI support"
        depends on SYS_SUPPORTS_PCI
+       select PCI_DOMAINS
        help
          Find out whether you have a PCI motherboard. PCI is the name of a
          bus system, i.e. the way the CPU talks to the other stuff inside
          your box. If you have PCI, say Y, otherwise N.
 
+config PCI_DOMAINS
+       bool
+
 source "drivers/pci/pcie/Kconfig"
 
 source "drivers/pci/Kconfig"
index cd6e3ea598d5b8d028720fb806ddb82a39b2e863..ddf096c7d8bf8e230abc484977956ade22c34029 100644 (file)
@@ -68,7 +68,8 @@ config SH_STORE_QUEUES
 
 config SPECULATIVE_EXECUTION
        bool "Speculative subroutine return"
-       depends on CPU_SUBTYPE_SH7780 && EXPERIMENTAL
+       depends on EXPERIMENTAL
+       depends on CPU_SUBTYPE_SH7780 || CPU_SUBTYPE_SH7785 || CPU_SUBTYPE_SH7786
        help
          This enables support for a speculative instruction fetch for
          subroutine return. There are various pitfalls associated with
index db91925c79d1185665dafc0216c01f7df8c346af..588579ac2e3526b2fed044684c419749f0804433 100644 (file)
@@ -83,6 +83,7 @@ defaultimage-$(CONFIG_SH_AP325RXA)            := uImage
 defaultimage-$(CONFIG_SH_7724_SOLUTION_ENGINE) := uImage
 defaultimage-$(CONFIG_SH_7206_SOLUTION_ENGINE) := vmlinux
 defaultimage-$(CONFIG_SH_7619_SOLUTION_ENGINE) := vmlinux
+defaultimage-$(CONFIG_SH_SDK7786)              := vmlinux.bin
 
 # Set some sensible Kbuild defaults
 KBUILD_IMAGE           := $(defaultimage-y)
@@ -143,11 +144,11 @@ machdir-$(CONFIG_SH_AP325RXA)                     += mach-ap325rxa
 machdir-$(CONFIG_SH_KFR2R09)                   += mach-kfr2r09
 machdir-$(CONFIG_SH_ECOVEC)                    += mach-ecovec24
 machdir-$(CONFIG_SH_SDK7780)                   += mach-sdk7780
+machdir-$(CONFIG_SH_SDK7786)                   += mach-sdk7786
 machdir-$(CONFIG_SH_X3PROTO)                   += mach-x3proto
 machdir-$(CONFIG_SH_SH7763RDP)                 += mach-sh7763rdp
 machdir-$(CONFIG_SH_SH4202_MICRODEV)           += mach-microdev
 machdir-$(CONFIG_SH_LANDISK)                   += mach-landisk
-machdir-$(CONFIG_SH_TITAN)                     += mach-titan
 machdir-$(CONFIG_SH_LBOX_RE2)                  += mach-lboxre2
 machdir-$(CONFIG_SH_CAYMAN)                    += mach-cayman
 machdir-$(CONFIG_SH_RSK)                       += mach-rsk
@@ -203,8 +204,9 @@ endif
 libs-$(CONFIG_SUPERH32)                := arch/sh/lib/ $(libs-y)
 libs-$(CONFIG_SUPERH64)                := arch/sh/lib64/ $(libs-y)
 
-BOOT_TARGETS = uImage uImage.bz2 uImage.gz uImage.lzma uImage.srec uImage.bin \
-              zImage vmlinux.srec romImage
+BOOT_TARGETS = uImage uImage.bz2 uImage.gz uImage.lzma uImage.lzo \
+              uImage.srec uImage.bin zImage vmlinux.bin vmlinux.srec \
+              romImage
 PHONY += $(BOOT_TARGETS)
 
 all: $(KBUILD_IMAGE)
@@ -225,10 +227,12 @@ define archhelp
        @echo '  zImage                    - Compressed kernel image'
        @echo '  romImage                  - Compressed ROM image, if supported'
        @echo '  vmlinux.srec              - Create an ELF S-record'
+       @echo '  vmlinux.bin               - Create an uncompressed binary image'
        @echo '* uImage                    - Alias to bootable U-Boot image'
        @echo '  uImage.srec               - Create an S-record for U-Boot'
        @echo '  uImage.bin                - Kernel-only image for U-Boot (bin)'
        @echo '* uImage.gz                 - Kernel-only image for U-Boot (gzip)'
        @echo '  uImage.bz2                - Kernel-only image for U-Boot (bzip2)'
        @echo '  uImage.lzma               - Kernel-only image for U-Boot (lzma)'
+       @echo '  uImage.lzo                - Kernel-only image for U-Boot (lzo)'
 endef
index aedd9deb5de2b94077a7ee04b404d2589efb9b7f..938e87d51482e991bd3fab373e8b1df67de070ce 100644 (file)
@@ -150,6 +150,14 @@ config SH_SDK7780
          Select SDK7780 if configuring for a Renesas SH7780 SDK7780R3
          evaluation board.
 
+config SH_SDK7786
+       bool "SDK7786"
+       depends on CPU_SUBTYPE_SH7786
+       select SYS_SUPPORTS_PCI
+       help
+         Select SDK7786 if configuring for a Renesas Technology Europe
+         SH7786-65nm board.
+
 config SH_HIGHLANDER
        bool "Highlander"
        depends on CPU_SUBTYPE_SH7780 || CPU_SUBTYPE_SH7785
index ce0f2638178469b53fbd497c3ee4928efeae5cce..4f90f9b7a9228e3991e900a04190b5f88c01dd10 100644 (file)
@@ -8,3 +8,4 @@ obj-$(CONFIG_SH_SHMIN)          += board-shmin.o
 obj-$(CONFIG_SH_EDOSK7760)     += board-edosk7760.o
 obj-$(CONFIG_SH_ESPT)          += board-espt.o
 obj-$(CONFIG_SH_POLARIS)       += board-polaris.o
+obj-$(CONFIG_SH_TITAN)         += board-titan.o
index 99ffc5f1c0dd3900f3aa8a24337dd1a65b8e90ce..efba450a051838fa49d792676f3a9285ae9a1ff8 100644 (file)
@@ -23,7 +23,7 @@
 #include <asm/heartbeat.h>
 #include <cpu/sh7720.h>
 
-#define LAN9115_READY  (ctrl_inl(0xA8000084UL) & 0x00000001UL)
+#define LAN9115_READY  (__raw_readl(0xA8000084UL) & 0x00000001UL)
 
 /* Prefer cmdline over RedBoot */
 static const char *probes[] = { "cmdlinepart", "RedBoot", NULL };
@@ -60,33 +60,33 @@ static void __init setup_chip_select(void)
 {
        /* CS2: LAN (0x08000000 - 0x0bffffff) */
        /* no idle cycles, normal space, 8 bit data bus */
-       ctrl_outl(0x36db0400, CS2BCR);
+       __raw_writel(0x36db0400, CS2BCR);
        /* (SW:1.5 WR:3 HW:1.5), ext. wait */
-       ctrl_outl(0x000003c0, CS2WCR);
+       __raw_writel(0x000003c0, CS2WCR);
 
        /* CS4: CAN1 (0xb0000000 - 0xb3ffffff) */
        /* no idle cycles, normal space, 8 bit data bus */
-       ctrl_outl(0x00000200, CS4BCR);
+       __raw_writel(0x00000200, CS4BCR);
        /* (SW:1.5 WR:3 HW:1.5), ext. wait */
-       ctrl_outl(0x00100981, CS4WCR);
+       __raw_writel(0x00100981, CS4WCR);
 
        /* CS5a: CAN2 (0xb4000000 - 0xb5ffffff) */
        /* no idle cycles, normal space, 8 bit data bus */
-       ctrl_outl(0x00000200, CS5ABCR);
+       __raw_writel(0x00000200, CS5ABCR);
        /* (SW:1.5 WR:3 HW:1.5), ext. wait */
-       ctrl_outl(0x00100981, CS5AWCR);
+       __raw_writel(0x00100981, CS5AWCR);
 
        /* CS5b: CAN3 (0xb6000000 - 0xb7ffffff) */
        /* no idle cycles, normal space, 8 bit data bus */
-       ctrl_outl(0x00000200, CS5BBCR);
+       __raw_writel(0x00000200, CS5BBCR);
        /* (SW:1.5 WR:3 HW:1.5), ext. wait */
-       ctrl_outl(0x00100981, CS5BWCR);
+       __raw_writel(0x00100981, CS5BWCR);
 
        /* CS6a: Rotary (0xb8000000 - 0xb9ffffff) */
        /* no idle cycles, normal space, 8 bit data bus */
-       ctrl_outl(0x00000200, CS6ABCR);
+       __raw_writel(0x00000200, CS6ABCR);
        /* (SW:1.5 WR:3 HW:1.5), no ext. wait */
-       ctrl_outl(0x001009C1, CS6AWCR);
+       __raw_writel(0x001009C1, CS6AWCR);
 }
 
 static void __init setup_port_multiplexing(void)
@@ -94,71 +94,71 @@ static void __init setup_port_multiplexing(void)
        /* A7 GPO(LED8);     A6 GPO(LED7);     A5 GPO(LED6);      A4 GPO(LED5);
         * A3 GPO(LED4);     A2 GPO(LED3);     A1 GPO(LED2);      A0 GPO(LED1);
         */
-       ctrl_outw(0x5555, PORT_PACR);   /* 01 01 01 01 01 01 01 01 */
+       __raw_writew(0x5555, PORT_PACR);        /* 01 01 01 01 01 01 01 01 */
 
        /* B7 GPO(RST4);   B6 GPO(RST3);  B5 GPO(RST2);    B4 GPO(RST1);
         * B3 GPO(PB3);    B2 GPO(PB2);   B1 GPO(PB1);     B0 GPO(PB0);
         */
-       ctrl_outw(0x5555, PORT_PBCR);   /* 01 01 01 01 01 01 01 01 */
+       __raw_writew(0x5555, PORT_PBCR);        /* 01 01 01 01 01 01 01 01 */
 
        /* C7 GPO(PC7);   C6 GPO(PC6);    C5 GPO(PC5);     C4 GPO(PC4);
         * C3 LCD_DATA3;  C2 LCD_DATA2;   C1 LCD_DATA1;    C0 LCD_DATA0;
         */
-       ctrl_outw(0x5500, PORT_PCCR);   /* 01 01 01 01 00 00 00 00 */
+       __raw_writew(0x5500, PORT_PCCR);        /* 01 01 01 01 00 00 00 00 */
 
        /* D7 GPO(PD7); D6 GPO(PD6);    D5 GPO(PD5);       D4 GPO(PD4);
         * D3 GPO(PD3); D2 GPO(PD2);    D1 GPO(PD1);       D0 GPO(PD0);
         */
-       ctrl_outw(0x5555, PORT_PDCR);   /* 01 01 01 01 01 01 01 01 */
+       __raw_writew(0x5555, PORT_PDCR);        /* 01 01 01 01 01 01 01 01 */
 
        /* E7 (x);        E6 GPI(nu);    E5 GPI(nu);      E4 LCD_M_DISP;
         * E3 LCD_CL1;    E2 LCD_CL2;    E1 LCD_DON;      E0 LCD_FLM;
         */
-       ctrl_outw(0x3C00, PORT_PECR);   /* 00 11 11 00 00 00 00 00 */
+       __raw_writew(0x3C00, PORT_PECR);        /* 00 11 11 00 00 00 00 00 */
 
        /* F7 (x);           F6 DA1(VLCD);     F5 DA0(nc);        F4 AN3;
         * F3 AN2(MID_AD);   F2 AN1(EARTH_AD); F1 AN0(TEMP);      F0 GPI+(nc);
         */
-       ctrl_outw(0x0002, PORT_PFCR);   /* 00 00 00 00 00 00 00 10 */
+       __raw_writew(0x0002, PORT_PFCR);        /* 00 00 00 00 00 00 00 10 */
 
        /* G7 (x);        G6 IRQ5(TOUCH_BUSY); G5 IRQ4(TOUCH_IRQ); G4 GPI(KEY2);
         * G3 GPI(KEY1);  G2 GPO(LED11);        G1 GPO(LED10);     G0 GPO(LED9);
         */
-       ctrl_outw(0x03D5, PORT_PGCR);   /* 00 00 00 11 11 01 01 01 */
+       __raw_writew(0x03D5, PORT_PGCR);        /* 00 00 00 11 11 01 01 01 */
 
        /* H7 (x);            H6 /RAS(BRAS);      H5 /CAS(BCAS); H4 CKE(BCKE);
         * H3 GPO(EARTH_OFF); H2 GPO(EARTH_TEST); H1 USB2_PWR;   H0 USB1_PWR;
         */
-       ctrl_outw(0x0050, PORT_PHCR);   /* 00 00 00 00 01 01 00 00 */
+       __raw_writew(0x0050, PORT_PHCR);        /* 00 00 00 00 01 01 00 00 */
 
        /* J7 (x);        J6 AUDCK;        J5 ASEBRKAK;     J4 AUDATA3;
         * J3 AUDATA2;    J2 AUDATA1;      J1 AUDATA0;      J0 AUDSYNC;
         */
-       ctrl_outw(0x0000, PORT_PJCR);   /* 00 00 00 00 00 00 00 00 */
+       __raw_writew(0x0000, PORT_PJCR);        /* 00 00 00 00 00 00 00 00 */
 
        /* K7 (x);          K6 (x);          K5 (x);       K4 (x);
         * K3 PINT7(/PWR2); K2 PINT6(/PWR1); K1 PINT5(nu); K0 PINT4(FLASH_READY)
         */
-       ctrl_outw(0x00FF, PORT_PKCR);   /* 00 00 00 00 11 11 11 11 */
+       __raw_writew(0x00FF, PORT_PKCR);        /* 00 00 00 00 11 11 11 11 */
 
        /* L7 TRST;        L6 TMS;           L5 TDO;              L4 TDI;
         * L3 TCK;         L2 (x);           L1 (x);              L0 (x);
         */
-       ctrl_outw(0x0000, PORT_PLCR);   /* 00 00 00 00 00 00 00 00 */
+       __raw_writew(0x0000, PORT_PLCR);        /* 00 00 00 00 00 00 00 00 */
 
        /* M7 GPO(CURRENT_SINK);    M6 GPO(PWR_SWITCH);     M5 GPO(LAN_SPEED);
         * M4 GPO(LAN_RESET);       M3 GPO(BUZZER);         M2 GPO(LCD_BL);
         * M1 CS5B(CAN3_CS);        M0 GPI+(nc);
         */
-       ctrl_outw(0x5552, PORT_PMCR);      /* 01 01 01 01 01 01 00 10 */
+       __raw_writew(0x5552, PORT_PMCR);           /* 01 01 01 01 01 01 00 10 */
 
        /* CURRENT_SINK=off,    PWR_SWITCH=off, LAN_SPEED=100MBit,
         * LAN_RESET=off,       BUZZER=off,     LCD_BL=off
         */
 #if CONFIG_SH_MAGIC_PANEL_R2_VERSION == 2
-       ctrl_outb(0x30, PORT_PMDR);
+       __raw_writeb(0x30, PORT_PMDR);
 #elif CONFIG_SH_MAGIC_PANEL_R2_VERSION == 3
-       ctrl_outb(0xF0, PORT_PMDR);
+       __raw_writeb(0xF0, PORT_PMDR);
 #else
 #error Unknown revision of PLATFORM_MP_R2
 #endif
@@ -167,8 +167,8 @@ static void __init setup_port_multiplexing(void)
         * P4 GPO(nu);         P3 IRQ3(LAN_IRQ);  P2 IRQ2(CAN3_IRQ);
         * P1 IRQ1(CAN2_IRQ);  P0 IRQ0(CAN1_IRQ)
         */
-       ctrl_outw(0x0100, PORT_PPCR);   /* 00 00 00 01 00 00 00 00 */
-       ctrl_outb(0x10, PORT_PPDR);
+       __raw_writew(0x0100, PORT_PPCR);        /* 00 00 00 01 00 00 00 00 */
+       __raw_writeb(0x10, PORT_PPDR);
 
        /* R7 A25;           R6 A24;         R5 A23;              R4 A22;
         * R3 A21;           R2 A20;         R1 A19;              R0 A0;
@@ -185,22 +185,22 @@ static void __init setup_port_multiplexing(void)
        /* S7 (x);              S6 (x);        S5 (x);       S4 GPO(EEPROM_CS2);
         * S3 GPO(EEPROM_CS1);  S2 SIOF0_TXD;  S1 SIOF0_RXD; S0 SIOF0_SCK;
         */
-       ctrl_outw(0x0140, PORT_PSCR);   /* 00 00 00 01 01 00 00 00 */
+       __raw_writew(0x0140, PORT_PSCR);        /* 00 00 00 01 01 00 00 00 */
 
        /* T7 (x);         T6 (x);        T5 (x);         T4 COM1_CTS;
         * T3 COM1_RTS;    T2 COM1_TXD;   T1 COM1_RXD;    T0 GPO(WDOG)
         */
-       ctrl_outw(0x0001, PORT_PTCR);   /* 00 00 00 00 00 00 00 01 */
+       __raw_writew(0x0001, PORT_PTCR);        /* 00 00 00 00 00 00 00 01 */
 
        /* U7 (x);           U6 (x);       U5 (x);        U4 GPI+(/AC_FAULT);
         * U3 GPO(TOUCH_CS); U2 TOUCH_TXD; U1 TOUCH_RXD;  U0 TOUCH_SCK;
         */
-       ctrl_outw(0x0240, PORT_PUCR);   /* 00 00 00 10 01 00 00 00 */
+       __raw_writew(0x0240, PORT_PUCR);        /* 00 00 00 10 01 00 00 00 */
 
        /* V7 (x);        V6 (x);       V5 (x);           V4 GPO(MID2);
         * V3 GPO(MID1);  V2 CARD_TxD;  V1 CARD_RxD;      V0 GPI+(/BAT_FAULT);
         */
-       ctrl_outw(0x0142, PORT_PVCR);   /* 00 00 00 01 01 00 00 10 */
+       __raw_writew(0x0142, PORT_PVCR);        /* 00 00 00 01 01 00 00 10 */
 }
 
 static void __init mpr2_setup(char **cmdline_p)
@@ -209,24 +209,24 @@ static void __init mpr2_setup(char **cmdline_p)
         * /PCC_CD1, /PCC_CD2,  PCC_BVD1, PCC_BVD2,
         * /IOIS16,  IRQ4,      IRQ5,     USB1d_SUSPEND
         */
-       ctrl_outw(0xAABC, PORT_PSELA);
+       __raw_writew(0xAABC, PORT_PSELA);
        /* set Pin Select Register B:
         * /SCIF0_RTS, /SCIF0_CTS, LCD_VCPWC,
         * LCD_VEPWC,  IIC_SDA,    IIC_SCL, Reserved
         */
-       ctrl_outw(0x3C00, PORT_PSELB);
+       __raw_writew(0x3C00, PORT_PSELB);
        /* set Pin Select Register C:
         * SIOF1_SCK, SIOF1_RxD, SCIF1_RxD, SCIF1_TxD, Reserved
         */
-       ctrl_outw(0x0000, PORT_PSELC);
+       __raw_writew(0x0000, PORT_PSELC);
        /* set Pin Select Register D: Reserved, SIOF1_TxD, Reserved, SIOF1_MCLK,
         * Reserved, SIOF1_SYNC, Reserved, SCIF1_SCK, Reserved
         */
-       ctrl_outw(0x0000, PORT_PSELD);
+       __raw_writew(0x0000, PORT_PSELD);
        /* set USB TxRx Control: Reserved, DRV, Reserved, USB_TRANS, USB_SEL */
-       ctrl_outw(0x0101, PORT_UTRCTL);
+       __raw_writew(0x0101, PORT_UTRCTL);
        /* set USB Clock Control: USSCS, USSTB, Reserved (HighByte always A5) */
-       ctrl_outw(0xA5C0, PORT_UCLKCR_W);
+       __raw_writew(0xA5C0, PORT_UCLKCR_W);
 
        setup_chip_select();
 
index 62607eb5100444985c164b29df04ccaec9d980da..594866356c247cbc6ecb2aa10943443f09ca2030 100644 (file)
@@ -59,15 +59,12 @@ static unsigned char heartbeat_bit_pos[] = { 0, 1, 2, 3 };
 static struct heartbeat_data heartbeat_data = {
        .bit_pos        = heartbeat_bit_pos,
        .nr_bits        = ARRAY_SIZE(heartbeat_bit_pos),
-       .regsize        = 8,
 };
 
-static struct resource heartbeat_resources[] = {
-       [0] = {
-               .start  = PORT_PCDR,
-               .end    = PORT_PCDR,
-               .flags  = IORESOURCE_MEM,
-       },
+static struct resource heartbeat_resource = {
+       .start  = PORT_PCDR,
+       .end    = PORT_PCDR,
+       .flags  = IORESOURCE_MEM | IORESOURCE_MEM_8BIT,
 };
 
 static struct platform_device heartbeat_device = {
@@ -76,8 +73,8 @@ static struct platform_device heartbeat_device = {
        .dev    = {
                .platform_data  = &heartbeat_data,
        },
-       .num_resources  = ARRAY_SIZE(heartbeat_resources),
-       .resource       = heartbeat_resources,
+       .num_resources  = 1,
+       .resource       = &heartbeat_resource,
 };
 
 static struct platform_device *polaris_devices[] __initdata = {
@@ -92,15 +89,15 @@ static int __init polaris_initialise(void)
        printk(KERN_INFO "Configuring Polaris external bus\n");
 
        /* Configure area 5 with 2 wait states */
-       wcr = ctrl_inw(WCR2);
+       wcr = __raw_readw(WCR2);
        wcr &= (~AREA5_WAIT_CTRL);
        wcr |= (WAIT_STATES_10 << 10);
-       ctrl_outw(wcr, WCR2);
+       __raw_writew(wcr, WCR2);
 
        /* Configure area 5 for 32-bit access */
-       bcr_mask = ctrl_inw(BCR2);
+       bcr_mask = __raw_readw(BCR2);
        bcr_mask |= 1 << 10;
-       ctrl_outw(bcr_mask, BCR2);
+       __raw_writew(bcr_mask, BCR2);
 
        return platform_add_devices(polaris_devices,
                                    ARRAY_SIZE(polaris_devices));
@@ -131,13 +128,13 @@ static struct ipr_desc ipr_irq_desc = {
 static void __init init_polaris_irq(void)
 {
        /* Disable all interrupts */
-       ctrl_outw(0, BCR_ILCRA);
-       ctrl_outw(0, BCR_ILCRB);
-       ctrl_outw(0, BCR_ILCRC);
-       ctrl_outw(0, BCR_ILCRD);
-       ctrl_outw(0, BCR_ILCRE);
-       ctrl_outw(0, BCR_ILCRF);
-       ctrl_outw(0, BCR_ILCRG);
+       __raw_writew(0, BCR_ILCRA);
+       __raw_writew(0, BCR_ILCRB);
+       __raw_writew(0, BCR_ILCRC);
+       __raw_writew(0, BCR_ILCRD);
+       __raw_writew(0, BCR_ILCRE);
+       __raw_writew(0, BCR_ILCRF);
+       __raw_writew(0, BCR_ILCRG);
 
        register_ipr_controller(&ipr_irq_desc);
 }
index e5a8a2fde39c12b61c6afe53f30a45ef47649f39..fe7e686c94ac004fc19bc569df8ee271aad932f1 100644 (file)
@@ -21,6 +21,7 @@
 #include <linux/i2c-algo-pca.h>
 #include <linux/usb/r8a66597.h>
 #include <linux/irq.h>
+#include <linux/io.h>
 #include <linux/clk.h>
 #include <linux/errno.h>
 #include <mach/sh7785lcr.h>
  * NOTE: This board has 2 physical memory maps.
  *      Please look at include/asm-sh/sh7785lcr.h or hardware manual.
  */
-static struct resource heartbeat_resources[] = {
-       [0] = {
-               .start  = PLD_LEDCR,
-               .end    = PLD_LEDCR,
-               .flags  = IORESOURCE_MEM,
-       },
-};
-
-static struct heartbeat_data heartbeat_data = {
-       .regsize = 8,
+static struct resource heartbeat_resource = {
+       .start  = PLD_LEDCR,
+       .end    = PLD_LEDCR,
+       .flags  = IORESOURCE_MEM | IORESOURCE_MEM_8BIT,
 };
 
 static struct platform_device heartbeat_device = {
        .name           = "heartbeat",
        .id             = -1,
-       .dev    = {
-               .platform_data  = &heartbeat_data,
-       },
-       .num_resources  = ARRAY_SIZE(heartbeat_resources),
-       .resource       = heartbeat_resources,
+       .num_resources  = 1,
+       .resource       = &heartbeat_resource,
 };
 
 static struct mtd_partition nor_flash_partitions[] = {
@@ -341,8 +333,14 @@ static void __init sh7785lcr_setup(char **cmdline_p)
        pm_power_off = sh7785lcr_power_off;
 
        /* sm501 DRAM configuration */
-       sm501_reg = (void __iomem *)0xb3e00000 + SM501_DRAM_CONTROL;
-       writel(0x000307c2, sm501_reg);
+       sm501_reg = ioremap_nocache(SM107_REG_ADDR, SM501_DRAM_CONTROL);
+       if (!sm501_reg) {
+               printk(KERN_ERR "%s: ioremap error.\n", __func__);
+               return;
+       }
+
+       writel(0x000307c2, sm501_reg + SM501_DRAM_CONTROL);
+       iounmap(sm501_reg);
 }
 
 /* Return the board specific boot mode pin configuration */
index b1dcbbc89188856d51cadc0292bee7c1cfe0986d..325bed53b87e71fdab20550f8b6e5f394d2b38e2 100644 (file)
@@ -17,8 +17,8 @@
 
 static void __init init_shmin_irq(void)
 {
-       ctrl_outw(0x2a00, PFC_PHCR);    // IRQ0-3=IRQ
-       ctrl_outw(0x0aaa, INTC_ICR1);   // IRQ0-3=IRQ-mode,Low-active.
+       __raw_writew(0x2a00, PFC_PHCR); // IRQ0-3=IRQ
+       __raw_writew(0x0aaa, INTC_ICR1);        // IRQ0-3=IRQ-mode,Low-active.
        plat_irq_setup_pins(IRQ_MODE_IRQ);
 }
 
similarity index 56%
rename from arch/sh/boards/mach-titan/setup.c
rename to arch/sh/boards/board-titan.c
index 81e7e0f03863d510f9144d9c99f3eff1ed0fe938..94c36c7bc0b3bc1701768f938e8d92e6d3add5b9 100644 (file)
@@ -19,26 +19,6 @@ static void __init init_titan_irq(void)
 }
 
 static struct sh_machine_vector mv_titan __initmv = {
-       .mv_name =      "Titan",
-
-       .mv_inb =       titan_inb,
-       .mv_inw =       titan_inw,
-       .mv_inl =       titan_inl,
-       .mv_outb =      titan_outb,
-       .mv_outw =      titan_outw,
-       .mv_outl =      titan_outl,
-
-       .mv_inb_p =     titan_inb_p,
-       .mv_inw_p =     titan_inw,
-       .mv_inl_p =     titan_inl,
-       .mv_outb_p =    titan_outb_p,
-       .mv_outw_p =    titan_outw,
-       .mv_outl_p =    titan_outl,
-
-       .mv_insl =      titan_insl,
-       .mv_outsl =     titan_outsl,
-
-       .mv_ioport_map = titan_ioport_map,
-
-       .mv_init_irq =  init_titan_irq,
+       .mv_name        = "Titan",
+       .mv_init_irq    = init_titan_irq,
 };
index 36b8bac9b1247f25ad1fa88c3d010af9b7e4f131..a9bd6e3ee10b9eabf5d5d5e72924ffcfacd47e00 100644 (file)
@@ -2,7 +2,7 @@
  * Renesas Technology Corp. SH7786 Urquell Support.
  *
  * Copyright (C) 2008  Kuninori Morimoto <morimoto.kuninori@renesas.com>
- * Copyright (C) 2009  Paul Mundt
+ * Copyright (C) 2009, 2010  Paul Mundt
  *
  * Based on board-sh7785lcr.c
  * Copyright (C) 2008  Yoshihiro Shimoda
@@ -19,6 +19,7 @@
 #include <linux/delay.h>
 #include <linux/gpio.h>
 #include <linux/irq.h>
+#include <linux/clk.h>
 #include <mach/urquell.h>
 #include <cpu/sh7786.h>
 #include <asm/heartbeat.h>
  */
 
 /* HeartBeat */
-static struct resource heartbeat_resources[] = {
-       [0] = {
-               .start  = BOARDREG(SLEDR),
-               .end    = BOARDREG(SLEDR),
-               .flags  = IORESOURCE_MEM,
-       },
-};
-
-static struct heartbeat_data heartbeat_data = {
-       .regsize = 16,
+static struct resource heartbeat_resource = {
+       .start  = BOARDREG(SLEDR),
+       .end    = BOARDREG(SLEDR),
+       .flags  = IORESOURCE_MEM | IORESOURCE_MEM_16BIT,
 };
 
 static struct platform_device heartbeat_device = {
        .name           = "heartbeat",
        .id             = -1,
-       .dev    = {
-               .platform_data  = &heartbeat_data,
-       },
-       .num_resources  = ARRAY_SIZE(heartbeat_resources),
-       .resource       = heartbeat_resources,
+       .num_resources  = 1,
+       .resource       = &heartbeat_resource,
 };
 
 /* LAN91C111 */
@@ -184,6 +176,27 @@ static int urquell_mode_pins(void)
        return __raw_readw(UBOARDREG(MDSWMR));
 }
 
+static int urquell_clk_init(void)
+{
+       struct clk *clk;
+       int ret;
+
+       /*
+        * Only handle the EXTAL case, anyone interfacing a crystal
+        * resonator will need to provide their own input clock.
+        */
+       if (test_mode_pin(MODE_PIN9))
+               return -EINVAL;
+
+       clk = clk_get(NULL, "extal");
+       if (!clk || IS_ERR(clk))
+               return PTR_ERR(clk);
+       ret = clk_set_rate(clk, 33333333);
+       clk_put(clk);
+
+       return ret;
+}
+
 /* Initialize the board */
 static void __init urquell_setup(char **cmdline_p)
 {
@@ -200,4 +213,5 @@ static struct sh_machine_vector mv_urquell __initmv = {
        .mv_setup       = urquell_setup,
        .mv_init_irq    = urquell_init_irq,
        .mv_mode_pins   = urquell_mode_pins,
+       .mv_clk_init    = urquell_clk_init,
 };
index 1f5fa5c44f6df77d42f0166893abf815ed54c981..57e37e2842082e84588718007fdd45f599b6c8a5 100644 (file)
@@ -159,21 +159,21 @@ static void ap320_wvga_power_on(void *board_data)
        msleep(100);
 
        /* ASD AP-320/325 LCD ON */
-       ctrl_outw(FPGA_LCDREG_VAL, FPGA_LCDREG);
+       __raw_writew(FPGA_LCDREG_VAL, FPGA_LCDREG);
 
        /* backlight */
        gpio_set_value(GPIO_PTS3, 0);
-       ctrl_outw(0x100, FPGA_BKLREG);
+       __raw_writew(0x100, FPGA_BKLREG);
 }
 
 static void ap320_wvga_power_off(void *board_data)
 {
        /* backlight */
-       ctrl_outw(0, FPGA_BKLREG);
+       __raw_writew(0, FPGA_BKLREG);
        gpio_set_value(GPIO_PTS3, 1);
 
        /* ASD AP-320/325 LCD OFF */
-       ctrl_outw(0, FPGA_LCDREG);
+       __raw_writew(0, FPGA_LCDREG);
 }
 
 static struct sh_mobile_lcdc_info lcdc_info = {
@@ -420,7 +420,7 @@ static struct resource sdhi0_cn3_resources[] = {
                .flags  = IORESOURCE_MEM,
        },
        [1] = {
-               .start  = 101,
+               .start  = 100,
                .flags  = IORESOURCE_IRQ,
        },
 };
@@ -443,7 +443,7 @@ static struct resource sdhi1_cn7_resources[] = {
                .flags  = IORESOURCE_MEM,
        },
        [1] = {
-               .start  = 24,
+               .start  = 23,
                .flags  = IORESOURCE_IRQ,
        },
 };
@@ -471,8 +471,8 @@ static struct i2c_board_info ap325rxa_i2c_camera[] = {
 };
 
 static struct ov772x_camera_info ov7725_info = {
-       .buswidth       = SOCAM_DATAWIDTH_8,
-       .flags          = OV772X_FLAG_VFLIP | OV772X_FLAG_HFLIP,
+       .flags          = OV772X_FLAG_VFLIP | OV772X_FLAG_HFLIP | \
+                         OV772X_FLAG_8BIT,
        .edgectrl       = OV772X_AUTO_EDGECTRL(0xf, 0),
 };
 
@@ -595,7 +595,7 @@ static int __init ap325rxa_devices_setup(void)
        gpio_request(GPIO_PTZ4, NULL);
        gpio_direction_output(GPIO_PTZ4, 0); /* SADDR */
 
-       ctrl_outw(ctrl_inw(PORT_MSELCRB) & ~0x0001, PORT_MSELCRB);
+       __raw_writew(__raw_readw(PORT_MSELCRB) & ~0x0001, PORT_MSELCRB);
 
        /* FLCTL */
        gpio_request(GPIO_FN_FCE, NULL);
@@ -613,9 +613,9 @@ static int __init ap325rxa_devices_setup(void)
        gpio_request(GPIO_FN_FWE, NULL);
        gpio_request(GPIO_FN_FRB, NULL);
 
-       ctrl_outw(0, PORT_HIZCRC);
-       ctrl_outw(0xFFFF, PORT_DRVCRA);
-       ctrl_outw(0xFFFF, PORT_DRVCRB);
+       __raw_writew(0, PORT_HIZCRC);
+       __raw_writew(0xFFFF, PORT_DRVCRA);
+       __raw_writew(0xFFFF, PORT_DRVCRB);
 
        platform_resource_setup_memory(&ceu_device, "ceu", 4 << 20);
 
index 33f77085631937fef9d1489590980016dd0f2d15..1394b078db36bbbd557ad8acd6ed99febe4c1097 100644 (file)
@@ -66,9 +66,9 @@ static void enable_cayman_irq(unsigned int irq)
        reg = EPLD_MASK_BASE + ((irq / 8) << 2);
        bit = 1<<(irq % 8);
        local_irq_save(flags);
-       mask = ctrl_inl(reg);
+       mask = __raw_readl(reg);
        mask |= bit;
-       ctrl_outl(mask, reg);
+       __raw_writel(mask, reg);
        local_irq_restore(flags);
 }
 
@@ -83,9 +83,9 @@ void disable_cayman_irq(unsigned int irq)
        reg = EPLD_MASK_BASE + ((irq / 8) << 2);
        bit = 1<<(irq % 8);
        local_irq_save(flags);
-       mask = ctrl_inl(reg);
+       mask = __raw_readl(reg);
        mask &= ~bit;
-       ctrl_outl(mask, reg);
+       __raw_writel(mask, reg);
        local_irq_restore(flags);
 }
 
@@ -109,8 +109,8 @@ int cayman_irq_demux(int evt)
                unsigned long status;
                int i;
 
-               status = ctrl_inl(EPLD_STATUS_BASE) &
-                        ctrl_inl(EPLD_MASK_BASE) & 0xff;
+               status = __raw_readl(EPLD_STATUS_BASE) &
+                        __raw_readl(EPLD_MASK_BASE) & 0xff;
                if (status == 0) {
                        irq = -1;
                } else {
@@ -126,8 +126,8 @@ int cayman_irq_demux(int evt)
                unsigned long status;
                int i;
 
-               status = ctrl_inl(EPLD_STATUS_BASE + 3 * sizeof(u32)) &
-                        ctrl_inl(EPLD_MASK_BASE + 3 * sizeof(u32)) & 0xff;
+               status = __raw_readl(EPLD_STATUS_BASE + 3 * sizeof(u32)) &
+                        __raw_readl(EPLD_MASK_BASE + 3 * sizeof(u32)) & 0xff;
                if (status == 0) {
                        irq = -1;
                } else {
index f55fc8e795e9ef3bd11b381df49b5f903aa7a17d..d932667410ab9f79533f10be378e5b4218c37e4c 100644 (file)
@@ -135,3 +135,30 @@ int systemasic_irq_demux(int irq)
        /* Not reached */
        return irq;
 }
+
+void systemasic_irq_init(void)
+{
+       int i, nid = cpu_to_node(boot_cpu_data);
+
+       /* Assign all virtual IRQs to the System ASIC int. handler */
+       for (i = HW_EVENT_IRQ_BASE; i < HW_EVENT_IRQ_MAX; i++) {
+               unsigned int irq;
+
+               irq = create_irq_nr(i, nid);
+               if (unlikely(irq == 0)) {
+                       pr_err("%s: failed hooking irq %d for systemasic\n",
+                              __func__, i);
+                       return;
+               }
+
+               if (unlikely(irq != i)) {
+                       pr_err("%s: got irq %d but wanted %d, bailing.\n",
+                              __func__, irq, i);
+                       destroy_irq(irq);
+                       return;
+               }
+
+               set_irq_chip_and_handler(i, &systemasic_int,
+                                        handle_level_irq);
+       }
+}
index a7433685798d83b26695c5530de6750f1dcdc377..061d65714fcc2782ab0dae15daec9e33223d43c3 100644 (file)
@@ -35,11 +35,11 @@ static void aica_rtc_gettimeofday(struct timespec *ts)
        unsigned long val1, val2;
 
        do {
-               val1 = ((ctrl_inl(AICA_RTC_SECS_H) & 0xffff) << 16) |
-                       (ctrl_inl(AICA_RTC_SECS_L) & 0xffff);
+               val1 = ((__raw_readl(AICA_RTC_SECS_H) & 0xffff) << 16) |
+                       (__raw_readl(AICA_RTC_SECS_L) & 0xffff);
 
-               val2 = ((ctrl_inl(AICA_RTC_SECS_H) & 0xffff) << 16) |
-                       (ctrl_inl(AICA_RTC_SECS_L) & 0xffff);
+               val2 = ((__raw_readl(AICA_RTC_SECS_H) & 0xffff) << 16) |
+                       (__raw_readl(AICA_RTC_SECS_L) & 0xffff);
        } while (val1 != val2);
 
        ts->tv_sec = val1 - TWENTY_YEARS;
@@ -60,14 +60,14 @@ static int aica_rtc_settimeofday(const time_t secs)
        unsigned long adj = secs + TWENTY_YEARS;
 
        do {
-               ctrl_outl((adj & 0xffff0000) >> 16, AICA_RTC_SECS_H);
-               ctrl_outl((adj & 0xffff), AICA_RTC_SECS_L);
+               __raw_writel((adj & 0xffff0000) >> 16, AICA_RTC_SECS_H);
+               __raw_writel((adj & 0xffff), AICA_RTC_SECS_L);
 
-               val1 = ((ctrl_inl(AICA_RTC_SECS_H) & 0xffff) << 16) |
-                       (ctrl_inl(AICA_RTC_SECS_L) & 0xffff);
+               val1 = ((__raw_readl(AICA_RTC_SECS_H) & 0xffff) << 16) |
+                       (__raw_readl(AICA_RTC_SECS_L) & 0xffff);
 
-               val2 = ((ctrl_inl(AICA_RTC_SECS_H) & 0xffff) << 16) |
-                       (ctrl_inl(AICA_RTC_SECS_L) & 0xffff);
+               val2 = ((__raw_readl(AICA_RTC_SECS_H) & 0xffff) << 16) |
+                       (__raw_readl(AICA_RTC_SECS_L) & 0xffff);
        } while (val1 != val2);
 
        return 0;
index a4b7402d6176245b0f0387bf983d0db0d6f9dafa..ad1a4db72e0406308484ce7bebe6ad514433696b 100644 (file)
 #include <asm/machvec.h>
 #include <mach/sysasic.h>
 
-extern struct irq_chip systemasic_int;
-extern void aica_time_init(void);
-extern int systemasic_irq_demux(int);
-
 static void __init dreamcast_setup(char **cmdline_p)
 {
-       int i;
-
-       /* Mask all hardware events */
-       /* XXX */
-
-       /* Acknowledge any previous events */
-       /* XXX */
-
-       /* Assign all virtual IRQs to the System ASIC int. handler */
-       for (i = HW_EVENT_IRQ_BASE; i < HW_EVENT_IRQ_MAX; i++)
-               set_irq_chip_and_handler(i, &systemasic_int,
-                                        handle_level_irq);
-
        board_time_init = aica_time_init;
 }
 
@@ -54,4 +37,5 @@ static struct sh_machine_vector mv_dreamcast __initmv = {
        .mv_name                = "Sega Dreamcast",
        .mv_setup               = dreamcast_setup,
        .mv_irq_demux           = systemasic_irq_demux,
+       .mv_init_irq            = systemasic_irq_init,
 };
index 833440044407598da49dcac134abd9ef0f9da513..3963c6f23d52bb5fa8a7e7e60b9d18bb5677d498 100644 (file)
@@ -37,6 +37,10 @@ ENTRY(ecovec24_sdram_enter_end)
        .balign 4
 ENTRY(ecovec24_sdram_leave_start)
 
+       mov.l   @(SH_SLEEP_MODE, r5), r0
+       tst     #SUSP_SH_RSTANDBY, r0
+       bf      resume_rstandby
+
        /* DBSC: put memory in auto-refresh mode */
 
        ED 0xFD000040, 0x00000000 /* DBRFPDN0 */
@@ -49,4 +53,59 @@ ENTRY(ecovec24_sdram_leave_start)
        rts
         nop
 
+resume_rstandby:
+
+       /* DBSC: re-initialize and put in auto-refresh */
+
+       ED 0xFD000108, 0x00000181 /* DBPDCNT0 */
+       ED 0xFD000020, 0x015B0002 /* DBCONF */
+       ED 0xFD000030, 0x03071502 /* DBTR0 */
+       ED 0xFD000034, 0x02020102 /* DBTR1 */
+       ED 0xFD000038, 0x01090405 /* DBTR2 */
+       ED 0xFD00003C, 0x00000002 /* DBTR3 */
+       ED 0xFD000008, 0x00000005 /* DBKIND */
+       ED 0xFD000040, 0x00000001 /* DBRFPDN0 */
+       ED 0xFD000040, 0x00000000 /* DBRFPDN0 */
+       ED 0xFD000018, 0x00000001 /* DBCKECNT */
+
+       mov     #100,r0
+WAIT_400NS:
+       dt      r0
+       bf      WAIT_400NS
+
+       ED 0xFD000014, 0x00000002 /* DBCMDCNT (PALL) */
+       ED 0xFD000060, 0x00020000 /* DBMRCNT (EMR2) */
+       ED 0xFD000060, 0x00030000 /* DBMRCNT (EMR3) */
+       ED 0xFD000060, 0x00010004 /* DBMRCNT (EMR) */
+       ED 0xFD000060, 0x00000532 /* DBMRCNT (MRS) */
+       ED 0xFD000014, 0x00000002 /* DBCMDCNT (PALL) */
+       ED 0xFD000014, 0x00000004 /* DBCMDCNT (REF) */
+       ED 0xFD000014, 0x00000004 /* DBCMDCNT (REF) */
+       ED 0xFD000060, 0x00000432 /* DBMRCNT (MRS) */
+       ED 0xFD000060, 0x000103c0 /* DBMRCNT (EMR) */
+       ED 0xFD000060, 0x00010040 /* DBMRCNT (EMR) */
+
+       mov     #100,r0
+WAIT_400NS_2:
+       dt      r0
+       bf      WAIT_400NS_2
+
+       ED 0xFD000010, 0x00000001 /* DBEN */
+       ED 0xFD000044, 0x0000050f /* DBRFPDN1 */
+       ED 0xFD000048, 0x236800e6 /* DBRFPDN2 */
+
+       mov.l   DUMMY,r0
+       mov.l   @r0, r1 /* force single dummy read */
+
+       ED 0xFD000014, 0x00000002 /* DBCMDCNT (PALL) */
+       ED 0xFD000014, 0x00000004 /* DBCMDCNT (REF) */
+       ED 0xFD000108, 0x00000080 /* DBPDCNT0 */
+       ED 0xFD000040, 0x00010000 /* DBRFPDN0 */
+
+       rts
+        nop
+
+       .balign 4
+DUMMY: .long   0xac400000
+
 ENTRY(ecovec24_sdram_leave_end)
index 5c246289b4f09eb2fa5c6a46a89400530f22cd20..39ed8722d11ad0b12469e6d17d4a98b671328634 100644 (file)
 
 /* Heartbeat */
 static unsigned char led_pos[] = { 0, 1, 2, 3 };
+
 static struct heartbeat_data heartbeat_data = {
-       .regsize = 8,
        .nr_bits = 4,
        .bit_pos = led_pos,
 };
 
-static struct resource heartbeat_resources[] = {
-       [0] = {
-               .start  = 0xA405012C, /* PTG */
-               .end    = 0xA405012E - 1,
-               .flags  = IORESOURCE_MEM,
-       },
+static struct resource heartbeat_resource = {
+       .start  = 0xA405012C, /* PTG */
+       .end    = 0xA405012E - 1,
+       .flags  = IORESOURCE_MEM | IORESOURCE_MEM_8BIT,
 };
 
 static struct platform_device heartbeat_device = {
@@ -84,8 +82,8 @@ static struct platform_device heartbeat_device = {
        .dev = {
                .platform_data = &heartbeat_data,
        },
-       .num_resources  = ARRAY_SIZE(heartbeat_resources),
-       .resource       = heartbeat_resources,
+       .num_resources  = 1,
+       .resource       = &heartbeat_resource,
 };
 
 /* MTD */
@@ -455,7 +453,7 @@ static struct resource sdhi0_resources[] = {
                .flags  = IORESOURCE_MEM,
        },
        [1] = {
-               .start  = 101,
+               .start  = 100,
                .flags  = IORESOURCE_IRQ,
        },
 };
@@ -491,7 +489,7 @@ static struct resource sdhi1_resources[] = {
                .flags  = IORESOURCE_MEM,
        },
        [1] = {
-               .start  = 24,
+               .start  = 23,
                .flags  = IORESOURCE_IRQ,
        },
 };
@@ -698,13 +696,13 @@ static struct platform_device camera_devices[] = {
 #define FCLKBCR                0xa415000c
 static void fsimck_init(struct clk *clk)
 {
-       u32 status = ctrl_inl(clk->enable_reg);
+       u32 status = __raw_readl(clk->enable_reg);
 
        /* use external clock */
        status &= ~0x000000ff;
        status |= 0x00000080;
 
-       ctrl_outl(status, clk->enable_reg);
+       __raw_writel(status, clk->enable_reg);<