From 3ff7737b5ddb2d3fbab137537c93d484af84df55 Mon Sep 17 00:00:00 2001 From: Linus Torvalds Date: Mon, 1 Aug 2011 13:48:31 -1000 Subject: [PATCH] --- yaml --- r: 262079 b: refs/heads/master c: 1b8e94993c4752d98c33903aa836acc15f7e6d5c h: refs/heads/master i: 262077: b8e50f43b00557d459255c7af7577e9820fed1f0 262075: 85c91eb4664085f0a9cf1d199b05f9dc0d253476 262071: cfb7cf5aacc67f1dacd0adfc9c4eda9b6d572718 262063: 54a35981b290079f7155609f18113ee7b0f3e33b 262047: 489ffd15b8a1273053068fc07120051135846963 262015: 0eedb2e7239bd17397f5577a5f2d89739d5f2f5d v: v3 --- [refs] | 2 +- trunk/CREDITS | 17 +- trunk/Documentation/ABI/testing/pstore | 6 + trunk/Documentation/DocBook/.gitignore | 5 +- trunk/Documentation/DocBook/Makefile | 31 +- .../Documentation/DocBook/dvb/dvbproperty.xml | 590 -- trunk/Documentation/DocBook/dvb/dvbstb.png | Bin 22655 -> 0 bytes .../Documentation/DocBook/dvb/frontend.h.xml | 428 -- .../Documentation/DocBook/media-entities.tmpl | 464 -- .../Documentation/DocBook/media-indices.tmpl | 89 - trunk/Documentation/DocBook/media/Makefile | 386 + .../Documentation/DocBook/media/bayer.png.b64 | 171 + .../Documentation/DocBook/media/crop.gif.b64 | 105 + .../DocBook/{ => media}/dvb/.gitignore | 0 .../DocBook/{ => media}/dvb/audio.xml | 488 +- .../DocBook/{ => media}/dvb/ca.xml | 112 +- .../DocBook/{ => media}/dvb/demux.xml | 327 +- .../DocBook/{ => media}/dvb/dvbapi.xml | 20 + .../DocBook/media/dvb/dvbproperty.xml | 859 +++ .../DocBook/{ => media}/dvb/dvbstb.pdf | Bin .../DocBook/{ => media}/dvb/examples.xml | 0 .../DocBook/{ => media}/dvb/frontend.xml | 776 +- .../DocBook/{ => media}/dvb/intro.xml | 23 +- .../DocBook/{ => media}/dvb/kdapi.xml | 0 .../DocBook/{ => media}/dvb/net.xml | 17 + .../DocBook/{ => media}/dvb/video.xml | 638 +- .../DocBook/media/dvbstb.png.b64 | 398 + .../DocBook/media/fieldseq_bt.gif.b64 | 447 ++ .../DocBook/media/fieldseq_tb.gif.b64 | 445 ++ .../DocBook/media/nv12mt.gif.b64 | 37 + .../DocBook/media/nv12mt_example.gif.b64 | 121 + .../DocBook/media/pipeline.png.b64 | 213 + .../DocBook/{ => media}/v4l/.gitignore | 0 .../DocBook/{ => media}/v4l/biblio.xml | 0 .../DocBook/{ => media}/v4l/capture.c.xml | 0 .../DocBook/{ => media}/v4l/common.xml | 10 +- .../DocBook/{ => media}/v4l/compat.xml | 30 +- .../DocBook/{ => media}/v4l/controls.xml | 1517 +++- .../DocBook/{ => media}/v4l/crop.pdf | Bin .../DocBook/{ => media}/v4l/dev-capture.xml | 0 .../DocBook/{ => media}/v4l/dev-codec.xml | 0 .../DocBook/{ => media}/v4l/dev-effect.xml | 0 .../DocBook/media/v4l/dev-event.xml | 51 + .../DocBook/{ => media}/v4l/dev-osd.xml | 0 .../DocBook/{ => media}/v4l/dev-output.xml | 0 .../DocBook/{ => media}/v4l/dev-overlay.xml | 0 .../DocBook/{ => media}/v4l/dev-radio.xml | 0 .../DocBook/{ => media}/v4l/dev-raw-vbi.xml | 0 .../DocBook/{ => media}/v4l/dev-rds.xml | 0 .../{ => media}/v4l/dev-sliced-vbi.xml | 0 .../DocBook/{ => media}/v4l/dev-subdev.xml | 0 .../DocBook/{ => media}/v4l/dev-teletext.xml | 0 .../DocBook/{ => media}/v4l/driver.xml | 0 .../DocBook/{ => media}/v4l/fdl-appendix.xml | 0 .../DocBook/{ => media}/v4l/fieldseq_bt.pdf | Bin .../DocBook/{ => media}/v4l/fieldseq_tb.pdf | Bin .../DocBook/{ => media}/v4l/func-close.xml | 0 .../DocBook/media/v4l/func-ioctl.xml | 79 + .../DocBook/{ => media}/v4l/func-mmap.xml | 0 .../DocBook/{ => media}/v4l/func-munmap.xml | 0 .../DocBook/{ => media}/v4l/func-open.xml | 0 .../DocBook/{ => media}/v4l/func-poll.xml | 0 .../DocBook/{ => media}/v4l/func-read.xml | 0 .../DocBook/{ => media}/v4l/func-select.xml | 0 .../DocBook/{ => media}/v4l/func-write.xml | 0 .../DocBook/media/v4l/gen-errors.xml | 78 + .../DocBook/{ => media}/v4l/io.xml | 0 .../DocBook/{ => media}/v4l/keytable.c.xml | 0 .../DocBook/{ => media}/v4l/libv4l.xml | 0 .../{ => media}/v4l/lirc_device_interface.xml | 4 +- .../{ => media}/v4l/media-controller.xml | 0 .../{ => media}/v4l/media-func-close.xml | 0 .../{ => media}/v4l/media-func-ioctl.xml | 47 +- .../{ => media}/v4l/media-func-open.xml | 0 .../{ => media}/v4l/media-ioc-device-info.xml | 3 +- .../v4l/media-ioc-enum-entities.xml | 0 .../{ => media}/v4l/media-ioc-enum-links.xml | 2 +- .../{ => media}/v4l/media-ioc-setup-link.xml | 9 - .../DocBook/{ => media}/v4l/pipeline.pdf | Bin .../DocBook/{ => media}/v4l/pixfmt-grey.xml | 0 .../DocBook/{ => media}/v4l/pixfmt-m420.xml | 0 .../DocBook/{ => media}/v4l/pixfmt-nv12.xml | 0 .../DocBook/{ => media}/v4l/pixfmt-nv12m.xml | 0 .../DocBook/{ => media}/v4l/pixfmt-nv12mt.xml | 0 .../DocBook/{ => media}/v4l/pixfmt-nv16.xml | 0 .../{ => media}/v4l/pixfmt-packed-rgb.xml | 0 .../{ => media}/v4l/pixfmt-packed-yuv.xml | 0 .../{ => media}/v4l/pixfmt-sbggr16.xml | 0 .../DocBook/{ => media}/v4l/pixfmt-sbggr8.xml | 0 .../DocBook/{ => media}/v4l/pixfmt-sgbrg8.xml | 0 .../DocBook/{ => media}/v4l/pixfmt-sgrbg8.xml | 0 .../{ => media}/v4l/pixfmt-srggb10.xml | 0 .../{ => media}/v4l/pixfmt-srggb12.xml | 0 .../DocBook/{ => media}/v4l/pixfmt-srggb8.xml | 0 .../DocBook/{ => media}/v4l/pixfmt-uyvy.xml | 0 .../DocBook/{ => media}/v4l/pixfmt-vyuy.xml | 0 .../DocBook/{ => media}/v4l/pixfmt-y10.xml | 0 .../DocBook/{ => media}/v4l/pixfmt-y10b.xml | 0 .../DocBook/{ => media}/v4l/pixfmt-y12.xml | 0 .../DocBook/{ => media}/v4l/pixfmt-y16.xml | 0 .../DocBook/{ => media}/v4l/pixfmt-y41p.xml | 0 .../DocBook/{ => media}/v4l/pixfmt-yuv410.xml | 0 .../{ => media}/v4l/pixfmt-yuv411p.xml | 0 .../DocBook/{ => media}/v4l/pixfmt-yuv420.xml | 0 .../{ => media}/v4l/pixfmt-yuv420m.xml | 0 .../{ => media}/v4l/pixfmt-yuv422p.xml | 0 .../DocBook/{ => media}/v4l/pixfmt-yuyv.xml | 0 .../DocBook/{ => media}/v4l/pixfmt-yvyu.xml | 0 .../DocBook/{ => media}/v4l/pixfmt.xml | 60 +- .../DocBook/{ => media}/v4l/planar-apis.xml | 0 .../{ => media}/v4l/remote_controllers.xml | 0 .../{ => media}/v4l/subdev-formats.xml | 5 +- .../DocBook/{ => media}/v4l/v4l2.xml | 13 +- .../DocBook/{ => media}/v4l/v4l2grab.c.xml | 0 .../DocBook/{ => media}/v4l/vbi_525.pdf | Bin .../DocBook/{ => media}/v4l/vbi_625.pdf | Bin .../DocBook/{ => media}/v4l/vbi_hsync.pdf | Bin .../{ => media}/v4l/vidioc-cropcap.xml | 13 +- .../v4l/vidioc-dbg-g-chip-ident.xml | 11 +- .../{ => media}/v4l/vidioc-dbg-g-register.xml | 17 - .../{ => media}/v4l/vidioc-dqevent.xml | 27 +- .../{ => media}/v4l/vidioc-encoder-cmd.xml | 11 +- .../v4l/vidioc-enum-dv-presets.xml | 0 .../{ => media}/v4l/vidioc-enum-fmt.xml | 0 .../v4l/vidioc-enum-frameintervals.xml | 11 - .../v4l/vidioc-enum-framesizes.xml | 11 - .../{ => media}/v4l/vidioc-enumaudio.xml | 12 +- .../{ => media}/v4l/vidioc-enumaudioout.xml | 12 +- .../{ => media}/v4l/vidioc-enuminput.xml | 0 .../{ => media}/v4l/vidioc-enumoutput.xml | 0 .../{ => media}/v4l/vidioc-enumstd.xml | 0 .../{ => media}/v4l/vidioc-g-audio.xml | 18 +- .../{ => media}/v4l/vidioc-g-audioout.xml | 18 +- .../DocBook/{ => media}/v4l/vidioc-g-crop.xml | 17 - .../DocBook/{ => media}/v4l/vidioc-g-ctrl.xml | 7 + .../{ => media}/v4l/vidioc-g-dv-preset.xml | 12 +- .../{ => media}/v4l/vidioc-g-dv-timings.xml | 11 +- .../{ => media}/v4l/vidioc-g-enc-index.xml | 17 - .../{ => media}/v4l/vidioc-g-ext-ctrls.xml | 14 + .../DocBook/{ => media}/v4l/vidioc-g-fbuf.xml | 19 +- .../DocBook/{ => media}/v4l/vidioc-g-fmt.xml | 20 +- .../{ => media}/v4l/vidioc-g-frequency.xml | 0 .../{ => media}/v4l/vidioc-g-input.xml | 19 +- .../{ => media}/v4l/vidioc-g-jpegcomp.xml | 17 - .../{ => media}/v4l/vidioc-g-modulator.xml | 0 .../{ => media}/v4l/vidioc-g-output.xml | 18 +- .../DocBook/{ => media}/v4l/vidioc-g-parm.xml | 17 - .../{ => media}/v4l/vidioc-g-priority.xml | 3 +- .../v4l/vidioc-g-sliced-vbi-cap.xml | 11 +- .../DocBook/{ => media}/v4l/vidioc-g-std.xml | 9 +- .../{ => media}/v4l/vidioc-g-tuner.xml | 0 .../{ => media}/v4l/vidioc-log-status.xml | 17 - .../{ => media}/v4l/vidioc-overlay.xml | 11 +- .../DocBook/{ => media}/v4l/vidioc-qbuf.xml | 17 - .../v4l/vidioc-query-dv-preset.xml | 22 - .../{ => media}/v4l/vidioc-querybuf.xml | 0 .../{ => media}/v4l/vidioc-querycap.xml | 34 +- .../{ => media}/v4l/vidioc-queryctrl.xml | 12 +- .../{ => media}/v4l/vidioc-querystd.xml | 23 - .../{ => media}/v4l/vidioc-reqbufs.xml | 16 - .../{ => media}/v4l/vidioc-s-hw-freq-seek.xml | 0 .../{ => media}/v4l/vidioc-streamon.xml | 14 +- .../v4l/vidioc-subdev-enum-frame-interval.xml | 0 .../v4l/vidioc-subdev-enum-frame-size.xml | 0 .../v4l/vidioc-subdev-enum-mbus-code.xml | 0 .../{ => media}/v4l/vidioc-subdev-g-crop.xml | 0 .../{ => media}/v4l/vidioc-subdev-g-fmt.xml | 3 + .../v4l/vidioc-subdev-g-frame-interval.xml | 0 .../media/v4l/vidioc-subscribe-event.xml | 297 + .../DocBook/media/vbi_525.gif.b64 | 84 + .../DocBook/media/vbi_625.gif.b64 | 90 + .../DocBook/media/vbi_hsync.gif.b64 | 43 + .../DocBook/{media.tmpl => media_api.tmpl} | 8 +- trunk/Documentation/DocBook/v4l/bayer.pdf | Bin 12116 -> 0 bytes trunk/Documentation/DocBook/v4l/bayer.png | Bin 9725 -> 0 bytes trunk/Documentation/DocBook/v4l/crop.gif | Bin 5967 -> 0 bytes trunk/Documentation/DocBook/v4l/dev-event.xml | 31 - .../Documentation/DocBook/v4l/fieldseq_bt.gif | Bin 25430 -> 0 bytes .../Documentation/DocBook/v4l/fieldseq_tb.gif | Bin 25323 -> 0 bytes .../Documentation/DocBook/v4l/func-ioctl.xml | 145 - trunk/Documentation/DocBook/v4l/nv12mt.gif | Bin 2108 -> 0 bytes .../DocBook/v4l/nv12mt_example.gif | Bin 6858 -> 0 bytes trunk/Documentation/DocBook/v4l/pipeline.png | Bin 12130 -> 0 bytes trunk/Documentation/DocBook/v4l/vbi_525.gif | Bin 4741 -> 0 bytes trunk/Documentation/DocBook/v4l/vbi_625.gif | Bin 5095 -> 0 bytes trunk/Documentation/DocBook/v4l/vbi_hsync.gif | Bin 2400 -> 0 bytes .../Documentation/DocBook/v4l/videodev2.h.xml | 1946 ----- .../DocBook/v4l/vidioc-subscribe-event.xml | 133 - .../devicetree/bindings/arm/arm-boards | 20 + .../devicetree/bindings/dma/fsl-imx-sdma.txt | 17 + .../devicetree/bindings/gpio/gpio_keys.txt | 36 + .../devicetree/bindings/i2c/arm-versatile.txt | 10 + .../devicetree/bindings/mmc/fsl-imx-esdhc.txt | 34 + .../devicetree/bindings/mtd/arm-versatile.txt | 8 + .../devicetree/bindings/net/fsl-fec.txt | 24 + .../bindings/net/smsc-lan91c111.txt | 10 + .../bindings/tty/serial/fsl-imx-uart.txt | 19 + .../bindings/watchdog/fsl-imx-wdt.txt | 14 + .../bindings/watchdog/samsung-wdt.txt | 11 + trunk/Documentation/dmaengine.txt | 234 +- trunk/Documentation/dvb/get_dvb_firmware | 33 +- .../feature-removal-schedule.txt | 35 + trunk/Documentation/hwmon/adm1275 | 8 +- trunk/Documentation/hwmon/coretemp | 7 + trunk/Documentation/hwmon/lm25066 | 90 + trunk/Documentation/hwmon/lm90 | 9 +- trunk/Documentation/hwmon/lm95245 | 33 + trunk/Documentation/hwmon/max16064 | 4 + trunk/Documentation/hwmon/max1668 | 60 + trunk/Documentation/hwmon/max34440 | 6 + trunk/Documentation/hwmon/max8688 | 6 + trunk/Documentation/hwmon/ntc_thermistor | 93 + trunk/Documentation/hwmon/pmbus | 7 + trunk/Documentation/hwmon/sysfs-interface | 46 + trunk/Documentation/kernel-parameters.txt | 2 + trunk/Documentation/md.txt | 29 +- trunk/Documentation/media-framework.txt | 2 +- .../Documentation/scsi/ChangeLog.megaraid_sas | 8 + .../Documentation/security/keys-ecryptfs.txt | 68 + .../security/keys-trusted-encrypted.txt | 52 +- trunk/Documentation/video4linux/API.html | 2 +- .../video4linux/CARDLIST.cx23885 | 2 + trunk/Documentation/video4linux/CARDLIST.cx88 | 1 + .../Documentation/video4linux/CARDLIST.em28xx | 2 + .../video4linux/CARDLIST.saa7134 | 4 + .../Documentation/video4linux/CARDLIST.tuner | 2 + .../video4linux/CARDLIST.usbvision | 2 + .../video4linux/README.davinci-vpbe | 93 + .../video4linux/v4l2-controls.txt | 69 +- .../video4linux/v4l2-framework.txt | 59 +- trunk/Documentation/watchdog/00-INDEX | 2 + .../watchdog/watchdog-kernel-api.txt | 162 + trunk/MAINTAINERS | 26 +- trunk/Makefile | 2 +- trunk/arch/alpha/kernel/sys_alcor.c | 2 +- trunk/arch/alpha/kernel/sys_cabriolet.c | 6 +- trunk/arch/alpha/kernel/sys_dp264.c | 8 +- trunk/arch/alpha/kernel/sys_eb64p.c | 2 +- trunk/arch/alpha/kernel/sys_eiger.c | 2 +- trunk/arch/alpha/kernel/sys_marvel.c | 2 +- trunk/arch/alpha/kernel/sys_miata.c | 2 +- trunk/arch/alpha/kernel/sys_mikasa.c | 2 +- trunk/arch/alpha/kernel/sys_nautilus.c | 2 +- trunk/arch/alpha/kernel/sys_noritake.c | 2 +- trunk/arch/alpha/kernel/sys_rawhide.c | 2 +- trunk/arch/alpha/kernel/sys_ruffian.c | 2 +- trunk/arch/alpha/kernel/sys_rx164.c | 2 +- trunk/arch/alpha/kernel/sys_sable.c | 4 +- trunk/arch/alpha/kernel/sys_sio.c | 4 +- trunk/arch/alpha/kernel/sys_sx164.c | 2 +- trunk/arch/alpha/kernel/sys_takara.c | 4 +- trunk/arch/alpha/kernel/sys_titan.c | 2 +- trunk/arch/alpha/kernel/sys_wildfire.c | 2 +- trunk/arch/arm/Kconfig | 1 + trunk/arch/arm/Makefile | 7 + trunk/arch/arm/boot/Makefile | 6 + trunk/arch/arm/boot/dts/skeleton.dtsi | 13 + trunk/arch/arm/boot/dts/tegra-harmony.dts | 70 + trunk/arch/arm/boot/dts/tegra-seaboard.dts | 28 + trunk/arch/arm/boot/dts/tegra20.dtsi | 139 + trunk/arch/arm/boot/dts/versatile-ab.dts | 192 + trunk/arch/arm/boot/dts/versatile-pb.dts | 48 + trunk/arch/arm/common/it8152.c | 2 +- trunk/arch/arm/include/asm/hardware/it8152.h | 2 +- trunk/arch/arm/include/asm/mach/arch.h | 7 + trunk/arch/arm/include/asm/mach/pci.h | 4 +- trunk/arch/arm/include/asm/prom.h | 5 - trunk/arch/arm/kernel/bios32.c | 2 +- trunk/arch/arm/kernel/devtree.c | 14 - trunk/arch/arm/mach-at91/Makefile | 2 +- trunk/arch/arm/mach-at91/at91cap9.c | 45 +- trunk/arch/arm/mach-at91/at91rm9200.c | 47 +- trunk/arch/arm/mach-at91/at91sam9260.c | 100 +- trunk/arch/arm/mach-at91/at91sam9261.c | 62 +- trunk/arch/arm/mach-at91/at91sam9263.c | 51 +- trunk/arch/arm/mach-at91/at91sam9g45.c | 45 +- trunk/arch/arm/mach-at91/at91sam9rl.c | 59 +- trunk/arch/arm/mach-at91/board-1arm.c | 11 +- trunk/arch/arm/mach-at91/board-afeb-9260v1.c | 12 +- trunk/arch/arm/mach-at91/board-cam60.c | 12 +- trunk/arch/arm/mach-at91/board-cap9adk.c | 12 +- trunk/arch/arm/mach-at91/board-carmeva.c | 11 +- trunk/arch/arm/mach-at91/board-cpu9krea.c | 11 +- trunk/arch/arm/mach-at91/board-cpuat91.c | 11 +- trunk/arch/arm/mach-at91/board-csb337.c | 11 +- trunk/arch/arm/mach-at91/board-csb637.c | 11 +- trunk/arch/arm/mach-at91/board-eb9200.c | 11 +- trunk/arch/arm/mach-at91/board-ecbat91.c | 11 +- trunk/arch/arm/mach-at91/board-eco920.c | 11 +- trunk/arch/arm/mach-at91/board-flexibity.c | 11 +- trunk/arch/arm/mach-at91/board-foxg20.c | 12 +- trunk/arch/arm/mach-at91/board-gsia18s.c | 9 +- trunk/arch/arm/mach-at91/board-kafa.c | 11 +- trunk/arch/arm/mach-at91/board-kb9202.c | 11 +- trunk/arch/arm/mach-at91/board-neocore926.c | 12 +- trunk/arch/arm/mach-at91/board-pcontrol-g20.c | 11 +- trunk/arch/arm/mach-at91/board-picotux200.c | 11 +- trunk/arch/arm/mach-at91/board-qil-a9260.c | 12 +- trunk/arch/arm/mach-at91/board-rm9200dk.c | 11 +- trunk/arch/arm/mach-at91/board-rm9200ek.c | 11 +- trunk/arch/arm/mach-at91/board-sam9-l9260.c | 12 +- trunk/arch/arm/mach-at91/board-sam9260ek.c | 12 +- trunk/arch/arm/mach-at91/board-sam9261ek.c | 12 +- trunk/arch/arm/mach-at91/board-sam9263ek.c | 12 +- trunk/arch/arm/mach-at91/board-sam9g20ek.c | 16 +- trunk/arch/arm/mach-at91/board-sam9m10g45ek.c | 12 +- trunk/arch/arm/mach-at91/board-sam9rlek.c | 12 +- trunk/arch/arm/mach-at91/board-snapper9260.c | 11 +- trunk/arch/arm/mach-at91/board-stamp9g20.c | 16 +- trunk/arch/arm/mach-at91/board-usb-a9260.c | 12 +- trunk/arch/arm/mach-at91/board-usb-a9263.c | 12 +- trunk/arch/arm/mach-at91/board-yl-9200.c | 12 +- trunk/arch/arm/mach-at91/generic.h | 34 +- .../arm/mach-at91/include/mach/at91_dbgu.h | 27 +- .../arm/mach-at91/include/mach/at91cap9.h | 1 - .../arm/mach-at91/include/mach/at91rm9200.h | 1 - .../arm/mach-at91/include/mach/at91sam9260.h | 1 - .../arm/mach-at91/include/mach/at91sam9261.h | 1 - .../arm/mach-at91/include/mach/at91sam9263.h | 1 - .../arm/mach-at91/include/mach/at91sam9g45.h | 1 - .../arm/mach-at91/include/mach/at91sam9rl.h | 1 - trunk/arch/arm/mach-at91/include/mach/cpu.h | 159 +- .../arm/mach-at91/include/mach/debug-macro.S | 14 +- .../arm/mach-at91/include/mach/hardware.h | 14 + trunk/arch/arm/mach-at91/include/mach/io.h | 11 +- trunk/arch/arm/mach-at91/setup.c | 297 + trunk/arch/arm/mach-at91/soc.h | 59 + trunk/arch/arm/mach-cns3xxx/pcie.c | 2 +- trunk/arch/arm/mach-dove/pcie.c | 2 +- trunk/arch/arm/mach-footbridge/cats-pci.c | 2 +- trunk/arch/arm/mach-footbridge/ebsa285-pci.c | 2 +- .../arch/arm/mach-footbridge/netwinder-pci.c | 2 +- trunk/arch/arm/mach-footbridge/personal-pci.c | 3 +- trunk/arch/arm/mach-imx/clock-imx1.c | 6 +- trunk/arch/arm/mach-imx/clock-imx21.c | 8 +- trunk/arch/arm/mach-imx/clock-imx25.c | 20 +- trunk/arch/arm/mach-imx/clock-imx27.c | 15 +- trunk/arch/arm/mach-imx/clock-imx31.c | 13 +- trunk/arch/arm/mach-imx/clock-imx35.c | 18 +- .../arm/mach-imx/eukrea_mbimxsd25-baseboard.c | 3 +- .../arm/mach-imx/eukrea_mbimxsd35-baseboard.c | 3 +- trunk/arch/arm/mach-imx/mach-mx25_3ds.c | 2 + trunk/arch/arm/mach-imx/mach-pcm043.c | 2 + trunk/arch/arm/mach-imx/mm-imx25.c | 4 +- trunk/arch/arm/mach-imx/mm-imx31.c | 3 +- trunk/arch/arm/mach-imx/mm-imx35.c | 3 +- trunk/arch/arm/mach-integrator/pci.c | 2 +- trunk/arch/arm/mach-iop13xx/iq81340mc.c | 2 +- trunk/arch/arm/mach-iop13xx/pci.c | 2 +- trunk/arch/arm/mach-iop32x/em7210.c | 2 +- trunk/arch/arm/mach-iop32x/glantank.c | 2 +- trunk/arch/arm/mach-iop32x/iq31244.c | 4 +- trunk/arch/arm/mach-iop32x/iq80321.c | 2 +- trunk/arch/arm/mach-iop32x/n2100.c | 2 +- trunk/arch/arm/mach-iop33x/iq80331.c | 2 +- trunk/arch/arm/mach-iop33x/iq80332.c | 2 +- trunk/arch/arm/mach-ixp2000/enp2611.c | 3 +- trunk/arch/arm/mach-ixp2000/ixdp2400.c | 3 +- trunk/arch/arm/mach-ixp2000/ixdp2800.c | 3 +- trunk/arch/arm/mach-ixp2000/ixdp2x01.c | 3 +- trunk/arch/arm/mach-ixp23xx/ixdp2351.c | 2 +- trunk/arch/arm/mach-ixp23xx/roadrunner.c | 3 +- trunk/arch/arm/mach-ixp4xx/avila-pci.c | 2 +- trunk/arch/arm/mach-ixp4xx/coyote-pci.c | 2 +- trunk/arch/arm/mach-ixp4xx/dsmg600-pci.c | 2 +- trunk/arch/arm/mach-ixp4xx/fsg-pci.c | 2 +- trunk/arch/arm/mach-ixp4xx/gateway7001-pci.c | 3 +- trunk/arch/arm/mach-ixp4xx/goramo_mlr.c | 2 +- trunk/arch/arm/mach-ixp4xx/gtwx5715-pci.c | 2 +- trunk/arch/arm/mach-ixp4xx/ixdp425-pci.c | 2 +- trunk/arch/arm/mach-ixp4xx/ixdpg425-pci.c | 2 +- trunk/arch/arm/mach-ixp4xx/nas100d-pci.c | 2 +- trunk/arch/arm/mach-ixp4xx/nslu2-pci.c | 2 +- trunk/arch/arm/mach-ixp4xx/vulcan-pci.c | 2 +- trunk/arch/arm/mach-ixp4xx/wg302v2-pci.c | 2 +- trunk/arch/arm/mach-kirkwood/pcie.c | 3 +- trunk/arch/arm/mach-ks8695/board-dsm320.c | 2 +- trunk/arch/arm/mach-ks8695/board-micrel.c | 2 +- .../arm/mach-ks8695/include/mach/devices.h | 2 +- trunk/arch/arm/mach-msm/Kconfig | 4 + trunk/arch/arm/mach-msm/Makefile | 8 - trunk/arch/arm/mach-msm/gpio.c | 376 - trunk/arch/arm/mach-msm/gpio_hw.h | 278 - trunk/arch/arm/mach-msm/gpiomux.h | 17 +- .../arm/mach-msm/include/mach/msm_gpiomux.h | 38 + .../mach-msm/include/mach/msm_iomap-7x00.h | 10 +- .../mach-msm/include/mach/msm_iomap-7x30.h | 10 +- .../mach-msm/include/mach/msm_iomap-8x50.h | 10 +- .../arm/mach-msm/include/mach/msm_iomap.h | 2 + trunk/arch/arm/mach-msm/io.c | 12 +- trunk/arch/arm/mach-mv78xx0/pcie.c | 3 +- trunk/arch/arm/mach-mx5/board-mx51_babbage.c | 14 +- trunk/arch/arm/mach-mx5/board-mx53_loco.c | 4 + trunk/arch/arm/mach-mx5/clock-mx51-mx53.c | 46 +- trunk/arch/arm/mach-mx5/mm.c | 8 +- trunk/arch/arm/mach-mx5/mx51_efika.c | 4 +- .../arm/mach-omap2/board-rx51-peripherals.c | 6 + trunk/arch/arm/mach-omap2/display.c | 26 +- trunk/arch/arm/mach-orion5x/common.h | 2 +- trunk/arch/arm/mach-orion5x/db88f5281-setup.c | 3 +- trunk/arch/arm/mach-orion5x/dns323-setup.c | 4 +- .../arch/arm/mach-orion5x/kurobox_pro-setup.c | 3 +- trunk/arch/arm/mach-orion5x/mss2-setup.c | 2 +- trunk/arch/arm/mach-orion5x/pci.c | 2 +- .../arm/mach-orion5x/rd88f5181l-fxo-setup.c | 2 +- .../arm/mach-orion5x/rd88f5181l-ge-setup.c | 2 +- trunk/arch/arm/mach-orion5x/rd88f5182-setup.c | 3 +- .../arm/mach-orion5x/terastation_pro2-setup.c | 2 +- trunk/arch/arm/mach-orion5x/ts209-setup.c | 3 +- trunk/arch/arm/mach-orion5x/ts409-setup.c | 3 +- trunk/arch/arm/mach-orion5x/wnr854t-setup.c | 3 +- .../arch/arm/mach-orion5x/wrt350n-v2-setup.c | 3 +- trunk/arch/arm/mach-pxa/cm-x2xx-pci.c | 2 +- trunk/arch/arm/mach-sa1100/pci-nanoengine.c | 3 +- trunk/arch/arm/mach-shark/pci.c | 2 +- trunk/arch/arm/mach-shmobile/board-ap4evb.c | 12 +- trunk/arch/arm/mach-shmobile/board-mackerel.c | 13 +- trunk/arch/arm/mach-shmobile/clock-sh7367.c | 3 - trunk/arch/arm/mach-shmobile/clock-sh7372.c | 4 - trunk/arch/arm/mach-shmobile/clock-sh7377.c | 3 - trunk/arch/arm/mach-shmobile/clock-sh73a0.c | 4 - trunk/arch/arm/mach-tegra/Kconfig | 12 +- trunk/arch/arm/mach-tegra/Makefile | 3 + trunk/arch/arm/mach-tegra/Makefile.boot | 3 + trunk/arch/arm/mach-tegra/board-dt.c | 119 + trunk/arch/arm/mach-tegra/pcie.c | 2 +- trunk/arch/arm/mach-versatile/Kconfig | 8 + trunk/arch/arm/mach-versatile/Makefile | 1 + trunk/arch/arm/mach-versatile/core.c | 62 + trunk/arch/arm/mach-versatile/core.h | 4 + trunk/arch/arm/mach-versatile/pci.c | 2 +- trunk/arch/arm/mach-versatile/versatile_dt.c | 51 + trunk/arch/arm/mach-zynq/Makefile | 2 +- trunk/arch/arm/mach-zynq/board_dt.c | 0 .../arch/arm/plat-mxc/devices/platform-fec.c | 21 +- .../arm/plat-mxc/devices/platform-imx-dma.c | 4 +- .../arm/plat-mxc/devices/platform-imx-uart.c | 7 +- .../devices/platform-sdhci-esdhc-imx.c | 29 +- .../plat-mxc/include/mach/devices-common.h | 4 +- trunk/arch/arm/plat-mxc/include/mach/dma.h | 3 +- trunk/arch/arm/plat-mxc/include/mach/esdhc.h | 25 +- trunk/arch/arm/plat-mxc/include/mach/sdma.h | 2 - trunk/arch/frv/mm/pgalloc.c | 8 +- trunk/arch/ia64/Kconfig | 4 + trunk/arch/ia64/include/asm/gpio.h | 55 + trunk/arch/m68k/Kconfig.mmu | 6 - trunk/arch/m68k/amiga/chipram.c | 136 +- trunk/arch/m68k/atari/stram.c | 354 +- trunk/arch/m68k/include/asm/atari_stram.h | 3 +- trunk/arch/m68k/include/asm/atarihw.h | 4 +- trunk/arch/m68k/kernel/setup_mm.c | 2 + trunk/arch/m68k/math-emu/fp_log.c | 3 - trunk/arch/m68k/math-emu/multi_arith.h | 530 -- trunk/arch/m68k/mm/init_mm.c | 5 - trunk/arch/microblaze/include/asm/cpuinfo.h | 1 + trunk/arch/microblaze/include/asm/irqflags.h | 20 +- trunk/arch/microblaze/include/asm/processor.h | 3 - trunk/arch/microblaze/include/asm/prom.h | 8 +- trunk/arch/microblaze/include/asm/pvr.h | 5 +- trunk/arch/microblaze/include/asm/setup.h | 1 + .../microblaze/kernel/cpu/cpuinfo-pvr-full.c | 1 + .../microblaze/kernel/cpu/cpuinfo-static.c | 1 + trunk/arch/microblaze/kernel/cpu/cpuinfo.c | 4 + trunk/arch/microblaze/kernel/cpu/mb.c | 9 +- trunk/arch/microblaze/kernel/early_printk.c | 68 +- .../microblaze/kernel/hw_exception_handler.S | 56 +- trunk/arch/microblaze/kernel/intc.c | 2 +- trunk/arch/microblaze/kernel/process.c | 1 - trunk/arch/microblaze/kernel/prom.c | 97 +- trunk/arch/microblaze/kernel/setup.c | 5 + trunk/arch/sh/Makefile | 1 + trunk/arch/sh/boards/board-apsh4a3a.c | 2 +- trunk/arch/sh/boards/board-apsh4ad0a.c | 2 +- trunk/arch/sh/boards/board-sh7785lcr.c | 2 +- trunk/arch/sh/boards/board-urquell.c | 2 +- trunk/arch/sh/boards/mach-ap325rxa/setup.c | 15 +- trunk/arch/sh/boards/mach-highlander/setup.c | 2 - trunk/arch/sh/boards/mach-sdk7786/setup.c | 2 +- trunk/arch/sh/drivers/pci/fixups-cayman.c | 2 +- trunk/arch/sh/drivers/pci/fixups-dreamcast.c | 2 +- trunk/arch/sh/drivers/pci/fixups-landisk.c | 2 +- trunk/arch/sh/drivers/pci/fixups-r7780rp.c | 2 +- trunk/arch/sh/drivers/pci/fixups-rts7751r2d.c | 2 +- trunk/arch/sh/drivers/pci/fixups-sdk7780.c | 2 +- trunk/arch/sh/drivers/pci/fixups-se7751.c | 2 +- trunk/arch/sh/drivers/pci/fixups-sh03.c | 2 +- trunk/arch/sh/drivers/pci/fixups-snapgear.c | 2 +- trunk/arch/sh/drivers/pci/fixups-titan.c | 2 +- trunk/arch/sh/drivers/pci/pcie-sh7786.c | 2 +- trunk/arch/sh/include/asm/pci.h | 2 +- trunk/arch/sh/include/cpu-sh3/cpu/serial.h | 10 + trunk/arch/sh/include/cpu-sh4a/cpu/serial.h | 7 + trunk/arch/sh/kernel/cpu/clock-cpg.c | 2 - trunk/arch/sh/kernel/cpu/sh3/Makefile | 18 +- trunk/arch/sh/kernel/cpu/sh3/serial-sh770x.c | 33 + trunk/arch/sh/kernel/cpu/sh3/serial-sh7710.c | 20 + trunk/arch/sh/kernel/cpu/sh3/serial-sh7720.c | 37 + trunk/arch/sh/kernel/cpu/sh3/setup-sh7705.c | 5 + trunk/arch/sh/kernel/cpu/sh3/setup-sh770x.c | 9 + trunk/arch/sh/kernel/cpu/sh3/setup-sh7720.c | 5 + trunk/arch/sh/kernel/cpu/sh4/clock-sh4-202.c | 2 - trunk/arch/sh/kernel/cpu/sh4/setup-sh7750.c | 4 +- trunk/arch/sh/kernel/cpu/sh4/setup-sh7760.c | 4 + trunk/arch/sh/kernel/cpu/sh4a/Makefile | 2 +- trunk/arch/sh/kernel/cpu/sh4a/clock-sh7343.c | 33 +- trunk/arch/sh/kernel/cpu/sh4a/clock-sh7366.c | 25 +- trunk/arch/sh/kernel/cpu/sh4a/clock-sh7722.c | 46 +- trunk/arch/sh/kernel/cpu/sh4a/clock-sh7723.c | 4 +- trunk/arch/sh/kernel/cpu/sh4a/clock-sh7724.c | 84 +- trunk/arch/sh/kernel/cpu/sh4a/clock-sh7757.c | 36 +- trunk/arch/sh/kernel/cpu/sh4a/clock-sh7763.c | 2 - trunk/arch/sh/kernel/cpu/sh4a/clock-sh7780.c | 2 - trunk/arch/sh/kernel/cpu/sh4a/clock-sh7785.c | 79 +- trunk/arch/sh/kernel/cpu/sh4a/clock-sh7786.c | 115 +- trunk/arch/sh/kernel/cpu/sh4a/clock-shx3.c | 67 +- trunk/arch/sh/kernel/cpu/sh4a/serial-sh7722.c | 23 + trunk/arch/sh/kernel/cpu/sh4a/setup-sh7366.c | 1 + trunk/arch/sh/kernel/cpu/sh4a/setup-sh7722.c | 7 + trunk/arch/sh/kernel/cpu/sh4a/setup-sh7723.c | 9 + trunk/arch/sh/kernel/cpu/sh4a/setup-sh7724.c | 9 + trunk/arch/sh/kernel/cpu/sh4a/setup-sh7763.c | 3 + trunk/arch/sh/kernel/cpu/sh4a/setup-sh7780.c | 3 +- trunk/arch/sh/kernel/cpu/sh4a/setup-sh7785.c | 8 +- trunk/arch/sh/kernel/cpu/sh4a/setup-sh7786.c | 8 +- trunk/arch/sparc/include/asm/elf_64.h | 6 +- trunk/arch/sparc/include/asm/hypervisor.h | 1 + trunk/arch/sparc/include/asm/leon_pci.h | 2 +- trunk/arch/sparc/include/asm/spitfire.h | 1 + trunk/arch/sparc/include/asm/xor_64.h | 3 +- trunk/arch/sparc/kernel/cpu.c | 7 + trunk/arch/sparc/kernel/cpumap.c | 1 + trunk/arch/sparc/kernel/head_64.S | 31 + trunk/arch/sparc/kernel/hvapi.c | 1 + trunk/arch/sparc/kernel/ioport.c | 32 +- trunk/arch/sparc/kernel/leon_pci_grpci2.c | 2 +- trunk/arch/sparc/kernel/pcr.c | 11 +- trunk/arch/sparc/kernel/perf_event.c | 3 +- trunk/arch/sparc/lib/atomic32.c | 4 +- trunk/arch/tile/kernel/pci.c | 2 +- trunk/arch/unicore32/kernel/pci.c | 2 +- trunk/arch/x86/Kconfig | 2 +- trunk/arch/x86/pci/acpi.c | 7 +- trunk/arch/x86/pci/ce4100.c | 2 + trunk/arch/x86/pci/common.c | 14 +- trunk/arch/x86/pci/direct.c | 6 +- trunk/arch/x86/pci/numaq_32.c | 2 + trunk/arch/x86/pci/olpc.c | 4 + trunk/arch/x86/pci/pcbios.c | 2 + trunk/arch/x86/pci/visws.c | 2 +- trunk/arch/x86/xen/Makefile | 4 +- trunk/drivers/acpi/apei/erst.c | 20 +- trunk/drivers/char/hw_random/n2-drv.c | 29 +- trunk/drivers/char/hw_random/n2rng.h | 2 +- trunk/drivers/char/ramoops.c | 1 + trunk/drivers/char/tpm/tpm.c | 102 +- trunk/drivers/char/tpm/tpm.h | 7 + trunk/drivers/char/tpm/tpm_nsc.c | 14 +- trunk/drivers/char/tpm/tpm_tis.c | 182 +- trunk/drivers/crypto/n2_core.c | 33 +- trunk/drivers/dma/TODO | 1 - trunk/drivers/dma/amba-pl08x.c | 246 +- trunk/drivers/dma/at_hdmac.c | 4 +- trunk/drivers/dma/coh901318.c | 19 +- trunk/drivers/dma/dmaengine.c | 4 +- trunk/drivers/dma/ep93xx_dma.c | 2 +- trunk/drivers/dma/imx-sdma.c | 98 +- trunk/drivers/dma/intel_mid_dma.c | 2 - trunk/drivers/dma/ipu/ipu_idmac.c | 6 +- trunk/drivers/dma/mv_xor.c | 3 +- trunk/drivers/dma/mxs-dma.c | 13 +- trunk/drivers/dma/pch_dma.c | 127 +- trunk/drivers/dma/pl330.c | 64 +- trunk/drivers/dma/shdma.c | 88 +- trunk/drivers/dma/shdma.h | 4 + trunk/drivers/dma/ste_dma40.c | 270 +- trunk/drivers/dma/ste_dma40_ll.h | 3 - trunk/drivers/firmware/efivars.c | 243 +- trunk/drivers/gpio/Kconfig | 22 + trunk/drivers/gpio/Makefile | 3 + trunk/drivers/gpio/gpio-ab8500.c | 2 +- trunk/drivers/gpio/gpio-msm-v1.c | 636 ++ .../gpio-v2.c => drivers/gpio/gpio-msm-v2.c} | 4 +- trunk/drivers/gpio/gpio-tps65912.c | 156 + trunk/drivers/hwmon/Kconfig | 127 +- trunk/drivers/hwmon/Makefile | 13 +- trunk/drivers/hwmon/coretemp.c | 177 +- trunk/drivers/hwmon/lm90.c | 65 +- trunk/drivers/hwmon/lm95241.c | 31 +- trunk/drivers/hwmon/lm95245.c | 543 ++ trunk/drivers/hwmon/max1668.c | 502 ++ trunk/drivers/hwmon/ntc_thermistor.c | 453 ++ trunk/drivers/hwmon/pmbus/Kconfig | 100 + trunk/drivers/hwmon/pmbus/Makefile | 13 + trunk/drivers/hwmon/{ => pmbus}/adm1275.c | 66 +- trunk/drivers/hwmon/pmbus/lm25066.c | 340 + trunk/drivers/hwmon/{ => pmbus}/max16064.c | 57 +- trunk/drivers/hwmon/{ => pmbus}/max34440.c | 81 +- trunk/drivers/hwmon/{ => pmbus}/max8688.c | 69 +- trunk/drivers/hwmon/{ => pmbus}/pmbus.c | 37 +- trunk/drivers/hwmon/{ => pmbus}/pmbus.h | 48 +- trunk/drivers/hwmon/{ => pmbus}/pmbus_core.c | 351 +- trunk/drivers/hwmon/{ => pmbus}/ucd9000.c | 0 trunk/drivers/hwmon/{ => pmbus}/ucd9200.c | 0 .../infiniband/ulp/iser/iser_initiator.c | 2 +- trunk/drivers/input/joystick/xpad.c | 31 +- trunk/drivers/input/keyboard/adp5588-keys.c | 1 - trunk/drivers/input/keyboard/adp5589-keys.c | 1 - trunk/drivers/input/keyboard/atkbd.c | 4 +- trunk/drivers/input/keyboard/gpio_keys.c | 166 +- trunk/drivers/input/keyboard/lm8323.c | 23 +- .../drivers/input/keyboard/mpr121_touchkey.c | 16 +- .../drivers/input/keyboard/pmic8xxx-keypad.c | 8 +- trunk/drivers/input/keyboard/qt1070.c | 2 - trunk/drivers/input/keyboard/sh_keysc.c | 2 +- trunk/drivers/input/keyboard/tegra-kbc.c | 2 +- .../drivers/input/keyboard/tnetv107x-keypad.c | 2 +- trunk/drivers/input/misc/Kconfig | 38 + trunk/drivers/input/misc/Makefile | 4 +- trunk/drivers/input/misc/bfin_rotary.c | 1 - trunk/drivers/input/misc/kxtj9.c | 671 ++ trunk/drivers/input/misc/mma8450.c | 256 + trunk/drivers/input/misc/mpu3050.c | 376 + trunk/drivers/input/misc/xen-kbdfront.c | 2 +- trunk/drivers/input/mouse/gpio_mouse.c | 2 +- trunk/drivers/input/mouse/lifebook.c | 4 +- trunk/drivers/input/mouse/pxa930_trkball.c | 1 - trunk/drivers/input/mouse/sentelic.c | 1 - trunk/drivers/input/mouse/synaptics.c | 107 +- trunk/drivers/input/mouse/synaptics.h | 18 +- trunk/drivers/input/serio/at32psif.c | 2 +- trunk/drivers/input/serio/hp_sdc.c | 2 +- trunk/drivers/input/tablet/aiptek.c | 1 - trunk/drivers/input/tablet/wacom_wac.c | 68 +- trunk/drivers/input/touchscreen/ads7846.c | 15 +- .../drivers/input/touchscreen/atmel-wm97xx.c | 4 +- .../drivers/input/touchscreen/atmel_mxt_ts.c | 190 +- .../drivers/input/touchscreen/cy8ctmg110_ts.c | 8 +- .../input/touchscreen/intel-mid-touch.c | 15 +- .../input/touchscreen/mainstone-wm97xx.c | 6 +- .../drivers/input/touchscreen/tnetv107x-ts.c | 2 +- trunk/drivers/input/touchscreen/wm9705.c | 25 +- trunk/drivers/input/touchscreen/wm9712.c | 27 +- trunk/drivers/input/touchscreen/wm9713.c | 25 +- .../input/touchscreen/zylonite-wm97xx.c | 6 +- trunk/drivers/isdn/i4l/isdn_net.c | 3 + trunk/drivers/md/bitmap.c | 137 +- trunk/drivers/md/bitmap.h | 5 - trunk/drivers/md/md.c | 871 ++- trunk/drivers/md/md.h | 110 +- trunk/drivers/md/raid1.c | 962 ++- trunk/drivers/md/raid1.h | 26 +- trunk/drivers/md/raid10.c | 1183 ++- trunk/drivers/md/raid10.h | 21 + trunk/drivers/md/raid5.c | 1015 +-- trunk/drivers/md/raid5.h | 99 +- trunk/drivers/media/Kconfig | 14 +- trunk/drivers/media/common/tuners/Kconfig | 10 + trunk/drivers/media/common/tuners/Makefile | 1 + .../drivers/media/common/tuners/tuner-types.c | 4 + trunk/drivers/media/common/tuners/xc4000.c | 1691 +++++ trunk/drivers/media/common/tuners/xc4000.h | 67 + trunk/drivers/media/dvb/Kconfig | 4 + trunk/drivers/media/dvb/Makefile | 3 +- trunk/drivers/media/dvb/bt8xx/dvb-bt8xx.c | 4 +- trunk/drivers/media/dvb/ddbridge/Kconfig | 18 + trunk/drivers/media/dvb/ddbridge/Makefile | 14 + .../media/dvb/ddbridge/ddbridge-core.c | 1719 +++++ .../media/dvb/ddbridge/ddbridge-regs.h | 151 + trunk/drivers/media/dvb/ddbridge/ddbridge.h | 187 + trunk/drivers/media/dvb/dvb-core/Makefile | 4 +- .../drivers/media/dvb/dvb-core/dvb_frontend.c | 3 +- trunk/drivers/media/dvb/dvb-core/dvb_net.h | 21 +- trunk/drivers/media/dvb/dvb-usb/Kconfig | 1 + trunk/drivers/media/dvb/dvb-usb/af9015.c | 135 +- trunk/drivers/media/dvb/dvb-usb/af9015.h | 1 - trunk/drivers/media/dvb/dvb-usb/anysee.c | 69 +- trunk/drivers/media/dvb/dvb-usb/anysee.h | 16 +- .../media/dvb/dvb-usb/dib0700_devices.c | 188 + trunk/drivers/media/dvb/dvb-usb/dvb-usb-ids.h | 3 + trunk/drivers/media/dvb/dvb-usb/dvb-usb.h | 2 +- trunk/drivers/media/dvb/dvb-usb/gp8psk.h | 3 - .../media/dvb/dvb-usb/technisat-usb2.c | 4 +- trunk/drivers/media/dvb/dvb-usb/vp7045.h | 3 - .../drivers/media/dvb/firewire/firedtv-avc.c | 2 +- trunk/drivers/media/dvb/firewire/firedtv-ci.c | 34 +- trunk/drivers/media/dvb/frontends/Kconfig | 21 + trunk/drivers/media/dvb/frontends/Makefile | 3 + .../media/dvb/frontends/au8522_decoder.c | 2 +- trunk/drivers/media/dvb/frontends/cx24113.c | 20 +- trunk/drivers/media/dvb/frontends/cx24116.c | 6 +- trunk/drivers/media/dvb/frontends/cxd2820r.h | 4 +- .../media/dvb/frontends/cxd2820r_core.c | 22 +- .../media/dvb/frontends/cxd2820r_priv.h | 4 +- trunk/drivers/media/dvb/frontends/dib7000p.c | 5 + trunk/drivers/media/dvb/frontends/drxd_hard.c | 9 +- trunk/drivers/media/dvb/frontends/drxk.h | 47 + trunk/drivers/media/dvb/frontends/drxk_hard.c | 6454 +++++++++++++++++ trunk/drivers/media/dvb/frontends/drxk_hard.h | 348 + trunk/drivers/media/dvb/frontends/drxk_map.h | 449 ++ trunk/drivers/media/dvb/frontends/itd1000.c | 25 +- trunk/drivers/media/dvb/frontends/nxt6000.c | 2 +- trunk/drivers/media/dvb/frontends/s5h1420.c | 12 +- .../media/dvb/frontends/tda18271c2dd.c | 1251 ++++ .../media/dvb/frontends/tda18271c2dd.h | 16 + .../media/dvb/frontends/tda18271c2dd_maps.h | 814 +++ trunk/drivers/media/dvb/ngene/Kconfig | 2 + trunk/drivers/media/dvb/ngene/ngene-cards.c | 182 +- trunk/drivers/media/dvb/ngene/ngene-core.c | 26 +- trunk/drivers/media/dvb/ngene/ngene-dvb.c | 46 +- trunk/drivers/media/dvb/ngene/ngene.h | 7 +- trunk/drivers/media/dvb/siano/smscoreapi.c | 2 +- trunk/drivers/media/dvb/siano/smscoreapi.h | 1 - trunk/drivers/media/radio/dsbr100.c | 7 +- trunk/drivers/media/radio/radio-aimslab.c | 5 +- trunk/drivers/media/radio/radio-aztech.c | 5 +- trunk/drivers/media/radio/radio-cadet.c | 5 +- trunk/drivers/media/radio/radio-gemtek.c | 7 +- trunk/drivers/media/radio/radio-maxiradio.c | 10 +- trunk/drivers/media/radio/radio-mr800.c | 6 +- trunk/drivers/media/radio/radio-rtrack2.c | 5 +- trunk/drivers/media/radio/radio-sf16fmi.c | 5 +- trunk/drivers/media/radio/radio-sf16fmr2.c | 531 +- trunk/drivers/media/radio/radio-tea5764.c | 8 +- trunk/drivers/media/radio/radio-terratec.c | 5 +- trunk/drivers/media/radio/radio-timb.c | 3 +- trunk/drivers/media/radio/radio-trust.c | 5 +- trunk/drivers/media/radio/radio-typhoon.c | 9 +- trunk/drivers/media/radio/radio-wl1273.c | 2 +- trunk/drivers/media/radio/radio-zoltrix.c | 5 +- .../media/radio/si470x/radio-si470x-i2c.c | 4 +- .../media/radio/si470x/radio-si470x-usb.c | 6 +- .../drivers/media/radio/si470x/radio-si470x.h | 1 - trunk/drivers/media/radio/wl128x/fmdrv.h | 5 +- trunk/drivers/media/radio/wl128x/fmdrv_v4l2.c | 3 +- trunk/drivers/media/rc/Kconfig | 11 + trunk/drivers/media/rc/Makefile | 1 + trunk/drivers/media/rc/ene_ir.c | 4 +- trunk/drivers/media/rc/ene_ir.h | 2 +- trunk/drivers/media/rc/ir-lirc-codec.c | 15 +- trunk/drivers/media/rc/ir-mce_kbd-decoder.c | 449 ++ trunk/drivers/media/rc/ir-raw.c | 1 + trunk/drivers/media/rc/ite-cir.c | 5 +- trunk/drivers/media/rc/keymaps/rc-rc6-mce.c | 3 +- trunk/drivers/media/rc/mceusb.c | 10 +- trunk/drivers/media/rc/nuvoton-cir.c | 12 +- trunk/drivers/media/rc/rc-core-priv.h | 18 + trunk/drivers/media/rc/rc-loopback.c | 13 +- trunk/drivers/media/rc/rc-main.c | 4 +- trunk/drivers/media/rc/redrat3.c | 63 +- trunk/drivers/media/rc/winbond-cir.c | 28 +- trunk/drivers/media/video/Kconfig | 44 +- trunk/drivers/media/video/Makefile | 8 +- trunk/drivers/media/video/adp1653.c | 491 ++ trunk/drivers/media/video/arv.c | 5 +- trunk/drivers/media/video/atmel-isi.c | 1048 +++ .../drivers/media/video/au0828/au0828-core.c | 1 + .../drivers/media/video/au0828/au0828-video.c | 5 - trunk/drivers/media/video/bt8xx/bttv-cards.c | 7 +- trunk/drivers/media/video/bt8xx/bttv-driver.c | 14 +- trunk/drivers/media/video/bt8xx/bttvp.h | 3 - trunk/drivers/media/video/bw-qcam.c | 4 +- trunk/drivers/media/video/c-qcam.c | 4 +- trunk/drivers/media/video/cafe_ccic-regs.h | 166 - trunk/drivers/media/video/cafe_ccic.c | 2267 ------ trunk/drivers/media/video/cpia2/cpia2.h | 5 - trunk/drivers/media/video/cpia2/cpia2_v4l.c | 12 +- .../drivers/media/video/cx18/cx18-alsa-main.c | 1 + trunk/drivers/media/video/cx18/cx18-driver.h | 1 - trunk/drivers/media/video/cx18/cx18-ioctl.c | 1 - trunk/drivers/media/video/cx18/cx18-version.h | 8 +- .../media/video/cx231xx/cx231xx-avcore.c | 4 + .../media/video/cx231xx/cx231xx-cards.c | 78 + .../media/video/cx231xx/cx231xx-core.c | 4 + .../media/video/cx231xx/cx231xx-video.c | 29 +- trunk/drivers/media/video/cx231xx/cx231xx.h | 5 +- trunk/drivers/media/video/cx23885/altera-ci.c | 1 - .../drivers/media/video/cx23885/cx23885-417.c | 1 - .../media/video/cx23885/cx23885-cards.c | 70 +- .../media/video/cx23885/cx23885-core.c | 13 +- .../drivers/media/video/cx23885/cx23885-dvb.c | 23 +- .../media/video/cx23885/cx23885-input.c | 6 + .../media/video/cx23885/cx23885-video.c | 1 - trunk/drivers/media/video/cx23885/cx23885.h | 4 +- trunk/drivers/media/video/cx88/cx88-alsa.c | 19 +- .../drivers/media/video/cx88/cx88-blackbird.c | 20 +- trunk/drivers/media/video/cx88/cx88-cards.c | 150 +- trunk/drivers/media/video/cx88/cx88-core.c | 11 +- trunk/drivers/media/video/cx88/cx88-dvb.c | 77 +- trunk/drivers/media/video/cx88/cx88-input.c | 4 + trunk/drivers/media/video/cx88/cx88-mpeg.c | 35 +- trunk/drivers/media/video/cx88/cx88-video.c | 65 +- trunk/drivers/media/video/cx88/cx88.h | 7 +- trunk/drivers/media/video/davinci/Kconfig | 23 + trunk/drivers/media/video/davinci/Makefile | 2 + trunk/drivers/media/video/davinci/vpbe.c | 864 +++ .../media/video/davinci/vpbe_display.c | 1860 +++++ trunk/drivers/media/video/davinci/vpbe_osd.c | 1231 ++++ .../media/video/davinci/vpbe_osd_regs.h | 364 + trunk/drivers/media/video/davinci/vpbe_venc.c | 566 ++ .../media/video/davinci/vpbe_venc_regs.h | 177 + .../media/video/davinci/vpif_capture.c | 9 +- .../media/video/davinci/vpif_capture.h | 7 +- .../media/video/davinci/vpif_display.c | 9 +- .../media/video/davinci/vpif_display.h | 8 +- trunk/drivers/media/video/em28xx/Kconfig | 12 +- trunk/drivers/media/video/em28xx/Makefile | 6 +- .../drivers/media/video/em28xx/em28xx-audio.c | 251 +- .../drivers/media/video/em28xx/em28xx-cards.c | 159 +- .../drivers/media/video/em28xx/em28xx-core.c | 84 +- trunk/drivers/media/video/em28xx/em28xx-dvb.c | 126 +- trunk/drivers/media/video/em28xx/em28xx-i2c.c | 17 +- .../drivers/media/video/em28xx/em28xx-input.c | 1 + trunk/drivers/media/video/em28xx/em28xx-reg.h | 1 + .../drivers/media/video/em28xx/em28xx-video.c | 14 +- trunk/drivers/media/video/em28xx/em28xx.h | 24 +- trunk/drivers/media/video/et61x251/et61x251.h | 1 - .../media/video/et61x251/et61x251_core.c | 16 +- trunk/drivers/media/video/fsl-viu.c | 10 +- trunk/drivers/media/video/gspca/Kconfig | 10 + trunk/drivers/media/video/gspca/Makefile | 2 + trunk/drivers/media/video/gspca/gl860/gl860.h | 1 - trunk/drivers/media/video/gspca/gspca.c | 23 +- trunk/drivers/media/video/gspca/ov519.c | 115 +- trunk/drivers/media/video/gspca/se401.c | 774 ++ trunk/drivers/media/video/gspca/se401.h | 90 + trunk/drivers/media/video/gspca/sunplus.c | 3 - trunk/drivers/media/video/gspca/t613.c | 2 +- trunk/drivers/media/video/hdpvr/hdpvr-core.c | 1 + trunk/drivers/media/video/hdpvr/hdpvr-video.c | 2 - trunk/drivers/media/video/hdpvr/hdpvr.h | 6 - trunk/drivers/media/video/ivtv/ivtv-driver.h | 1 - trunk/drivers/media/video/ivtv/ivtv-fileops.c | 19 +- trunk/drivers/media/video/ivtv/ivtv-ioctl.c | 5 +- trunk/drivers/media/video/ivtv/ivtv-version.h | 7 +- .../media/video/m5mols/m5mols_capture.c | 1 - .../drivers/media/video/m5mols/m5mols_core.c | 1 - .../drivers/media/video/marvell-ccic/Kconfig | 23 + .../drivers/media/video/marvell-ccic/Makefile | 6 + .../media/video/marvell-ccic/cafe-driver.c | 654 ++ .../media/video/marvell-ccic/mcam-core.c | 1843 +++++ .../media/video/marvell-ccic/mcam-core.h | 323 + .../media/video/marvell-ccic/mmp-driver.c | 340 + trunk/drivers/media/video/mem2mem_testdev.c | 4 +- trunk/drivers/media/video/mt9m001.c | 14 +- trunk/drivers/media/video/mt9m111.c | 359 +- trunk/drivers/media/video/mt9t031.c | 3 +- trunk/drivers/media/video/mt9t112.c | 10 +- trunk/drivers/media/video/mt9v011.c | 85 +- trunk/drivers/media/video/mt9v022.c | 10 +- trunk/drivers/media/video/mt9v032.c | 20 +- trunk/drivers/media/video/mx1_camera.c | 47 +- trunk/drivers/media/video/mx2_camera.c | 66 +- trunk/drivers/media/video/mx3_camera.c | 71 +- trunk/drivers/media/video/omap/Kconfig | 7 +- trunk/drivers/media/video/omap/Makefile | 1 + trunk/drivers/media/video/omap/omap_vout.c | 645 +- .../drivers/media/video/omap/omap_vout_vrfb.c | 390 + .../drivers/media/video/omap/omap_vout_vrfb.h | 40 + trunk/drivers/media/video/omap/omap_voutdef.h | 78 + trunk/drivers/media/video/omap/omap_voutlib.c | 46 + trunk/drivers/media/video/omap/omap_voutlib.h | 12 +- trunk/drivers/media/video/omap1_camera.c | 57 +- trunk/drivers/media/video/omap24xxcam.c | 9 +- trunk/drivers/media/video/omap3isp/isp.c | 1 + trunk/drivers/media/video/omap3isp/isp.h | 6 + trunk/drivers/media/video/omap3isp/ispccdc.c | 7 +- trunk/drivers/media/video/omap3isp/ispccp2.c | 27 +- trunk/drivers/media/video/omap3isp/ispccp2.h | 1 + trunk/drivers/media/video/omap3isp/ispstat.c | 3 +- trunk/drivers/media/video/omap3isp/ispvideo.c | 1 - trunk/drivers/media/video/omap3isp/ispvideo.h | 3 +- trunk/drivers/media/video/ov2640.c | 13 +- trunk/drivers/media/video/ov5642.c | 1012 +++ trunk/drivers/media/video/ov7670.c | 3 +- trunk/drivers/media/video/ov772x.c | 10 +- trunk/drivers/media/video/ov9640.c | 13 +- trunk/drivers/media/video/ov9740.c | 556 +- trunk/drivers/media/video/pms.c | 4 +- .../media/video/pvrusb2/pvrusb2-main.c | 1 + .../media/video/pvrusb2/pvrusb2-v4l2.c | 9 +- trunk/drivers/media/video/pwc/Kconfig | 1 + trunk/drivers/media/video/pwc/pwc-ctrl.c | 803 +- trunk/drivers/media/video/pwc/pwc-dec1.c | 28 +- trunk/drivers/media/video/pwc/pwc-dec1.h | 8 +- trunk/drivers/media/video/pwc/pwc-dec23.c | 22 - trunk/drivers/media/video/pwc/pwc-dec23.h | 10 - trunk/drivers/media/video/pwc/pwc-if.c | 1259 +--- trunk/drivers/media/video/pwc/pwc-ioctl.h | 323 - trunk/drivers/media/video/pwc/pwc-kiara.c | 1 - trunk/drivers/media/video/pwc/pwc-misc.c | 4 - .../drivers/media/video/pwc/pwc-uncompress.c | 17 +- .../drivers/media/video/pwc/pwc-uncompress.h | 40 - trunk/drivers/media/video/pwc/pwc-v4l.c | 1257 ++-- trunk/drivers/media/video/pwc/pwc.h | 409 +- trunk/drivers/media/video/pxa_camera.c | 92 +- trunk/drivers/media/video/rj54n1cb0c.c | 7 +- trunk/drivers/media/video/s2255drv.c | 35 +- .../media/video/s5p-fimc/fimc-capture.c | 2 - .../drivers/media/video/s5p-fimc/fimc-core.c | 3 +- trunk/drivers/media/video/s5p-mfc/Makefile | 5 + trunk/drivers/media/video/s5p-mfc/regs-mfc.h | 413 ++ trunk/drivers/media/video/s5p-mfc/s5p_mfc.c | 1274 ++++ .../drivers/media/video/s5p-mfc/s5p_mfc_cmd.c | 120 + .../drivers/media/video/s5p-mfc/s5p_mfc_cmd.h | 30 + .../media/video/s5p-mfc/s5p_mfc_common.h | 572 ++ .../media/video/s5p-mfc/s5p_mfc_ctrl.c | 343 + .../media/video/s5p-mfc/s5p_mfc_ctrl.h | 29 + .../media/video/s5p-mfc/s5p_mfc_debug.h | 48 + .../drivers/media/video/s5p-mfc/s5p_mfc_dec.c | 1036 +++ .../drivers/media/video/s5p-mfc/s5p_mfc_dec.h | 23 + .../drivers/media/video/s5p-mfc/s5p_mfc_enc.c | 1829 +++++ .../drivers/media/video/s5p-mfc/s5p_mfc_enc.h | 23 + .../media/video/s5p-mfc/s5p_mfc_intr.c | 92 + .../media/video/s5p-mfc/s5p_mfc_intr.h | 26 + .../drivers/media/video/s5p-mfc/s5p_mfc_opr.c | 1397 ++++ .../drivers/media/video/s5p-mfc/s5p_mfc_opr.h | 91 + .../drivers/media/video/s5p-mfc/s5p_mfc_pm.c | 117 + .../drivers/media/video/s5p-mfc/s5p_mfc_pm.h | 24 + .../drivers/media/video/s5p-mfc/s5p_mfc_shm.c | 47 + .../drivers/media/video/s5p-mfc/s5p_mfc_shm.h | 91 + trunk/drivers/media/video/s5p-tv/Kconfig | 76 + trunk/drivers/media/video/s5p-tv/Makefile | 17 + trunk/drivers/media/video/s5p-tv/hdmi_drv.c | 1042 +++ .../drivers/media/video/s5p-tv/hdmiphy_drv.c | 188 + trunk/drivers/media/video/s5p-tv/mixer.h | 354 + trunk/drivers/media/video/s5p-tv/mixer_drv.c | 487 ++ .../media/video/s5p-tv/mixer_grp_layer.c | 185 + trunk/drivers/media/video/s5p-tv/mixer_reg.c | 541 ++ .../drivers/media/video/s5p-tv/mixer_video.c | 1006 +++ .../media/video/s5p-tv/mixer_vp_layer.c | 211 + trunk/drivers/media/video/s5p-tv/regs-hdmi.h | 141 + trunk/drivers/media/video/s5p-tv/regs-mixer.h | 121 + trunk/drivers/media/video/s5p-tv/regs-sdo.h | 63 + trunk/drivers/media/video/s5p-tv/regs-vp.h | 88 + trunk/drivers/media/video/s5p-tv/sdo_drv.c | 479 ++ trunk/drivers/media/video/saa7115.c | 4 +- .../media/video/saa7134/saa7134-cards.c | 13 +- .../media/video/saa7134/saa7134-core.c | 12 +- .../drivers/media/video/saa7134/saa7134-dvb.c | 25 + .../media/video/saa7134/saa7134-empress.c | 1 - .../media/video/saa7134/saa7134-video.c | 2 - trunk/drivers/media/video/saa7134/saa7134.h | 3 +- .../media/video/saa7164/saa7164-encoder.c | 6 +- .../drivers/media/video/saa7164/saa7164-vbi.c | 6 +- trunk/drivers/media/video/saa7164/saa7164.h | 1 - .../media/video/sh_mobile_ceu_camera.c | 207 +- trunk/drivers/media/video/sh_mobile_csi2.c | 135 +- trunk/drivers/media/video/sh_vou.c | 3 +- trunk/drivers/media/video/sn9c102/sn9c102.h | 1 - .../media/video/sn9c102/sn9c102_core.c | 16 +- trunk/drivers/media/video/soc_camera.c | 281 +- .../drivers/media/video/soc_camera_platform.c | 10 +- trunk/drivers/media/video/sr030pc30.c | 7 +- trunk/drivers/media/video/tda7432.c | 5 +- trunk/drivers/media/video/timblogiw.c | 1 - trunk/drivers/media/video/tlg2300/pd-common.h | 1 - trunk/drivers/media/video/tlg2300/pd-main.c | 1 + trunk/drivers/media/video/tlg2300/pd-radio.c | 2 - trunk/drivers/media/video/tuner-core.c | 18 + trunk/drivers/media/video/tw9910.c | 21 +- .../media/video/usbvision/usbvision-video.c | 12 +- trunk/drivers/media/video/uvc/uvc_ctrl.c | 4 +- trunk/drivers/media/video/uvc/uvc_driver.c | 12 +- trunk/drivers/media/video/uvc/uvc_v4l2.c | 4 +- trunk/drivers/media/video/uvc/uvcvideo.h | 3 +- trunk/drivers/media/video/v4l2-common.c | 3 + .../drivers/media/video/v4l2-compat-ioctl32.c | 37 + trunk/drivers/media/video/v4l2-ctrls.c | 826 ++- trunk/drivers/media/video/v4l2-device.c | 1 + trunk/drivers/media/video/v4l2-event.c | 282 +- trunk/drivers/media/video/v4l2-fh.c | 23 +- trunk/drivers/media/video/v4l2-ioctl.c | 50 +- trunk/drivers/media/video/v4l2-subdev.c | 31 +- trunk/drivers/media/video/videobuf-dma-sg.c | 5 +- trunk/drivers/media/video/videobuf2-dma-sg.c | 8 +- trunk/drivers/media/video/videobuf2-memops.c | 6 +- trunk/drivers/media/video/vino.c | 5 +- trunk/drivers/media/video/vivi.c | 91 +- trunk/drivers/media/video/w9966.c | 4 +- trunk/drivers/media/video/zoran/zoran.h | 4 - trunk/drivers/media/video/zoran/zoran_card.c | 7 +- .../drivers/media/video/zoran/zoran_driver.c | 3 - trunk/drivers/media/video/zr364xx.c | 6 +- trunk/drivers/message/fusion/mptscsih.c | 2 +- trunk/drivers/mfd/Kconfig | 53 +- trunk/drivers/mfd/Makefile | 8 +- trunk/drivers/mfd/aat2870-core.c | 535 ++ trunk/drivers/mfd/ab3550-core.c | 41 +- trunk/drivers/mfd/ab8500-core.c | 231 +- trunk/drivers/mfd/ab8500-debugfs.c | 41 +- trunk/drivers/mfd/jz4740-adc.c | 90 +- trunk/drivers/mfd/lpc_sch.c | 49 +- trunk/drivers/mfd/max8997-irq.c | 2 - trunk/drivers/mfd/max8998.c | 2 + trunk/drivers/mfd/omap-usb-host.c | 4 +- trunk/drivers/mfd/stmpe.c | 2 +- trunk/drivers/mfd/stmpe.h | 1 + trunk/drivers/mfd/timberdale.c | 8 +- trunk/drivers/mfd/tps65910.c | 13 +- trunk/drivers/mfd/tps65911-comparator.c | 2 + trunk/drivers/mfd/tps65912-core.c | 177 + trunk/drivers/mfd/tps65912-i2c.c | 139 + trunk/drivers/mfd/tps65912-irq.c | 224 + trunk/drivers/mfd/tps65912-spi.c | 142 + trunk/drivers/mfd/twl-core.c | 2 + trunk/drivers/mfd/twl4030-madc.c | 8 +- trunk/drivers/mfd/twl6030-pwm.c | 2 + trunk/drivers/mfd/wm831x-auxadc.c | 299 + trunk/drivers/mfd/wm831x-core.c | 259 +- trunk/drivers/mfd/wm831x-irq.c | 77 +- trunk/drivers/mfd/wm8350-irq.c | 18 +- trunk/drivers/mfd/wm8994-core.c | 33 +- trunk/drivers/mfd/wm8994-irq.c | 12 +- trunk/drivers/mmc/host/sdhci-esdhc-imx.c | 261 +- trunk/drivers/mmc/host/sdhci-pltfm.c | 3 +- trunk/drivers/net/Makefile | 1 + trunk/drivers/net/acenic.c | 45 +- trunk/drivers/net/acenic.h | 6 +- trunk/drivers/net/bonding/bond_main.c | 8 +- trunk/drivers/net/bonding/bond_sysfs.c | 133 +- trunk/drivers/net/fec.c | 125 +- trunk/drivers/net/forcedeth.c | 16 +- trunk/drivers/net/gianfar.c | 6 +- trunk/drivers/net/ibm_newemac/core.c | 33 +- trunk/drivers/net/ibm_newemac/emac.h | 19 +- trunk/drivers/net/ibm_newemac/phy.c | 7 +- trunk/drivers/net/ifb.c | 2 +- trunk/drivers/net/macvlan.c | 2 +- trunk/drivers/net/pcmcia/smc91c92_cs.c | 2 +- trunk/drivers/net/sungem.c | 3 +- trunk/drivers/net/tg3.c | 287 +- trunk/drivers/net/tg3.h | 9 +- trunk/drivers/net/tun.c | 1 + trunk/drivers/net/usb/asix.c | 7 +- trunk/drivers/net/veth.c | 2 + trunk/drivers/net/wan/hdlc_fr.c | 5 +- trunk/drivers/net/wireless/airo.c | 1 + trunk/drivers/net/wireless/b43/Kconfig | 2 +- trunk/drivers/net/wireless/b43/bus.c | 2 + trunk/drivers/net/wireless/b43/main.c | 5 +- trunk/drivers/net/wireless/hostap/hostap_cs.c | 2 + .../drivers/net/wireless/hostap/hostap_main.c | 1 + .../drivers/net/wireless/orinoco/orinoco_cs.c | 5 +- trunk/drivers/nfc/pn533.c | 2 +- trunk/drivers/of/gpio.c | 5 +- trunk/drivers/of/of_net.c | 45 + trunk/drivers/pci/hotplug/acpi_pcihp.c | 6 +- trunk/drivers/pci/hotplug/cpqphp_core.c | 17 +- trunk/drivers/pci/hotplug/pciehp_ctrl.c | 3 + trunk/drivers/pci/hotplug/pciehp_hpc.c | 11 +- trunk/drivers/pci/pci.c | 11 +- trunk/drivers/pci/pcie/aer/aerdrv_core.c | 76 +- trunk/drivers/pci/pcie/aer/aerdrv_errprint.c | 3 +- trunk/drivers/pci/probe.c | 87 +- trunk/drivers/pci/setup-bus.c | 3 - trunk/drivers/pci/setup-irq.c | 4 +- trunk/drivers/pci/setup-res.c | 3 +- trunk/drivers/pcmcia/pxa2xx_balloon3.c | 10 - trunk/drivers/pcmcia/pxa2xx_cm_x255.c | 11 - trunk/drivers/pcmcia/pxa2xx_cm_x270.c | 11 - trunk/drivers/pcmcia/pxa2xx_colibri.c | 11 - trunk/drivers/pcmcia/pxa2xx_mainstone.c | 10 - trunk/drivers/pcmcia/pxa2xx_palmld.c | 11 - trunk/drivers/pcmcia/pxa2xx_palmtc.c | 11 - trunk/drivers/pcmcia/pxa2xx_palmtx.c | 11 - trunk/drivers/pcmcia/pxa2xx_stargate2.c | 34 +- trunk/drivers/pcmcia/pxa2xx_viper.c | 10 - trunk/drivers/pcmcia/soc_common.c | 7 +- trunk/drivers/power/Kconfig | 14 + trunk/drivers/power/Makefile | 2 + trunk/drivers/power/apm_power.c | 8 +- trunk/drivers/power/bq20z75.c | 103 +- trunk/drivers/power/gpio-charger.c | 2 +- trunk/drivers/power/max17042_battery.c | 175 +- trunk/drivers/power/max8903_charger.c | 16 +- trunk/drivers/power/max8997_charger.c | 206 + trunk/drivers/power/max8998_charger.c | 218 + trunk/drivers/power/s3c_adc_battery.c | 2 +- trunk/drivers/power/twl4030_charger.c | 10 +- trunk/drivers/power/wm831x_backup.c | 12 +- trunk/drivers/power/wm831x_power.c | 26 +- trunk/drivers/regulator/Kconfig | 13 + trunk/drivers/regulator/Makefile | 2 + trunk/drivers/regulator/aat2870-regulator.c | 232 + trunk/drivers/regulator/tps65912-regulator.c | 800 ++ trunk/drivers/scsi/be2iscsi/be_main.h | 4 +- trunk/drivers/scsi/bfa/bfa.h | 51 +- trunk/drivers/scsi/bfa/bfa_core.c | 60 +- trunk/drivers/scsi/bfa/bfa_defs.h | 171 + trunk/drivers/scsi/bfa/bfa_defs_svc.h | 99 + trunk/drivers/scsi/bfa/bfa_fc.h | 155 + trunk/drivers/scsi/bfa/bfa_fcpim.c | 736 +- trunk/drivers/scsi/bfa/bfa_fcpim.h | 45 +- trunk/drivers/scsi/bfa/bfa_fcs.c | 26 + trunk/drivers/scsi/bfa/bfa_fcs.h | 1 + trunk/drivers/scsi/bfa/bfa_fcs_fcpim.c | 37 +- trunk/drivers/scsi/bfa/bfa_fcs_lport.c | 74 +- trunk/drivers/scsi/bfa/bfa_fcs_rport.c | 49 +- trunk/drivers/scsi/bfa/bfa_hw_cb.c | 38 +- trunk/drivers/scsi/bfa/bfa_hw_ct.c | 25 +- trunk/drivers/scsi/bfa/bfa_ioc.c | 569 +- trunk/drivers/scsi/bfa/bfa_ioc.h | 48 +- trunk/drivers/scsi/bfa/bfa_modules.h | 3 + trunk/drivers/scsi/bfa/bfa_svc.c | 249 +- trunk/drivers/scsi/bfa/bfa_svc.h | 29 +- trunk/drivers/scsi/bfa/bfad.c | 8 +- trunk/drivers/scsi/bfa/bfad_bsg.c | 1084 ++- trunk/drivers/scsi/bfa/bfad_bsg.h | 237 + trunk/drivers/scsi/bfa/bfad_drv.h | 6 +- trunk/drivers/scsi/bfa/bfad_im.c | 26 + trunk/drivers/scsi/bfa/bfad_im.h | 22 + trunk/drivers/scsi/bfa/bfi.h | 20 + trunk/drivers/scsi/bnx2fc/bnx2fc.h | 107 +- trunk/drivers/scsi/bnx2fc/bnx2fc_debug.h | 16 +- trunk/drivers/scsi/bnx2fc/bnx2fc_els.c | 434 +- trunk/drivers/scsi/bnx2fc/bnx2fc_fcoe.c | 732 +- trunk/drivers/scsi/bnx2fc/bnx2fc_hwi.c | 433 +- trunk/drivers/scsi/bnx2fc/bnx2fc_io.c | 194 +- trunk/drivers/scsi/bnx2fc/bnx2fc_tgt.c | 51 +- trunk/drivers/scsi/bnx2i/bnx2i_hwi.c | 8 +- trunk/drivers/scsi/bnx2i/bnx2i_iscsi.c | 2 +- .../scsi/device_handler/scsi_dh_rdac.c | 82 +- trunk/drivers/scsi/fcoe/fcoe.c | 69 +- trunk/drivers/scsi/hpsa.c | 4 +- trunk/drivers/scsi/hpsa.h | 2 +- trunk/drivers/scsi/ipr.c | 12 +- trunk/drivers/scsi/libfc/fc_exch.c | 9 +- trunk/drivers/scsi/libfc/fc_fcp.c | 9 +- trunk/drivers/scsi/libfc/fc_lport.c | 1 - trunk/drivers/scsi/libiscsi.c | 22 +- trunk/drivers/scsi/libsas/sas_expander.c | 3 + trunk/drivers/scsi/lpfc/lpfc.h | 15 +- trunk/drivers/scsi/lpfc/lpfc_attr.c | 161 +- trunk/drivers/scsi/lpfc/lpfc_bsg.c | 89 +- trunk/drivers/scsi/lpfc/lpfc_crtn.h | 12 + trunk/drivers/scsi/lpfc/lpfc_debugfs.c | 1456 +++- trunk/drivers/scsi/lpfc/lpfc_debugfs.h | 125 +- trunk/drivers/scsi/lpfc/lpfc_els.c | 105 +- trunk/drivers/scsi/lpfc/lpfc_hbadisc.c | 222 +- trunk/drivers/scsi/lpfc/lpfc_hw.h | 7 +- trunk/drivers/scsi/lpfc/lpfc_hw4.h | 30 +- trunk/drivers/scsi/lpfc/lpfc_init.c | 90 +- trunk/drivers/scsi/lpfc/lpfc_mbox.c | 2 +- trunk/drivers/scsi/lpfc/lpfc_scsi.c | 97 +- trunk/drivers/scsi/lpfc/lpfc_sli.c | 399 +- trunk/drivers/scsi/lpfc/lpfc_sli4.h | 29 +- trunk/drivers/scsi/lpfc/lpfc_version.h | 2 +- trunk/drivers/scsi/megaraid/megaraid_sas.h | 6 +- .../drivers/scsi/megaraid/megaraid_sas_base.c | 18 +- trunk/drivers/scsi/megaraid/megaraid_sas_fp.c | 1 - trunk/drivers/scsi/mpt2sas/mpt2sas_scsih.c | 4 + trunk/drivers/scsi/mvsas/Kconfig | 9 +- trunk/drivers/scsi/mvsas/mv_64xx.c | 101 +- trunk/drivers/scsi/mvsas/mv_94xx.c | 508 +- trunk/drivers/scsi/mvsas/mv_94xx.h | 99 +- trunk/drivers/scsi/mvsas/mv_chips.h | 17 +- trunk/drivers/scsi/mvsas/mv_defs.h | 11 +- trunk/drivers/scsi/mvsas/mv_init.c | 187 +- trunk/drivers/scsi/mvsas/mv_sas.c | 422 +- trunk/drivers/scsi/mvsas/mv_sas.h | 105 +- trunk/drivers/scsi/pmcraid.c | 3 + trunk/drivers/scsi/qla2xxx/qla_attr.c | 183 +- trunk/drivers/scsi/qla2xxx/qla_bsg.c | 441 +- trunk/drivers/scsi/qla2xxx/qla_dbg.c | 396 +- trunk/drivers/scsi/qla2xxx/qla_dbg.h | 187 +- trunk/drivers/scsi/qla2xxx/qla_dfs.c | 16 +- trunk/drivers/scsi/qla2xxx/qla_gbl.h | 8 +- trunk/drivers/scsi/qla2xxx/qla_gs.c | 371 +- trunk/drivers/scsi/qla2xxx/qla_init.c | 856 +-- trunk/drivers/scsi/qla2xxx/qla_inline.h | 8 +- trunk/drivers/scsi/qla2xxx/qla_iocb.c | 120 +- trunk/drivers/scsi/qla2xxx/qla_isr.c | 663 +- trunk/drivers/scsi/qla2xxx/qla_mbx.c | 1091 ++- trunk/drivers/scsi/qla2xxx/qla_mid.c | 160 +- trunk/drivers/scsi/qla2xxx/qla_nx.c | 556 +- trunk/drivers/scsi/qla2xxx/qla_os.c | 747 +- trunk/drivers/scsi/qla2xxx/qla_sup.c | 275 +- trunk/drivers/scsi/scsi_lib.c | 1 + trunk/drivers/scsi/scsi_transport_spi.c | 24 + trunk/drivers/sh/clk/core.c | 29 +- .../staging/ath6kl/os/linux/ar6000_drv.c | 1 + .../staging/brcm80211/brcmsmac/mac80211_if.h | 2 - trunk/drivers/staging/cxd2099/Kconfig | 11 +- trunk/drivers/staging/cxd2099/cxd2099.c | 311 +- trunk/drivers/staging/cxd2099/cxd2099.h | 18 +- trunk/drivers/staging/tm6000/tm6000-alsa.c | 12 +- trunk/drivers/target/Kconfig | 1 + trunk/drivers/target/Makefile | 2 +- trunk/drivers/target/iscsi/Kconfig | 8 + trunk/drivers/target/iscsi/Makefile | 20 + trunk/drivers/target/iscsi/iscsi_target.c | 4559 ++++++++++++ trunk/drivers/target/iscsi/iscsi_target.h | 42 + .../drivers/target/iscsi/iscsi_target_auth.c | 490 ++ .../drivers/target/iscsi/iscsi_target_auth.h | 31 + .../target/iscsi/iscsi_target_configfs.c | 1882 +++++ .../target/iscsi/iscsi_target_configfs.h | 7 + .../drivers/target/iscsi/iscsi_target_core.h | 859 +++ .../target/iscsi/iscsi_target_datain_values.c | 531 ++ .../target/iscsi/iscsi_target_datain_values.h | 12 + .../target/iscsi/iscsi_target_device.c | 87 + .../target/iscsi/iscsi_target_device.h | 9 + .../drivers/target/iscsi/iscsi_target_erl0.c | 1004 +++ .../drivers/target/iscsi/iscsi_target_erl0.h | 15 + .../drivers/target/iscsi/iscsi_target_erl1.c | 1299 ++++ .../drivers/target/iscsi/iscsi_target_erl1.h | 26 + .../drivers/target/iscsi/iscsi_target_erl2.c | 474 ++ .../drivers/target/iscsi/iscsi_target_erl2.h | 18 + .../drivers/target/iscsi/iscsi_target_login.c | 1232 ++++ .../drivers/target/iscsi/iscsi_target_login.h | 12 + .../drivers/target/iscsi/iscsi_target_nego.c | 1067 +++ .../drivers/target/iscsi/iscsi_target_nego.h | 17 + .../target/iscsi/iscsi_target_nodeattrib.c | 263 + .../target/iscsi/iscsi_target_nodeattrib.h | 14 + .../target/iscsi/iscsi_target_parameters.c | 1905 +++++ .../target/iscsi/iscsi_target_parameters.h | 269 + .../target/iscsi/iscsi_target_seq_pdu_list.c | 664 ++ .../target/iscsi/iscsi_target_seq_pdu_list.h | 86 + .../drivers/target/iscsi/iscsi_target_stat.c | 950 +++ .../drivers/target/iscsi/iscsi_target_stat.h | 64 + trunk/drivers/target/iscsi/iscsi_target_tmr.c | 849 +++ trunk/drivers/target/iscsi/iscsi_target_tmr.h | 14 + trunk/drivers/target/iscsi/iscsi_target_tpg.c | 759 ++ trunk/drivers/target/iscsi/iscsi_target_tpg.h | 41 + trunk/drivers/target/iscsi/iscsi_target_tq.c | 551 ++ trunk/drivers/target/iscsi/iscsi_target_tq.h | 88 + .../drivers/target/iscsi/iscsi_target_util.c | 1819 +++++ .../drivers/target/iscsi/iscsi_target_util.h | 60 + trunk/drivers/target/target_core_transport.c | 7 +- trunk/drivers/tty/serial/Kconfig | 2 +- trunk/drivers/tty/serial/imx.c | 166 +- trunk/drivers/tty/serial/sh-sci.c | 757 +- trunk/drivers/tty/serial/sh-sci.h | 434 +- trunk/drivers/usb/gadget/uvc_v4l2.c | 22 +- trunk/drivers/video/backlight/Kconfig | 7 + trunk/drivers/video/backlight/Makefile | 1 + trunk/drivers/video/backlight/aat2870_bl.c | 246 + .../drivers/video/omap2/displays/panel-taal.c | 55 +- trunk/drivers/video/omap2/dss/Kconfig | 12 - trunk/drivers/video/omap2/dss/core.c | 21 +- trunk/drivers/video/omap2/dss/dispc.c | 562 +- trunk/drivers/video/omap2/dss/display.c | 57 +- trunk/drivers/video/omap2/dss/dpi.c | 73 +- trunk/drivers/video/omap2/dss/dsi.c | 296 +- trunk/drivers/video/omap2/dss/dss.c | 583 +- trunk/drivers/video/omap2/dss/dss.h | 54 +- trunk/drivers/video/omap2/dss/dss_features.c | 36 +- trunk/drivers/video/omap2/dss/dss_features.h | 7 + trunk/drivers/video/omap2/dss/hdmi.c | 162 +- trunk/drivers/video/omap2/dss/manager.c | 351 +- trunk/drivers/video/omap2/dss/overlay.c | 27 +- trunk/drivers/video/omap2/dss/rfbi.c | 114 +- trunk/drivers/video/omap2/dss/sdi.c | 40 +- trunk/drivers/video/omap2/dss/venc.c | 183 +- .../drivers/video/omap2/omapfb/omapfb-ioctl.c | 72 +- .../drivers/video/omap2/omapfb/omapfb-main.c | 166 +- .../drivers/video/omap2/omapfb/omapfb-sysfs.c | 34 + trunk/drivers/video/omap2/omapfb/omapfb.h | 37 +- trunk/drivers/watchdog/Kconfig | 36 +- trunk/drivers/watchdog/Makefile | 8 + trunk/drivers/watchdog/at91sam9_wdt.c | 21 +- .../watchdog/at91sam9_wdt.h} | 2 +- trunk/drivers/watchdog/dw_wdt.c | 376 + trunk/drivers/watchdog/hpwdt.c | 104 +- trunk/drivers/watchdog/iTCO_wdt.c | 412 +- trunk/drivers/watchdog/imx2_wdt.c | 6 + trunk/drivers/watchdog/it8712f_wdt.c | 63 +- trunk/drivers/watchdog/it87_wdt.c | 168 +- trunk/drivers/watchdog/mpcore_wdt.c | 23 + trunk/drivers/watchdog/mtx-1_wdt.c | 4 +- trunk/drivers/watchdog/of_xilinx_wdt.c | 433 ++ trunk/drivers/watchdog/pc87413_wdt.c | 96 +- trunk/drivers/watchdog/s3c2410_wdt.c | 10 + trunk/drivers/watchdog/sch311x_wdt.c | 5 - trunk/drivers/watchdog/sp805_wdt.c | 5 +- trunk/drivers/watchdog/watchdog_core.c | 111 + trunk/drivers/watchdog/watchdog_dev.c | 395 + trunk/drivers/watchdog/watchdog_dev.h | 33 + trunk/drivers/xen/grant-table.c | 2 +- trunk/drivers/xen/xen-pciback/xenbus.c | 1 - trunk/drivers/xen/xen-selfballoon.c | 4 +- trunk/fs/btrfs/btrfs_inode.h | 16 +- trunk/fs/btrfs/ctree.c | 457 +- trunk/fs/btrfs/ctree.h | 14 +- trunk/fs/btrfs/delayed-inode.c | 2 +- trunk/fs/btrfs/dir-item.c | 9 +- trunk/fs/btrfs/disk-io.c | 116 +- trunk/fs/btrfs/disk-io.h | 10 +- trunk/fs/btrfs/extent-tree.c | 285 +- trunk/fs/btrfs/extent_io.c | 168 +- trunk/fs/btrfs/extent_io.h | 35 +- trunk/fs/btrfs/file-item.c | 41 +- trunk/fs/btrfs/file.c | 11 +- trunk/fs/btrfs/free-space-cache.c | 173 +- trunk/fs/btrfs/inode.c | 90 +- trunk/fs/btrfs/ioctl.c | 8 +- trunk/fs/btrfs/locking.c | 280 +- trunk/fs/btrfs/locking.h | 36 +- trunk/fs/btrfs/relocation.c | 3 +- trunk/fs/btrfs/struct-funcs.c | 100 +- trunk/fs/btrfs/transaction.c | 47 +- trunk/fs/btrfs/tree-log.c | 6 +- trunk/fs/btrfs/volumes.c | 2 +- trunk/fs/btrfs/xattr.c | 66 +- trunk/fs/cifs/cifsencrypt.c | 16 +- trunk/fs/cifs/cifsfs.c | 18 - trunk/fs/cifs/cifsfs.h | 4 - trunk/fs/cifs/cifsglob.h | 2 - trunk/fs/cifs/cifssmb.c | 6 +- trunk/fs/cifs/connect.c | 659 +- trunk/fs/cifs/file.c | 27 +- trunk/fs/cifs/misc.c | 11 +- trunk/fs/cifs/sess.c | 3 +- trunk/fs/ecryptfs/ecryptfs_kernel.h | 150 +- trunk/fs/ecryptfs/inode.c | 1 + trunk/fs/ecryptfs/keystore.c | 60 +- trunk/fs/ext2/acl.h | 1 - trunk/fs/fs-writeback.c | 7 +- trunk/fs/gfs2/ops_fstype.c | 4 +- trunk/fs/jfs/jfs_dmap.c | 5 +- trunk/fs/jfs/jfs_txnmgr.c | 6 +- trunk/fs/jfs/namei.c | 3 +- trunk/fs/lockd/clntproc.c | 9 +- trunk/fs/nfs/Kconfig | 9 +- trunk/fs/nfs/Makefile | 1 + trunk/fs/nfs/blocklayout/Makefile | 5 + trunk/fs/nfs/blocklayout/blocklayout.c | 1019 +++ trunk/fs/nfs/blocklayout/blocklayout.h | 207 + trunk/fs/nfs/blocklayout/blocklayoutdev.c | 410 ++ trunk/fs/nfs/blocklayout/blocklayoutdm.c | 111 + trunk/fs/nfs/blocklayout/extents.c | 935 +++ trunk/fs/nfs/callback_proc.c | 57 +- trunk/fs/nfs/client.c | 18 +- trunk/fs/nfs/delegation.c | 16 +- trunk/fs/nfs/dir.c | 57 +- trunk/fs/nfs/internal.h | 13 + trunk/fs/nfs/namespace.c | 2 +- trunk/fs/nfs/nfs4_fs.h | 7 +- trunk/fs/nfs/nfs4filelayout.c | 82 +- trunk/fs/nfs/nfs4filelayout.h | 17 +- trunk/fs/nfs/nfs4filelayoutdev.c | 452 +- trunk/fs/nfs/nfs4proc.c | 277 +- trunk/fs/nfs/nfs4state.c | 9 +- trunk/fs/nfs/nfs4xdr.c | 480 +- trunk/fs/nfs/objlayout/objio_osd.c | 20 +- trunk/fs/nfs/pagelist.c | 69 +- trunk/fs/nfs/pnfs.c | 307 +- trunk/fs/nfs/pnfs.h | 102 +- trunk/fs/nfs/pnfs_dev.c | 64 +- trunk/fs/nfs/read.c | 166 +- trunk/fs/nfs/unlink.c | 37 +- trunk/fs/nfs/write.c | 156 +- trunk/fs/proc/generic.c | 3 +- trunk/fs/proc/proc_net.c | 4 +- trunk/fs/proc/root.c | 2 +- trunk/fs/pstore/inode.c | 12 +- trunk/fs/pstore/internal.h | 2 +- trunk/fs/pstore/platform.c | 30 +- trunk/fs/xfs/linux-2.6/xfs_buf.c | 3 + trunk/fs/xfs/linux-2.6/xfs_file.c | 2 + trunk/fs/xfs/linux-2.6/xfs_iops.c | 9 +- trunk/fs/xfs/xfs_da_btree.c | 32 +- trunk/include/keys/encrypted-type.h | 13 +- trunk/include/linux/aer.h | 3 + trunk/include/linux/amba/pl08x.h | 9 +- trunk/include/linux/dvb/audio.h | 2 +- trunk/include/linux/ecryptfs.h | 113 + trunk/include/linux/efi.h | 6 + trunk/include/linux/if.h | 2 + trunk/include/linux/input.h | 6 +- trunk/include/linux/input/kxtj9.h | 70 + trunk/include/linux/ioport.h | 1 + trunk/include/linux/irq.h | 6 + trunk/include/linux/irqdomain.h | 91 + trunk/include/linux/kconfig.h | 32 + trunk/include/linux/kernel.h | 8 + trunk/include/linux/mfd/aat2870.h | 181 + trunk/include/linux/mfd/ab8500.h | 8 +- trunk/include/linux/mfd/max8997.h | 7 +- trunk/include/linux/mfd/max8998.h | 12 + trunk/include/linux/mfd/stmpe.h | 3 + trunk/include/linux/mfd/tps65910.h | 1 + trunk/include/linux/mfd/tps65912.h | 327 + trunk/include/linux/mfd/wm831x/core.h | 119 +- trunk/include/linux/mfd/wm831x/pdata.h | 3 + trunk/include/linux/mm_types.h | 89 +- trunk/include/linux/netdevice.h | 7 +- trunk/include/linux/nfs.h | 2 + trunk/include/linux/nfs4.h | 4 + trunk/include/linux/nfs_fs.h | 3 +- trunk/include/linux/nfs_fs_sb.h | 9 +- trunk/include/linux/nfs_page.h | 17 +- trunk/include/linux/nfs_xdr.h | 51 +- trunk/include/linux/of_gpio.h | 9 + trunk/include/linux/of_irq.h | 4 + trunk/include/linux/of_net.h | 1 + trunk/include/linux/page-flags.h | 5 - trunk/include/linux/pci.h | 6 +- trunk/include/linux/phy.h | 4 +- .../linux/platform_data/ntc_thermistor.h | 53 + trunk/include/linux/pnfs_osd_xdr.h | 31 +- trunk/include/linux/power/bq20z75.h | 3 + trunk/include/linux/power/max17042_battery.h | 91 + trunk/include/linux/proc_fs.h | 6 +- trunk/include/linux/pstore.h | 9 +- trunk/include/linux/raid/md_p.h | 14 +- trunk/include/linux/serial_sci.h | 75 + trunk/include/linux/sh_clk.h | 4 + trunk/include/linux/sh_dma.h | 8 + trunk/include/linux/shm.h | 3 + trunk/include/linux/slub_def.h | 3 + trunk/include/linux/sunrpc/bc_xprt.h | 6 +- trunk/include/linux/sunrpc/sched.h | 4 + trunk/include/linux/sunrpc/svc.h | 4 +- trunk/include/linux/sunrpc/xprt.h | 34 +- trunk/include/linux/videodev2.h | 254 +- trunk/include/linux/watchdog.h | 78 + trunk/include/linux/wm97xx.h | 13 +- trunk/include/media/adp1653.h | 126 + trunk/include/media/atmel-isi.h | 119 + trunk/include/media/davinci/vpbe.h | 184 + trunk/include/media/davinci/vpbe_display.h | 147 + trunk/include/media/davinci/vpbe_osd.h | 394 + trunk/include/media/davinci/vpbe_types.h | 91 + trunk/include/media/davinci/vpbe_venc.h | 45 + trunk/include/media/mmp-camera.h | 9 + .../media/video => include/media}/ov7670.h | 0 trunk/include/media/rc-core.h | 2 +- trunk/include/media/rc-map.h | 3 +- trunk/include/media/sh_mobile_ceu.h | 10 +- trunk/include/media/sh_mobile_csi2.h | 8 +- trunk/include/media/soc_camera.h | 44 +- trunk/include/media/soc_camera_platform.h | 15 +- trunk/include/media/timb_radio.h | 9 +- trunk/include/media/tuner.h | 2 + trunk/include/media/v4l2-chip-ident.h | 4 +- trunk/include/media/v4l2-ctrls.h | 72 +- trunk/include/media/v4l2-event.h | 84 +- trunk/include/media/v4l2-fh.h | 13 +- trunk/include/media/v4l2-mediabus.h | 63 + trunk/include/media/v4l2-subdev.h | 24 +- trunk/include/pcmcia/device_id.h | 9 + trunk/include/scsi/fc_frame.h | 1 - trunk/include/scsi/iscsi_proto.h | 60 +- trunk/include/sound/pcm.h | 35 +- trunk/include/sound/pcm_params.h | 16 +- trunk/include/sound/soc-dapm.h | 6 + trunk/include/sound/tea575x-tuner.h | 8 +- trunk/include/trace/events/xen.h | 2 + trunk/include/video/omapdss.h | 26 +- trunk/ipc/shm.c | 70 +- trunk/kernel/cgroup.c | 5 + trunk/kernel/compat.c | 6 +- trunk/kernel/debug/gdbstub.c | 22 +- trunk/kernel/debug/kdb/kdb_bt.c | 5 +- trunk/kernel/debug/kdb/kdb_cmds | 4 - trunk/kernel/debug/kdb/kdb_debugger.c | 21 +- trunk/kernel/debug/kdb/kdb_io.c | 36 +- trunk/kernel/debug/kdb/kdb_main.c | 4 +- trunk/kernel/debug/kdb/kdb_private.h | 3 +- trunk/kernel/irq/Kconfig | 4 + trunk/kernel/irq/Makefile | 1 + trunk/kernel/irq/irqdomain.c | 180 + trunk/kernel/resource.c | 21 + trunk/kernel/signal.c | 17 +- trunk/mm/slab.c | 7 +- trunk/mm/slub.c | 764 +- trunk/net/8021q/vlan_dev.c | 2 +- trunk/net/bluetooth/bnep/netdev.c | 1 + trunk/net/core/dev.c | 4 +- trunk/net/core/pktgen.c | 8 +- trunk/net/ethernet/eth.c | 2 + trunk/net/ipv4/devinet.c | 16 +- trunk/net/ipv6/addrconf.c | 2 + trunk/net/l2tp/l2tp_eth.c | 2 +- trunk/net/mac80211/iface.c | 1 + trunk/net/socket.c | 2 +- trunk/net/sunrpc/Kconfig | 4 + trunk/net/sunrpc/Makefile | 2 +- trunk/net/sunrpc/backchannel_rqst.c | 7 +- trunk/net/sunrpc/bc_svc.c | 3 - trunk/net/sunrpc/clnt.c | 15 +- trunk/net/sunrpc/sched.c | 38 +- trunk/net/sunrpc/svc.c | 6 +- trunk/net/sunrpc/svcsock.c | 14 +- trunk/net/sunrpc/xdr.c | 2 +- trunk/net/sunrpc/xprt.c | 257 +- trunk/net/sunrpc/xprtrdma/transport.c | 6 +- trunk/net/sunrpc/xprtrdma/xprt_rdma.h | 2 +- trunk/net/sunrpc/xprtsock.c | 57 +- trunk/net/wireless/reg.c | 7 +- trunk/scripts/kconfig/Makefile | 23 +- trunk/scripts/kconfig/conf.c | 48 +- trunk/scripts/kconfig/confdata.c | 295 +- trunk/scripts/kconfig/expr.c | 13 +- trunk/scripts/kconfig/expr.h | 3 - trunk/scripts/kconfig/gconf.c | 38 +- trunk/scripts/kconfig/kconfig_load.c | 35 - trunk/scripts/kconfig/kxgettext.c | 1 - trunk/scripts/kconfig/lkc.h | 16 +- trunk/scripts/kconfig/lkc_proto.h | 1 + trunk/scripts/kconfig/mconf.c | 2 +- trunk/scripts/kconfig/menu.c | 5 +- trunk/scripts/kconfig/nconf.c | 30 +- trunk/scripts/kconfig/qconf.cc | 17 +- trunk/scripts/kconfig/qconf.h | 2 +- trunk/scripts/kconfig/symbol.c | 47 +- trunk/scripts/kconfig/util.c | 2 + trunk/scripts/kconfig/zconf.l | 1 - trunk/scripts/kconfig/zconf.lex.c_shipped | 1 - trunk/scripts/kconfig/zconf.tab.c_shipped | 1 - trunk/scripts/kconfig/zconf.y | 1 - trunk/security/apparmor/domain.c | 2 +- trunk/security/apparmor/lsm.c | 2 +- trunk/security/keys/Makefile | 2 +- trunk/security/keys/ecryptfs_format.c | 81 + trunk/security/keys/ecryptfs_format.h | 30 + trunk/security/keys/encrypted.c | 251 +- trunk/security/keys/request_key_auth.c | 2 + trunk/security/tomoyo/Kconfig | 61 + trunk/security/tomoyo/Makefile | 49 +- trunk/security/tomoyo/audit.c | 456 ++ trunk/security/tomoyo/common.c | 1967 +++-- trunk/security/tomoyo/common.h | 1197 +-- trunk/security/tomoyo/condition.c | 1035 +++ trunk/security/tomoyo/domain.c | 630 +- trunk/security/tomoyo/file.c | 954 +-- trunk/security/tomoyo/gc.c | 551 +- trunk/security/tomoyo/group.c | 61 +- trunk/security/tomoyo/load_policy.c | 80 +- trunk/security/tomoyo/memory.c | 173 +- trunk/security/tomoyo/mount.c | 176 +- trunk/security/tomoyo/realpath.c | 226 +- trunk/security/tomoyo/securityfs_if.c | 22 +- trunk/security/tomoyo/tomoyo.c | 238 +- trunk/security/tomoyo/util.c | 363 +- trunk/sound/core/pcm_lib.c | 13 +- trunk/sound/i2c/other/tea575x-tuner.c | 143 +- trunk/sound/oss/ad1848.c | 6 +- trunk/sound/oss/sb_mixer.c | 6 +- trunk/sound/pci/Kconfig | 4 +- trunk/sound/pci/asihpi/asihpi.c | 21 - trunk/sound/pci/asihpi/hpioctl.c | 13 +- trunk/sound/pci/hda/Kconfig | 1 + trunk/sound/pci/hda/hda_codec.c | 114 +- trunk/sound/pci/hda/hda_codec.h | 15 +- trunk/sound/pci/hda/hda_local.h | 2 +- trunk/sound/pci/hda/patch_analog.c | 4 +- trunk/sound/pci/hda/patch_cirrus.c | 743 +- trunk/sound/pci/hda/patch_conexant.c | 14 + trunk/sound/pci/hda/patch_realtek.c | 44 +- trunk/sound/pci/hda/patch_sigmatel.c | 287 +- trunk/sound/pci/hda/patch_via.c | 4 +- trunk/sound/soc/codecs/sgtl5000.c | 70 +- trunk/sound/soc/codecs/wm8962.c | 6 +- trunk/sound/soc/davinci/davinci-vcif.c | 9 +- trunk/sound/soc/samsung/i2s.c | 7 + trunk/sound/soc/soc-core.c | 5 +- trunk/sound/soc/soc-dapm.c | 30 + trunk/tools/power/cpupower/.gitignore | 22 + trunk/tools/power/cpupower/Makefile | 279 + trunk/tools/power/cpupower/README | 49 + trunk/tools/power/cpupower/ToDo | 11 + trunk/tools/power/cpupower/bench/Makefile | 29 + trunk/tools/power/cpupower/bench/README-BENCH | 124 + trunk/tools/power/cpupower/bench/benchmark.c | 194 + trunk/tools/power/cpupower/bench/benchmark.h | 29 + trunk/tools/power/cpupower/bench/config.h | 36 + .../cpupower/bench/cpufreq-bench_plot.sh | 104 + .../cpupower/bench/cpufreq-bench_script.sh | 101 + trunk/tools/power/cpupower/bench/example.cfg | 11 + trunk/tools/power/cpupower/bench/main.c | 202 + trunk/tools/power/cpupower/bench/parse.c | 225 + trunk/tools/power/cpupower/bench/parse.h | 53 + trunk/tools/power/cpupower/bench/system.c | 191 + trunk/tools/power/cpupower/bench/system.h | 29 + .../tools/power/cpupower/debug/i386/Makefile | 20 + .../cpupower/debug/i386/centrino-decode.c | 113 + .../power/cpupower/debug/i386/dump_psb.c | 196 + .../power/cpupower/debug/i386/intel_gsic.c | 78 + .../cpupower/debug/i386/powernow-k8-decode.c | 96 + .../power/cpupower/debug/kernel/Makefile | 23 + .../cpupower/debug/kernel/cpufreq-test_tsc.c | 113 + .../power/cpupower/debug/x86_64/Makefile | 14 + .../cpupower/debug/x86_64/centrino-decode.c | 1 + .../debug/x86_64/powernow-k8-decode.c | 1 + trunk/tools/power/cpupower/lib/cpufreq.c | 208 + trunk/tools/power/cpupower/lib/cpufreq.h | 223 + trunk/tools/power/cpupower/lib/sysfs.c | 672 ++ trunk/tools/power/cpupower/lib/sysfs.h | 31 + .../cpupower/man/cpupower-frequency-info.1 | 76 + .../cpupower/man/cpupower-frequency-set.1 | 54 + .../tools/power/cpupower/man/cpupower-info.1 | 19 + .../power/cpupower/man/cpupower-monitor.1 | 179 + trunk/tools/power/cpupower/man/cpupower-set.1 | 103 + trunk/tools/power/cpupower/man/cpupower.1 | 72 + trunk/tools/power/cpupower/po/cs.po | 944 +++ trunk/tools/power/cpupower/po/de.po | 961 +++ trunk/tools/power/cpupower/po/fr.po | 947 +++ trunk/tools/power/cpupower/po/it.po | 961 +++ trunk/tools/power/cpupower/po/pt.po | 957 +++ trunk/tools/power/cpupower/utils/builtin.h | 18 + .../tools/power/cpupower/utils/cpufreq-info.c | 708 ++ .../tools/power/cpupower/utils/cpufreq-set.c | 358 + .../tools/power/cpupower/utils/cpuidle-info.c | 244 + .../power/cpupower/utils/cpupower-info.c | 153 + .../tools/power/cpupower/utils/cpupower-set.c | 153 + trunk/tools/power/cpupower/utils/cpupower.c | 203 + .../tools/power/cpupower/utils/helpers/amd.c | 137 + .../power/cpupower/utils/helpers/bitmask.c | 292 + .../power/cpupower/utils/helpers/bitmask.h | 33 + .../power/cpupower/utils/helpers/cpuid.c | 176 + .../power/cpupower/utils/helpers/helpers.h | 178 + .../tools/power/cpupower/utils/helpers/misc.c | 27 + .../tools/power/cpupower/utils/helpers/msr.c | 115 + .../tools/power/cpupower/utils/helpers/pci.c | 44 + .../power/cpupower/utils/helpers/sysfs.c | 358 + .../power/cpupower/utils/helpers/sysfs.h | 28 + .../power/cpupower/utils/helpers/topology.c | 108 + .../utils/idle_monitor/amd_fam14h_idle.c | 338 + .../utils/idle_monitor/cpuidle_sysfs.c | 196 + .../utils/idle_monitor/cpupower-monitor.c | 448 ++ .../utils/idle_monitor/cpupower-monitor.h | 68 + .../utils/idle_monitor/idle_monitors.def | 7 + .../utils/idle_monitor/idle_monitors.h | 18 + .../utils/idle_monitor/mperf_monitor.c | 255 + .../cpupower/utils/idle_monitor/nhm_idle.c | 216 + .../cpupower/utils/idle_monitor/snb_idle.c | 190 + .../tools/power/cpupower/utils/version-gen.sh | 35 + trunk/tools/slub/slabinfo.c | 59 +- 1629 files changed, 139552 insertions(+), 34965 deletions(-) delete mode 100644 trunk/Documentation/DocBook/dvb/dvbproperty.xml delete mode 100644 trunk/Documentation/DocBook/dvb/dvbstb.png delete mode 100644 trunk/Documentation/DocBook/dvb/frontend.h.xml delete mode 100644 trunk/Documentation/DocBook/media-entities.tmpl delete mode 100644 trunk/Documentation/DocBook/media-indices.tmpl create mode 100644 trunk/Documentation/DocBook/media/Makefile create mode 100644 trunk/Documentation/DocBook/media/bayer.png.b64 create mode 100644 trunk/Documentation/DocBook/media/crop.gif.b64 rename trunk/Documentation/DocBook/{ => media}/dvb/.gitignore (100%) rename trunk/Documentation/DocBook/{ => media}/dvb/audio.xml (79%) rename trunk/Documentation/DocBook/{ => media}/dvb/ca.xml (67%) rename trunk/Documentation/DocBook/{ => media}/dvb/demux.xml (84%) rename trunk/Documentation/DocBook/{ => media}/dvb/dvbapi.xml (85%) create mode 100644 trunk/Documentation/DocBook/media/dvb/dvbproperty.xml rename trunk/Documentation/DocBook/{ => media}/dvb/dvbstb.pdf (100%) rename trunk/Documentation/DocBook/{ => media}/dvb/examples.xml (100%) rename trunk/Documentation/DocBook/{ => media}/dvb/frontend.xml (75%) rename trunk/Documentation/DocBook/{ => media}/dvb/intro.xml (92%) rename trunk/Documentation/DocBook/{ => media}/dvb/kdapi.xml (100%) rename trunk/Documentation/DocBook/{ => media}/dvb/net.xml (57%) rename trunk/Documentation/DocBook/{ => media}/dvb/video.xml (81%) create mode 100644 trunk/Documentation/DocBook/media/dvbstb.png.b64 create mode 100644 trunk/Documentation/DocBook/media/fieldseq_bt.gif.b64 create mode 100644 trunk/Documentation/DocBook/media/fieldseq_tb.gif.b64 create mode 100644 trunk/Documentation/DocBook/media/nv12mt.gif.b64 create mode 100644 trunk/Documentation/DocBook/media/nv12mt_example.gif.b64 create mode 100644 trunk/Documentation/DocBook/media/pipeline.png.b64 rename trunk/Documentation/DocBook/{ => media}/v4l/.gitignore (100%) rename trunk/Documentation/DocBook/{ => media}/v4l/biblio.xml (100%) rename trunk/Documentation/DocBook/{ => media}/v4l/capture.c.xml (100%) rename trunk/Documentation/DocBook/{ => media}/v4l/common.xml (99%) rename trunk/Documentation/DocBook/{ => media}/v4l/compat.xml (99%) rename trunk/Documentation/DocBook/{ => media}/v4l/controls.xml (62%) rename trunk/Documentation/DocBook/{ => media}/v4l/crop.pdf (100%) rename trunk/Documentation/DocBook/{ => media}/v4l/dev-capture.xml (100%) rename trunk/Documentation/DocBook/{ => media}/v4l/dev-codec.xml (100%) rename trunk/Documentation/DocBook/{ => media}/v4l/dev-effect.xml (100%) create mode 100644 trunk/Documentation/DocBook/media/v4l/dev-event.xml rename trunk/Documentation/DocBook/{ => media}/v4l/dev-osd.xml (100%) rename trunk/Documentation/DocBook/{ => media}/v4l/dev-output.xml (100%) rename trunk/Documentation/DocBook/{ => media}/v4l/dev-overlay.xml (100%) rename trunk/Documentation/DocBook/{ => media}/v4l/dev-radio.xml (100%) rename trunk/Documentation/DocBook/{ => media}/v4l/dev-raw-vbi.xml (100%) rename trunk/Documentation/DocBook/{ => media}/v4l/dev-rds.xml (100%) rename trunk/Documentation/DocBook/{ => media}/v4l/dev-sliced-vbi.xml (100%) rename trunk/Documentation/DocBook/{ => media}/v4l/dev-subdev.xml (100%) rename trunk/Documentation/DocBook/{ => media}/v4l/dev-teletext.xml (100%) rename trunk/Documentation/DocBook/{ => media}/v4l/driver.xml (100%) rename trunk/Documentation/DocBook/{ => media}/v4l/fdl-appendix.xml (100%) rename trunk/Documentation/DocBook/{ => media}/v4l/fieldseq_bt.pdf (100%) rename trunk/Documentation/DocBook/{ => media}/v4l/fieldseq_tb.pdf (100%) rename trunk/Documentation/DocBook/{ => media}/v4l/func-close.xml (100%) create mode 100644 trunk/Documentation/DocBook/media/v4l/func-ioctl.xml rename trunk/Documentation/DocBook/{ => media}/v4l/func-mmap.xml (100%) rename trunk/Documentation/DocBook/{ => media}/v4l/func-munmap.xml (100%) rename trunk/Documentation/DocBook/{ => media}/v4l/func-open.xml (100%) rename trunk/Documentation/DocBook/{ => media}/v4l/func-poll.xml (100%) rename trunk/Documentation/DocBook/{ => media}/v4l/func-read.xml (100%) rename trunk/Documentation/DocBook/{ => media}/v4l/func-select.xml (100%) rename trunk/Documentation/DocBook/{ => media}/v4l/func-write.xml (100%) create mode 100644 trunk/Documentation/DocBook/media/v4l/gen-errors.xml rename trunk/Documentation/DocBook/{ => media}/v4l/io.xml (100%) rename trunk/Documentation/DocBook/{ => media}/v4l/keytable.c.xml (100%) rename trunk/Documentation/DocBook/{ => media}/v4l/libv4l.xml (100%) rename trunk/Documentation/DocBook/{ => media}/v4l/lirc_device_interface.xml (99%) rename trunk/Documentation/DocBook/{ => media}/v4l/media-controller.xml (100%) rename trunk/Documentation/DocBook/{ => media}/v4l/media-func-close.xml (100%) rename trunk/Documentation/DocBook/{ => media}/v4l/media-func-ioctl.xml (59%) rename trunk/Documentation/DocBook/{ => media}/v4l/media-func-open.xml (100%) rename trunk/Documentation/DocBook/{ => media}/v4l/media-ioc-device-info.xml (97%) rename trunk/Documentation/DocBook/{ => media}/v4l/media-ioc-enum-entities.xml (100%) rename trunk/Documentation/DocBook/{ => media}/v4l/media-ioc-enum-links.xml (98%) rename trunk/Documentation/DocBook/{ => media}/v4l/media-ioc-setup-link.xml (87%) rename trunk/Documentation/DocBook/{ => media}/v4l/pipeline.pdf (100%) rename trunk/Documentation/DocBook/{ => media}/v4l/pixfmt-grey.xml (100%) rename trunk/Documentation/DocBook/{ => media}/v4l/pixfmt-m420.xml (100%) rename trunk/Documentation/DocBook/{ => media}/v4l/pixfmt-nv12.xml (100%) rename trunk/Documentation/DocBook/{ => media}/v4l/pixfmt-nv12m.xml (100%) rename trunk/Documentation/DocBook/{ => media}/v4l/pixfmt-nv12mt.xml (100%) rename trunk/Documentation/DocBook/{ => media}/v4l/pixfmt-nv16.xml (100%) rename trunk/Documentation/DocBook/{ => media}/v4l/pixfmt-packed-rgb.xml (100%) rename trunk/Documentation/DocBook/{ => media}/v4l/pixfmt-packed-yuv.xml (100%) rename trunk/Documentation/DocBook/{ => media}/v4l/pixfmt-sbggr16.xml (100%) rename trunk/Documentation/DocBook/{ => media}/v4l/pixfmt-sbggr8.xml (100%) rename trunk/Documentation/DocBook/{ => media}/v4l/pixfmt-sgbrg8.xml (100%) rename trunk/Documentation/DocBook/{ => media}/v4l/pixfmt-sgrbg8.xml (100%) rename trunk/Documentation/DocBook/{ => media}/v4l/pixfmt-srggb10.xml (100%) rename trunk/Documentation/DocBook/{ => media}/v4l/pixfmt-srggb12.xml (100%) rename trunk/Documentation/DocBook/{ => media}/v4l/pixfmt-srggb8.xml (100%) rename trunk/Documentation/DocBook/{ => media}/v4l/pixfmt-uyvy.xml (100%) rename trunk/Documentation/DocBook/{ => media}/v4l/pixfmt-vyuy.xml (100%) rename trunk/Documentation/DocBook/{ => media}/v4l/pixfmt-y10.xml (100%) rename trunk/Documentation/DocBook/{ => media}/v4l/pixfmt-y10b.xml (100%) rename trunk/Documentation/DocBook/{ => media}/v4l/pixfmt-y12.xml (100%) rename trunk/Documentation/DocBook/{ => media}/v4l/pixfmt-y16.xml (100%) rename trunk/Documentation/DocBook/{ => media}/v4l/pixfmt-y41p.xml (100%) rename trunk/Documentation/DocBook/{ => media}/v4l/pixfmt-yuv410.xml (100%) rename trunk/Documentation/DocBook/{ => media}/v4l/pixfmt-yuv411p.xml (100%) rename trunk/Documentation/DocBook/{ => media}/v4l/pixfmt-yuv420.xml (100%) rename trunk/Documentation/DocBook/{ => media}/v4l/pixfmt-yuv420m.xml (100%) rename trunk/Documentation/DocBook/{ => media}/v4l/pixfmt-yuv422p.xml (100%) rename trunk/Documentation/DocBook/{ => media}/v4l/pixfmt-yuyv.xml (100%) rename trunk/Documentation/DocBook/{ => media}/v4l/pixfmt-yvyu.xml (100%) rename trunk/Documentation/DocBook/{ => media}/v4l/pixfmt.xml (94%) rename trunk/Documentation/DocBook/{ => media}/v4l/planar-apis.xml (100%) rename trunk/Documentation/DocBook/{ => media}/v4l/remote_controllers.xml (100%) rename trunk/Documentation/DocBook/{ => media}/v4l/subdev-formats.xml (99%) rename trunk/Documentation/DocBook/{ => media}/v4l/v4l2.xml (97%) rename trunk/Documentation/DocBook/{ => media}/v4l/v4l2grab.c.xml (100%) rename trunk/Documentation/DocBook/{ => media}/v4l/vbi_525.pdf (100%) rename trunk/Documentation/DocBook/{ => media}/v4l/vbi_625.pdf (100%) rename trunk/Documentation/DocBook/{ => media}/v4l/vbi_hsync.pdf (100%) rename trunk/Documentation/DocBook/{ => media}/v4l/vidioc-cropcap.xml (95%) rename trunk/Documentation/DocBook/{ => media}/v4l/vidioc-dbg-g-chip-ident.xml (97%) rename trunk/Documentation/DocBook/{ => media}/v4l/vidioc-dbg-g-register.xml (94%) rename trunk/Documentation/DocBook/{ => media}/v4l/vidioc-dqevent.xml (84%) rename trunk/Documentation/DocBook/{ => media}/v4l/vidioc-encoder-cmd.xml (96%) rename trunk/Documentation/DocBook/{ => media}/v4l/vidioc-enum-dv-presets.xml (100%) rename trunk/Documentation/DocBook/{ => media}/v4l/vidioc-enum-fmt.xml (100%) rename trunk/Documentation/DocBook/{ => media}/v4l/vidioc-enum-frameintervals.xml (97%) rename trunk/Documentation/DocBook/{ => media}/v4l/vidioc-enum-framesizes.xml (97%) rename trunk/Documentation/DocBook/{ => media}/v4l/vidioc-enumaudio.xml (89%) rename trunk/Documentation/DocBook/{ => media}/v4l/vidioc-enumaudioout.xml (90%) rename trunk/Documentation/DocBook/{ => media}/v4l/vidioc-enuminput.xml (100%) rename trunk/Documentation/DocBook/{ => media}/v4l/vidioc-enumoutput.xml (100%) rename trunk/Documentation/DocBook/{ => media}/v4l/vidioc-enumstd.xml (100%) rename trunk/Documentation/DocBook/{ => media}/v4l/vidioc-g-audio.xml (93%) rename trunk/Documentation/DocBook/{ => media}/v4l/vidioc-g-audioout.xml (92%) rename trunk/Documentation/DocBook/{ => media}/v4l/vidioc-g-crop.xml (93%) rename trunk/Documentation/DocBook/{ => media}/v4l/vidioc-g-ctrl.xml (94%) rename trunk/Documentation/DocBook/{ => media}/v4l/vidioc-g-dv-preset.xml (96%) rename trunk/Documentation/DocBook/{ => media}/v4l/vidioc-g-dv-timings.xml (98%) rename trunk/Documentation/DocBook/{ => media}/v4l/vidioc-g-enc-index.xml (95%) rename trunk/Documentation/DocBook/{ => media}/v4l/vidioc-g-ext-ctrls.xml (95%) rename trunk/Documentation/DocBook/{ => media}/v4l/vidioc-g-fbuf.xml (97%) rename trunk/Documentation/DocBook/{ => media}/v4l/vidioc-g-fmt.xml (93%) rename trunk/Documentation/DocBook/{ => media}/v4l/vidioc-g-frequency.xml (100%) rename trunk/Documentation/DocBook/{ => media}/v4l/vidioc-g-input.xml (85%) rename trunk/Documentation/DocBook/{ => media}/v4l/vidioc-g-jpegcomp.xml (93%) rename trunk/Documentation/DocBook/{ => media}/v4l/vidioc-g-modulator.xml (100%) rename trunk/Documentation/DocBook/{ => media}/v4l/vidioc-g-output.xml (87%) rename trunk/Documentation/DocBook/{ => media}/v4l/vidioc-g-parm.xml (97%) rename trunk/Documentation/DocBook/{ => media}/v4l/vidioc-g-priority.xml (97%) rename trunk/Documentation/DocBook/{ => media}/v4l/vidioc-g-sliced-vbi-cap.xml (97%) rename trunk/Documentation/DocBook/{ => media}/v4l/vidioc-g-std.xml (90%) rename trunk/Documentation/DocBook/{ => media}/v4l/vidioc-g-tuner.xml (100%) rename trunk/Documentation/DocBook/{ => media}/v4l/vidioc-log-status.xml (80%) rename trunk/Documentation/DocBook/{ => media}/v4l/vidioc-overlay.xml (90%) rename trunk/Documentation/DocBook/{ => media}/v4l/vidioc-qbuf.xml (95%) rename trunk/Documentation/DocBook/{ => media}/v4l/vidioc-query-dv-preset.xml (79%) rename trunk/Documentation/DocBook/{ => media}/v4l/vidioc-querybuf.xml (100%) rename trunk/Documentation/DocBook/{ => media}/v4l/vidioc-querycap.xml (93%) rename trunk/Documentation/DocBook/{ => media}/v4l/vidioc-queryctrl.xml (97%) rename trunk/Documentation/DocBook/{ => media}/v4l/vidioc-querystd.xml (78%) rename trunk/Documentation/DocBook/{ => media}/v4l/vidioc-reqbufs.xml (92%) rename trunk/Documentation/DocBook/{ => media}/v4l/vidioc-s-hw-freq-seek.xml (100%) rename trunk/Documentation/DocBook/{ => media}/v4l/vidioc-streamon.xml (92%) rename trunk/Documentation/DocBook/{ => media}/v4l/vidioc-subdev-enum-frame-interval.xml (100%) rename trunk/Documentation/DocBook/{ => media}/v4l/vidioc-subdev-enum-frame-size.xml (100%) rename trunk/Documentation/DocBook/{ => media}/v4l/vidioc-subdev-enum-mbus-code.xml (100%) rename trunk/Documentation/DocBook/{ => media}/v4l/vidioc-subdev-g-crop.xml (100%) rename trunk/Documentation/DocBook/{ => media}/v4l/vidioc-subdev-g-fmt.xml (99%) rename trunk/Documentation/DocBook/{ => media}/v4l/vidioc-subdev-g-frame-interval.xml (100%) create mode 100644 trunk/Documentation/DocBook/media/v4l/vidioc-subscribe-event.xml create mode 100644 trunk/Documentation/DocBook/media/vbi_525.gif.b64 create mode 100644 trunk/Documentation/DocBook/media/vbi_625.gif.b64 create mode 100644 trunk/Documentation/DocBook/media/vbi_hsync.gif.b64 rename trunk/Documentation/DocBook/{media.tmpl => media_api.tmpl} (89%) delete mode 100644 trunk/Documentation/DocBook/v4l/bayer.pdf delete mode 100644 trunk/Documentation/DocBook/v4l/bayer.png delete mode 100644 trunk/Documentation/DocBook/v4l/crop.gif delete mode 100644 trunk/Documentation/DocBook/v4l/dev-event.xml delete mode 100644 trunk/Documentation/DocBook/v4l/fieldseq_bt.gif delete mode 100644 trunk/Documentation/DocBook/v4l/fieldseq_tb.gif delete mode 100644 trunk/Documentation/DocBook/v4l/func-ioctl.xml delete mode 100644 trunk/Documentation/DocBook/v4l/nv12mt.gif delete mode 100644 trunk/Documentation/DocBook/v4l/nv12mt_example.gif delete mode 100644 trunk/Documentation/DocBook/v4l/pipeline.png delete mode 100644 trunk/Documentation/DocBook/v4l/vbi_525.gif delete mode 100644 trunk/Documentation/DocBook/v4l/vbi_625.gif delete mode 100644 trunk/Documentation/DocBook/v4l/vbi_hsync.gif delete mode 100644 trunk/Documentation/DocBook/v4l/videodev2.h.xml delete mode 100644 trunk/Documentation/DocBook/v4l/vidioc-subscribe-event.xml create mode 100644 trunk/Documentation/devicetree/bindings/arm/arm-boards create mode 100644 trunk/Documentation/devicetree/bindings/dma/fsl-imx-sdma.txt create mode 100644 trunk/Documentation/devicetree/bindings/gpio/gpio_keys.txt create mode 100644 trunk/Documentation/devicetree/bindings/i2c/arm-versatile.txt create mode 100644 trunk/Documentation/devicetree/bindings/mmc/fsl-imx-esdhc.txt create mode 100644 trunk/Documentation/devicetree/bindings/mtd/arm-versatile.txt create mode 100644 trunk/Documentation/devicetree/bindings/net/fsl-fec.txt create mode 100644 trunk/Documentation/devicetree/bindings/net/smsc-lan91c111.txt create mode 100644 trunk/Documentation/devicetree/bindings/tty/serial/fsl-imx-uart.txt create mode 100644 trunk/Documentation/devicetree/bindings/watchdog/fsl-imx-wdt.txt create mode 100644 trunk/Documentation/devicetree/bindings/watchdog/samsung-wdt.txt mode change 100644 => 100755 trunk/Documentation/dvb/get_dvb_firmware create mode 100644 trunk/Documentation/hwmon/lm25066 create mode 100644 trunk/Documentation/hwmon/lm95245 create mode 100644 trunk/Documentation/hwmon/max1668 create mode 100644 trunk/Documentation/hwmon/ntc_thermistor create mode 100644 trunk/Documentation/security/keys-ecryptfs.txt create mode 100644 trunk/Documentation/video4linux/README.davinci-vpbe create mode 100644 trunk/Documentation/watchdog/watchdog-kernel-api.txt create mode 100644 trunk/arch/arm/boot/dts/skeleton.dtsi create mode 100644 trunk/arch/arm/boot/dts/tegra-harmony.dts create mode 100644 trunk/arch/arm/boot/dts/tegra-seaboard.dts create mode 100644 trunk/arch/arm/boot/dts/tegra20.dtsi create mode 100644 trunk/arch/arm/boot/dts/versatile-ab.dts create mode 100644 trunk/arch/arm/boot/dts/versatile-pb.dts create mode 100644 trunk/arch/arm/mach-at91/setup.c create mode 100644 trunk/arch/arm/mach-at91/soc.h delete mode 100644 trunk/arch/arm/mach-msm/gpio.c delete mode 100644 trunk/arch/arm/mach-msm/gpio_hw.h create mode 100644 trunk/arch/arm/mach-msm/include/mach/msm_gpiomux.h create mode 100644 trunk/arch/arm/mach-tegra/board-dt.c create mode 100644 trunk/arch/arm/mach-versatile/versatile_dt.c delete mode 100644 trunk/arch/arm/mach-zynq/board_dt.c create mode 100644 trunk/arch/ia64/include/asm/gpio.h create mode 100644 trunk/arch/sh/include/cpu-sh3/cpu/serial.h create mode 100644 trunk/arch/sh/include/cpu-sh4a/cpu/serial.h create mode 100644 trunk/arch/sh/kernel/cpu/sh3/serial-sh770x.c create mode 100644 trunk/arch/sh/kernel/cpu/sh3/serial-sh7710.c create mode 100644 trunk/arch/sh/kernel/cpu/sh3/serial-sh7720.c create mode 100644 trunk/arch/sh/kernel/cpu/sh4a/serial-sh7722.c create mode 100644 trunk/drivers/gpio/gpio-msm-v1.c rename trunk/{arch/arm/mach-msm/gpio-v2.c => drivers/gpio/gpio-msm-v2.c} (99%) create mode 100644 trunk/drivers/gpio/gpio-tps65912.c create mode 100644 trunk/drivers/hwmon/lm95245.c create mode 100644 trunk/drivers/hwmon/max1668.c create mode 100644 trunk/drivers/hwmon/ntc_thermistor.c create mode 100644 trunk/drivers/hwmon/pmbus/Kconfig create mode 100644 trunk/drivers/hwmon/pmbus/Makefile rename trunk/drivers/hwmon/{ => pmbus}/adm1275.c (67%) create mode 100644 trunk/drivers/hwmon/pmbus/lm25066.c rename trunk/drivers/hwmon/{ => pmbus}/max16064.c (66%) rename trunk/drivers/hwmon/{ => pmbus}/max34440.c (76%) rename trunk/drivers/hwmon/{ => pmbus}/max8688.c (72%) rename trunk/drivers/hwmon/{ => pmbus}/pmbus.c (89%) rename trunk/drivers/hwmon/{ => pmbus}/pmbus.h (79%) rename trunk/drivers/hwmon/{ => pmbus}/pmbus_core.c (84%) rename trunk/drivers/hwmon/{ => pmbus}/ucd9000.c (100%) rename trunk/drivers/hwmon/{ => pmbus}/ucd9200.c (100%) create mode 100644 trunk/drivers/input/misc/kxtj9.c create mode 100644 trunk/drivers/input/misc/mma8450.c create mode 100644 trunk/drivers/input/misc/mpu3050.c create mode 100644 trunk/drivers/media/common/tuners/xc4000.c create mode 100644 trunk/drivers/media/common/tuners/xc4000.h create mode 100644 trunk/drivers/media/dvb/ddbridge/Kconfig create mode 100644 trunk/drivers/media/dvb/ddbridge/Makefile create mode 100644 trunk/drivers/media/dvb/ddbridge/ddbridge-core.c create mode 100644 trunk/drivers/media/dvb/ddbridge/ddbridge-regs.h create mode 100644 trunk/drivers/media/dvb/ddbridge/ddbridge.h create mode 100644 trunk/drivers/media/dvb/frontends/drxk.h create mode 100644 trunk/drivers/media/dvb/frontends/drxk_hard.c create mode 100644 trunk/drivers/media/dvb/frontends/drxk_hard.h create mode 100644 trunk/drivers/media/dvb/frontends/drxk_map.h create mode 100644 trunk/drivers/media/dvb/frontends/tda18271c2dd.c create mode 100644 trunk/drivers/media/dvb/frontends/tda18271c2dd.h create mode 100644 trunk/drivers/media/dvb/frontends/tda18271c2dd_maps.h create mode 100644 trunk/drivers/media/rc/ir-mce_kbd-decoder.c create mode 100644 trunk/drivers/media/video/adp1653.c create mode 100644 trunk/drivers/media/video/atmel-isi.c delete mode 100644 trunk/drivers/media/video/cafe_ccic-regs.h delete mode 100644 trunk/drivers/media/video/cafe_ccic.c create mode 100644 trunk/drivers/media/video/davinci/vpbe.c create mode 100644 trunk/drivers/media/video/davinci/vpbe_display.c create mode 100644 trunk/drivers/media/video/davinci/vpbe_osd.c create mode 100644 trunk/drivers/media/video/davinci/vpbe_osd_regs.h create mode 100644 trunk/drivers/media/video/davinci/vpbe_venc.c create mode 100644 trunk/drivers/media/video/davinci/vpbe_venc_regs.h create mode 100644 trunk/drivers/media/video/gspca/se401.c create mode 100644 trunk/drivers/media/video/gspca/se401.h create mode 100644 trunk/drivers/media/video/marvell-ccic/Kconfig create mode 100644 trunk/drivers/media/video/marvell-ccic/Makefile create mode 100644 trunk/drivers/media/video/marvell-ccic/cafe-driver.c create mode 100644 trunk/drivers/media/video/marvell-ccic/mcam-core.c create mode 100644 trunk/drivers/media/video/marvell-ccic/mcam-core.h create mode 100644 trunk/drivers/media/video/marvell-ccic/mmp-driver.c create mode 100644 trunk/drivers/media/video/omap/omap_vout_vrfb.c create mode 100644 trunk/drivers/media/video/omap/omap_vout_vrfb.h create mode 100644 trunk/drivers/media/video/ov5642.c delete mode 100644 trunk/drivers/media/video/pwc/pwc-ioctl.h delete mode 100644 trunk/drivers/media/video/pwc/pwc-uncompress.h create mode 100644 trunk/drivers/media/video/s5p-mfc/Makefile create mode 100644 trunk/drivers/media/video/s5p-mfc/regs-mfc.h create mode 100644 trunk/drivers/media/video/s5p-mfc/s5p_mfc.c create mode 100644 trunk/drivers/media/video/s5p-mfc/s5p_mfc_cmd.c create mode 100644 trunk/drivers/media/video/s5p-mfc/s5p_mfc_cmd.h create mode 100644 trunk/drivers/media/video/s5p-mfc/s5p_mfc_common.h create mode 100644 trunk/drivers/media/video/s5p-mfc/s5p_mfc_ctrl.c create mode 100644 trunk/drivers/media/video/s5p-mfc/s5p_mfc_ctrl.h create mode 100644 trunk/drivers/media/video/s5p-mfc/s5p_mfc_debug.h create mode 100644 trunk/drivers/media/video/s5p-mfc/s5p_mfc_dec.c create mode 100644 trunk/drivers/media/video/s5p-mfc/s5p_mfc_dec.h create mode 100644 trunk/drivers/media/video/s5p-mfc/s5p_mfc_enc.c create mode 100644 trunk/drivers/media/video/s5p-mfc/s5p_mfc_enc.h create mode 100644 trunk/drivers/media/video/s5p-mfc/s5p_mfc_intr.c create mode 100644 trunk/drivers/media/video/s5p-mfc/s5p_mfc_intr.h create mode 100644 trunk/drivers/media/video/s5p-mfc/s5p_mfc_opr.c create mode 100644 trunk/drivers/media/video/s5p-mfc/s5p_mfc_opr.h create mode 100644 trunk/drivers/media/video/s5p-mfc/s5p_mfc_pm.c create mode 100644 trunk/drivers/media/video/s5p-mfc/s5p_mfc_pm.h create mode 100644 trunk/drivers/media/video/s5p-mfc/s5p_mfc_shm.c create mode 100644 trunk/drivers/media/video/s5p-mfc/s5p_mfc_shm.h create mode 100644 trunk/drivers/media/video/s5p-tv/Kconfig create mode 100644 trunk/drivers/media/video/s5p-tv/Makefile create mode 100644 trunk/drivers/media/video/s5p-tv/hdmi_drv.c create mode 100644 trunk/drivers/media/video/s5p-tv/hdmiphy_drv.c create mode 100644 trunk/drivers/media/video/s5p-tv/mixer.h create mode 100644 trunk/drivers/media/video/s5p-tv/mixer_drv.c create mode 100644 trunk/drivers/media/video/s5p-tv/mixer_grp_layer.c create mode 100644 trunk/drivers/media/video/s5p-tv/mixer_reg.c create mode 100644 trunk/drivers/media/video/s5p-tv/mixer_video.c create mode 100644 trunk/drivers/media/video/s5p-tv/mixer_vp_layer.c create mode 100644 trunk/drivers/media/video/s5p-tv/regs-hdmi.h create mode 100644 trunk/drivers/media/video/s5p-tv/regs-mixer.h create mode 100644 trunk/drivers/media/video/s5p-tv/regs-sdo.h create mode 100644 trunk/drivers/media/video/s5p-tv/regs-vp.h create mode 100644 trunk/drivers/media/video/s5p-tv/sdo_drv.c create mode 100644 trunk/drivers/mfd/aat2870-core.c create mode 100644 trunk/drivers/mfd/tps65912-core.c create mode 100644 trunk/drivers/mfd/tps65912-i2c.c create mode 100644 trunk/drivers/mfd/tps65912-irq.c create mode 100644 trunk/drivers/mfd/tps65912-spi.c create mode 100644 trunk/drivers/mfd/wm831x-auxadc.c create mode 100644 trunk/drivers/power/max8997_charger.c create mode 100644 trunk/drivers/power/max8998_charger.c create mode 100644 trunk/drivers/regulator/aat2870-regulator.c create mode 100644 trunk/drivers/regulator/tps65912-regulator.c create mode 100644 trunk/drivers/target/iscsi/Kconfig create mode 100644 trunk/drivers/target/iscsi/Makefile create mode 100644 trunk/drivers/target/iscsi/iscsi_target.c create mode 100644 trunk/drivers/target/iscsi/iscsi_target.h create mode 100644 trunk/drivers/target/iscsi/iscsi_target_auth.c create mode 100644 trunk/drivers/target/iscsi/iscsi_target_auth.h create mode 100644 trunk/drivers/target/iscsi/iscsi_target_configfs.c create mode 100644 trunk/drivers/target/iscsi/iscsi_target_configfs.h create mode 100644 trunk/drivers/target/iscsi/iscsi_target_core.h create mode 100644 trunk/drivers/target/iscsi/iscsi_target_datain_values.c create mode 100644 trunk/drivers/target/iscsi/iscsi_target_datain_values.h create mode 100644 trunk/drivers/target/iscsi/iscsi_target_device.c create mode 100644 trunk/drivers/target/iscsi/iscsi_target_device.h create mode 100644 trunk/drivers/target/iscsi/iscsi_target_erl0.c create mode 100644 trunk/drivers/target/iscsi/iscsi_target_erl0.h create mode 100644 trunk/drivers/target/iscsi/iscsi_target_erl1.c create mode 100644 trunk/drivers/target/iscsi/iscsi_target_erl1.h create mode 100644 trunk/drivers/target/iscsi/iscsi_target_erl2.c create mode 100644 trunk/drivers/target/iscsi/iscsi_target_erl2.h create mode 100644 trunk/drivers/target/iscsi/iscsi_target_login.c create mode 100644 trunk/drivers/target/iscsi/iscsi_target_login.h create mode 100644 trunk/drivers/target/iscsi/iscsi_target_nego.c create mode 100644 trunk/drivers/target/iscsi/iscsi_target_nego.h create mode 100644 trunk/drivers/target/iscsi/iscsi_target_nodeattrib.c create mode 100644 trunk/drivers/target/iscsi/iscsi_target_nodeattrib.h create mode 100644 trunk/drivers/target/iscsi/iscsi_target_parameters.c create mode 100644 trunk/drivers/target/iscsi/iscsi_target_parameters.h create mode 100644 trunk/drivers/target/iscsi/iscsi_target_seq_pdu_list.c create mode 100644 trunk/drivers/target/iscsi/iscsi_target_seq_pdu_list.h create mode 100644 trunk/drivers/target/iscsi/iscsi_target_stat.c create mode 100644 trunk/drivers/target/iscsi/iscsi_target_stat.h create mode 100644 trunk/drivers/target/iscsi/iscsi_target_tmr.c create mode 100644 trunk/drivers/target/iscsi/iscsi_target_tmr.h create mode 100644 trunk/drivers/target/iscsi/iscsi_target_tpg.c create mode 100644 trunk/drivers/target/iscsi/iscsi_target_tpg.h create mode 100644 trunk/drivers/target/iscsi/iscsi_target_tq.c create mode 100644 trunk/drivers/target/iscsi/iscsi_target_tq.h create mode 100644 trunk/drivers/target/iscsi/iscsi_target_util.c create mode 100644 trunk/drivers/target/iscsi/iscsi_target_util.h create mode 100644 trunk/drivers/video/backlight/aat2870_bl.c rename trunk/{arch/arm/mach-at91/include/mach/at91_wdt.h => drivers/watchdog/at91sam9_wdt.h} (96%) create mode 100644 trunk/drivers/watchdog/dw_wdt.c create mode 100644 trunk/drivers/watchdog/of_xilinx_wdt.c create mode 100644 trunk/drivers/watchdog/watchdog_core.c create mode 100644 trunk/drivers/watchdog/watchdog_dev.c create mode 100644 trunk/drivers/watchdog/watchdog_dev.h create mode 100644 trunk/fs/nfs/blocklayout/Makefile create mode 100644 trunk/fs/nfs/blocklayout/blocklayout.c create mode 100644 trunk/fs/nfs/blocklayout/blocklayout.h create mode 100644 trunk/fs/nfs/blocklayout/blocklayoutdev.c create mode 100644 trunk/fs/nfs/blocklayout/blocklayoutdm.c create mode 100644 trunk/fs/nfs/blocklayout/extents.c create mode 100644 trunk/include/linux/ecryptfs.h create mode 100644 trunk/include/linux/input/kxtj9.h create mode 100644 trunk/include/linux/irqdomain.h create mode 100644 trunk/include/linux/kconfig.h create mode 100644 trunk/include/linux/mfd/aat2870.h create mode 100644 trunk/include/linux/mfd/tps65912.h create mode 100644 trunk/include/linux/platform_data/ntc_thermistor.h create mode 100644 trunk/include/media/adp1653.h create mode 100644 trunk/include/media/atmel-isi.h create mode 100644 trunk/include/media/davinci/vpbe.h create mode 100644 trunk/include/media/davinci/vpbe_display.h create mode 100644 trunk/include/media/davinci/vpbe_osd.h create mode 100644 trunk/include/media/davinci/vpbe_types.h create mode 100644 trunk/include/media/davinci/vpbe_venc.h create mode 100644 trunk/include/media/mmp-camera.h rename trunk/{drivers/media/video => include/media}/ov7670.h (100%) create mode 100644 trunk/kernel/irq/irqdomain.c delete mode 100644 trunk/scripts/kconfig/kconfig_load.c create mode 100644 trunk/security/keys/ecryptfs_format.c create mode 100644 trunk/security/keys/ecryptfs_format.h create mode 100644 trunk/security/tomoyo/audit.c create mode 100644 trunk/security/tomoyo/condition.c create mode 100644 trunk/tools/power/cpupower/.gitignore create mode 100644 trunk/tools/power/cpupower/Makefile create mode 100644 trunk/tools/power/cpupower/README create mode 100644 trunk/tools/power/cpupower/ToDo create mode 100644 trunk/tools/power/cpupower/bench/Makefile create mode 100644 trunk/tools/power/cpupower/bench/README-BENCH create mode 100644 trunk/tools/power/cpupower/bench/benchmark.c create mode 100644 trunk/tools/power/cpupower/bench/benchmark.h create mode 100644 trunk/tools/power/cpupower/bench/config.h create mode 100644 trunk/tools/power/cpupower/bench/cpufreq-bench_plot.sh create mode 100644 trunk/tools/power/cpupower/bench/cpufreq-bench_script.sh create mode 100644 trunk/tools/power/cpupower/bench/example.cfg create mode 100644 trunk/tools/power/cpupower/bench/main.c create mode 100644 trunk/tools/power/cpupower/bench/parse.c create mode 100644 trunk/tools/power/cpupower/bench/parse.h create mode 100644 trunk/tools/power/cpupower/bench/system.c create mode 100644 trunk/tools/power/cpupower/bench/system.h create mode 100644 trunk/tools/power/cpupower/debug/i386/Makefile create mode 100644 trunk/tools/power/cpupower/debug/i386/centrino-decode.c create mode 100644 trunk/tools/power/cpupower/debug/i386/dump_psb.c create mode 100644 trunk/tools/power/cpupower/debug/i386/intel_gsic.c create mode 100644 trunk/tools/power/cpupower/debug/i386/powernow-k8-decode.c create mode 100644 trunk/tools/power/cpupower/debug/kernel/Makefile create mode 100644 trunk/tools/power/cpupower/debug/kernel/cpufreq-test_tsc.c create mode 100644 trunk/tools/power/cpupower/debug/x86_64/Makefile create mode 120000 trunk/tools/power/cpupower/debug/x86_64/centrino-decode.c create mode 120000 trunk/tools/power/cpupower/debug/x86_64/powernow-k8-decode.c create mode 100644 trunk/tools/power/cpupower/lib/cpufreq.c create mode 100644 trunk/tools/power/cpupower/lib/cpufreq.h create mode 100644 trunk/tools/power/cpupower/lib/sysfs.c create mode 100644 trunk/tools/power/cpupower/lib/sysfs.h create mode 100644 trunk/tools/power/cpupower/man/cpupower-frequency-info.1 create mode 100644 trunk/tools/power/cpupower/man/cpupower-frequency-set.1 create mode 100644 trunk/tools/power/cpupower/man/cpupower-info.1 create mode 100644 trunk/tools/power/cpupower/man/cpupower-monitor.1 create mode 100644 trunk/tools/power/cpupower/man/cpupower-set.1 create mode 100644 trunk/tools/power/cpupower/man/cpupower.1 create mode 100644 trunk/tools/power/cpupower/po/cs.po create mode 100644 trunk/tools/power/cpupower/po/de.po create mode 100644 trunk/tools/power/cpupower/po/fr.po create mode 100644 trunk/tools/power/cpupower/po/it.po create mode 100644 trunk/tools/power/cpupower/po/pt.po create mode 100644 trunk/tools/power/cpupower/utils/builtin.h create mode 100644 trunk/tools/power/cpupower/utils/cpufreq-info.c create mode 100644 trunk/tools/power/cpupower/utils/cpufreq-set.c create mode 100644 trunk/tools/power/cpupower/utils/cpuidle-info.c create mode 100644 trunk/tools/power/cpupower/utils/cpupower-info.c create mode 100644 trunk/tools/power/cpupower/utils/cpupower-set.c create mode 100644 trunk/tools/power/cpupower/utils/cpupower.c create mode 100644 trunk/tools/power/cpupower/utils/helpers/amd.c create mode 100644 trunk/tools/power/cpupower/utils/helpers/bitmask.c create mode 100644 trunk/tools/power/cpupower/utils/helpers/bitmask.h create mode 100644 trunk/tools/power/cpupower/utils/helpers/cpuid.c create mode 100644 trunk/tools/power/cpupower/utils/helpers/helpers.h create mode 100644 trunk/tools/power/cpupower/utils/helpers/misc.c create mode 100644 trunk/tools/power/cpupower/utils/helpers/msr.c create mode 100644 trunk/tools/power/cpupower/utils/helpers/pci.c create mode 100644 trunk/tools/power/cpupower/utils/helpers/sysfs.c create mode 100644 trunk/tools/power/cpupower/utils/helpers/sysfs.h create mode 100644 trunk/tools/power/cpupower/utils/helpers/topology.c create mode 100644 trunk/tools/power/cpupower/utils/idle_monitor/amd_fam14h_idle.c create mode 100644 trunk/tools/power/cpupower/utils/idle_monitor/cpuidle_sysfs.c create mode 100644 trunk/tools/power/cpupower/utils/idle_monitor/cpupower-monitor.c create mode 100644 trunk/tools/power/cpupower/utils/idle_monitor/cpupower-monitor.h create mode 100644 trunk/tools/power/cpupower/utils/idle_monitor/idle_monitors.def create mode 100644 trunk/tools/power/cpupower/utils/idle_monitor/idle_monitors.h create mode 100644 trunk/tools/power/cpupower/utils/idle_monitor/mperf_monitor.c create mode 100644 trunk/tools/power/cpupower/utils/idle_monitor/nhm_idle.c create mode 100644 trunk/tools/power/cpupower/utils/idle_monitor/snb_idle.c create mode 100755 trunk/tools/power/cpupower/utils/version-gen.sh diff --git a/[refs] b/[refs] index 037b2d40c27d..406df41b2b66 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 206d440f64030b6425841bf7cb38e26a5ea0c382 +refs/heads/master: 1b8e94993c4752d98c33903aa836acc15f7e6d5c diff --git a/trunk/CREDITS b/trunk/CREDITS index 1deb331d96ed..07e32a87d956 100644 --- a/trunk/CREDITS +++ b/trunk/CREDITS @@ -504,7 +504,7 @@ N: Dominik Brodowski E: linux@brodo.de W: http://www.brodo.de/ P: 1024D/725B37C6 190F 3E77 9C89 3B6D BECD 46EE 67C3 0308 725B 37C6 -D: parts of CPUFreq code, ACPI bugfixes +D: parts of CPUFreq code, ACPI bugfixes, PCMCIA rewrite, cpufrequtils S: Tuebingen, Germany N: Andries Brouwer @@ -857,6 +857,10 @@ S: One Dell Way S: Round Rock, TX 78682 S: USA +N: Mattia Dongili +E: malattia@gmail.com +D: cpufrequtils (precursor to cpupowerutils) + N: Ben Dooks E: ben-linux@fluff.org E: ben@simtec.co.uk @@ -1883,6 +1887,11 @@ S: Kruislaan 419 S: 1098 VA Amsterdam S: The Netherlands +N: Goran Koruga +E: korugag@siol.net +D: cpufrequtils (precursor to cpupowerutils) +S: Slovenia + N: Jiri Kosina E: jikos@jikos.cz E: jkosina@suse.cz @@ -2916,6 +2925,12 @@ S: Schlossbergring 9 S: 79098 Freiburg S: Germany +N: Thomas Renninger +E: trenn@suse.de +D: cpupowerutils +S: SUSE Linux GmbH +S: Germany + N: Joerg Reuter E: jreuter@yaina.de W: http://yaina.de/jreuter/ diff --git a/trunk/Documentation/ABI/testing/pstore b/trunk/Documentation/ABI/testing/pstore index ddf451ee2a08..ff1df4e3b059 100644 --- a/trunk/Documentation/ABI/testing/pstore +++ b/trunk/Documentation/ABI/testing/pstore @@ -39,3 +39,9 @@ Description: Generic interface to platform dependent persistent storage. multiple) files based on the record size of the underlying persistent storage until at least this amount is reached. Default is 10 Kbytes. + + Pstore only supports one backend at a time. If multiple + backends are available, the preferred backend may be + set by passing the pstore.backend= argument to the kernel at + boot time. + diff --git a/trunk/Documentation/DocBook/.gitignore b/trunk/Documentation/DocBook/.gitignore index 679034cbd686..720f245ceb1f 100644 --- a/trunk/Documentation/DocBook/.gitignore +++ b/trunk/Documentation/DocBook/.gitignore @@ -8,4 +8,7 @@ *.dvi *.log *.out -media/ +*.png +*.gif +media-indices.tmpl +media-entities.tmpl diff --git a/trunk/Documentation/DocBook/Makefile b/trunk/Documentation/DocBook/Makefile index 3cebfa0d1611..66725a3d30dc 100644 --- a/trunk/Documentation/DocBook/Makefile +++ b/trunk/Documentation/DocBook/Makefile @@ -14,7 +14,9 @@ DOCBOOKS := z8530book.xml mcabook.xml device-drivers.xml \ genericirq.xml s390-drivers.xml uio-howto.xml scsi.xml \ 80211.xml debugobjects.xml sh.xml regulator.xml \ alsa-driver-api.xml writing-an-alsa-driver.xml \ - tracepoint.xml media.xml drm.xml + tracepoint.xml drm.xml media_api.xml + +include $(srctree)/Documentation/DocBook/media/Makefile ### # The build process is as follows (targets): @@ -32,7 +34,7 @@ PS_METHOD = $(prefer-db2x) ### # The targets that may be used. -PHONY += xmldocs sgmldocs psdocs pdfdocs htmldocs mandocs installmandocs cleandocs xmldoclinks +PHONY += xmldocs sgmldocs psdocs pdfdocs htmldocs mandocs installmandocs cleandocs BOOKS := $(addprefix $(obj)/,$(DOCBOOKS)) xmldocs: $(BOOKS) @@ -45,27 +47,14 @@ PDF := $(patsubst %.xml, %.pdf, $(BOOKS)) pdfdocs: $(PDF) HTML := $(sort $(patsubst %.xml, %.html, $(BOOKS))) -htmldocs: $(HTML) xmldoclinks +htmldocs: $(HTML) $(call build_main_index) $(call build_images) + $(call install_media_images) MAN := $(patsubst %.xml, %.9, $(BOOKS)) mandocs: $(MAN) -build_images = mkdir -p $(objtree)/Documentation/DocBook/media/ && \ - cp $(srctree)/Documentation/DocBook/dvb/*.png \ - $(srctree)/Documentation/DocBook/v4l/*.gif \ - $(objtree)/Documentation/DocBook/media/ - -xmldoclinks: -ifneq ($(objtree),$(srctree)) - for dep in dvb media-entities.tmpl media-indices.tmpl v4l; do \ - rm -f $(objtree)/Documentation/DocBook/$$dep \ - && ln -s $(srctree)/Documentation/DocBook/$$dep $(objtree)/Documentation/DocBook/ \ - || exit; \ - done -endif - installmandocs: mandocs mkdir -p /usr/local/man/man9/ install Documentation/DocBook/man/*.9.gz /usr/local/man/man9/ @@ -97,11 +86,11 @@ define rule_docproc ) > $(dir $@).$(notdir $@).cmd endef -%.xml: %.tmpl xmldoclinks FORCE +%.xml: %.tmpl FORCE $(call if_changed_rule,docproc) ### -#Read in all saved dependency files +#Read in all saved dependency files cmd_files := $(wildcard $(foreach f,$(BOOKS),$(dir $(f)).$(notdir $(f)).cmd)) ifneq ($(cmd_files),) @@ -150,7 +139,7 @@ quiet_cmd_db2pdf = PDF $@ index = index.html main_idx = Documentation/DocBook/$(index) -build_main_index = rm -rf $(main_idx) && \ +build_main_index = rm -rf $(main_idx); \ echo '

Linux Kernel HTML Documentation

' >> $(main_idx) && \ echo '

Kernel Version: $(KERNELVERSION)

' >> $(main_idx) && \ cat $(HTML) >> $(main_idx) @@ -242,7 +231,7 @@ clean-files := $(DOCBOOKS) \ clean-dirs := $(patsubst %.xml,%,$(DOCBOOKS)) man -cleandocs: +cleandocs: cleanmediadocs $(Q)rm -f $(call objectify, $(clean-files)) $(Q)rm -rf $(call objectify, $(clean-dirs)) diff --git a/trunk/Documentation/DocBook/dvb/dvbproperty.xml b/trunk/Documentation/DocBook/dvb/dvbproperty.xml deleted file mode 100644 index b5365f61d69b..000000000000 --- a/trunk/Documentation/DocBook/dvb/dvbproperty.xml +++ /dev/null @@ -1,590 +0,0 @@ -
-FE_GET_PROPERTY/FE_SET_PROPERTY - - -/* Reserved fields should be set to 0 */ -struct dtv_property { - __u32 cmd; - union { - __u32 data; - struct { - __u8 data[32]; - __u32 len; - __u32 reserved1[3]; - void *reserved2; - } buffer; - } u; - int result; -} __attribute__ ((packed)); - -/* num of properties cannot exceed DTV_IOCTL_MAX_MSGS per ioctl */ -#define DTV_IOCTL_MAX_MSGS 64 - -struct dtv_properties { - __u32 num; - struct dtv_property *props; -}; - - -
-FE_GET_PROPERTY -DESCRIPTION - - -This ioctl call returns one or more frontend properties. This call only - requires read-only access to the device. - - -SYNOPSIS - - -int ioctl(int fd, int request = FE_GET_PROPERTY, - dtv_properties ⋆props); - - -PARAMETERS - - -int fd - -File descriptor returned by a previous call to open(). - - -int num - -Equals FE_GET_PROPERTY for this command. - - -struct dtv_property *props - -Points to the location where the front-end property commands are stored. - - -ERRORS - - EINVAL - Invalid parameter(s) received or number of parameters out of the range. - - ENOMEM - Out of memory. - - EFAULT - Failure while copying data from/to userspace. - - EOPNOTSUPP - Property type not supported. - -
- -
-FE_SET_PROPERTY -DESCRIPTION - - -This ioctl call sets one or more frontend properties. This call only - requires read-only access to the device. - - -SYNOPSIS - - -int ioctl(int fd, int request = FE_SET_PROPERTY, - dtv_properties ⋆props); - - -PARAMETERS - - -int fd - -File descriptor returned by a previous call to open(). - - -int num - -Equals FE_SET_PROPERTY for this command. - - -struct dtv_property *props - -Points to the location where the front-end property commands are stored. - - -ERRORS - - - EINVAL - Invalid parameter(s) received or number of parameters out of the range. - - ENOMEM - Out of memory. - - EFAULT - Failure while copying data from/to userspace. - - EOPNOTSUPP - Property type not supported. - -
- -
- Property types - -On FE_GET_PROPERTY/FE_SET_PROPERTY, -the actual action is determined by the dtv_property cmd/data pairs. With one single ioctl, is possible to -get/set up to 64 properties. The actual meaning of each property is described on the next sections. - - -The available frontend property types are: - -#define DTV_UNDEFINED 0 -#define DTV_TUNE 1 -#define DTV_CLEAR 2 -#define DTV_FREQUENCY 3 -#define DTV_MODULATION 4 -#define DTV_BANDWIDTH_HZ 5 -#define DTV_INVERSION 6 -#define DTV_DISEQC_MASTER 7 -#define DTV_SYMBOL_RATE 8 -#define DTV_INNER_FEC 9 -#define DTV_VOLTAGE 10 -#define DTV_TONE 11 -#define DTV_PILOT 12 -#define DTV_ROLLOFF 13 -#define DTV_DISEQC_SLAVE_REPLY 14 -#define DTV_FE_CAPABILITY_COUNT 15 -#define DTV_FE_CAPABILITY 16 -#define DTV_DELIVERY_SYSTEM 17 -#define DTV_ISDBT_PARTIAL_RECEPTION 18 -#define DTV_ISDBT_SOUND_BROADCASTING 19 -#define DTV_ISDBT_SB_SUBCHANNEL_ID 20 -#define DTV_ISDBT_SB_SEGMENT_IDX 21 -#define DTV_ISDBT_SB_SEGMENT_COUNT 22 -#define DTV_ISDBT_LAYERA_FEC 23 -#define DTV_ISDBT_LAYERA_MODULATION 24 -#define DTV_ISDBT_LAYERA_SEGMENT_COUNT 25 -#define DTV_ISDBT_LAYERA_TIME_INTERLEAVING 26 -#define DTV_ISDBT_LAYERB_FEC 27 -#define DTV_ISDBT_LAYERB_MODULATION 28 -#define DTV_ISDBT_LAYERB_SEGMENT_COUNT 29 -#define DTV_ISDBT_LAYERB_TIME_INTERLEAVING 30 -#define DTV_ISDBT_LAYERC_FEC 31 -#define DTV_ISDBT_LAYERC_MODULATION 32 -#define DTV_ISDBT_LAYERC_SEGMENT_COUNT 33 -#define DTV_ISDBT_LAYERC_TIME_INTERLEAVING 34 -#define DTV_API_VERSION 35 -#define DTV_CODE_RATE_HP 36 -#define DTV_CODE_RATE_LP 37 -#define DTV_GUARD_INTERVAL 38 -#define DTV_TRANSMISSION_MODE 39 -#define DTV_HIERARCHY 40 -#define DTV_ISDBT_LAYER_ENABLED 41 -#define DTV_ISDBS_TS_ID 42 - -
- -
- Parameters that are common to all Digital TV standards -
- <constant>DTV_FREQUENCY</constant> - - Central frequency of the channel, in HZ. - - Notes: - 1)For ISDB-T, the channels are usually transmitted with an offset of 143kHz. - E.g. a valid frequncy could be 474143 kHz. The stepping is bound to the bandwidth of - the channel which is 6MHz. - - 2)As in ISDB-Tsb the channel consists of only one or three segments the - frequency step is 429kHz, 3*429 respectively. As for ISDB-T the - central frequency of the channel is expected. -
- -
- <constant>DTV_BANDWIDTH_HZ</constant> - - Bandwidth for the channel, in HZ. - - Possible values: - 1712000, - 5000000, - 6000000, - 7000000, - 8000000, - 10000000. - - - Notes: - - 1) For ISDB-T it should be always 6000000Hz (6MHz) - 2) For ISDB-Tsb it can vary depending on the number of connected segments - 3) Bandwidth doesn't apply for DVB-C transmissions, as the bandwidth - for DVB-C depends on the symbol rate - 4) Bandwidth in ISDB-T is fixed (6MHz) or can be easily derived from - other parameters (DTV_ISDBT_SB_SEGMENT_IDX, - DTV_ISDBT_SB_SEGMENT_COUNT). - 5) DVB-T supports 6, 7 and 8MHz. - 6) In addition, DVB-T2 supports 1.172, 5 and 10MHz. -
- -
- <constant>DTV_DELIVERY_SYSTEM</constant> - - Specifies the type of Delivery system - - Possible values: - -typedef enum fe_delivery_system { - SYS_UNDEFINED, - SYS_DVBC_ANNEX_AC, - SYS_DVBC_ANNEX_B, - SYS_DVBT, - SYS_DSS, - SYS_DVBS, - SYS_DVBS2, - SYS_DVBH, - SYS_ISDBT, - SYS_ISDBS, - SYS_ISDBC, - SYS_ATSC, - SYS_ATSCMH, - SYS_DMBTH, - SYS_CMMB, - SYS_DAB, - SYS_DVBT2, -} fe_delivery_system_t; - - -
- -
- <constant>DTV_TRANSMISSION_MODE</constant> - - Specifies the number of carriers used by the standard - - Possible values are: - -typedef enum fe_transmit_mode { - TRANSMISSION_MODE_2K, - TRANSMISSION_MODE_8K, - TRANSMISSION_MODE_AUTO, - TRANSMISSION_MODE_4K, - TRANSMISSION_MODE_1K, - TRANSMISSION_MODE_16K, - TRANSMISSION_MODE_32K, -} fe_transmit_mode_t; - - - Notes: - 1) ISDB-T supports three carrier/symbol-size: 8K, 4K, 2K. It is called - 'mode' in the standard: Mode 1 is 2K, mode 2 is 4K, mode 3 is 8K - - 2) If DTV_TRANSMISSION_MODE is set the TRANSMISSION_MODE_AUTO the - hardware will try to find the correct FFT-size (if capable) and will - use TMCC to fill in the missing parameters. - 3) DVB-T specifies 2K and 8K as valid sizes. - 4) DVB-T2 specifies 1K, 2K, 4K, 8K, 16K and 32K. -
- -
- <constant>DTV_GUARD_INTERVAL</constant> - - Possible values are: - -typedef enum fe_guard_interval { - GUARD_INTERVAL_1_32, - GUARD_INTERVAL_1_16, - GUARD_INTERVAL_1_8, - GUARD_INTERVAL_1_4, - GUARD_INTERVAL_AUTO, - GUARD_INTERVAL_1_128, - GUARD_INTERVAL_19_128, - GUARD_INTERVAL_19_256, -} fe_guard_interval_t; - - - Notes: - 1) If DTV_GUARD_INTERVAL is set the GUARD_INTERVAL_AUTO the hardware will - try to find the correct guard interval (if capable) and will use TMCC to fill - in the missing parameters. - 2) Intervals 1/128, 19/128 and 19/256 are used only for DVB-T2 at present -
-
- -
- ISDB-T frontend - This section describes shortly what are the possible parameters in the Linux - DVB-API called "S2API" and now DVB API 5 in order to tune an ISDB-T/ISDB-Tsb - demodulator: - - This ISDB-T/ISDB-Tsb API extension should reflect all information - needed to tune any ISDB-T/ISDB-Tsb hardware. Of course it is possible - that some very sophisticated devices won't need certain parameters to - tune. - - The information given here should help application writers to know how - to handle ISDB-T and ISDB-Tsb hardware using the Linux DVB-API. - - The details given here about ISDB-T and ISDB-Tsb are just enough to - basically show the dependencies between the needed parameter values, - but surely some information is left out. For more detailed information - see the following documents: - - ARIB STD-B31 - "Transmission System for Digital Terrestrial - Television Broadcasting" and - ARIB TR-B14 - "Operational Guidelines for Digital Terrestrial - Television Broadcasting". - - In order to read this document one has to have some knowledge the - channel structure in ISDB-T and ISDB-Tsb. I.e. it has to be known to - the reader that an ISDB-T channel consists of 13 segments, that it can - have up to 3 layer sharing those segments, and things like that. - - Parameters used by ISDB-T and ISDB-Tsb. - -
- ISDB-T only parameters - -
- <constant>DTV_ISDBT_PARTIAL_RECEPTION</constant> - - If DTV_ISDBT_SOUND_BROADCASTING is '0' this bit-field represents whether - the channel is in partial reception mode or not. - - If '1' DTV_ISDBT_LAYERA_* values are assigned to the center segment and - DTV_ISDBT_LAYERA_SEGMENT_COUNT has to be '1'. - - If in addition DTV_ISDBT_SOUND_BROADCASTING is '1' - DTV_ISDBT_PARTIAL_RECEPTION represents whether this ISDB-Tsb channel - is consisting of one segment and layer or three segments and two layers. - - Possible values: 0, 1, -1 (AUTO) -
- -
- <constant>DTV_ISDBT_SOUND_BROADCASTING</constant> - - This field represents whether the other DTV_ISDBT_*-parameters are - referring to an ISDB-T and an ISDB-Tsb channel. (See also - DTV_ISDBT_PARTIAL_RECEPTION). - - Possible values: 0, 1, -1 (AUTO) -
- -
- <constant>DTV_ISDBT_SB_SUBCHANNEL_ID</constant> - - This field only applies if DTV_ISDBT_SOUND_BROADCASTING is '1'. - - (Note of the author: This might not be the correct description of the - SUBCHANNEL-ID in all details, but it is my understanding of the technical - background needed to program a device) - - An ISDB-Tsb channel (1 or 3 segments) can be broadcasted alone or in a - set of connected ISDB-Tsb channels. In this set of channels every - channel can be received independently. The number of connected - ISDB-Tsb segment can vary, e.g. depending on the frequency spectrum - bandwidth available. - - Example: Assume 8 ISDB-Tsb connected segments are broadcasted. The - broadcaster has several possibilities to put those channels in the - air: Assuming a normal 13-segment ISDB-T spectrum he can align the 8 - segments from position 1-8 to 5-13 or anything in between. - - The underlying layer of segments are subchannels: each segment is - consisting of several subchannels with a predefined IDs. A sub-channel - is used to help the demodulator to synchronize on the channel. - - An ISDB-T channel is always centered over all sub-channels. As for - the example above, in ISDB-Tsb it is no longer as simple as that. - - The DTV_ISDBT_SB_SUBCHANNEL_ID parameter is used to give the - sub-channel ID of the segment to be demodulated. - - Possible values: 0 .. 41, -1 (AUTO) -
- -
- - <constant>DTV_ISDBT_SB_SEGMENT_IDX</constant> - - This field only applies if DTV_ISDBT_SOUND_BROADCASTING is '1'. - - DTV_ISDBT_SB_SEGMENT_IDX gives the index of the segment to be - demodulated for an ISDB-Tsb channel where several of them are - transmitted in the connected manner. - - Possible values: 0 .. DTV_ISDBT_SB_SEGMENT_COUNT - 1 - - Note: This value cannot be determined by an automatic channel search. -
- -
- <constant>DTV_ISDBT_SB_SEGMENT_COUNT</constant> - - This field only applies if DTV_ISDBT_SOUND_BROADCASTING is '1'. - - DTV_ISDBT_SB_SEGMENT_COUNT gives the total count of connected ISDB-Tsb - channels. - - Possible values: 1 .. 13 - - Note: This value cannot be determined by an automatic channel search. -
- -
- Hierarchical layers - - ISDB-T channels can be coded hierarchically. As opposed to DVB-T in - ISDB-T hierarchical layers can be decoded simultaneously. For that - reason a ISDB-T demodulator has 3 viterbi and 3 reed-solomon-decoders. - - ISDB-T has 3 hierarchical layers which each can use a part of the - available segments. The total number of segments over all layers has - to 13 in ISDB-T. - -
- <constant>DTV_ISDBT_LAYER_ENABLED</constant> - - Hierarchical reception in ISDB-T is achieved by enabling or disabling - layers in the decoding process. Setting all bits of - DTV_ISDBT_LAYER_ENABLED to '1' forces all layers (if applicable) to be - demodulated. This is the default. - - If the channel is in the partial reception mode - (DTV_ISDBT_PARTIAL_RECEPTION = 1) the central segment can be decoded - independently of the other 12 segments. In that mode layer A has to - have a SEGMENT_COUNT of 1. - - In ISDB-Tsb only layer A is used, it can be 1 or 3 in ISDB-Tsb - according to DTV_ISDBT_PARTIAL_RECEPTION. SEGMENT_COUNT must be filled - accordingly. - - Possible values: 0x1, 0x2, 0x4 (|-able) - - DTV_ISDBT_LAYER_ENABLED[0:0] - layer A - DTV_ISDBT_LAYER_ENABLED[1:1] - layer B - DTV_ISDBT_LAYER_ENABLED[2:2] - layer C - DTV_ISDBT_LAYER_ENABLED[31:3] unused -
- -
- <constant>DTV_ISDBT_LAYER*_FEC</constant> - - Possible values: FEC_AUTO, FEC_1_2, FEC_2_3, FEC_3_4, FEC_5_6, FEC_7_8 -
- -
- <constant>DTV_ISDBT_LAYER*_MODULATION</constant> - - Possible values: QAM_AUTO, QPSK, QAM_16, QAM_64, DQPSK - - Note: If layer C is DQPSK layer B has to be DQPSK. If layer B is DQPSK - and DTV_ISDBT_PARTIAL_RECEPTION=0 layer has to be DQPSK. -
- -
- <constant>DTV_ISDBT_LAYER*_SEGMENT_COUNT</constant> - - Possible values: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, -1 (AUTO) - - Note: Truth table for DTV_ISDBT_SOUND_BROADCASTING and - DTV_ISDBT_PARTIAL_RECEPTION and LAYER*_SEGMENT_COUNT - - - - - - - PR - SB - Layer A width - Layer B width - Layer C width - total width - - - - 0 - 0 - 1 .. 13 - 1 .. 13 - 1 .. 13 - 13 - - - - 1 - 0 - 1 - 1 .. 13 - 1 .. 13 - 13 - - - - 0 - 1 - 1 - 0 - 0 - 1 - - - - 1 - 1 - 1 - 2 - 0 - 13 - - - - - - -
- -
- <constant>DTV_ISDBT_LAYER*_TIME_INTERLEAVING</constant> - - Possible values: 0, 1, 2, 3, -1 (AUTO) - - Note: The real inter-leaver depth-names depend on the mode (fft-size); the values - here are referring to what can be found in the TMCC-structure - - independent of the mode. -
-
-
-
- DVB-T2 parameters - - This section covers parameters that apply only to the DVB-T2 delivery method. DVB-T2 - support is currently in the early stages development so expect this section to grow - and become more detailed with time. - -
- <constant>DTV_DVBT2_PLP_ID</constant> - - DVB-T2 supports Physical Layer Pipes (PLP) to allow transmission of - many data types via a single multiplex. The API will soon support this - at which point this section will be expanded. -
-
-
-
diff --git a/trunk/Documentation/DocBook/dvb/dvbstb.png b/trunk/Documentation/DocBook/dvb/dvbstb.png deleted file mode 100644 index 9b8f372e7afd9d016854973ba705dcdfbd1bbf13..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22655 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 I?##9S2OFAByZ`_I diff --git a/trunk/Documentation/DocBook/dvb/frontend.h.xml b/trunk/Documentation/DocBook/dvb/frontend.h.xml deleted file mode 100644 index d792f789ad3b..000000000000 --- a/trunk/Documentation/DocBook/dvb/frontend.h.xml +++ /dev/null @@ -1,428 +0,0 @@ - -/* - * frontend.h - * - * Copyright (C) 2000 Marcus Metzler <marcus@convergence.de> - * Ralph Metzler <ralph@convergence.de> - * Holger Waechtler <holger@convergence.de> - * Andre Draszik <ad@convergence.de> - * for convergence integrated media GmbH - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public License - * as published by the Free Software Foundation; either version 2.1 - * of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - * - */ - -#ifndef _DVBFRONTEND_H_ -#define _DVBFRONTEND_H_ - -#include <linux/types.h> - -typedef enum fe_type { - FE_QPSK, - FE_QAM, - FE_OFDM, - FE_ATSC -} fe_type_t; - - -typedef enum fe_caps { - FE_IS_STUPID = 0, - FE_CAN_INVERSION_AUTO = 0x1, - FE_CAN_FEC_1_2 = 0x2, - FE_CAN_FEC_2_3 = 0x4, - FE_CAN_FEC_3_4 = 0x8, - FE_CAN_FEC_4_5 = 0x10, - FE_CAN_FEC_5_6 = 0x20, - FE_CAN_FEC_6_7 = 0x40, - FE_CAN_FEC_7_8 = 0x80, - FE_CAN_FEC_8_9 = 0x100, - FE_CAN_FEC_AUTO = 0x200, - FE_CAN_QPSK = 0x400, - FE_CAN_QAM_16 = 0x800, - FE_CAN_QAM_32 = 0x1000, - FE_CAN_QAM_64 = 0x2000, - FE_CAN_QAM_128 = 0x4000, - FE_CAN_QAM_256 = 0x8000, - FE_CAN_QAM_AUTO = 0x10000, - FE_CAN_TRANSMISSION_MODE_AUTO = 0x20000, - FE_CAN_BANDWIDTH_AUTO = 0x40000, - FE_CAN_GUARD_INTERVAL_AUTO = 0x80000, - FE_CAN_HIERARCHY_AUTO = 0x100000, - FE_CAN_8VSB = 0x200000, - FE_CAN_16VSB = 0x400000, - FE_HAS_EXTENDED_CAPS = 0x800000, /* We need more bitspace for newer APIs, indicate this. */ - FE_CAN_TURBO_FEC = 0x8000000, /* frontend supports "turbo fec modulation" */ - FE_CAN_2G_MODULATION = 0x10000000, /* frontend supports "2nd generation modulation" (DVB-S2) */ - FE_NEEDS_BENDING = 0x20000000, /* not supported anymore, don't use (frontend requires frequency bending) */ - FE_CAN_RECOVER = 0x40000000, /* frontend can recover from a cable unplug automatically */ - FE_CAN_MUTE_TS = 0x80000000 /* frontend can stop spurious TS data output */ -} fe_caps_t; - - -struct dvb_frontend_info { - char name[128]; - fe_type_t type; - __u32 frequency_min; - __u32 frequency_max; - __u32 frequency_stepsize; - __u32 frequency_tolerance; - __u32 symbol_rate_min; - __u32 symbol_rate_max; - __u32 symbol_rate_tolerance; /* ppm */ - __u32 notifier_delay; /* DEPRECATED */ - fe_caps_t caps; -}; - - -/** - * Check out the DiSEqC bus spec available on http://www.eutelsat.org/ for - * the meaning of this struct... - */ -struct dvb_diseqc_master_cmd { - __u8 msg [6]; /* { framing, address, command, data [3] } */ - __u8 msg_len; /* valid values are 3...6 */ -}; - - -struct dvb_diseqc_slave_reply { - __u8 msg [4]; /* { framing, data [3] } */ - __u8 msg_len; /* valid values are 0...4, 0 means no msg */ - int timeout; /* return from ioctl after timeout ms with */ -}; /* errorcode when no message was received */ - - -typedef enum fe_sec_voltage { - SEC_VOLTAGE_13, - SEC_VOLTAGE_18, - SEC_VOLTAGE_OFF -} fe_sec_voltage_t; - - -typedef enum fe_sec_tone_mode { - SEC_TONE_ON, - SEC_TONE_OFF -} fe_sec_tone_mode_t; - - -typedef enum fe_sec_mini_cmd { - SEC_MINI_A, - SEC_MINI_B -} fe_sec_mini_cmd_t; - - -typedef enum fe_status { - FE_HAS_SIGNAL = 0x01, /* found something above the noise level */ - FE_HAS_CARRIER = 0x02, /* found a DVB signal */ - FE_HAS_VITERBI = 0x04, /* FEC is stable */ - FE_HAS_SYNC = 0x08, /* found sync bytes */ - FE_HAS_LOCK = 0x10, /* everything's working... */ - FE_TIMEDOUT = 0x20, /* no lock within the last ~2 seconds */ - FE_REINIT = 0x40 /* frontend was reinitialized, */ -} fe_status_t; /* application is recommended to reset */ - /* DiSEqC, tone and parameters */ - -typedef enum fe_spectral_inversion { - INVERSION_OFF, - INVERSION_ON, - INVERSION_AUTO -} fe_spectral_inversion_t; - - -typedef enum fe_code_rate { - FEC_NONE = 0, - FEC_1_2, - FEC_2_3, - FEC_3_4, - FEC_4_5, - FEC_5_6, - FEC_6_7, - FEC_7_8, - FEC_8_9, - FEC_AUTO, - FEC_3_5, - FEC_9_10, -} fe_code_rate_t; - - -typedef enum fe_modulation { - QPSK, - QAM_16, - QAM_32, - QAM_64, - QAM_128, - QAM_256, - QAM_AUTO, - VSB_8, - VSB_16, - PSK_8, - APSK_16, - APSK_32, - DQPSK, -} fe_modulation_t; - -typedef enum fe_transmit_mode { - TRANSMISSION_MODE_2K, - TRANSMISSION_MODE_8K, - TRANSMISSION_MODE_AUTO, - TRANSMISSION_MODE_4K, - TRANSMISSION_MODE_1K, - TRANSMISSION_MODE_16K, - TRANSMISSION_MODE_32K, -} fe_transmit_mode_t; - -typedef enum fe_bandwidth { - BANDWIDTH_8_MHZ, - BANDWIDTH_7_MHZ, - BANDWIDTH_6_MHZ, - BANDWIDTH_AUTO, - BANDWIDTH_5_MHZ, - BANDWIDTH_10_MHZ, - BANDWIDTH_1_712_MHZ, -} fe_bandwidth_t; - - -typedef enum fe_guard_interval { - GUARD_INTERVAL_1_32, - GUARD_INTERVAL_1_16, - GUARD_INTERVAL_1_8, - GUARD_INTERVAL_1_4, - GUARD_INTERVAL_AUTO, - GUARD_INTERVAL_1_128, - GUARD_INTERVAL_19_128, - GUARD_INTERVAL_19_256, -} fe_guard_interval_t; - - -typedef enum fe_hierarchy { - HIERARCHY_NONE, - HIERARCHY_1, - HIERARCHY_2, - HIERARCHY_4, - HIERARCHY_AUTO -} fe_hierarchy_t; - - -struct dvb_qpsk_parameters { - __u32 symbol_rate; /* symbol rate in Symbols per second */ - fe_code_rate_t fec_inner; /* forward error correction (see above) */ -}; - -struct dvb_qam_parameters { - __u32 symbol_rate; /* symbol rate in Symbols per second */ - fe_code_rate_t fec_inner; /* forward error correction (see above) */ - fe_modulation_t modulation; /* modulation type (see above) */ -}; - -struct dvb_vsb_parameters { - fe_modulation_t modulation; /* modulation type (see above) */ -}; - -struct dvb_ofdm_parameters { - fe_bandwidth_t bandwidth; - fe_code_rate_t code_rate_HP; /* high priority stream code rate */ - fe_code_rate_t code_rate_LP; /* low priority stream code rate */ - fe_modulation_t constellation; /* modulation type (see above) */ - fe_transmit_mode_t transmission_mode; - fe_guard_interval_t guard_interval; - fe_hierarchy_t hierarchy_information; -}; - - -struct dvb_frontend_parameters { - __u32 frequency; /* (absolute) frequency in Hz for QAM/OFDM/ATSC */ - /* intermediate frequency in kHz for QPSK */ - fe_spectral_inversion_t inversion; - union { - struct dvb_qpsk_parameters qpsk; - struct dvb_qam_parameters qam; - struct dvb_ofdm_parameters ofdm; - struct dvb_vsb_parameters vsb; - } u; -}; - - -struct dvb_frontend_event { - fe_status_t status; - struct dvb_frontend_parameters parameters; -}; - -/* S2API Commands */ -#define DTV_UNDEFINED 0 -#define DTV_TUNE 1 -#define DTV_CLEAR 2 -#define DTV_FREQUENCY 3 -#define DTV_MODULATION 4 -#define DTV_BANDWIDTH_HZ 5 -#define DTV_INVERSION 6 -#define DTV_DISEQC_MASTER 7 -#define DTV_SYMBOL_RATE 8 -#define DTV_INNER_FEC 9 -#define DTV_VOLTAGE 10 -#define DTV_TONE 11 -#define DTV_PILOT 12 -#define DTV_ROLLOFF 13 -#define DTV_DISEQC_SLAVE_REPLY 14 - -/* Basic enumeration set for querying unlimited capabilities */ -#define DTV_FE_CAPABILITY_COUNT 15 -#define DTV_FE_CAPABILITY 16 -#define DTV_DELIVERY_SYSTEM 17 - -/* ISDB-T and ISDB-Tsb */ -#define DTV_ISDBT_PARTIAL_RECEPTION 18 -#define DTV_ISDBT_SOUND_BROADCASTING 19 - -#define DTV_ISDBT_SB_SUBCHANNEL_ID 20 -#define DTV_ISDBT_SB_SEGMENT_IDX 21 -#define DTV_ISDBT_SB_SEGMENT_COUNT 22 - -#define DTV_ISDBT_LAYERA_FEC 23 -#define DTV_ISDBT_LAYERA_MODULATION 24 -#define DTV_ISDBT_LAYERA_SEGMENT_COUNT 25 -#define DTV_ISDBT_LAYERA_TIME_INTERLEAVING 26 - -#define DTV_ISDBT_LAYERB_FEC 27 -#define DTV_ISDBT_LAYERB_MODULATION 28 -#define DTV_ISDBT_LAYERB_SEGMENT_COUNT 29 -#define DTV_ISDBT_LAYERB_TIME_INTERLEAVING 30 - -#define DTV_ISDBT_LAYERC_FEC 31 -#define DTV_ISDBT_LAYERC_MODULATION 32 -#define DTV_ISDBT_LAYERC_SEGMENT_COUNT 33 -#define DTV_ISDBT_LAYERC_TIME_INTERLEAVING 34 - -#define DTV_API_VERSION 35 - -#define DTV_CODE_RATE_HP 36 -#define DTV_CODE_RATE_LP 37 -#define DTV_GUARD_INTERVAL 38 -#define DTV_TRANSMISSION_MODE 39 -#define DTV_HIERARCHY 40 - -#define DTV_ISDBT_LAYER_ENABLED 41 - -#define DTV_ISDBS_TS_ID 42 - -#define DTV_DVBT2_PLP_ID 43 - -#define DTV_MAX_COMMAND DTV_DVBT2_PLP_ID - -typedef enum fe_pilot { - PILOT_ON, - PILOT_OFF, - PILOT_AUTO, -} fe_pilot_t; - -typedef enum fe_rolloff { - ROLLOFF_35, /* Implied value in DVB-S, default for DVB-S2 */ - ROLLOFF_20, - ROLLOFF_25, - ROLLOFF_AUTO, -} fe_rolloff_t; - -typedef enum fe_delivery_system { - SYS_UNDEFINED, - SYS_DVBC_ANNEX_AC, - SYS_DVBC_ANNEX_B, - SYS_DVBT, - SYS_DSS, - SYS_DVBS, - SYS_DVBS2, - SYS_DVBH, - SYS_ISDBT, - SYS_ISDBS, - SYS_ISDBC, - SYS_ATSC, - SYS_ATSCMH, - SYS_DMBTH, - SYS_CMMB, - SYS_DAB, - SYS_DVBT2, -} fe_delivery_system_t; - -struct dtv_cmds_h { - char *name; /* A display name for debugging purposes */ - - __u32 cmd; /* A unique ID */ - - /* Flags */ - __u32 set:1; /* Either a set or get property */ - __u32 buffer:1; /* Does this property use the buffer? */ - __u32 reserved:30; /* Align */ -}; - -struct dtv_property { - __u32 cmd; - __u32 reserved[3]; - union { - __u32 data; - struct { - __u8 data[32]; - __u32 len; - __u32 reserved1[3]; - void *reserved2; - } buffer; - } u; - int result; -} __attribute__ ((packed)); - -/* num of properties cannot exceed DTV_IOCTL_MAX_MSGS per ioctl */ -#define DTV_IOCTL_MAX_MSGS 64 - -struct dtv_properties { - __u32 num; - struct dtv_property *props; -}; - -#define FE_SET_PROPERTY _IOW('o', 82, struct dtv_properties) -#define FE_GET_PROPERTY _IOR('o', 83, struct dtv_properties) - - -/** - * When set, this flag will disable any zigzagging or other "normal" tuning - * behaviour. Additionally, there will be no automatic monitoring of the lock - * status, and hence no frontend events will be generated. If a frontend device - * is closed, this flag will be automatically turned off when the device is - * reopened read-write. - */ -#define FE_TUNE_MODE_ONESHOT 0x01 - - -#define FE_GET_INFO _IOR('o', 61, struct dvb_frontend_info) - -#define FE_DISEQC_RESET_OVERLOAD _IO('o', 62) -#define FE_DISEQC_SEND_MASTER_CMD _IOW('o', 63, struct dvb_diseqc_master_cmd) -#define FE_DISEQC_RECV_SLAVE_REPLY _IOR('o', 64, struct dvb_diseqc_slave_reply) -#define FE_DISEQC_SEND_BURST _IO('o', 65) /* fe_sec_mini_cmd_t */ - -#define FE_SET_TONE _IO('o', 66) /* fe_sec_tone_mode_t */ -#define FE_SET_VOLTAGE _IO('o', 67) /* fe_sec_voltage_t */ -#define FE_ENABLE_HIGH_LNB_VOLTAGE _IO('o', 68) /* int */ - -#define FE_READ_STATUS _IOR('o', 69, fe_status_t) -#define FE_READ_BER _IOR('o', 70, __u32) -#define FE_READ_SIGNAL_STRENGTH _IOR('o', 71, __u16) -#define FE_READ_SNR _IOR('o', 72, __u16) -#define FE_READ_UNCORRECTED_BLOCKS _IOR('o', 73, __u32) - -#define FE_SET_FRONTEND _IOW('o', 76, struct dvb_frontend_parameters) -#define FE_GET_FRONTEND _IOR('o', 77, struct dvb_frontend_parameters) -#define FE_SET_FRONTEND_TUNE_MODE _IO('o', 81) /* unsigned int */ -#define FE_GET_EVENT _IOR('o', 78, struct dvb_frontend_event) - -#define FE_DISHNETWORK_SEND_LEGACY_CMD _IO('o', 80) /* unsigned int */ - -#endif /*_DVBFRONTEND_H_*/ - diff --git a/trunk/Documentation/DocBook/media-entities.tmpl b/trunk/Documentation/DocBook/media-entities.tmpl deleted file mode 100644 index e5fe09430fd9..000000000000 --- a/trunk/Documentation/DocBook/media-entities.tmpl +++ /dev/null @@ -1,464 +0,0 @@ - - - -close()"> -ioctl()"> -mmap()"> -munmap()"> -open()"> -poll()"> -read()"> -select()"> -write()"> - -close()"> -ioctl()"> -open()"> - - -VIDIOC_CROPCAP"> -VIDIOC_DBG_G_CHIP_IDENT"> -VIDIOC_DBG_G_REGISTER"> -VIDIOC_DBG_S_REGISTER"> -VIDIOC_DQBUF"> -VIDIOC_DQEVENT"> -VIDIOC_ENCODER_CMD"> -VIDIOC_ENUMAUDIO"> -VIDIOC_ENUMAUDOUT"> -VIDIOC_ENUMINPUT"> -VIDIOC_ENUMOUTPUT"> -VIDIOC_ENUMSTD"> -VIDIOC_ENUM_DV_PRESETS"> -VIDIOC_ENUM_FMT"> -VIDIOC_ENUM_FRAMEINTERVALS"> -VIDIOC_ENUM_FRAMESIZES"> -VIDIOC_G_AUDIO"> -VIDIOC_G_AUDOUT"> -VIDIOC_G_CROP"> -VIDIOC_G_CTRL"> -VIDIOC_G_DV_PRESET"> -VIDIOC_G_DV_TIMINGS"> -VIDIOC_G_ENC_INDEX"> -VIDIOC_G_EXT_CTRLS"> -VIDIOC_G_FBUF"> -VIDIOC_G_FMT"> -VIDIOC_G_FREQUENCY"> -VIDIOC_G_INPUT"> -VIDIOC_G_JPEGCOMP"> -VIDIOC_G_MPEGCOMP"> -VIDIOC_G_MODULATOR"> -VIDIOC_G_OUTPUT"> -VIDIOC_G_PARM"> -VIDIOC_G_PRIORITY"> -VIDIOC_G_SLICED_VBI_CAP"> -VIDIOC_G_STD"> -VIDIOC_G_TUNER"> -VIDIOC_LOG_STATUS"> -VIDIOC_OVERLAY"> -VIDIOC_QBUF"> -VIDIOC_QUERYBUF"> -VIDIOC_QUERYCAP"> -VIDIOC_QUERYCTRL"> -VIDIOC_QUERYMENU"> -VIDIOC_QUERYSTD"> -VIDIOC_QUERY_DV_PRESET"> -VIDIOC_REQBUFS"> -VIDIOC_STREAMOFF"> -VIDIOC_STREAMON"> -VIDIOC_SUBSCRIBE_EVENT"> -VIDIOC_S_AUDIO"> -VIDIOC_S_AUDOUT"> -VIDIOC_S_CROP"> -VIDIOC_S_CTRL"> -VIDIOC_S_DV_PRESET"> -VIDIOC_S_DV_TIMINGS"> -VIDIOC_S_EXT_CTRLS"> -VIDIOC_S_FBUF"> -VIDIOC_S_FMT"> -VIDIOC_S_FREQUENCY"> -VIDIOC_S_HW_FREQ_SEEK"> -VIDIOC_S_INPUT"> -VIDIOC_S_JPEGCOMP"> -VIDIOC_S_MPEGCOMP"> -VIDIOC_S_MODULATOR"> -VIDIOC_S_OUTPUT"> -VIDIOC_S_PARM"> -VIDIOC_S_PRIORITY"> -VIDIOC_S_STD"> -VIDIOC_S_TUNER"> -VIDIOC_SUBDEV_ENUM_FRAME_SIZE"> -VIDIOC_SUBDEV_ENUM_MBUS_CODE"> -VIDIOC_SUBDEV_G_CROP"> -VIDIOC_SUBDEV_G_FMT"> -VIDIOC_SUBDEV_G_FRAME_INTERVAL"> -VIDIOC_SUBDEV_S_CROP"> -VIDIOC_SUBDEV_S_FMT"> -VIDIOC_SUBDEV_S_FRAME_INTERVAL"> -VIDIOC_TRY_ENCODER_CMD"> -VIDIOC_TRY_EXT_CTRLS"> -VIDIOC_TRY_FMT"> -VIDIOC_UNSUBSCRIBE_EVENT"> - -MEDIA_IOC_DEVICE_INFO"> -MEDIA_IOC_ENUM_ENTITIES"> -MEDIA_IOC_ENUM_LINKS"> -MEDIA_IOC_SETUP_LINK"> - - -v4l2_std_id"> - - -v4l2_buf_type"> -v4l2_colorspace"> -v4l2_ctrl_type"> -v4l2_exposure_auto_type"> -v4l2_field"> -v4l2_frmivaltypes"> -v4l2_frmsizetypes"> -v4l2_mbus_pixelcode"> -v4l2_memory"> -v4l2_mpeg_audio_ac3_bitrate"> -v4l2_mpeg_audio_crc"> -v4l2_mpeg_audio_emphasis"> -v4l2_mpeg_audio_encoding"> -v4l2_mpeg_audio_l1_bitrate"> -v4l2_mpeg_audio_l2_bitrate"> -v4l2_mpeg_audio_l3_bitrate"> -v4l2_mpeg_audio_mode"> -v4l2_mpeg_audio_mode_extension"> -v4l2_mpeg_audio_sampling_freq"> -v4l2_mpeg_cx2341x_video_chroma_spatial_filter_type"> -v4l2_mpeg_cx2341x_video_luma_spatial_filter_type"> -v4l2_mpeg_cx2341x_video_median_filter_type"> -v4l2_mpeg_cx2341x_video_spatial_filter_mode"> -v4l2_mpeg_cx2341x_video_temporal_filter_mode"> -v4l2_mpeg_stream_type"> -v4l2_mpeg_stream_vbi_fmt"> -v4l2_mpeg_video_aspect"> -v4l2_mpeg_video_bitrate_mode"> -v4l2_mpeg_video_encoding"> -v4l2_power_line_frequency"> -v4l2_priority"> -v4l2_subdev_format_whence"> -v4l2_tuner_type"> -v4l2_preemphasis"> - - -v4l2_audio"> -v4l2_audioout"> -v4l2_bt_timings"> -v4l2_buffer"> -v4l2_plane"> -v4l2_capability"> -v4l2_captureparm"> -v4l2_clip"> -v4l2_control"> -v4l2_crop"> -v4l2_cropcap"> -v4l2_dbg_chip_ident"> -v4l2_dbg_match"> -v4l2_dbg_register"> -v4l2_dv_enum_preset"> -v4l2_dv_preset"> -v4l2_dv_timings"> -v4l2_enc_idx"> -v4l2_enc_idx_entry"> -v4l2_encoder_cmd"> -v4l2_event"> -v4l2_event_subscription"> -v4l2_event_vsync"> -v4l2_ext_control"> -v4l2_ext_controls"> -v4l2_fmtdesc"> -v4l2_format"> -v4l2_fract"> -v4l2_framebuffer"> -v4l2_frequency"> -v4l2_frmival_stepwise"> -v4l2_frmivalenum"> -v4l2_frmsize_discrete"> -v4l2_frmsize_stepwise"> -v4l2_frmsizeenum"> -v4l2_hw_freq_seek"> -v4l2_input"> -v4l2_jpegcompression"> -v4l2_mbus_framefmt"> -v4l2_modulator"> -v4l2_mpeg_vbi_fmt_ivtv"> -v4l2_output"> -v4l2_outputparm"> -v4l2_pix_format"> -v4l2_pix_format_mplane"> -v4l2_plane_pix_format"> -v4l2_queryctrl"> -v4l2_querymenu"> -v4l2_rect"> -v4l2_requestbuffers"> -v4l2_sliced_vbi_cap"> -v4l2_sliced_vbi_data"> -v4l2_sliced_vbi_format"> -v4l2_subdev_frame_interval"> -v4l2_subdev_frame_interval_enum"> -v4l2_subdev_frame_size_enum"> -v4l2_subdev_crop"> -v4l2_subdev_format"> -v4l2_subdev_mbus_code_enum"> -v4l2_standard"> -v4l2_streamparm"> -v4l2_timecode"> -v4l2_tuner"> -v4l2_vbi_format"> -v4l2_window"> - -media_device_info"> -media_entity_desc"> -media_links_enum"> -media_pad_desc"> -media_link_desc"> - - -EACCES error code"> -EAGAIN error code"> -EBADF error code"> -EBUSY error code"> -EFAULT error code"> -EIO error code"> -EINTR error code"> -EINVAL error code"> -ENFILE error code"> -ENOMEM error code"> -ENOSPC error code"> -ENOTTY error code"> -ENXIO error code"> -EMFILE error code"> -EPERM error code"> -EPIPE error code"> -ERANGE error code"> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/trunk/Documentation/DocBook/media-indices.tmpl b/trunk/Documentation/DocBook/media-indices.tmpl deleted file mode 100644 index 78d6031de001..000000000000 --- a/trunk/Documentation/DocBook/media-indices.tmpl +++ /dev/null @@ -1,89 +0,0 @@ - - -List of Types -v4l2_std_id -enum v4l2_buf_type -enum v4l2_colorspace -enum v4l2_ctrl_type -enum v4l2_exposure_auto_type -enum v4l2_field -enum v4l2_frmivaltypes -enum v4l2_frmsizetypes -enum v4l2_memory -enum v4l2_mpeg_audio_ac3_bitrate -enum v4l2_mpeg_audio_crc -enum v4l2_mpeg_audio_emphasis -enum v4l2_mpeg_audio_encoding -enum v4l2_mpeg_audio_l1_bitrate -enum v4l2_mpeg_audio_l2_bitrate -enum v4l2_mpeg_audio_l3_bitrate -enum v4l2_mpeg_audio_mode -enum v4l2_mpeg_audio_mode_extension -enum v4l2_mpeg_audio_sampling_freq -enum v4l2_mpeg_cx2341x_video_chroma_spatial_filter_type -enum v4l2_mpeg_cx2341x_video_luma_spatial_filter_type -enum v4l2_mpeg_cx2341x_video_median_filter_type -enum v4l2_mpeg_cx2341x_video_spatial_filter_mode -enum v4l2_mpeg_cx2341x_video_temporal_filter_mode -enum v4l2_mpeg_stream_type -enum v4l2_mpeg_stream_vbi_fmt -enum v4l2_mpeg_video_aspect -enum v4l2_mpeg_video_bitrate_mode -enum v4l2_mpeg_video_encoding -enum v4l2_power_line_frequency -enum v4l2_priority -enum v4l2_tuner_type -enum v4l2_preemphasis -struct v4l2_audio -struct v4l2_audioout -struct v4l2_bt_timings -struct v4l2_buffer -struct v4l2_capability -struct v4l2_captureparm -struct v4l2_clip -struct v4l2_control -struct v4l2_crop -struct v4l2_cropcap -struct v4l2_dbg_chip_ident -struct v4l2_dbg_match -struct v4l2_dbg_register -struct v4l2_dv_enum_preset -struct v4l2_dv_preset -struct v4l2_dv_timings -struct v4l2_enc_idx -struct v4l2_enc_idx_entry -struct v4l2_encoder_cmd -struct v4l2_ext_control -struct v4l2_ext_controls -struct v4l2_fmtdesc -struct v4l2_format -struct v4l2_fract -struct v4l2_framebuffer -struct v4l2_frequency -struct v4l2_frmival_stepwise -struct v4l2_frmivalenum -struct v4l2_frmsize_discrete -struct v4l2_frmsize_stepwise -struct v4l2_frmsizeenum -struct v4l2_hw_freq_seek -struct v4l2_input -struct v4l2_jpegcompression -struct v4l2_modulator -struct v4l2_mpeg_vbi_fmt_ivtv -struct v4l2_output -struct v4l2_outputparm -struct v4l2_pix_format -struct v4l2_queryctrl -struct v4l2_querymenu -struct v4l2_rect -struct v4l2_requestbuffers -struct v4l2_sliced_vbi_cap -struct v4l2_sliced_vbi_data -struct v4l2_sliced_vbi_format -struct v4l2_standard -struct v4l2_streamparm -struct v4l2_timecode -struct v4l2_tuner -struct v4l2_vbi_format -struct v4l2_window - diff --git a/trunk/Documentation/DocBook/media/Makefile b/trunk/Documentation/DocBook/media/Makefile new file mode 100644 index 000000000000..6628b4b9cac4 --- /dev/null +++ b/trunk/Documentation/DocBook/media/Makefile @@ -0,0 +1,386 @@ +### +# Media build rules - Auto-generates media contents/indexes and *.h xml's +# + +SHELL=/bin/bash + +MEDIA_OBJ_DIR=$(objtree)/Documentation/DocBook/ +MEDIA_SRC_DIR=$(srctree)/Documentation/DocBook/media + +MEDIA_TEMP = media-entities.tmpl \ + media-indices.tmpl \ + videodev2.h.xml \ + v4l2.xml \ + audio.h.xml \ + ca.h.xml \ + dmx.h.xml \ + frontend.h.xml \ + net.h.xml \ + video.h.xml \ + +IMGFILES := $(patsubst %.b64,%, $(notdir $(shell ls $(MEDIA_SRC_DIR)/*.b64))) +OBJIMGFILES := $(addprefix $(MEDIA_OBJ_DIR)/, $(IMGFILES)) +GENFILES := $(addprefix $(MEDIA_OBJ_DIR)/, $(MEDIA_TEMP)) + +PHONY += cleanmediadocs + +cleanmediadocs: + -@rm `find $(MEDIA_OBJ_DIR) -type l` $(GENFILES) $(OBJIMGFILES) 2>/dev/null + +$(obj)/media_api.xml: $(GENFILES) FORCE + +#$(MEDIA_OBJ_DIR)/media_api.html: $(MEDIA_OBJ_DIR)/media_api.xml +#$(MEDIA_OBJ_DIR)/media_api.pdf: $(MEDIA_OBJ_DIR)/media_api.xml +#$(MEDIA_OBJ_DIR)/media_api.ps: $(MEDIA_OBJ_DIR)/media_api.xml + +V4L_SGMLS = \ + $(shell ls $(MEDIA_SRC_DIR)/v4l/*.xml|perl -ne 'print "$$1 " if (m,.*/(.*)\n,)') \ + capture.c.xml \ + keytable.c.xml \ + v4l2grab.c.xml + +DVB_SGMLS = \ + $(shell ls $(MEDIA_SRC_DIR)/dvb/*.xml|perl -ne 'print "$$1 " if (m,.*/(.*)\n,)') + +MEDIA_SGMLS = $(addprefix ./,$(V4L_SGMLS)) $(addprefix ./,$(DVB_SGMLS)) $(addprefix ./,$(MEDIA_TEMP)) + +FUNCS = \ + close \ + ioctl \ + mmap \ + munmap \ + open \ + poll \ + read \ + select \ + write \ + +IOCTLS = \ + $(shell perl -ne 'print "$$1 " if /\#define\s+([^\s]+)\s+_IO/' $(srctree)/include/linux/videodev2.h) \ + $(shell perl -ne 'print "$$1 " if /\#define\s+([^\s]+)\s+_IO/' $(srctree)/include/linux/dvb/audio.h) \ + $(shell perl -ne 'print "$$1 " if /\#define\s+([^\s]+)\s+_IO/' $(srctree)/include/linux/dvb/ca.h) \ + $(shell perl -ne 'print "$$1 " if /\#define\s+([^\s]+)\s+_IO/' $(srctree)/include/linux/dvb/dmx.h) \ + $(shell perl -ne 'print "$$1 " if /\#define\s+([^\s]+)\s+_IO/' $(srctree)/include/linux/dvb/frontend.h) \ + $(shell perl -ne 'print "$$1 " if /\#define\s+([A-Z][^\s]+)\s+_IO/' $(srctree)/include/linux/dvb/net.h) \ + $(shell perl -ne 'print "$$1 " if /\#define\s+([^\s]+)\s+_IO/' $(srctree)/include/linux/dvb/video.h) \ + $(shell perl -ne 'print "$$1 " if /\#define\s+([^\s]+)\s+_IO/' $(srctree)/include/linux/media.h) \ + $(shell perl -ne 'print "$$1 " if /\#define\s+([^\s]+)\s+_IO/' $(srctree)/include/linux/v4l2-subdev.h) \ + VIDIOC_SUBDEV_G_FRAME_INTERVAL \ + VIDIOC_SUBDEV_S_FRAME_INTERVAL \ + VIDIOC_SUBDEV_ENUM_MBUS_CODE \ + VIDIOC_SUBDEV_ENUM_FRAME_SIZE \ + VIDIOC_SUBDEV_ENUM_FRAME_INTERVAL \ + +TYPES = \ + $(shell perl -ne 'print "$$1 " if /^typedef\s+[^\s]+\s+([^\s]+)\;/' $(srctree)/include/linux/videodev2.h) \ + $(shell perl -ne 'print "$$1 " if /^}\s+([a-z0-9_]+_t)/' $(srctree)/include/linux/dvb/frontend.h) + +ENUMS = \ + $(shell perl -ne 'print "$$1 " if /^enum\s+([^\s]+)\s+/' $(srctree)/include/linux/videodev2.h) \ + $(shell perl -ne 'print "$$1 " if /^enum\s+([^\s]+)\s+/' $(srctree)/include/linux/dvb/audio.h) \ + $(shell perl -ne 'print "$$1 " if /^enum\s+([^\s]+)\s+/' $(srctree)/include/linux/dvb/ca.h) \ + $(shell perl -ne 'print "$$1 " if /^enum\s+([^\s]+)\s+/' $(srctree)/include/linux/dvb/dmx.h) \ + $(shell perl -ne 'print "$$1 " if /^enum\s+([^\s]+)\s+/' $(srctree)/include/linux/dvb/frontend.h) \ + $(shell perl -ne 'print "$$1 " if /^enum\s+([^\s]+)\s+/' $(srctree)/include/linux/dvb/net.h) \ + $(shell perl -ne 'print "$$1 " if /^enum\s+([^\s]+)\s+/' $(srctree)/include/linux/dvb/video.h) \ + $(shell perl -ne 'print "$$1 " if /^enum\s+([^\s]+)\s+/' $(srctree)/include/linux/media.h) \ + $(shell perl -ne 'print "$$1 " if /^enum\s+([^\s]+)\s+/' $(srctree)/include/linux/v4l2-mediabus.h) \ + $(shell perl -ne 'print "$$1 " if /^enum\s+([^\s]+)\s+/' $(srctree)/include/linux/v4l2-subdev.h) + +STRUCTS = \ + $(shell perl -ne 'print "$$1 " if /^struct\s+([^\s]+)\s+/' $(srctree)/include/linux/videodev2.h) \ + $(shell perl -ne 'print "$$1 " if (/^struct\s+([^\s\{]+)\s*/)' $(srctree)/include/linux/dvb/audio.h) \ + $(shell perl -ne 'print "$$1 " if (/^struct\s+([^\s]+)\s+/)' $(srctree)/include/linux/dvb/ca.h) \ + $(shell perl -ne 'print "$$1 " if (/^struct\s+([^\s]+)\s+/)' $(srctree)/include/linux/dvb/dmx.h) \ + $(shell perl -ne 'print "$$1 " if (!/dtv\_cmds\_h/ && /^struct\s+([^\s]+)\s+/)' $(srctree)/include/linux/dvb/frontend.h) \ + $(shell perl -ne 'print "$$1 " if (/^struct\s+([A-Z][^\s]+)\s+/)' $(srctree)/include/linux/dvb/net.h) \ + $(shell perl -ne 'print "$$1 " if (/^struct\s+([^\s]+)\s+/)' $(srctree)/include/linux/dvb/video.h) \ + $(shell perl -ne 'print "$$1 " if /^struct\s+([^\s]+)\s+/' $(srctree)/include/linux/media.h) \ + $(shell perl -ne 'print "$$1 " if /^struct\s+([^\s]+)\s+/' $(srctree)/include/linux/v4l2-subdev.h) \ + $(shell perl -ne 'print "$$1 " if /^struct\s+([^\s]+)\s+/' $(srctree)/include/linux/v4l2-mediabus.h) + +ERRORS = \ + E2BIG \ + EACCES \ + EAGAIN \ + EBADF \ + EBADFD \ + EBADR \ + EBADRQC \ + EBUSY \ + ECHILD \ + ECONNRESET \ + EDEADLK \ + EDOM \ + EEXIST \ + EFAULT \ + EFBIG \ + EILSEQ \ + EINIT \ + EINPROGRESS \ + EINTR \ + EINVAL \ + EIO \ + EMFILE \ + ENFILE \ + ENOBUFS \ + ENODATA \ + ENODEV \ + ENOENT \ + ENOIOCTLCMD \ + ENOMEM \ + ENOSPC \ + ENOSR \ + ENOSYS \ + ENOTSUP \ + ENOTSUPP \ + ENOTTY \ + ENXIO \ + EOPNOTSUPP \ + EOVERFLOW \ + EPERM \ + EPIPE \ + EPROTO \ + ERANGE \ + EREMOTE \ + EREMOTEIO \ + ERESTART \ + ERESTARTSYS \ + ESHUTDOWN \ + ESPIPE \ + ETIME \ + ETIMEDOUT \ + EUSERS \ + EWOULDBLOCK \ + EXDEV \ + +ESCAPE = \ + -e "s/&/\\&/g" \ + -e "s//\\>/g" + +FILENAME = \ + -e s,"^[^\/]*/",, \ + -e s/"\\.xml"// \ + -e s/"\\.tmpl"// \ + -e s/\\\./-/g \ + -e s/"^func-"// \ + -e s/"^pixfmt-"// \ + -e s/"^vidioc-"// + +# Generate references to these structs in videodev2.h.xml. +DOCUMENTED = \ + -e "s/\(enum *\)v4l2_mpeg_cx2341x_video_\([a-z]*_spatial_filter_type\)/\1v4l2_mpeg_cx2341x_video_\2<\/link>/g" \ + -e "s/\(\(enum\|struct\) *\)\(v4l2_[a-zA-Z0-9_]*\)/\1\3<\/link>/g" \ + -e "s/\(V4L2_PIX_FMT_[A-Z0-9_]\+\) /\1<\/link> /g" \ + -e ":a;s/\(linkend=\".*\)_\(.*\">\)/\1-\2/;ta" \ + -e "s/v4l2\-mpeg\-vbi\-ITV0/v4l2-mpeg-vbi-itv0-1/g" + +DVB_DOCUMENTED = \ + -e "s/\(linkend\=\"\)FE_SET_PROPERTY/\1FE_GET_PROPERTY/g" \ + -e "s,\(struct\s\+\)\([a-z0-9_]\+\)\(\s\+{\),\1\\2\<\/link\>\3,g" \ + -e "s,\(}\s\+\)\([a-z0-9_]\+_t\+\),\1\\2\<\/link\>,g" \ + -e "s,\(define\s\+\)\(DTV_[A-Z0-9_]\+\)\(\s\+[0-9]\+\),\1\\2\<\/link\>\3,g" \ + -e "s,\(DTV_IOCTL_MAX_MSGS\|dtv_cmds_h\|__.*_old\)<\/link>,\1,g" \ + -e ":a;s/\(linkend=\".*\)_\(.*\">\)/\1-\2/;ta" \ + -e "s,\(audio-mixer\|audio-karaoke\|audio-status\|ca-slot-info\|ca-descr-info\|ca-caps\|ca-msg\|ca-descr\|ca-pid\|dmx-filter\|dmx-caps\|video-system\|video-highlight\|video-spu\|video-spu-palette\|video-navi-pack\)-t,\1,g" \ + -e "s,DTV-ISDBT-LAYER[A-C],DTV-ISDBT-LAYER,g" \ + -e "s,\(define\s\+\)\([A-Z0-9_]\+\)\(\s\+_IO\),\1\\2\<\/link\>\3,g" \ + -e "s,\(__.*_OLD\)<\/link>,\1,g" \ + +# +# Media targets and dependencies +# + +install_media_images = \ + $(Q)cp $(OBJIMGFILES) $(MEDIA_OBJ_DIR)/media_api + +$(MEDIA_OBJ_DIR)/%: $(MEDIA_SRC_DIR)/%.b64 + $(Q)base64 -d $< >$@ + +$(MEDIA_OBJ_DIR)/v4l2.xml: $(OBJIMGFILES) + @$($(quiet)gen_xml) + @(ln -sf $(MEDIA_SRC_DIR)/v4l/*xml $(MEDIA_OBJ_DIR)/) + @(ln -sf $(MEDIA_SRC_DIR)/dvb/*xml $(MEDIA_OBJ_DIR)/) + +$(MEDIA_OBJ_DIR)/videodev2.h.xml: $(srctree)/include/linux/videodev2.h $(MEDIA_OBJ_DIR)/v4l2.xml + @$($(quiet)gen_xml) + @( \ + echo "") > $@ + @( \ + expand --tabs=8 < $< | \ + sed $(ESCAPE) $(DOCUMENTED) | \ + sed 's/i\.e\./&ie;/') >> $@ + @( \ + echo "") >> $@ + +$(MEDIA_OBJ_DIR)/audio.h.xml: $(srctree)/include/linux/dvb/audio.h $(MEDIA_OBJ_DIR)/v4l2.xml + @$($(quiet)gen_xml) + @( \ + echo "") > $@ + @( \ + expand --tabs=8 < $< | \ + sed $(ESCAPE) $(DVB_DOCUMENTED) | \ + sed 's/i\.e\./&ie;/') >> $@ + @( \ + echo "") >> $@ + +$(MEDIA_OBJ_DIR)/ca.h.xml: $(srctree)/include/linux/dvb/ca.h $(MEDIA_OBJ_DIR)/v4l2.xml + @$($(quiet)gen_xml) + @( \ + echo "") > $@ + @( \ + expand --tabs=8 < $< | \ + sed $(ESCAPE) $(DVB_DOCUMENTED) | \ + sed 's/i\.e\./&ie;/') >> $@ + @( \ + echo "") >> $@ + +$(MEDIA_OBJ_DIR)/dmx.h.xml: $(srctree)/include/linux/dvb/dmx.h $(MEDIA_OBJ_DIR)/v4l2.xml + @$($(quiet)gen_xml) + @( \ + echo "") > $@ + @( \ + expand --tabs=8 < $< | \ + sed $(ESCAPE) $(DVB_DOCUMENTED) | \ + sed 's/i\.e\./&ie;/') >> $@ + @( \ + echo "") >> $@ + +$(MEDIA_OBJ_DIR)/frontend.h.xml: $(srctree)/include/linux/dvb/frontend.h $(MEDIA_OBJ_DIR)/v4l2.xml + @$($(quiet)gen_xml) + @( \ + echo "") > $@ + @( \ + expand --tabs=8 < $< | \ + sed $(ESCAPE) $(DVB_DOCUMENTED) | \ + sed 's/i\.e\./&ie;/') >> $@ + @( \ + echo "") >> $@ + +$(MEDIA_OBJ_DIR)/net.h.xml: $(srctree)/include/linux/dvb/net.h $(MEDIA_OBJ_DIR)/v4l2.xml + @$($(quiet)gen_xml) + @( \ + echo "") > $@ + @( \ + expand --tabs=8 < $< | \ + sed $(ESCAPE) $(DVB_DOCUMENTED) | \ + sed 's/i\.e\./&ie;/') >> $@ + @( \ + echo "") >> $@ + +$(MEDIA_OBJ_DIR)/video.h.xml: $(srctree)/include/linux/dvb/video.h $(MEDIA_OBJ_DIR)/v4l2.xml + @$($(quiet)gen_xml) + @( \ + echo "") > $@ + @( \ + expand --tabs=8 < $< | \ + sed $(ESCAPE) $(DVB_DOCUMENTED) | \ + sed 's/i\.e\./&ie;/') >> $@ + @( \ + echo "") >> $@ + +$(MEDIA_OBJ_DIR)/media-entities.tmpl: $(MEDIA_OBJ_DIR)/v4l2.xml + @$($(quiet)gen_xml) + @( \ + echo "") >$@ + @( \ + echo -e "\n") >>$@ + @( \ + for ident in $(FUNCS) ; do \ + entity=`echo $$ident | tr _ -` ; \ + echo "$$ident()\">" \ + >>$@ ; \ + done) + @( \ + echo -e "\n") >>$@ + @( \ + for ident in $(IOCTLS) ; do \ + entity=`echo $$ident | tr _ -` ; \ + id=`grep "$$ident" $(MEDIA_OBJ_DIR)/vidioc-*.xml | sed -r s,"^.*/(.*).xml.*","\1",` ; \ + echo "$$ident\">" \ + >>$@ ; \ + done) + @( \ + echo -e "\n") >>$@ + @( \ + for ident in $(TYPES) ; do \ + entity=`echo $$ident | tr _ -` ; \ + echo "$$ident\">" >>$@ ; \ + done) + @( \ + echo -e "\n") >>$@ + @( \ + for ident in $(ENUMS) ; do \ + entity=`echo $$ident | sed -e "s/v4l2_mpeg_cx2341x_video_\([a-z]*_spatial_filter_type\)/\1/" | tr _ -` ; \ + echo "$$ident\">" >>$@ ; \ + done) + @( \ + echo -e "\n") >>$@ + @( \ + for ident in $(STRUCTS) ; do \ + entity=`echo $$ident | tr _ - | sed s/v4l2-mpeg-vbi-ITV0/v4l2-mpeg-vbi-itv0-1/g` ; \ + echo "$$ident\">" >>$@ ; \ + done) + @( \ + echo -e "\n") >>$@ + @( \ + for ident in $(ERRORS) ; do \ + echo "$$ident" \ + "error code\">" >>$@ ; \ + done) + @( \ + echo -e "\n") >>$@ + @( \ + for file in $(MEDIA_SGMLS) ; do \ + entity=`echo "$$file" | sed $(FILENAME) -e s/"^([^-]*)"/sub\1/` ; \ + if ! echo "$$file" | \ + grep -q -E -e '^(func|vidioc|pixfmt)-' ; then \ + echo "" >>$@ ; \ + fi ; \ + done) + @( \ + echo -e "\n") >>$@ + @( \ + for file in $(MEDIA_SGMLS) ; do \ + if echo "$$file" | \ + grep -q -E -e '(func|vidioc|pixfmt)-' ; then \ + entity=`echo "$$file" |sed $(FILENAME)` ; \ + echo "" >>$@ ; \ + fi ; \ + done) + +# Jade can auto-generate a list-of-tables, which includes all structs, +# but we only want data types, all types, and sorted please. +$(MEDIA_OBJ_DIR)/media-indices.tmpl: $(MEDIA_OBJ_DIR)/v4l2.xml + @$($(quiet)gen_xml) + @( \ + echo "") >$@ + @( \ + echo -e "\nList of Types") >>$@ + @( \ + for ident in $(TYPES) ; do \ + id=`echo $$ident | tr _ -` ; \ + echo "$$ident" >>$@ ; \ + done) + @( \ + for ident in $(ENUMS) ; do \ + id=`echo $$ident | sed -e "s/v4l2_mpeg_cx2341x_video_\([a-z]*_spatial_filter_type\)/\1/" | tr _ -`; \ + echo "enum $$ident" >>$@ ; \ + done) + @( \ + for ident in $(STRUCTS) ; do \ + id=`echo $$ident | tr _ - | sed s/v4l2-mpeg-vbi-ITV0/v4l2-mpeg-vbi-itv0-1/g` ; \ + echo "struct $$ident" >>$@ ; \ + done) + @( \ + echo "") >>$@ + diff --git a/trunk/Documentation/DocBook/media/bayer.png.b64 b/trunk/Documentation/DocBook/media/bayer.png.b64 new file mode 100644 index 000000000000..ccdf2bcda95c --- /dev/null +++ b/trunk/Documentation/DocBook/media/bayer.png.b64 @@ -0,0 +1,171 @@ +iVBORw0KGgoAAAANSUhEUgAAAlgAAACqCAMAAABGfcHVAAAAAXNSR0IArs4c6QAAAwBQTFRFAAIA +CAICAAQVEQEBAgsAJgECAAogAwsTAQopHQYBNAEAAAxNARQAERIQAhoDABwAABZEHRQKGRYKQw0F +ACMBACUAERwpHR4cVRAFBR5rZhADACR2JiIhBDAGAiWGgQ4AcxQABDYACSeQMSYlJykmESxYlQ4A +PSYZIS05OSsJHS5JOC8kAEMDUC8SADXLNDUzADbEAEsAADX/2RABCFIAAD/qxB0AAD//BFgAK0Vp +WT4r3hwA3RsTRERAAEf/5CIA2iYCCUv+WUgz7iIAOk5g3CgVSU5SiD8uB2sABm8AE1X/U1RQOFyL +4jkfIlz/RV98M1j+G2H/fVk23jtD4T0pXl9ieFtGcV894UIiYWJfAIwA50gOV2p+4kssO2j+dGZx +bG1qVmj/OHH/aHJzfnBX5lQ7B50AZnahdXd0AKUG5V1ARnz/6mErCqgAAKsAent46GBIW4GhAK0A +AK8B42FtALIOin9/ALUAiIOBALkAVIf/6WxWg4eBi4SKJrEAmoVtdY2geoP/rYVXhoyOqYVuJbUh +IrgWX5D/jo6J7nszP7gAsI9S63xnN70zZqO/fZzCOb4+cZr+64dy8otYnJ6b7ImDRcM56IqcWMEo +oJb/N8ZoTMRL7Y9/QchcsaOTo6eohaj/7ZqKXspXj6v9xal+oK+7d7vTUM+Afco5r7CumLTVStKV +bs9ukbb/9qx/9q9l8queoLv/e9R66beG7rDImNRhi9aDwsPAs8bWzcK2cd67jtqP5MWUodyB8b+1 +tMr/z8L/j9+kbOXWnN2ZstD7yc7Rzs7Ly9xb183UwdD/+si/qeOmvuKIx9fj4tPCtuWiqOrL+tS2 +y9v++NPK2dvZt+m0ueq80+Wo3OeSwuy/yezG+d7f/eS/z/DS3uf/6Ono4PC71O39xPb02vPZ/+nR ++Ori6e399+vt+PGz+ur65fL55/Xb4vbh7ffX/PPY8vP9+vLy6Pf36fjr/PfM8vjr//f+/vn48P36 +9vv+/vzf+fv4/fvu//z7+v7//P/7/v/8//QpxAAAAAFiS0dEAIgFHUgAAAAJcEhZcwAAFY8AABWW +AQ2TT8cAAAAHdElNRQfaCRQXGSltwbPRAAAgAElEQVR42u2dDXwU1bXAZwEJtEaNH1nbh68fpoWK +iE1ao2Bgo9RqIrEg+BIFmqLYLOlMcHHlU6DiQmrJM2jKo0QIBHgUjD5ETcQIlKq0gKDmA+UjiRAT +BCOBkGzC5re/++6987Ezszszdzc7s9jfPa2wO+zMPefc/5575t67Z5hB/0Ek/W668xckcmVmQZ5S +CvLmgshl4QCiZu+8ntCOgWlzVfrl5ZZFrl6T/VYSv9x5K3Pj9wnkh9fFFxQE6VcVqXY+8PjgH5K0 ++/0bBxDaYcsN0i+vLlTbzH9kjEknkEF3zptjLPPmXL2VwGC/nxysm+YRyc+/S2bHNYUgmtJkf5RI +vScH3HEvifz05mhqB8G68d6xJO3ecSWhHXYfYdvM99LHGEv6mEF3zmFJ5Gr49e9qVUh7O/wP/w/9 +gf4EXnKwbpjNGQs779bvktlxzULg7TCQzvDAItBvzqMD7hjrMJaxPx0Cv3OdBvqFBRZJs46xCCwi +O+xNwNfSclom6F2L4j1A/UsG1hgI1jyWUzLEKf/gX0CwevIzsvSlJoyh8IY5LmPhEFhEhsCI9b7L +oy/uI2GBRaDfPATWaGO596dDADhioJ+7PKyI5SBoF4NFZAcEa6ZjvL7MOg9MAWtPxv4aHdlfM315 +TMHy7Gg4pifN5cUxBMsPisub9dRrqHc1xBCsC7vHH6jVlQOO3eGBhccc9B+rGIWkP/ALBNYEA3uX +xxasooMGbVaWxhSs0kr9Njs8zbEE60C2UbOTTAOrR6/ZHjB/ZWzBet+gzR0xBmuHfpttsQbLIEP2 +ZpsGVrsBWMspWBQsGrEoWFEAK1UUDbBkQEkJu+Ko+WDxDRmApWmH+WCF0u/bCFYIMyIHK30CL1kZ +Y1J17wo51snhW1/4d9BdoZlgcZx7mcezzM1yemBp22E2WBzL66fsExVYjmxBxsNed1gHVra8XX2w +WBc2A/4dDbCSp4v/2PrGb1L1hkKnZ8sRNFH39cel6K1lQyFbvLcZXf3YrmWsNlg6dpgMFltc3dAN +j3+zazWrCVbKBun8ltcfS3FYBpb0D721L+uCxXoqxO5VfEMiBmsa6BL/+UxWqhZYMFytPSVd5yMU +qKxJ3jlub7f4D5f+xmqDpW2HuWCxr0r69b7N6oAV6JsTj6VYBpaciP9L0QaLVXQv13ewUqeBdjyS +ZM0/Cf6uBRbkak03uLSraBHnWfsJAJ/LEi2TIxZs7bPyZS6XZwu0XEaWCiwdO0wFi3sXgC/K4QDi +qfhEoV8QWNtT8FLK+L90gddHWwjWjNGw1dG/mgW7/jFNsFjYvd/sKnK73Kh7P4oSWHw3JOcDkJGq +BVbxBfD5IidKqpzOV/3gb05rwGJfRXEAfYM41nMKfMXpgaVhh5lgsVsAeJvj9YOMXVrE6YAlvHwa +XJSFLJPBOg8m8W2lpLwFQ5YjNFgc6t45OFCx0OVgNRu1iIVEByznu+ArIUixnPMfKGRZARaCSRpf +ENx/4wwiVgg7TASLc52CA4f4BiobCFmaYDlSusBUC8GaGgC6VgssFnavS3QtC7uXiyJYMP09o5m8 +O2GfOsW8il1TudoisF4FX8hGvy3lc1yGYAXZYSZYa+RBitvy9hyXIVij744RWP+jDRb8ygaCFLdm +x7KoJO/tyWj2Jz3/JPhjssY8lnNL91cvsNL8KOtk1fNY5iTv3D/AP2UJMaubvGvZYSJY8Jv+T04+ +8eAyBCsFdvBXVg6F2UK7k85oDoUs7N5FsiwjSsk7v5cKkqHsD3nEcm4BnznxHINTENaaCVJpcBGn +zXQilpYdZoL1iThSB+kXBNbu8VOhzFhwAICXrUzeF2RPnTpp6qy/nAG9YzWSd5gpfqZhRl/AkpjY +P0HrrtBZDQ468ZuKHVgqXdYk793Ag4zkllXyDZfq5FhadpgJVjMoxZ3g3sHrV84ZzmMB8LpjdCym +G3r/oDXdwFaD97EZHG9FxQ53VHKsadOh5K8/q51jYbDwC/FSiywFixX7/Sirk2Np2GEmWA2gHOvn +Efe3aCfvXiTA27J9lpVLOl7cLvyH2g2PaU6QSmCx4mXcXDTASkaSmpxxEvw1VXsofBLPt79/9AgU +2DJr5VDIFh2rh9IM6vXA0rDDgqGQW4b1awAN+neFvzoDvpTPjlqVvD8Nw+ToFG2wxKGQO3gUmnEk +GmAlS/M/Y5KXg5pkLbD45F3IsdhgsExO3vHS5JMV2mDp2GFJ8o71KzYCK+VhSJYjxXKw4A0DeF0P +LDF5xxOVXLQiltg384PAktaanxSmG+D9AkrtEFhWLEKzr4Jv+FsUNOizO/QjloYd5k439C6SVIID +doPRPNbTXeA96yPW6JS3AFCkWMrpBg/qXmmYcEcbLO2IxTrfBRdfcAqYOZ1WDYVozvGf0s2vkxAs +6yIWGqs/l9ZsnWtBsxFYKHa8bOEitDiPBQfhc49prhWyqHuliWhX1HIsvI1JL8eCMJ0CF1ezeBxk +iz+xLMdCSyYfzRZugbd0gCO6OVZoO0xd0lnTDT57QdiktqYDtBnOvMPYcc7CRWhpghSmWW9qgoVW +EC6u5uMGh7s3KmBNQzJ9+UnQpTnzzjmLTwHwRUVxcemWBnjnusuqRWi0ctX5cXlR8dq9HQB8s1pv +SUfDDlMjFkxPQO/H5auKy/e2of0XhmuFKQ93gTctHwpHO1ColA+GqkVovntXFQndG5WZd0m6fqe9 +bYZzej6RPvjZ6qAJUtP2vLNrpP0c53bNYXVm3rXsMHnbzFrJL727XtCbIA0srYA/pVg33SAu6dx9 +BpyQ3Teot80oujc6E6TtWBpr1mfobPRDUrzlSEfH10d3FcEbBws3+rnX7m3o6Pjm43K9jX46dpi8 +0Y9zFe891tHZ/HHFMo5zEawV/uo4+HKsVWCdli1C+2F2p7nRj+OK+O7dUeRio7vnPdVoazIr3/Ru +4dZkce2bI9vznmr51mRh2wd72e95T9HdmhzKDEt+paP4MQX9+Rf9lU60wKI//6JgUbAoWJczWMRF +QehQSMEyJWJNM7B3eYwj1re8KEhnjMGaZNSsaUVB0tcrZaPqbVaMyxiVVlcqRP22KLZljEqLlApV +q97uiG0ZowOOVzboyitmlTECK6fly2V6fr7qfXtMwTpaVKyUUtX74uYYggVAs1o9lX5F1SCGYDWB +l2bMVMos5dsZL4HwwTIQFwYrmmICWNEUM8CKnpgDFpmEAVZQM263+shsl1ZxWz/6H/oD/ukPC6x5 +s42L6s4mrEFqClgkRX8hWPeONRYzwBpN0i4Ci8iOkGB5Q7xjbP2CZGDwoX62K29Qy/U33RB8bEDS +SLUkpfUlYjE3EMmVIewIJTZ7sH4FfQHrqhuuV8tNQUduuJrpTyQ228hg/UoiByuXsN3+A64OtiPE +kauYEP0bslw4c9MD9xPIA9d/5wc/JJH+uWUlaunL6Di3P1GzPxhMaMfV920N0q8qcvVO27/34/80 +lh9/b8D9D5DIz+3B7ivZFzlYv73+AaKG7x9AaEd8YbB+IUdH5hdkddR/9H2iOuX3XrE1ujnW3O+Q +tXsdqR3PRnko/GUGQXX5jNsYjki9B5JIWvWSg3UrmVtY5jYSO9J/SV7n/efzOJKsDYI1mkSugOGp +7ai+HAsLrLEE2afj3uvI7JhzEwTrgJGEA9ZtRPXlbx/wJMlNCA/WfgNpB/4wwCJyy5PM7UQ56u0w +x2o7YtC/bSaB1eZx6xcqd9XHFKyXpLpnGuLYQBwTog+WF7wmlo3TkIzp7SB2YJ027F63p80csOoX +dXR3aksHKC2PKVjZG8BpPQEvzYgpWPkrhd1koaWnJqMmhmCdqXd3dOpJd4e73hywjngM7C2viClY +M7YbtPnKrFiDpSutWY0xBcuoe4HHNLC6KVgmgtUYa7AM8ncfBYuCRcGiYH3rwRJ+UKYLVookVoLl +0Gw3FFgh7TAZrNRkQVKNwVKXCLIIrNBuUYKlZUZfwOJYd3FpeemqZawOWI4VCwSZ6bAyYk0V2501 +VVnzIBgsDTvMBSt1+vL5WPKVtZNCgMW6iqB6pcs41lKwtNyiACt1gmjGNHWZ/IjBYj17+T0jX+9a +xGqCNT5wlZbXrQMrJUBEb+0f5D9NDwJLyw5zwUreLx4/80Z6qg5YrGvLMeykznplPXiTwZLc8o3K +LQqwkqX9cl5VdbGIwWLXXIDGNjc0dwBwSfFLRWXEAoB/NN3xLgBetw6sDeC00C5UT/5LXjVYmnaY +DNYe0IoeydgIe75GBywO/SC0t62hARXpV5S7NhcsdouWW9RgdfFm+EGXskx+hGCxW/yoTjnHch6o +wsUXdMDi053Rk94CQFFewmSwtgsp1oIz4M2xmmBp22E6WCtxapK+shv8MVUTLM8p0LurCFVRXauq +B28qWKj2hcwti3TAqklORRlWvrpMfoRgeU6Cz4VfvqLyDB+x2mA5UCV62OV3v6V8xoHpYOHC+6ic +9CUZ0CqwtO0wHaz1yWPSUfb7GngjWQss9l0UL4QSVKgevEVgofrtvFtw9Y1drA5YqenIjuT5UqGx +voCFCnzPFltzvgo+l1XADwZL6Oy/SHUIrAFLfH0azNACS8cOK8DCr1aCPVpgscXdgSjFek71yoqH +mAkWrt+u4ZbgiKWuYNcXsIrlNe9dntJlLpcxWG8pC+JYBdbDivroSrB07LAALFw9acwH2kMh7ODP +ZflN6arZ1kQsPbeEAAvbsTIaQyG79pQ8HXEpCnyHzrFSUHGJP8Ugx4Ij8InHNHIsPTtMB2vjmIyM +jKzpe5QdohwK/6GsB29R8q7rliCwxmRBM6at7z7zm2iABb7RLPCtBmsFlld2A/CplXeFtQtwuxvO +AHmxFDVY2naYDpbU+2O0wTolPPmBcwbVgzcVLB23aEw3gK7fJfd9uoEtB8f4Osw7ULnc+vpjHlYL +rIDjP1UW/jUZrIC8PFoTLB07LAML7E/XBMsnlBUv4tU7uoO1BKwK0S2VQrsezhAs0Pi71KiB5XaK +v6srZnXnsbygd/tMVWFnk8FqOYAnsb58KVt75l3PDvNzrFS0E3nCym7FWKgEqxsUadSrNxUsyS1t +wW4JcVcIBT2VrysKEWut/yIfossr0SMJOsEqVjfHelo9O2pRjvUW+FJZ9Fc9FGrbYdFdYWry/G4g +G0XUQyFOojkPUq/iiKxIr7lDodotRazBXWFqctZJ8NfkKCTvwnQsXw65Qw8sNI/FFwxPsRYs9BzH +46D3MZ2IpWOHVdMNY1JrwHwNsHTq1ZsJFgfd8oLCLYZgwZfrFfNxkc5jfSKfS2QNwBIKhv/J4oiF +XkxCFTS1F6F17LAMrGRtsFhUDz6g7A6LwFK5hbMQLG4NWl/gxJKMHXo5Ft+vdx9XFQy3BCx+ENZe +hNaxwyqwUtNPakcszyk0A87x6jmrZWXFzQULAh1wC8z0VhmClZr6RjTAQlN34O1l+HET7jUNQIa0 +BlgpDwNFOWmrJkhhqOzVWYTWtsOatcLk5DGvgTOy/Q2qJZ21F8AXq92ouoq7aK8ffMxatFao7ZZg +sPj9WMv9QHFbGCFYnAs23ftxZcWOgx3oOezGM+9BT8+waOYdDoafai9Ca9thOlh7lq+Esr4GKJJe +1SI03nzxBVSvGpW9/uwFa5Z0VG659LbOPFYjNmPlHgD+nhyV/VicVEi996NlrM5+LLG3YQ9flG+6 +Mxms3YFnGsufIBm0H0vLDqv2YwGwUXc/VvFe8XNflLo4y/ZjabpFcx5rf3qUdpCyruLqg0cOVpe7 +We2Nfo7aA9Ja4YLa2plWgbXi+EvSIvT22t1jdXaQathhMljra/BPlfe8sVK5jSloBynLeir2HqlH +5eBZ6/ZjSW6pVLtFCVa+YMaejdNTo73nnTXY8x76tfl73h2ybfcke97Z2Ox5Tybd887FZs87S7bn +PWjTu9m/0nE4ZC8dlu15d2i1e9n8SkeonfFt/5VOuoYd9Odf9OdffQKL/q6QgkXBomBRsPoKlo+C +9e8MllGzZoFV7+4EPm3pBqWxBSt7A/DqyWVQxqirpwv+H/6BRfybF9AY4zJGHt3u9YFOs8BqVlfi +KlIXXjsYU7BWOCYpC61NUr6f5NhArJ4ZYK1Pn6astKZ6mzWtNYZgnf7aYyjNPFizSeowQ7DGkgiq +QdpWf0QhR5Vv64+CcMAiaheBRWZHqFKRu1UCog7WbQOcROWucanID5RSs3+PUlrDKhVJ5BYnQ2iH +vQl8repetdTj/ZXMreyTBML+6EbHHSRyRYmv6fQZlYDI5ZnvELU7+joyO5w3PXO+6YJKuiNXr8l+ ++5hfGkv67cyjThI3329vamrqVYu61TCK2/6IzC2PwohFYAeMWB8Gd29IdZgBVwbJVVcFHxtgG0wk +tiH2IBnZB7BKCNu9NpQdwYeuZOKD1IvP7QNYSf0GBsmg4EP9mBC6XB3iWLB69viIn3ngA8+GajeU +MKR2BOtnD13nPbNuH4HUjcwl+ty+pMLgz9X1BayRZPpl9sGOPujXNKSs7kNjqSuzV5HoV1eYFOJo +U+Rg5RK6pcreBztCTgIwhF/XtKVkn0siqfPeRe6bQsLHWuROJrRjIYimNNnJqKyznyf63NakaGrn +Azk5ZJ/sIraDpM67VwCrcf1GXVnfDjtkLgANldX6gsAqA2C//vXWv0acJPBgvW/QbmUbADkQrI0b +CewoAJ1GZlSHAxYcB+r1L1gJ7773oWfQbDd4HNsBASwD7SobwgLLf3yDgWzn7TDqXtGOAxsM7fBi +sHqmTcifriP5WfkYrA6P+nlsKnFVYLBqMqZN15X0jWFFrGqXfrPFniIfAmtlhq4Zgh3PglJ3qbEd +YYBVb6Sfqx53yAbHzBm64qiFYPlAhUtfvyJPWzhgeWdkz9JtdqZjA7TjX4bdy9txoXb8jBmGdmCw +2rMMJtzemIDBanYbGFRZjMHak2VgbziP7oVgVRg98PSYuwOBZTRjzdvxLPAYPmG1OCywqosMPlRU +jcFascDgc9m7MVhGj+7tcDeEA9bp8bUGH1uwAoH1tbuDxI4LB7KBsR08WBP2AP6Rb/5QAjtkGg+W +0SNj0bOUk/hnQoe8EN9GTwRg6Q/sxzydAlh+YzuejfIzoavA+0ZgreLBemmBfgrgJQQrnGdCQ7DO +Zx8wSIh4sNoMA+EqASyyZ0IjsPYbfNPDBSuKT7EnilgSWAR2ULAoWBQsChYFi4JFwaJgfVvBajcA +azkFi4JFIxYFi4JFwaJgUbAoWBQsChZN3ilYNGJRsChYFCwKVphg5RCCVUAG1pCS6A6Fc0eSgNUB +cu4jBKsgumDFE4IVTwZWmT3KYGWC00RgxROCFU8MViEZWLklZGDlVEU3YpXlkkWswgIysKAdUQUr +s44IrLpMMrCqMkFUwVo4lzBiZf7raxKw6jK7ScECRGChaxGBBSWqYEEhAgsKCVjQDm80wUJCAhYS +ErCQRA8sLERg4e5tI7Jjd1TBQjuiiMDygegOhfCCZGD1kEUsnzeqEQvZSwSWjxAsX5TB8hGC5SME +yxdtsC77iOUnAwsKjViXU8QKC6xoRiwKFgWLRiwKFgWLgkXBomBRsChYFCwKFgWL3hVSsChYNGJR +sChYFCwKFgWLgkXBomBhsGoIwTIoR1IpgmWg4PIwk/dygw80IMUgWOsJwTKsNhNlsIolsPRlkgBW +pf7HOsIFy6jazIoVRN0r2LHbsNrMJBGsjNcaa3SkcT1fl6jBVd/coCNtFXz5nz0ZNcrrqa7emB8m +WMVtDbrtHnR1oC9e/nxdMyQ7PJUG16soDku/ao+uWxqaPTwpK2Ycr9WV8TxYxeW6+jUfcTWEo97p +8dv12z0+cwXfvUeI7Ng9vraWwA4IFliZkaWQaRMUbydk8KHAV+7WL+8t1G9vn66+nvJtFnEBfGGk +W2RQVhwXSvNDoLN0RbSj0uUhsoNUDOvaCxGmdrxKpirfOma04M/VG+jnLveFpd8Kh7Kd7Gy1IgeI +ulewo2WG6nrjs0PZwaCa4Y2tja2tjY3wL/g3fo3+j9/gF9LorpQO1Xt+jPaDdnxuo3AJ8bKyNkjr +lIuxv81AhM81tirsaNWyo43wepHqp37fKeQyLcdb9OT4eSEHazO4XpjqAf1moVZ8uz4jt3TyZpw3 +uh62gyFSzQ8uf/H/m9jxbyIMdQEVChYVChYVChYVKhQsKhQsKhQsKlQoWFQoWFQoWCD0g0V8fvUL +2SdDbKDwmqqu1xtQQd1SqCNBp/WYrKDkpR5/kEt9BKf5zFscUDTfE/zSq+llXwTdq4hYWwvmIlla +8o786M6SwmeXbj6ruOjhrYVzl5YdEo41FSycK5z5odnfhJadJagZ6XG7hULLSBm0ZFNXoDgiSi86 +benmdtO/qYGGsGuqeJfOXbi0rJVfUtonOHnp5h6VlxeqvRxlrsokXTa3KjpzHWq6Sd408vKzopel +M5eWHIpsKExjBIkfd1LEc93wBHxo2JRuiebD9wyxoWOJ4w7hz9QxktinmNp3LYtvxi3HD1si+EFs +2JY4hf9yyHXhu9ILehcPF0/zmxey4IV7BXfFDVvSjRvKlanzIj5SKB0Y9g7Q8rIpYKUxoZremZYg +eOuk6JqAlzerzhTACBesTGZkDpTJsKlbeANbHoH43Dc5J3M4w9wiXvP5BCYOHUuzMQO3ocel1jHx +OVgyYf89ZOJ37vBQ6JP7YDsJjO0hXsN4JlNs+SkcIhi7qAsDj3Sh074cJZ3G3GVaz6H9C7Ahu+Cu +u86iYwVMkqBOAtNvG3JNCX9kMjww6JD8tEzey2dN857QvTk5sH8HviN00xM2Ji5tMvZfIj7mlbyc +hrzs589ME8Eg9Z8KrBL+xbqh/V7EcX0iE7fkEPrWt6yTrvmcjZnyYQ+Ol6OYQTU4YsVLEaV/3Aem +9dyXI5jEzdjxdYttzO9xOLIzTfwQ9Hx/rEsVIz7bvOURW2KNeNqSJv60BHiaecPgKNjQId4PCcyD +PFjis5EPj7Jh1kqYTOHACPgRv+RlIHj5Qb95YJWIugy1Pci/eo6JEzpz3XAhdEB3DdvcJHr5KcWZ +6wbzYIQNlvjA9CeY3yKbN6GQJMh7gxkcGE8k2J4Sj50bxUzhwRLzu97/Mq/n4LWlqAnxjsOv7cw+ +4V+HM1sxWElisnnpZ7YXkRXPMbdIucEm4bToC24oUcpON/W3HVKABb66FkeoEiYNKojo2cQMA7yX +A6dBL79jHliFUjPMNThlec8WJ4FyYiizJNjLiScVSCIwIgfLDxZiPHqHMjI+JyIdusAjzDi/6Enw +pu2hs3Kw/HJPRrvjDg+OCzj93IjEDySwvH6o2HDbZgVYXYI9h69gtgXgHJG4zaxtWS3XMbJrTxy4 +TeUO/jvAg4XzdeYWrNJ1zIuB9GFi3IsWgNXL2M6jUW8UzFykf3+OeQpqj73slcYI6OUAWH6QRxo3 +QkescyP6ob54b8A1rYF/PXcIJiz+iz/jUwW+oUsfnvdaFrH+zPwk0AG9hw95gWwohN91/EWTR6x7 +bEuE0wLSiawwR95kftKtcpccrBPX9jskHwrBRD4rhNHjrPo08yPWoPNYpUEBiADsTOyuu4CkQm8n +9LIsYn05ot8HEYGVu68KyrpRcLSDt3+/tj0l3HBCEW6Ot18x7JR0DM+6+GU5Vi/MsfaY1XG/Zv4X +KNThc6wSrPPihMRtQJFj9T5iG/gBPu2/g08zI3VXNCT0TagcKw0rvPUe20N4UgJ62a/2sgU5Fmpz +Q/9xFwKdqeVldGYeD8bQuCWE92YqsEQZ181rsjTohHXMfUGXhmAVYMk19a5wKBNiGiU+XtSZn26o +YobMRark5eK7Qi867R1ggfjguLI56GgBM5JXJwfeSgt3haLGiYcwj6G8bBJYabwu8IZ0IJ4oeoZ5 +POj7EexlnwqMSMCyJyEZYkP5G5q+4BH3jeQlTYjkXlxCPAkfS6rDYEkTHQ+1muYaO1OHo03VEL7l +PB6sJEFnfGsMwZJ0ieMjwRCmisdfUDgH+MzpuJH47gGAJqGhTHisIDB3lMinEBAsXuEEG8zZ/TIv +JwW8bBJY4pyfeLeQJ8bTNEFlH/DFq7xcgM+UgxF5jtWybiiDponE75JPpAb75T4erCTh4D4MVi6U +oTbhZtskuVn4LolzoJkibcJEBx6Jqhg7VCUnIT5xyVnxtHeEWMZLmllgpQkRS5wvTsJgjczLzc0c +HD9MnPUXcyzv4XuYRMXXV+ZlsyIWdE1mf2bcZiHuSBFLRA7mqwlBXg4Moi3rbmYe8kcOFkzuEq75 +AA23S7AGvq1QqgqZIfD17sHj+ByrCh3cahfAQkc+HYxaNW+x60Zh9G/C6uSIYO0Tb/ZtP+mRcqxN +trglqtSMPy3XLLACORbvLogUBiuXny5KFO9MA3eFJ0b0ezHotELIo6k5Vu9E5hYxY39ezLFwZ5bF +I7DUXs5RpP0QjJo+gNUDhjNl6DZHfldYh8E68bNB2xTD077AXeGmBHT3ahpZf2YelC2eFirAQvdT +TL/zgbvC51CGhXVR3hVuNQss3JDM9io5WLA3+21TgyVMCilvJveZCVYh8si5UWjePYBJICXGEes5 +6OUumZdz5Gm/X5gtjBSsLhif4fmXZPNYfvAhAgvNYz0kW65UgAWet9leNAsrPzjcP64m8G6pGqxe +xtYjm26YaBO6Ep4mZu9ePygzD6xzV0jzWLChrXKwwLkRaNxTgCVOcp2TzbMhL5sLFpozGMrccoEP +sqOYpwJN92CwdvZPVHhZAVaXlEhGOBQKcUk+lQzvB6/FlPfv91RgkeVaOVj+XvhlOGkWWTiIB67+ +hHoofNP23XYZWOew+/zq0xabB5Ziih+6Sw4WzhOE5F1U4NJE2+9BsJeHmD6Ptckm8iRfWgGH8awp +dNddSi+LYHl5MPZHApYAZssjDB58YSOJwlrhzidsaAUCyNYKfXWLb7bZ6gJgecGJwba7zNs+EFjF +atl5j42ZrJggPTwUeyswQWjMGXEAAAJqSURBVPpef366gV8rPCuddp9pYPGLkry7HrEx4+RgoTUo +YbohU5zzs/FBLMjLfpPBgtFcXISeKK4Vnt+3OMEWh159qvTy44oJ0ntIJxxUYKUVoNu7nOEMjs5e +YXcDOmJjmHHC1/F5G9rdkItWv6EKfsXM+3MMs80srsR1d3hnAxWMm9LKg5WTh3TOTGDUM++PMGgM +9PrA4VH8adiKKa3m6Ye2UUjuwhMvAbBganNLK45YSdjJuXg/hh97+Z4QXjYTLDgY3iXQ/QQT6Mxx +7wS8PFn08ln+fhI7OedmJo5wUjD0fixmmLRss244nhey2ccJW3jwfqwEfr/OyCU9wv21CNalEcwg +8wZDaacQY59yiE/NmcBWITznt5Wxi2DBACJsQhH3Y/GnmSi968SGkLu8aD9WjrSM0h9veAjsx7Lz +82z8Nq74wGlmgZXGzBW/AZsYKbkS92PF4xiBs4qWxUPkXvaFBCMcsEpy87Aod1ruLJlbwG/HlO0w +hMcKln4oZDdNuXmBT+dONm8XKcqYdhbCljdLq2sFvMoFS/mOBHU5c6UAsi53ssiR+jTzBDaUt7Ss +SbwJzSmTdH8+93GYX1TlCE4uUygDvZyn9nKUwSrJqZLePZO7tNsrtHUYdTDuTG9IL/tkYBAvORnu +eff6Zb0qSo/OcADM3Pfu1VHWq3fAr2djlNlXudQXdCTYjV4L6uCodfEG97RwSL7nXa2zPwKwqFCJ +mlCwqFCwqFCwqFCwqFChYFGhYFGhYFGhQsGiQsGiQsGiQoWCRYWCRYWCRYUKBYsKBYsKBYsKFQoW +FQoWFQoWFSoULCqXq/w/gbudjI6bMwYAAAAASUVORK5CYII= diff --git a/trunk/Documentation/DocBook/media/crop.gif.b64 b/trunk/Documentation/DocBook/media/crop.gif.b64 new file mode 100644 index 000000000000..11d936ae72e8 --- /dev/null +++ b/trunk/Documentation/DocBook/media/crop.gif.b64 @@ -0,0 +1,105 @@ +R0lGODlhuQJGAeMAAAAAAH9/fwCvAP8AANEA0dEAAK8Ar////wCOAAAA0QAA//////////////// +/////ywAAAAAuQJGAQAE/vDISau9OOvNu/9gKI5kaZ5oqq5s675wLM90bd94ru987//AoHBILBqP +yKRyyWw6n9CodEqtWq/YrHbL7Xq/4LB4TC6bz+i0es1uu9/wuHxOr9vv+Lx+z+/7/4CBgoOEhYaH +iImKi4yNjo+QkZKTlJWWl5iZmpucnZ6foKGio6SlpqeoqaqrrK2ur7CxsrO0tba3uLm6gQC9vr/A +wcLDxMXGx8jJysvMzc7P0NHS09TV1tfYxbth2d3e3+DRAePk5ebn6Onl4ezt7u3q8fLqANtg7/j5 ++s/z/f4B+wIKHAjsn8F09ex5IciwobuDEM1Bi0ixosWLGDNqrJhQIZdk/htDihxJsiTJiSZTqlzJ +MmNHj1q+tRznsKbNmzhzDoz3EiYWmTN7+vQJgOfQmN5mAjzKtCg9pj+TBoU61ClCqlaAthSKVZdV +dFy7NtHKMqxYW1/PmT2bhOzKtWxlpZUYF4pblXDrvpq7Tq+Tu+UGCB5MuLDhw4gTK17MuLHjx5Aj +S55MubLly5gza95MmVxev0EAkxsg8jNoVXNJ0zy9RPQ41RtNsz6V2vPstlLTwdYo+zap2qt9G3Ed +YLdL4bGAL0VOhLhxjL2Zf1IeXboM56Wtt6KuPXRudM8vVu+eiTt5H9hDjj9vyfyIXrTW80gfO4OC ++/jz69/Pv7///wAG/ijggAQWaOCBCCao4IIMNujggRe4J4IwBxBg4YUYZqjhhhx26OGHIIYo4ogk +loihMBbi1k084VlklgLsWQKjBRJqgIwEBJRyY4UqZsNidhjMGOMkQlLgnjERwkdBjuVpk2QFTB5B +H2/2DUlJkRNYhWQKUTKyJQpdFjHlcUFaSaQxo9nGQph/fCkDm0OMCV2VZh7iZpbnwCYfBnDKcecO +fXq3ojotckRnnXr8SQGWEtQIphuKEhEoEHKKdygHCUiQ6QEJdDrEphWA2oGo3UXaAaMHOHrCpFmY +2gSr6H2XJ5AXoHqBp5xyuimpPfCa6we+6uWqCaiqagKsTAxrBbLz/slqTqEUvWgBqLviSqqvnXpq +rbbZTpDtt9ziSsG3unKraabkltutWMq+UOyswa3A7A/tfjGvDpW6eKm3v+a667i38vvvuQLzW7Cm +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 diff --git a/trunk/Documentation/DocBook/dvb/.gitignore b/trunk/Documentation/DocBook/media/dvb/.gitignore similarity index 100% rename from trunk/Documentation/DocBook/dvb/.gitignore rename to trunk/Documentation/DocBook/media/dvb/.gitignore diff --git a/trunk/Documentation/DocBook/dvb/audio.xml b/trunk/Documentation/DocBook/media/dvb/audio.xml similarity index 79% rename from trunk/Documentation/DocBook/dvb/audio.xml rename to trunk/Documentation/DocBook/media/dvb/audio.xml index eeb96b8a0864..d64386237207 100644 --- a/trunk/Documentation/DocBook/dvb/audio.xml +++ b/trunk/Documentation/DocBook/media/dvb/audio.xml @@ -14,17 +14,17 @@ the omission of the audio and video device. audio device. -
+
audio_stream_source_t The audio stream source is set through the AUDIO_SELECT_SOURCE call and can take the following values, depending on whether we are replaying from an internal (demux) or external (user write) source. - typedef enum { - AUDIO_SOURCE_DEMUX, - AUDIO_SOURCE_MEMORY - } audio_stream_source_t; +typedef enum { + AUDIO_SOURCE_DEMUX, + AUDIO_SOURCE_MEMORY +} audio_stream_source_t; AUDIO_SOURCE_DEMUX selects the demultiplexer (fed either by the frontend or the DVR device) as the source of the video stream. If AUDIO_SOURCE_MEMORY @@ -33,61 +33,64 @@ call.
-
+
audio_play_state_t The following values can be returned by the AUDIO_GET_STATUS call representing the state of audio playback. - typedef enum { - AUDIO_STOPPED, - AUDIO_PLAYING, - AUDIO_PAUSED - } audio_play_state_t; +typedef enum { + AUDIO_STOPPED, + AUDIO_PLAYING, + AUDIO_PAUSED +} audio_play_state_t;
-
+
audio_channel_select_t The audio channel selected via AUDIO_CHANNEL_SELECT is determined by the following values. - typedef enum { - AUDIO_STEREO, - AUDIO_MONO_LEFT, - AUDIO_MONO_RIGHT, - } audio_channel_select_t; +typedef enum { + AUDIO_STEREO, + AUDIO_MONO_LEFT, + AUDIO_MONO_RIGHT, + AUDIO_MONO, + AUDIO_STEREO_SWAPPED +} audio_channel_select_t;
-
+
struct audio_status The AUDIO_GET_STATUS call returns the following structure informing about various states of the playback operation. - typedef struct audio_status { - boolean AV_sync_state; - boolean mute_state; - audio_play_state_t play_state; - audio_stream_source_t stream_source; - audio_channel_select_t channel_select; - boolean bypass_mode; - } audio_status_t; +typedef struct audio_status { + boolean AV_sync_state; + boolean mute_state; + audio_play_state_t play_state; + audio_stream_source_t stream_source; + audio_channel_select_t channel_select; + boolean bypass_mode; + audio_mixer_t mixer_state; +} audio_status_t;
-
+
struct audio_mixer The following structure is used by the AUDIO_SET_MIXER call to set the audio volume. - typedef struct audio_mixer { - unsigned int volume_left; - unsigned int volume_right; - } audio_mixer_t; +typedef struct audio_mixer { + unsigned int volume_left; + unsigned int volume_right; +} audio_mixer_t;
@@ -109,17 +112,17 @@ bits set according to the hardwares capabilities.
-
+
struct audio_karaoke The ioctl AUDIO_SET_KARAOKE uses the following format: - typedef - struct audio_karaoke{ - int vocal1; - int vocal2; - int melody; - } audio_karaoke_t; +typedef +struct audio_karaoke { + int vocal1; + int vocal2; + int melody; +} audio_karaoke_t; If Vocal1 or Vocal2 are non-zero, they get mixed into left and right t at 70% each. If both, Vocal1 and Vocal2 are non-zero, Vocal1 gets mixed into the left channel and Vocal2 into the @@ -128,7 +131,7 @@ and right.
-
+
audio attributes The following attributes can be set by a call to AUDIO_SET_ATTRIBUTES: @@ -217,21 +220,13 @@ and right. (blocking mode is the default) -ERRORS - +RETURN VALUE ENODEV Device driver not loaded/available. - - -EINTERNAL - -Internal error. @@ -276,8 +271,7 @@ and right. File descriptor returned by a previous call to open(). -ERRORS - +RETURN VALUE EBADF @@ -332,8 +326,7 @@ and right. Size of buf. -ERRORS - +RETURN VALUE EPERM @@ -358,7 +351,7 @@ and right. -
AUDIO_STOP DESCRIPTION @@ -391,25 +384,9 @@ role="subsection">AUDIO_STOP Equals AUDIO_STOP for this command. -ERRORS - - -EBADF - -fd is not a valid open file descriptor - - -EINTERNAL - -Internal error. - - +&return-value-dvb; -
AUDIO_PLAY DESCRIPTION @@ -443,25 +420,9 @@ role="subsection">AUDIO_PLAY Equals AUDIO_PLAY for this command. -ERRORS - - -EBADF - -fd is not a valid open file descriptor - - -EINTERNAL - -Internal error. - - +&return-value-dvb; -
AUDIO_PAUSE DESCRIPTION @@ -503,25 +464,49 @@ role="subsection">AUDIO_PAUSE Equals AUDIO_PAUSE for this command. -ERRORS +&return-value-dvb; + +
AUDIO_CONTINUE +DESCRIPTION + + +This ioctl restarts the decoding and playing process previously paused +with AUDIO_PAUSE command. + + +It only works if the stream were previously stopped with AUDIO_PAUSE + + +SYNOPSIS + + +int ioctl(int fd, int request = AUDIO_CONTINUE); + + +PARAMETERS -EBADF +int fd -fd is not a valid open file descriptor. +File descriptor returned by a previous call to open(). -EINTERNAL +int request -Internal error. +Equals AUDIO_CONTINUE for this command. +&return-value-dvb; -
AUDIO_SELECT_SOURCE DESCRIPTION @@ -567,32 +552,9 @@ role="subsection">AUDIO_SELECT_SOURCE stream. -ERRORS - - -EBADF - -fd is not a valid open file descriptor. - - -EINTERNAL - -Internal error. - - -EINVAL - -Illegal input parameter. - - +&return-value-dvb; -
AUDIO_SET_MUTE DESCRIPTION @@ -646,32 +608,9 @@ role="subsection">AUDIO_SET_MUTE FALSE Audio Un-mute -ERRORS - - -EBADF - -fd is not a valid open file descriptor. - - -EINTERNAL - -Internal error. - - -EINVAL - -Illegal input parameter. - - +&return-value-dvb; -
AUDIO_SET_AV_SYNC DESCRIPTION @@ -725,32 +664,9 @@ role="subsection">AUDIO_SET_AV_SYNC FALSE AV-sync OFF -ERRORS - - -EBADF - -fd is not a valid open file descriptor. - - -EINTERNAL - -Internal error. - - -EINVAL - -Illegal input parameter. - - +&return-value-dvb; -
AUDIO_SET_BYPASS_MODE DESCRIPTION @@ -808,32 +724,9 @@ role="subsection">AUDIO_SET_BYPASS_MODE FALSE Bypass is enabled -ERRORS - - -EBADF - -fd is not a valid open file descriptor. - - -EINTERNAL - -Internal error. - - -EINVAL - -Illegal input parameter. - - +&return-value-dvb; -
AUDIO_CHANNEL_SELECT DESCRIPTION @@ -877,32 +770,9 @@ role="subsection">AUDIO_CHANNEL_SELECT stereo). -ERRORS - - -EBADF - -fd is not a valid open file descriptor. - - -EINTERNAL - -Internal error. - - -EINVAL - -Illegal input parameter ch. - - +&return-value-dvb; -
AUDIO_GET_STATUS DESCRIPTION @@ -945,32 +815,9 @@ role="subsection">AUDIO_GET_STATUS Returns the current state of Audio Device. -ERRORS - - -EBADF - -fd is not a valid open file descriptor. - - -EINTERNAL - -Internal error. - - -EFAULT - -status points to invalid address. - - +&return-value-dvb; -
AUDIO_GET_CAPABILITIES DESCRIPTION @@ -1013,32 +860,9 @@ role="subsection">AUDIO_GET_CAPABILITIES Returns a bit array of supported sound formats. -ERRORS - - -EBADF - -fd is not a valid open file descriptor. - - -EINTERNAL - -Internal error. - - -EFAULT - -cap points to an invalid address. - - +&return-value-dvb; -
AUDIO_CLEAR_BUFFER DESCRIPTION @@ -1072,25 +896,9 @@ role="subsection">AUDIO_CLEAR_BUFFER Equals AUDIO_CLEAR_BUFFER for this command. -ERRORS - - -EBADF - -fd is not a valid open file descriptor. - - -EINTERNAL - -Internal error. - - +&return-value-dvb; -
AUDIO_SET_ID DESCRIPTION @@ -1136,32 +944,9 @@ role="subsection">AUDIO_SET_ID audio sub-stream id -ERRORS - - -EBADF - -fd is not a valid open file descriptor. - - -EINTERNAL - -Internal error. - - -EINVAL - -Invalid sub-stream id. - - +&return-value-dvb; -
AUDIO_SET_MIXER DESCRIPTION @@ -1202,32 +987,9 @@ role="subsection">AUDIO_SET_MIXER mixer settings. -ERRORS - - -EBADF - -fd is not a valid open file descriptor. - - -EINTERNAL - -Internal error. - - -EFAULT - -mix points to an invalid address. - - +&return-value-dvb; -
AUDIO_SET_STREAMTYPE DESCRIPTION @@ -1270,17 +1032,9 @@ role="subsection">AUDIO_SET_STREAMTYPE stream type -ERRORS - +&return-value-dvb; -EBADF - -fd is not a valid open file descriptor - - EINVAL @@ -1288,7 +1042,7 @@ role="subsection">AUDIO_SET_STREAMTYPE -
AUDIO_SET_EXT_ID DESCRIPTION @@ -1330,17 +1084,9 @@ role="subsection">AUDIO_SET_EXT_ID audio sub_stream_id -ERRORS - +&return-value-dvb; -EBADF - -fd is not a valid open file descriptor - - EINVAL @@ -1348,7 +1094,7 @@ role="subsection">AUDIO_SET_EXT_ID -
AUDIO_SET_ATTRIBUTES DESCRIPTION @@ -1391,17 +1137,9 @@ role="subsection">AUDIO_SET_ATTRIBUTES audio attributes according to section ?? -ERRORS - +&return-value-dvb; -EBADF - -fd is not a valid open file descriptor - - EINVAL @@ -1409,7 +1147,7 @@ role="subsection">AUDIO_SET_ATTRIBUTES -
AUDIO_SET_KARAOKE DESCRIPTION @@ -1422,7 +1160,7 @@ role="subsection">AUDIO_SET_KARAOKE -int ioctl(fd, int request = AUDIO_SET_STREAMTYPE, +int ioctl(fd, int request = AUDIO_SET_KARAOKE, audio_karaoke_t ⋆karaoke); @@ -1440,7 +1178,7 @@ role="subsection">AUDIO_SET_KARAOKE int request -Equals AUDIO_SET_STREAMTYPE for this +Equals AUDIO_SET_KARAOKE for this command. AUDIO_SET_KARAOKE karaoke settings according to section ??. -ERRORS - +&return-value-dvb; -EBADF - -fd is not a valid open file descriptor - - EINVAL diff --git a/trunk/Documentation/DocBook/dvb/ca.xml b/trunk/Documentation/DocBook/media/dvb/ca.xml similarity index 67% rename from trunk/Documentation/DocBook/dvb/ca.xml rename to trunk/Documentation/DocBook/media/dvb/ca.xml index b1f1d2fad654..5c4adb44b1c1 100644 --- a/trunk/Documentation/DocBook/dvb/ca.xml +++ b/trunk/Documentation/DocBook/media/dvb/ca.xml @@ -8,75 +8,85 @@ including linux/dvb/ca.h in your application. CA Data Types -
+
ca_slot_info_t - /⋆ slot interface types and info ⋆/ +typedef struct ca_slot_info { + int num; /⋆ slot number ⋆/ - typedef struct ca_slot_info_s { - int num; /⋆ slot number ⋆/ + int type; /⋆ CA interface this slot supports ⋆/ +#define CA_CI 1 /⋆ CI high level interface ⋆/ +#define CA_CI_LINK 2 /⋆ CI link layer level interface ⋆/ +#define CA_CI_PHYS 4 /⋆ CI physical layer level interface ⋆/ +#define CA_DESCR 8 /⋆ built-in descrambler ⋆/ +#define CA_SC 128 /⋆ simple smart card interface ⋆/ - int type; /⋆ CA interface this slot supports ⋆/ - #define CA_CI 1 /⋆ CI high level interface ⋆/ - #define CA_CI_LINK 2 /⋆ CI link layer level interface ⋆/ - #define CA_CI_PHYS 4 /⋆ CI physical layer level interface ⋆/ - #define CA_SC 128 /⋆ simple smart card interface ⋆/ - - unsigned int flags; - #define CA_CI_MODULE_PRESENT 1 /⋆ module (or card) inserted ⋆/ - #define CA_CI_MODULE_READY 2 - } ca_slot_info_t; + unsigned int flags; +#define CA_CI_MODULE_PRESENT 1 /⋆ module (or card) inserted ⋆/ +#define CA_CI_MODULE_READY 2 +} ca_slot_info_t;
-
+
ca_descr_info_t - - typedef struct ca_descr_info_s { - unsigned int num; /⋆ number of available descramblers (keys) ⋆/ - unsigned int type; /⋆ type of supported scrambling system ⋆/ - #define CA_ECD 1 - #define CA_NDS 2 - #define CA_DSS 4 - } ca_descr_info_t; + +typedef struct ca_descr_info { + unsigned int num; /⋆ number of available descramblers (keys) ⋆/ + unsigned int type; /⋆ type of supported scrambling system ⋆/ +#define CA_ECD 1 +#define CA_NDS 2 +#define CA_DSS 4 +} ca_descr_info_t;
-
-ca_cap_t - - typedef struct ca_cap_s { - unsigned int slot_num; /⋆ total number of CA card and module slots ⋆/ - unsigned int slot_type; /⋆ OR of all supported types ⋆/ - unsigned int descr_num; /⋆ total number of descrambler slots (keys) ⋆/ - unsigned int descr_type;/⋆ OR of all supported types ⋆/ +
+ca_caps_t + +typedef struct ca_caps { + unsigned int slot_num; /⋆ total number of CA card and module slots ⋆/ + unsigned int slot_type; /⋆ OR of all supported types ⋆/ + unsigned int descr_num; /⋆ total number of descrambler slots (keys) ⋆/ + unsigned int descr_type;/⋆ OR of all supported types ⋆/ } ca_cap_t;
-
+
ca_msg_t - - /⋆ a message to/from a CI-CAM ⋆/ - typedef struct ca_msg_s { - unsigned int index; - unsigned int type; - unsigned int length; - unsigned char msg[256]; - } ca_msg_t; + +/⋆ a message to/from a CI-CAM ⋆/ +typedef struct ca_msg { + unsigned int index; + unsigned int type; + unsigned int length; + unsigned char msg[256]; +} ca_msg_t;
-
+
ca_descr_t - - typedef struct ca_descr_s { - unsigned int index; - unsigned int parity; - unsigned char cw[8]; - } ca_descr_t; + +typedef struct ca_descr { + unsigned int index; + unsigned int parity; + unsigned char cw[8]; +} ca_descr_t; -
+
+ +
+ca-pid + +typedef struct ca_pid { + unsigned int pid; + int index; /⋆ -1 == disable⋆/ +} ca_pid_t; + +
+
CA Function Calls @@ -148,8 +158,7 @@ including linux/dvb/ca.h in your application. (blocking mode is the default) -ERRORS - +RETURN VALUE ENODEV @@ -207,8 +216,7 @@ including linux/dvb/ca.h in your application. File descriptor returned by a previous call to open(). -ERRORS - +RETURN VALUE EBADF diff --git a/trunk/Documentation/DocBook/dvb/demux.xml b/trunk/Documentation/DocBook/media/dvb/demux.xml similarity index 84% rename from trunk/Documentation/DocBook/dvb/demux.xml rename to trunk/Documentation/DocBook/media/dvb/demux.xml index 1b8c4e9835b9..37c17908aa40 100644 --- a/trunk/Documentation/DocBook/dvb/demux.xml +++ b/trunk/Documentation/DocBook/media/dvb/demux.xml @@ -7,15 +7,19 @@ accessed by including linux/dvb/dmx.h in your app
Demux Data Types -
+
dmx_output_t - - typedef enum - { - DMX_OUT_DECODER, - DMX_OUT_TAP, - DMX_OUT_TS_TAP - } dmx_output_t; + +typedef enum +{ + DMX_OUT_DECODER, /⋆ Streaming directly to decoder. ⋆/ + DMX_OUT_TAP, /⋆ Output going to a memory buffer ⋆/ + /⋆ (to be retrieved via the read command).⋆/ + DMX_OUT_TS_TAP, /⋆ Output multiplexed into a new TS ⋆/ + /⋆ (to be retrieved by reading from the ⋆/ + /⋆ logical DVR device). ⋆/ + DMX_OUT_TSDEMUX_TAP /⋆ Like TS_TAP but retrieved from the DMX device ⋆/ +} dmx_output_t; DMX_OUT_TAP delivers the stream output to the demux device on which the ioctl is called. @@ -26,96 +30,95 @@ specified.
-
+
dmx_input_t - - typedef enum - { - DMX_IN_FRONTEND, - DMX_IN_DVR - } dmx_input_t; + +typedef enum +{ + DMX_IN_FRONTEND, /⋆ Input from a front-end device. ⋆/ + DMX_IN_DVR /⋆ Input from the logical DVR device. ⋆/ +} dmx_input_t;
-
+
dmx_pes_type_t - - typedef enum - { - DMX_PES_AUDIO, - DMX_PES_VIDEO, - DMX_PES_TELETEXT, - DMX_PES_SUBTITLE, - DMX_PES_PCR, - DMX_PES_OTHER - } dmx_pes_type_t; - -
+ +typedef enum +{ + DMX_PES_AUDIO0, + DMX_PES_VIDEO0, + DMX_PES_TELETEXT0, + DMX_PES_SUBTITLE0, + DMX_PES_PCR0, -
-dmx_event_t - - typedef enum - { - DMX_SCRAMBLING_EV, - DMX_FRONTEND_EV - } dmx_event_t; - -
+ DMX_PES_AUDIO1, + DMX_PES_VIDEO1, + DMX_PES_TELETEXT1, + DMX_PES_SUBTITLE1, + DMX_PES_PCR1, -
-dmx_scrambling_status_t - - typedef enum - { - DMX_SCRAMBLING_OFF, - DMX_SCRAMBLING_ON - } dmx_scrambling_status_t; + DMX_PES_AUDIO2, + DMX_PES_VIDEO2, + DMX_PES_TELETEXT2, + DMX_PES_SUBTITLE2, + DMX_PES_PCR2, + + DMX_PES_AUDIO3, + DMX_PES_VIDEO3, + DMX_PES_TELETEXT3, + DMX_PES_SUBTITLE3, + DMX_PES_PCR3, + + DMX_PES_OTHER +} dmx_pes_type_t;
-
+
struct dmx_filter typedef struct dmx_filter - { - uint8_t filter[DMX_FILTER_SIZE]; - uint8_t mask[DMX_FILTER_SIZE]; - } dmx_filter_t; +{ + __u8 filter[DMX_FILTER_SIZE]; + __u8 mask[DMX_FILTER_SIZE]; + __u8 mode[DMX_FILTER_SIZE]; +} dmx_filter_t;
-
+
struct dmx_sct_filter_params - - struct dmx_sct_filter_params - { - uint16_t pid; - dmx_filter_t filter; - uint32_t timeout; - uint32_t flags; - #define DMX_CHECK_CRC 1 - #define DMX_ONESHOT 2 - #define DMX_IMMEDIATE_START 4 - }; + +struct dmx_sct_filter_params +{ + __u16 pid; + dmx_filter_t filter; + __u32 timeout; + __u32 flags; +#define DMX_CHECK_CRC 1 +#define DMX_ONESHOT 2 +#define DMX_IMMEDIATE_START 4 +#define DMX_KERNEL_CLIENT 0x8000 +};
-
+
struct dmx_pes_filter_params - - struct dmx_pes_filter_params - { - uint16_t pid; - dmx_input_t input; - dmx_output_t output; - dmx_pes_type_t pes_type; - uint32_t flags; - }; + +struct dmx_pes_filter_params +{ + __u16 pid; + dmx_input_t input; + dmx_output_t output; + dmx_pes_type_t pes_type; + __u32 flags; +};
-
+
struct dmx_event struct dmx_event @@ -130,19 +133,44 @@ specified.
-
+
struct dmx_stc - - struct dmx_stc { - unsigned int num; /⋆ input : which STC? 0..N ⋆/ - unsigned int base; /⋆ output: divisor for stc to get 90 kHz clock ⋆/ - uint64_t stc; /⋆ output: stc in 'base'⋆90 kHz units ⋆/ - }; + +struct dmx_stc { + unsigned int num; /⋆ input : which STC? 0..N ⋆/ + unsigned int base; /⋆ output: divisor for stc to get 90 kHz clock ⋆/ + __u64 stc; /⋆ output: stc in 'base'⋆90 kHz units ⋆/ +}; -
+
+
+struct dmx_caps + + typedef struct dmx_caps { + __u32 caps; + int num_decoders; +} dmx_caps_t; + +
+ +
+enum dmx_source_t + +typedef enum { + DMX_SOURCE_FRONT0 = 0, + DMX_SOURCE_FRONT1, + DMX_SOURCE_FRONT2, + DMX_SOURCE_FRONT3, + DMX_SOURCE_DVR0 = 16, + DMX_SOURCE_DVR1, + DMX_SOURCE_DVR2, + DMX_SOURCE_DVR3 +} dmx_source_t; +
+
Demux Function Calls @@ -211,8 +239,7 @@ specified. (blocking mode is the default) -ERRORS - +RETURN VALUE ENODEV @@ -271,8 +298,7 @@ specified. File descriptor returned by a previous call to open(). -ERRORS - +RETURN VALUE EBADF @@ -353,8 +379,7 @@ specified. Size of buf. -ERRORS - +RETURN VALUE EWOULDBLOCK @@ -457,8 +482,7 @@ specified. Size of buf. -ERRORS - +RETURN VALUE EWOULDBLOCK @@ -491,7 +515,7 @@ specified.
-
+
DMX_START DESCRIPTION @@ -525,17 +549,9 @@ specified. Equals DMX_START for this command. -ERRORS - +&return-value-dvb; -EBADF - -fd is not a valid file descriptor. - - EINVAL @@ -556,7 +572,7 @@ specified.
-
+
DMX_STOP DESCRIPTION @@ -591,19 +607,10 @@ specified. Equals DMX_STOP for this command. -ERRORS - - -EBADF - -fd is not a valid file descriptor. - - +&return-value-dvb;
-
+
DMX_SET_FILTER DESCRIPTION @@ -654,26 +661,10 @@ specified. Pointer to structure containing filter parameters. -ERRORS - - -EBADF - -fd is not a valid file descriptor. - - -EINVAL - -Invalid argument. - - +&return-value-dvb;
-
+
DMX_SET_PES_FILTER DESCRIPTION @@ -727,24 +718,9 @@ specified. Pointer to structure containing filter parameters. -ERRORS - +&return-value-dvb; -EBADF - -fd is not a valid file descriptor. - - -EINVAL - -Invalid argument. - - EBUSY @@ -756,7 +732,7 @@ specified.
-
+
DMX_SET_BUFFER_SIZE DESCRIPTION @@ -799,27 +775,10 @@ specified. Size of circular buffer. -ERRORS - - -EBADF - -fd is not a valid file descriptor. - - -ENOMEM - -The driver was not able to allocate a buffer of the - requested size. - - +&return-value-dvb;
-
+
DMX_GET_EVENT DESCRIPTION @@ -872,24 +831,9 @@ specified. Pointer to the location where the event is to be stored. -ERRORS - +&return-value-dvb; -EBADF - -fd is not a valid file descriptor. - - -EFAULT - -ev points to an invalid address. - - EWOULDBLOCK @@ -899,7 +843,7 @@ specified.
-
+
DMX_GET_STC DESCRIPTION @@ -946,24 +890,9 @@ specified. Pointer to the location where the stc is to be stored. -ERRORS - +&return-value-dvb; -EBADF - -fd is not a valid file descriptor. - - -EFAULT - -stc points to an invalid address. - - EINVAL diff --git a/trunk/Documentation/DocBook/dvb/dvbapi.xml b/trunk/Documentation/DocBook/media/dvb/dvbapi.xml similarity index 85% rename from trunk/Documentation/DocBook/dvb/dvbapi.xml rename to trunk/Documentation/DocBook/media/dvb/dvbapi.xml index 9fad86ce7f5e..2ab6ddcfc4e0 100644 --- a/trunk/Documentation/DocBook/dvb/dvbapi.xml +++ b/trunk/Documentation/DocBook/media/dvb/dvbapi.xml @@ -114,8 +114,28 @@ Added ISDB-T test originally written by Patrick Boettcher &sub-examples; + + DVB Audio Header File + &sub-audio-h; + + + DVB Conditional Access Header File + &sub-ca-h; + + + DVB Demux Header File + &sub-dmx-h; + DVB Frontend Header File &sub-frontend-h; + + DVB Network Header File + &sub-net-h; + + + DVB Video Header File + &sub-video-h; + diff --git a/trunk/Documentation/DocBook/media/dvb/dvbproperty.xml b/trunk/Documentation/DocBook/media/dvb/dvbproperty.xml new file mode 100644 index 000000000000..207e1a5bf8f0 --- /dev/null +++ b/trunk/Documentation/DocBook/media/dvb/dvbproperty.xml @@ -0,0 +1,859 @@ +
+<constant>FE_GET_PROPERTY/FE_SET_PROPERTY</constant> +This section describes the DVB version 5 extention of the DVB-API, also +called "S2API", as this API were added to provide support for DVB-S2. It was +designed to be able to replace the old frontend API. Yet, the DISEQC and +the capability ioctls weren't implemented yet via the new way. +The typical usage for the FE_GET_PROPERTY/FE_SET_PROPERTY +API is to replace the ioctl's were the +struct dvb_frontend_parameters were used. +
+DTV property type + +/* Reserved fields should be set to 0 */ +struct dtv_property { + __u32 cmd; + union { + __u32 data; + struct { + __u8 data[32]; + __u32 len; + __u32 reserved1[3]; + void *reserved2; + } buffer; + } u; + int result; +} __attribute__ ((packed)); + +/* num of properties cannot exceed DTV_IOCTL_MAX_MSGS per ioctl */ +#define DTV_IOCTL_MAX_MSGS 64 + +
+
+DTV properties type + +struct dtv_properties { + __u32 num; + struct dtv_property *props; +}; + +
+ +
+FE_GET_PROPERTY +DESCRIPTION + + +This ioctl call returns one or more frontend properties. This call only + requires read-only access to the device. + + +SYNOPSIS + + +int ioctl(int fd, int request = FE_GET_PROPERTY, + dtv_properties ⋆props); + + +PARAMETERS + + +int fd + +File descriptor returned by a previous call to open(). + + +int num + +Equals FE_GET_PROPERTY for this command. + + +struct dtv_property *props + +Points to the location where the front-end property commands are stored. + + +&return-value-dvb; + + EOPNOTSUPP + Property type not supported. + +
+ +
+FE_SET_PROPERTY +DESCRIPTION + + +This ioctl call sets one or more frontend properties. This call only + requires read-only access to the device. + + +SYNOPSIS + + +int ioctl(int fd, int request = FE_SET_PROPERTY, + dtv_properties ⋆props); + + +PARAMETERS + + +int fd + +File descriptor returned by a previous call to open(). + + +int num + +Equals FE_SET_PROPERTY for this command. + + +struct dtv_property *props + +Points to the location where the front-end property commands are stored. + + +&return-value-dvb; + + EOPNOTSUPP + Property type not supported. + +
+ +
+ Property types + +On FE_GET_PROPERTY/FE_SET_PROPERTY, +the actual action is determined by the dtv_property cmd/data pairs. With one single ioctl, is possible to +get/set up to 64 properties. The actual meaning of each property is described on the next sections. + + +The available frontend property types are shown on the next section. +
+ +
+ Digital TV property parameters +
+ <constant>DTV_UNDEFINED</constant> + Used internally. A GET/SET operation for it won't change or return anything. +
+
+ <constant>DTV_TUNE</constant> + Interpret the cache of data, build either a traditional frontend tunerequest so we can pass validation in the FE_SET_FRONTEND ioctl. +
+
+ <constant>DTV_CLEAR</constant> + Reset a cache of data specific to the frontend here. This does not effect hardware. +
+
+ <constant>DTV_FREQUENCY</constant> + + Central frequency of the channel, in HZ. + + Notes: + 1)For ISDB-T, the channels are usually transmitted with an offset of 143kHz. + E.g. a valid frequncy could be 474143 kHz. The stepping is bound to the bandwidth of + the channel which is 6MHz. + + 2)As in ISDB-Tsb the channel consists of only one or three segments the + frequency step is 429kHz, 3*429 respectively. As for ISDB-T the + central frequency of the channel is expected. +
+
+ <constant>DTV_MODULATION</constant> +Specifies the frontend modulation type for cable and satellite types. The modulation can be one of the types bellow: + + typedef enum fe_modulation { + QPSK, + QAM_16, + QAM_32, + QAM_64, + QAM_128, + QAM_256, + QAM_AUTO, + VSB_8, + VSB_16, + PSK_8, + APSK_16, + APSK_32, + DQPSK, + } fe_modulation_t; + +
+
+ <constant>DTV_BANDWIDTH_HZ</constant> + + Bandwidth for the channel, in HZ. + + Possible values: + 1712000, + 5000000, + 6000000, + 7000000, + 8000000, + 10000000. + + + Notes: + + 1) For ISDB-T it should be always 6000000Hz (6MHz) + 2) For ISDB-Tsb it can vary depending on the number of connected segments + 3) Bandwidth doesn't apply for DVB-C transmissions, as the bandwidth + for DVB-C depends on the symbol rate + 4) Bandwidth in ISDB-T is fixed (6MHz) or can be easily derived from + other parameters (DTV_ISDBT_SB_SEGMENT_IDX, + DTV_ISDBT_SB_SEGMENT_COUNT). + 5) DVB-T supports 6, 7 and 8MHz. + 6) In addition, DVB-T2 supports 1.172, 5 and 10MHz. +
+
+ <constant>DTV_INVERSION</constant> + The Inversion field can take one of these values: + + + typedef enum fe_spectral_inversion { + INVERSION_OFF, + INVERSION_ON, + INVERSION_AUTO + } fe_spectral_inversion_t; + + It indicates if spectral inversion should be presumed or not. In the automatic setting + (INVERSION_AUTO) the hardware will try to figure out the correct setting by + itself. + +
+
+ <constant>DTV_DISEQC_MASTER</constant> + Currently not implemented. +
+
+ <constant>DTV_SYMBOL_RATE</constant> + Digital TV symbol rate, in bauds (symbols/second). Used on cable standards. +
+
+ <constant>DTV_INNER_FEC</constant> + Used cable/satellite transmissions. The acceptable values are: + + +typedef enum fe_code_rate { + FEC_NONE = 0, + FEC_1_2, + FEC_2_3, + FEC_3_4, + FEC_4_5, + FEC_5_6, + FEC_6_7, + FEC_7_8, + FEC_8_9, + FEC_AUTO, + FEC_3_5, + FEC_9_10, +} fe_code_rate_t; + + which correspond to error correction rates of 1/2, 2/3, etc., + no error correction or auto detection. +
+
+ <constant>DTV_VOLTAGE</constant> + The voltage is usually used with non-DiSEqC capable LNBs to switch + the polarzation (horizontal/vertical). When using DiSEqC epuipment this + voltage has to be switched consistently to the DiSEqC commands as + described in the DiSEqC spec. + + typedef enum fe_sec_voltage { + SEC_VOLTAGE_13, + SEC_VOLTAGE_18 + } fe_sec_voltage_t; + +
+
+ <constant>DTV_TONE</constant> + Currently not used. +
+
+ <constant>DTV_PILOT</constant> + Sets DVB-S2 pilot +
+ fe_pilot type + +typedef enum fe_pilot { + PILOT_ON, + PILOT_OFF, + PILOT_AUTO, +} fe_pilot_t; + +
+
+
+ <constant>DTV_ROLLOFF</constant> + Sets DVB-S2 rolloff + +
+ fe_rolloff type + +typedef enum fe_rolloff { + ROLLOFF_35, /* Implied value in DVB-S, default for DVB-S2 */ + ROLLOFF_20, + ROLLOFF_25, + ROLLOFF_AUTO, +} fe_rolloff_t; + +
+
+
+ <constant>DTV_DISEQC_SLAVE_REPLY</constant> + Currently not implemented. +
+
+ <constant>DTV_FE_CAPABILITY_COUNT</constant> + Currently not implemented. +
+
+ <constant>DTV_FE_CAPABILITY</constant> + Currently not implemented. +
+
+ <constant>DTV_DELIVERY_SYSTEM</constant> + Specifies the type of Delivery system +
+ fe_delivery_system type + Possible values: + +typedef enum fe_delivery_system { + SYS_UNDEFINED, + SYS_DVBC_ANNEX_AC, + SYS_DVBC_ANNEX_B, + SYS_DVBT, + SYS_DSS, + SYS_DVBS, + SYS_DVBS2, + SYS_DVBH, + SYS_ISDBT, + SYS_ISDBS, + SYS_ISDBC, + SYS_ATSC, + SYS_ATSCMH, + SYS_DMBTH, + SYS_CMMB, + SYS_DAB, + SYS_DVBT2, +} fe_delivery_system_t; + +
+
+
+ <constant>DTV_ISDBT_PARTIAL_RECEPTION</constant> + + If DTV_ISDBT_SOUND_BROADCASTING is '0' this bit-field represents whether + the channel is in partial reception mode or not. + + If '1' DTV_ISDBT_LAYERA_* values are assigned to the center segment and + DTV_ISDBT_LAYERA_SEGMENT_COUNT has to be '1'. + + If in addition DTV_ISDBT_SOUND_BROADCASTING is '1' + DTV_ISDBT_PARTIAL_RECEPTION represents whether this ISDB-Tsb channel + is consisting of one segment and layer or three segments and two layers. + + Possible values: 0, 1, -1 (AUTO) +
+
+ <constant>DTV_ISDBT_SOUND_BROADCASTING</constant> + + This field represents whether the other DTV_ISDBT_*-parameters are + referring to an ISDB-T and an ISDB-Tsb channel. (See also + DTV_ISDBT_PARTIAL_RECEPTION). + + Possible values: 0, 1, -1 (AUTO) +
+
+ <constant>DTV_ISDBT_SB_SUBCHANNEL_ID</constant> + + This field only applies if DTV_ISDBT_SOUND_BROADCASTING is '1'. + + (Note of the author: This might not be the correct description of the + SUBCHANNEL-ID in all details, but it is my understanding of the technical + background needed to program a device) + + An ISDB-Tsb channel (1 or 3 segments) can be broadcasted alone or in a + set of connected ISDB-Tsb channels. In this set of channels every + channel can be received independently. The number of connected + ISDB-Tsb segment can vary, e.g. depending on the frequency spectrum + bandwidth available. + + Example: Assume 8 ISDB-Tsb connected segments are broadcasted. The + broadcaster has several possibilities to put those channels in the + air: Assuming a normal 13-segment ISDB-T spectrum he can align the 8 + segments from position 1-8 to 5-13 or anything in between. + + The underlying layer of segments are subchannels: each segment is + consisting of several subchannels with a predefined IDs. A sub-channel + is used to help the demodulator to synchronize on the channel. + + An ISDB-T channel is always centered over all sub-channels. As for + the example above, in ISDB-Tsb it is no longer as simple as that. + + The DTV_ISDBT_SB_SUBCHANNEL_ID parameter is used to give the + sub-channel ID of the segment to be demodulated. + + Possible values: 0 .. 41, -1 (AUTO) +
+
+ <constant>DTV_ISDBT_SB_SEGMENT_IDX</constant> + This field only applies if DTV_ISDBT_SOUND_BROADCASTING is '1'. + DTV_ISDBT_SB_SEGMENT_IDX gives the index of the segment to be + demodulated for an ISDB-Tsb channel where several of them are + transmitted in the connected manner. + Possible values: 0 .. DTV_ISDBT_SB_SEGMENT_COUNT - 1 + Note: This value cannot be determined by an automatic channel search. +
+
+ <constant>DTV_ISDBT_SB_SEGMENT_COUNT</constant> + This field only applies if DTV_ISDBT_SOUND_BROADCASTING is '1'. + DTV_ISDBT_SB_SEGMENT_COUNT gives the total count of connected ISDB-Tsb + channels. + Possible values: 1 .. 13 + Note: This value cannot be determined by an automatic channel search. +
+
+ <constant>DTV-ISDBT-LAYER*</constant> parameters + ISDB-T channels can be coded hierarchically. As opposed to DVB-T in + ISDB-T hierarchical layers can be decoded simultaneously. For that + reason a ISDB-T demodulator has 3 viterbi and 3 reed-solomon-decoders. + ISDB-T has 3 hierarchical layers which each can use a part of the + available segments. The total number of segments over all layers has + to 13 in ISDB-T. + There are 3 parameter sets, for Layers A, B and C. +
+ <constant>DTV_ISDBT_LAYER_ENABLED</constant> + Hierarchical reception in ISDB-T is achieved by enabling or disabling + layers in the decoding process. Setting all bits of + DTV_ISDBT_LAYER_ENABLED to '1' forces all layers (if applicable) to be + demodulated. This is the default. + If the channel is in the partial reception mode + (DTV_ISDBT_PARTIAL_RECEPTION = 1) the central segment can be decoded + independently of the other 12 segments. In that mode layer A has to + have a SEGMENT_COUNT of 1. + In ISDB-Tsb only layer A is used, it can be 1 or 3 in ISDB-Tsb + according to DTV_ISDBT_PARTIAL_RECEPTION. SEGMENT_COUNT must be filled + accordingly. + Possible values: 0x1, 0x2, 0x4 (|-able) + DTV_ISDBT_LAYER_ENABLED[0:0] - layer A + DTV_ISDBT_LAYER_ENABLED[1:1] - layer B + DTV_ISDBT_LAYER_ENABLED[2:2] - layer C + DTV_ISDBT_LAYER_ENABLED[31:3] unused +
+
+ <constant>DTV_ISDBT_LAYER*_FEC</constant> + Possible values: FEC_AUTO, FEC_1_2, FEC_2_3, FEC_3_4, FEC_5_6, FEC_7_8 +
+
+ <constant>DTV_ISDBT_LAYER*_MODULATION</constant> + Possible values: QAM_AUTO, QPSK, QAM_16, QAM_64, DQPSK + Note: If layer C is DQPSK layer B has to be DQPSK. If layer B is DQPSK + and DTV_ISDBT_PARTIAL_RECEPTION=0 layer has to be DQPSK. +
+
+ <constant>DTV_ISDBT_LAYER*_SEGMENT_COUNT</constant> + Possible values: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, -1 (AUTO) + Note: Truth table for DTV_ISDBT_SOUND_BROADCASTING and + DTV_ISDBT_PARTIAL_RECEPTION and LAYER*_SEGMENT_COUNT + + + + + PR + SB + Layer A width + Layer B width + Layer C width + total width + + + 0 + 0 + 1 .. 13 + 1 .. 13 + 1 .. 13 + 13 + + + 1 + 0 + 1 + 1 .. 13 + 1 .. 13 + 13 + + + 0 + 1 + 1 + 0 + 0 + 1 + + + 1 + 1 + 1 + 2 + 0 + 13 + + + + +
+
+ <constant>DTV_ISDBT_LAYER*_TIME_INTERLEAVING</constant> + Possible values: 0, 1, 2, 3, -1 (AUTO) + Note: The real inter-leaver depth-names depend on the mode (fft-size); the values + here are referring to what can be found in the TMCC-structure - + independent of the mode. +
+
+
+ <constant>DTV_API_VERSION</constant> + Returns the major/minor version of the DVB API +
+
+ <constant>DTV_CODE_RATE_HP</constant> + Used on terrestrial transmissions. The acceptable values are: + + +typedef enum fe_code_rate { + FEC_NONE = 0, + FEC_1_2, + FEC_2_3, + FEC_3_4, + FEC_4_5, + FEC_5_6, + FEC_6_7, + FEC_7_8, + FEC_8_9, + FEC_AUTO, + FEC_3_5, + FEC_9_10, +} fe_code_rate_t; + +
+
+ <constant>DTV_CODE_RATE_LP</constant> + Used on terrestrial transmissions. The acceptable values are: + + +typedef enum fe_code_rate { + FEC_NONE = 0, + FEC_1_2, + FEC_2_3, + FEC_3_4, + FEC_4_5, + FEC_5_6, + FEC_6_7, + FEC_7_8, + FEC_8_9, + FEC_AUTO, + FEC_3_5, + FEC_9_10, +} fe_code_rate_t; + +
+
+ <constant>DTV_GUARD_INTERVAL</constant> + + Possible values are: + +typedef enum fe_guard_interval { + GUARD_INTERVAL_1_32, + GUARD_INTERVAL_1_16, + GUARD_INTERVAL_1_8, + GUARD_INTERVAL_1_4, + GUARD_INTERVAL_AUTO, + GUARD_INTERVAL_1_128, + GUARD_INTERVAL_19_128, + GUARD_INTERVAL_19_256, +} fe_guard_interval_t; + + + Notes: + 1) If DTV_GUARD_INTERVAL is set the GUARD_INTERVAL_AUTO the hardware will + try to find the correct guard interval (if capable) and will use TMCC to fill + in the missing parameters. + 2) Intervals 1/128, 19/128 and 19/256 are used only for DVB-T2 at present +
+
+ <constant>DTV_TRANSMISSION_MODE</constant> + + Specifies the number of carriers used by the standard + + Possible values are: + +typedef enum fe_transmit_mode { + TRANSMISSION_MODE_2K, + TRANSMISSION_MODE_8K, + TRANSMISSION_MODE_AUTO, + TRANSMISSION_MODE_4K, + TRANSMISSION_MODE_1K, + TRANSMISSION_MODE_16K, + TRANSMISSION_MODE_32K, +} fe_transmit_mode_t; + + Notes: + 1) ISDB-T supports three carrier/symbol-size: 8K, 4K, 2K. It is called + 'mode' in the standard: Mode 1 is 2K, mode 2 is 4K, mode 3 is 8K + + 2) If DTV_TRANSMISSION_MODE is set the TRANSMISSION_MODE_AUTO the + hardware will try to find the correct FFT-size (if capable) and will + use TMCC to fill in the missing parameters. + 3) DVB-T specifies 2K and 8K as valid sizes. + 4) DVB-T2 specifies 1K, 2K, 4K, 8K, 16K and 32K. +
+
+ <constant>DTV_HIERARCHY</constant> + Frontend hierarchy + +typedef enum fe_hierarchy { + HIERARCHY_NONE, + HIERARCHY_1, + HIERARCHY_2, + HIERARCHY_4, + HIERARCHY_AUTO + } fe_hierarchy_t; + +
+
+ <constant>DTV_ISDBS_TS_ID</constant> + Currently unused. +
+
+ <constant>DTV_DVBT2_PLP_ID</constant> + DVB-T2 supports Physical Layer Pipes (PLP) to allow transmission of + many data types via a single multiplex. The API will soon support this + at which point this section will be expanded. +
+
+
+ Properties used on terrestrial delivery systems +
+ DVB-T delivery system + The following parameters are valid for DVB-T: + + DTV_API_VERSION + DTV_DELIVERY_SYSTEM + DTV_TUNE + DTV_CLEAR + DTV_FREQUENCY + DTV_MODULATION + DTV_BANDWIDTH_HZ + DTV_INVERSION + DTV_CODE_RATE_HP + DTV_CODE_RATE_LP + DTV_GUARD_INTERVAL + DTV_TRANSMISSION_MODE + DTV_HIERARCHY + +
+
+ DVB-T2 delivery system + DVB-T2 support is currently in the early stages + of development, so expect that this section maygrow and become + more detailed with time. + The following parameters are valid for DVB-T2: + + DTV_API_VERSION + DTV_DELIVERY_SYSTEM + DTV_TUNE + DTV_CLEAR + DTV_FREQUENCY + DTV_MODULATION + DTV_BANDWIDTH_HZ + DTV_INVERSION + DTV_CODE_RATE_HP + DTV_CODE_RATE_LP + DTV_GUARD_INTERVAL + DTV_TRANSMISSION_MODE + DTV_HIERARCHY + DTV_DVBT2_PLP_ID + +
+
+ ISDB-T delivery system + This ISDB-T/ISDB-Tsb API extension should reflect all information + needed to tune any ISDB-T/ISDB-Tsb hardware. Of course it is possible + that some very sophisticated devices won't need certain parameters to + tune. + The information given here should help application writers to know how + to handle ISDB-T and ISDB-Tsb hardware using the Linux DVB-API. + The details given here about ISDB-T and ISDB-Tsb are just enough to + basically show the dependencies between the needed parameter values, + but surely some information is left out. For more detailed information + see the following documents: + ARIB STD-B31 - "Transmission System for Digital Terrestrial + Television Broadcasting" and + ARIB TR-B14 - "Operational Guidelines for Digital Terrestrial + Television Broadcasting". + In order to understand the ISDB specific parameters, + one has to have some knowledge the channel structure in + ISDB-T and ISDB-Tsb. I.e. it has to be known to + the reader that an ISDB-T channel consists of 13 segments, + that it can have up to 3 layer sharing those segments, + and things like that. + The following parameters are valid for ISDB-T: + + DTV_API_VERSION + DTV_DELIVERY_SYSTEM + DTV_TUNE + DTV_CLEAR + DTV_FREQUENCY + DTV_MODULATION + DTV_BANDWIDTH_HZ + DTV_INVERSION + DTV_CODE_RATE_HP + DTV_CODE_RATE_LP + DTV_GUARD_INTERVAL + DTV_TRANSMISSION_MODE + DTV_HIERARCHY + DTV_ISDBT_LAYER_ENABLED + DTV_ISDBT_PARTIAL_RECEPTION + DTV_ISDBT_SOUND_BROADCASTING + DTV_ISDBT_SB_SUBCHANNEL_ID + DTV_ISDBT_SB_SEGMENT_IDX + DTV_ISDBT_SB_SEGMENT_COUNT + DTV_ISDBT_LAYERA_FEC + DTV_ISDBT_LAYERA_MODULATION + DTV_ISDBT_LAYERA_SEGMENT_COUNT + DTV_ISDBT_LAYERA_TIME_INTERLEAVING + DTV_ISDBT_LAYERB_FEC + DTV_ISDBT_LAYERB_MODULATION + DTV_ISDBT_LAYERB_SEGMENT_COUNT + DTV_ISDBT_LAYERB_TIME_INTERLEAVING + DTV_ISDBT_LAYERC_FEC + DTV_ISDBT_LAYERC_MODULATION + DTV_ISDBT_LAYERC_SEGMENT_COUNT + DTV_ISDBT_LAYERC_TIME_INTERLEAVING + +
+
+ ATSC delivery system + The following parameters are valid for ATSC: + + DTV_API_VERSION + DTV_DELIVERY_SYSTEM + DTV_TUNE + DTV_CLEAR + DTV_FREQUENCY + DTV_MODULATION + DTV_BANDWIDTH_HZ + +
+
+
+ Properties used on cable delivery systems +
+ DVB-C delivery system + The DVB-C Annex-A/C is the widely used cable standard. Transmission uses QAM modulation. + The following parameters are valid for DVB-C Annex A/C: + + DTV_API_VERSION + DTV_DELIVERY_SYSTEM + DTV_TUNE + DTV_CLEAR + DTV_FREQUENCY + DTV_MODULATION + DTV_INVERSION + DTV_SYMBOL_RATE + DTV_INNER_FEC + +
+
+ DVB-C Annex B delivery system + The DVB-C Annex-B is only used on a few Countries like the United States. + The following parameters are valid for DVB-C Annex B: + + DTV_API_VERSION + DTV_DELIVERY_SYSTEM + DTV_TUNE + DTV_CLEAR + DTV_FREQUENCY + DTV_MODULATION + DTV_INVERSION + +
+
+
+ Properties used on satellital delivery systems +
+ DVB-S delivery system + The following parameters are valid for DVB-S: + + DTV_API_VERSION + DTV_DELIVERY_SYSTEM + DTV_TUNE + DTV_CLEAR + DTV_FREQUENCY + DTV_INVERSION + DTV_SYMBOL_RATE + DTV_INNER_FEC + + Future implementations might add those two missing parameters: + + DTV_DISEQC_MASTER + DTV_DISEQC_SLAVE_REPLY + +
+
+ DVB-S2 delivery system + The following parameters are valid for DVB-S2: + + DTV_API_VERSION + DTV_DELIVERY_SYSTEM + DTV_TUNE + DTV_CLEAR + DTV_FREQUENCY + DTV_INVERSION + DTV_SYMBOL_RATE + DTV_INNER_FEC + DTV_VOLTAGE + DTV_TONE + DTV_PILOT + DTV_ROLLOFF + + Future implementations might add those two missing parameters: + + DTV_DISEQC_MASTER + DTV_DISEQC_SLAVE_REPLY + +
+
+ ISDB-S delivery system + The following parameters are valid for ISDB-S: + + DTV_API_VERSION + DTV_DELIVERY_SYSTEM + DTV_TUNE + DTV_CLEAR + DTV_FREQUENCY + DTV_INVERSION + DTV_SYMBOL_RATE + DTV_INNER_FEC + DTV_VOLTAGE + DTV_ISDBS_TS_ID + +
+
+
diff --git a/trunk/Documentation/DocBook/dvb/dvbstb.pdf b/trunk/Documentation/DocBook/media/dvb/dvbstb.pdf similarity index 100% rename from trunk/Documentation/DocBook/dvb/dvbstb.pdf rename to trunk/Documentation/DocBook/media/dvb/dvbstb.pdf diff --git a/trunk/Documentation/DocBook/dvb/examples.xml b/trunk/Documentation/DocBook/media/dvb/examples.xml similarity index 100% rename from trunk/Documentation/DocBook/dvb/examples.xml rename to trunk/Documentation/DocBook/media/dvb/examples.xml diff --git a/trunk/Documentation/DocBook/dvb/frontend.xml b/trunk/Documentation/DocBook/media/dvb/frontend.xml similarity index 75% rename from trunk/Documentation/DocBook/dvb/frontend.xml rename to trunk/Documentation/DocBook/media/dvb/frontend.xml index 60c6976fb311..61407eaba020 100644 --- a/trunk/Documentation/DocBook/dvb/frontend.xml +++ b/trunk/Documentation/DocBook/media/dvb/frontend.xml @@ -20,22 +20,52 @@ cards, in which case there exists no frontend device.
Frontend Data Types -
-frontend type - -For historical reasons frontend types are named after the type of modulation used in -transmission. - - typedef enum fe_type { - FE_QPSK, /⋆ DVB-S ⋆/ - FE_QAM, /⋆ DVB-C ⋆/ - FE_OFDM /⋆ DVB-T ⋆/ - } fe_type_t; - - +
+Frontend type + +For historical reasons, frontend types are named by the type of modulation used in +transmission. The fontend types are given by fe_type_t type, defined as: + + +Frontend types + + &cs-def; + + + fe_type + Description + DTV_DELIVERY_SYSTEM equivalent type + + + + + FE_QPSK + For DVB-S standard + SYS_DVBS + + + FE_QAM + For DVB-C annex A/C standard + SYS_DVBC_ANNEX_AC + + + FE_OFDM + For DVB-T standard + SYS_DVBT + + + FE_ATSC + For ATSC standard (terrestrial) or for DVB-C Annex B (cable) used in US. + SYS_ATSC (terrestrial) or SYS_DVBC_ANNEX_B (cable) + +
+ +Newer formats like DVB-S2, ISDB-T, ISDB-S and DVB-T2 are not described at the above, as they're +supported via the new FE_GET_PROPERTY/FE_GET_SET_PROPERTY ioctl's, using the DTV_DELIVERY_SYSTEM parameter. +
-
+
frontend capabilities Capabilities describe what a frontend can do. Some capabilities can only be supported for @@ -76,7 +106,7 @@ a specific frontend type.
-
+
frontend information Information about the frontend ca be queried with @@ -99,7 +129,7 @@ a specific frontend type.
-
+
diseqc master command A message sent from the frontend to DiSEqC capable equipment. @@ -110,7 +140,7 @@ a specific frontend type. };
-
+
diseqc slave reply A reply to the frontend from DiSEqC 2.0 capable equipment. @@ -123,7 +153,7 @@ a specific frontend type.
-
+
diseqc slave reply The voltage is usually used with non-DiSEqC capable LNBs to switch the polarzation (horizontal/vertical). When using DiSEqC epuipment this voltage has to be switched @@ -136,7 +166,7 @@ consistently to the DiSEqC commands as described in the DiSEqC spec.
-
+
SEC continuous tone The continuous 22KHz tone is usually used with non-DiSEqC capable LNBs to switch the @@ -151,7 +181,7 @@ spec.
-
+
SEC tone burst The 22KHz tone burst is usually used with non-DiSEqC capable switches to select @@ -168,7 +198,7 @@ spec.
-
+
frontend status Several functions of the frontend device use the fe_status data type defined by @@ -188,31 +218,54 @@ by
-
+
frontend parameters The kind of parameters passed to the frontend device for tuning depend on -the kind of hardware you are using. All kinds of parameters are combined as an -union in the FrontendParameters structure: +the kind of hardware you are using. +The struct dvb_frontend_parameters uses an +union with specific per-system parameters. However, as newer delivery systems +required more data, the structure size weren't enough to fit, and just +extending its size would break the existing applications. So, those parameters +were replaced by the usage of +FE_GET_PROPERTY/FE_SET_PROPERTY ioctl's. The +new API is flexible enough to add new parameters to existing delivery systems, +and to add newer delivery systems. +So, newer applications should use +FE_GET_PROPERTY/FE_SET_PROPERTY instead, in +order to be able to support the newer System Delivery like DVB-S2, DVB-T2, +DVB-C2, ISDB, etc. +All kinds of parameters are combined as an union in the FrontendParameters structure: - struct dvb_frontend_parameters { - uint32_t frequency; /⋆ (absolute) frequency in Hz for QAM/OFDM ⋆/ - /⋆ intermediate frequency in kHz for QPSK ⋆/ - fe_spectral_inversion_t inversion; - union { - struct dvb_qpsk_parameters qpsk; - struct dvb_qam_parameters qam; - struct dvb_ofdm_parameters ofdm; - } u; - }; +struct dvb_frontend_parameters { + uint32_t frequency; /⋆ (absolute) frequency in Hz for QAM/OFDM ⋆/ + /⋆ intermediate frequency in kHz for QPSK ⋆/ + fe_spectral_inversion_t inversion; + union { + struct dvb_qpsk_parameters qpsk; + struct dvb_qam_parameters qam; + struct dvb_ofdm_parameters ofdm; + struct dvb_vsb_parameters vsb; + } u; +}; -For satellite QPSK frontends you have to use the QPSKParameters member defined by +In the case of QPSK frontends the frequency field specifies the intermediate +frequency, i.e. the offset which is effectively added to the local oscillator frequency (LOF) of +the LNB. The intermediate frequency has to be specified in units of kHz. For QAM and +OFDM frontends the frequency specifies the absolute frequency and is given in Hz. + +
+QPSK parameters +For satellite QPSK frontends you have to use the dvb_qpsk_parameters structure: struct dvb_qpsk_parameters { uint32_t symbol_rate; /⋆ symbol rate in Symbols per second ⋆/ fe_code_rate_t fec_inner; /⋆ forward error correction (see above) ⋆/ }; -for cable QAM frontend you use the QAMParameters structure +
+
+QAM parameters +for cable QAM frontend you use the dvb_qam_parameters structure: struct dvb_qam_parameters { uint32_t symbol_rate; /⋆ symbol rate in Symbols per second ⋆/ @@ -220,8 +273,19 @@ union in the FrontendParameters structure: fe_modulation_t modulation; /⋆ modulation type (see above) ⋆/ }; -DVB-T frontends are supported by the OFDMParamters structure - +
+
+VSB parameters +ATSC frontends are supported by the dvb_vsb_parameters structure: + +struct dvb_vsb_parameters { + fe_modulation_t modulation; /⋆ modulation type (see above) ⋆/ +}; + +
+
+OFDM parameters +DVB-T frontends are supported by the dvb_ofdm_parameters structure: struct dvb_ofdm_parameters { fe_bandwidth_t bandwidth; @@ -233,86 +297,124 @@ union in the FrontendParameters structure: fe_hierarchy_t hierarchy_information; }; -In the case of QPSK frontends the Frequency field specifies the intermediate -frequency, i.e. the offset which is effectively added to the local oscillator frequency (LOF) of -the LNB. The intermediate frequency has to be specified in units of kHz. For QAM and -OFDM frontends the Frequency specifies the absolute frequency and is given in -Hz. - +
+
+frontend spectral inversion The Inversion field can take one of these values: - typedef enum fe_spectral_inversion { - INVERSION_OFF, - INVERSION_ON, - INVERSION_AUTO - } fe_spectral_inversion_t; +typedef enum fe_spectral_inversion { + INVERSION_OFF, + INVERSION_ON, + INVERSION_AUTO +} fe_spectral_inversion_t; It indicates if spectral inversion should be presumed or not. In the automatic setting (INVERSION_AUTO) the hardware will try to figure out the correct setting by itself. -The possible values for the FEC_inner field are +
+
+frontend code rate +The possible values for the fec_inner field used on +struct dvb_qpsk_parameters and +struct dvb_qam_parameters are: - typedef enum fe_code_rate { - FEC_NONE = 0, - FEC_1_2, - FEC_2_3, - FEC_3_4, - FEC_4_5, - FEC_5_6, - FEC_6_7, - FEC_7_8, - FEC_8_9, - FEC_AUTO - } fe_code_rate_t; +typedef enum fe_code_rate { + FEC_NONE = 0, + FEC_1_2, + FEC_2_3, + FEC_3_4, + FEC_4_5, + FEC_5_6, + FEC_6_7, + FEC_7_8, + FEC_8_9, + FEC_AUTO, + FEC_3_5, + FEC_9_10, +} fe_code_rate_t; which correspond to error correction rates of 1/2, 2/3, etc., no error correction or auto detection. -For cable and terrestrial frontends (QAM and OFDM) one also has to specify the quadrature -modulation mode which can be one of the following: +
+
+frontend modulation type for QAM, OFDM and VSB +For cable and terrestrial frontends, e. g. for +struct dvb_qpsk_parameters, +struct dvb_qam_parameters and +struct dvb_qam_parameters, +it needs to specify the quadrature modulation mode which can be one of the following: typedef enum fe_modulation { - QPSK, - QAM_16, - QAM_32, - QAM_64, - QAM_128, - QAM_256, - QAM_AUTO + QPSK, + QAM_16, + QAM_32, + QAM_64, + QAM_128, + QAM_256, + QAM_AUTO, + VSB_8, + VSB_16, + PSK_8, + APSK_16, + APSK_32, + DQPSK, } fe_modulation_t; +
Finally, there are several more parameters for OFDM: +
+Number of carriers per channel - typedef enum fe_transmit_mode { - TRANSMISSION_MODE_2K, - TRANSMISSION_MODE_8K, - TRANSMISSION_MODE_AUTO +typedef enum fe_transmit_mode { + TRANSMISSION_MODE_2K, + TRANSMISSION_MODE_8K, + TRANSMISSION_MODE_AUTO, + TRANSMISSION_MODE_4K, + TRANSMISSION_MODE_1K, + TRANSMISSION_MODE_16K, + TRANSMISSION_MODE_32K, } fe_transmit_mode_t; - - typedef enum fe_bandwidth { - BANDWIDTH_8_MHZ, - BANDWIDTH_7_MHZ, - BANDWIDTH_6_MHZ, - BANDWIDTH_AUTO - } fe_bandwidth_t; +
+
+frontend bandwidth + +typedef enum fe_bandwidth { + BANDWIDTH_8_MHZ, + BANDWIDTH_7_MHZ, + BANDWIDTH_6_MHZ, + BANDWIDTH_AUTO, + BANDWIDTH_5_MHZ, + BANDWIDTH_10_MHZ, + BANDWIDTH_1_712_MHZ, +} fe_bandwidth_t; - - typedef enum fe_guard_interval { - GUARD_INTERVAL_1_32, - GUARD_INTERVAL_1_16, - GUARD_INTERVAL_1_8, - GUARD_INTERVAL_1_4, - GUARD_INTERVAL_AUTO - } fe_guard_interval_t; +
+
+frontend guard inverval + +typedef enum fe_guard_interval { + GUARD_INTERVAL_1_32, + GUARD_INTERVAL_1_16, + GUARD_INTERVAL_1_8, + GUARD_INTERVAL_1_4, + GUARD_INTERVAL_AUTO, + GUARD_INTERVAL_1_128, + GUARD_INTERVAL_19_128, + GUARD_INTERVAL_19_256, +} fe_guard_interval_t; - - typedef enum fe_hierarchy { +
+
+frontend hierarchy + +typedef enum fe_hierarchy { HIERARCHY_NONE, HIERARCHY_1, HIERARCHY_2, @@ -320,10 +422,11 @@ modulation mode which can be one of the following: HIERARCHY_AUTO } fe_hierarchy_t; +
-
+
frontend events struct dvb_frontend_event { @@ -412,8 +515,7 @@ modulation mode which can be one of the following: (blocking mode is the default) -ERRORS - +RETURN VALUE ENODEV @@ -473,8 +575,7 @@ modulation mode which can be one of the following: File descriptor returned by a previous call to open(). -ERRORS - +RETURN VALUE EBADF @@ -530,8 +631,7 @@ modulation mode which can be one of the following: to be stored. -ERRORS - +RETURN VALUE EBADF @@ -592,38 +692,8 @@ modulation mode which can be one of the following: The bit error rate is stored into *ber. -ERRORS - - -EBADF - -fd is not a valid open file descriptor. - - -EFAULT - -ber points to invalid address. - - -ENOSIGNAL - -There is no signal, thus no meaningful bit error rate. Also - returned if the front-end is not turned on. - - -ENOSYS - -Function not available for this device. - - + +&return-value-dvb;
@@ -670,38 +740,7 @@ modulation mode which can be one of the following: -ERRORS - - -EBADF - -fd is not a valid open file descriptor. - - -EFAULT - -snr points to invalid address. - - -ENOSIGNAL - -There is no signal, thus no meaningful signal strength - value. Also returned if front-end is not turned on. - - -ENOSYS - -Function not available for this device. - - +&return-value-dvb;
@@ -748,38 +787,8 @@ modulation mode which can be one of the following: The signal strength value is stored into *strength. -ERRORS - - -EBADF - -fd is not a valid open file descriptor. - - -EFAULT - -status points to invalid address. - - -ENOSIGNAL - -There is no signal, thus no meaningful signal strength - value. Also returned if front-end is not turned on. - - -ENOSYS - -Function not available for this device. - - + +&return-value-dvb;
@@ -833,30 +842,8 @@ modulation mode which can be one of the following: so far. -ERRORS - - -EBADF - -fd is not a valid open file descriptor. - - -EFAULT - -ublocks points to invalid address. - - -ENOSYS - -Function not available for this device. - - + +&return-value-dvb;
@@ -909,24 +896,10 @@ modulation mode which can be one of the following: Points to parameters for tuning operation. -ERRORS - + +&return-value-dvb; -EBADF - -fd is not a valid open file descriptor. - - -EFAULT - -p points to invalid address. - - EINVAL @@ -982,25 +955,9 @@ modulation mode which can be one of the following: -ERRORS - - +&return-value-dvb; -EBADF - -fd is not a valid open file descriptor. - - -EFAULT - -p points to invalid address. - - EINVAL @@ -1084,24 +1041,9 @@ modulation mode which can be one of the following: -ERRORS - +&return-value-dvb; -EBADF - -fd is not a valid open file descriptor. - - -EFAULT - -ev points to invalid address. - - EWOULDBLOCK @@ -1111,11 +1053,6 @@ modulation mode which can be one of the following: EOVERFLOW - - - Overflow in event queue - one or more events were lost. @@ -1170,23 +1107,7 @@ modulation mode which can be one of the following: to be stored. -ERRORS - - -EBADF - -fd is not a valid open file descriptor. - - -EFAULT - -info points to invalid address. - - +&return-value-dvb;
@@ -1229,30 +1150,7 @@ modulation mode which can be one of the following: -ERRORS - - -EBADF - -fd is not a valid file descriptor. - - -EPERM - -Permission denied (needs read/write access). - - -EINTERNAL - -Internal error in the device driver. - - +&return-value-dvb;
@@ -1302,45 +1200,7 @@ modulation mode which can be one of the following: -ERRORS - - -EBADF - -fd is not a valid file descriptor. - - -EFAULT - -Seq points to an invalid address. - - -EINVAL - -The data structure referred to by seq is invalid in some - way. - - -EPERM - -Permission denied (needs read/write access). - - -EINTERNAL - -Internal error in the device driver. - - +&return-value-dvb;
@@ -1390,45 +1250,7 @@ modulation mode which can be one of the following: Pointer to the command to be received. -ERRORS - - -EBADF - -fd is not a valid file descriptor. - - -EFAULT - -Seq points to an invalid address. - - -EINVAL - -The data structure referred to by seq is invalid in some - way. - - -EPERM - -Permission denied (needs read/write access). - - -EINTERNAL - -Internal error in the device driver. - - +&return-value-dvb;
@@ -1476,45 +1298,7 @@ modulation mode which can be one of the following: -ERRORS - - -EBADF - -fd is not a valid file descriptor. - - -EFAULT - -Seq points to an invalid address. - - -EINVAL - -The data structure referred to by seq is invalid in some - way. - - -EPERM - -Permission denied (needs read/write access). - - -EINTERNAL - -Internal error in the device driver. - - +&return-value-dvb;
@@ -1560,44 +1344,7 @@ modulation mode which can be one of the following: The requested tone generation mode (on/off). -ERRORS - - -ENODEV - -Device driver not loaded/available. - - -EBUSY - -Device or resource busy. - - -EINVAL - -Invalid argument. - - -EPERM - -File not opened with read permissions. - - -EINTERNAL - -Internal error in the device driver. - - +&return-value-dvb;
@@ -1645,44 +1392,7 @@ modulation mode which can be one of the following: -ERRORS - - -ENODEV - -Device driver not loaded/available. - - -EBUSY - -Device or resource busy. - - -EINVAL - -Invalid argument. - - -EPERM - -File not opened with read permissions. - - -EINTERNAL - -Internal error in the device driver. - - +&return-value-dvb;
@@ -1731,44 +1441,7 @@ modulation mode which can be one of the following: -ERRORS - - -ENODEV - -Device driver not loaded/available. - - -EBUSY - -Device or resource busy. - - -EINVAL - -Invalid argument. - - -EPERM - -File not opened with read permissions. - - -EINTERNAL - -Internal error in the device driver. - - +&return-value-dvb;
@@ -1800,11 +1473,7 @@ FE_TUNE_MODE_ONESHOT When set, this flag will disable any zigzagging or other "n -ERRORS - -EINVAL -Invalid argument. - +&return-value-dvb;
@@ -1838,12 +1507,7 @@ sends the specified raw cmd to the dish via DISEqC. -ERRORS - - - There are no errors in use for this call - - +&return-value-dvb;
diff --git a/trunk/Documentation/DocBook/dvb/intro.xml b/trunk/Documentation/DocBook/media/dvb/intro.xml similarity index 92% rename from trunk/Documentation/DocBook/dvb/intro.xml rename to trunk/Documentation/DocBook/media/dvb/intro.xml index 0dc83f672ea2..c75dc7cc3e9b 100644 --- a/trunk/Documentation/DocBook/dvb/intro.xml +++ b/trunk/Documentation/DocBook/media/dvb/intro.xml @@ -154,6 +154,10 @@ are called: +/dev/dvb/adapterN/dvrM, + + + /dev/dvb/adapterN/caM, where N enumerates the DVB PCI cards in a system starting @@ -175,10 +179,27 @@ the devices are described in the following chapters. The DVB API include files should be included in application sources with a partial path like: - + + #include <linux/dvb/audio.h> + + + #include <linux/dvb/ca.h> + + + #include <linux/dvb/dmx.h> + #include <linux/dvb/frontend.h> + + #include <linux/dvb/net.h> + + + #include <linux/dvb/osd.h> + + + #include <linux/dvb/video.h> + To enable applications to support different API version, an additional include file
DVB Net Data Types + +
+struct dvb_net_if + +struct dvb_net_if { + __u16 pid; + __u16 if_num; + __u8 feedtype; +#define DVB_NET_FEEDTYPE_MPE 0 /⋆ multi protocol encapsulation ⋆/ +#define DVB_NET_FEEDTYPE_ULE 1 /⋆ ultra lightweight encapsulation ⋆/ +}; + +
+ +
+
+DVB net Function Calls To be written…
diff --git a/trunk/Documentation/DocBook/dvb/video.xml b/trunk/Documentation/DocBook/media/dvb/video.xml similarity index 81% rename from trunk/Documentation/DocBook/dvb/video.xml rename to trunk/Documentation/DocBook/media/dvb/video.xml index 7bb287e67c8e..25fb823226b4 100644 --- a/trunk/Documentation/DocBook/dvb/video.xml +++ b/trunk/Documentation/DocBook/media/dvb/video.xml @@ -18,15 +18,16 @@ supported on some MPEG decoders made for DVD playback.
Video Data Types -
+
video_format_t The video_format_t data type defined by - typedef enum { - VIDEO_FORMAT_4_3, - VIDEO_FORMAT_16_9 - } video_format_t; +typedef enum { + VIDEO_FORMAT_4_3, /⋆ Select 4:3 format ⋆/ + VIDEO_FORMAT_16_9, /⋆ Select 16:9 format. ⋆/ + VIDEO_FORMAT_221_1 /⋆ 2.21:1 ⋆/ +} video_format_t; is used in the VIDEO_SET_FORMAT function (??) to tell the driver which aspect ratio the output hardware (e.g. TV) has. It is also used in the data structures video_status @@ -36,34 +37,36 @@ stream.
-
-video_display_format_t +
+video_displayformat_t In case the display format of the video stream and of the display hardware differ the application has to specify how to handle the cropping of the picture. This can be done using the VIDEO_SET_DISPLAY_FORMAT call (??) which accepts - typedef enum { - VIDEO_PAN_SCAN, - VIDEO_LETTER_BOX, - VIDEO_CENTER_CUT_OUT - } video_display_format_t; +typedef enum { + VIDEO_PAN_SCAN, /⋆ use pan and scan format ⋆/ + VIDEO_LETTER_BOX, /⋆ use letterbox format ⋆/ + VIDEO_CENTER_CUT_OUT /⋆ use center cut out format ⋆/ +} video_displayformat_t; as argument.
-
+
video stream source The video stream source is set through the VIDEO_SELECT_SOURCE call and can take the following values, depending on whether we are replaying from an internal (demuxer) or external (user write) source. - typedef enum { - VIDEO_SOURCE_DEMUX, - VIDEO_SOURCE_MEMORY - } video_stream_source_t; +typedef enum { + VIDEO_SOURCE_DEMUX, /⋆ Select the demux as the main source ⋆/ + VIDEO_SOURCE_MEMORY /⋆ If this source is selected, the stream + comes from the user through the write + system call ⋆/ +} video_stream_source_t; VIDEO_SOURCE_DEMUX selects the demultiplexer (fed either by the frontend or the DVR device) as the source of the video stream. If VIDEO_SOURCE_MEMORY @@ -72,49 +75,98 @@ call.
-
+
video play state The following values can be returned by the VIDEO_GET_STATUS call representing the state of video playback. - typedef enum { - VIDEO_STOPPED, - VIDEO_PLAYING, - VIDEO_FREEZED - } video_play_state_t; +typedef enum { + VIDEO_STOPPED, /⋆ Video is stopped ⋆/ + VIDEO_PLAYING, /⋆ Video is currently playing ⋆/ + VIDEO_FREEZED /⋆ Video is freezed ⋆/ +} video_play_state_t;
-
+
+The structure must be zeroed before use by the application +This ensures it can be extended safely in the future. +struct video-command + +struct video_command { + __u32 cmd; + __u32 flags; + union { + struct { + __u64 pts; + } stop; + + struct { + /⋆ 0 or 1000 specifies normal speed, + 1 specifies forward single stepping, + -1 specifies backward single stepping, + >>1: playback at speed/1000 of the normal speed, + <-1: reverse playback at (-speed/1000) of the normal speed. ⋆/ + __s32 speed; + __u32 format; + } play; + + struct { + __u32 data[16]; + } raw; + }; +}; + +
+ +
+struct video_size-t + +typedef struct { + int w; + int h; + video_format_t aspect_ratio; +} video_size_t; + +
+ + +
struct video_event The following is the structure of a video event as it is returned by the VIDEO_GET_EVENT call. - struct video_event { - int32_t type; - time_t timestamp; - union { - video_format_t video_format; - } u; - }; +struct video_event { + __s32 type; +#define VIDEO_EVENT_SIZE_CHANGED 1 +#define VIDEO_EVENT_FRAME_RATE_CHANGED 2 +#define VIDEO_EVENT_DECODER_STOPPED 3 +#define VIDEO_EVENT_VSYNC 4 + __kernel_time_t timestamp; + union { + video_size_t size; + unsigned int frame_rate; /⋆ in frames per 1000sec ⋆/ + unsigned char vsync_field; /⋆ unknown/odd/even/progressive ⋆/ + } u; +};
-
+
struct video_status The VIDEO_GET_STATUS call returns the following structure informing about various states of the playback operation. - struct video_status { - boolean video_blank; - video_play_state_t play_state; - video_stream_source_t stream_source; - video_format_t video_format; - video_displayformat_t display_format; - }; +struct video_status { + int video_blank; /⋆ blank video on freeze? ⋆/ + video_play_state_t play_state; /⋆ current state of playback ⋆/ + video_stream_source_t stream_source; /⋆ current source (demux/memory) ⋆/ + video_format_t video_format; /⋆ current aspect ratio of stream ⋆/ + video_displayformat_t display_format;/⋆ selected cropping mode ⋆/ +}; If video_blank is set video will be blanked out if the channel is changed or if playback is stopped. Otherwise, the last picture will be displayed. play_state indicates if the video is @@ -127,17 +179,17 @@ device.
-
+
struct video_still_picture An I-frame displayed via the VIDEO_STILLPICTURE call is passed on within the following structure. - /⋆ pointer to and size of a single iframe in memory ⋆/ - struct video_still_picture { - char ⋆iFrame; - int32_t size; - }; +/⋆ pointer to and size of a single iframe in memory ⋆/ +struct video_still_picture { + char ⋆iFrame; /⋆ pointer to a single iframe in memory ⋆/ + int32_t size; +};
@@ -164,26 +216,26 @@ bits set according to the hardwares capabilities.
-
+
video system A call to VIDEO_SET_SYSTEM sets the desired video system for TV output. The following system types can be set: - typedef enum { - VIDEO_SYSTEM_PAL, - VIDEO_SYSTEM_NTSC, - VIDEO_SYSTEM_PALN, - VIDEO_SYSTEM_PALNc, - VIDEO_SYSTEM_PALM, - VIDEO_SYSTEM_NTSC60, - VIDEO_SYSTEM_PAL60, - VIDEO_SYSTEM_PALM60 - } video_system_t; +typedef enum { + VIDEO_SYSTEM_PAL, + VIDEO_SYSTEM_NTSC, + VIDEO_SYSTEM_PALN, + VIDEO_SYSTEM_PALNc, + VIDEO_SYSTEM_PALM, + VIDEO_SYSTEM_NTSC60, + VIDEO_SYSTEM_PAL60, + VIDEO_SYSTEM_PALM60 +} video_system_t;
-
+
struct video_highlight Calling the ioctl VIDEO_SET_HIGHLIGHTS posts the SPU highlight information. The call expects the following format for that information: @@ -210,7 +262,7 @@ call expects the following format for that information:
-
+
video SPU Calling VIDEO_SET_SPU deactivates or activates SPU decoding, according to the following format: @@ -224,7 +276,7 @@ following format:
-
+
video SPU palette The following structure is used to set the SPU palette by calling VIDEO_SPU_PALETTE: @@ -237,7 +289,7 @@ following format:
-
+
video NAVI pack In order to get the navigational data the following structure has to be passed to the ioctl VIDEO_GET_NAVI: @@ -252,7 +304,7 @@ VIDEO_GET_NAVI:
-
+
video attributes The following attributes can be set by a call to VIDEO_SET_ATTRIBUTES: @@ -347,8 +399,7 @@ VIDEO_GET_NAVI: (blocking mode is the default) -ERRORS - +RETURN VALUE ENODEV @@ -406,8 +457,7 @@ VIDEO_GET_NAVI: File descriptor returned by a previous call to open(). -ERRORS - +RETURN VALUE EBADF @@ -462,8 +512,7 @@ VIDEO_GET_NAVI: Size of buf. -ERRORS - +RETURN VALUE EPERM @@ -488,7 +537,7 @@ VIDEO_GET_NAVI: -
VIDEO_STOP DESCRIPTION @@ -543,26 +592,9 @@ role="subsection">VIDEO_STOP FALSE: Show last decoded frame. -ERRORS - - -EBADF - -fd is not a valid open file descriptor - - -EINTERNAL - -Internal error, possibly in the communication with the - DVB subsystem. - - +&return-value-dvb; -
VIDEO_PLAY DESCRIPTION @@ -596,26 +628,9 @@ role="subsection">VIDEO_PLAY Equals VIDEO_PLAY for this command. -ERRORS - - -EBADF - -fd is not a valid open file descriptor - - -EINTERNAL - -Internal error, possibly in the communication with the - DVB subsystem. - - +&return-value-dvb; -
VIDEO_FREEZE DESCRIPTION @@ -653,26 +668,9 @@ role="subsection">VIDEO_FREEZE Equals VIDEO_FREEZE for this command. -ERRORS - - -EBADF - -fd is not a valid open file descriptor - - -EINTERNAL - -Internal error, possibly in the communication with the - DVB subsystem. - - +&return-value-dvb; -
VIDEO_CONTINUE DESCRIPTION @@ -706,26 +704,9 @@ role="subsection">VIDEO_CONTINUE Equals VIDEO_CONTINUE for this command. -ERRORS - - -EBADF - -fd is not a valid open file descriptor - - -EINTERNAL - -Internal error, possibly in the communication with the - DVB subsystem. - - +&return-value-dvb; -
VIDEO_SELECT_SOURCE DESCRIPTION @@ -769,26 +750,9 @@ role="subsection">VIDEO_SELECT_SOURCE Indicates which source shall be used for the Video stream. -ERRORS - - -EBADF - -fd is not a valid open file descriptor - - -EINTERNAL - -Internal error, possibly in the communication with the - DVB subsystem. - - +&return-value-dvb; -
VIDEO_SET_BLANK DESCRIPTION @@ -835,33 +799,9 @@ role="subsection">VIDEO_SET_BLANK FALSE: Show last decoded frame. -ERRORS - - -EBADF - -fd is not a valid open file descriptor - - -EINTERNAL - -Internal error, possibly in the communication with the - DVB subsystem. - - -EINVAL - -Illegal input parameter - - +&return-value-dvb; -
VIDEO_GET_STATUS DESCRIPTION @@ -903,33 +843,9 @@ role="subsection">VIDEO_GET_STATUS Returns the current status of the Video Device. -ERRORS - - -EBADF - -fd is not a valid open file descriptor - - -EINTERNAL - -Internal error, possibly in the communication with the - DVB subsystem. - - -EFAULT - -status points to invalid address - - +&return-value-dvb; -
VIDEO_GET_EVENT DESCRIPTION @@ -980,24 +896,9 @@ role="subsection">VIDEO_GET_EVENT stored. -ERRORS - +&return-value-dvb; -EBADF - -fd is not a valid open file descriptor - - -EFAULT - -ev points to invalid address - - EWOULDBLOCK @@ -1007,18 +908,13 @@ role="subsection">VIDEO_GET_EVENT EOVERFLOW - - - Overflow in event queue - one or more events were lost. -
VIDEO_SET_DISPLAY_FORMAT DESCRIPTION @@ -1063,32 +959,9 @@ role="subsection">VIDEO_SET_DISPLAY_FORMAT Selects the video format to be used. -ERRORS - - -EBADF - -fd is not a valid open file descriptor - - -EINTERNAL - -Internal error. - - -EINVAL - -Illegal parameter format. - - +&return-value-dvb; -
VIDEO_STILLPICTURE DESCRIPTION @@ -1133,32 +1006,9 @@ role="subsection">VIDEO_STILLPICTURE Pointer to a location where an I-frame and size is stored. -ERRORS - - -EBADF - -fd is not a valid open file descriptor - - -EINTERNAL - -Internal error. - - -EFAULT - -sp points to an invalid iframe. - - +&return-value-dvb; -
VIDEO_FAST_FORWARD DESCRIPTION @@ -1200,39 +1050,17 @@ role="subsection">VIDEO_FAST_FORWARD The number of frames to skip. -ERRORS - +&return-value-dvb; -EBADF - -fd is not a valid open file descriptor - - -EINTERNAL - -Internal error. - - EPERM Mode VIDEO_SOURCE_MEMORY not selected. - - -EINVAL - -Illegal parameter format. -
VIDEO_SLOWMOTION DESCRIPTION @@ -1274,39 +1102,17 @@ role="subsection">VIDEO_SLOWMOTION The number of times to repeat each frame. -ERRORS - +&return-value-dvb; -EBADF - -fd is not a valid open file descriptor - - -EINTERNAL - -Internal error. - - EPERM Mode VIDEO_SOURCE_MEMORY not selected. - - -EINVAL - -Illegal parameter format. -
VIDEO_GET_CAPABILITIES DESCRIPTION @@ -1350,25 +1156,9 @@ role="subsection">VIDEO_GET_CAPABILITIES information. -ERRORS - - -EBADF - -fd is not a valid open file descriptor - - -EFAULT - -cap points to an invalid iframe. - - +&return-value-dvb; -
VIDEO_SET_ID DESCRIPTION @@ -1410,24 +1200,9 @@ role="subsection">VIDEO_SET_ID video sub-stream id -ERRORS - +&return-value-dvb; -EBADF - -fd is not a valid open file descriptor. - - -EINTERNAL - -Internal error. - - EINVAL @@ -1435,7 +1210,7 @@ role="subsection">VIDEO_SET_ID -
VIDEO_CLEAR_BUFFER DESCRIPTION @@ -1468,18 +1243,9 @@ role="subsection">VIDEO_CLEAR_BUFFER Equals VIDEO_CLEAR_BUFFER for this command. -ERRORS - - -EBADF - -fd is not a valid open file descriptor - - +&return-value-dvb; -
VIDEO_SET_STREAMTYPE DESCRIPTION @@ -1522,25 +1288,9 @@ role="subsection">VIDEO_SET_STREAMTYPE stream type -ERRORS - - -EBADF - -fd is not a valid open file descriptor - - -EINVAL - -type is not a valid or supported stream type. - - +&return-value-dvb; -
VIDEO_SET_FORMAT DESCRIPTION @@ -1583,17 +1333,9 @@ role="subsection">VIDEO_SET_FORMAT video format of TV as defined in section ??. -ERRORS - +&return-value-dvb; -EBADF - -fd is not a valid open file descriptor - - EINVAL @@ -1601,7 +1343,7 @@ role="subsection">VIDEO_SET_FORMAT -
VIDEO_SET_SYSTEM DESCRIPTION @@ -1645,17 +1387,9 @@ role="subsection">VIDEO_SET_SYSTEM video system of TV output. -ERRORS - +&return-value-dvb; -EBADF - -fd is not a valid open file descriptor - - EINVAL @@ -1663,7 +1397,7 @@ role="subsection">VIDEO_SET_SYSTEM -
VIDEO_SET_HIGHLIGHT DESCRIPTION @@ -1705,25 +1439,9 @@ role="subsection">VIDEO_SET_HIGHLIGHT SPU Highlight information according to section ??. -ERRORS - - -EBADF - -fd is not a valid open file descriptor. - - -EINVAL - -input is not a valid highlight setting. - - +&return-value-dvb; -
VIDEO_SET_SPU DESCRIPTION @@ -1766,17 +1484,9 @@ role="subsection">VIDEO_SET_SPU to section ??. -ERRORS - +&return-value-dvb; -EBADF - -fd is not a valid open file descriptor - - EINVAL @@ -1785,7 +1495,7 @@ role="subsection">VIDEO_SET_SPU -
VIDEO_SET_SPU_PALETTE DESCRIPTION @@ -1827,17 +1537,9 @@ role="subsection">VIDEO_SET_SPU_PALETTE SPU palette according to section ??. -ERRORS - +&return-value-dvb; -EBADF - -fd is not a valid open file descriptor - - EINVAL @@ -1845,7 +1547,7 @@ role="subsection">VIDEO_SET_SPU_PALETTE -
VIDEO_GET_NAVI DESCRIPTION @@ -1889,17 +1591,9 @@ role="subsection">VIDEO_GET_NAVI ??. -ERRORS - +&return-value-dvb; -EBADF - -fd is not a valid open file descriptor - - EFAULT @@ -1907,7 +1601,7 @@ role="subsection">VIDEO_GET_NAVI -
VIDEO_SET_ATTRIBUTES DESCRIPTION @@ -1951,17 +1645,9 @@ role="subsection">VIDEO_SET_ATTRIBUTES video attributes according to section ??. -ERRORS - +&return-value-dvb; -EBADF - -fd is not a valid open file descriptor - - EINVAL diff --git a/trunk/Documentation/DocBook/media/dvbstb.png.b64 b/trunk/Documentation/DocBook/media/dvbstb.png.b64 new file mode 100644 index 000000000000..e8b52fde3d11 --- /dev/null +++ b/trunk/Documentation/DocBook/media/dvbstb.png.b64 @@ -0,0 +1,398 @@ +iVBORw0KGgoAAAANSUhEUgAAAzMAAAGaCAYAAAA7Jx25AAAABmJLR0QAAAAAAAD5Q7t/AAAACXBI +WXMAAA3XAAANiQFmEOuiAAAgAElEQVR42uzdd1RU18I28GdgKFZUBE0saFA0KoqFFkEhKhbAQmxJ +bIkNNEpMEUwsMZarJMZrw4KxRExQczUqil0jRBA1GAjGQqLYC4TemdnfH76cj3HodYDntxaLmTll +zuw57Zmz9z4yIYQAkYZzcnJCSkoKGjZsyMIgIiIiquPS09PRoEEDyBhmqCaQyWRo06YN3nvvPRYG +ERERUR137Ngx/Pnnn5CzKKgmMDAwwKpVqxhmiIiIiAj29vZ4//33ocWiICIiIiKimohhhoiIiIiI +GGaIiIiIiIgYZoiIiIiIiBhmiIiIiIiIYYaIiIiIiIhhhoiIiIiIiGGGiIiIiIgYZoiIiIiIiBhm +iIiIiIiIGGaIiIiIiIgYZoiIiIiIiGGGiIiIiIiIYYaIiIiIiIhhhoiIiIiIGGaIiIiIiIgYZoiI +iIiIiBhmiIiIiIiIYYaIiIiIiIhhhoiIiIiIqFLIWQRElSMsLAy2trZo1KgR5HJualTxEhIS8P33 +3+PDDz+sM5+5bdu2ePDgAZo2bcoVgCplm3J0dMS5c+fqzGf++uuvsWTJEm5TVClSU1ORk5ODBw8e +oHXr1gwzRDVJbm4uAGDRokUwMDBggVCFmzlzJrKysurUZ3727BksLCzg4eHBFYAq3IIFC5CQkFCn +PnNGRgYAYNWqVVwBqMJFRUVh48aNUCqVlfYeDDNElWzGjBkMM1QpNm7cWOc+c8uWLTFjxgzMmDGD +KwBVuLt37yIkJKTOfW5nZ2duU1SpYaYysc0MERERERHVSAwzRERERETEMENERERERMQwQ0RERERE +xDBDREREREQMM0RERERERAwzREREREREDDNERERERMQwQ0RERERExDBDRERERETEMENERERERMQw +Q0REREREDDNEREREREQMM0RERERERAwzRERERETEMENERERERMQwQ0RERERExDBDREREREQMM0RE +RERERAwzREREREREDDNEREREREQMM0RERERExDBDRERERETEMENERERERMQwQ0REREREDDNERERE +REQMM0RERERERAwzRERERETEMENERERERMQwQ0REREREVGnkLAKimunBgwdISkoq8/SGhoZ47bXX +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 +AADISP8FpxZnWS0U37cAAAAASUVORK5CYII= diff --git a/trunk/Documentation/DocBook/media/fieldseq_bt.gif.b64 b/trunk/Documentation/DocBook/media/fieldseq_bt.gif.b64 new file mode 100644 index 000000000000..b5b557b88158 --- /dev/null +++ b/trunk/Documentation/DocBook/media/fieldseq_bt.gif.b64 @@ -0,0 +1,447 @@ +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 +l3O5NwEBADs= diff --git a/trunk/Documentation/DocBook/media/fieldseq_tb.gif.b64 b/trunk/Documentation/DocBook/media/fieldseq_tb.gif.b64 new file mode 100644 index 000000000000..7b4c1766b407 --- /dev/null +++ b/trunk/Documentation/DocBook/media/fieldseq_tb.gif.b64 @@ -0,0 +1,445 @@ +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 +kh6JXympkivJkm4TEAA7 diff --git a/trunk/Documentation/DocBook/media/nv12mt.gif.b64 b/trunk/Documentation/DocBook/media/nv12mt.gif.b64 new file mode 100644 index 000000000000..083a7c85d107 --- /dev/null +++ b/trunk/Documentation/DocBook/media/nv12mt.gif.b64 @@ -0,0 +1,37 @@ +R0lGODlhFgFnAMZnAAAAAAYCAgAASAwFBQAAdEgAACQODkgASCoQEEgAdHQAADATEjUVFHQASDsX +F3QAdE0eHVMhIABISABInEhIAIM0Mok2NI84Nk9PT5o9O5xIAHRInFlZWaxEQbhJRgB0v75LSLhQ +TbRTUcBRTrBXVatcWsJWVKdfXW9vb6VhX0h0v8RcWZhpaJJubpBwb8ZiX8ZiYI5zc4t1dYd4eMhn +Zb90AIN8fH9/f8pracpta8ttasxzcM51dM52dM53dc94dkic39F+fNOEgpmZmdWJh9ePjdiTkt+c +SNuamd2gnt6lo3S//5y/nOCqqeKwr+S1tOa7uv+/dOjBwOrGxuzKye3KyuzMy5zf/7/fnO/S0fHX +1//fnPPd3fTe3vXj4vfo6Pnu7r////v09N////35+f//v///3/////////////////////////// +/////////////////////////////////////////////////////////////////////////yH+ +FE5WMTJNVCBtZW1vcnkgbGF5b3V0ACwAAAAAFgFnAAAH/oBngoOEhYaHiImKi4yNjo+QkZKTlJWW +l5iZmpucnZ6foKGio6SlpqeoqaqrrK2ur7CxsrO0tba3uLm6u7y9vr/AwcLDxMXGmkM3ysvMzc7P +0NHS0CjT1tfY19XZ3N3Y297h4sxDlQDj6OLn6ezZ6+3w0u/x9M0A5r/3vvq9/Lz+kQDqEpiLIC6D +txAyUliLIS2HsyDKkniIIiyLrzC60tiKoyCPq0CqEpmKJCqQJk+lNLWyVEtSKPPJ3Ddz0stRN0Xl +DLUTVEyaQPvVlNTzU1FPRzsl5fRTaNB/QwNGHTi1IL6nu5Zu0qqpKVSsVME+4pqJLCazl9Ba8oqp +jAIA/gTCIOXkVsAVo52OAABgV6kmMxr2Cgbil9LLGh/OIJ6r6QgBLAfuMm48YYzPT1siF7a5qUyD +u1HibtaUWfLoS55NT+a0+DSklqXPxK5EJkuhm7NdV8pMYW9i3YJsT8q99Wqm2MQn/cihZRBuzasv +RenrdgnwM8uFQzpSOfrrTcihW5KyogiYM89VF9cUWq7i3+sRTVlB5Lyj6ngNd/58pn0mMUmY4ER6 ++R2nGWCEMbUIGQE2QUYj3Fnm3VibIPgeJ178kEFz4Imn4F8aEJbcWY18EcQLViziVoITOvLSFgXA +5R4iVvxg44045oijByAU0QMIQAYppJAwPHhIFILx/qUeieDFCIB1igjBg45U4nhBlVSaAEIQYiTi +2IzXLbTKF1mUaeaZaJr5RAc5aKeIFStw0RErVehARZp4mrlAnmlCscILU8yp3y5iILECBI7AKaeg +q3DxQ5cuMgLgCg5uZBwuTpiAhBgQKZqRK45CKqYiftZ30aW1WEFDEF58xIinn4L6aCMIabHDDhye +OqgtYgSRonOLwBqrrKImglAQUjyEalg0xjlRLKEuotayFIoliLC6whKtsVVFai222Wo7KyLT7kpU +VeCGK26xhJTLmblZGZKuuutW1C2tUc1Lb7233TuqU9c6m9At2wJrLb68JEEGP/rG4u4iBaPnr7S8 +/ohhgsRnNOxwLgU/LJVh9YR8Qwsl3HCOCyHIIDI986yMjgwkzKBMyy63g1LN8JzAgskoq4wzOzT/ +3E0MIIiQggM2CG0ztbW88MUZDAgc7y5aFlHBCDsk4ebA8NryxQsZd7DoV7oIQcQKBpyhRRM/jOCE +VV3X8kQRcKYtCBnsNsQLFHSLPQjecL+bi9lxApCFEjuM0ASzuXwNtdSMf5yLlkQEAcIOSmzN9S5O +A6Dxs3HPogUIOSBhRQATy1LEE/d8vq+3t5BhhH0YA6zLFELo47qlocNChhC/unowLRYzDLnevbvy +e/DC265LEqgPsntITCsPvCEef4fV9CVVz8ry/vYOjzwh3KvkvSrgh+985AGPDbrgvl9PbuoRNev+ +6wjHzzz29L8v7/G8g18r0sct8SkrEeXTyfkigaS9sIgRBCwge/bSlzBNAjAV/BACAXgIGAmmOxo8 +lybK8AC5TGdJh4igBAuhOUaUYQOWqQEIMVGb2jVGAh6iRA0N9iYOFmJE8RFhJ/CzIPn9qxDZoYR/ +NLEcBNClAUzIISWWw6FO+XAQQOzKAocjxUKoUBEImY+pIAEY+GhCCh0wT2OAkEVJkMc8EtGYB/cC +pRBKjjVmTKER85fCBhlpEQ2c4SYGEKC3XWILCQhDGyUBIBNE4BG7O0IGtZg8SkRIEV+k2CJM/oSi +R0gShWs5Q4aYY4kaiKiLlvDCBUjZCNcRMYh3zMSXFuEDHGAJS1e65Y20xKVGvPJNurTSjUbQox8N +6ZhAosEf3ZIkADxQXsHU0QWI6SNkIrNIKlJAHSkpwEvIUEKK6AKfxrmncZbJT4BSxBZUIIgTlsic +ZyrnE1bQJkws8gxkgieaIEDPFkaiBlCapR21dxwn7UWQTErEpCqlCMBQEJRrKdQKnkAaVFKiUB2g +aEEPCk5YEpRshygV7VwRAU3lbRaZQsIA+qc+kBLCVriKhaos0CpcqIpVNpxaNwNXCGTJoldWyJ5C +fcVDl35Up0blKVJjyT6lNvUgW/TfUp+6jzkhJhWqBqxfJQ+4Pqd6FXZXrepUv8rHsWK1q2e1qlnF +SlVbsKWt4wurW6O6saxKFa5gZCn+5mrXiijNZn8FWmDTEbTBuqMSHDDsODCgWHEwtrHeeCxkucGB +Y1j2spjNrGY3y9nOevazoA2taEdL2tKa9rSoTa1qV8va1rr2tbCNrWxnS9va2va2uM3tLQIBADs= diff --git a/trunk/Documentation/DocBook/media/nv12mt_example.gif.b64 b/trunk/Documentation/DocBook/media/nv12mt_example.gif.b64 new file mode 100644 index 000000000000..a512078c7f24 --- /dev/null +++ b/trunk/Documentation/DocBook/media/nv12mt_example.gif.b64 @@ -0,0 +1,121 @@ +R0lGODlhoAHkAOe1AAAAAAAASAAAdEgAAEgASEgAdBgYGHQAABoaGnQASHQAdC0eHigoKEIlJEYm +JS4uLlssKzY2NgBISFIyMQBInEBAQEhBQUhIAFBBQVhCQkhISF5DQ2NDQmdDQ3NEQ05OToNGRHhJ +SJxIAItHRY9HRXRInJdIRlpaWppLSaJJRqpJR7BIRa5KR2NfX7JKR2BgYGxdXWleXmZfX31ZWXJc +XHpaWQB0v29dXLZKSHhbWolXVpVUU5JVU55SUJhUUqdQTrpLSK9OTKRRT6FSULRNS7hMSrVNSr5L +SL9MSr1OS7xQTsBRTrtTUL5WU7lYVsJWVEh0v7deW4pqab5dW8RcWbdgXrZjYcZgXnd3d8ZiX8Zi +YL9lY7RoZshnZb90ALJubLFwb8prabBzccpta79wbsttaqx6ecxzcKt8e4aGhr93dc10cs51dM52 +dImJib97ec53dc94dqiEhKeHhkic39F+fKeKiaWPj9OEgqSSkb6PjtWJh5qamqGamqCcnNePjZ+f +n9iTkr6amtiUktmVk9+cSL6enduamb+jo92gnr+pqd6lo7Ozs7+wsHS//7W1tZy/nOCqqbm5ub+4 +uOKwr+S1tL+/v9+/dOa7uv+/dOjBwOrGxuzKye3KyuzMy5zf/7/fnO/S0d/fnPHX1+Dg4P/fnPPd +3fTe3vXj4vfo6L//v+/v7/nu7r///9//v/v09N//39////35+f//v///3/////////////////// +//////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////yH+EUNyZWF0ZWQgd2l0aCBH +SU1QACwAAAAAoAHkAAAI/gBrCRxIsKDBgwgTKlzIsKHDhxAjSpxIsaLFixgzatzIsaPHjyBDihxJ +sqTJkyhTqlzJsqXLlzBjypxJs6bNmzhz6tzJs6fPn0CDCh1KtKjRo0iTKl3KtKnTp1CjSp1KtapV +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 +XnvvxTdfffflt19//+03IAA7 diff --git a/trunk/Documentation/DocBook/media/pipeline.png.b64 b/trunk/Documentation/DocBook/media/pipeline.png.b64 new file mode 100644 index 000000000000..97d9ac007473 --- /dev/null +++ b/trunk/Documentation/DocBook/media/pipeline.png.b64 @@ -0,0 +1,213 @@ +iVBORw0KGgoAAAANSUhEUgAAAlgAAAEcCAMAAAAsmToJAAAAAXNSR0IArs4c6QAAAwBQTFRFAAEA +EAEBAwUBCgMBCAUKAgkMHQIDCwYXFQYDBgkVDwgFCAsHChASJwkDFA4NEg4TDhANHgwHDg8aExAG +DBEjBBUZERMQCBNRDxU0ExcZFRgVFRcgCRkzHBcUDRdCNRELIxYTAx4mLBUMEBwcEhsiDxwhExsu +Dh8XJRkQByAtDCMUHx4bACk0DSsiGScsFCRcJSUiGSZCDiwqGCg1LyQbIycpVhsPDy0wNyQVECxA +PSIfCS84ADJCEStWRiIULSwpADdHCDkgEy1/BjorEjhADDhXCzZvITNPUysQDzs8MjIvCj04BT1O +PDEoQjEhMDU3LzY9KTdFTTMYNzk2GD6PAEpfEUVjBExFCEpPB1ArK0FjKEVZYTscdDYXG0d5SkA5 +FEiJQUNAOURPAFhCA1RpP0ZJVEMvYUAyBFtRWkYnDlR+QEleAF1jkTojHlV1AGB4PlN5YU87cUws +SVRXAGaBWVJKUlRRRVZlAG1PWFNSBGt5AmqVAG+NAHNpK17BWl9ifFs9KWmnSGZ0YGFfp1IuCnWj +AHuKbWBXoVNAdGBPDniWAHujTWmLk14rAH+ch19XX2aRX2t8AIeLiWgvAIeeAIaqa21rOnehdW1m +AImspWJYj2tLW3C0AIyvWXaNAo6xb3Z5dXZzent4WIKiQojAen+CkX1pcoSWcYDOoH9fp4E+Y4ur +hoWCXIvGb4mut3xpqYNYnYdUO5rDyXxdjY6LYJqk0IRGb5azXZnMjJGUgJWqpJB8l5aUyJN4kKK1 +rZ6IYqzge6Xho6GdnaWpgqy6yZ9zvaR0hqzMk6rN5Jxxw6mF26lbq7C2pLTGwrCbs7Owvb+8zcGc +8rp42L2xsMbY3L+jtMfsz8W2nM/yx8jH0MfA7MWU78h/3crIyNTo4NLD6dK1z9bc1dbT3NXOv9vr +/OKSwur8++Gw4uTh0ef78uPU+OPL3Ojz++bGyfH36evo/+3b6vT88vPw/feu1/v+//bb//nK/PnW +5f/+//ro+fv49/7///37//71//3//v/8sZeTnQAAAAFiS0dEAIgFHUgAAAAJcEhZcwAAFY4AABWO +AUTUBDsAAAAHdElNRQfaCRQPAiJBEFMLAAAgAElEQVR42u2dD3wU5bX300nWws50shA4lyTGikRE +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 diff --git a/trunk/Documentation/DocBook/v4l/.gitignore b/trunk/Documentation/DocBook/media/v4l/.gitignore similarity index 100% rename from trunk/Documentation/DocBook/v4l/.gitignore rename to trunk/Documentation/DocBook/media/v4l/.gitignore diff --git a/trunk/Documentation/DocBook/v4l/biblio.xml b/trunk/Documentation/DocBook/media/v4l/biblio.xml similarity index 100% rename from trunk/Documentation/DocBook/v4l/biblio.xml rename to trunk/Documentation/DocBook/media/v4l/biblio.xml diff --git a/trunk/Documentation/DocBook/v4l/capture.c.xml b/trunk/Documentation/DocBook/media/v4l/capture.c.xml similarity index 100% rename from trunk/Documentation/DocBook/v4l/capture.c.xml rename to trunk/Documentation/DocBook/media/v4l/capture.c.xml diff --git a/trunk/Documentation/DocBook/v4l/common.xml b/trunk/Documentation/DocBook/media/v4l/common.xml similarity index 99% rename from trunk/Documentation/DocBook/v4l/common.xml rename to trunk/Documentation/DocBook/media/v4l/common.xml index 9028721438dc..a86f7a045529 100644 --- a/trunk/Documentation/DocBook/v4l/common.xml +++ b/trunk/Documentation/DocBook/media/v4l/common.xml @@ -236,7 +236,15 @@ important parts of the API. The &VIDIOC-QUERYCAP; ioctl is available to check if the kernel device is compatible with this specification, and to query the functions and I/O -methods supported by the device. Other features can be queried +methods supported by the device. + + Starting with kernel version 3.1, VIDIOC-QUERYCAP will return the +V4L2 API version used by the driver, with generally matches the Kernel version. +There's no need of using &VIDIOC-QUERYCAP; to check if an specific ioctl is +supported, the V4L2 core now returns ENOIOCTLCMD if a driver doesn't provide +support for an ioctl. + + Other features can be queried by calling the respective ioctl, for example &VIDIOC-ENUMINPUT; to learn about the number, types and names of video connectors on the device. Although abstraction is a major objective of this API, the diff --git a/trunk/Documentation/DocBook/v4l/compat.xml b/trunk/Documentation/DocBook/media/v4l/compat.xml similarity index 99% rename from trunk/Documentation/DocBook/v4l/compat.xml rename to trunk/Documentation/DocBook/media/v4l/compat.xml index 9f7cd4f25792..ce1004a7da52 100644 --- a/trunk/Documentation/DocBook/v4l/compat.xml +++ b/trunk/Documentation/DocBook/media/v4l/compat.xml @@ -10,12 +10,10 @@ driver writers to port or update their code. The Video For Linux API was first introduced in Linux 2.1 to unify and replace various TV and radio device related interfaces, developed independently by driver writers in prior years. Starting -with Linux 2.5 the much improved V4L2 API replaces the V4L API, -although existing drivers will continue to support V4L applications in -the future, either directly or through the V4L2 compatibility layer in -the videodev kernel module translating ioctls on -the fly. For a transition period not all drivers will support the V4L2 -API. +with Linux 2.5 the much improved V4L2 API replaces the V4L API. +The support for the old V4L calls were removed from Kernel, but the +library supports the conversion of a V4L +API system call into a V4L2 one.
Opening and Closing Devices @@ -84,12 +82,7 @@ not compatible with V4L or V4L2. , device file. V4L2 drivers may support multiple opens, see for details and consequences. - V4L drivers respond to V4L2 ioctls with an &EINVAL;. The -compatibility layer in the V4L2 videodev module -can translate V4L ioctl requests to their V4L2 counterpart, however a -V4L2 driver usually needs more preparation to become fully V4L -compatible. This is covered in more detail in . + V4L drivers respond to V4L2 ioctls with an &EINVAL;.
@@ -2367,6 +2360,16 @@ that used it. It was originally scheduled for removal in 2.6.35.
+
+ V4L2 in Linux 3.1 + + + VIDIOC_QUERYCAP now returns a per-subsystem version instead of a per-driver one. + Standardize an error code for invalid ioctl. + Added V4L2_CTRL_TYPE_BITMASK. + + +
Relation of V4L2 to other Linux multimedia APIs @@ -2472,6 +2475,9 @@ ioctls. &VIDIOC-DBG-G-CHIP-IDENT; ioctl. + + Flash API. +
diff --git a/trunk/Documentation/DocBook/v4l/controls.xml b/trunk/Documentation/DocBook/media/v4l/controls.xml similarity index 62% rename from trunk/Documentation/DocBook/v4l/controls.xml rename to trunk/Documentation/DocBook/media/v4l/controls.xml index a920ee80f640..85164016ed26 100644 --- a/trunk/Documentation/DocBook/v4l/controls.xml +++ b/trunk/Documentation/DocBook/media/v4l/controls.xml @@ -51,6 +51,10 @@ readability until any ioctl (querying the properties) is called. + + All controls use machine endianness. + + Control IDs @@ -323,6 +327,22 @@ minimum value disables backlight compensation. End of the predefined control IDs (currently V4L2_CID_ILLUMINATORS_2 + 1). + + + V4L2_CID_MIN_BUFFERS_FOR_CAPTURE + integer + This is a read-only control that can be read by the application +and used as a hint to determine the number of CAPTURE buffers to pass to REQBUFS. +The value is the minimum number of CAPTURE buffers that is necessary for hardware +to work. + + + V4L2_CID_MIN_BUFFERS_FOR_OUTPUT + integer + This is a read-only control that can be read by the application +and used as a hint to determine the number of OUTPUT buffers to pass to REQBUFS. +The value is the minimum number of OUTPUT buffers that is necessary for hardware +to work. V4L2_CID_PRIVATE_BASE @@ -545,6 +565,10 @@ may not be supported (VIDIOC_QUERYMENU will return an error). A good example is the list of supported MPEG audio bitrates. Some drivers only support one or two bitrates, others support a wider range. + + + All controls use machine endianness. +
@@ -670,7 +694,8 @@ caption of a Tab page in a GUI, for example. The MPEG-1, -2 or -4 output stream type. One cannot assume anything here. Each hardware MPEG encoder tends to support different subsets of the available MPEG -stream types. The currently defined stream types are: +stream types. This control is specific to multiplexed MPEG streams. +The currently defined stream types are: @@ -800,6 +825,7 @@ frequency. Possible values are: V4L2_CID_MPEG_AUDIO_ENCODING  enum v4l2_mpeg_audio_encoding MPEG Audio encoding. +This control is specific to multiplexed MPEG streams. Possible values are: @@ -1250,7 +1276,8 @@ and reproducible audio bitstream. 0 = unmuted, 1 = muted. V4L2_CID_MPEG_VIDEO_ENCODING  enum v4l2_mpeg_video_encoding MPEG Video encoding -method. Possible values are: +method. This control is specific to multiplexed MPEG streams. +Possible values are: @@ -1406,225 +1433,1178 @@ of the video. The supplied 32-bit integer is interpreted as follows (bit - - -
-
-
- CX2341x MPEG Controls - The following MPEG class controls deal with MPEG -encoding settings that are specific to the Conexant CX23415 and -CX23416 MPEG encoding chips. + + + V4L2_CID_MPEG_VIDEO_DECODER_SLICE_INTERFACE  + boolean + + If enabled the decoder expects to receive a single slice per buffer, otherwise +the decoder expects a single frame in per buffer. Applicable to the decoder, all codecs. + + - - CX2341x Control IDs - - - - - - - - + - ID - Type - Description + V4L2_CID_MPEG_VIDEO_H264_VUI_SAR_ENABLE  + boolean - - + Enable writing sample aspect ratio in the Video Usability Information. +Applicable to the H264 encoder. + + - - V4L2_CID_MPEG_CX2341X_VIDEO_SPATIAL_FILTER_MODE  - enum v4l2_mpeg_cx2341x_video_spatial_filter_mode - Sets the Spatial -Filter mode (default MANUAL). Possible values -are: + + V4L2_CID_MPEG_VIDEO_H264_VUI_SAR_IDC  + enum v4l2_mpeg_video_h264_vui_sar_idc + + VUI sample aspect ratio indicator for H.264 encoding. The value +is defined in the table E-1 in the standard. Applicable to the H264 encoder. - - V4L2_MPEG_CX2341X_VIDEO_SPATIAL_FILTER_MODE_MANUAL  - Choose the filter manually - - - V4L2_MPEG_CX2341X_VIDEO_SPATIAL_FILTER_MODE_AUTO  - Choose the filter automatically - + + + V4L2_MPEG_VIDEO_H264_VUI_SAR_IDC_UNSPECIFIED  + Unspecified + + + V4L2_MPEG_VIDEO_H264_VUI_SAR_IDC_1x1  + 1x1 + + + V4L2_MPEG_VIDEO_H264_VUI_SAR_IDC_12x11  + 12x11 + + + V4L2_MPEG_VIDEO_H264_VUI_SAR_IDC_10x11  + 10x11 + + + V4L2_MPEG_VIDEO_H264_VUI_SAR_IDC_16x11  + 16x11 + + + V4L2_MPEG_VIDEO_H264_VUI_SAR_IDC_40x33  + 40x33 + + + V4L2_MPEG_VIDEO_H264_VUI_SAR_IDC_24x11  + 24x11 + + + V4L2_MPEG_VIDEO_H264_VUI_SAR_IDC_20x11  + 20x11 + + + V4L2_MPEG_VIDEO_H264_VUI_SAR_IDC_32x11  + 32x11 + + + V4L2_MPEG_VIDEO_H264_VUI_SAR_IDC_80x33  + 80x33 + + + V4L2_MPEG_VIDEO_H264_VUI_SAR_IDC_18x11  + 18x11 + + + V4L2_MPEG_VIDEO_H264_VUI_SAR_IDC_15x11  + 15x11 + + + V4L2_MPEG_VIDEO_H264_VUI_SAR_IDC_64x33  + 64x33 + + + V4L2_MPEG_VIDEO_H264_VUI_SAR_IDC_160x99  + 160x99 + + + V4L2_MPEG_VIDEO_H264_VUI_SAR_IDC_4x3  + 4x3 + + + V4L2_MPEG_VIDEO_H264_VUI_SAR_IDC_3x2  + 3x2 + + + V4L2_MPEG_VIDEO_H264_VUI_SAR_IDC_2x1  + 2x1 + + + V4L2_MPEG_VIDEO_H264_VUI_SAR_IDC_EXTENDED  + Extended SAR + + - V4L2_CID_MPEG_CX2341X_VIDEO_SPATIAL_FILTER  - integer (0-15) - The setting for the -Spatial Filter. 0 = off, 15 = maximum. (Default is 0.) + V4L2_CID_MPEG_VIDEO_H264_VUI_EXT_SAR_WIDTH  + integer + Extended sample aspect ratio width for H.264 VUI encoding. +Applicable to the H264 encoder. + + - - V4L2_CID_MPEG_CX2341X_VIDEO_LUMA_SPATIAL_FILTER_TYPE  - enum v4l2_mpeg_cx2341x_video_luma_spatial_filter_type - Select the algorithm -to use for the Luma Spatial Filter (default -1D_HOR). Possible values: + + V4L2_CID_MPEG_VIDEO_H264_VUI_EXT_SAR_HEIGHT  + integer + + Extended sample aspect ratio height for H.264 VUI encoding. +Applicable to the H264 encoder. + + + + + V4L2_CID_MPEG_VIDEO_H264_LEVEL  + enum v4l2_mpeg_video_h264_level + + The level information for the H264 video elementary stream. +Applicable to the H264 encoder. +Possible values are: - V4L2_MPEG_CX2341X_VIDEO_LUMA_SPATIAL_FILTER_TYPE_OFF  - No filter + V4L2_MPEG_VIDEO_H264_LEVEL_1_0  + Level 1.0 - V4L2_MPEG_CX2341X_VIDEO_LUMA_SPATIAL_FILTER_TYPE_1D_HOR  - One-dimensional horizontal + V4L2_MPEG_VIDEO_H264_LEVEL_1B  + Level 1B - V4L2_MPEG_CX2341X_VIDEO_LUMA_SPATIAL_FILTER_TYPE_1D_VERT  - One-dimensional vertical + V4L2_MPEG_VIDEO_H264_LEVEL_1_1  + Level 1.1 - V4L2_MPEG_CX2341X_VIDEO_LUMA_SPATIAL_FILTER_TYPE_2D_HV_SEPARABLE  - Two-dimensional separable + V4L2_MPEG_VIDEO_H264_LEVEL_1_2  + Level 1.2 - V4L2_MPEG_CX2341X_VIDEO_LUMA_SPATIAL_FILTER_TYPE_2D_SYM_NON_SEPARABLE  - Two-dimensional symmetrical -non-separable + V4L2_MPEG_VIDEO_H264_LEVEL_1_3  + Level 1.3 + + + V4L2_MPEG_VIDEO_H264_LEVEL_2_0  + Level 2.0 + + + V4L2_MPEG_VIDEO_H264_LEVEL_2_1  + Level 2.1 + + + V4L2_MPEG_VIDEO_H264_LEVEL_2_2  + Level 2.2 + + + V4L2_MPEG_VIDEO_H264_LEVEL_3_0  + Level 3.0 + + + V4L2_MPEG_VIDEO_H264_LEVEL_3_1  + Level 3.1 + + + V4L2_MPEG_VIDEO_H264_LEVEL_3_2  + Level 3.2 + + + V4L2_MPEG_VIDEO_H264_LEVEL_4_0  + Level 4.0 + + + V4L2_MPEG_VIDEO_H264_LEVEL_4_1  + Level 4.1 + + + V4L2_MPEG_VIDEO_H264_LEVEL_4_2  + Level 4.2 + + + V4L2_MPEG_VIDEO_H264_LEVEL_5_0  + Level 5.0 + + + V4L2_MPEG_VIDEO_H264_LEVEL_5_1  + Level 5.1 + - - V4L2_CID_MPEG_CX2341X_VIDEO_CHROMA_SPATIAL_FILTER_TYPE  - enum v4l2_mpeg_cx2341x_video_chroma_spatial_filter_type - Select the algorithm -for the Chroma Spatial Filter (default 1D_HOR). + + V4L2_CID_MPEG_VIDEO_MPEG4_LEVEL  + enum v4l2_mpeg_video_mpeg4_level + + The level information for the MPEG4 elementary stream. +Applicable to the MPEG4 encoder. Possible values are: - V4L2_MPEG_CX2341X_VIDEO_CHROMA_SPATIAL_FILTER_TYPE_OFF  - No filter + V4L2_MPEG_VIDEO_LEVEL_0  + Level 0 - V4L2_MPEG_CX2341X_VIDEO_CHROMA_SPATIAL_FILTER_TYPE_1D_HOR  - One-dimensional horizontal + V4L2_MPEG_VIDEO_LEVEL_0B  + Level 0b + + + V4L2_MPEG_VIDEO_LEVEL_1  + Level 1 + + + V4L2_MPEG_VIDEO_LEVEL_2  + Level 2 + + + V4L2_MPEG_VIDEO_LEVEL_3  + Level 3 + + + V4L2_MPEG_VIDEO_LEVEL_3B  + Level 3b + + + V4L2_MPEG_VIDEO_LEVEL_4  + Level 4 + + + V4L2_MPEG_VIDEO_LEVEL_5  + Level 5 + - - V4L2_CID_MPEG_CX2341X_VIDEO_TEMPORAL_FILTER_MODE  - enum v4l2_mpeg_cx2341x_video_temporal_filter_mode - Sets the Temporal -Filter mode (default MANUAL). Possible values -are: + + V4L2_CID_MPEG_VIDEO_H264_PROFILE  + enum v4l2_mpeg_h264_profile + + The profile information for H264. +Applicable to the H264 encoder. +Possible values are: - V4L2_MPEG_CX2341X_VIDEO_TEMPORAL_FILTER_MODE_MANUAL  - Choose the filter manually + V4L2_MPEG_VIDEO_H264_PROFILE_BASELINE  + Baseline profile - V4L2_MPEG_CX2341X_VIDEO_TEMPORAL_FILTER_MODE_AUTO  - Choose the filter automatically + V4L2_MPEG_VIDEO_H264_PROFILE_CONSTRAINED_BASELINE  + Constrained Baseline profile + + + V4L2_MPEG_VIDEO_H264_PROFILE_MAIN  + Main profile + + + V4L2_MPEG_VIDEO_H264_PROFILE_EXTENDED  + Extended profile + + + V4L2_MPEG_VIDEO_H264_PROFILE_HIGH  + High profile + + V4L2_MPEG_VIDEO_H264_PROFILE_HIGH_10  + High 10 profile + + + V4L2_MPEG_VIDEO_H264_PROFILE_HIGH_422  + High 422 profile + + + V4L2_MPEG_VIDEO_H264_PROFILE_HIGH_444_PREDICTIVE  + High 444 Predictive profile + + + V4L2_MPEG_VIDEO_H264_PROFILE_HIGH_10_INTRA  + High 10 Intra profile + + + V4L2_MPEG_VIDEO_H264_PROFILE_HIGH_422_INTRA  + High 422 Intra profile + + + V4L2_MPEG_VIDEO_H264_PROFILE_HIGH_444_INTRA  + High 444 Intra profile + + + V4L2_MPEG_VIDEO_H264_PROFILE_CAVLC_444_INTRA  + CAVLC 444 Intra profile + + + V4L2_MPEG_VIDEO_H264_PROFILE_SCALABLE_BASELINE  + Scalable Baseline profile + + + V4L2_MPEG_VIDEO_H264_PROFILE_SCALABLE_HIGH  + Scalable High profile + + + V4L2_MPEG_VIDEO_H264_PROFILE_SCALABLE_HIGH_INTRA  + Scalable High Intra profile + + + V4L2_MPEG_VIDEO_H264_PROFILE_STEREO_HIGH  + Stereo High profile + + + V4L2_MPEG_VIDEO_H264_PROFILE_MULTIVIEW_HIGH  + Multiview High profile + + + - V4L2_CID_MPEG_CX2341X_VIDEO_TEMPORAL_FILTER  - integer (0-31) - The setting for the -Temporal Filter. 0 = off, 31 = maximum. (Default is 8 for full-scale -capturing and 0 for scaled capturing.) + V4L2_CID_MPEG_VIDEO_MPEG4_PROFILE  + enum v4l2_mpeg_mpeg4_profile - - - V4L2_CID_MPEG_CX2341X_VIDEO_MEDIAN_FILTER_TYPE  - enum v4l2_mpeg_cx2341x_video_median_filter_type - Median Filter Type -(default OFF). Possible values are: + The profile information for MPEG4. +Applicable to the MPEG4 encoder. +Possible values are: - V4L2_MPEG_CX2341X_VIDEO_MEDIAN_FILTER_TYPE_OFF  - No filter + V4L2_MPEG_VIDEO_PROFILE_SIMPLE  + Simple profile - V4L2_MPEG_CX2341X_VIDEO_MEDIAN_FILTER_TYPE_HOR  - Horizontal filter + V4L2_MPEG_VIDEO_PROFILE_ADVANCED_SIMPLE  + Advanced Simple profile - V4L2_MPEG_CX2341X_VIDEO_MEDIAN_FILTER_TYPE_VERT  - Vertical filter + V4L2_MPEG_VIDEO_PROFILE_CORE  + Core profile - V4L2_MPEG_CX2341X_VIDEO_MEDIAN_FILTER_TYPE_HOR_VERT  - Horizontal and vertical filter + V4L2_MPEG_VIDEO_PROFILE_SIMPLE_SCALABLE  + Simple Scalable profile - V4L2_MPEG_CX2341X_VIDEO_MEDIAN_FILTER_TYPE_DIAG  - Diagonal filter + V4L2_MPEG_VIDEO_PROFILE_ADVANCED_CODING_EFFICIENCY  + + - V4L2_CID_MPEG_CX2341X_VIDEO_LUMA_MEDIAN_FILTER_BOTTOM  - integer (0-255) - Threshold above which -the luminance median filter is enabled (default 0) + V4L2_CID_MPEG_VIDEO_MAX_REF_PIC  + integer + + The maximum number of reference pictures used for encoding. +Applicable to the encoder. + + - V4L2_CID_MPEG_CX2341X_VIDEO_LUMA_MEDIAN_FILTER_TOP  - integer (0-255) - Threshold below which -the luminance median filter is enabled (default 255) + V4L2_CID_MPEG_VIDEO_MULTI_SLICE_MODE  + enum v4l2_mpeg_multi_slice_mode + + Determines how the encoder should handle division of frame into slices. +Applicable to the encoder. +Possible values are: - - V4L2_CID_MPEG_CX2341X_VIDEO_CHROMA_MEDIAN_FILTER_BOTTOM  - integer (0-255) - Threshold above which -the chroma median filter is enabled (default 0) + + + + V4L2_MPEG_VIDEO_MULTI_SLICE_MODE_SINGLE  + Single slice per frame. + + + V4L2_MPEG_VIDEO_MULTI_SLICE_MODE_MAX_MB  + Multiple slices with set maximum number of macroblocks per slice. + + + V4L2_MPEG_VIDEO_MULTI_SLICE_MODE_MAX_BYTES  + Multiple slice with set maximum size in bytes per slice. + + + + - V4L2_CID_MPEG_CX2341X_VIDEO_CHROMA_MEDIAN_FILTER_TOP  - integer (0-255) - Threshold below which -the chroma median filter is enabled (default 255) + V4L2_CID_MPEG_VIDEO_MULTI_SLICE_MAX_MB  + integer + The maximum number of macroblocks in a slice. Used when +V4L2_CID_MPEG_VIDEO_MULTI_SLICE_MODE is set to V4L2_MPEG_VIDEO_MULTI_SLICE_MODE_MAX_MB. +Applicable to the encoder. + + - V4L2_CID_MPEG_CX2341X_STREAM_INSERT_NAV_PACKETS  - boolean + V4L2_CID_MPEG_VIDEO_MULTI_SLICE_MAX_BYTES  + integer - The CX2341X MPEG encoder -can insert one empty MPEG-2 PES packet into the stream between every -four video frames. The packet size is 2048 bytes, including the -packet_start_code_prefix and stream_id fields. The stream_id is 0xBF -(private stream 2). The payload consists of 0x00 bytes, to be filled -in by the application. 0 = do not insert, 1 = insert packets. + The maximum size of a slice in bytes. Used when +V4L2_CID_MPEG_VIDEO_MULTI_SLICE_MODE is set to V4L2_MPEG_VIDEO_MULTI_SLICE_MODE_MAX_BYTES. +Applicable to the encoder. - + + + + V4L2_CID_MPEG_VIDEO_H264_LOOP_FILTER_MODE  + enum v4l2_mpeg_h264_loop_filter_mode + + Loop filter mode for H264 encoder. +Possible values are: + + + + + + V4L2_MPEG_VIDEO_H264_LOOP_FILTER_MODE_ENABLED  + Loop filter is enabled. + + + V4L2_MPEG_VIDEO_H264_LOOP_FILTER_MODE_DISABLED  + Loop filter is disabled. + + + V4L2_MPEG_VIDEO_H264_LOOP_FILTER_MODE_DISABLED_AT_SLICE_BOUNDARY  + Loop filter is disabled at the slice boundary. + + + + + + + + V4L2_CID_MPEG_VIDEO_H264_LOOP_FILTER_ALPHA  + integer + + Loop filter alpha coefficient, defined in the H264 standard. +Applicable to the H264 encoder. + + + + + V4L2_CID_MPEG_VIDEO_H264_LOOP_FILTER_BETA  + integer + + Loop filter beta coefficient, defined in the H264 standard. +Applicable to the H264 encoder. + + + + + V4L2_CID_MPEG_VIDEO_H264_ENTROPY_MODE  + enum v4l2_mpeg_h264_symbol_mode + + Entropy coding mode for H264 - CABAC/CAVALC. +Applicable to the H264 encoder. +Possible values are: + + + + + + V4L2_MPEG_VIDEO_H264_ENTROPY_MODE_CAVLC  + Use CAVLC entropy coding. + + + V4L2_MPEG_VIDEO_H264_ENTROPY_MODE_CABAC  + Use CABAC entropy coding. + + + + + + + + V4L2_CID_MPEG_VIDEO_H264_8X8_TRANSFORM  + boolean + + Enable 8X8 transform for H264. Applicable to the H264 encoder. + + + + + V4L2_CID_MPEG_VIDEO_CYCLIC_INTRA_REFRESH_MB  + integer + + Cyclic intra macroblock refresh. This is the number of continuous macroblocks +refreshed every frame. Each frame a succesive set of macroblocks is refreshed until the cycle completes and starts from the +top of the frame. Applicable to H264, H263 and MPEG4 encoder. + + + + + V4L2_CID_MPEG_VIDEO_FRAME_RC_ENABLE  + boolean + + Frame level rate control enable. +If this control is disabled then the quantization parameter for each frame type is constant and set with appropriate controls +(e.g. V4L2_CID_MPEG_VIDEO_H263_I_FRAME_QP). +If frame rate control is enabled then quantization parameter is adjusted to meet the chosen bitrate. Minimum and maximum value +for the quantization parameter can be set with appropriate controls (e.g. V4L2_CID_MPEG_VIDEO_H263_MIN_QP). +Applicable to encoders. + + + + + V4L2_CID_MPEG_VIDEO_MB_RC_ENABLE  + boolean + + Macroblock level rate control enable. +Applicable to the MPEG4 and H264 encoders. + + + + + V4L2_CID_MPEG_VIDEO_MPEG4_QPEL  + boolean + + Quarter pixel motion estimation for MPEG4. Applicable to the MPEG4 encoder. + + + + + V4L2_CID_MPEG_VIDEO_H263_I_FRAME_QP  + integer + + Quantization parameter for an I frame for H263. Valid range: from 1 to 31. + + + + + V4L2_CID_MPEG_VIDEO_H263_MIN_QP  + integer + + Minimum quantization parameter for H263. Valid range: from 1 to 31. + + + + + V4L2_CID_MPEG_VIDEO_H263_MAX_QP  + integer + + Maximum quantization parameter for H263. Valid range: from 1 to 31. + + + + + V4L2_CID_MPEG_VIDEO_H263_P_FRAME_QP  + integer + + Quantization parameter for an P frame for H263. Valid range: from 1 to 31. + + + + + V4L2_CID_MPEG_VIDEO_H263_B_FRAME_QP  + integer + + Quantization parameter for an B frame for H263. Valid range: from 1 to 31. + + + + + V4L2_CID_MPEG_VIDEO_H264_I_FRAME_QP  + integer + + Quantization parameter for an I frame for H264. Valid range: from 0 to 51. + + + + + V4L2_CID_MPEG_VIDEO_H264_MIN_QP  + integer + + Minimum quantization parameter for H264. Valid range: from 0 to 51. + + + + + V4L2_CID_MPEG_VIDEO_H264_MAX_QP  + integer + + Maximum quantization parameter for H264. Valid range: from 0 to 51. + + + + + V4L2_CID_MPEG_VIDEO_H264_P_FRAME_QP  + integer + + Quantization parameter for an P frame for H264. Valid range: from 0 to 51. + + + + + V4L2_CID_MPEG_VIDEO_H264_B_FRAME_QP  + integer + + Quantization parameter for an B frame for H264. Valid range: from 0 to 51. + + + + + V4L2_CID_MPEG_VIDEO_MPEG4_I_FRAME_QP  + integer + + Quantization parameter for an I frame for MPEG4. Valid range: from 1 to 31. + + + + + V4L2_CID_MPEG_VIDEO_MPEG4_MIN_QP  + integer + + Minimum quantization parameter for MPEG4. Valid range: from 1 to 31. + + + + + V4L2_CID_MPEG_VIDEO_MPEG4_MAX_QP  + integer + + Maximum quantization parameter for MPEG4. Valid range: from 1 to 31. + + + + + V4L2_CID_MPEG_VIDEO_MPEG4_P_FRAME_QP  + integer + + Quantization parameter for an P frame for MPEG4. Valid range: from 1 to 31. + + + + + V4L2_CID_MPEG_VIDEO_MPEG4_B_FRAME_QP  + integer + + Quantization parameter for an B frame for MPEG4. Valid range: from 1 to 31. + + + + + V4L2_CID_MPEG_VIDEO_VBV_SIZE  + integer + + The Video Buffer Verifier size in kilobytes, it is used as a limitation of frame skip. +The VBV is defined in the standard as a mean to verify that the produced stream will be succesfully decoded. +The standard describes it as "Part of a hypothetical decoder that is conceptually connected to the +output of the encoder. Its purpose is to provide a constraint on the variability of the data rate that an +encoder or editing process may produce.". +Applicable to the MPEG1, MPEG2, MPEG4 encoders. + + + + + V4L2_CID_MPEG_VIDEO_H264_CPB_SIZE  + integer + + The Coded Picture Buffer size in kilobytes, it is used as a limitation of frame skip. +The CPB is defined in the H264 standard as a mean to verify that the produced stream will be succesfully decoded. +Applicable to the H264 encoder. + + + + + V4L2_CID_MPEG_VIDEO_H264_I_PERIOD  + integer + + Period between I-frames in the open GOP for H264. In case of an open GOP +this is the period between two I-frames. The period between IDR (Instantaneous Decoding Refresh) frames is taken from the GOP_SIZE control. +An IDR frame, which stands for Instantaneous Decoding Refresh is an I-frame after which no prior frames are +referenced. This means that a stream can be restarted from an IDR frame without the need to store or decode any +previous frames. Applicable to the H264 encoder. + + + + + V4L2_CID_MPEG_VIDEO_HEADER_MODE  + enum v4l2_mpeg_header_mode + + Determines whether the header is returned as the first buffer or is +it returned together with the first frame. Applicable to encoders. +Possible values are: + + + + + + V4L2_MPEG_VIDEO_HEADER_MODE_SEPARATE  + The stream header is returned separately in the first buffer. + + + V4L2_MPEG_VIDEO_HEADER_MODE_JOINED_WITH_1ST_FRAME  + The stream header is returned together with the first encoded frame. + + + + + + + V4L2_CID_MPEG_VIDEO_DECODER_MPEG4_DEBLOCK_FILTER  + boolean + Enabled the deblocking post processing filter for MPEG4 decoder. +Applicable to the MPEG4 decoder. + + + + V4L2_CID_MPEG_VIDEO_MPEG4_VOP_TIME_RES  + integer + vop_time_increment_resolution value for MPEG4. Applicable to the MPEG4 encoder. + + + + V4L2_CID_MPEG_VIDEO_MPEG4_VOP_TIME_INC  + integer + vop_time_increment value for MPEG4. Applicable to the MPEG4 encoder. + + + + +
+
+ +
+ MFC 5.1 MPEG Controls + + The following MPEG class controls deal with MPEG +decoding and encoding settings that are specific to the Multi Format Codec 5.1 device present +in the S5P family of SoCs by Samsung. + + + + MFC 5.1 Control IDs + + + + + + + + + + ID + Type + Description + + + + + + V4L2_CID_MPEG_MFC51_VIDEO_DECODER_H264_DISPLAY_DELAY_ENABLE  + integer + If the display delay is enabled then the decoder has to return a +CAPTURE buffer after processing a certain number of OUTPUT buffers. If this number is low, then it may result in +buffers not being dequeued in display order. In addition hardware may still use those buffers as reference, thus +application should not write to those buffers. This feature can be used for example for generating thumbnails of videos. +Applicable to the H264 decoder. + + + + + V4L2_CID_MPEG_MFC51_VIDEO_DECODER_H264_DISPLAY_DELAY  + integer + Display delay value for H264 decoder. +The decoder is forced to return a decoded frame after the set 'display delay' number of frames. If this number is +low it may result in frames returned out of dispaly order, in addition the hardware may still be using the returned buffer +as a reference picture for subsequent frames. + + + + + V4L2_CID_MPEG_MFC51_VIDEO_H264_NUM_REF_PIC_FOR_P  + integer + The number of reference pictures used for encoding a P picture. +Applicable to the H264 encoder. + + + + V4L2_CID_MPEG_MFC51_VIDEO_PADDING  + boolean + Padding enable in the encoder - use a color instead of repeating border pixels. +Applicable to encoders. + + + + V4L2_CID_MPEG_MFC51_VIDEO_PADDING_YUV  + integer + Padding color in the encoder. Applicable to encoders. The supplied 32-bit integer is interpreted as follows (bit +0 = least significant bit): + + + + + + Bit 0:7 + V chrominance information + + + Bit 8:15 + U chrominance information + + + Bit 16:23 + Y luminance information + + + Bit 24:31 + Must be zero. + + + + + + + V4L2_CID_MPEG_MFC51_VIDEO_RC_REACTION_COEFF  + integer + Reaction coefficient for MFC rate control. Applicable to encoders. +Note 1: Valid only when the frame level RC is enabled. +Note 2: For tight CBR, this field must be small (ex. 2 ~ 10). +For VBR, this field must be large (ex. 100 ~ 1000). +Note 3: It is not recommended to use the greater number than FRAME_RATE * (10^9 / BIT_RATE). + + + + + V4L2_CID_MPEG_MFC51_VIDEO_H264_ADAPTIVE_RC_DARK  + boolean + Adaptive rate control for dark region. +Valid only when H.264 and macroblock level RC is enabled (V4L2_CID_MPEG_VIDEO_MB_RC_ENABLE). +Applicable to the H264 encoder. + + + + V4L2_CID_MPEG_MFC51_VIDEO_H264_ADAPTIVE_RC_SMOOTH  + boolean + Adaptive rate control for smooth region. +Valid only when H.264 and macroblock level RC is enabled (V4L2_CID_MPEG_VIDEO_MB_RC_ENABLE). +Applicable to the H264 encoder. + + + + V4L2_CID_MPEG_MFC51_VIDEO_H264_ADAPTIVE_RC_STATIC  + boolean + Adaptive rate control for static region. +Valid only when H.264 and macroblock level RC is enabled (V4L2_CID_MPEG_VIDEO_MB_RC_ENABLE). +Applicable to the H264 encoder. + + + + V4L2_CID_MPEG_MFC51_VIDEO_H264_ADAPTIVE_RC_ACTIVITY  + boolean + Adaptive rate control for activity region. +Valid only when H.264 and macroblock level RC is enabled (V4L2_CID_MPEG_VIDEO_MB_RC_ENABLE). +Applicable to the H264 encoder. + + + + V4L2_CID_MPEG_MFC51_VIDEO_FRAME_SKIP_MODE  + enum v4l2_mpeg_mfc51_frame_skip_mode + + +Indicates in what conditions the encoder should skip frames. If encoding a frame would cause the encoded stream to be larger then +a chosen data limit then the frame will be skipped. +Possible values are: + + + + + + V4L2_MPEG_MFC51_FRAME_SKIP_MODE_DISABLED  + Frame skip mode is disabled. + + + V4L2_MPEG_MFC51_FRAME_SKIP_MODE_LEVEL_LIMIT  + Frame skip mode enabled and buffer limit is set by the chosen level and is defined by the standard. + + + V4L2_MPEG_MFC51_FRAME_SKIP_MODE_BUF_LIMIT  + Frame skip mode enabled and buffer limit is set by the VBV (MPEG1/2/4) or CPB (H264) buffer size control. + + + + + + + V4L2_CID_MPEG_MFC51_VIDEO_RC_FIXED_TARGET_BIT  + integer + Enable rate-control with fixed target bit. +If this setting is enabled, then the rate control logic of the encoder will calculate the average bitrate +for a GOP and keep it below or equal the set bitrate target. Otherwise the rate control logic calculates the +overall average bitrate for the stream and keeps it below or equal to the set bitrate. In the first case +the average bitrate for the whole stream will be smaller then the set bitrate. This is caused because the +average is calculated for smaller number of frames, on the other hand enabling this setting will ensure that +the stream will meet tight bandwidth contraints. Applicable to encoders. + + + + + V4L2_CID_MPEG_MFC51_VIDEO_FORCE_FRAME_TYPE  + enum v4l2_mpeg_mfc51_force_frame_type + + Force a frame type for the next queued buffer. Applicable to encoders. +Possible values are: + + + + + + V4L2_MPEG_MFC51_FORCE_FRAME_TYPE_DISABLED  + Forcing a specific frame type disabled. + + + V4L2_MPEG_MFC51_FORCE_FRAME_TYPE_I_FRAME  + Force an I-frame. + + + V4L2_MPEG_MFC51_FORCE_FRAME_TYPE_NOT_CODED  + Force a non-coded frame. + + + + + + +
+
+ +
+ CX2341x MPEG Controls + + The following MPEG class controls deal with MPEG +encoding settings that are specific to the Conexant CX23415 and +CX23416 MPEG encoding chips. + + + CX2341x Control IDs + + + + + + + + + + ID + Type + Description + + + + + + V4L2_CID_MPEG_CX2341X_VIDEO_SPATIAL_FILTER_MODE  + enum v4l2_mpeg_cx2341x_video_spatial_filter_mode + Sets the Spatial +Filter mode (default MANUAL). Possible values +are: + + + + + + V4L2_MPEG_CX2341X_VIDEO_SPATIAL_FILTER_MODE_MANUAL  + Choose the filter manually + + + V4L2_MPEG_CX2341X_VIDEO_SPATIAL_FILTER_MODE_AUTO  + Choose the filter automatically + + + + + + + V4L2_CID_MPEG_CX2341X_VIDEO_SPATIAL_FILTER  + integer (0-15) + The setting for the +Spatial Filter. 0 = off, 15 = maximum. (Default is 0.) + + + + V4L2_CID_MPEG_CX2341X_VIDEO_LUMA_SPATIAL_FILTER_TYPE  + enum v4l2_mpeg_cx2341x_video_luma_spatial_filter_type + Select the algorithm +to use for the Luma Spatial Filter (default +1D_HOR). Possible values: + + + + + + V4L2_MPEG_CX2341X_VIDEO_LUMA_SPATIAL_FILTER_TYPE_OFF  + No filter + + + V4L2_MPEG_CX2341X_VIDEO_LUMA_SPATIAL_FILTER_TYPE_1D_HOR  + One-dimensional horizontal + + + V4L2_MPEG_CX2341X_VIDEO_LUMA_SPATIAL_FILTER_TYPE_1D_VERT  + One-dimensional vertical + + + V4L2_MPEG_CX2341X_VIDEO_LUMA_SPATIAL_FILTER_TYPE_2D_HV_SEPARABLE  + Two-dimensional separable + + + V4L2_MPEG_CX2341X_VIDEO_LUMA_SPATIAL_FILTER_TYPE_2D_SYM_NON_SEPARABLE  + Two-dimensional symmetrical +non-separable + + + + + + + V4L2_CID_MPEG_CX2341X_VIDEO_CHROMA_SPATIAL_FILTER_TYPE  + enum v4l2_mpeg_cx2341x_video_chroma_spatial_filter_type + Select the algorithm +for the Chroma Spatial Filter (default 1D_HOR). +Possible values are: + + + + + + V4L2_MPEG_CX2341X_VIDEO_CHROMA_SPATIAL_FILTER_TYPE_OFF  + No filter + + + V4L2_MPEG_CX2341X_VIDEO_CHROMA_SPATIAL_FILTER_TYPE_1D_HOR  + One-dimensional horizontal + + + + + + + V4L2_CID_MPEG_CX2341X_VIDEO_TEMPORAL_FILTER_MODE  + enum v4l2_mpeg_cx2341x_video_temporal_filter_mode + Sets the Temporal +Filter mode (default MANUAL). Possible values +are: + + + + + + V4L2_MPEG_CX2341X_VIDEO_TEMPORAL_FILTER_MODE_MANUAL  + Choose the filter manually + + + V4L2_MPEG_CX2341X_VIDEO_TEMPORAL_FILTER_MODE_AUTO  + Choose the filter automatically + + + + + + + V4L2_CID_MPEG_CX2341X_VIDEO_TEMPORAL_FILTER  + integer (0-31) + The setting for the +Temporal Filter. 0 = off, 31 = maximum. (Default is 8 for full-scale +capturing and 0 for scaled capturing.) + + + + V4L2_CID_MPEG_CX2341X_VIDEO_MEDIAN_FILTER_TYPE  + enum v4l2_mpeg_cx2341x_video_median_filter_type + Median Filter Type +(default OFF). Possible values are: + + + + + + V4L2_MPEG_CX2341X_VIDEO_MEDIAN_FILTER_TYPE_OFF  + No filter + + + V4L2_MPEG_CX2341X_VIDEO_MEDIAN_FILTER_TYPE_HOR  + Horizontal filter + + + V4L2_MPEG_CX2341X_VIDEO_MEDIAN_FILTER_TYPE_VERT  + Vertical filter + + + V4L2_MPEG_CX2341X_VIDEO_MEDIAN_FILTER_TYPE_HOR_VERT  + Horizontal and vertical filter + + + V4L2_MPEG_CX2341X_VIDEO_MEDIAN_FILTER_TYPE_DIAG  + Diagonal filter + + + + + + + V4L2_CID_MPEG_CX2341X_VIDEO_LUMA_MEDIAN_FILTER_BOTTOM  + integer (0-255) + Threshold above which +the luminance median filter is enabled (default 0) + + + + V4L2_CID_MPEG_CX2341X_VIDEO_LUMA_MEDIAN_FILTER_TOP  + integer (0-255) + Threshold below which +the luminance median filter is enabled (default 255) + + + + V4L2_CID_MPEG_CX2341X_VIDEO_CHROMA_MEDIAN_FILTER_BOTTOM  + integer (0-255) + Threshold above which +the chroma median filter is enabled (default 0) + + + + V4L2_CID_MPEG_CX2341X_VIDEO_CHROMA_MEDIAN_FILTER_TOP  + integer (0-255) + Threshold below which +the chroma median filter is enabled (default 255) + + + + V4L2_CID_MPEG_CX2341X_STREAM_INSERT_NAV_PACKETS  + boolean + + The CX2341X MPEG encoder +can insert one empty MPEG-2 PES packet into the stream between every +four video frames. The packet size is 2048 bytes, including the +packet_start_code_prefix and stream_id fields. The stream_id is 0xBF +(private stream 2). The payload consists of 0x00 bytes, to be filled +in by the application. 0 = do not insert, 1 = insert packets. + +
@@ -2092,6 +3072,289 @@ manually or automatically if set to zero. Unit, range and step are driver-specif For more details about RDS specification, refer to document, from CENELEC.
+ +
+ Flash Control Reference + + + Experimental + + This is an experimental +interface and may change in the future. + + + + The V4L2 flash controls are intended to provide generic access + to flash controller devices. Flash controller devices are + typically used in digital cameras. + + + + The interface can support both LED and xenon flash devices. As + of writing this, there is no xenon flash driver using this + interface. + + +
+ Supported use cases + +
+ Unsynchronised LED flash (software strobe) + + + Unsynchronised LED flash is controlled directly by the + host as the sensor. The flash must be enabled by the host + before the exposure of the image starts and disabled once + it ends. The host is fully responsible for the timing of + the flash. + + + Example of such device: Nokia N900. +
+ +
+ Synchronised LED flash (hardware strobe) + + + The synchronised LED flash is pre-programmed by the host + (power and timeout) but controlled by the sensor through a + strobe signal from the sensor to the flash. + + + + The sensor controls the flash duration and timing. This + information typically must be made available to the + sensor. + + +
+ +
+ LED flash as torch + + + LED flash may be used as torch in conjunction with another + use case involving camera or individually. + + +
+ +
+ + + Flash Control IDs + + + + + + + + + + + ID + Type + Description + + + + + + V4L2_CID_FLASH_CLASS + class + + + The FLASH class descriptor. + + + V4L2_CID_FLASH_LED_MODE + menu + + + Defines the mode of the flash LED, + the high-power white LED attached to the flash controller. + Setting this control may not be possible in presence of + some faults. See V4L2_CID_FLASH_FAULT. + + + + + + V4L2_FLASH_LED_MODE_NONE + Off. + + + V4L2_FLASH_LED_MODE_FLASH + Flash mode. + + + V4L2_FLASH_LED_MODE_TORCH + Torch mode. See V4L2_CID_FLASH_TORCH_INTENSITY. + + + + + + V4L2_CID_FLASH_STROBE_SOURCE + menu + + Defines the source of the flash LED + strobe. + + + + + + V4L2_FLASH_STROBE_SOURCE_SOFTWARE + The flash strobe is triggered by using + the V4L2_CID_FLASH_STROBE control. + + + V4L2_FLASH_STROBE_SOURCE_EXTERNAL + The flash strobe is triggered by an + external source. Typically this is a sensor, + which makes it possible to synchronises the + flash strobe start to exposure start. + + + + + + V4L2_CID_FLASH_STROBE + button + + + Strobe flash. Valid when + V4L2_CID_FLASH_LED_MODE is set to + V4L2_FLASH_LED_MODE_FLASH and V4L2_CID_FLASH_STROBE_SOURCE + is set to V4L2_FLASH_STROBE_SOURCE_SOFTWARE. Setting this + control may not be possible in presence of some faults. + See V4L2_CID_FLASH_FAULT. + + + V4L2_CID_FLASH_STROBE_STOP + button + + Stop flash strobe immediately. + + + V4L2_CID_FLASH_STROBE_STATUS + boolean + + + Strobe status: whether the flash + is strobing at the moment or not. This is a read-only + control. + + + V4L2_CID_FLASH_TIMEOUT + integer + + + Hardware timeout for flash. The + flash strobe is stopped after this period of time has + passed from the start of the strobe. + + + V4L2_CID_FLASH_INTENSITY + integer + + + Intensity of the flash strobe when + the flash LED is in flash mode + (V4L2_FLASH_LED_MODE_FLASH). The unit should be milliamps + (mA) if possible. + + + V4L2_CID_FLASH_TORCH_INTENSITY + integer + + + Intensity of the flash LED in + torch mode (V4L2_FLASH_LED_MODE_TORCH). The unit should be + milliamps (mA) if possible. Setting this control may not + be possible in presence of some faults. See + V4L2_CID_FLASH_FAULT. + + + V4L2_CID_FLASH_INDICATOR_INTENSITY + integer + + + Intensity of the indicator LED. + The indicator LED may be fully independent of the flash + LED. The unit should be microamps (uA) if possible. + + + V4L2_CID_FLASH_FAULT + bitmask + + + Faults related to the flash. The + faults tell about specific problems in the flash chip + itself or the LEDs attached to it. Faults may prevent + further use of some of the flash controls. In particular, + V4L2_CID_FLASH_LED_MODE is set to V4L2_FLASH_LED_MODE_NONE + if the fault affects the flash LED. Exactly which faults + have such an effect is chip dependent. Reading the faults + resets the control and returns the chip to a usable state + if possible. + + + + + + V4L2_FLASH_FAULT_OVER_VOLTAGE + Flash controller voltage to the flash LED + has exceeded the limit specific to the flash + controller. + + + V4L2_FLASH_FAULT_TIMEOUT + The flash strobe was still on when + the timeout set by the user --- + V4L2_CID_FLASH_TIMEOUT control --- has expired. + Not all flash controllers may set this in all + such conditions. + + + V4L2_FLASH_FAULT_OVER_TEMPERATURE + The flash controller has overheated. + + + V4L2_FLASH_FAULT_SHORT_CIRCUIT + The short circuit protection of the flash + controller has been triggered. + + + + + + V4L2_CID_FLASH_CHARGE + boolean + + Enable or disable charging of the xenon + flash capacitor. + + + V4L2_CID_FLASH_READY + boolean + + + Is the flash ready to strobe? + Xenon flashes require their capacitors charged before + strobing. LED flashes often require a cooldown period + after strobe during which another strobe will not be + possible. This is a read-only control. + + + + +
+ +
diff --git a/trunk/Documentation/DocBook/v4l/dev-osd.xml b/trunk/Documentation/DocBook/media/v4l/dev-osd.xml similarity index 100% rename from trunk/Documentation/DocBook/v4l/dev-osd.xml rename to trunk/Documentation/DocBook/media/v4l/dev-osd.xml diff --git a/trunk/Documentation/DocBook/v4l/dev-output.xml b/trunk/Documentation/DocBook/media/v4l/dev-output.xml similarity index 100% rename from trunk/Documentation/DocBook/v4l/dev-output.xml rename to trunk/Documentation/DocBook/media/v4l/dev-output.xml diff --git a/trunk/Documentation/DocBook/v4l/dev-overlay.xml b/trunk/Documentation/DocBook/media/v4l/dev-overlay.xml similarity index 100% rename from trunk/Documentation/DocBook/v4l/dev-overlay.xml rename to trunk/Documentation/DocBook/media/v4l/dev-overlay.xml diff --git a/trunk/Documentation/DocBook/v4l/dev-radio.xml b/trunk/Documentation/DocBook/media/v4l/dev-radio.xml similarity index 100% rename from trunk/Documentation/DocBook/v4l/dev-radio.xml rename to trunk/Documentation/DocBook/media/v4l/dev-radio.xml diff --git a/trunk/Documentation/DocBook/v4l/dev-raw-vbi.xml b/trunk/Documentation/DocBook/media/v4l/dev-raw-vbi.xml similarity index 100% rename from trunk/Documentation/DocBook/v4l/dev-raw-vbi.xml rename to trunk/Documentation/DocBook/media/v4l/dev-raw-vbi.xml diff --git a/trunk/Documentation/DocBook/v4l/dev-rds.xml b/trunk/Documentation/DocBook/media/v4l/dev-rds.xml similarity index 100% rename from trunk/Documentation/DocBook/v4l/dev-rds.xml rename to trunk/Documentation/DocBook/media/v4l/dev-rds.xml diff --git a/trunk/Documentation/DocBook/v4l/dev-sliced-vbi.xml b/trunk/Documentation/DocBook/media/v4l/dev-sliced-vbi.xml similarity index 100% rename from trunk/Documentation/DocBook/v4l/dev-sliced-vbi.xml rename to trunk/Documentation/DocBook/media/v4l/dev-sliced-vbi.xml diff --git a/trunk/Documentation/DocBook/v4l/dev-subdev.xml b/trunk/Documentation/DocBook/media/v4l/dev-subdev.xml similarity index 100% rename from trunk/Documentation/DocBook/v4l/dev-subdev.xml rename to trunk/Documentation/DocBook/media/v4l/dev-subdev.xml diff --git a/trunk/Documentation/DocBook/v4l/dev-teletext.xml b/trunk/Documentation/DocBook/media/v4l/dev-teletext.xml similarity index 100% rename from trunk/Documentation/DocBook/v4l/dev-teletext.xml rename to trunk/Documentation/DocBook/media/v4l/dev-teletext.xml diff --git a/trunk/Documentation/DocBook/v4l/driver.xml b/trunk/Documentation/DocBook/media/v4l/driver.xml similarity index 100% rename from trunk/Documentation/DocBook/v4l/driver.xml rename to trunk/Documentation/DocBook/media/v4l/driver.xml diff --git a/trunk/Documentation/DocBook/v4l/fdl-appendix.xml b/trunk/Documentation/DocBook/media/v4l/fdl-appendix.xml similarity index 100% rename from trunk/Documentation/DocBook/v4l/fdl-appendix.xml rename to trunk/Documentation/DocBook/media/v4l/fdl-appendix.xml diff --git a/trunk/Documentation/DocBook/v4l/fieldseq_bt.pdf b/trunk/Documentation/DocBook/media/v4l/fieldseq_bt.pdf similarity index 100% rename from trunk/Documentation/DocBook/v4l/fieldseq_bt.pdf rename to trunk/Documentation/DocBook/media/v4l/fieldseq_bt.pdf diff --git a/trunk/Documentation/DocBook/v4l/fieldseq_tb.pdf b/trunk/Documentation/DocBook/media/v4l/fieldseq_tb.pdf similarity index 100% rename from trunk/Documentation/DocBook/v4l/fieldseq_tb.pdf rename to trunk/Documentation/DocBook/media/v4l/fieldseq_tb.pdf diff --git a/trunk/Documentation/DocBook/v4l/func-close.xml b/trunk/Documentation/DocBook/media/v4l/func-close.xml similarity index 100% rename from trunk/Documentation/DocBook/v4l/func-close.xml rename to trunk/Documentation/DocBook/media/v4l/func-close.xml diff --git a/trunk/Documentation/DocBook/media/v4l/func-ioctl.xml b/trunk/Documentation/DocBook/media/v4l/func-ioctl.xml new file mode 100644 index 000000000000..2de64be706f5 --- /dev/null +++ b/trunk/Documentation/DocBook/media/v4l/func-ioctl.xml @@ -0,0 +1,79 @@ + + + V4L2 ioctl() + &manvol; + + + + v4l2-ioctl + Program a V4L2 device + + + + + #include <sys/ioctl.h> + + int ioctl + int fd + int request + void *argp + + + + + + Arguments + + + + fd + + &fd; + + + + request + + V4L2 ioctl request code as defined in the videodev2.h header file, for example +VIDIOC_QUERYCAP. + + + + argp + + Pointer to a function parameter, usually a structure. + + + + + + + Description + + The ioctl() function is used to program +V4L2 devices. The argument fd must be an open +file descriptor. An ioctl request has encoded +in it whether the argument is an input, output or read/write +parameter, and the size of the argument argp in +bytes. Macros and defines specifying V4L2 ioctl requests are located +in the videodev2.h header file. +Applications should use their own copy, not include the version in the +kernel sources on the system they compile on. All V4L2 ioctl requests, +their respective function and parameters are specified in . + + + + &return-value; + When an ioctl that takes an output or read/write parameter fails, + the parameter remains unmodified. + + + + diff --git a/trunk/Documentation/DocBook/v4l/func-mmap.xml b/trunk/Documentation/DocBook/media/v4l/func-mmap.xml similarity index 100% rename from trunk/Documentation/DocBook/v4l/func-mmap.xml rename to trunk/Documentation/DocBook/media/v4l/func-mmap.xml diff --git a/trunk/Documentation/DocBook/v4l/func-munmap.xml b/trunk/Documentation/DocBook/media/v4l/func-munmap.xml similarity index 100% rename from trunk/Documentation/DocBook/v4l/func-munmap.xml rename to trunk/Documentation/DocBook/media/v4l/func-munmap.xml diff --git a/trunk/Documentation/DocBook/v4l/func-open.xml b/trunk/Documentation/DocBook/media/v4l/func-open.xml similarity index 100% rename from trunk/Documentation/DocBook/v4l/func-open.xml rename to trunk/Documentation/DocBook/media/v4l/func-open.xml diff --git a/trunk/Documentation/DocBook/v4l/func-poll.xml b/trunk/Documentation/DocBook/media/v4l/func-poll.xml similarity index 100% rename from trunk/Documentation/DocBook/v4l/func-poll.xml rename to trunk/Documentation/DocBook/media/v4l/func-poll.xml diff --git a/trunk/Documentation/DocBook/v4l/func-read.xml b/trunk/Documentation/DocBook/media/v4l/func-read.xml similarity index 100% rename from trunk/Documentation/DocBook/v4l/func-read.xml rename to trunk/Documentation/DocBook/media/v4l/func-read.xml diff --git a/trunk/Documentation/DocBook/v4l/func-select.xml b/trunk/Documentation/DocBook/media/v4l/func-select.xml similarity index 100% rename from trunk/Documentation/DocBook/v4l/func-select.xml rename to trunk/Documentation/DocBook/media/v4l/func-select.xml diff --git a/trunk/Documentation/DocBook/v4l/func-write.xml b/trunk/Documentation/DocBook/media/v4l/func-write.xml similarity index 100% rename from trunk/Documentation/DocBook/v4l/func-write.xml rename to trunk/Documentation/DocBook/media/v4l/func-write.xml diff --git a/trunk/Documentation/DocBook/media/v4l/gen-errors.xml b/trunk/Documentation/DocBook/media/v4l/gen-errors.xml new file mode 100644 index 000000000000..5bbf3ce1973a --- /dev/null +++ b/trunk/Documentation/DocBook/media/v4l/gen-errors.xml @@ -0,0 +1,78 @@ +Generic Error Codes + + + Generic error codes + + &cs-str; + + + + EBADF + The file descriptor is not a valid. + + + EBUSY + The ioctl can't be handled because the device is busy. This is + typically return while device is streaming, and an ioctl tried to + change something that would affect the stream, or would require the + usage of a hardware resource that was already allocated. The ioctl + must not be retried without performing another action to fix the + problem first (typically: stop the stream before retrying). + + + EFAULT + There was a failure while copying data from/to userspace, + probably caused by an invalid pointer reference. + + + EINVAL + One or more of the ioctl parameters are invalid or out of the + allowed range. This is a widely used error code. See the individual + ioctl requests for specific causes. + + + ENODEV + Device not found or was removed. + + + ENOMEM + There's not enough memory to handle the desired operation. + + + ENOTTY + The ioctl is not supported by the driver, actually meaning that + the required functionality is not available, or the file + descriptor is not for a media device. + + + ENOSPC + On USB devices, the stream ioctl's can return this error, meaning + that this request would overcommit the usb bandwidth reserved + for periodic transfers (up to 80% of the USB bandwidth). + + + ENOSYS or EOPNOTSUPP + Function not available for this device (dvb API only. Will likely + be replaced anytime soon by ENOTTY). + + + EPERM + Permission denied. Can be returned if the device needs write + permission, or some special capabilities is needed + (e. g. root) + + + EWOULDBLOCK + Operation would block. Used when the ioctl would need to wait + for an event, but the device was opened in non-blocking mode. + + + +
+ +Note 1: ioctls may return other error codes. Since errors may have side +effects such as a driver reset, applications should abort on unexpected errors. + + +Note 2: Request-specific error codes are listed in the individual +requests descriptions. diff --git a/trunk/Documentation/DocBook/v4l/io.xml b/trunk/Documentation/DocBook/media/v4l/io.xml similarity index 100% rename from trunk/Documentation/DocBook/v4l/io.xml rename to trunk/Documentation/DocBook/media/v4l/io.xml diff --git a/trunk/Documentation/DocBook/v4l/keytable.c.xml b/trunk/Documentation/DocBook/media/v4l/keytable.c.xml similarity index 100% rename from trunk/Documentation/DocBook/v4l/keytable.c.xml rename to trunk/Documentation/DocBook/media/v4l/keytable.c.xml diff --git a/trunk/Documentation/DocBook/v4l/libv4l.xml b/trunk/Documentation/DocBook/media/v4l/libv4l.xml similarity index 100% rename from trunk/Documentation/DocBook/v4l/libv4l.xml rename to trunk/Documentation/DocBook/media/v4l/libv4l.xml diff --git a/trunk/Documentation/DocBook/v4l/lirc_device_interface.xml b/trunk/Documentation/DocBook/media/v4l/lirc_device_interface.xml similarity index 99% rename from trunk/Documentation/DocBook/v4l/lirc_device_interface.xml rename to trunk/Documentation/DocBook/media/v4l/lirc_device_interface.xml index 0e0453f39e73..8d7eb6bf6312 100644 --- a/trunk/Documentation/DocBook/v4l/lirc_device_interface.xml +++ b/trunk/Documentation/DocBook/media/v4l/lirc_device_interface.xml @@ -246,6 +246,8 @@ on working with the default settings initially. - +
+ &return-value; +
diff --git a/trunk/Documentation/DocBook/v4l/media-controller.xml b/trunk/Documentation/DocBook/media/v4l/media-controller.xml similarity index 100% rename from trunk/Documentation/DocBook/v4l/media-controller.xml rename to trunk/Documentation/DocBook/media/v4l/media-controller.xml diff --git a/trunk/Documentation/DocBook/v4l/media-func-close.xml b/trunk/Documentation/DocBook/media/v4l/media-func-close.xml similarity index 100% rename from trunk/Documentation/DocBook/v4l/media-func-close.xml rename to trunk/Documentation/DocBook/media/v4l/media-func-close.xml diff --git a/trunk/Documentation/DocBook/v4l/media-func-ioctl.xml b/trunk/Documentation/DocBook/media/v4l/media-func-ioctl.xml similarity index 59% rename from trunk/Documentation/DocBook/v4l/media-func-ioctl.xml rename to trunk/Documentation/DocBook/media/v4l/media-func-ioctl.xml index bda8604de15c..39478d0fbcaa 100644 --- a/trunk/Documentation/DocBook/v4l/media-func-ioctl.xml +++ b/trunk/Documentation/DocBook/media/v4l/media-func-ioctl.xml @@ -63,54 +63,11 @@ - Return Value + &return-value; - ioctl() returns 0 on - success. On failure, -1 is returned, and the - errno variable is set appropriately. Generic error codes - are listed below, and request-specific error codes are listed in the + Request-specific error codes are listed in the individual requests descriptions. When an ioctl that takes an output or read/write parameter fails, the parameter remains unmodified. - - - - EBADF - - fd is not a valid open file descriptor. - - - - - EFAULT - - argp references an inaccessible memory - area. - - - - EINVAL - - The request or the data pointed to by - argp is not valid. This is a very common error - code, see the individual ioctl requests listed in - for actual causes. - - - - ENOMEM - - Insufficient kernel memory was available to complete the - request. - - - - ENOTTY - - fd is not associated with a character - special device. - - - diff --git a/trunk/Documentation/DocBook/v4l/media-func-open.xml b/trunk/Documentation/DocBook/media/v4l/media-func-open.xml similarity index 100% rename from trunk/Documentation/DocBook/v4l/media-func-open.xml rename to trunk/Documentation/DocBook/media/v4l/media-func-open.xml diff --git a/trunk/Documentation/DocBook/v4l/media-ioc-device-info.xml b/trunk/Documentation/DocBook/media/v4l/media-ioc-device-info.xml similarity index 97% rename from trunk/Documentation/DocBook/v4l/media-ioc-device-info.xml rename to trunk/Documentation/DocBook/media/v4l/media-ioc-device-info.xml index 1f3237351bba..2ce521419e67 100644 --- a/trunk/Documentation/DocBook/v4l/media-ioc-device-info.xml +++ b/trunk/Documentation/DocBook/media/v4l/media-ioc-device-info.xml @@ -127,7 +127,6 @@ - Return value - This function doesn't return specific error codes. + &return-value; diff --git a/trunk/Documentation/DocBook/v4l/media-ioc-enum-entities.xml b/trunk/Documentation/DocBook/media/v4l/media-ioc-enum-entities.xml similarity index 100% rename from trunk/Documentation/DocBook/v4l/media-ioc-enum-entities.xml rename to trunk/Documentation/DocBook/media/v4l/media-ioc-enum-entities.xml diff --git a/trunk/Documentation/DocBook/v4l/media-ioc-enum-links.xml b/trunk/Documentation/DocBook/media/v4l/media-ioc-enum-links.xml similarity index 98% rename from trunk/Documentation/DocBook/v4l/media-ioc-enum-links.xml rename to trunk/Documentation/DocBook/media/v4l/media-ioc-enum-links.xml index d2fc73ef8d56..355df43badc5 100644 --- a/trunk/Documentation/DocBook/v4l/media-ioc-enum-links.xml +++ b/trunk/Documentation/DocBook/media/v4l/media-ioc-enum-links.xml @@ -139,7 +139,7 @@ - struct <structname>media_links_desc</structname> + struct <structname>media_link_desc</structname> &cs-str; diff --git a/trunk/Documentation/DocBook/v4l/media-ioc-setup-link.xml b/trunk/Documentation/DocBook/media/v4l/media-ioc-setup-link.xml similarity index 87% rename from trunk/Documentation/DocBook/v4l/media-ioc-setup-link.xml rename to trunk/Documentation/DocBook/media/v4l/media-ioc-setup-link.xml index cec97af4dab4..fc2e522ee65a 100644 --- a/trunk/Documentation/DocBook/v4l/media-ioc-setup-link.xml +++ b/trunk/Documentation/DocBook/media/v4l/media-ioc-setup-link.xml @@ -71,15 +71,6 @@ &return-value; - - EBUSY - - The link properties can't be changed because the link is - currently busy. This can be caused, for instance, by an active media - stream (audio or video) on the link. The ioctl shouldn't be retried if - no other action is performed before to fix the problem. - - EINVAL diff --git a/trunk/Documentation/DocBook/v4l/pipeline.pdf b/trunk/Documentation/DocBook/media/v4l/pipeline.pdf similarity index 100% rename from trunk/Documentation/DocBook/v4l/pipeline.pdf rename to trunk/Documentation/DocBook/media/v4l/pipeline.pdf diff --git a/trunk/Documentation/DocBook/v4l/pixfmt-grey.xml b/trunk/Documentation/DocBook/media/v4l/pixfmt-grey.xml similarity index 100% rename from trunk/Documentation/DocBook/v4l/pixfmt-grey.xml rename to trunk/Documentation/DocBook/media/v4l/pixfmt-grey.xml diff --git a/trunk/Documentation/DocBook/v4l/pixfmt-m420.xml b/trunk/Documentation/DocBook/media/v4l/pixfmt-m420.xml similarity index 100% rename from trunk/Documentation/DocBook/v4l/pixfmt-m420.xml rename to trunk/Documentation/DocBook/media/v4l/pixfmt-m420.xml diff --git a/trunk/Documentation/DocBook/v4l/pixfmt-nv12.xml b/trunk/Documentation/DocBook/media/v4l/pixfmt-nv12.xml similarity index 100% rename from trunk/Documentation/DocBook/v4l/pixfmt-nv12.xml rename to trunk/Documentation/DocBook/media/v4l/pixfmt-nv12.xml diff --git a/trunk/Documentation/DocBook/v4l/pixfmt-nv12m.xml b/trunk/Documentation/DocBook/media/v4l/pixfmt-nv12m.xml similarity index 100% rename from trunk/Documentation/DocBook/v4l/pixfmt-nv12m.xml rename to trunk/Documentation/DocBook/media/v4l/pixfmt-nv12m.xml diff --git a/trunk/Documentation/DocBook/v4l/pixfmt-nv12mt.xml b/trunk/Documentation/DocBook/media/v4l/pixfmt-nv12mt.xml similarity index 100% rename from trunk/Documentation/DocBook/v4l/pixfmt-nv12mt.xml rename to trunk/Documentation/DocBook/media/v4l/pixfmt-nv12mt.xml diff --git a/trunk/Documentation/DocBook/v4l/pixfmt-nv16.xml b/trunk/Documentation/DocBook/media/v4l/pixfmt-nv16.xml similarity index 100% rename from trunk/Documentation/DocBook/v4l/pixfmt-nv16.xml rename to trunk/Documentation/DocBook/media/v4l/pixfmt-nv16.xml diff --git a/trunk/Documentation/DocBook/v4l/pixfmt-packed-rgb.xml b/trunk/Documentation/DocBook/media/v4l/pixfmt-packed-rgb.xml similarity index 100% rename from trunk/Documentation/DocBook/v4l/pixfmt-packed-rgb.xml rename to trunk/Documentation/DocBook/media/v4l/pixfmt-packed-rgb.xml diff --git a/trunk/Documentation/DocBook/v4l/pixfmt-packed-yuv.xml b/trunk/Documentation/DocBook/media/v4l/pixfmt-packed-yuv.xml similarity index 100% rename from trunk/Documentation/DocBook/v4l/pixfmt-packed-yuv.xml rename to trunk/Documentation/DocBook/media/v4l/pixfmt-packed-yuv.xml diff --git a/trunk/Documentation/DocBook/v4l/pixfmt-sbggr16.xml b/trunk/Documentation/DocBook/media/v4l/pixfmt-sbggr16.xml similarity index 100% rename from trunk/Documentation/DocBook/v4l/pixfmt-sbggr16.xml rename to trunk/Documentation/DocBook/media/v4l/pixfmt-sbggr16.xml diff --git a/trunk/Documentation/DocBook/v4l/pixfmt-sbggr8.xml b/trunk/Documentation/DocBook/media/v4l/pixfmt-sbggr8.xml similarity index 100% rename from trunk/Documentation/DocBook/v4l/pixfmt-sbggr8.xml rename to trunk/Documentation/DocBook/media/v4l/pixfmt-sbggr8.xml diff --git a/trunk/Documentation/DocBook/v4l/pixfmt-sgbrg8.xml b/trunk/Documentation/DocBook/media/v4l/pixfmt-sgbrg8.xml similarity index 100% rename from trunk/Documentation/DocBook/v4l/pixfmt-sgbrg8.xml rename to trunk/Documentation/DocBook/media/v4l/pixfmt-sgbrg8.xml diff --git a/trunk/Documentation/DocBook/v4l/pixfmt-sgrbg8.xml b/trunk/Documentation/DocBook/media/v4l/pixfmt-sgrbg8.xml similarity index 100% rename from trunk/Documentation/DocBook/v4l/pixfmt-sgrbg8.xml rename to trunk/Documentation/DocBook/media/v4l/pixfmt-sgrbg8.xml diff --git a/trunk/Documentation/DocBook/v4l/pixfmt-srggb10.xml b/trunk/Documentation/DocBook/media/v4l/pixfmt-srggb10.xml similarity index 100% rename from trunk/Documentation/DocBook/v4l/pixfmt-srggb10.xml rename to trunk/Documentation/DocBook/media/v4l/pixfmt-srggb10.xml diff --git a/trunk/Documentation/DocBook/v4l/pixfmt-srggb12.xml b/trunk/Documentation/DocBook/media/v4l/pixfmt-srggb12.xml similarity index 100% rename from trunk/Documentation/DocBook/v4l/pixfmt-srggb12.xml rename to trunk/Documentation/DocBook/media/v4l/pixfmt-srggb12.xml diff --git a/trunk/Documentation/DocBook/v4l/pixfmt-srggb8.xml b/trunk/Documentation/DocBook/media/v4l/pixfmt-srggb8.xml similarity index 100% rename from trunk/Documentation/DocBook/v4l/pixfmt-srggb8.xml rename to trunk/Documentation/DocBook/media/v4l/pixfmt-srggb8.xml diff --git a/trunk/Documentation/DocBook/v4l/pixfmt-uyvy.xml b/trunk/Documentation/DocBook/media/v4l/pixfmt-uyvy.xml similarity index 100% rename from trunk/Documentation/DocBook/v4l/pixfmt-uyvy.xml rename to trunk/Documentation/DocBook/media/v4l/pixfmt-uyvy.xml diff --git a/trunk/Documentation/DocBook/v4l/pixfmt-vyuy.xml b/trunk/Documentation/DocBook/media/v4l/pixfmt-vyuy.xml similarity index 100% rename from trunk/Documentation/DocBook/v4l/pixfmt-vyuy.xml rename to trunk/Documentation/DocBook/media/v4l/pixfmt-vyuy.xml diff --git a/trunk/Documentation/DocBook/v4l/pixfmt-y10.xml b/trunk/Documentation/DocBook/media/v4l/pixfmt-y10.xml similarity index 100% rename from trunk/Documentation/DocBook/v4l/pixfmt-y10.xml rename to trunk/Documentation/DocBook/media/v4l/pixfmt-y10.xml diff --git a/trunk/Documentation/DocBook/v4l/pixfmt-y10b.xml b/trunk/Documentation/DocBook/media/v4l/pixfmt-y10b.xml similarity index 100% rename from trunk/Documentation/DocBook/v4l/pixfmt-y10b.xml rename to trunk/Documentation/DocBook/media/v4l/pixfmt-y10b.xml diff --git a/trunk/Documentation/DocBook/v4l/pixfmt-y12.xml b/trunk/Documentation/DocBook/media/v4l/pixfmt-y12.xml similarity index 100% rename from trunk/Documentation/DocBook/v4l/pixfmt-y12.xml rename to trunk/Documentation/DocBook/media/v4l/pixfmt-y12.xml diff --git a/trunk/Documentation/DocBook/v4l/pixfmt-y16.xml b/trunk/Documentation/DocBook/media/v4l/pixfmt-y16.xml similarity index 100% rename from trunk/Documentation/DocBook/v4l/pixfmt-y16.xml rename to trunk/Documentation/DocBook/media/v4l/pixfmt-y16.xml diff --git a/trunk/Documentation/DocBook/v4l/pixfmt-y41p.xml b/trunk/Documentation/DocBook/media/v4l/pixfmt-y41p.xml similarity index 100% rename from trunk/Documentation/DocBook/v4l/pixfmt-y41p.xml rename to trunk/Documentation/DocBook/media/v4l/pixfmt-y41p.xml diff --git a/trunk/Documentation/DocBook/v4l/pixfmt-yuv410.xml b/trunk/Documentation/DocBook/media/v4l/pixfmt-yuv410.xml similarity index 100% rename from trunk/Documentation/DocBook/v4l/pixfmt-yuv410.xml rename to trunk/Documentation/DocBook/media/v4l/pixfmt-yuv410.xml diff --git a/trunk/Documentation/DocBook/v4l/pixfmt-yuv411p.xml b/trunk/Documentation/DocBook/media/v4l/pixfmt-yuv411p.xml similarity index 100% rename from trunk/Documentation/DocBook/v4l/pixfmt-yuv411p.xml rename to trunk/Documentation/DocBook/media/v4l/pixfmt-yuv411p.xml diff --git a/trunk/Documentation/DocBook/v4l/pixfmt-yuv420.xml b/trunk/Documentation/DocBook/media/v4l/pixfmt-yuv420.xml similarity index 100% rename from trunk/Documentation/DocBook/v4l/pixfmt-yuv420.xml rename to trunk/Documentation/DocBook/media/v4l/pixfmt-yuv420.xml diff --git a/trunk/Documentation/DocBook/v4l/pixfmt-yuv420m.xml b/trunk/Documentation/DocBook/media/v4l/pixfmt-yuv420m.xml similarity index 100% rename from trunk/Documentation/DocBook/v4l/pixfmt-yuv420m.xml rename to trunk/Documentation/DocBook/media/v4l/pixfmt-yuv420m.xml diff --git a/trunk/Documentation/DocBook/v4l/pixfmt-yuv422p.xml b/trunk/Documentation/DocBook/media/v4l/pixfmt-yuv422p.xml similarity index 100% rename from trunk/Documentation/DocBook/v4l/pixfmt-yuv422p.xml rename to trunk/Documentation/DocBook/media/v4l/pixfmt-yuv422p.xml diff --git a/trunk/Documentation/DocBook/v4l/pixfmt-yuyv.xml b/trunk/Documentation/DocBook/media/v4l/pixfmt-yuyv.xml similarity index 100% rename from trunk/Documentation/DocBook/v4l/pixfmt-yuyv.xml rename to trunk/Documentation/DocBook/media/v4l/pixfmt-yuyv.xml diff --git a/trunk/Documentation/DocBook/v4l/pixfmt-yvyu.xml b/trunk/Documentation/DocBook/media/v4l/pixfmt-yvyu.xml similarity index 100% rename from trunk/Documentation/DocBook/v4l/pixfmt-yvyu.xml rename to trunk/Documentation/DocBook/media/v4l/pixfmt-yvyu.xml diff --git a/trunk/Documentation/DocBook/v4l/pixfmt.xml b/trunk/Documentation/DocBook/media/v4l/pixfmt.xml similarity index 94% rename from trunk/Documentation/DocBook/v4l/pixfmt.xml rename to trunk/Documentation/DocBook/media/v4l/pixfmt.xml index deb660207f94..2ff6b7776d7f 100644 --- a/trunk/Documentation/DocBook/v4l/pixfmt.xml +++ b/trunk/Documentation/DocBook/media/v4l/pixfmt.xml @@ -121,7 +121,7 @@ set this field to zero. an array of v4l2_plane_pix_format structures, describing all planes of that format. - struct <structname>vl42_plane_pix_format</structname> + struct <structname>v4l2_plane_pix_format</structname> &cs-str; @@ -741,10 +741,55 @@ information. V4L2_PIX_FMT_MPEG 'MPEG' - MPEG stream. The actual format is determined by + MPEG multiplexed stream. The actual format is determined by extended control V4L2_CID_MPEG_STREAM_TYPE, see . + + V4L2_PIX_FMT_H264 + 'H264' + H264 video elementary stream with start codes. + + + V4L2_PIX_FMT_H264_NO_SC + 'AVC1' + H264 video elementary stream without start codes. + + + V4L2_PIX_FMT_H263 + 'H263' + H263 video elementary stream. + + + V4L2_PIX_FMT_MPEG1 + 'MPG1' + MPEG1 video elementary stream. + + + V4L2_PIX_FMT_MPEG2 + 'MPG2' + MPEG2 video elementary stream. + + + V4L2_PIX_FMT_MPEG4 + 'MPG4' + MPEG4 video elementary stream. + + + V4L2_PIX_FMT_XVID + 'XVID' + Xvid video elementary stream. + + + V4L2_PIX_FMT_VC1_ANNEX_G + 'VC1G' + VC1, SMPTE 421M Annex G compliant stream. + + + V4L2_PIX_FMT_VC1_ANNEX_L + 'VC1L' + VC1, SMPTE 421M Annex L compliant stream. +
@@ -804,6 +849,12 @@ kernel sources in the file Documentation/video4linux/cx2341x/README.hm 'CPIA' YUV format used by the gspca cpia1 driver. + + V4L2_PIX_FMT_JPGL + 'JPGL' + JPEG-Light format (Pegasus Lossless JPEG) + used in Divio webcams NW 80x. + V4L2_PIX_FMT_SPCA501 'S501' @@ -854,6 +905,11 @@ kernel sources in the file Documentation/video4linux/cx2341x/README.hm 'PJPG' Pixart 73xx JPEG format used by the gspca driver. + + V4L2_PIX_FMT_SE401 + 'S401' + Compressed RGB format used by the gspca se401 driver + V4L2_PIX_FMT_SQ905C '905C' diff --git a/trunk/Documentation/DocBook/v4l/planar-apis.xml b/trunk/Documentation/DocBook/media/v4l/planar-apis.xml similarity index 100% rename from trunk/Documentation/DocBook/v4l/planar-apis.xml rename to trunk/Documentation/DocBook/media/v4l/planar-apis.xml diff --git a/trunk/Documentation/DocBook/v4l/remote_controllers.xml b/trunk/Documentation/DocBook/media/v4l/remote_controllers.xml similarity index 100% rename from trunk/Documentation/DocBook/v4l/remote_controllers.xml rename to trunk/Documentation/DocBook/media/v4l/remote_controllers.xml diff --git a/trunk/Documentation/DocBook/v4l/subdev-formats.xml b/trunk/Documentation/DocBook/media/v4l/subdev-formats.xml similarity index 99% rename from trunk/Documentation/DocBook/v4l/subdev-formats.xml rename to trunk/Documentation/DocBook/media/v4l/subdev-formats.xml index 8d3409d2c632..49c532ebbbbe 100644 --- a/trunk/Documentation/DocBook/v4l/subdev-formats.xml +++ b/trunk/Documentation/DocBook/media/v4l/subdev-formats.xml @@ -379,9 +379,6 @@
Bayer Patterns - - - @@ -2528,7 +2525,7 @@ Those data formats consist of an ordered sequence of 8-bit bytes obtained from JPEG compression process. Additionally to the - _JPEG prefix the format code is made of + _JPEG postfix the format code is made of the following information. The number of bus samples per entropy encoded byte. diff --git a/trunk/Documentation/DocBook/v4l/v4l2.xml b/trunk/Documentation/DocBook/media/v4l/v4l2.xml similarity index 97% rename from trunk/Documentation/DocBook/v4l/v4l2.xml rename to trunk/Documentation/DocBook/media/v4l/v4l2.xml index a7fd76d0dac1..0d05e8747c12 100644 --- a/trunk/Documentation/DocBook/v4l/v4l2.xml +++ b/trunk/Documentation/DocBook/media/v4l/v4l2.xml @@ -87,7 +87,7 @@ Remote Controller chapter. - Pawel + Pawel Osciak Designed and documented the multi-planar API. @@ -127,6 +127,15 @@ structs, ioctls) must be noted in more detail in the history chapter (compat.xml), along with the possible impact on existing drivers and applications. --> + + 3.1 + 2011-06-27 + mcc, po, hv + Documented that VIDIOC_QUERYCAP now returns a per-subsystem version instead of a per-driver one. + Standardize an error code for invalid ioctl. + Added V4L2_CTRL_TYPE_BITMASK. + + 2.6.39 2011-03-01 @@ -401,7 +410,7 @@ and discussions on the V4L mailing list. Video for Linux Two API Specification - Revision 2.6.39 + Revision 3.1 &sub-common; diff --git a/trunk/Documentation/DocBook/v4l/v4l2grab.c.xml b/trunk/Documentation/DocBook/media/v4l/v4l2grab.c.xml similarity index 100% rename from trunk/Documentation/DocBook/v4l/v4l2grab.c.xml rename to trunk/Documentation/DocBook/media/v4l/v4l2grab.c.xml diff --git a/trunk/Documentation/DocBook/v4l/vbi_525.pdf b/trunk/Documentation/DocBook/media/v4l/vbi_525.pdf similarity index 100% rename from trunk/Documentation/DocBook/v4l/vbi_525.pdf rename to trunk/Documentation/DocBook/media/v4l/vbi_525.pdf diff --git a/trunk/Documentation/DocBook/v4l/vbi_625.pdf b/trunk/Documentation/DocBook/media/v4l/vbi_625.pdf similarity index 100% rename from trunk/Documentation/DocBook/v4l/vbi_625.pdf rename to trunk/Documentation/DocBook/media/v4l/vbi_625.pdf diff --git a/trunk/Documentation/DocBook/v4l/vbi_hsync.pdf b/trunk/Documentation/DocBook/media/v4l/vbi_hsync.pdf similarity index 100% rename from trunk/Documentation/DocBook/v4l/vbi_hsync.pdf rename to trunk/Documentation/DocBook/media/v4l/vbi_hsync.pdf diff --git a/trunk/Documentation/DocBook/v4l/vidioc-cropcap.xml b/trunk/Documentation/DocBook/media/v4l/vidioc-cropcap.xml similarity index 95% rename from trunk/Documentation/DocBook/v4l/vidioc-cropcap.xml rename to trunk/Documentation/DocBook/media/v4l/vidioc-cropcap.xml index 816e90e283c5..b4f2f255211e 100644 --- a/trunk/Documentation/DocBook/v4l/vidioc-cropcap.xml +++ b/trunk/Documentation/DocBook/media/v4l/vidioc-cropcap.xml @@ -156,19 +156,10 @@ on 22 Oct 2002 subject "Re:[V4L][patches!] Re:v4l2/kernel-2.5" --> EINVAL The &v4l2-cropcap; type is -invalid or the ioctl is not supported. This is not permitted for -video capture, output and overlay devices, which must support -VIDIOC_CROPCAP. +invalid. This is not permitted for video capture, output and overlay devices, +which must support VIDIOC_CROPCAP. - - diff --git a/trunk/Documentation/DocBook/v4l/vidioc-dbg-g-chip-ident.xml b/trunk/Documentation/DocBook/media/v4l/vidioc-dbg-g-chip-ident.xml similarity index 97% rename from trunk/Documentation/DocBook/v4l/vidioc-dbg-g-chip-ident.xml rename to trunk/Documentation/DocBook/media/v4l/vidioc-dbg-g-chip-ident.xml index 4a09e203af0f..4ecd966808de 100644 --- a/trunk/Documentation/DocBook/v4l/vidioc-dbg-g-chip-ident.xml +++ b/trunk/Documentation/DocBook/media/v4l/vidioc-dbg-g-chip-ident.xml @@ -258,18 +258,9 @@ could not identify it. EINVAL - The driver does not support this ioctl, or the -match_type is invalid. + The match_type is invalid. - - diff --git a/trunk/Documentation/DocBook/v4l/vidioc-dbg-g-register.xml b/trunk/Documentation/DocBook/media/v4l/vidioc-dbg-g-register.xml similarity index 94% rename from trunk/Documentation/DocBook/v4l/vidioc-dbg-g-register.xml rename to trunk/Documentation/DocBook/media/v4l/vidioc-dbg-g-register.xml index 980c7f3e2fd6..a44aebc7997a 100644 --- a/trunk/Documentation/DocBook/v4l/vidioc-dbg-g-register.xml +++ b/trunk/Documentation/DocBook/media/v4l/vidioc-dbg-g-register.xml @@ -246,15 +246,6 @@ register. &return-value; - - EINVAL - - The driver does not support this ioctl, or the kernel -was not compiled with the CONFIG_VIDEO_ADV_DEBUG -option, or the match_type is invalid, or the -selected chip or register does not exist. - - EPERM @@ -265,11 +256,3 @@ to execute these ioctls. - - diff --git a/trunk/Documentation/DocBook/v4l/vidioc-dqevent.xml b/trunk/Documentation/DocBook/media/v4l/vidioc-dqevent.xml similarity index 84% rename from trunk/Documentation/DocBook/v4l/vidioc-dqevent.xml rename to trunk/Documentation/DocBook/media/v4l/vidioc-dqevent.xml index 4e0a7cc30812..7769642ee431 100644 --- a/trunk/Documentation/DocBook/v4l/vidioc-dqevent.xml +++ b/trunk/Documentation/DocBook/media/v4l/vidioc-dqevent.xml @@ -79,6 +79,13 @@ Event data for event V4L2_EVENT_VSYNC. + + + &v4l2-event-ctrl; + ctrl + Event data for event V4L2_EVENT_CTRL. + + __u8 @@ -109,9 +116,17 @@ Event timestamp. + + u32 + id + + The ID associated with the event source. If the event does not + have an associated ID (this depends on the event type), then this + is 0. + __u32 - reserved[9] + reserved[8] Reserved for future extensions. Drivers must set the array to zero. @@ -121,11 +136,7 @@ + + &return-value; + - diff --git a/trunk/Documentation/DocBook/v4l/vidioc-encoder-cmd.xml b/trunk/Documentation/DocBook/media/v4l/vidioc-encoder-cmd.xml similarity index 96% rename from trunk/Documentation/DocBook/v4l/vidioc-encoder-cmd.xml rename to trunk/Documentation/DocBook/media/v4l/vidioc-encoder-cmd.xml index b0dde943825c..af7f3f2a36dd 100644 --- a/trunk/Documentation/DocBook/v4l/vidioc-encoder-cmd.xml +++ b/trunk/Documentation/DocBook/media/v4l/vidioc-encoder-cmd.xml @@ -180,8 +180,7 @@ Pictures, rather than immediately. EINVAL - The driver does not support this ioctl, or the -cmd field is invalid. + The cmd field is invalid. @@ -194,11 +193,3 @@ the encoder was not running. - - diff --git a/trunk/Documentation/DocBook/v4l/vidioc-enum-dv-presets.xml b/trunk/Documentation/DocBook/media/v4l/vidioc-enum-dv-presets.xml similarity index 100% rename from trunk/Documentation/DocBook/v4l/vidioc-enum-dv-presets.xml rename to trunk/Documentation/DocBook/media/v4l/vidioc-enum-dv-presets.xml diff --git a/trunk/Documentation/DocBook/v4l/vidioc-enum-fmt.xml b/trunk/Documentation/DocBook/media/v4l/vidioc-enum-fmt.xml similarity index 100% rename from trunk/Documentation/DocBook/v4l/vidioc-enum-fmt.xml rename to trunk/Documentation/DocBook/media/v4l/vidioc-enum-fmt.xml diff --git a/trunk/Documentation/DocBook/v4l/vidioc-enum-frameintervals.xml b/trunk/Documentation/DocBook/media/v4l/vidioc-enum-frameintervals.xml similarity index 97% rename from trunk/Documentation/DocBook/v4l/vidioc-enum-frameintervals.xml rename to trunk/Documentation/DocBook/media/v4l/vidioc-enum-frameintervals.xml index 3c216e113a54..5fd72c4c33e3 100644 --- a/trunk/Documentation/DocBook/v4l/vidioc-enum-frameintervals.xml +++ b/trunk/Documentation/DocBook/media/v4l/vidioc-enum-frameintervals.xml @@ -254,17 +254,6 @@ enumerated. &return-value; - - See the description section above for a list of return -values that errno can have. - - diff --git a/trunk/Documentation/DocBook/v4l/vidioc-enum-framesizes.xml b/trunk/Documentation/DocBook/media/v4l/vidioc-enum-framesizes.xml similarity index 97% rename from trunk/Documentation/DocBook/v4l/vidioc-enum-framesizes.xml rename to trunk/Documentation/DocBook/media/v4l/vidioc-enum-framesizes.xml index 6afa4542c818..f77a13f486d7 100644 --- a/trunk/Documentation/DocBook/v4l/vidioc-enum-framesizes.xml +++ b/trunk/Documentation/DocBook/media/v4l/vidioc-enum-framesizes.xml @@ -267,16 +267,5 @@ application should zero out all members except for the &return-value; - - See the description section above for a list of return -values that errno can have. - - diff --git a/trunk/Documentation/DocBook/v4l/vidioc-enumaudio.xml b/trunk/Documentation/DocBook/media/v4l/vidioc-enumaudio.xml similarity index 89% rename from trunk/Documentation/DocBook/v4l/vidioc-enumaudio.xml rename to trunk/Documentation/DocBook/media/v4l/vidioc-enumaudio.xml index 9ae8f2d3a96f..ea816ab2e49e 100644 --- a/trunk/Documentation/DocBook/v4l/vidioc-enumaudio.xml +++ b/trunk/Documentation/DocBook/media/v4l/vidioc-enumaudio.xml @@ -68,19 +68,9 @@ until the driver returns EINVAL. EINVAL - The number of the audio input is out of bounds, or -there are no audio inputs at all and this ioctl is not -supported. + The number of the audio input is out of bounds. - - diff --git a/trunk/Documentation/DocBook/v4l/vidioc-enumaudioout.xml b/trunk/Documentation/DocBook/media/v4l/vidioc-enumaudioout.xml similarity index 90% rename from trunk/Documentation/DocBook/v4l/vidioc-enumaudioout.xml rename to trunk/Documentation/DocBook/media/v4l/vidioc-enumaudioout.xml index d3d7c0ab17b8..2e87cedb0d32 100644 --- a/trunk/Documentation/DocBook/v4l/vidioc-enumaudioout.xml +++ b/trunk/Documentation/DocBook/media/v4l/vidioc-enumaudioout.xml @@ -71,19 +71,9 @@ signal to a sound card are not audio outputs in this sense. EINVAL - The number of the audio output is out of bounds, or -there are no audio outputs at all and this ioctl is not -supported. + The number of the audio output is out of bounds. - - diff --git a/trunk/Documentation/DocBook/v4l/vidioc-enuminput.xml b/trunk/Documentation/DocBook/media/v4l/vidioc-enuminput.xml similarity index 100% rename from trunk/Documentation/DocBook/v4l/vidioc-enuminput.xml rename to trunk/Documentation/DocBook/media/v4l/vidioc-enuminput.xml diff --git a/trunk/Documentation/DocBook/v4l/vidioc-enumoutput.xml b/trunk/Documentation/DocBook/media/v4l/vidioc-enumoutput.xml similarity index 100% rename from trunk/Documentation/DocBook/v4l/vidioc-enumoutput.xml rename to trunk/Documentation/DocBook/media/v4l/vidioc-enumoutput.xml diff --git a/trunk/Documentation/DocBook/v4l/vidioc-enumstd.xml b/trunk/Documentation/DocBook/media/v4l/vidioc-enumstd.xml similarity index 100% rename from trunk/Documentation/DocBook/v4l/vidioc-enumstd.xml rename to trunk/Documentation/DocBook/media/v4l/vidioc-enumstd.xml diff --git a/trunk/Documentation/DocBook/v4l/vidioc-g-audio.xml b/trunk/Documentation/DocBook/media/v4l/vidioc-g-audio.xml similarity index 93% rename from trunk/Documentation/DocBook/v4l/vidioc-g-audio.xml rename to trunk/Documentation/DocBook/media/v4l/vidioc-g-audio.xml index 65361a8c2b05..d7bb9b3738f6 100644 --- a/trunk/Documentation/DocBook/v4l/vidioc-g-audio.xml +++ b/trunk/Documentation/DocBook/media/v4l/vidioc-g-audio.xml @@ -164,25 +164,9 @@ tuner. No audio inputs combine with the current video input, or the number of the selected audio input is out of bounds or it does -not combine, or there are no audio inputs at all and the ioctl is not -supported. - - - - EBUSY - - I/O is in progress, the input cannot be -switched. +not combine. - - diff --git a/trunk/Documentation/DocBook/v4l/vidioc-g-audioout.xml b/trunk/Documentation/DocBook/media/v4l/vidioc-g-audioout.xml similarity index 92% rename from trunk/Documentation/DocBook/v4l/vidioc-g-audioout.xml rename to trunk/Documentation/DocBook/media/v4l/vidioc-g-audioout.xml index 3632730c5c6e..200a2704a970 100644 --- a/trunk/Documentation/DocBook/v4l/vidioc-g-audioout.xml +++ b/trunk/Documentation/DocBook/media/v4l/vidioc-g-audioout.xml @@ -130,25 +130,9 @@ applications must set the array to zero. No audio outputs combine with the current video output, or the number of the selected audio output is out of bounds or -it does not combine, or there are no audio outputs at all and the -ioctl is not supported. - - - - EBUSY - - I/O is in progress, the output cannot be -switched. +it does not combine. - - diff --git a/trunk/Documentation/DocBook/v4l/vidioc-g-crop.xml b/trunk/Documentation/DocBook/media/v4l/vidioc-g-crop.xml similarity index 93% rename from trunk/Documentation/DocBook/v4l/vidioc-g-crop.xml rename to trunk/Documentation/DocBook/media/v4l/vidioc-g-crop.xml index d235b1dedbed..01a50640dce0 100644 --- a/trunk/Documentation/DocBook/v4l/vidioc-g-crop.xml +++ b/trunk/Documentation/DocBook/media/v4l/vidioc-g-crop.xml @@ -122,22 +122,5 @@ for &v4l2-cropcap; bounds is used. &return-value; - - - - EINVAL - - Cropping is not supported. - - - - - diff --git a/trunk/Documentation/DocBook/v4l/vidioc-g-ctrl.xml b/trunk/Documentation/DocBook/media/v4l/vidioc-g-ctrl.xml similarity index 94% rename from trunk/Documentation/DocBook/v4l/vidioc-g-ctrl.xml rename to trunk/Documentation/DocBook/media/v4l/vidioc-g-ctrl.xml index 8b5e6ff7f3df..5146d00782e3 100644 --- a/trunk/Documentation/DocBook/v4l/vidioc-g-ctrl.xml +++ b/trunk/Documentation/DocBook/media/v4l/vidioc-g-ctrl.xml @@ -117,6 +117,13 @@ because another applications took over control of the device function this control belongs to. + + EACCES + + Attempt to set a read-only control or to get a + write-only control. + + diff --git a/trunk/Documentation/DocBook/v4l/vidioc-g-dv-preset.xml b/trunk/Documentation/DocBook/media/v4l/vidioc-g-dv-preset.xml similarity index 96% rename from trunk/Documentation/DocBook/v4l/vidioc-g-dv-preset.xml rename to trunk/Documentation/DocBook/media/v4l/vidioc-g-dv-preset.xml index d733721a7519..7940c1149393 100644 --- a/trunk/Documentation/DocBook/v4l/vidioc-g-dv-preset.xml +++ b/trunk/Documentation/DocBook/media/v4l/vidioc-g-dv-preset.xml @@ -97,14 +97,8 @@ If the preset is not supported, it returns an &EINVAL; - + + + &return-value; - - diff --git a/trunk/Documentation/DocBook/v4l/vidioc-g-dv-timings.xml b/trunk/Documentation/DocBook/media/v4l/vidioc-g-dv-timings.xml similarity index 98% rename from trunk/Documentation/DocBook/v4l/vidioc-g-dv-timings.xml rename to trunk/Documentation/DocBook/media/v4l/vidioc-g-dv-timings.xml index d5ec6abf0ce2..4a8648ae9a63 100644 --- a/trunk/Documentation/DocBook/v4l/vidioc-g-dv-timings.xml +++ b/trunk/Documentation/DocBook/media/v4l/vidioc-g-dv-timings.xml @@ -212,12 +212,7 @@ bit 0 (V4L2_DV_VSYNC_POS_POL) is for vertical sync polarity and bit 1 (V4L2_DV_H + + &return-value; + - - diff --git a/trunk/Documentation/DocBook/v4l/vidioc-g-enc-index.xml b/trunk/Documentation/DocBook/media/v4l/vidioc-g-enc-index.xml similarity index 95% rename from trunk/Documentation/DocBook/v4l/vidioc-g-enc-index.xml rename to trunk/Documentation/DocBook/media/v4l/vidioc-g-enc-index.xml index 9f242e4b2948..2aef02c9044e 100644 --- a/trunk/Documentation/DocBook/v4l/vidioc-g-enc-index.xml +++ b/trunk/Documentation/DocBook/media/v4l/vidioc-g-enc-index.xml @@ -192,22 +192,5 @@ this mask to obtain the picture coding type. &return-value; - - - - EINVAL - - The driver does not support this ioctl. - - - - - diff --git a/trunk/Documentation/DocBook/v4l/vidioc-g-ext-ctrls.xml b/trunk/Documentation/DocBook/media/v4l/vidioc-g-ext-ctrls.xml similarity index 95% rename from trunk/Documentation/DocBook/v4l/vidioc-g-ext-ctrls.xml rename to trunk/Documentation/DocBook/media/v4l/vidioc-g-ext-ctrls.xml index 3aa7f8f9ff0c..5122ce87e0b8 100644 --- a/trunk/Documentation/DocBook/v4l/vidioc-g-ext-ctrls.xml +++ b/trunk/Documentation/DocBook/media/v4l/vidioc-g-ext-ctrls.xml @@ -250,6 +250,13 @@ These controls are described in . + + V4L2_CTRL_CLASS_FLASH + 0x9c0000 + The class containing flash device controls. +These controls are described in . + @@ -294,6 +301,13 @@ The field size is set to a value that is enough to store the payload and this error code is returned. + + EACCES + + Attempt to try or set a read-only control or to get a + write-only control. + + diff --git a/trunk/Documentation/DocBook/v4l/vidioc-g-fbuf.xml b/trunk/Documentation/DocBook/media/v4l/vidioc-g-fbuf.xml similarity index 97% rename from trunk/Documentation/DocBook/v4l/vidioc-g-fbuf.xml rename to trunk/Documentation/DocBook/media/v4l/vidioc-g-fbuf.xml index e7dda4822f04..055718231bc1 100644 --- a/trunk/Documentation/DocBook/v4l/vidioc-g-fbuf.xml +++ b/trunk/Documentation/DocBook/media/v4l/vidioc-g-fbuf.xml @@ -445,29 +445,12 @@ by a privileged user to negotiate the parameters for a destructive overlay. - - EBUSY - - The framebuffer parameters cannot be changed at this -time because overlay is already enabled, or capturing is enabled -and the hardware cannot capture and overlay simultaneously. - - EINVAL - The ioctl is not supported or the -VIDIOC_S_FBUF parameters are unsuitable. + The VIDIOC_S_FBUF parameters are unsuitable. - - diff --git a/trunk/Documentation/DocBook/v4l/vidioc-g-fmt.xml b/trunk/Documentation/DocBook/media/v4l/vidioc-g-fmt.xml similarity index 93% rename from trunk/Documentation/DocBook/v4l/vidioc-g-fmt.xml rename to trunk/Documentation/DocBook/media/v4l/vidioc-g-fmt.xml index a4ae59b664eb..17fbda15137b 100644 --- a/trunk/Documentation/DocBook/v4l/vidioc-g-fmt.xml +++ b/trunk/Documentation/DocBook/media/v4l/vidioc-g-fmt.xml @@ -183,30 +183,14 @@ capture and output devices. &return-value; - - EBUSY - - The data format cannot be changed at this -time, for example because I/O is already in progress. - - EINVAL The &v4l2-format; type -field is invalid, the requested buffer type not supported, or -VIDIOC_TRY_FMT was called and is not -supported with this buffer type. +field is invalid, the requested buffer type not supported, or the +format is not supported with this buffer type. - - diff --git a/trunk/Documentation/DocBook/v4l/vidioc-g-frequency.xml b/trunk/Documentation/DocBook/media/v4l/vidioc-g-frequency.xml similarity index 100% rename from trunk/Documentation/DocBook/v4l/vidioc-g-frequency.xml rename to trunk/Documentation/DocBook/media/v4l/vidioc-g-frequency.xml diff --git a/trunk/Documentation/DocBook/v4l/vidioc-g-input.xml b/trunk/Documentation/DocBook/media/v4l/vidioc-g-input.xml similarity index 85% rename from trunk/Documentation/DocBook/v4l/vidioc-g-input.xml rename to trunk/Documentation/DocBook/media/v4l/vidioc-g-input.xml index ed076e92760d..08ae82f131f2 100644 --- a/trunk/Documentation/DocBook/v4l/vidioc-g-input.xml +++ b/trunk/Documentation/DocBook/media/v4l/vidioc-g-input.xml @@ -75,26 +75,9 @@ querying or negotiating any other parameters. EINVAL - The number of the video input is out of bounds, or -there are no video inputs at all and this ioctl is not -supported. - - - - EBUSY - - I/O is in progress, the input cannot be -switched. + The number of the video input is out of bounds. - - diff --git a/trunk/Documentation/DocBook/v4l/vidioc-g-jpegcomp.xml b/trunk/Documentation/DocBook/media/v4l/vidioc-g-jpegcomp.xml similarity index 93% rename from trunk/Documentation/DocBook/v4l/vidioc-g-jpegcomp.xml rename to trunk/Documentation/DocBook/media/v4l/vidioc-g-jpegcomp.xml index 77394b287411..01ea24b84385 100644 --- a/trunk/Documentation/DocBook/v4l/vidioc-g-jpegcomp.xml +++ b/trunk/Documentation/DocBook/media/v4l/vidioc-g-jpegcomp.xml @@ -159,22 +159,5 @@ to add them. &return-value; - - - - EINVAL - - This ioctl is not supported. - - - - - diff --git a/trunk/Documentation/DocBook/v4l/vidioc-g-modulator.xml b/trunk/Documentation/DocBook/media/v4l/vidioc-g-modulator.xml similarity index 100% rename from trunk/Documentation/DocBook/v4l/vidioc-g-modulator.xml rename to trunk/Documentation/DocBook/media/v4l/vidioc-g-modulator.xml diff --git a/trunk/Documentation/DocBook/v4l/vidioc-g-output.xml b/trunk/Documentation/DocBook/media/v4l/vidioc-g-output.xml similarity index 87% rename from trunk/Documentation/DocBook/v4l/vidioc-g-output.xml rename to trunk/Documentation/DocBook/media/v4l/vidioc-g-output.xml index 3ea8c0ed812e..fd45f1c13ccf 100644 --- a/trunk/Documentation/DocBook/v4l/vidioc-g-output.xml +++ b/trunk/Documentation/DocBook/media/v4l/vidioc-g-output.xml @@ -76,25 +76,9 @@ negotiating any other parameters. EINVAL The number of the video output is out of bounds, or -there are no video outputs at all and this ioctl is not -supported. - - - - EBUSY - - I/O is in progress, the output cannot be -switched. +there are no video outputs at all. - - diff --git a/trunk/Documentation/DocBook/v4l/vidioc-g-parm.xml b/trunk/Documentation/DocBook/media/v4l/vidioc-g-parm.xml similarity index 97% rename from trunk/Documentation/DocBook/v4l/vidioc-g-parm.xml rename to trunk/Documentation/DocBook/media/v4l/vidioc-g-parm.xml index 392aa9e5571e..19b1d85dd668 100644 --- a/trunk/Documentation/DocBook/v4l/vidioc-g-parm.xml +++ b/trunk/Documentation/DocBook/media/v4l/vidioc-g-parm.xml @@ -311,22 +311,5 @@ excessive motion blur. &return-value; - - - - EINVAL - - This ioctl is not supported. - - - - - diff --git a/trunk/Documentation/DocBook/v4l/vidioc-g-priority.xml b/trunk/Documentation/DocBook/media/v4l/vidioc-g-priority.xml similarity index 97% rename from trunk/Documentation/DocBook/v4l/vidioc-g-priority.xml rename to trunk/Documentation/DocBook/media/v4l/vidioc-g-priority.xml index 5fb001978645..8f5e3da7002f 100644 --- a/trunk/Documentation/DocBook/v4l/vidioc-g-priority.xml +++ b/trunk/Documentation/DocBook/media/v4l/vidioc-g-priority.xml @@ -120,8 +120,7 @@ recording. EINVAL - The requested priority value is invalid, or the -driver does not support access priorities. + The requested priority value is invalid. diff --git a/trunk/Documentation/DocBook/v4l/vidioc-g-sliced-vbi-cap.xml b/trunk/Documentation/DocBook/media/v4l/vidioc-g-sliced-vbi-cap.xml similarity index 97% rename from trunk/Documentation/DocBook/v4l/vidioc-g-sliced-vbi-cap.xml rename to trunk/Documentation/DocBook/media/v4l/vidioc-g-sliced-vbi-cap.xml index 10e721b17374..71741daaf725 100644 --- a/trunk/Documentation/DocBook/v4l/vidioc-g-sliced-vbi-cap.xml +++ b/trunk/Documentation/DocBook/media/v4l/vidioc-g-sliced-vbi-cap.xml @@ -246,19 +246,10 @@ line systems. EINVAL - The device does not support sliced VBI capturing or -output, or the value in the type field is + The value in the type field is wrong. - - diff --git a/trunk/Documentation/DocBook/v4l/vidioc-g-std.xml b/trunk/Documentation/DocBook/media/v4l/vidioc-g-std.xml similarity index 90% rename from trunk/Documentation/DocBook/v4l/vidioc-g-std.xml rename to trunk/Documentation/DocBook/media/v4l/vidioc-g-std.xml index 912f8513e5da..37996f25b5d4 100644 --- a/trunk/Documentation/DocBook/v4l/vidioc-g-std.xml +++ b/trunk/Documentation/DocBook/media/v4l/vidioc-g-std.xml @@ -82,14 +82,7 @@ standards. EINVAL - This ioctl is not supported, or the -VIDIOC_S_STD parameter was unsuitable. - - - - EBUSY - - The device is busy and therefore can not change the standard + The VIDIOC_S_STD parameter was unsuitable. diff --git a/trunk/Documentation/DocBook/v4l/vidioc-g-tuner.xml b/trunk/Documentation/DocBook/media/v4l/vidioc-g-tuner.xml similarity index 100% rename from trunk/Documentation/DocBook/v4l/vidioc-g-tuner.xml rename to trunk/Documentation/DocBook/media/v4l/vidioc-g-tuner.xml diff --git a/trunk/Documentation/DocBook/v4l/vidioc-log-status.xml b/trunk/Documentation/DocBook/media/v4l/vidioc-log-status.xml similarity index 80% rename from trunk/Documentation/DocBook/v4l/vidioc-log-status.xml rename to trunk/Documentation/DocBook/media/v4l/vidioc-log-status.xml index 2634b7c88b58..5ded7d35e27b 100644 --- a/trunk/Documentation/DocBook/v4l/vidioc-log-status.xml +++ b/trunk/Documentation/DocBook/media/v4l/vidioc-log-status.xml @@ -37,22 +37,5 @@ was introduced in Linux 2.6.15. &return-value; - - - - EINVAL - - The driver does not support this ioctl. - - - - - diff --git a/trunk/Documentation/DocBook/v4l/vidioc-overlay.xml b/trunk/Documentation/DocBook/media/v4l/vidioc-overlay.xml similarity index 90% rename from trunk/Documentation/DocBook/v4l/vidioc-overlay.xml rename to trunk/Documentation/DocBook/media/v4l/vidioc-overlay.xml index 1036c582cc15..250a7de1877f 100644 --- a/trunk/Documentation/DocBook/v4l/vidioc-overlay.xml +++ b/trunk/Documentation/DocBook/media/v4l/vidioc-overlay.xml @@ -65,19 +65,10 @@ EINVAL - Video overlay is not supported, or the -parameters have not been set up. See The overlay parameters have not been set up. See for the necessary steps. - - diff --git a/trunk/Documentation/DocBook/v4l/vidioc-qbuf.xml b/trunk/Documentation/DocBook/media/v4l/vidioc-qbuf.xml similarity index 95% rename from trunk/Documentation/DocBook/v4l/vidioc-qbuf.xml rename to trunk/Documentation/DocBook/media/v4l/vidioc-qbuf.xml index f2b11f8a4031..9caa49af580f 100644 --- a/trunk/Documentation/DocBook/v4l/vidioc-qbuf.xml +++ b/trunk/Documentation/DocBook/media/v4l/vidioc-qbuf.xml @@ -158,15 +158,6 @@ or no buffers have been allocated yet, or the userptr or length are invalid. - - - ENOMEM - - Not enough physical or virtual memory was available to -enqueue a user pointer buffer. - - - EIO VIDIOC_DQBUF failed due to an @@ -184,11 +175,3 @@ continue streaming. - - diff --git a/trunk/Documentation/DocBook/v4l/vidioc-query-dv-preset.xml b/trunk/Documentation/DocBook/media/v4l/vidioc-query-dv-preset.xml similarity index 79% rename from trunk/Documentation/DocBook/v4l/vidioc-query-dv-preset.xml rename to trunk/Documentation/DocBook/media/v4l/vidioc-query-dv-preset.xml index d272f7ab91b8..23b17f604211 100644 --- a/trunk/Documentation/DocBook/v4l/vidioc-query-dv-preset.xml +++ b/trunk/Documentation/DocBook/media/v4l/vidioc-query-dv-preset.xml @@ -61,27 +61,5 @@ returned. &return-value; - - - EINVAL - - This ioctl is not supported. - - - - EBUSY - - The device is busy and therefore can not sense the preset - - - - - diff --git a/trunk/Documentation/DocBook/v4l/vidioc-querybuf.xml b/trunk/Documentation/DocBook/media/v4l/vidioc-querybuf.xml similarity index 100% rename from trunk/Documentation/DocBook/v4l/vidioc-querybuf.xml rename to trunk/Documentation/DocBook/media/v4l/vidioc-querybuf.xml diff --git a/trunk/Documentation/DocBook/v4l/vidioc-querycap.xml b/trunk/Documentation/DocBook/media/v4l/vidioc-querycap.xml similarity index 93% rename from trunk/Documentation/DocBook/v4l/vidioc-querycap.xml rename to trunk/Documentation/DocBook/media/v4l/vidioc-querycap.xml index f29f1b86213c..e3664d6f2de4 100644 --- a/trunk/Documentation/DocBook/v4l/vidioc-querycap.xml +++ b/trunk/Documentation/DocBook/media/v4l/vidioc-querycap.xml @@ -67,9 +67,8 @@ driver is not compatible with this specification the ioctl returns an Name of the driver, a unique NUL-terminated ASCII string. For example: "bttv". Driver specific applications can use this information to verify the driver identity. It is also useful -to work around known bugs, or to identify drivers in error reports. -The driver version is stored in the version -field.Storing strings in fixed sized arrays is bad +to work around known bugs, or to identify drivers in error reports. +Storing strings in fixed sized arrays is bad practice but unavoidable here. Drivers and applications should take precautions to never read or write beyond the end of the array and to make sure the strings are properly NUL-terminated. @@ -100,9 +99,13 @@ empty string (bus_info[0] = 0). - diff --git a/trunk/Documentation/DocBook/v4l/vidioc-queryctrl.xml b/trunk/Documentation/DocBook/media/v4l/vidioc-queryctrl.xml similarity index 97% rename from trunk/Documentation/DocBook/v4l/vidioc-queryctrl.xml rename to trunk/Documentation/DocBook/media/v4l/vidioc-queryctrl.xml index 0d5e8283cf32..677ea646c29f 100644 --- a/trunk/Documentation/DocBook/v4l/vidioc-queryctrl.xml +++ b/trunk/Documentation/DocBook/media/v4l/vidioc-queryctrl.xml @@ -156,7 +156,8 @@ signed value. Maximum value, inclusive. This field gives an upper bound for V4L2_CTRL_TYPE_INTEGER controls and the highest valid index for V4L2_CTRL_TYPE_MENU -controls. +controls. For V4L2_CTRL_TYPE_BITMASK controls it is the +set of usable bits. For V4L2_CTRL_TYPE_STRING controls the maximum value gives the maximum length of the string. This length does not include the terminating zero. It may not be valid for any other type of control, including @@ -289,6 +290,15 @@ values which are actually different on the hardware. The control has a menu of N choices. The names of the menu items can be enumerated with the VIDIOC_QUERYMENU ioctl. + + + V4L2_CTRL_TYPE_BITMASK + 0 + n/a + any + A bitmask field. The maximum value is the set of bits that can +be used, all other bits are to be 0. The maximum value is interpreted as a __u32, +allowing the use of bit 31 in the bitmask. V4L2_CTRL_TYPE_BUTTON diff --git a/trunk/Documentation/DocBook/v4l/vidioc-querystd.xml b/trunk/Documentation/DocBook/media/v4l/vidioc-querystd.xml similarity index 78% rename from trunk/Documentation/DocBook/v4l/vidioc-querystd.xml rename to trunk/Documentation/DocBook/media/v4l/vidioc-querystd.xml index 1a9e60393091..4b79c7c04ed6 100644 --- a/trunk/Documentation/DocBook/v4l/vidioc-querystd.xml +++ b/trunk/Documentation/DocBook/media/v4l/vidioc-querystd.xml @@ -62,28 +62,5 @@ current video input or output. &return-value; - - - - EINVAL - - This ioctl is not supported. - - - - EBUSY - - The device is busy and therefore can not detect the standard - - - - - diff --git a/trunk/Documentation/DocBook/v4l/vidioc-reqbufs.xml b/trunk/Documentation/DocBook/media/v4l/vidioc-reqbufs.xml similarity index 92% rename from trunk/Documentation/DocBook/v4l/vidioc-reqbufs.xml rename to trunk/Documentation/DocBook/media/v4l/vidioc-reqbufs.xml index 69800ae23348..7be4b1d29b90 100644 --- a/trunk/Documentation/DocBook/v4l/vidioc-reqbufs.xml +++ b/trunk/Documentation/DocBook/media/v4l/vidioc-reqbufs.xml @@ -121,14 +121,6 @@ higher. This array should be zeroed by applications. &return-value; - - EBUSY - - The driver supports multiple opens and I/O is already -in progress, or reallocation of buffers was attempted although one or -more are still mapped. - - EINVAL @@ -140,11 +132,3 @@ supported. - - diff --git a/trunk/Documentation/DocBook/v4l/vidioc-s-hw-freq-seek.xml b/trunk/Documentation/DocBook/media/v4l/vidioc-s-hw-freq-seek.xml similarity index 100% rename from trunk/Documentation/DocBook/v4l/vidioc-s-hw-freq-seek.xml rename to trunk/Documentation/DocBook/media/v4l/vidioc-s-hw-freq-seek.xml diff --git a/trunk/Documentation/DocBook/v4l/vidioc-streamon.xml b/trunk/Documentation/DocBook/media/v4l/vidioc-streamon.xml similarity index 92% rename from trunk/Documentation/DocBook/v4l/vidioc-streamon.xml rename to trunk/Documentation/DocBook/media/v4l/vidioc-streamon.xml index 75ed39bf4d2b..81cca4569050 100644 --- a/trunk/Documentation/DocBook/v4l/vidioc-streamon.xml +++ b/trunk/Documentation/DocBook/media/v4l/vidioc-streamon.xml @@ -88,9 +88,9 @@ synchronize with other events. EINVAL - Streaming I/O is not supported, the buffer -type is not supported, or no buffers have -been allocated (memory mapping) or enqueued (output) yet. + The buffertype is not supported, + or no buffers have been allocated (memory mapping) or enqueued + (output) yet. @@ -105,11 +105,3 @@ been allocated (memory mapping) or enqueued (output) yet. - - diff --git a/trunk/Documentation/DocBook/v4l/vidioc-subdev-enum-frame-interval.xml b/trunk/Documentation/DocBook/media/v4l/vidioc-subdev-enum-frame-interval.xml similarity index 100% rename from trunk/Documentation/DocBook/v4l/vidioc-subdev-enum-frame-interval.xml rename to trunk/Documentation/DocBook/media/v4l/vidioc-subdev-enum-frame-interval.xml diff --git a/trunk/Documentation/DocBook/v4l/vidioc-subdev-enum-frame-size.xml b/trunk/Documentation/DocBook/media/v4l/vidioc-subdev-enum-frame-size.xml similarity index 100% rename from trunk/Documentation/DocBook/v4l/vidioc-subdev-enum-frame-size.xml rename to trunk/Documentation/DocBook/media/v4l/vidioc-subdev-enum-frame-size.xml diff --git a/trunk/Documentation/DocBook/v4l/vidioc-subdev-enum-mbus-code.xml b/trunk/Documentation/DocBook/media/v4l/vidioc-subdev-enum-mbus-code.xml similarity index 100% rename from trunk/Documentation/DocBook/v4l/vidioc-subdev-enum-mbus-code.xml rename to trunk/Documentation/DocBook/media/v4l/vidioc-subdev-enum-mbus-code.xml diff --git a/trunk/Documentation/DocBook/v4l/vidioc-subdev-g-crop.xml b/trunk/Documentation/DocBook/media/v4l/vidioc-subdev-g-crop.xml similarity index 100% rename from trunk/Documentation/DocBook/v4l/vidioc-subdev-g-crop.xml rename to trunk/Documentation/DocBook/media/v4l/vidioc-subdev-g-crop.xml diff --git a/trunk/Documentation/DocBook/v4l/vidioc-subdev-g-fmt.xml b/trunk/Documentation/DocBook/media/v4l/vidioc-subdev-g-fmt.xml similarity index 99% rename from trunk/Documentation/DocBook/v4l/vidioc-subdev-g-fmt.xml rename to trunk/Documentation/DocBook/media/v4l/vidioc-subdev-g-fmt.xml index f367c570c530..a67cde6f8c54 100644 --- a/trunk/Documentation/DocBook/v4l/vidioc-subdev-g-fmt.xml +++ b/trunk/Documentation/DocBook/media/v4l/vidioc-subdev-g-fmt.xml @@ -177,4 +177,7 @@ + + &return-value; + diff --git a/trunk/Documentation/DocBook/v4l/vidioc-subdev-g-frame-interval.xml b/trunk/Documentation/DocBook/media/v4l/vidioc-subdev-g-frame-interval.xml similarity index 100% rename from trunk/Documentation/DocBook/v4l/vidioc-subdev-g-frame-interval.xml rename to trunk/Documentation/DocBook/media/v4l/vidioc-subdev-g-frame-interval.xml diff --git a/trunk/Documentation/DocBook/media/v4l/vidioc-subscribe-event.xml b/trunk/Documentation/DocBook/media/v4l/vidioc-subscribe-event.xml new file mode 100644 index 000000000000..69c0d8a2a3d2 --- /dev/null +++ b/trunk/Documentation/DocBook/media/v4l/vidioc-subscribe-event.xml @@ -0,0 +1,297 @@ + + + ioctl VIDIOC_SUBSCRIBE_EVENT, VIDIOC_UNSUBSCRIBE_EVENT + &manvol; + + + + VIDIOC_SUBSCRIBE_EVENT, VIDIOC_UNSUBSCRIBE_EVENT + Subscribe or unsubscribe event + + + + + + int ioctl + int fd + int request + struct v4l2_event_subscription +*argp + + + + + + Arguments + + + + fd + + &fd; + + + + request + + VIDIOC_SUBSCRIBE_EVENT, VIDIOC_UNSUBSCRIBE_EVENT + + + + argp + + + + + + + + + Description + + Subscribe or unsubscribe V4L2 event. Subscribed events are + dequeued by using the &VIDIOC-DQEVENT; ioctl. + + + struct <structname>v4l2_event_subscription</structname> + + &cs-str; + + + __u32 + type + Type of the event. + + + __u32 + id + ID of the event source. If there is no ID associated with + the event source, then set this to 0. Whether or not an event + needs an ID depends on the event type. + + + __u32 + flags + Event flags, see . + + + __u32 + reserved[5] + Reserved for future extensions. Drivers and applications + must set the array to zero. + + + +
+ + + Event Types + + &cs-def; + + + V4L2_EVENT_ALL + 0 + All events. V4L2_EVENT_ALL is valid only for + VIDIOC_UNSUBSCRIBE_EVENT for unsubscribing all events at once. + + + + V4L2_EVENT_VSYNC + 1 + This event is triggered on the vertical sync. + This event has a &v4l2-event-vsync; associated with it. + + + + V4L2_EVENT_EOS + 2 + This event is triggered when the end of a stream is reached. + This is typically used with MPEG decoders to report to the application + when the last of the MPEG stream has been decoded. + + + + V4L2_EVENT_CTRL + 3 + This event requires that the id + matches the control ID from which you want to receive events. + This event is triggered if the control's value changes, if a + button control is pressed or if the control's flags change. + This event has a &v4l2-event-ctrl; associated with it. This struct + contains much of the same information as &v4l2-queryctrl; and + &v4l2-control;. + + If the event is generated due to a call to &VIDIOC-S-CTRL; or + &VIDIOC-S-EXT-CTRLS;, then the event will not be sent to + the file handle that called the ioctl function. This prevents + nasty feedback loops. If you do want to get the + event, then set the V4L2_EVENT_SUB_FL_ALLOW_FEEDBACK + flag. + + + This event type will ensure that no information is lost when + more events are raised than there is room internally. In that + case the &v4l2-event-ctrl; of the second-oldest event is kept, + but the changes field of the + second-oldest event is ORed with the changes + field of the oldest event. + + + + V4L2_EVENT_PRIVATE_START + 0x08000000 + Base event number for driver-private events. + + + +
+ + + Event Flags + + &cs-def; + + + V4L2_EVENT_SUB_FL_SEND_INITIAL + 0x0001 + When this event is subscribed an initial event will be sent + containing the current status. This only makes sense for events + that are triggered by a status change such as V4L2_EVENT_CTRL. + Other events will ignore this flag. + + + V4L2_EVENT_SUB_FL_ALLOW_FEEDBACK + 0x0002 + If set, then events directly caused by an ioctl will also be sent to + the filehandle that called that ioctl. For example, changing a control using + &VIDIOC-S-CTRL; will cause a V4L2_EVENT_CTRL to be sent back to that same + filehandle. Normally such events are suppressed to prevent feedback loops + where an application changes a control to a one value and then another, and + then receives an event telling it that that control has changed to the first + value. + + Since it can't tell whether that event was caused by another application + or by the &VIDIOC-S-CTRL; call it is hard to decide whether to set the + control to the value in the event, or ignore it. + + Think carefully when you set this flag so you won't get into situations + like that. + + + + +
+ + + struct <structname>v4l2_event_vsync</structname> + + &cs-str; + + + __u8 + field + The upcoming field. See &v4l2-field;. + + + +
+ + + struct <structname>v4l2_event_ctrl</structname> + + &cs-str; + + + __u32 + changes + + A bitmask that tells what has changed. See . + + + __u32 + type + + The type of the control. See &v4l2-ctrl-type;. + + + union (anonymous) + + + + + + + __s32 + value + The 32-bit value of the control for 32-bit control types. + This is 0 for string controls since the value of a string + cannot be passed using &VIDIOC-DQEVENT;. + + + + __s64 + value64 + The 64-bit value of the control for 64-bit control types. + + + __u32 + flags + + The control flags. See . + + + __s32 + minimum + + The minimum value of the control. See &v4l2-queryctrl;. + + + __s32 + maximum + + The maximum value of the control. See &v4l2-queryctrl;. + + + __s32 + step + + The step value of the control. See &v4l2-queryctrl;. + + + __s32 + default_value + + The default value value of the control. See &v4l2-queryctrl;. + + + +
+ + + Changes + + &cs-def; + + + V4L2_EVENT_CTRL_CH_VALUE + 0x0001 + This control event was triggered because the value of the control + changed. Special case: if a button control is pressed, then this + event is sent as well, even though there is not explicit value + associated with a button control. + + + V4L2_EVENT_CTRL_CH_FLAGS + 0x0002 + This control event was triggered because the control flags + changed. + + + +
+
+ + &return-value; + +
diff --git a/trunk/Documentation/DocBook/media/vbi_525.gif.b64 b/trunk/Documentation/DocBook/media/vbi_525.gif.b64 new file mode 100644 index 000000000000..d5dcf06f2aef --- /dev/null +++ b/trunk/Documentation/DocBook/media/vbi_525.gif.b64 @@ -0,0 +1,84 @@ +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 +E9gqF8bNWgAAOw== diff --git a/trunk/Documentation/DocBook/media/vbi_625.gif.b64 b/trunk/Documentation/DocBook/media/vbi_625.gif.b64 new file mode 100644 index 000000000000..831f49a02821 --- /dev/null +++ b/trunk/Documentation/DocBook/media/vbi_625.gif.b64 @@ -0,0 +1,90 @@ +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 +0Adtyay8rcRcXsY8yW56buKsptPTzwkX0C6Xzx03zy1MzcccngxdcfDcbNE8yyatziSdbSFdzgX9 +yxqdaRxdZIpm0b/+iaY+PcgeJs2UEW3KjKeQGMmPDM2cHNHJbMv1DNKAbMpYLNKJ2kH1I9W5TNWk +nNWwTHJ9M9SKnNDL7Mgq7YpevdTa/NJuUNRPjXNvbWQKt3NwPdc8nSNhjRdtTc9wqtQOjdZ+PclN +jc4TrdBy/dV0bdcjp62SZNYEdtdr3RF6jdKH2s6VLYqN/cuCDdOETdYX2G6f7dmGfdg3F9c7gtex +FdOXvNCWrV6sDZF3KNGqbNT6FNqKDWyiXdqkXdeL/diazdYnDdXsfNmuXWVq7duRDdznPNqJrdvM +vdu8XdG4DWan3bypTdFlTdzmNm4ufdzTbN2FbdvFLN3OvdzkHd7RF93bJf3b393ZKZ3dSY3Z2AzZ +3s3ZAhzd551mNv3Ozw3U5lHGpfPfl3NGA351Rmfgj6XHd7xYUKdZCR51rGE2vVJ1E04eAU45Fl7F +1htMGv5LHN7hXZ3EIS7iI07iJW7iJ47iKa7iK87iLe7iLw7jMS7jM07jNW7jN47jOa7jO87jPe7j +Pw7kQV68E+EQhqrAQs6aZmirzYzkQC4aAmmIygHlTS7kP0G3gRJ8VB7kAGCRbQB8uqflTu6Ci4jl +ehjmPs7laf58XB7Fau6DR56aBQAAOw== diff --git a/trunk/Documentation/DocBook/media/vbi_hsync.gif.b64 b/trunk/Documentation/DocBook/media/vbi_hsync.gif.b64 new file mode 100644 index 000000000000..cdafabed5c11 --- /dev/null +++ b/trunk/Documentation/DocBook/media/vbi_hsync.gif.b64 @@ -0,0 +1,43 @@ +R0lGODlhBwHJAOcAAAAAAAEBAQICAgMDAwQEBAUFBQYGBgcHBwgICAkJCQoKCgsLCwwMDA0NDQ4O +Dg8PDxAQEBERERISEhMTExQUFBUVFRYWFhcXFxgYGBkZGRoaGhsbGxwcHB0dHR4eHh8fHyAgICEh +ISIiIiMjIyQkJCUlJSYmJicnJygoKCkpKSoqKisrKywsLC0tLS4uLi8vLzAwMDExMTIyMjMzMzQ0 +NDU1NTY2Njc3Nzg4ODk5OTo6Ojs7Ozw8PD09PT4+Pj8/P0BAQEFBQUJCQkNDQ0REREVFRUZGRkdH +R0hISElJSUpKSktLS0xMTE1NTU5OTk9PT1BQUFFRUVJSUlNTU1RUVFVVVVZWVldXV1hYWFlZWVpa +WltbW1xcXF1dXV5eXl9fX2BgYGFhYWJiYmNjY2RkZGVlZWZmZmdnZ2hoaGlpaWpqamtra2xsbG1t +bW5ubm9vb3BwcHFxcXJycnNzc3R0dHV1dXZ2dnd3d3h4eHl5eXp6ent7e3x8fH19fX5+fn9/f4CA +gIGBgYKCgoODg4SEhIWFhYaGhoeHh4iIiImJiYqKiouLi4yMjI2NjY6Ojo+Pj5CQkJGRkZKSkpOT +k5SUlJWVlZaWlpeXl5iYmJmZmZqampubm5ycnJ2dnZ6enp+fn6CgoKGhoaKioqOjo6SkpKWlpaam +pqenp6ioqKmpqaqqqqurq6ysrK2tra6urq+vr7CwsLGxsbKysrOzs7S0tLW1tba2tre3t7i4uLm5 +ubq6uru7u7y8vL29vb6+vr+/v8DAwMHBwcLCwsPDw8TExMXFxcbGxsfHx8jIyMnJycrKysvLy8zM +zM3Nzc7Ozs/Pz9DQ0NHR0dLS0tPT09TU1NXV1dbW1tfX19jY2NnZ2dra2tvb29zc3N3d3d7e3t/f +3+Dg4OHh4eLi4uPj4+Tk5OXl5ebm5ufn5+jo6Onp6erq6uvr6+zs7O3t7e7u7u/v7/Dw8PHx8fLy +8vPz8/T09PX19fb29vf39/j4+Pn5+fr6+vv7+/z8/P39/f7+/v///ywAAAAABwHJAAAI/gD/CRxI +sKDBgwgTKlzIsKHDhxAjSpxIsaLFixgzatzIsaPHjyBDihxJsqTJkyhTqlzJsqXLlzBjypxJs6bN +mzhz6tzJs6fPn0CDCh1KtKjRo0iTKl3KtKnTp1CjSp1KtarVqyQBYN1aVSvXr1C9gh2rVOxCsV4B +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 +8lIkIAA7 diff --git a/trunk/Documentation/DocBook/media.tmpl b/trunk/Documentation/DocBook/media_api.tmpl similarity index 89% rename from trunk/Documentation/DocBook/media.tmpl rename to trunk/Documentation/DocBook/media_api.tmpl index 88f2cc680cc2..4e8e8985cc17 100644 --- a/trunk/Documentation/DocBook/media.tmpl +++ b/trunk/Documentation/DocBook/media_api.tmpl @@ -8,7 +8,8 @@ open()."> 2C"> -Return ValueOn success 0 is returned, on error -1 and the errno variable is set appropriately:"> +Return ValueOn success 0 is returned, on error -1 and the errno variable is set appropriately. The generic error codes are described at the Generic Error Codes chapter."> +RETURN VALUEOn success 0 is returned, on error -1 and the errno variable is set appropriately. The generic error codes are described at the Generic Error Codes chapter."> 2"> @@ -110,6 +111,11 @@ Foundation. A copy of the license is included in the chapter entitled &sub-media-controller; + +&sub-gen-errors; + + + &sub-fdl-appendix; diff --git a/trunk/Documentation/DocBook/v4l/bayer.pdf b/trunk/Documentation/DocBook/v4l/bayer.pdf deleted file mode 100644 index 905e60e6cd429f026afdfa6fb4dab3f1683adb8a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12116 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 diff --git a/trunk/Documentation/DocBook/v4l/dev-event.xml b/trunk/Documentation/DocBook/v4l/dev-event.xml deleted file mode 100644 index be5a98fb4fab..000000000000 --- a/trunk/Documentation/DocBook/v4l/dev-event.xml +++ /dev/null @@ -1,31 +0,0 @@ - Event Interface - - The V4L2 event interface provides means for user to get - immediately notified on certain conditions taking place on a device. - This might include start of frame or loss of signal events, for - example. - - - To receive events, the events the user is interested in first must - be subscribed using the &VIDIOC-SUBSCRIBE-EVENT; ioctl. Once an event is - subscribed, the events of subscribed types are dequeueable using the - &VIDIOC-DQEVENT; ioctl. Events may be unsubscribed using - VIDIOC_UNSUBSCRIBE_EVENT ioctl. The special event type V4L2_EVENT_ALL may - be used to unsubscribe all the events the driver supports. - - The event subscriptions and event queues are specific to file - handles. Subscribing an event on one file handle does not affect - other file handles. - - - The information on dequeueable events is obtained by using select or - poll system calls on video devices. The V4L2 events use POLLPRI events on - poll system call and exceptions on select system call. - - diff --git a/trunk/Documentation/DocBook/v4l/fieldseq_bt.gif b/trunk/Documentation/DocBook/v4l/fieldseq_bt.gif deleted file mode 100644 index 60e8569a76c92e7ab45068306dc736771fa3a61e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 25430 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 ODXEex$&zjp5CA*JsW6`a diff --git a/trunk/Documentation/DocBook/v4l/func-ioctl.xml b/trunk/Documentation/DocBook/v4l/func-ioctl.xml deleted file mode 100644 index b60fd37a6295..000000000000 --- a/trunk/Documentation/DocBook/v4l/func-ioctl.xml +++ /dev/null @@ -1,145 +0,0 @@ - - - V4L2 ioctl() - &manvol; - - - - v4l2-ioctl - Program a V4L2 device - - - - - #include <sys/ioctl.h> - - int ioctl - int fd - int request - void *argp - - - - - - Arguments - - - - fd - - &fd; - - - - request - - V4L2 ioctl request code as defined in the videodev2.h header file, for example -VIDIOC_QUERYCAP. - - - - argp - - Pointer to a function parameter, usually a structure. - - - - - - - Description - - The ioctl() function is used to program -V4L2 devices. The argument fd must be an open -file descriptor. An ioctl request has encoded -in it whether the argument is an input, output or read/write -parameter, and the size of the argument argp in -bytes. Macros and defines specifying V4L2 ioctl requests are located -in the videodev2.h header file. -Applications should use their own copy, not include the version in the -kernel sources on the system they compile on. All V4L2 ioctl requests, -their respective function and parameters are specified in . - - - - Return Value - - On success the ioctl() function returns -0 and does not reset the -errno variable. On failure --1 is returned, when the ioctl takes an -output or read/write parameter it remains unmodified, and the -errno variable is set appropriately. See below for -possible error codes. Generic errors like EBADF -or EFAULT are not listed in the sections -discussing individual ioctl requests. - Note ioctls may return undefined error codes. Since errors -may have side effects such as a driver reset applications should -abort on unexpected errors. - - - - EBADF - - fd is not a valid open file -descriptor. - - - - EBUSY - - The property cannot be changed right now. Typically -this error code is returned when I/O is in progress or the driver -supports multiple opens and another process locked the property. - - - - EFAULT - - argp references an inaccessible -memory area. - - - - ENOTTY - - fd is not associated with a -character special device. - - - - EINVAL - - The request or the data pointed -to by argp is not valid. This is a very common -error code, see the individual ioctl requests listed in for actual causes. - - - - ENOMEM - - Not enough physical or virtual memory was available to -complete the request. - - - - ERANGE - - The application attempted to set a control with the -&VIDIOC-S-CTRL; ioctl to a value which is out of bounds. - - - - - - - diff --git a/trunk/Documentation/DocBook/v4l/nv12mt.gif b/trunk/Documentation/DocBook/v4l/nv12mt.gif deleted file mode 100644 index ef2d4cf8367b97293eb9139de0f33d0a2ac236be..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2108 zcmb`E`9IT-1IOQ+qvdLI6(2NWh4B$mqGFB~bIqI`Ov+J?J|;e;^kHT0IblWJ*`TR@ettFfwykFz0RpGX8Qtpc((LKc?crMQAH8KYFSWD99Kv!>_lN%eRo>u79&dGsPn{QY=Bb|r;(6+q+1bsx zxvy`8-AZ)6z3Cv$DzebNmJoNG&VJ}9=Ei%vD-U3yExrFy-&D({S>>SJpRz|$mrO(VC>MdmlKl{FQ#T@ zCtuCI77p1x0NyMM-@RX*TKTvp_`JS33@mZJb^Yl4*&(_Qd{8V%hZ`riKuxi}>Dopq zO>kaLJV^(c{>X$am`p2!XESZ86${gJ4af*Lx;d*6=Zrn{WpL(bjDYWP)L~JMrG&#! zZ2o(6K~22}jLiEO-~AJugyFU8Rq!!S$RJQc{tKru;GgjkKx^ zFd&lbg)hGK?p7)LCkp@qeX0;<>RU3>!h8W=eg6o&nE4(8Lhkxx8flHs7RsrkEkc^-X~TW61OE-h+0@5963qk?9WuDbC$zlK*#au5C* zD7^%Y9A^IR@P6g`?lm+1UAyC0%O5K)1Eptk8flOMvr(_T6UzQ|!ub`Li=XY=jd?Fy zzsv*}SJoRT^iEPbz9CSR>R!~+@%|b3CiB=5scaWqd0YZwBduRfHnEOJD<`ds=vt`@ zeULk`X^@`eESxaj_5qFpprApz!pV#Yqh{V-zud5;!cfY#{VvN;21&&*dK_lxwQS=+ ziKn#L6o;W2dSyL_s^*P@;0<8OtZscq2{U@#F5lP`yda|x8LVOKT5yNB52{bOZtUP$1Q7!Q+vgdTu|H9S$!C_Y|k6eM|{7L(qs&a9y!lH8$KYht*s zdB3FxvecONvQarrk5td@Rjh6BatJqiJQZ$bsPpWT6V7Ylo?&DIF_&N1=BJiZ$6oP% zZdB_r>>SnEGHX@sIdQyb%;**PicwdGuC4T`AN|5lI#Olt9yND}Ncbdfi1})?vD7K# z1N>KFf}O11Omvp4_5j@U#Fv_kEIHkw5)9wCB^f)sM(s`-JjBc}voaUYxX8gtrqP!8Be^mPojpej9Pxfrk6fJ-Gg%2H%yFF&E(qV zI@>pHuJyjEb5^X}(|8k&G2GLkt(BPaVpGp+l(!+;QpmQ}o?*W2G+0RaobVQuEze%) z3UG`306VfGT7f(rwcgs~{Qh~pBRRlO@YHBs-w?L=Y;arWuky}%5=;^azquvIH*o=* zsQiS2LGh4%yDO~Jt@9DQHJ}X>awdgTA}L#H>6nX`$g2WD4to?$A8`b0(d^~rw-5@d zLH6q~{K2&*`1UU*bgGn?Xx^Y9IYtLz2DJ6^o|L+7M?-B^dEk@-eW*%z7^E<}3J%)$ zJrpIQY2tSA4%y)h`Kh(yc)_l3U^>((>&RtHDeOyrue4eiOrH80Aq_2QIUgju8)EmH z9tf^vzW{5uLP@gPO9gK)bJB?Pnd&Sc3Uctpwby8(|-de8|dI~ZDJ4}ij z;^wQqme2^??d-!|%xvb;9XmE$*v*1W$FZ{g^6v|5Xg&L9b94b~_X|DG$E8T`4+QHp zp$)J$n)>?P&I9hKv}N$a{x-(7yg|1+SgtA#PEyJnpoSQ{Q}P}|V2~Sf!AS=xaGOz8 zN1C)dg|5kp(>VCifsAqDmK)F^-R{ubEBeo6ifzvR6d@A zfm{|NR0~nPzz@brvSP1yYuepvZ&BuG776h#+R()pe)ez@b)6-jzTZcay JfkA-P{{T*w8|nZ6 diff --git a/trunk/Documentation/DocBook/v4l/nv12mt_example.gif b/trunk/Documentation/DocBook/v4l/nv12mt_example.gif deleted file mode 100644 index df81d68108eeb66569417b475984aa634385eebb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6858 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 V-^XO_BChtj?V@hK$vy-q{tq)sSegI; diff --git a/trunk/Documentation/DocBook/v4l/pipeline.png b/trunk/Documentation/DocBook/v4l/pipeline.png deleted file mode 100644 index f19b86c2c24d07d5ae437820944d25489a447d7a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12130 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 B;b8y( diff --git a/trunk/Documentation/DocBook/v4l/vbi_525.gif b/trunk/Documentation/DocBook/v4l/vbi_525.gif deleted file mode 100644 index 5580b690d504f388f5c62f730c45e09999da1341..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4741 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

&jXa+2yra$>%leGa2W`o$ysgAs zUdBAhZhCIwtfte`&j}aME|X+-%W2%O6ciK{6%`g178e&67#J8C85tTH8XFrM z92^`S9UUGX9v>ecARr(iAt53nA|oRsBqSsyB_$>%CMPE+C@3f?DJd!{Dl021EG#T7 zEiEoCE-x=HFfcGNF)=bSGBYzXG&D3dH8nOiHa9mnI5;>tIXOByIy*Z%JUl!-Jv}}? zK0iM{KtMo2K|w-7LPJACL_|bIMMXwNMn^|SNJvOYNl8jdN=r*iOiWBoO-)WtPESuy zP*6}&QBhJ-Qd3h?R8&+|RaI72R##V7SXfwDSy@_IT3cINTwGjTU0q&YUSD5dU|?Wj zVPRroVq;@tWMpJzWo2e&W@l$-XlQ6@X=!R|YHMq2Y;0_8ZEbFDZf|dIaBy&OadC2T za&vQYbaZreb#-=jc6WDoczAeud3kzzdV70&e0+R;eSLm@et&;|fPjF3fq{a8f`fyD zgoK2Jg@uNOhKGlTh=_=ZiHVAeii?YjjEszpjg5|uj*pLzkdTm(k&%*;l9Q8@l$4Z} zm6ev3mY0{8n3$NEnVFiJnwy)OoSdAUot>VZo}ZteprD|kp`oIpqNAguq@<*!rKP5( zrl+T;sHmu^si~@}s;jH3tgNi9t*x%EuCK4Ju&}VPv9YqUva_?Zw6wIfwY9dkwzs#p zxVX5vxw*Q!y1To(yu7@dCU$jHda z$;ryf%FD~k%*@Qq&CSlv&d<-!(9qD)(b3Y<($mw^)YR0~)z#M4*4Nk9*x1lt)=I7_<=;-L_>FMg~>g((4 z?Ck9A?d|UF?(gsK@bK{Q@$vHV^7Hfa^z`)g_4W4l_V@Sq`1ttw`T6?#`uqF){QUg= z{r&#_{{R2~EC2ui00#ld000R70RIUbNU)&6g9sBUT*$DY!-o(fN}NcsqQ#3CGiuz( zv7^V2AVZ2ANwTELlPFWFT*uSB5m*85x0`~%zOL#6_yLkKV4U8A@K(veX0)|`oXWq-0Gi%<=xv#;(>zZik{utZ)v}x8LJiw`!mAc57W|Sn;5rb;eiM51`6EvLCUO`OAr40 zd3E2@vrB}29lLAo;Hmz5|8AXp`11<6mmiP5{n_>AqMcECYxZt0?TKgpqiwsV{9o_W=Or} zSZr*!5w{to9z|Q@w82@+m~daCp)o{4JRmYS+Z8_@WotaOyI^y z)oU-vA$zPb%4Ld-D9e(*YOqV3j>?hA0mJkw$vDrPYehW&3$V{D?VPR9&l0_o(H-@y zFwH<8-7&HfLrqc8QNg~-v^`I zLB*}}{@OQ}JtE$DV+8nHd~cLw$|@U|TifD^^zPscG2QpqRI=J^a>x*!GSx0o*aDw#*8EVCO{!ylphdws2HP>!?dBNs(E`GwMyZh^ezxR^lYO7T1>X&~T z?uW`@i+1q44qv$G#slrFu%RhlTw|?|lxLlg3qO1D>=yPX__C9)zOv@iWvTPol6JN2 zk+R=D^wxzRAMw7m#TVDkW#y$UmFnSCeAqYLFK(K9)gnH^=1XVY^0;-UNEX;}v&4$7ou5gC_ zZkZqeefY!b!SI11yrB$@ctRvLkcgDZq4##EK_1!(eI{(;3$^GbEE`5pe2dB^}BbCb-$9Oh)Rzrmn#p>jk(@TvZ+I4@`hN+Gf(eA1%~OHPpauPlHJRlo;OW$+ z0&O0+x;Gin;BkAAQQj~gs>Gc(E2Fu?Cq8+1xvXNXqe$KAcZRw=*R5_ew!s@sA2v -/* - * Video for Linux Two header file - * - * Copyright (C) 1999-2007 the contributors - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * Alternatively you can redistribute this file under the terms of the - * BSD license as stated below: - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * 3. The names of its contributors may not be used to endorse or promote - * products derived from this software without specific prior written - * permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED - * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * Header file for v4l or V4L2 drivers and applications - * with public API. - * All kernel-specific stuff were moved to media/v4l2-dev.h, so - * no #if __KERNEL tests are allowed here - * - * See http://linuxtv.org for more info - * - * Author: Bill Dirks <bill@thedirks.org> - * Justin Schoeman - * Hans Verkuil <hverkuil@xs4all.nl> - * et al. - */ -#ifndef __LINUX_VIDEODEV2_H -#define __LINUX_VIDEODEV2_H - -#ifdef __KERNEL__ -#include <linux/time.h> /* need struct timeval */ -#else -#include <sys/time.h> -#endif -#include <linux/compiler.h> -#include <linux/ioctl.h> -#include <linux/types.h> - -/* - * Common stuff for both V4L1 and V4L2 - * Moved from videodev.h - */ -#define VIDEO_MAX_FRAME 32 -#define VIDEO_MAX_PLANES 8 - -#ifndef __KERNEL__ - -/* These defines are V4L1 specific and should not be used with the V4L2 API! - They will be removed from this header in the future. */ - -#define VID_TYPE_CAPTURE 1 /* Can capture */ -#define VID_TYPE_TUNER 2 /* Can tune */ -#define VID_TYPE_TELETEXT 4 /* Does teletext */ -#define VID_TYPE_OVERLAY 8 /* Overlay onto frame buffer */ -#define VID_TYPE_CHROMAKEY 16 /* Overlay by chromakey */ -#define VID_TYPE_CLIPPING 32 /* Can clip */ -#define VID_TYPE_FRAMERAM 64 /* Uses the frame buffer memory */ -#define VID_TYPE_SCALES 128 /* Scalable */ -#define VID_TYPE_MONOCHROME 256 /* Monochrome only */ -#define VID_TYPE_SUBCAPTURE 512 /* Can capture subareas of the image */ -#define VID_TYPE_MPEG_DECODER 1024 /* Can decode MPEG streams */ -#define VID_TYPE_MPEG_ENCODER 2048 /* Can encode MPEG streams */ -#define VID_TYPE_MJPEG_DECODER 4096 /* Can decode MJPEG streams */ -#define VID_TYPE_MJPEG_ENCODER 8192 /* Can encode MJPEG streams */ -#endif - -/* - * M I S C E L L A N E O U S - */ - -/* Four-character-code (FOURCC) */ -#define v4l2_fourcc(a, b, c, d)\ - ((__u32)(a) | ((__u32)(b) << 8) | ((__u32)(c) << 16) | ((__u32)(d) << 24)) - -/* - * E N U M S - */ -enum v4l2_field { - V4L2_FIELD_ANY = 0, /* driver can choose from none, - top, bottom, interlaced - depending on whatever it thinks - is approximate ... */ - V4L2_FIELD_NONE = 1, /* this device has no fields ... */ - V4L2_FIELD_TOP = 2, /* top field only */ - V4L2_FIELD_BOTTOM = 3, /* bottom field only */ - V4L2_FIELD_INTERLACED = 4, /* both fields interlaced */ - V4L2_FIELD_SEQ_TB = 5, /* both fields sequential into one - buffer, top-bottom order */ - V4L2_FIELD_SEQ_BT = 6, /* same as above + bottom-top order */ - V4L2_FIELD_ALTERNATE = 7, /* both fields alternating into - separate buffers */ - V4L2_FIELD_INTERLACED_TB = 8, /* both fields interlaced, top field - first and the top field is - transmitted first */ - V4L2_FIELD_INTERLACED_BT = 9, /* both fields interlaced, top field - first and the bottom field is - transmitted first */ -}; -#define V4L2_FIELD_HAS_TOP(field) \ - ((field) == V4L2_FIELD_TOP ||\ - (field) == V4L2_FIELD_INTERLACED ||\ - (field) == V4L2_FIELD_INTERLACED_TB ||\ - (field) == V4L2_FIELD_INTERLACED_BT ||\ - (field) == V4L2_FIELD_SEQ_TB ||\ - (field) == V4L2_FIELD_SEQ_BT) -#define V4L2_FIELD_HAS_BOTTOM(field) \ - ((field) == V4L2_FIELD_BOTTOM ||\ - (field) == V4L2_FIELD_INTERLACED ||\ - (field) == V4L2_FIELD_INTERLACED_TB ||\ - (field) == V4L2_FIELD_INTERLACED_BT ||\ - (field) == V4L2_FIELD_SEQ_TB ||\ - (field) == V4L2_FIELD_SEQ_BT) -#define V4L2_FIELD_HAS_BOTH(field) \ - ((field) == V4L2_FIELD_INTERLACED ||\ - (field) == V4L2_FIELD_INTERLACED_TB ||\ - (field) == V4L2_FIELD_INTERLACED_BT ||\ - (field) == V4L2_FIELD_SEQ_TB ||\ - (field) == V4L2_FIELD_SEQ_BT) - -enum v4l2_buf_type { - V4L2_BUF_TYPE_VIDEO_CAPTURE = 1, - V4L2_BUF_TYPE_VIDEO_OUTPUT = 2, - V4L2_BUF_TYPE_VIDEO_OVERLAY = 3, - V4L2_BUF_TYPE_VBI_CAPTURE = 4, - V4L2_BUF_TYPE_VBI_OUTPUT = 5, - V4L2_BUF_TYPE_SLICED_VBI_CAPTURE = 6, - V4L2_BUF_TYPE_SLICED_VBI_OUTPUT = 7, -#if 1 - /* Experimental */ - V4L2_BUF_TYPE_VIDEO_OUTPUT_OVERLAY = 8, -#endif - V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE = 9, - V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE = 10, - V4L2_BUF_TYPE_PRIVATE = 0x80, -}; - -#define V4L2_TYPE_IS_MULTIPLANAR(type) \ - ((type) == V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE \ - || (type) == V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE) - -#define V4L2_TYPE_IS_OUTPUT(type) \ - ((type) == V4L2_BUF_TYPE_VIDEO_OUTPUT \ - || (type) == V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE \ - || (type) == V4L2_BUF_TYPE_VIDEO_OVERLAY \ - || (type) == V4L2_BUF_TYPE_VIDEO_OUTPUT_OVERLAY \ - || (type) == V4L2_BUF_TYPE_VBI_OUTPUT \ - || (type) == V4L2_BUF_TYPE_SLICED_VBI_OUTPUT) - -enum v4l2_tuner_type { - V4L2_TUNER_RADIO = 1, - V4L2_TUNER_ANALOG_TV = 2, - V4L2_TUNER_DIGITAL_TV = 3, -}; - -enum v4l2_memory { - V4L2_MEMORY_MMAP = 1, - V4L2_MEMORY_USERPTR = 2, - V4L2_MEMORY_OVERLAY = 3, -}; - -/* see also http://vektor.theorem.ca/graphics/ycbcr/ */ -enum v4l2_colorspace { - /* ITU-R 601 -- broadcast NTSC/PAL */ - V4L2_COLORSPACE_SMPTE170M = 1, - - /* 1125-Line (US) HDTV */ - V4L2_COLORSPACE_SMPTE240M = 2, - - /* HD and modern captures. */ - V4L2_COLORSPACE_REC709 = 3, - - /* broken BT878 extents (601, luma range 16-253 instead of 16-235) */ - V4L2_COLORSPACE_BT878 = 4, - - /* These should be useful. Assume 601 extents. */ - V4L2_COLORSPACE_470_SYSTEM_M = 5, - V4L2_COLORSPACE_470_SYSTEM_BG = 6, - - /* I know there will be cameras that send this. So, this is - * unspecified chromaticities and full 0-255 on each of the - * Y'CbCr components - */ - V4L2_COLORSPACE_JPEG = 7, - - /* For RGB colourspaces, this is probably a good start. */ - V4L2_COLORSPACE_SRGB = 8, -}; - -enum v4l2_priority { - V4L2_PRIORITY_UNSET = 0, /* not initialized */ - V4L2_PRIORITY_BACKGROUND = 1, - V4L2_PRIORITY_INTERACTIVE = 2, - V4L2_PRIORITY_RECORD = 3, - V4L2_PRIORITY_DEFAULT = V4L2_PRIORITY_INTERACTIVE, -}; - -struct v4l2_rect { - __s32 left; - __s32 top; - __s32 width; - __s32 height; -}; - -struct v4l2_fract { - __u32 numerator; - __u32 denominator; -}; - -/* - * D R I V E R C A P A B I L I T I E S - */ -struct v4l2_capability { - __u8 driver[16]; /* i.e.ie; "bttv" */ - __u8 card[32]; /* i.e.ie; "Hauppauge WinTV" */ - __u8 bus_info[32]; /* "PCI:" + pci_name(pci_dev) */ - __u32 version; /* should use KERNEL_VERSION() */ - __u32 capabilities; /* Device capabilities */ - __u32 reserved[4]; -}; - -/* Values for 'capabilities' field */ -#define V4L2_CAP_VIDEO_CAPTURE 0x00000001 /* Is a video capture device */ -#define V4L2_CAP_VIDEO_OUTPUT 0x00000002 /* Is a video output device */ -#define V4L2_CAP_VIDEO_OVERLAY 0x00000004 /* Can do video overlay */ -#define V4L2_CAP_VBI_CAPTURE 0x00000010 /* Is a raw VBI capture device */ -#define V4L2_CAP_VBI_OUTPUT 0x00000020 /* Is a raw VBI output device */ -#define V4L2_CAP_SLICED_VBI_CAPTURE 0x00000040 /* Is a sliced VBI capture device */ -#define V4L2_CAP_SLICED_VBI_OUTPUT 0x00000080 /* Is a sliced VBI output device */ -#define V4L2_CAP_RDS_CAPTURE 0x00000100 /* RDS data capture */ -#define V4L2_CAP_VIDEO_OUTPUT_OVERLAY 0x00000200 /* Can do video output overlay */ -#define V4L2_CAP_HW_FREQ_SEEK 0x00000400 /* Can do hardware frequency seek */ -#define V4L2_CAP_RDS_OUTPUT 0x00000800 /* Is an RDS encoder */ - -/* Is a video capture device that supports multiplanar formats */ -#define V4L2_CAP_VIDEO_CAPTURE_MPLANE 0x00001000 -/* Is a video output device that supports multiplanar formats */ -#define V4L2_CAP_VIDEO_OUTPUT_MPLANE 0x00002000 - -#define V4L2_CAP_TUNER 0x00010000 /* has a tuner */ -#define V4L2_CAP_AUDIO 0x00020000 /* has audio support */ -#define V4L2_CAP_RADIO 0x00040000 /* is a radio device */ -#define V4L2_CAP_MODULATOR 0x00080000 /* has a modulator */ - -#define V4L2_CAP_READWRITE 0x01000000 /* read/write systemcalls */ -#define V4L2_CAP_ASYNCIO 0x02000000 /* async I/O */ -#define V4L2_CAP_STREAMING 0x04000000 /* streaming I/O ioctls */ - -/* - * V I D E O I M A G E F O R M A T - */ -struct v4l2_pix_format { - __u32 width; - __u32 height; - __u32 pixelformat; - enum v4l2_field field; - __u32 bytesperline; /* for padding, zero if unused */ - __u32 sizeimage; - enum v4l2_colorspace colorspace; - __u32 priv; /* private data, depends on pixelformat */ -}; - -/* Pixel format FOURCC depth Description */ - -/* RGB formats */ -#define V4L2_PIX_FMT_RGB332 v4l2_fourcc('R', 'G', 'B', '1') /* 8 RGB-3-3-2 */ -#define V4L2_PIX_FMT_RGB444 v4l2_fourcc('R', '4', '4', '4') /* 16 xxxxrrrr ggggbbbb */ -#define V4L2_PIX_FMT_RGB555 v4l2_fourcc('R', 'G', 'B', 'O') /* 16 RGB-5-5-5 */ -#define V4L2_PIX_FMT_RGB565 v4l2_fourcc('R', 'G', 'B', 'P') /* 16 RGB-5-6-5 */ -#define V4L2_PIX_FMT_RGB555X v4l2_fourcc('R', 'G', 'B', 'Q') /* 16 RGB-5-5-5 BE */ -#define V4L2_PIX_FMT_RGB565X v4l2_fourcc('R', 'G', 'B', 'R') /* 16 RGB-5-6-5 BE */ -#define V4L2_PIX_FMT_BGR666 v4l2_fourcc('B', 'G', 'R', 'H') /* 18 BGR-6-6-6 */ -#define V4L2_PIX_FMT_BGR24 v4l2_fourcc('B', 'G', 'R', '3') /* 24 BGR-8-8-8 */ -#define V4L2_PIX_FMT_RGB24 v4l2_fourcc('R', 'G', 'B', '3') /* 24 RGB-8-8-8 */ -#define V4L2_PIX_FMT_BGR32 v4l2_fourcc('B', 'G', 'R', '4') /* 32 BGR-8-8-8-8 */ -#define V4L2_PIX_FMT_RGB32 v4l2_fourcc('R', 'G', 'B', '4') /* 32 RGB-8-8-8-8 */ - -/* Grey formats */ -#define V4L2_PIX_FMT_GREY v4l2_fourcc('G', 'R', 'E', 'Y') /* 8 Greyscale */ -#define V4L2_PIX_FMT_Y4 v4l2_fourcc('Y', '0', '4', ' ') /* 4 Greyscale */ -#define V4L2_PIX_FMT_Y6 v4l2_fourcc('Y', '0', '6', ' ') /* 6 Greyscale */ -#define V4L2_PIX_FMT_Y10 v4l2_fourcc('Y', '1', '0', ' ') /* 10 Greyscale */ -#define V4L2_PIX_FMT_Y16 v4l2_fourcc('Y', '1', '6', ' ') /* 16 Greyscale */ - -/* Grey bit-packed formats */ -#define V4L2_PIX_FMT_Y10BPACK v4l2_fourcc('Y', '1', '0', 'B') /* 10 Greyscale bit-packed */ - -/* Palette formats */ -#define V4L2_PIX_FMT_PAL8 v4l2_fourcc('P', 'A', 'L', '8') /* 8 8-bit palette */ - -/* Luminance+Chrominance formats */ -#define V4L2_PIX_FMT_YVU410 v4l2_fourcc('Y', 'V', 'U', '9') /* 9 YVU 4:1:0 */ -#define V4L2_PIX_FMT_YVU420 v4l2_fourcc('Y', 'V', '1', '2') /* 12 YVU 4:2:0 */ -#define V4L2_PIX_FMT_YUYV v4l2_fourcc('Y', 'U', 'Y', 'V') /* 16 YUV 4:2:2 */ -#define V4L2_PIX_FMT_YYUV v4l2_fourcc('Y', 'Y', 'U', 'V') /* 16 YUV 4:2:2 */ -#define V4L2_PIX_FMT_YVYU v4l2_fourcc('Y', 'V', 'Y', 'U') /* 16 YVU 4:2:2 */ -#define V4L2_PIX_FMT_UYVY v4l2_fourcc('U', 'Y', 'V', 'Y') /* 16 YUV 4:2:2 */ -#define V4L2_PIX_FMT_VYUY v4l2_fourcc('V', 'Y', 'U', 'Y') /* 16 YUV 4:2:2 */ -#define V4L2_PIX_FMT_YUV422P v4l2_fourcc('4', '2', '2', 'P') /* 16 YVU422 planar */ -#define V4L2_PIX_FMT_YUV411P v4l2_fourcc('4', '1', '1', 'P') /* 16 YVU411 planar */ -#define V4L2_PIX_FMT_Y41P v4l2_fourcc('Y', '4', '1', 'P') /* 12 YUV 4:1:1 */ -#define V4L2_PIX_FMT_YUV444 v4l2_fourcc('Y', '4', '4', '4') /* 16 xxxxyyyy uuuuvvvv */ -#define V4L2_PIX_FMT_YUV555 v4l2_fourcc('Y', 'U', 'V', 'O') /* 16 YUV-5-5-5 */ -#define V4L2_PIX_FMT_YUV565 v4l2_fourcc('Y', 'U', 'V', 'P') /* 16 YUV-5-6-5 */ -#define V4L2_PIX_FMT_YUV32 v4l2_fourcc('Y', 'U', 'V', '4') /* 32 YUV-8-8-8-8 */ -#define V4L2_PIX_FMT_YUV410 v4l2_fourcc('Y', 'U', 'V', '9') /* 9 YUV 4:1:0 */ -#define V4L2_PIX_FMT_YUV420 v4l2_fourcc('Y', 'U', '1', '2') /* 12 YUV 4:2:0 */ -#define V4L2_PIX_FMT_HI240 v4l2_fourcc('H', 'I', '2', '4') /* 8 8-bit color */ -#define V4L2_PIX_FMT_HM12 v4l2_fourcc('H', 'M', '1', '2') /* 8 YUV 4:2:0 16x16 macroblocks */ -#define V4L2_PIX_FMT_M420 v4l2_fourcc('M', '4', '2', '0') /* 12 YUV 4:2:0 2 lines y, 1 line uv interleaved */ - -/* two planes -- one Y, one Cr + Cb interleaved */ -#define V4L2_PIX_FMT_NV12 v4l2_fourcc('N', 'V', '1', '2') /* 12 Y/CbCr 4:2:0 */ -#define V4L2_PIX_FMT_NV21 v4l2_fourcc('N', 'V', '2', '1') /* 12 Y/CrCb 4:2:0 */ -#define V4L2_PIX_FMT_NV16 v4l2_fourcc('N', 'V', '1', '6') /* 16 Y/CbCr 4:2:2 */ -#define V4L2_PIX_FMT_NV61 v4l2_fourcc('N', 'V', '6', '1') /* 16 Y/CrCb 4:2:2 */ - -/* two non contiguous planes - one Y, one Cr + Cb interleaved */ -#define V4L2_PIX_FMT_NV12M v4l2_fourcc('N', 'M', '1', '2') /* 12 Y/CbCr 4:2:0 */ -#define V4L2_PIX_FMT_NV12MT v4l2_fourcc('T', 'M', '1', '2') /* 12 Y/CbCr 4:2:0 64x32 macroblocks */ - -/* three non contiguous planes - Y, Cb, Cr */ -#define V4L2_PIX_FMT_YUV420M v4l2_fourcc('Y', 'M', '1', '2') /* 12 YUV420 planar */ - -/* Bayer formats - see http://www.siliconimaging.com/RGB%20Bayer.htm */ -#define V4L2_PIX_FMT_SBGGR8 v4l2_fourcc('B', 'A', '8', '1') /* 8 BGBG.. GRGR.. */ -#define V4L2_PIX_FMT_SGBRG8 v4l2_fourcc('G', 'B', 'R', 'G') /* 8 GBGB.. RGRG.. */ -#define V4L2_PIX_FMT_SGRBG8 v4l2_fourcc('G', 'R', 'B', 'G') /* 8 GRGR.. BGBG.. */ -#define V4L2_PIX_FMT_SRGGB8 v4l2_fourcc('R', 'G', 'G', 'B') /* 8 RGRG.. GBGB.. */ -#define V4L2_PIX_FMT_SBGGR10 v4l2_fourcc('B', 'G', '1', '0') /* 10 BGBG.. GRGR.. */ -#define V4L2_PIX_FMT_SGBRG10 v4l2_fourcc('G', 'B', '1', '0') /* 10 GBGB.. RGRG.. */ -#define V4L2_PIX_FMT_SGRBG10 v4l2_fourcc('B', 'A', '1', '0') /* 10 GRGR.. BGBG.. */ -#define V4L2_PIX_FMT_SRGGB10 v4l2_fourcc('R', 'G', '1', '0') /* 10 RGRG.. GBGB.. */ - /* 10bit raw bayer DPCM compressed to 8 bits */ -#define V4L2_PIX_FMT_SGRBG10DPCM8 v4l2_fourcc('B', 'D', '1', '0') - /* - * 10bit raw bayer, expanded to 16 bits - * xxxxrrrrrrrrrrxxxxgggggggggg xxxxggggggggggxxxxbbbbbbbbbb... - */ -#define V4L2_PIX_FMT_SBGGR16 v4l2_fourcc('B', 'Y', 'R', '2') /* 16 BGBG.. GRGR.. */ - -/* compressed formats */ -#define V4L2_PIX_FMT_MJPEG v4l2_fourcc('M', 'J', 'P', 'G') /* Motion-JPEG */ -#define V4L2_PIX_FMT_JPEG v4l2_fourcc('J', 'P', 'E', 'G') /* JFIF JPEG */ -#define V4L2_PIX_FMT_DV v4l2_fourcc('d', 'v', 's', 'd') /* 1394 */ -#define V4L2_PIX_FMT_MPEG v4l2_fourcc('M', 'P', 'E', 'G') /* MPEG-1/2/4 */ - -/* Vendor-specific formats */ -#define V4L2_PIX_FMT_CPIA1 v4l2_fourcc('C', 'P', 'I', 'A') /* cpia1 YUV */ -#define V4L2_PIX_FMT_WNVA v4l2_fourcc('W', 'N', 'V', 'A') /* Winnov hw compress */ -#define V4L2_PIX_FMT_SN9C10X v4l2_fourcc('S', '9', '1', '0') /* SN9C10x compression */ -#define V4L2_PIX_FMT_SN9C20X_I420 v4l2_fourcc('S', '9', '2', '0') /* SN9C20x YUV 4:2:0 */ -#define V4L2_PIX_FMT_PWC1 v4l2_fourcc('P', 'W', 'C', '1') /* pwc older webcam */ -#define V4L2_PIX_FMT_PWC2 v4l2_fourcc('P', 'W', 'C', '2') /* pwc newer webcam */ -#define V4L2_PIX_FMT_ET61X251 v4l2_fourcc('E', '6', '2', '5') /* ET61X251 compression */ -#define V4L2_PIX_FMT_SPCA501 v4l2_fourcc('S', '5', '0', '1') /* YUYV per line */ -#define V4L2_PIX_FMT_SPCA505 v4l2_fourcc('S', '5', '0', '5') /* YYUV per line */ -#define V4L2_PIX_FMT_SPCA508 v4l2_fourcc('S', '5', '0', '8') /* YUVY per line */ -#define V4L2_PIX_FMT_SPCA561 v4l2_fourcc('S', '5', '6', '1') /* compressed GBRG bayer */ -#define V4L2_PIX_FMT_PAC207 v4l2_fourcc('P', '2', '0', '7') /* compressed BGGR bayer */ -#define V4L2_PIX_FMT_MR97310A v4l2_fourcc('M', '3', '1', '0') /* compressed BGGR bayer */ -#define V4L2_PIX_FMT_SN9C2028 v4l2_fourcc('S', 'O', 'N', 'X') /* compressed GBRG bayer */ -#define V4L2_PIX_FMT_SQ905C v4l2_fourcc('9', '0', '5', 'C') /* compressed RGGB bayer */ -#define V4L2_PIX_FMT_PJPG v4l2_fourcc('P', 'J', 'P', 'G') /* Pixart 73xx JPEG */ -#define V4L2_PIX_FMT_OV511 v4l2_fourcc('O', '5', '1', '1') /* ov511 JPEG */ -#define V4L2_PIX_FMT_OV518 v4l2_fourcc('O', '5', '1', '8') /* ov518 JPEG */ -#define V4L2_PIX_FMT_STV0680 v4l2_fourcc('S', '6', '8', '0') /* stv0680 bayer */ -#define V4L2_PIX_FMT_TM6000 v4l2_fourcc('T', 'M', '6', '0') /* tm5600/tm60x0 */ -#define V4L2_PIX_FMT_CIT_YYVYUY v4l2_fourcc('C', 'I', 'T', 'V') /* one line of Y then 1 line of VYUY */ -#define V4L2_PIX_FMT_KONICA420 v4l2_fourcc('K', 'O', 'N', 'I') /* YUV420 planar in blocks of 256 pixels */ - -/* - * F O R M A T E N U M E R A T I O N - */ -struct v4l2_fmtdesc { - __u32 index; /* Format number */ - enum v4l2_buf_type type; /* buffer type */ - __u32 flags; - __u8 description[32]; /* Description string */ - __u32 pixelformat; /* Format fourcc */ - __u32 reserved[4]; -}; - -#define V4L2_FMT_FLAG_COMPRESSED 0x0001 -#define V4L2_FMT_FLAG_EMULATED 0x0002 - -#if 1 - /* Experimental Frame Size and frame rate enumeration */ -/* - * F R A M E S I Z E E N U M E R A T I O N - */ -enum v4l2_frmsizetypes { - V4L2_FRMSIZE_TYPE_DISCRETE = 1, - V4L2_FRMSIZE_TYPE_CONTINUOUS = 2, - V4L2_FRMSIZE_TYPE_STEPWISE = 3, -}; - -struct v4l2_frmsize_discrete { - __u32 width; /* Frame width [pixel] */ - __u32 height; /* Frame height [pixel] */ -}; - -struct v4l2_frmsize_stepwise { - __u32 min_width; /* Minimum frame width [pixel] */ - __u32 max_width; /* Maximum frame width [pixel] */ - __u32 step_width; /* Frame width step size [pixel] */ - __u32 min_height; /* Minimum frame height [pixel] */ - __u32 max_height; /* Maximum frame height [pixel] */ - __u32 step_height; /* Frame height step size [pixel] */ -}; - -struct v4l2_frmsizeenum { - __u32 index; /* Frame size number */ - __u32 pixel_format; /* Pixel format */ - __u32 type; /* Frame size type the device supports. */ - - union { /* Frame size */ - struct v4l2_frmsize_discrete discrete; - struct v4l2_frmsize_stepwise stepwise; - }; - - __u32 reserved[2]; /* Reserved space for future use */ -}; - -/* - * F R A M E R A T E E N U M E R A T I O N - */ -enum v4l2_frmivaltypes { - V4L2_FRMIVAL_TYPE_DISCRETE = 1, - V4L2_FRMIVAL_TYPE_CONTINUOUS = 2, - V4L2_FRMIVAL_TYPE_STEPWISE = 3, -}; - -struct v4l2_frmival_stepwise { - struct v4l2_fract min; /* Minimum frame interval [s] */ - struct v4l2_fract max; /* Maximum frame interval [s] */ - struct v4l2_fract step; /* Frame interval step size [s] */ -}; - -struct v4l2_frmivalenum { - __u32 index; /* Frame format index */ - __u32 pixel_format; /* Pixel format */ - __u32 width; /* Frame width */ - __u32 height; /* Frame height */ - __u32 type; /* Frame interval type the device supports. */ - - union { /* Frame interval */ - struct v4l2_fract discrete; - struct v4l2_frmival_stepwise stepwise; - }; - - __u32 reserved[2]; /* Reserved space for future use */ -}; -#endif - -/* - * T I M E C O D E - */ -struct v4l2_timecode { - __u32 type; - __u32 flags; - __u8 frames; - __u8 seconds; - __u8 minutes; - __u8 hours; - __u8 userbits[4]; -}; - -/* Type */ -#define V4L2_TC_TYPE_24FPS 1 -#define V4L2_TC_TYPE_25FPS 2 -#define V4L2_TC_TYPE_30FPS 3 -#define V4L2_TC_TYPE_50FPS 4 -#define V4L2_TC_TYPE_60FPS 5 - -/* Flags */ -#define V4L2_TC_FLAG_DROPFRAME 0x0001 /* "drop-frame" mode */ -#define V4L2_TC_FLAG_COLORFRAME 0x0002 -#define V4L2_TC_USERBITS_field 0x000C -#define V4L2_TC_USERBITS_USERDEFINED 0x0000 -#define V4L2_TC_USERBITS_8BITCHARS 0x0008 -/* The above is based on SMPTE timecodes */ - -struct v4l2_jpegcompression { - int quality; - - int APPn; /* Number of APP segment to be written, - * must be 0..15 */ - int APP_len; /* Length of data in JPEG APPn segment */ - char APP_data[60]; /* Data in the JPEG APPn segment. */ - - int COM_len; /* Length of data in JPEG COM segment */ - char COM_data[60]; /* Data in JPEG COM segment */ - - __u32 jpeg_markers; /* Which markers should go into the JPEG - * output. Unless you exactly know what - * you do, leave them untouched. - * Inluding less markers will make the - * resulting code smaller, but there will - * be fewer applications which can read it. - * The presence of the APP and COM marker - * is influenced by APP_len and COM_len - * ONLY, not by this property! */ - -#define V4L2_JPEG_MARKER_DHT (1<<3) /* Define Huffman Tables */ -#define V4L2_JPEG_MARKER_DQT (1<<4) /* Define Quantization Tables */ -#define V4L2_JPEG_MARKER_DRI (1<<5) /* Define Restart Interval */ -#define V4L2_JPEG_MARKER_COM (1<<6) /* Comment segment */ -#define V4L2_JPEG_MARKER_APP (1<<7) /* App segment, driver will - * allways use APP0 */ -}; - -/* - * M E M O R Y - M A P P I N G B U F F E R S - */ -struct v4l2_requestbuffers { - __u32 count; - enum v4l2_buf_type type; - enum v4l2_memory memory; - __u32 reserved[2]; -}; - -/** - * struct v4l2_plane - plane info for multi-planar buffers - * @bytesused: number of bytes occupied by data in the plane (payload) - * @length: size of this plane (NOT the payload) in bytes - * @mem_offset: when memory in the associated struct v4l2_buffer is - * V4L2_MEMORY_MMAP, equals the offset from the start of - * the device memory for this plane (or is a "cookie" that - * should be passed to mmap() called on the video node) - * @userptr: when memory is V4L2_MEMORY_USERPTR, a userspace pointer - * pointing to this plane - * @data_offset: offset in the plane to the start of data; usually 0, - * unless there is a header in front of the data - * - * Multi-planar buffers consist of one or more planes, e.g. an YCbCr buffer - * with two planes can have one plane for Y, and another for interleaved CbCr - * components. Each plane can reside in a separate memory buffer, or even in - * a completely separate memory node (e.g. in embedded devices). - */ -struct v4l2_plane { - __u32 bytesused; - __u32 length; - union { - __u32 mem_offset; - unsigned long userptr; - } m; - __u32 data_offset; - __u32 reserved[11]; -}; - -/** - * struct v4l2_buffer - video buffer info - * @index: id number of the buffer - * @type: buffer type (type == *_MPLANE for multiplanar buffers) - * @bytesused: number of bytes occupied by data in the buffer (payload); - * unused (set to 0) for multiplanar buffers - * @flags: buffer informational flags - * @field: field order of the image in the buffer - * @timestamp: frame timestamp - * @timecode: frame timecode - * @sequence: sequence count of this frame - * @memory: the method, in which the actual video data is passed - * @offset: for non-multiplanar buffers with memory == V4L2_MEMORY_MMAP; - * offset from the start of the device memory for this plane, - * (or a "cookie" that should be passed to mmap() as offset) - * @userptr: for non-multiplanar buffers with memory == V4L2_MEMORY_USERPTR; - * a userspace pointer pointing to this buffer - * @planes: for multiplanar buffers; userspace pointer to the array of plane - * info structs for this buffer - * @length: size in bytes of the buffer (NOT its payload) for single-plane - * buffers (when type != *_MPLANE); number of elements in the - * planes array for multi-plane buffers - * @input: input number from which the video data has has been captured - * - * Contains data exchanged by application and driver using one of the Streaming - * I/O methods. - */ -struct v4l2_buffer { - __u32 index; - enum v4l2_buf_type type; - __u32 bytesused; - __u32 flags; - enum v4l2_field field; - struct timeval timestamp; - struct v4l2_timecode timecode; - __u32 sequence; - - /* memory location */ - enum v4l2_memory memory; - union { - __u32 offset; - unsigned long userptr; - struct v4l2_plane *planes; - } m; - __u32 length; - __u32 input; - __u32 reserved; -}; - -/* Flags for 'flags' field */ -#define V4L2_BUF_FLAG_MAPPED 0x0001 /* Buffer is mapped (flag) */ -#define V4L2_BUF_FLAG_QUEUED 0x0002 /* Buffer is queued for processing */ -#define V4L2_BUF_FLAG_DONE 0x0004 /* Buffer is ready */ -#define V4L2_BUF_FLAG_KEYFRAME 0x0008 /* Image is a keyframe (I-frame) */ -#define V4L2_BUF_FLAG_PFRAME 0x0010 /* Image is a P-frame */ -#define V4L2_BUF_FLAG_BFRAME 0x0020 /* Image is a B-frame */ -/* Buffer is ready, but the data contained within is corrupted. */ -#define V4L2_BUF_FLAG_ERROR 0x0040 -#define V4L2_BUF_FLAG_TIMECODE 0x0100 /* timecode field is valid */ -#define V4L2_BUF_FLAG_INPUT 0x0200 /* input field is valid */ - -/* - * O V E R L A Y P R E V I E W - */ -struct v4l2_framebuffer { - __u32 capability; - __u32 flags; -/* FIXME: in theory we should pass something like PCI device + memory - * region + offset instead of some physical address */ - void *base; - struct v4l2_pix_format fmt; -}; -/* Flags for the 'capability' field. Read only */ -#define V4L2_FBUF_CAP_EXTERNOVERLAY 0x0001 -#define V4L2_FBUF_CAP_CHROMAKEY 0x0002 -#define V4L2_FBUF_CAP_LIST_CLIPPING 0x0004 -#define V4L2_FBUF_CAP_BITMAP_CLIPPING 0x0008 -#define V4L2_FBUF_CAP_LOCAL_ALPHA 0x0010 -#define V4L2_FBUF_CAP_GLOBAL_ALPHA 0x0020 -#define V4L2_FBUF_CAP_LOCAL_INV_ALPHA 0x0040 -#define V4L2_FBUF_CAP_SRC_CHROMAKEY 0x0080 -/* Flags for the 'flags' field. */ -#define V4L2_FBUF_FLAG_PRIMARY 0x0001 -#define V4L2_FBUF_FLAG_OVERLAY 0x0002 -#define V4L2_FBUF_FLAG_CHROMAKEY 0x0004 -#define V4L2_FBUF_FLAG_LOCAL_ALPHA 0x0008 -#define V4L2_FBUF_FLAG_GLOBAL_ALPHA 0x0010 -#define V4L2_FBUF_FLAG_LOCAL_INV_ALPHA 0x0020 -#define V4L2_FBUF_FLAG_SRC_CHROMAKEY 0x0040 - -struct v4l2_clip { - struct v4l2_rect c; - struct v4l2_clip __user *next; -}; - -struct v4l2_window { - struct v4l2_rect w; - enum v4l2_field field; - __u32 chromakey; - struct v4l2_clip __user *clips; - __u32 clipcount; - void __user *bitmap; - __u8 global_alpha; -}; - -/* - * C A P T U R E P A R A M E T E R S - */ -struct v4l2_captureparm { - __u32 capability; /* Supported modes */ - __u32 capturemode; /* Current mode */ - struct v4l2_fract timeperframe; /* Time per frame in .1us units */ - __u32 extendedmode; /* Driver-specific extensions */ - __u32 readbuffers; /* # of buffers for read */ - __u32 reserved[4]; -}; - -/* Flags for 'capability' and 'capturemode' fields */ -#define V4L2_MODE_HIGHQUALITY 0x0001 /* High quality imaging mode */ -#define V4L2_CAP_TIMEPERFRAME 0x1000 /* timeperframe field is supported */ - -struct v4l2_outputparm { - __u32 capability; /* Supported modes */ - __u32 outputmode; /* Current mode */ - struct v4l2_fract timeperframe; /* Time per frame in seconds */ - __u32 extendedmode; /* Driver-specific extensions */ - __u32 writebuffers; /* # of buffers for write */ - __u32 reserved[4]; -}; - -/* - * I N P U T I M A G E C R O P P I N G - */ -struct v4l2_cropcap { - enum v4l2_buf_type type; - struct v4l2_rect bounds; - struct v4l2_rect defrect; - struct v4l2_fract pixelaspect; -}; - -struct v4l2_crop { - enum v4l2_buf_type type; - struct v4l2_rect c; -}; - -/* - * A N A L O G V I D E O S T A N D A R D - */ - -typedef __u64 v4l2_std_id; - -/* one bit for each */ -#define V4L2_STD_PAL_B ((v4l2_std_id)0x00000001) -#define V4L2_STD_PAL_B1 ((v4l2_std_id)0x00000002) -#define V4L2_STD_PAL_G ((v4l2_std_id)0x00000004) -#define V4L2_STD_PAL_H ((v4l2_std_id)0x00000008) -#define V4L2_STD_PAL_I ((v4l2_std_id)0x00000010) -#define V4L2_STD_PAL_D ((v4l2_std_id)0x00000020) -#define V4L2_STD_PAL_D1 ((v4l2_std_id)0x00000040) -#define V4L2_STD_PAL_K ((v4l2_std_id)0x00000080) - -#define V4L2_STD_PAL_M ((v4l2_std_id)0x00000100) -#define V4L2_STD_PAL_N ((v4l2_std_id)0x00000200) -#define V4L2_STD_PAL_Nc ((v4l2_std_id)0x00000400) -#define V4L2_STD_PAL_60 ((v4l2_std_id)0x00000800) - -#define V4L2_STD_NTSC_M ((v4l2_std_id)0x00001000) -#define V4L2_STD_NTSC_M_JP ((v4l2_std_id)0x00002000) -#define V4L2_STD_NTSC_443 ((v4l2_std_id)0x00004000) -#define V4L2_STD_NTSC_M_KR ((v4l2_std_id)0x00008000) - -#define V4L2_STD_SECAM_B ((v4l2_std_id)0x00010000) -#define V4L2_STD_SECAM_D ((v4l2_std_id)0x00020000) -#define V4L2_STD_SECAM_G ((v4l2_std_id)0x00040000) -#define V4L2_STD_SECAM_H ((v4l2_std_id)0x00080000) -#define V4L2_STD_SECAM_K ((v4l2_std_id)0x00100000) -#define V4L2_STD_SECAM_K1 ((v4l2_std_id)0x00200000) -#define V4L2_STD_SECAM_L ((v4l2_std_id)0x00400000) -#define V4L2_STD_SECAM_LC ((v4l2_std_id)0x00800000) - -/* ATSC/HDTV */ -#define V4L2_STD_ATSC_8_VSB ((v4l2_std_id)0x01000000) -#define V4L2_STD_ATSC_16_VSB ((v4l2_std_id)0x02000000) - -/* FIXME: - Although std_id is 64 bits, there is an issue on PPC32 architecture that - makes switch(__u64) to break. So, there's a hack on v4l2-common.c rounding - this value to 32 bits. - As, currently, the max value is for V4L2_STD_ATSC_16_VSB (30 bits wide), - it should work fine. However, if needed to add more than two standards, - v4l2-common.c should be fixed. - */ - -/* some merged standards */ -#define V4L2_STD_MN (V4L2_STD_PAL_M|V4L2_STD_PAL_N|V4L2_STD_PAL_Nc|V4L2_STD_NTSC) -#define V4L2_STD_B (V4L2_STD_PAL_B|V4L2_STD_PAL_B1|V4L2_STD_SECAM_B) -#define V4L2_STD_GH (V4L2_STD_PAL_G|V4L2_STD_PAL_H|V4L2_STD_SECAM_G|V4L2_STD_SECAM_H) -#define V4L2_STD_DK (V4L2_STD_PAL_DK|V4L2_STD_SECAM_DK) - -/* some common needed stuff */ -#define V4L2_STD_PAL_BG (V4L2_STD_PAL_B |\ - V4L2_STD_PAL_B1 |\ - V4L2_STD_PAL_G) -#define V4L2_STD_PAL_DK (V4L2_STD_PAL_D |\ - V4L2_STD_PAL_D1 |\ - V4L2_STD_PAL_K) -#define V4L2_STD_PAL (V4L2_STD_PAL_BG |\ - V4L2_STD_PAL_DK |\ - V4L2_STD_PAL_H |\ - V4L2_STD_PAL_I) -#define V4L2_STD_NTSC (V4L2_STD_NTSC_M |\ - V4L2_STD_NTSC_M_JP |\ - V4L2_STD_NTSC_M_KR) -#define V4L2_STD_SECAM_DK (V4L2_STD_SECAM_D |\ - V4L2_STD_SECAM_K |\ - V4L2_STD_SECAM_K1) -#define V4L2_STD_SECAM (V4L2_STD_SECAM_B |\ - V4L2_STD_SECAM_G |\ - V4L2_STD_SECAM_H |\ - V4L2_STD_SECAM_DK |\ - V4L2_STD_SECAM_L |\ - V4L2_STD_SECAM_LC) - -#define V4L2_STD_525_60 (V4L2_STD_PAL_M |\ - V4L2_STD_PAL_60 |\ - V4L2_STD_NTSC |\ - V4L2_STD_NTSC_443) -#define V4L2_STD_625_50 (V4L2_STD_PAL |\ - V4L2_STD_PAL_N |\ - V4L2_STD_PAL_Nc |\ - V4L2_STD_SECAM) -#define V4L2_STD_ATSC (V4L2_STD_ATSC_8_VSB |\ - V4L2_STD_ATSC_16_VSB) - -#define V4L2_STD_UNKNOWN 0 -#define V4L2_STD_ALL (V4L2_STD_525_60 |\ - V4L2_STD_625_50) - -struct v4l2_standard { - __u32 index; - v4l2_std_id id; - __u8 name[24]; - struct v4l2_fract frameperiod; /* Frames, not fields */ - __u32 framelines; - __u32 reserved[4]; -}; - -/* - * V I D E O T I M I N G S D V P R E S E T - */ -struct v4l2_dv_preset { - __u32 preset; - __u32 reserved[4]; -}; - -/* - * D V P R E S E T S E N U M E R A T I O N - */ -struct v4l2_dv_enum_preset { - __u32 index; - __u32 preset; - __u8 name[32]; /* Name of the preset timing */ - __u32 width; - __u32 height; - __u32 reserved[4]; -}; - -/* - * D V P R E S E T V A L U E S - */ -#define V4L2_DV_INVALID 0 -#define V4L2_DV_480P59_94 1 /* BT.1362 */ -#define V4L2_DV_576P50 2 /* BT.1362 */ -#define V4L2_DV_720P24 3 /* SMPTE 296M */ -#define V4L2_DV_720P25 4 /* SMPTE 296M */ -#define V4L2_DV_720P30 5 /* SMPTE 296M */ -#define V4L2_DV_720P50 6 /* SMPTE 296M */ -#define V4L2_DV_720P59_94 7 /* SMPTE 274M */ -#define V4L2_DV_720P60 8 /* SMPTE 274M/296M */ -#define V4L2_DV_1080I29_97 9 /* BT.1120/ SMPTE 274M */ -#define V4L2_DV_1080I30 10 /* BT.1120/ SMPTE 274M */ -#define V4L2_DV_1080I25 11 /* BT.1120 */ -#define V4L2_DV_1080I50 12 /* SMPTE 296M */ -#define V4L2_DV_1080I60 13 /* SMPTE 296M */ -#define V4L2_DV_1080P24 14 /* SMPTE 296M */ -#define V4L2_DV_1080P25 15 /* SMPTE 296M */ -#define V4L2_DV_1080P30 16 /* SMPTE 296M */ -#define V4L2_DV_1080P50 17 /* BT.1120 */ -#define V4L2_DV_1080P60 18 /* BT.1120 */ - -/* - * D V B T T I M I N G S - */ - -/* BT.656/BT.1120 timing data */ -struct v4l2_bt_timings { - __u32 width; /* width in pixels */ - __u32 height; /* height in lines */ - __u32 interlaced; /* Interlaced or progressive */ - __u32 polarities; /* Positive or negative polarity */ - __u64 pixelclock; /* Pixel clock in HZ. Ex. 74.25MHz->74250000 */ - __u32 hfrontporch; /* Horizpontal front porch in pixels */ - __u32 hsync; /* Horizontal Sync length in pixels */ - __u32 hbackporch; /* Horizontal back porch in pixels */ - __u32 vfrontporch; /* Vertical front porch in pixels */ - __u32 vsync; /* Vertical Sync length in lines */ - __u32 vbackporch; /* Vertical back porch in lines */ - __u32 il_vfrontporch; /* Vertical front porch for bottom field of - * interlaced field formats - */ - __u32 il_vsync; /* Vertical sync length for bottom field of - * interlaced field formats - */ - __u32 il_vbackporch; /* Vertical back porch for bottom field of - * interlaced field formats - */ - __u32 reserved[16]; -} __attribute__ ((packed)); - -/* Interlaced or progressive format */ -#define V4L2_DV_PROGRESSIVE 0 -#define V4L2_DV_INTERLACED 1 - -/* Polarities. If bit is not set, it is assumed to be negative polarity */ -#define V4L2_DV_VSYNC_POS_POL 0x00000001 -#define V4L2_DV_HSYNC_POS_POL 0x00000002 - - -/* DV timings */ -struct v4l2_dv_timings { - __u32 type; - union { - struct v4l2_bt_timings bt; - __u32 reserved[32]; - }; -} __attribute__ ((packed)); - -/* Values for the type field */ -#define V4L2_DV_BT_656_1120 0 /* BT.656/1120 timing type */ - -/* - * V I D E O I N P U T S - */ -struct v4l2_input { - __u32 index; /* Which input */ - __u8 name[32]; /* Label */ - __u32 type; /* Type of input */ - __u32 audioset; /* Associated audios (bitfield) */ - __u32 tuner; /* Associated tuner */ - v4l2_std_id std; - __u32 status; - __u32 capabilities; - __u32 reserved[3]; -}; - -/* Values for the 'type' field */ -#define V4L2_INPUT_TYPE_TUNER 1 -#define V4L2_INPUT_TYPE_CAMERA 2 - -/* field 'status' - general */ -#define V4L2_IN_ST_NO_POWER 0x00000001 /* Attached device is off */ -#define V4L2_IN_ST_NO_SIGNAL 0x00000002 -#define V4L2_IN_ST_NO_COLOR 0x00000004 - -/* field 'status' - sensor orientation */ -/* If sensor is mounted upside down set both bits */ -#define V4L2_IN_ST_HFLIP 0x00000010 /* Frames are flipped horizontally */ -#define V4L2_IN_ST_VFLIP 0x00000020 /* Frames are flipped vertically */ - -/* field 'status' - analog */ -#define V4L2_IN_ST_NO_H_LOCK 0x00000100 /* No horizontal sync lock */ -#define V4L2_IN_ST_COLOR_KILL 0x00000200 /* Color killer is active */ - -/* field 'status' - digital */ -#define V4L2_IN_ST_NO_SYNC 0x00010000 /* No synchronization lock */ -#define V4L2_IN_ST_NO_EQU 0x00020000 /* No equalizer lock */ -#define V4L2_IN_ST_NO_CARRIER 0x00040000 /* Carrier recovery failed */ - -/* field 'status' - VCR and set-top box */ -#define V4L2_IN_ST_MACROVISION 0x01000000 /* Macrovision detected */ -#define V4L2_IN_ST_NO_ACCESS 0x02000000 /* Conditional access denied */ -#define V4L2_IN_ST_VTR 0x04000000 /* VTR time constant */ - -/* capabilities flags */ -#define V4L2_IN_CAP_PRESETS 0x00000001 /* Supports S_DV_PRESET */ -#define V4L2_IN_CAP_CUSTOM_TIMINGS 0x00000002 /* Supports S_DV_TIMINGS */ -#define V4L2_IN_CAP_STD 0x00000004 /* Supports S_STD */ - -/* - * V I D E O O U T P U T S - */ -struct v4l2_output { - __u32 index; /* Which output */ - __u8 name[32]; /* Label */ - __u32 type; /* Type of output */ - __u32 audioset; /* Associated audios (bitfield) */ - __u32 modulator; /* Associated modulator */ - v4l2_std_id std; - __u32 capabilities; - __u32 reserved[3]; -}; -/* Values for the 'type' field */ -#define V4L2_OUTPUT_TYPE_MODULATOR 1 -#define V4L2_OUTPUT_TYPE_ANALOG 2 -#define V4L2_OUTPUT_TYPE_ANALOGVGAOVERLAY 3 - -/* capabilities flags */ -#define V4L2_OUT_CAP_PRESETS 0x00000001 /* Supports S_DV_PRESET */ -#define V4L2_OUT_CAP_CUSTOM_TIMINGS 0x00000002 /* Supports S_DV_TIMINGS */ -#define V4L2_OUT_CAP_STD 0x00000004 /* Supports S_STD */ - -/* - * C O N T R O L S - */ -struct v4l2_control { - __u32 id; - __s32 value; -}; - -struct v4l2_ext_control { - __u32 id; - __u32 size; - __u32 reserved2[1]; - union { - __s32 value; - __s64 value64; - char *string; - }; -} __attribute__ ((packed)); - -struct v4l2_ext_controls { - __u32 ctrl_class; - __u32 count; - __u32 error_idx; - __u32 reserved[2]; - struct v4l2_ext_control *controls; -}; - -/* Values for ctrl_class field */ -#define V4L2_CTRL_CLASS_USER 0x00980000 /* Old-style 'user' controls */ -#define V4L2_CTRL_CLASS_MPEG 0x00990000 /* MPEG-compression controls */ -#define V4L2_CTRL_CLASS_CAMERA 0x009a0000 /* Camera class controls */ -#define V4L2_CTRL_CLASS_FM_TX 0x009b0000 /* FM Modulator control class */ - -#define V4L2_CTRL_ID_MASK (0x0fffffff) -#define V4L2_CTRL_ID2CLASS(id) ((id) & 0x0fff0000UL) -#define V4L2_CTRL_DRIVER_PRIV(id) (((id) & 0xffff) >= 0x1000) - -enum v4l2_ctrl_type { - V4L2_CTRL_TYPE_INTEGER = 1, - V4L2_CTRL_TYPE_BOOLEAN = 2, - V4L2_CTRL_TYPE_MENU = 3, - V4L2_CTRL_TYPE_BUTTON = 4, - V4L2_CTRL_TYPE_INTEGER64 = 5, - V4L2_CTRL_TYPE_CTRL_CLASS = 6, - V4L2_CTRL_TYPE_STRING = 7, -}; - -/* Used in the VIDIOC_QUERYCTRL ioctl for querying controls */ -struct v4l2_queryctrl { - __u32 id; - enum v4l2_ctrl_type type; - __u8 name[32]; /* Whatever */ - __s32 minimum; /* Note signedness */ - __s32 maximum; - __s32 step; - __s32 default_value; - __u32 flags; - __u32 reserved[2]; -}; - -/* Used in the VIDIOC_QUERYMENU ioctl for querying menu items */ -struct v4l2_querymenu { - __u32 id; - __u32 index; - __u8 name[32]; /* Whatever */ - __u32 reserved; -}; - -/* Control flags */ -#define V4L2_CTRL_FLAG_DISABLED 0x0001 -#define V4L2_CTRL_FLAG_GRABBED 0x0002 -#define V4L2_CTRL_FLAG_READ_ONLY 0x0004 -#define V4L2_CTRL_FLAG_UPDATE 0x0008 -#define V4L2_CTRL_FLAG_INACTIVE 0x0010 -#define V4L2_CTRL_FLAG_SLIDER 0x0020 -#define V4L2_CTRL_FLAG_WRITE_ONLY 0x0040 - -/* Query flag, to be ORed with the control ID */ -#define V4L2_CTRL_FLAG_NEXT_CTRL 0x80000000 - -/* User-class control IDs defined by V4L2 */ -#define V4L2_CID_BASE (V4L2_CTRL_CLASS_USER | 0x900) -#define V4L2_CID_USER_BASE V4L2_CID_BASE -/* IDs reserved for driver specific controls */ -#define V4L2_CID_PRIVATE_BASE 0x08000000 - -#define V4L2_CID_USER_CLASS (V4L2_CTRL_CLASS_USER | 1) -#define V4L2_CID_BRIGHTNESS (V4L2_CID_BASE+0) -#define V4L2_CID_CONTRAST (V4L2_CID_BASE+1) -#define V4L2_CID_SATURATION (V4L2_CID_BASE+2) -#define V4L2_CID_HUE (V4L2_CID_BASE+3) -#define V4L2_CID_AUDIO_VOLUME (V4L2_CID_BASE+5) -#define V4L2_CID_AUDIO_BALANCE (V4L2_CID_BASE+6) -#define V4L2_CID_AUDIO_BASS (V4L2_CID_BASE+7) -#define V4L2_CID_AUDIO_TREBLE (V4L2_CID_BASE+8) -#define V4L2_CID_AUDIO_MUTE (V4L2_CID_BASE+9) -#define V4L2_CID_AUDIO_LOUDNESS (V4L2_CID_BASE+10) -#define V4L2_CID_BLACK_LEVEL (V4L2_CID_BASE+11) /* Deprecated */ -#define V4L2_CID_AUTO_WHITE_BALANCE (V4L2_CID_BASE+12) -#define V4L2_CID_DO_WHITE_BALANCE (V4L2_CID_BASE+13) -#define V4L2_CID_RED_BALANCE (V4L2_CID_BASE+14) -#define V4L2_CID_BLUE_BALANCE (V4L2_CID_BASE+15) -#define V4L2_CID_GAMMA (V4L2_CID_BASE+16) -#define V4L2_CID_WHITENESS (V4L2_CID_GAMMA) /* Deprecated */ -#define V4L2_CID_EXPOSURE (V4L2_CID_BASE+17) -#define V4L2_CID_AUTOGAIN (V4L2_CID_BASE+18) -#define V4L2_CID_GAIN (V4L2_CID_BASE+19) -#define V4L2_CID_HFLIP (V4L2_CID_BASE+20) -#define V4L2_CID_VFLIP (V4L2_CID_BASE+21) - -/* Deprecated; use V4L2_CID_PAN_RESET and V4L2_CID_TILT_RESET */ -#define V4L2_CID_HCENTER (V4L2_CID_BASE+22) -#define V4L2_CID_VCENTER (V4L2_CID_BASE+23) - -#define V4L2_CID_POWER_LINE_FREQUENCY (V4L2_CID_BASE+24) -enum v4l2_power_line_frequency { - V4L2_CID_POWER_LINE_FREQUENCY_DISABLED = 0, - V4L2_CID_POWER_LINE_FREQUENCY_50HZ = 1, - V4L2_CID_POWER_LINE_FREQUENCY_60HZ = 2, -}; -#define V4L2_CID_HUE_AUTO (V4L2_CID_BASE+25) -#define V4L2_CID_WHITE_BALANCE_TEMPERATURE (V4L2_CID_BASE+26) -#define V4L2_CID_SHARPNESS (V4L2_CID_BASE+27) -#define V4L2_CID_BACKLIGHT_COMPENSATION (V4L2_CID_BASE+28) -#define V4L2_CID_CHROMA_AGC (V4L2_CID_BASE+29) -#define V4L2_CID_COLOR_KILLER (V4L2_CID_BASE+30) -#define V4L2_CID_COLORFX (V4L2_CID_BASE+31) -enum v4l2_colorfx { - V4L2_COLORFX_NONE = 0, - V4L2_COLORFX_BW = 1, - V4L2_COLORFX_SEPIA = 2, - V4L2_COLORFX_NEGATIVE = 3, - V4L2_COLORFX_EMBOSS = 4, - V4L2_COLORFX_SKETCH = 5, - V4L2_COLORFX_SKY_BLUE = 6, - V4L2_COLORFX_GRASS_GREEN = 7, - V4L2_COLORFX_SKIN_WHITEN = 8, - V4L2_COLORFX_VIVID = 9, -}; -#define V4L2_CID_AUTOBRIGHTNESS (V4L2_CID_BASE+32) -#define V4L2_CID_BAND_STOP_FILTER (V4L2_CID_BASE+33) - -#define V4L2_CID_ROTATE (V4L2_CID_BASE+34) -#define V4L2_CID_BG_COLOR (V4L2_CID_BASE+35) - -#define V4L2_CID_CHROMA_GAIN (V4L2_CID_BASE+36) - -#define V4L2_CID_ILLUMINATORS_1 (V4L2_CID_BASE+37) -#define V4L2_CID_ILLUMINATORS_2 (V4L2_CID_BASE+38) - -/* last CID + 1 */ -#define V4L2_CID_LASTP1 (V4L2_CID_BASE+39) - -/* MPEG-class control IDs defined by V4L2 */ -#define V4L2_CID_MPEG_BASE (V4L2_CTRL_CLASS_MPEG | 0x900) -#define V4L2_CID_MPEG_CLASS (V4L2_CTRL_CLASS_MPEG | 1) - -/* MPEG streams */ -#define V4L2_CID_MPEG_STREAM_TYPE (V4L2_CID_MPEG_BASE+0) -enum v4l2_mpeg_stream_type { - V4L2_MPEG_STREAM_TYPE_MPEG2_PS = 0, /* MPEG-2 program stream */ - V4L2_MPEG_STREAM_TYPE_MPEG2_TS = 1, /* MPEG-2 transport stream */ - V4L2_MPEG_STREAM_TYPE_MPEG1_SS = 2, /* MPEG-1 system stream */ - V4L2_MPEG_STREAM_TYPE_MPEG2_DVD = 3, /* MPEG-2 DVD-compatible stream */ - V4L2_MPEG_STREAM_TYPE_MPEG1_VCD = 4, /* MPEG-1 VCD-compatible stream */ - V4L2_MPEG_STREAM_TYPE_MPEG2_SVCD = 5, /* MPEG-2 SVCD-compatible stream */ -}; -#define V4L2_CID_MPEG_STREAM_PID_PMT (V4L2_CID_MPEG_BASE+1) -#define V4L2_CID_MPEG_STREAM_PID_AUDIO (V4L2_CID_MPEG_BASE+2) -#define V4L2_CID_MPEG_STREAM_PID_VIDEO (V4L2_CID_MPEG_BASE+3) -#define V4L2_CID_MPEG_STREAM_PID_PCR (V4L2_CID_MPEG_BASE+4) -#define V4L2_CID_MPEG_STREAM_PES_ID_AUDIO (V4L2_CID_MPEG_BASE+5) -#define V4L2_CID_MPEG_STREAM_PES_ID_VIDEO (V4L2_CID_MPEG_BASE+6) -#define V4L2_CID_MPEG_STREAM_VBI_FMT (V4L2_CID_MPEG_BASE+7) -enum v4l2_mpeg_stream_vbi_fmt { - V4L2_MPEG_STREAM_VBI_FMT_NONE = 0, /* No VBI in the MPEG stream */ - V4L2_MPEG_STREAM_VBI_FMT_IVTV = 1, /* VBI in private packets, IVTV format */ -}; - -/* MPEG audio */ -#define V4L2_CID_MPEG_AUDIO_SAMPLING_FREQ (V4L2_CID_MPEG_BASE+100) -enum v4l2_mpeg_audio_sampling_freq { - V4L2_MPEG_AUDIO_SAMPLING_FREQ_44100 = 0, - V4L2_MPEG_AUDIO_SAMPLING_FREQ_48000 = 1, - V4L2_MPEG_AUDIO_SAMPLING_FREQ_32000 = 2, -}; -#define V4L2_CID_MPEG_AUDIO_ENCODING (V4L2_CID_MPEG_BASE+101) -enum v4l2_mpeg_audio_encoding { - V4L2_MPEG_AUDIO_ENCODING_LAYER_1 = 0, - V4L2_MPEG_AUDIO_ENCODING_LAYER_2 = 1, - V4L2_MPEG_AUDIO_ENCODING_LAYER_3 = 2, - V4L2_MPEG_AUDIO_ENCODING_AAC = 3, - V4L2_MPEG_AUDIO_ENCODING_AC3 = 4, -}; -#define V4L2_CID_MPEG_AUDIO_L1_BITRATE (V4L2_CID_MPEG_BASE+102) -enum v4l2_mpeg_audio_l1_bitrate { - V4L2_MPEG_AUDIO_L1_BITRATE_32K = 0, - V4L2_MPEG_AUDIO_L1_BITRATE_64K = 1, - V4L2_MPEG_AUDIO_L1_BITRATE_96K = 2, - V4L2_MPEG_AUDIO_L1_BITRATE_128K = 3, - V4L2_MPEG_AUDIO_L1_BITRATE_160K = 4, - V4L2_MPEG_AUDIO_L1_BITRATE_192K = 5, - V4L2_MPEG_AUDIO_L1_BITRATE_224K = 6, - V4L2_MPEG_AUDIO_L1_BITRATE_256K = 7, - V4L2_MPEG_AUDIO_L1_BITRATE_288K = 8, - V4L2_MPEG_AUDIO_L1_BITRATE_320K = 9, - V4L2_MPEG_AUDIO_L1_BITRATE_352K = 10, - V4L2_MPEG_AUDIO_L1_BITRATE_384K = 11, - V4L2_MPEG_AUDIO_L1_BITRATE_416K = 12, - V4L2_MPEG_AUDIO_L1_BITRATE_448K = 13, -}; -#define V4L2_CID_MPEG_AUDIO_L2_BITRATE (V4L2_CID_MPEG_BASE+103) -enum v4l2_mpeg_audio_l2_bitrate { - V4L2_MPEG_AUDIO_L2_BITRATE_32K = 0, - V4L2_MPEG_AUDIO_L2_BITRATE_48K = 1, - V4L2_MPEG_AUDIO_L2_BITRATE_56K = 2, - V4L2_MPEG_AUDIO_L2_BITRATE_64K = 3, - V4L2_MPEG_AUDIO_L2_BITRATE_80K = 4, - V4L2_MPEG_AUDIO_L2_BITRATE_96K = 5, - V4L2_MPEG_AUDIO_L2_BITRATE_112K = 6, - V4L2_MPEG_AUDIO_L2_BITRATE_128K = 7, - V4L2_MPEG_AUDIO_L2_BITRATE_160K = 8, - V4L2_MPEG_AUDIO_L2_BITRATE_192K = 9, - V4L2_MPEG_AUDIO_L2_BITRATE_224K = 10, - V4L2_MPEG_AUDIO_L2_BITRATE_256K = 11, - V4L2_MPEG_AUDIO_L2_BITRATE_320K = 12, - V4L2_MPEG_AUDIO_L2_BITRATE_384K = 13, -}; -#define V4L2_CID_MPEG_AUDIO_L3_BITRATE (V4L2_CID_MPEG_BASE+104) -enum v4l2_mpeg_audio_l3_bitrate { - V4L2_MPEG_AUDIO_L3_BITRATE_32K = 0, - V4L2_MPEG_AUDIO_L3_BITRATE_40K = 1, - V4L2_MPEG_AUDIO_L3_BITRATE_48K = 2, - V4L2_MPEG_AUDIO_L3_BITRATE_56K = 3, - V4L2_MPEG_AUDIO_L3_BITRATE_64K = 4, - V4L2_MPEG_AUDIO_L3_BITRATE_80K = 5, - V4L2_MPEG_AUDIO_L3_BITRATE_96K = 6, - V4L2_MPEG_AUDIO_L3_BITRATE_112K = 7, - V4L2_MPEG_AUDIO_L3_BITRATE_128K = 8, - V4L2_MPEG_AUDIO_L3_BITRATE_160K = 9, - V4L2_MPEG_AUDIO_L3_BITRATE_192K = 10, - V4L2_MPEG_AUDIO_L3_BITRATE_224K = 11, - V4L2_MPEG_AUDIO_L3_BITRATE_256K = 12, - V4L2_MPEG_AUDIO_L3_BITRATE_320K = 13, -}; -#define V4L2_CID_MPEG_AUDIO_MODE (V4L2_CID_MPEG_BASE+105) -enum v4l2_mpeg_audio_mode { - V4L2_MPEG_AUDIO_MODE_STEREO = 0, - V4L2_MPEG_AUDIO_MODE_JOINT_STEREO = 1, - V4L2_MPEG_AUDIO_MODE_DUAL = 2, - V4L2_MPEG_AUDIO_MODE_MONO = 3, -}; -#define V4L2_CID_MPEG_AUDIO_MODE_EXTENSION (V4L2_CID_MPEG_BASE+106) -enum v4l2_mpeg_audio_mode_extension { - V4L2_MPEG_AUDIO_MODE_EXTENSION_BOUND_4 = 0, - V4L2_MPEG_AUDIO_MODE_EXTENSION_BOUND_8 = 1, - V4L2_MPEG_AUDIO_MODE_EXTENSION_BOUND_12 = 2, - V4L2_MPEG_AUDIO_MODE_EXTENSION_BOUND_16 = 3, -}; -#define V4L2_CID_MPEG_AUDIO_EMPHASIS (V4L2_CID_MPEG_BASE+107) -enum v4l2_mpeg_audio_emphasis { - V4L2_MPEG_AUDIO_EMPHASIS_NONE = 0, - V4L2_MPEG_AUDIO_EMPHASIS_50_DIV_15_uS = 1, - V4L2_MPEG_AUDIO_EMPHASIS_CCITT_J17 = 2, -}; -#define V4L2_CID_MPEG_AUDIO_CRC (V4L2_CID_MPEG_BASE+108) -enum v4l2_mpeg_audio_crc { - V4L2_MPEG_AUDIO_CRC_NONE = 0, - V4L2_MPEG_AUDIO_CRC_CRC16 = 1, -}; -#define V4L2_CID_MPEG_AUDIO_MUTE (V4L2_CID_MPEG_BASE+109) -#define V4L2_CID_MPEG_AUDIO_AAC_BITRATE (V4L2_CID_MPEG_BASE+110) -#define V4L2_CID_MPEG_AUDIO_AC3_BITRATE (V4L2_CID_MPEG_BASE+111) -enum v4l2_mpeg_audio_ac3_bitrate { - V4L2_MPEG_AUDIO_AC3_BITRATE_32K = 0, - V4L2_MPEG_AUDIO_AC3_BITRATE_40K = 1, - V4L2_MPEG_AUDIO_AC3_BITRATE_48K = 2, - V4L2_MPEG_AUDIO_AC3_BITRATE_56K = 3, - V4L2_MPEG_AUDIO_AC3_BITRATE_64K = 4, - V4L2_MPEG_AUDIO_AC3_BITRATE_80K = 5, - V4L2_MPEG_AUDIO_AC3_BITRATE_96K = 6, - V4L2_MPEG_AUDIO_AC3_BITRATE_112K = 7, - V4L2_MPEG_AUDIO_AC3_BITRATE_128K = 8, - V4L2_MPEG_AUDIO_AC3_BITRATE_160K = 9, - V4L2_MPEG_AUDIO_AC3_BITRATE_192K = 10, - V4L2_MPEG_AUDIO_AC3_BITRATE_224K = 11, - V4L2_MPEG_AUDIO_AC3_BITRATE_256K = 12, - V4L2_MPEG_AUDIO_AC3_BITRATE_320K = 13, - V4L2_MPEG_AUDIO_AC3_BITRATE_384K = 14, - V4L2_MPEG_AUDIO_AC3_BITRATE_448K = 15, - V4L2_MPEG_AUDIO_AC3_BITRATE_512K = 16, - V4L2_MPEG_AUDIO_AC3_BITRATE_576K = 17, - V4L2_MPEG_AUDIO_AC3_BITRATE_640K = 18, -}; - -/* MPEG video */ -#define V4L2_CID_MPEG_VIDEO_ENCODING (V4L2_CID_MPEG_BASE+200) -enum v4l2_mpeg_video_encoding { - V4L2_MPEG_VIDEO_ENCODING_MPEG_1 = 0, - V4L2_MPEG_VIDEO_ENCODING_MPEG_2 = 1, - V4L2_MPEG_VIDEO_ENCODING_MPEG_4_AVC = 2, -}; -#define V4L2_CID_MPEG_VIDEO_ASPECT (V4L2_CID_MPEG_BASE+201) -enum v4l2_mpeg_video_aspect { - V4L2_MPEG_VIDEO_ASPECT_1x1 = 0, - V4L2_MPEG_VIDEO_ASPECT_4x3 = 1, - V4L2_MPEG_VIDEO_ASPECT_16x9 = 2, - V4L2_MPEG_VIDEO_ASPECT_221x100 = 3, -}; -#define V4L2_CID_MPEG_VIDEO_B_FRAMES (V4L2_CID_MPEG_BASE+202) -#define V4L2_CID_MPEG_VIDEO_GOP_SIZE (V4L2_CID_MPEG_BASE+203) -#define V4L2_CID_MPEG_VIDEO_GOP_CLOSURE (V4L2_CID_MPEG_BASE+204) -#define V4L2_CID_MPEG_VIDEO_PULLDOWN (V4L2_CID_MPEG_BASE+205) -#define V4L2_CID_MPEG_VIDEO_BITRATE_MODE (V4L2_CID_MPEG_BASE+206) -enum v4l2_mpeg_video_bitrate_mode { - V4L2_MPEG_VIDEO_BITRATE_MODE_VBR = 0, - V4L2_MPEG_VIDEO_BITRATE_MODE_CBR = 1, -}; -#define V4L2_CID_MPEG_VIDEO_BITRATE (V4L2_CID_MPEG_BASE+207) -#define V4L2_CID_MPEG_VIDEO_BITRATE_PEAK (V4L2_CID_MPEG_BASE+208) -#define V4L2_CID_MPEG_VIDEO_TEMPORAL_DECIMATION (V4L2_CID_MPEG_BASE+209) -#define V4L2_CID_MPEG_VIDEO_MUTE (V4L2_CID_MPEG_BASE+210) -#define V4L2_CID_MPEG_VIDEO_MUTE_YUV (V4L2_CID_MPEG_BASE+211) - -/* MPEG-class control IDs specific to the CX2341x driver as defined by V4L2 */ -#define V4L2_CID_MPEG_CX2341X_BASE (V4L2_CTRL_CLASS_MPEG | 0x1000) -#define V4L2_CID_MPEG_CX2341X_VIDEO_SPATIAL_FILTER_MODE (V4L2_CID_MPEG_CX2341X_BASE+0) -enum v4l2_mpeg_cx2341x_video_spatial_filter_mode { - V4L2_MPEG_CX2341X_VIDEO_SPATIAL_FILTER_MODE_MANUAL = 0, - V4L2_MPEG_CX2341X_VIDEO_SPATIAL_FILTER_MODE_AUTO = 1, -}; -#define V4L2_CID_MPEG_CX2341X_VIDEO_SPATIAL_FILTER (V4L2_CID_MPEG_CX2341X_BASE+1) -#define V4L2_CID_MPEG_CX2341X_VIDEO_LUMA_SPATIAL_FILTER_TYPE (V4L2_CID_MPEG_CX2341X_BASE+2) -enum v4l2_mpeg_cx2341x_video_luma_spatial_filter_type { - V4L2_MPEG_CX2341X_VIDEO_LUMA_SPATIAL_FILTER_TYPE_OFF = 0, - V4L2_MPEG_CX2341X_VIDEO_LUMA_SPATIAL_FILTER_TYPE_1D_HOR = 1, - V4L2_MPEG_CX2341X_VIDEO_LUMA_SPATIAL_FILTER_TYPE_1D_VERT = 2, - V4L2_MPEG_CX2341X_VIDEO_LUMA_SPATIAL_FILTER_TYPE_2D_HV_SEPARABLE = 3, - V4L2_MPEG_CX2341X_VIDEO_LUMA_SPATIAL_FILTER_TYPE_2D_SYM_NON_SEPARABLE = 4, -}; -#define V4L2_CID_MPEG_CX2341X_VIDEO_CHROMA_SPATIAL_FILTER_TYPE (V4L2_CID_MPEG_CX2341X_BASE+3) -enum v4l2_mpeg_cx2341x_video_chroma_spatial_filter_type { - V4L2_MPEG_CX2341X_VIDEO_CHROMA_SPATIAL_FILTER_TYPE_OFF = 0, - V4L2_MPEG_CX2341X_VIDEO_CHROMA_SPATIAL_FILTER_TYPE_1D_HOR = 1, -}; -#define V4L2_CID_MPEG_CX2341X_VIDEO_TEMPORAL_FILTER_MODE (V4L2_CID_MPEG_CX2341X_BASE+4) -enum v4l2_mpeg_cx2341x_video_temporal_filter_mode { - V4L2_MPEG_CX2341X_VIDEO_TEMPORAL_FILTER_MODE_MANUAL = 0, - V4L2_MPEG_CX2341X_VIDEO_TEMPORAL_FILTER_MODE_AUTO = 1, -}; -#define V4L2_CID_MPEG_CX2341X_VIDEO_TEMPORAL_FILTER (V4L2_CID_MPEG_CX2341X_BASE+5) -#define V4L2_CID_MPEG_CX2341X_VIDEO_MEDIAN_FILTER_TYPE (V4L2_CID_MPEG_CX2341X_BASE+6) -enum v4l2_mpeg_cx2341x_video_median_filter_type { - V4L2_MPEG_CX2341X_VIDEO_MEDIAN_FILTER_TYPE_OFF = 0, - V4L2_MPEG_CX2341X_VIDEO_MEDIAN_FILTER_TYPE_HOR = 1, - V4L2_MPEG_CX2341X_VIDEO_MEDIAN_FILTER_TYPE_VERT = 2, - V4L2_MPEG_CX2341X_VIDEO_MEDIAN_FILTER_TYPE_HOR_VERT = 3, - V4L2_MPEG_CX2341X_VIDEO_MEDIAN_FILTER_TYPE_DIAG = 4, -}; -#define V4L2_CID_MPEG_CX2341X_VIDEO_LUMA_MEDIAN_FILTER_BOTTOM (V4L2_CID_MPEG_CX2341X_BASE+7) -#define V4L2_CID_MPEG_CX2341X_VIDEO_LUMA_MEDIAN_FILTER_TOP (V4L2_CID_MPEG_CX2341X_BASE+8) -#define V4L2_CID_MPEG_CX2341X_VIDEO_CHROMA_MEDIAN_FILTER_BOTTOM (V4L2_CID_MPEG_CX2341X_BASE+9) -#define V4L2_CID_MPEG_CX2341X_VIDEO_CHROMA_MEDIAN_FILTER_TOP (V4L2_CID_MPEG_CX2341X_BASE+10) -#define V4L2_CID_MPEG_CX2341X_STREAM_INSERT_NAV_PACKETS (V4L2_CID_MPEG_CX2341X_BASE+11) - -/* Camera class control IDs */ -#define V4L2_CID_CAMERA_CLASS_BASE (V4L2_CTRL_CLASS_CAMERA | 0x900) -#define V4L2_CID_CAMERA_CLASS (V4L2_CTRL_CLASS_CAMERA | 1) - -#define V4L2_CID_EXPOSURE_AUTO (V4L2_CID_CAMERA_CLASS_BASE+1) -enum v4l2_exposure_auto_type { - V4L2_EXPOSURE_AUTO = 0, - V4L2_EXPOSURE_MANUAL = 1, - V4L2_EXPOSURE_SHUTTER_PRIORITY = 2, - V4L2_EXPOSURE_APERTURE_PRIORITY = 3 -}; -#define V4L2_CID_EXPOSURE_ABSOLUTE (V4L2_CID_CAMERA_CLASS_BASE+2) -#define V4L2_CID_EXPOSURE_AUTO_PRIORITY (V4L2_CID_CAMERA_CLASS_BASE+3) - -#define V4L2_CID_PAN_RELATIVE (V4L2_CID_CAMERA_CLASS_BASE+4) -#define V4L2_CID_TILT_RELATIVE (V4L2_CID_CAMERA_CLASS_BASE+5) -#define V4L2_CID_PAN_RESET (V4L2_CID_CAMERA_CLASS_BASE+6) -#define V4L2_CID_TILT_RESET (V4L2_CID_CAMERA_CLASS_BASE+7) - -#define V4L2_CID_PAN_ABSOLUTE (V4L2_CID_CAMERA_CLASS_BASE+8) -#define V4L2_CID_TILT_ABSOLUTE (V4L2_CID_CAMERA_CLASS_BASE+9) - -#define V4L2_CID_FOCUS_ABSOLUTE (V4L2_CID_CAMERA_CLASS_BASE+10) -#define V4L2_CID_FOCUS_RELATIVE (V4L2_CID_CAMERA_CLASS_BASE+11) -#define V4L2_CID_FOCUS_AUTO (V4L2_CID_CAMERA_CLASS_BASE+12) - -#define V4L2_CID_ZOOM_ABSOLUTE (V4L2_CID_CAMERA_CLASS_BASE+13) -#define V4L2_CID_ZOOM_RELATIVE (V4L2_CID_CAMERA_CLASS_BASE+14) -#define V4L2_CID_ZOOM_CONTINUOUS (V4L2_CID_CAMERA_CLASS_BASE+15) - -#define V4L2_CID_PRIVACY (V4L2_CID_CAMERA_CLASS_BASE+16) - -#define V4L2_CID_IRIS_ABSOLUTE (V4L2_CID_CAMERA_CLASS_BASE+17) -#define V4L2_CID_IRIS_RELATIVE (V4L2_CID_CAMERA_CLASS_BASE+18) - -/* FM Modulator class control IDs */ -#define V4L2_CID_FM_TX_CLASS_BASE (V4L2_CTRL_CLASS_FM_TX | 0x900) -#define V4L2_CID_FM_TX_CLASS (V4L2_CTRL_CLASS_FM_TX | 1) - -#define V4L2_CID_RDS_TX_DEVIATION (V4L2_CID_FM_TX_CLASS_BASE + 1) -#define V4L2_CID_RDS_TX_PI (V4L2_CID_FM_TX_CLASS_BASE + 2) -#define V4L2_CID_RDS_TX_PTY (V4L2_CID_FM_TX_CLASS_BASE + 3) -#define V4L2_CID_RDS_TX_PS_NAME (V4L2_CID_FM_TX_CLASS_BASE + 5) -#define V4L2_CID_RDS_TX_RADIO_TEXT (V4L2_CID_FM_TX_CLASS_BASE + 6) - -#define V4L2_CID_AUDIO_LIMITER_ENABLED (V4L2_CID_FM_TX_CLASS_BASE + 64) -#define V4L2_CID_AUDIO_LIMITER_RELEASE_TIME (V4L2_CID_FM_TX_CLASS_BASE + 65) -#define V4L2_CID_AUDIO_LIMITER_DEVIATION (V4L2_CID_FM_TX_CLASS_BASE + 66) - -#define V4L2_CID_AUDIO_COMPRESSION_ENABLED (V4L2_CID_FM_TX_CLASS_BASE + 80) -#define V4L2_CID_AUDIO_COMPRESSION_GAIN (V4L2_CID_FM_TX_CLASS_BASE + 81) -#define V4L2_CID_AUDIO_COMPRESSION_THRESHOLD (V4L2_CID_FM_TX_CLASS_BASE + 82) -#define V4L2_CID_AUDIO_COMPRESSION_ATTACK_TIME (V4L2_CID_FM_TX_CLASS_BASE + 83) -#define V4L2_CID_AUDIO_COMPRESSION_RELEASE_TIME (V4L2_CID_FM_TX_CLASS_BASE + 84) - -#define V4L2_CID_PILOT_TONE_ENABLED (V4L2_CID_FM_TX_CLASS_BASE + 96) -#define V4L2_CID_PILOT_TONE_DEVIATION (V4L2_CID_FM_TX_CLASS_BASE + 97) -#define V4L2_CID_PILOT_TONE_FREQUENCY (V4L2_CID_FM_TX_CLASS_BASE + 98) - -#define V4L2_CID_TUNE_PREEMPHASIS (V4L2_CID_FM_TX_CLASS_BASE + 112) -enum v4l2_preemphasis { - V4L2_PREEMPHASIS_DISABLED = 0, - V4L2_PREEMPHASIS_50_uS = 1, - V4L2_PREEMPHASIS_75_uS = 2, -}; -#define V4L2_CID_TUNE_POWER_LEVEL (V4L2_CID_FM_TX_CLASS_BASE + 113) -#define V4L2_CID_TUNE_ANTENNA_CAPACITOR (V4L2_CID_FM_TX_CLASS_BASE + 114) - -/* - * T U N I N G - */ -struct v4l2_tuner { - __u32 index; - __u8 name[32]; - enum v4l2_tuner_type type; - __u32 capability; - __u32 rangelow; - __u32 rangehigh; - __u32 rxsubchans; - __u32 audmode; - __s32 signal; - __s32 afc; - __u32 reserved[4]; -}; - -struct v4l2_modulator { - __u32 index; - __u8 name[32]; - __u32 capability; - __u32 rangelow; - __u32 rangehigh; - __u32 txsubchans; - __u32 reserved[4]; -}; - -/* Flags for the 'capability' field */ -#define V4L2_TUNER_CAP_LOW 0x0001 -#define V4L2_TUNER_CAP_NORM 0x0002 -#define V4L2_TUNER_CAP_STEREO 0x0010 -#define V4L2_TUNER_CAP_LANG2 0x0020 -#define V4L2_TUNER_CAP_SAP 0x0020 -#define V4L2_TUNER_CAP_LANG1 0x0040 -#define V4L2_TUNER_CAP_RDS 0x0080 -#define V4L2_TUNER_CAP_RDS_BLOCK_IO 0x0100 -#define V4L2_TUNER_CAP_RDS_CONTROLS 0x0200 - -/* Flags for the 'rxsubchans' field */ -#define V4L2_TUNER_SUB_MONO 0x0001 -#define V4L2_TUNER_SUB_STEREO 0x0002 -#define V4L2_TUNER_SUB_LANG2 0x0004 -#define V4L2_TUNER_SUB_SAP 0x0004 -#define V4L2_TUNER_SUB_LANG1 0x0008 -#define V4L2_TUNER_SUB_RDS 0x0010 - -/* Values for the 'audmode' field */ -#define V4L2_TUNER_MODE_MONO 0x0000 -#define V4L2_TUNER_MODE_STEREO 0x0001 -#define V4L2_TUNER_MODE_LANG2 0x0002 -#define V4L2_TUNER_MODE_SAP 0x0002 -#define V4L2_TUNER_MODE_LANG1 0x0003 -#define V4L2_TUNER_MODE_LANG1_LANG2 0x0004 - -struct v4l2_frequency { - __u32 tuner; - enum v4l2_tuner_type type; - __u32 frequency; - __u32 reserved[8]; -}; - -struct v4l2_hw_freq_seek { - __u32 tuner; - enum v4l2_tuner_type type; - __u32 seek_upward; - __u32 wrap_around; - __u32 spacing; - __u32 reserved[7]; -}; - -/* - * R D S - */ - -struct v4l2_rds_data { - __u8 lsb; - __u8 msb; - __u8 block; -} __attribute__ ((packed)); - -#define V4L2_RDS_BLOCK_MSK 0x7 -#define V4L2_RDS_BLOCK_A 0 -#define V4L2_RDS_BLOCK_B 1 -#define V4L2_RDS_BLOCK_C 2 -#define V4L2_RDS_BLOCK_D 3 -#define V4L2_RDS_BLOCK_C_ALT 4 -#define V4L2_RDS_BLOCK_INVALID 7 - -#define V4L2_RDS_BLOCK_CORRECTED 0x40 -#define V4L2_RDS_BLOCK_ERROR 0x80 - -/* - * A U D I O - */ -struct v4l2_audio { - __u32 index; - __u8 name[32]; - __u32 capability; - __u32 mode; - __u32 reserved[2]; -}; - -/* Flags for the 'capability' field */ -#define V4L2_AUDCAP_STEREO 0x00001 -#define V4L2_AUDCAP_AVL 0x00002 - -/* Flags for the 'mode' field */ -#define V4L2_AUDMODE_AVL 0x00001 - -struct v4l2_audioout { - __u32 index; - __u8 name[32]; - __u32 capability; - __u32 mode; - __u32 reserved[2]; -}; - -/* - * M P E G S E R V I C E S - * - * NOTE: EXPERIMENTAL API - */ -#if 1 -#define V4L2_ENC_IDX_FRAME_I (0) -#define V4L2_ENC_IDX_FRAME_P (1) -#define V4L2_ENC_IDX_FRAME_B (2) -#define V4L2_ENC_IDX_FRAME_MASK (0xf) - -struct v4l2_enc_idx_entry { - __u64 offset; - __u64 pts; - __u32 length; - __u32 flags; - __u32 reserved[2]; -}; - -#define V4L2_ENC_IDX_ENTRIES (64) -struct v4l2_enc_idx { - __u32 entries; - __u32 entries_cap; - __u32 reserved[4]; - struct v4l2_enc_idx_entry entry[V4L2_ENC_IDX_ENTRIES]; -}; - - -#define V4L2_ENC_CMD_START (0) -#define V4L2_ENC_CMD_STOP (1) -#define V4L2_ENC_CMD_PAUSE (2) -#define V4L2_ENC_CMD_RESUME (3) - -/* Flags for V4L2_ENC_CMD_STOP */ -#define V4L2_ENC_CMD_STOP_AT_GOP_END (1 << 0) - -struct v4l2_encoder_cmd { - __u32 cmd; - __u32 flags; - union { - struct { - __u32 data[8]; - } raw; - }; -}; - -#endif - - -/* - * D A T A S E R V I C E S ( V B I ) - * - * Data services API by Michael Schimek - */ - -/* Raw VBI */ -struct v4l2_vbi_format { - __u32 sampling_rate; /* in 1 Hz */ - __u32 offset; - __u32 samples_per_line; - __u32 sample_format; /* V4L2_PIX_FMT_* */ - __s32 start[2]; - __u32 count[2]; - __u32 flags; /* V4L2_VBI_* */ - __u32 reserved[2]; /* must be zero */ -}; - -/* VBI flags */ -#define V4L2_VBI_UNSYNC (1 << 0) -#define V4L2_VBI_INTERLACED (1 << 1) - -/* Sliced VBI - * - * This implements is a proposal V4L2 API to allow SLICED VBI - * required for some hardware encoders. It should change without - * notice in the definitive implementation. - */ - -struct v4l2_sliced_vbi_format { - __u16 service_set; - /* service_lines[0][...] specifies lines 0-23 (1-23 used) of the first field - service_lines[1][...] specifies lines 0-23 (1-23 used) of the second field - (equals frame lines 313-336 for 625 line video - standards, 263-286 for 525 line standards) */ - __u16 service_lines[2][24]; - __u32 io_size; - __u32 reserved[2]; /* must be zero */ -}; - -/* Teletext World System Teletext - (WST), defined on ITU-R BT.653-2 */ -#define V4L2_SLICED_TELETEXT_B (0x0001) -/* Video Program System, defined on ETS 300 231*/ -#define V4L2_SLICED_VPS (0x0400) -/* Closed Caption, defined on EIA-608 */ -#define V4L2_SLICED_CAPTION_525 (0x1000) -/* Wide Screen System, defined on ITU-R BT1119.1 */ -#define V4L2_SLICED_WSS_625 (0x4000) - -#define V4L2_SLICED_VBI_525 (V4L2_SLICED_CAPTION_525) -#define V4L2_SLICED_VBI_625 (V4L2_SLICED_TELETEXT_B | V4L2_SLICED_VPS | V4L2_SLICED_WSS_625) - -struct v4l2_sliced_vbi_cap { - __u16 service_set; - /* service_lines[0][...] specifies lines 0-23 (1-23 used) of the first field - service_lines[1][...] specifies lines 0-23 (1-23 used) of the second field - (equals frame lines 313-336 for 625 line video - standards, 263-286 for 525 line standards) */ - __u16 service_lines[2][24]; - enum v4l2_buf_type type; - __u32 reserved[3]; /* must be 0 */ -}; - -struct v4l2_sliced_vbi_data { - __u32 id; - __u32 field; /* 0: first field, 1: second field */ - __u32 line; /* 1-23 */ - __u32 reserved; /* must be 0 */ - __u8 data[48]; -}; - -/* - * Sliced VBI data inserted into MPEG Streams - */ - -/* - * V4L2_MPEG_STREAM_VBI_FMT_IVTV: - * - * Structure of payload contained in an MPEG 2 Private Stream 1 PES Packet in an - * MPEG-2 Program Pack that contains V4L2_MPEG_STREAM_VBI_FMT_IVTV Sliced VBI - * data - * - * Note, the MPEG-2 Program Pack and Private Stream 1 PES packet header - * definitions are not included here. See the MPEG-2 specifications for details - * on these headers. - */ - -/* Line type IDs */ -#define V4L2_MPEG_VBI_IVTV_TELETEXT_B (1) -#define V4L2_MPEG_VBI_IVTV_CAPTION_525 (4) -#define V4L2_MPEG_VBI_IVTV_WSS_625 (5) -#define V4L2_MPEG_VBI_IVTV_VPS (7) - -struct v4l2_mpeg_vbi_itv0_line { - __u8 id; /* One of V4L2_MPEG_VBI_IVTV_* above */ - __u8 data[42]; /* Sliced VBI data for the line */ -} __attribute__ ((packed)); - -struct v4l2_mpeg_vbi_itv0 { - __le32 linemask[2]; /* Bitmasks of VBI service lines present */ - struct v4l2_mpeg_vbi_itv0_line line[35]; -} __attribute__ ((packed)); - -struct v4l2_mpeg_vbi_ITV0 { - struct v4l2_mpeg_vbi_itv0_line line[36]; -} __attribute__ ((packed)); - -#define V4L2_MPEG_VBI_IVTV_MAGIC0 "itv0" -#define V4L2_MPEG_VBI_IVTV_MAGIC1 "ITV0" - -struct v4l2_mpeg_vbi_fmt_ivtv { - __u8 magic[4]; - union { - struct v4l2_mpeg_vbi_itv0 itv0; - struct v4l2_mpeg_vbi_ITV0 ITV0; - }; -} __attribute__ ((packed)); - -/* - * A G G R E G A T E S T R U C T U R E S - */ - -/** - * struct v4l2_plane_pix_format - additional, per-plane format definition - * @sizeimage: maximum size in bytes required for data, for which - * this plane will be used - * @bytesperline: distance in bytes between the leftmost pixels in two - * adjacent lines - */ -struct v4l2_plane_pix_format { - __u32 sizeimage; - __u16 bytesperline; - __u16 reserved[7]; -} __attribute__ ((packed)); - -/** - * struct v4l2_pix_format_mplane - multiplanar format definition - * @width: image width in pixels - * @height: image height in pixels - * @pixelformat: little endian four character code (fourcc) - * @field: field order (for interlaced video) - * @colorspace: supplemental to pixelformat - * @plane_fmt: per-plane information - * @num_planes: number of planes for this format - */ -struct v4l2_pix_format_mplane { - __u32 width; - __u32 height; - __u32 pixelformat; - enum v4l2_field field; - enum v4l2_colorspace colorspace; - - struct v4l2_plane_pix_format plane_fmt[VIDEO_MAX_PLANES]; - __u8 num_planes; - __u8 reserved[11]; -} __attribute__ ((packed)); - -/** - * struct v4l2_format - stream data format - * @type: type of the data stream - * @pix: definition of an image format - * @pix_mp: definition of a multiplanar image format - * @win: definition of an overlaid image - * @vbi: raw VBI capture or output parameters - * @sliced: sliced VBI capture or output parameters - * @raw_data: placeholder for future extensions and custom formats - */ -struct v4l2_format { - enum v4l2_buf_type type; - union { - struct v4l2_pix_format pix; /* V4L2_BUF_TYPE_VIDEO_CAPTURE */ - struct v4l2_pix_format_mplane pix_mp; /* V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE */ - struct v4l2_window win; /* V4L2_BUF_TYPE_VIDEO_OVERLAY */ - struct v4l2_vbi_format vbi; /* V4L2_BUF_TYPE_VBI_CAPTURE */ - struct v4l2_sliced_vbi_format sliced; /* V4L2_BUF_TYPE_SLICED_VBI_CAPTURE */ - __u8 raw_data[200]; /* user-defined */ - } fmt; -}; - -/* Stream type-dependent parameters - */ -struct v4l2_streamparm { - enum v4l2_buf_type type; - union { - struct v4l2_captureparm capture; - struct v4l2_outputparm output; - __u8 raw_data[200]; /* user-defined */ - } parm; -}; - -/* - * E V E N T S - */ - -#define V4L2_EVENT_ALL 0 -#define V4L2_EVENT_VSYNC 1 -#define V4L2_EVENT_EOS 2 -#define V4L2_EVENT_PRIVATE_START 0x08000000 - -/* Payload for V4L2_EVENT_VSYNC */ -struct v4l2_event_vsync { - /* Can be V4L2_FIELD_ANY, _NONE, _TOP or _BOTTOM */ - __u8 field; -} __attribute__ ((packed)); - -struct v4l2_event { - __u32 type; - union { - struct v4l2_event_vsync vsync; - __u8 data[64]; - } u; - __u32 pending; - __u32 sequence; - struct timespec timestamp; - __u32 reserved[9]; -}; - -struct v4l2_event_subscription { - __u32 type; - __u32 reserved[7]; -}; - -/* - * A D V A N C E D D E B U G G I N G - * - * NOTE: EXPERIMENTAL API, NEVER RELY ON THIS IN APPLICATIONS! - * FOR DEBUGGING, TESTING AND INTERNAL USE ONLY! - */ - -/* VIDIOC_DBG_G_REGISTER and VIDIOC_DBG_S_REGISTER */ - -#define V4L2_CHIP_MATCH_HOST 0 /* Match against chip ID on host (0 for the host) */ -#define V4L2_CHIP_MATCH_I2C_DRIVER 1 /* Match against I2C driver name */ -#define V4L2_CHIP_MATCH_I2C_ADDR 2 /* Match against I2C 7-bit address */ -#define V4L2_CHIP_MATCH_AC97 3 /* Match against anciliary AC97 chip */ - -struct v4l2_dbg_match { - __u32 type; /* Match type */ - union { /* Match this chip, meaning determined by type */ - __u32 addr; - char name[32]; - }; -} __attribute__ ((packed)); - -struct v4l2_dbg_register { - struct v4l2_dbg_match match; - __u32 size; /* register size in bytes */ - __u64 reg; - __u64 val; -} __attribute__ ((packed)); - -/* VIDIOC_DBG_G_CHIP_IDENT */ -struct v4l2_dbg_chip_ident { - struct v4l2_dbg_match match; - __u32 ident; /* chip identifier as specified in <media/v4l2-chip-ident.h> */ - __u32 revision; /* chip revision, chip specific */ -} __attribute__ ((packed)); - -/* - * I O C T L C O D E S F O R V I D E O D E V I C E S - * - */ -#define VIDIOC_QUERYCAP _IOR('V', 0, struct v4l2_capability) -#define VIDIOC_RESERVED _IO('V', 1) -#define VIDIOC_ENUM_FMT _IOWR('V', 2, struct v4l2_fmtdesc) -#define VIDIOC_G_FMT _IOWR('V', 4, struct v4l2_format) -#define VIDIOC_S_FMT _IOWR('V', 5, struct v4l2_format) -#define VIDIOC_REQBUFS _IOWR('V', 8, struct v4l2_requestbuffers) -#define VIDIOC_QUERYBUF _IOWR('V', 9, struct v4l2_buffer) -#define VIDIOC_G_FBUF _IOR('V', 10, struct v4l2_framebuffer) -#define VIDIOC_S_FBUF _IOW('V', 11, struct v4l2_framebuffer) -#define VIDIOC_OVERLAY _IOW('V', 14, int) -#define VIDIOC_QBUF _IOWR('V', 15, struct v4l2_buffer) -#define VIDIOC_DQBUF _IOWR('V', 17, struct v4l2_buffer) -#define VIDIOC_STREAMON _IOW('V', 18, int) -#define VIDIOC_STREAMOFF _IOW('V', 19, int) -#define VIDIOC_G_PARM _IOWR('V', 21, struct v4l2_streamparm) -#define VIDIOC_S_PARM _IOWR('V', 22, struct v4l2_streamparm) -#define VIDIOC_G_STD _IOR('V', 23, v4l2_std_id) -#define VIDIOC_S_STD _IOW('V', 24, v4l2_std_id) -#define VIDIOC_ENUMSTD _IOWR('V', 25, struct v4l2_standard) -#define VIDIOC_ENUMINPUT _IOWR('V', 26, struct v4l2_input) -#define VIDIOC_G_CTRL _IOWR('V', 27, struct v4l2_control) -#define VIDIOC_S_CTRL _IOWR('V', 28, struct v4l2_control) -#define VIDIOC_G_TUNER _IOWR('V', 29, struct v4l2_tuner) -#define VIDIOC_S_TUNER _IOW('V', 30, struct v4l2_tuner) -#define VIDIOC_G_AUDIO _IOR('V', 33, struct v4l2_audio) -#define VIDIOC_S_AUDIO _IOW('V', 34, struct v4l2_audio) -#define VIDIOC_QUERYCTRL _IOWR('V', 36, struct v4l2_queryctrl) -#define VIDIOC_QUERYMENU _IOWR('V', 37, struct v4l2_querymenu) -#define VIDIOC_G_INPUT _IOR('V', 38, int) -#define VIDIOC_S_INPUT _IOWR('V', 39, int) -#define VIDIOC_G_OUTPUT _IOR('V', 46, int) -#define VIDIOC_S_OUTPUT _IOWR('V', 47, int) -#define VIDIOC_ENUMOUTPUT _IOWR('V', 48, struct v4l2_output) -#define VIDIOC_G_AUDOUT _IOR('V', 49, struct v4l2_audioout) -#define VIDIOC_S_AUDOUT _IOW('V', 50, struct v4l2_audioout) -#define VIDIOC_G_MODULATOR _IOWR('V', 54, struct v4l2_modulator) -#define VIDIOC_S_MODULATOR _IOW('V', 55, struct v4l2_modulator) -#define VIDIOC_G_FREQUENCY _IOWR('V', 56, struct v4l2_frequency) -#define VIDIOC_S_FREQUENCY _IOW('V', 57, struct v4l2_frequency) -#define VIDIOC_CROPCAP _IOWR('V', 58, struct v4l2_cropcap) -#define VIDIOC_G_CROP _IOWR('V', 59, struct v4l2_crop) -#define VIDIOC_S_CROP _IOW('V', 60, struct v4l2_crop) -#define VIDIOC_G_JPEGCOMP _IOR('V', 61, struct v4l2_jpegcompression) -#define VIDIOC_S_JPEGCOMP _IOW('V', 62, struct v4l2_jpegcompression) -#define VIDIOC_QUERYSTD _IOR('V', 63, v4l2_std_id) -#define VIDIOC_TRY_FMT _IOWR('V', 64, struct v4l2_format) -#define VIDIOC_ENUMAUDIO _IOWR('V', 65, struct v4l2_audio) -#define VIDIOC_ENUMAUDOUT _IOWR('V', 66, struct v4l2_audioout) -#define VIDIOC_G_PRIORITY _IOR('V', 67, enum v4l2_priority) -#define VIDIOC_S_PRIORITY _IOW('V', 68, enum v4l2_priority) -#define VIDIOC_G_SLICED_VBI_CAP _IOWR('V', 69, struct v4l2_sliced_vbi_cap) -#define VIDIOC_LOG_STATUS _IO('V', 70) -#define VIDIOC_G_EXT_CTRLS _IOWR('V', 71, struct v4l2_ext_controls) -#define VIDIOC_S_EXT_CTRLS _IOWR('V', 72, struct v4l2_ext_controls) -#define VIDIOC_TRY_EXT_CTRLS _IOWR('V', 73, struct v4l2_ext_controls) -#if 1 -#define VIDIOC_ENUM_FRAMESIZES _IOWR('V', 74, struct v4l2_frmsizeenum) -#define VIDIOC_ENUM_FRAMEINTERVALS _IOWR('V', 75, struct v4l2_frmivalenum) -#define VIDIOC_G_ENC_INDEX _IOR('V', 76, struct v4l2_enc_idx) -#define VIDIOC_ENCODER_CMD _IOWR('V', 77, struct v4l2_encoder_cmd) -#define VIDIOC_TRY_ENCODER_CMD _IOWR('V', 78, struct v4l2_encoder_cmd) -#endif - -#if 1 -/* Experimental, meant for debugging, testing and internal use. - Only implemented if CONFIG_VIDEO_ADV_DEBUG is defined. - You must be root to use these ioctls. Never use these in applications! */ -#define VIDIOC_DBG_S_REGISTER _IOW('V', 79, struct v4l2_dbg_register) -#define VIDIOC_DBG_G_REGISTER _IOWR('V', 80, struct v4l2_dbg_register) - -/* Experimental, meant for debugging, testing and internal use. - Never use this ioctl in applications! */ -#define VIDIOC_DBG_G_CHIP_IDENT _IOWR('V', 81, struct v4l2_dbg_chip_ident) -#endif - -#define VIDIOC_S_HW_FREQ_SEEK _IOW('V', 82, struct v4l2_hw_freq_seek) -#define VIDIOC_ENUM_DV_PRESETS _IOWR('V', 83, struct v4l2_dv_enum_preset) -#define VIDIOC_S_DV_PRESET _IOWR('V', 84, struct v4l2_dv_preset) -#define VIDIOC_G_DV_PRESET _IOWR('V', 85, struct v4l2_dv_preset) -#define VIDIOC_QUERY_DV_PRESET _IOR('V', 86, struct v4l2_dv_preset) -#define VIDIOC_S_DV_TIMINGS _IOWR('V', 87, struct v4l2_dv_timings) -#define VIDIOC_G_DV_TIMINGS _IOWR('V', 88, struct v4l2_dv_timings) -#define VIDIOC_DQEVENT _IOR('V', 89, struct v4l2_event) -#define VIDIOC_SUBSCRIBE_EVENT _IOW('V', 90, struct v4l2_event_subscription) -#define VIDIOC_UNSUBSCRIBE_EVENT _IOW('V', 91, struct v4l2_event_subscription) - -/* Reminder: when adding new ioctls please add support for them to - drivers/media/video/v4l2-compat-ioctl32.c as well! */ - -#define BASE_VIDIOC_PRIVATE 192 /* 192-255 are private */ - -#endif /* __LINUX_VIDEODEV2_H */ - diff --git a/trunk/Documentation/DocBook/v4l/vidioc-subscribe-event.xml b/trunk/Documentation/DocBook/v4l/vidioc-subscribe-event.xml deleted file mode 100644 index 8b501791aa68..000000000000 --- a/trunk/Documentation/DocBook/v4l/vidioc-subscribe-event.xml +++ /dev/null @@ -1,133 +0,0 @@ - - - ioctl VIDIOC_SUBSCRIBE_EVENT, VIDIOC_UNSUBSCRIBE_EVENT - &manvol; - - - - VIDIOC_SUBSCRIBE_EVENT, VIDIOC_UNSUBSCRIBE_EVENT - Subscribe or unsubscribe event - - - - - - int ioctl - int fd - int request - struct v4l2_event_subscription -*argp - - - - - - Arguments - - - - fd - - &fd; - - - - request - - VIDIOC_SUBSCRIBE_EVENT, VIDIOC_UNSUBSCRIBE_EVENT - - - - argp - - - - - - - - - Description - - Subscribe or unsubscribe V4L2 event. Subscribed events are - dequeued by using the &VIDIOC-DQEVENT; ioctl. - - - struct <structname>v4l2_event_subscription</structname> - - &cs-str; - - - __u32 - type - Type of the event. - - - __u32 - reserved[7] - Reserved for future extensions. Drivers and applications - must set the array to zero. - - - -
- - - Event Types - - &cs-def; - - - V4L2_EVENT_ALL - 0 - All events. V4L2_EVENT_ALL is valid only for - VIDIOC_UNSUBSCRIBE_EVENT for unsubscribing all events at once. - - - - V4L2_EVENT_VSYNC - 1 - This event is triggered on the vertical sync. - This event has &v4l2-event-vsync; associated with it. - - - - V4L2_EVENT_EOS - 2 - This event is triggered when the end of a stream is reached. - This is typically used with MPEG decoders to report to the application - when the last of the MPEG stream has been decoded. - - - - V4L2_EVENT_PRIVATE_START - 0x08000000 - Base event number for driver-private events. - - - -
- - - struct <structname>v4l2_event_vsync</structname> - - &cs-str; - - - __u8 - field - The upcoming field. See &v4l2-field;. - - - -
- -
-
- diff --git a/trunk/Documentation/devicetree/bindings/arm/arm-boards b/trunk/Documentation/devicetree/bindings/arm/arm-boards new file mode 100644 index 000000000000..91f26148af79 --- /dev/null +++ b/trunk/Documentation/devicetree/bindings/arm/arm-boards @@ -0,0 +1,20 @@ +ARM Versatile Application and Platform Baseboards +------------------------------------------------- +ARM's development hardware platform with connectors for customizable +core tiles. The hardware configuration of the Versatile boards is +highly customizable. + +Required properties (in root node): + compatible = "arm,versatile-ab"; /* Application baseboard */ + compatible = "arm,versatile-pb"; /* Platform baseboard */ + +Interrupt controllers: +- VIC required properties: + compatible = "arm,versatile-vic"; + interrupt-controller; + #interrupt-cells = <1>; + +- SIC required properties: + compatible = "arm,versatile-sic"; + interrupt-controller; + #interrupt-cells = <1>; diff --git a/trunk/Documentation/devicetree/bindings/dma/fsl-imx-sdma.txt b/trunk/Documentation/devicetree/bindings/dma/fsl-imx-sdma.txt new file mode 100644 index 000000000000..d1e3f443e205 --- /dev/null +++ b/trunk/Documentation/devicetree/bindings/dma/fsl-imx-sdma.txt @@ -0,0 +1,17 @@ +* Freescale Smart Direct Memory Access (SDMA) Controller for i.MX + +Required properties: +- compatible : Should be "fsl,-sdma" +- reg : Should contain SDMA registers location and length +- interrupts : Should contain SDMA interrupt +- fsl,sdma-ram-script-name : Should contain the full path of SDMA RAM + scripts firmware + +Examples: + +sdma@83fb0000 { + compatible = "fsl,imx51-sdma", "fsl,imx35-sdma"; + reg = <0x83fb0000 0x4000>; + interrupts = <6>; + fsl,sdma-ram-script-name = "sdma-imx51.bin"; +}; diff --git a/trunk/Documentation/devicetree/bindings/gpio/gpio_keys.txt b/trunk/Documentation/devicetree/bindings/gpio/gpio_keys.txt new file mode 100644 index 000000000000..7190c99d7611 --- /dev/null +++ b/trunk/Documentation/devicetree/bindings/gpio/gpio_keys.txt @@ -0,0 +1,36 @@ +Device-Tree bindings for input/gpio_keys.c keyboard driver + +Required properties: + - compatible = "gpio-keys"; + +Optional properties: + - autorepeat: Boolean, Enable auto repeat feature of Linux input + subsystem. + +Each button (key) is represented as a sub-node of "gpio-keys": +Subnode properties: + + - gpios: OF devcie-tree gpio specificatin. + - label: Descriptive name of the key. + - linux,code: Keycode to emit. + +Optional subnode-properties: + - linux,input-type: Specify event type this button/key generates. + If not specified defaults to <1> == EV_KEY. + - debounce-interval: Debouncing interval time in milliseconds. + If not specified defaults to 5. + - gpio-key,wakeup: Boolean, button can wake-up the system. + +Example nodes: + + gpio_keys { + compatible = "gpio-keys"; + #address-cells = <1>; + #size-cells = <0>; + autorepeat; + button@21 { + label = "GPIO Key UP"; + linux,code = <103>; + gpios = <&gpio1 0 1>; + }; + ... diff --git a/trunk/Documentation/devicetree/bindings/i2c/arm-versatile.txt b/trunk/Documentation/devicetree/bindings/i2c/arm-versatile.txt new file mode 100644 index 000000000000..361d31c51b6f --- /dev/null +++ b/trunk/Documentation/devicetree/bindings/i2c/arm-versatile.txt @@ -0,0 +1,10 @@ +i2c Controller on ARM Versatile platform: + +Required properties: +- compatible : Must be "arm,versatile-i2c"; +- reg +- #address-cells = <1>; +- #size-cells = <0>; + +Optional properties: +- Child nodes conforming to i2c bus binding diff --git a/trunk/Documentation/devicetree/bindings/mmc/fsl-imx-esdhc.txt b/trunk/Documentation/devicetree/bindings/mmc/fsl-imx-esdhc.txt new file mode 100644 index 000000000000..ab22fe6e73ab --- /dev/null +++ b/trunk/Documentation/devicetree/bindings/mmc/fsl-imx-esdhc.txt @@ -0,0 +1,34 @@ +* Freescale Enhanced Secure Digital Host Controller (eSDHC) for i.MX + +The Enhanced Secure Digital Host Controller on Freescale i.MX family +provides an interface for MMC, SD, and SDIO types of memory cards. + +Required properties: +- compatible : Should be "fsl,-esdhc" +- reg : Should contain eSDHC registers location and length +- interrupts : Should contain eSDHC interrupt + +Optional properties: +- fsl,card-wired : Indicate the card is wired to host permanently +- fsl,cd-internal : Indicate to use controller internal card detection +- fsl,wp-internal : Indicate to use controller internal write protection +- cd-gpios : Specify GPIOs for card detection +- wp-gpios : Specify GPIOs for write protection + +Examples: + +esdhc@70004000 { + compatible = "fsl,imx51-esdhc"; + reg = <0x70004000 0x4000>; + interrupts = <1>; + fsl,cd-internal; + fsl,wp-internal; +}; + +esdhc@70008000 { + compatible = "fsl,imx51-esdhc"; + reg = <0x70008000 0x4000>; + interrupts = <2>; + cd-gpios = <&gpio0 6 0>; /* GPIO1_6 */ + wp-gpios = <&gpio0 5 0>; /* GPIO1_5 */ +}; diff --git a/trunk/Documentation/devicetree/bindings/mtd/arm-versatile.txt b/trunk/Documentation/devicetree/bindings/mtd/arm-versatile.txt new file mode 100644 index 000000000000..476845db94d0 --- /dev/null +++ b/trunk/Documentation/devicetree/bindings/mtd/arm-versatile.txt @@ -0,0 +1,8 @@ +Flash device on ARM Versatile board + +Required properties: +- compatible : must be "arm,versatile-flash"; +- bank-width : width in bytes of flash interface. + +Optional properties: +- Subnode partition map from mtd flash binding diff --git a/trunk/Documentation/devicetree/bindings/net/fsl-fec.txt b/trunk/Documentation/devicetree/bindings/net/fsl-fec.txt new file mode 100644 index 000000000000..de439517dff0 --- /dev/null +++ b/trunk/Documentation/devicetree/bindings/net/fsl-fec.txt @@ -0,0 +1,24 @@ +* Freescale Fast Ethernet Controller (FEC) + +Required properties: +- compatible : Should be "fsl,-fec" +- reg : Address and length of the register set for the device +- interrupts : Should contain fec interrupt +- phy-mode : String, operation mode of the PHY interface. + Supported values are: "mii", "gmii", "sgmii", "tbi", "rmii", + "rgmii", "rgmii-id", "rgmii-rxid", "rgmii-txid", "rtbi", "smii". +- phy-reset-gpios : Should specify the gpio for phy reset + +Optional properties: +- local-mac-address : 6 bytes, mac address + +Example: + +fec@83fec000 { + compatible = "fsl,imx51-fec", "fsl,imx27-fec"; + reg = <0x83fec000 0x4000>; + interrupts = <87>; + phy-mode = "mii"; + phy-reset-gpios = <&gpio1 14 0>; /* GPIO2_14 */ + local-mac-address = [00 04 9F 01 1B B9]; +}; diff --git a/trunk/Documentation/devicetree/bindings/net/smsc-lan91c111.txt b/trunk/Documentation/devicetree/bindings/net/smsc-lan91c111.txt new file mode 100644 index 000000000000..953049b4248a --- /dev/null +++ b/trunk/Documentation/devicetree/bindings/net/smsc-lan91c111.txt @@ -0,0 +1,10 @@ +SMSC LAN91c111 Ethernet mac + +Required properties: +- compatible = "smsc,lan91c111"; +- reg : physical address and size of registers +- interrupts : interrupt connection + +Optional properties: +- phy-device : phandle to Ethernet phy +- local-mac-address : Ethernet mac address to use diff --git a/trunk/Documentation/devicetree/bindings/tty/serial/fsl-imx-uart.txt b/trunk/Documentation/devicetree/bindings/tty/serial/fsl-imx-uart.txt new file mode 100644 index 000000000000..a9c0406280e8 --- /dev/null +++ b/trunk/Documentation/devicetree/bindings/tty/serial/fsl-imx-uart.txt @@ -0,0 +1,19 @@ +* Freescale i.MX Universal Asynchronous Receiver/Transmitter (UART) + +Required properties: +- compatible : Should be "fsl,-uart" +- reg : Address and length of the register set for the device +- interrupts : Should contain uart interrupt + +Optional properties: +- fsl,uart-has-rtscts : Indicate the uart has rts and cts +- fsl,irda-mode : Indicate the uart supports irda mode + +Example: + +uart@73fbc000 { + compatible = "fsl,imx51-uart", "fsl,imx21-uart"; + reg = <0x73fbc000 0x4000>; + interrupts = <31>; + fsl,uart-has-rtscts; +}; diff --git a/trunk/Documentation/devicetree/bindings/watchdog/fsl-imx-wdt.txt b/trunk/Documentation/devicetree/bindings/watchdog/fsl-imx-wdt.txt new file mode 100644 index 000000000000..2144af1a5264 --- /dev/null +++ b/trunk/Documentation/devicetree/bindings/watchdog/fsl-imx-wdt.txt @@ -0,0 +1,14 @@ +* Freescale i.MX Watchdog Timer (WDT) Controller + +Required properties: +- compatible : Should be "fsl,-wdt" +- reg : Should contain WDT registers location and length +- interrupts : Should contain WDT interrupt + +Examples: + +wdt@73f98000 { + compatible = "fsl,imx51-wdt", "fsl,imx21-wdt"; + reg = <0x73f98000 0x4000>; + interrupts = <58>; +}; diff --git a/trunk/Documentation/devicetree/bindings/watchdog/samsung-wdt.txt b/trunk/Documentation/devicetree/bindings/watchdog/samsung-wdt.txt new file mode 100644 index 000000000000..79ead8263ae4 --- /dev/null +++ b/trunk/Documentation/devicetree/bindings/watchdog/samsung-wdt.txt @@ -0,0 +1,11 @@ +* Samsung's Watchdog Timer Controller + +The Samsung's Watchdog controller is used for resuming system operation +after a preset amount of time during which the WDT reset event has not +occured. + +Required properties: +- compatible : should be "samsung,s3c2410-wdt" +- reg : base physical address of the controller and length of memory mapped + region. +- interrupts : interrupt number to the cpu. diff --git a/trunk/Documentation/dmaengine.txt b/trunk/Documentation/dmaengine.txt index 5a0cb1ef6164..94b7e0f96b38 100644 --- a/trunk/Documentation/dmaengine.txt +++ b/trunk/Documentation/dmaengine.txt @@ -10,87 +10,181 @@ NOTE: For DMA Engine usage in async_tx please see: Below is a guide to device driver writers on how to use the Slave-DMA API of the DMA Engine. This is applicable only for slave DMA usage only. -The slave DMA usage consists of following steps +The slave DMA usage consists of following steps: 1. Allocate a DMA slave channel 2. Set slave and controller specific parameters 3. Get a descriptor for transaction -4. Submit the transaction and wait for callback notification +4. Submit the transaction +5. Issue pending requests and wait for callback notification 1. Allocate a DMA slave channel -Channel allocation is slightly different in the slave DMA context, client -drivers typically need a channel from a particular DMA controller only and even -in some cases a specific channel is desired. To request a channel -dma_request_channel() API is used. - -Interface: -struct dma_chan *dma_request_channel(dma_cap_mask_t mask, - dma_filter_fn filter_fn, - void *filter_param); -where dma_filter_fn is defined as: -typedef bool (*dma_filter_fn)(struct dma_chan *chan, void *filter_param); - -When the optional 'filter_fn' parameter is set to NULL dma_request_channel -simply returns the first channel that satisfies the capability mask. Otherwise, -when the mask parameter is insufficient for specifying the necessary channel, -the filter_fn routine can be used to disposition the available channels in the -system. The filter_fn routine is called once for each free channel in the -system. Upon seeing a suitable channel filter_fn returns DMA_ACK which flags -that channel to be the return value from dma_request_channel. A channel -allocated via this interface is exclusive to the caller, until -dma_release_channel() is called. + + Channel allocation is slightly different in the slave DMA context, + client drivers typically need a channel from a particular DMA + controller only and even in some cases a specific channel is desired. + To request a channel dma_request_channel() API is used. + + Interface: + struct dma_chan *dma_request_channel(dma_cap_mask_t mask, + dma_filter_fn filter_fn, + void *filter_param); + where dma_filter_fn is defined as: + typedef bool (*dma_filter_fn)(struct dma_chan *chan, void *filter_param); + + The 'filter_fn' parameter is optional, but highly recommended for + slave and cyclic channels as they typically need to obtain a specific + DMA channel. + + When the optional 'filter_fn' parameter is NULL, dma_request_channel() + simply returns the first channel that satisfies the capability mask. + + Otherwise, the 'filter_fn' routine will be called once for each free + channel which has a capability in 'mask'. 'filter_fn' is expected to + return 'true' when the desired DMA channel is found. + + A channel allocated via this interface is exclusive to the caller, + until dma_release_channel() is called. 2. Set slave and controller specific parameters -Next step is always to pass some specific information to the DMA driver. Most of -the generic information which a slave DMA can use is in struct dma_slave_config. -It allows the clients to specify DMA direction, DMA addresses, bus widths, DMA -burst lengths etc. If some DMA controllers have more parameters to be sent then -they should try to embed struct dma_slave_config in their controller specific -structure. That gives flexibility to client to pass more parameters, if -required. - -Interface: -int dmaengine_slave_config(struct dma_chan *chan, - struct dma_slave_config *config) + + Next step is always to pass some specific information to the DMA + driver. Most of the generic information which a slave DMA can use + is in struct dma_slave_config. This allows the clients to specify + DMA direction, DMA addresses, bus widths, DMA burst lengths etc + for the peripheral. + + If some DMA controllers have more parameters to be sent then they + should try to embed struct dma_slave_config in their controller + specific structure. That gives flexibility to client to pass more + parameters, if required. + + Interface: + int dmaengine_slave_config(struct dma_chan *chan, + struct dma_slave_config *config) + + Please see the dma_slave_config structure definition in dmaengine.h + for a detailed explaination of the struct members. Please note + that the 'direction' member will be going away as it duplicates the + direction given in the prepare call. 3. Get a descriptor for transaction -For slave usage the various modes of slave transfers supported by the -DMA-engine are: -slave_sg - DMA a list of scatter gather buffers from/to a peripheral -dma_cyclic - Perform a cyclic DMA operation from/to a peripheral till the + + For slave usage the various modes of slave transfers supported by the + DMA-engine are: + + slave_sg - DMA a list of scatter gather buffers from/to a peripheral + dma_cyclic - Perform a cyclic DMA operation from/to a peripheral till the operation is explicitly stopped. -The non NULL return of this transfer API represents a "descriptor" for the given -transaction. - -Interface: -struct dma_async_tx_descriptor *(*chan->device->device_prep_dma_sg)( - struct dma_chan *chan, - struct scatterlist *dst_sg, unsigned int dst_nents, - struct scatterlist *src_sg, unsigned int src_nents, + + A non-NULL return of this transfer API represents a "descriptor" for + the given transaction. + + Interface: + struct dma_async_tx_descriptor *(*chan->device->device_prep_slave_sg)( + struct dma_chan *chan, struct scatterlist *sgl, + unsigned int sg_len, enum dma_data_direction direction, unsigned long flags); -struct dma_async_tx_descriptor *(*chan->device->device_prep_dma_cyclic)( + + struct dma_async_tx_descriptor *(*chan->device->device_prep_dma_cyclic)( struct dma_chan *chan, dma_addr_t buf_addr, size_t buf_len, size_t period_len, enum dma_data_direction direction); -4. Submit the transaction and wait for callback notification -To schedule the transaction to be scheduled by dma device, the "descriptor" -returned in above (3) needs to be submitted. -To tell the dma driver that a transaction is ready to be serviced, the -descriptor->submit() callback needs to be invoked. This chains the descriptor to -the pending queue. -The transactions in the pending queue can be activated by calling the -issue_pending API. If channel is idle then the first transaction in queue is -started and subsequent ones queued up. -On completion of the DMA operation the next in queue is submitted and a tasklet -triggered. The tasklet would then call the client driver completion callback -routine for notification, if set. -Interface: -void dma_async_issue_pending(struct dma_chan *chan); - -============================================================================== - -Additional usage notes for dma driver writers -1/ Although DMA engine specifies that completion callback routines cannot submit -any new operations, but typically for slave DMA subsequent transaction may not -be available for submit prior to callback routine being called. This requirement -is not a requirement for DMA-slave devices. But they should take care to drop -the spin-lock they might be holding before calling the callback routine + The peripheral driver is expected to have mapped the scatterlist for + the DMA operation prior to calling device_prep_slave_sg, and must + keep the scatterlist mapped until the DMA operation has completed. + The scatterlist must be mapped using the DMA struct device. So, + normal setup should look like this: + + nr_sg = dma_map_sg(chan->device->dev, sgl, sg_len); + if (nr_sg == 0) + /* error */ + + desc = chan->device->device_prep_slave_sg(chan, sgl, nr_sg, + direction, flags); + + Once a descriptor has been obtained, the callback information can be + added and the descriptor must then be submitted. Some DMA engine + drivers may hold a spinlock between a successful preparation and + submission so it is important that these two operations are closely + paired. + + Note: + Although the async_tx API specifies that completion callback + routines cannot submit any new operations, this is not the + case for slave/cyclic DMA. + + For slave DMA, the subsequent transaction may not be available + for submission prior to callback function being invoked, so + slave DMA callbacks are permitted to prepare and submit a new + transaction. + + For cyclic DMA, a callback function may wish to terminate the + DMA via dmaengine_terminate_all(). + + Therefore, it is important that DMA engine drivers drop any + locks before calling the callback function which may cause a + deadlock. + + Note that callbacks will always be invoked from the DMA + engines tasklet, never from interrupt context. + +4. Submit the transaction + + Once the descriptor has been prepared and the callback information + added, it must be placed on the DMA engine drivers pending queue. + + Interface: + dma_cookie_t dmaengine_submit(struct dma_async_tx_descriptor *desc) + + This returns a cookie can be used to check the progress of DMA engine + activity via other DMA engine calls not covered in this document. + + dmaengine_submit() will not start the DMA operation, it merely adds + it to the pending queue. For this, see step 5, dma_async_issue_pending. + +5. Issue pending DMA requests and wait for callback notification + + The transactions in the pending queue can be activated by calling the + issue_pending API. If channel is idle then the first transaction in + queue is started and subsequent ones queued up. + + On completion of each DMA operation, the next in queue is started and + a tasklet triggered. The tasklet will then call the client driver + completion callback routine for notification, if set. + + Interface: + void dma_async_issue_pending(struct dma_chan *chan); + +Further APIs: + +1. int dmaengine_terminate_all(struct dma_chan *chan) + + This causes all activity for the DMA channel to be stopped, and may + discard data in the DMA FIFO which hasn't been fully transferred. + No callback functions will be called for any incomplete transfers. + +2. int dmaengine_pause(struct dma_chan *chan) + + This pauses activity on the DMA channel without data loss. + +3. int dmaengine_resume(struct dma_chan *chan) + + Resume a previously paused DMA channel. It is invalid to resume a + channel which is not currently paused. + +4. enum dma_status dma_async_is_tx_complete(struct dma_chan *chan, + dma_cookie_t cookie, dma_cookie_t *last, dma_cookie_t *used) + + This can be used to check the status of the channel. Please see + the documentation in include/linux/dmaengine.h for a more complete + description of this API. + + This can be used in conjunction with dma_async_is_complete() and + the cookie returned from 'descriptor->submit()' to check for + completion of a specific DMA transaction. + + Note: + Not all DMA engine drivers can return reliable information for + a running DMA channel. It is recommended that DMA engine users + pause or stop (via dmaengine_terminate_all) the channel before + using this API. diff --git a/trunk/Documentation/dvb/get_dvb_firmware b/trunk/Documentation/dvb/get_dvb_firmware old mode 100644 new mode 100755 index 3348d313fbe0..c466f5831f15 --- a/trunk/Documentation/dvb/get_dvb_firmware +++ b/trunk/Documentation/dvb/get_dvb_firmware @@ -27,7 +27,7 @@ use IO::Handle; "or51211", "or51132_qam", "or51132_vsb", "bluebird", "opera1", "cx231xx", "cx18", "cx23885", "pvrusb2", "mpc718", "af9015", "ngene", "az6027", "lme2510_lg", "lme2510c_s7395", - "lme2510c_s7395_old"); + "lme2510c_s7395_old", "drxk", "drxk_terratec_h5"); # Check args syntax() if (scalar(@ARGV) != 1); @@ -634,6 +634,37 @@ sub lme2510c_s7395_old { $outfile; } +sub drxk { + my $url = "http://l4m-daten.de/files/"; + my $zipfile = "DDTuner.zip"; + my $hash = "f5a37b9a20a3534997997c0b1382a3e5"; + my $tmpdir = tempdir(DIR => "/tmp", CLEANUP => 1); + my $drvfile = "DDTuner.sys"; + my $fwfile = "drxk_a3.mc"; + + checkstandard(); + + wgetfile($zipfile, $url . $zipfile); + verify($zipfile, $hash); + unzip($zipfile, $tmpdir); + extract("$tmpdir/$drvfile", 0x14dd8, 15634, "$fwfile"); + + "$fwfile" +} + +sub drxk_terratec_h5 { + my $url = "http://www.linuxtv.org/downloads/firmware/"; + my $hash = "19000dada8e2741162ccc50cc91fa7f1"; + my $fwfile = "dvb-usb-terratec-h5-drxk.fw"; + + checkstandard(); + + wgetfile($fwfile, $url . $fwfile); + verify($fwfile, $hash); + + "$fwfile" +} + # --------------------------------------------------------------- # Utilities diff --git a/trunk/Documentation/feature-removal-schedule.txt b/trunk/Documentation/feature-removal-schedule.txt index dfd6a9f4a583..ea0bace0124a 100644 --- a/trunk/Documentation/feature-removal-schedule.txt +++ b/trunk/Documentation/feature-removal-schedule.txt @@ -527,6 +527,41 @@ Who: Laurent Pinchart ---------------------------- +What: Support for driver specific ioctls in the pwc driver (everything + defined in media/pwc-ioctl.h) +When: 3.3 +Why: This stems from the v4l1 era, with v4l2 everything can be done with + standardized v4l2 API calls +Who: Hans de Goede + +---------------------------- + +What: Driver specific sysfs API in the pwc driver +When: 3.3 +Why: Setting pan/tilt should be done with v4l2 controls, like with other + cams. The button is available as a standard input device +Who: Hans de Goede + +---------------------------- + +What: Driver specific use of pixfmt.priv in the pwc driver +When: 3.3 +Why: The .priv field never was intended for this, setting a framerate is + support using the standardized S_PARM ioctl +Who: Hans de Goede + +---------------------------- + +What: Software emulation of arbritary resolutions in the pwc driver +When: 3.3 +Why: The pwc driver claims to support any resolution between 160x120 + and 640x480, but emulates this by simply drawing a black border + around the image. Userspace can draw its own black border if it + really wants one. +Who: Hans de Goede + +---------------------------- + What: For VIDIOC_S_FREQUENCY the type field must match the device node's type. If not, return -EINVAL. When: 3.2 diff --git a/trunk/Documentation/hwmon/adm1275 b/trunk/Documentation/hwmon/adm1275 index 6a3a6476cf20..097b3ccc4be7 100644 --- a/trunk/Documentation/hwmon/adm1275 +++ b/trunk/Documentation/hwmon/adm1275 @@ -43,8 +43,8 @@ Documentation/hwmon/pmbus for details. Sysfs entries ------------- -The following attributes are supported. Limits are read-write; all other -attributes are read-only. +The following attributes are supported. Limits are read-write, history reset +attributes are write-only, all other attributes are read-only. in1_label "vin1" or "vout1" depending on chip variant and configuration. @@ -53,8 +53,12 @@ in1_min Minumum Voltage. From VOUT_UV_WARN_LIMIT register. in1_max Maximum voltage. From VOUT_OV_WARN_LIMIT register. in1_min_alarm Voltage low alarm. From VOLTAGE_UV_WARNING status. in1_max_alarm Voltage high alarm. From VOLTAGE_OV_WARNING status. +in1_highest Historical maximum voltage. +in1_reset_history Write any value to reset history. curr1_label "iout1" curr1_input Measured current. From READ_IOUT register. curr1_max Maximum current. From IOUT_OC_WARN_LIMIT register. curr1_max_alarm Current high alarm. From IOUT_OC_WARN_LIMIT register. +curr1_highest Historical maximum current. +curr1_reset_history Write any value to reset history. diff --git a/trunk/Documentation/hwmon/coretemp b/trunk/Documentation/hwmon/coretemp index f85e913a3401..fa8776ab9b18 100644 --- a/trunk/Documentation/hwmon/coretemp +++ b/trunk/Documentation/hwmon/coretemp @@ -35,6 +35,13 @@ the Out-Of-Spec bit. Following table summarizes the exported sysfs files: All Sysfs entries are named with their core_id (represented here by 'X'). tempX_input - Core temperature (in millidegrees Celsius). tempX_max - All cooling devices should be turned on (on Core2). + Initialized with IA32_THERM_INTERRUPT. When the CPU + temperature reaches this temperature, an interrupt is + generated and tempX_max_alarm is set. +tempX_max_hyst - If the CPU temperature falls below than temperature, + an interrupt is generated and tempX_max_alarm is reset. +tempX_max_alarm - Set if the temperature reaches or exceeds tempX_max. + Reset if the temperature drops to or below tempX_max_hyst. tempX_crit - Maximum junction temperature (in millidegrees Celsius). tempX_crit_alarm - Set when Out-of-spec bit is set, never clears. Correct CPU operation is no longer guaranteed. diff --git a/trunk/Documentation/hwmon/lm25066 b/trunk/Documentation/hwmon/lm25066 new file mode 100644 index 000000000000..a21db81c4591 --- /dev/null +++ b/trunk/Documentation/hwmon/lm25066 @@ -0,0 +1,90 @@ +Kernel driver max8688 +===================== + +Supported chips: + * National Semiconductor LM25066 + Prefix: 'lm25066' + Addresses scanned: - + Datasheets: + http://www.national.com/pf/LM/LM25066.html + http://www.national.com/pf/LM/LM25066A.html + * National Semiconductor LM5064 + Prefix: 'lm5064' + Addresses scanned: - + Datasheet: + http://www.national.com/pf/LM/LM5064.html + * National Semiconductor LM5066 + Prefix: 'lm5066' + Addresses scanned: - + Datasheet: + http://www.national.com/pf/LM/LM5066.html + +Author: Guenter Roeck + + +Description +----------- + +This driver supports hardware montoring for National Semiconductor LM25066, +LM5064, and LM5064 Power Management, Monitoring, Control, and Protection ICs. + +The driver is a client driver to the core PMBus driver. Please see +Documentation/hwmon/pmbus for details on PMBus client drivers. + + +Usage Notes +----------- + +This driver does not auto-detect devices. You will have to instantiate the +devices explicitly. Please see Documentation/i2c/instantiating-devices for +details. + + +Platform data support +--------------------- + +The driver supports standard PMBus driver platform data. + + +Sysfs entries +------------- + +The following attributes are supported. Limits are read-write; all other +attributes are read-only. + +in1_label "vin" +in1_input Measured input voltage. +in1_average Average measured input voltage. +in1_min Minimum input voltage. +in1_max Maximum input voltage. +in1_min_alarm Input voltage low alarm. +in1_max_alarm Input voltage high alarm. + +in2_label "vout1" +in2_input Measured output voltage. +in2_average Average measured output voltage. +in2_min Minimum output voltage. +in2_min_alarm Output voltage low alarm. + +in3_label "vout2" +in3_input Measured voltage on vaux pin + +curr1_label "iin" +curr1_input Measured input current. +curr1_average Average measured input current. +curr1_max Maximum input current. +curr1_max_alarm Input current high alarm. + +power1_label "pin" +power1_input Measured input power. +power1_average Average measured input power. +power1_max Maximum input power limit. +power1_alarm Input power alarm +power1_input_highest Historical maximum power. +power1_reset_history Write any value to reset maximum power history. + +temp1_input Measured temperature. +temp1_max Maximum temperature. +temp1_crit Critical high temperature. +temp1_max_alarm Chip temperature high alarm. +temp1_crit_alarm Chip temperature critical high alarm. diff --git a/trunk/Documentation/hwmon/lm90 b/trunk/Documentation/hwmon/lm90 index f3efd18e87f4..9cd14cfe6515 100644 --- a/trunk/Documentation/hwmon/lm90 +++ b/trunk/Documentation/hwmon/lm90 @@ -113,7 +113,11 @@ Supported chips: Prefix: 'w83l771' Addresses scanned: I2C 0x4c Datasheet: Not publicly available, can be requested from Nuvoton - + * Philips/NXP SA56004X + Prefix: 'sa56004' + Addresses scanned: I2C 0x48 through 0x4F + Datasheet: Publicly available at NXP website + http://ics.nxp.com/products/interface/datasheet/sa56004x.pdf Author: Jean Delvare @@ -193,6 +197,9 @@ W83L771AWG/ASG * The AWG and ASG variants only differ in package format. * Diode ideality factor configuration (remote sensor) at 0xE3 +SA56004X: + * Better local resolution + All temperature values are given in degrees Celsius. Resolution is 1.0 degree for the local temperature, 0.125 degree for the remote temperature, except for the MAX6657, MAX6658 and MAX6659 which have a diff --git a/trunk/Documentation/hwmon/lm95245 b/trunk/Documentation/hwmon/lm95245 new file mode 100644 index 000000000000..cbd8aeab7124 --- /dev/null +++ b/trunk/Documentation/hwmon/lm95245 @@ -0,0 +1,33 @@ +Kernel driver lm95245 +================== + +Supported chips: + * National Semiconductor LM95245 + Addresses scanned: I2C 0x18, 0x19, 0x29, 0x4c, 0x4d + Datasheet: Publicly available at the National Semiconductor website + http://www.national.com/mpf/LM/LM95245.html + + +Author: Alexander Stein + +Description +----------- + +The LM95245 is an 11-bit digital temperature sensor with a 2-wire System +Management Bus (SMBus) interface and TruTherm technology that can monitor +the temperature of a remote diode as well as its own temperature. +The LM95245 can be used to very accurately monitor the temperature of +external devices such as microprocessors. + +All temperature values are given in millidegrees Celsius. Local temperature +is given within a range of -127 to +127.875 degrees. Remote temperatures are +given within a range of -127 to +255 degrees. Resolution depends on +temperature input and range. + +Each sensor has its own critical limit, but the hysteresis is common to all +two channels. + +The lm95245 driver can change its update interval to a fixed set of values. +It will round up to the next selectable interval. See the datasheet for exact +values. Reading sensor values more often will do no harm, but will return +'old' values. diff --git a/trunk/Documentation/hwmon/max16064 b/trunk/Documentation/hwmon/max16064 index 41728999e142..f6e8bcbfaccf 100644 --- a/trunk/Documentation/hwmon/max16064 +++ b/trunk/Documentation/hwmon/max16064 @@ -50,6 +50,8 @@ in[1-4]_min_alarm Voltage low alarm. From VOLTAGE_UV_WARNING status. in[1-4]_max_alarm Voltage high alarm. From VOLTAGE_OV_WARNING status. in[1-4]_lcrit_alarm Voltage critical low alarm. From VOLTAGE_UV_FAULT status. in[1-4]_crit_alarm Voltage critical high alarm. From VOLTAGE_OV_FAULT status. +in[1-4]_highest Historical maximum voltage. +in[1-4]_reset_history Write any value to reset history. temp1_input Measured temperature. From READ_TEMPERATURE_1 register. temp1_max Maximum temperature. From OT_WARN_LIMIT register. @@ -60,3 +62,5 @@ temp1_max_alarm Chip temperature high alarm. Set by comparing temp1_crit_alarm Chip temperature critical high alarm. Set by comparing READ_TEMPERATURE_1 with OT_FAULT_LIMIT if TEMP_OT_FAULT status is set. +temp1_highest Historical maximum temperature. +temp1_reset_history Write any value to reset history. diff --git a/trunk/Documentation/hwmon/max1668 b/trunk/Documentation/hwmon/max1668 new file mode 100644 index 000000000000..0616ed9758df --- /dev/null +++ b/trunk/Documentation/hwmon/max1668 @@ -0,0 +1,60 @@ +Kernel driver max1668 +===================== + +Supported chips: + * Maxim MAX1668, MAX1805 and MAX1989 + Prefix: 'max1668' + Addresses scanned: I2C 0x18, 0x19, 0x1a, 0x29, 0x2a, 0x2b, 0x4c, 0x4d, 0x4e + Datasheet: http://datasheets.maxim-ic.com/en/ds/MAX1668-MAX1989.pdf + +Author: + David George + +Description +----------- + +This driver implements support for the Maxim MAX1668, MAX1805 and MAX1989 +chips. + +The three devices are very similar, but the MAX1805 has a reduced feature +set; only two remote temperature inputs vs the four avaible on the other +two ICs. + +The driver is able to distinguish between the devices and creates sysfs +entries as follows: + +MAX1805, MAX1668 and MAX1989: + +temp1_input ro local (ambient) temperature +temp1_max rw local temperature maximum threshold for alarm +temp1_max_alarm ro local temperature maximum threshold alarm +temp1_min rw local temperature minimum threshold for alarm +temp1_min_alarm ro local temperature minimum threshold alarm +temp2_input ro remote temperature 1 +temp2_max rw remote temperature 1 maximum threshold for alarm +temp2_max_alarm ro remote temperature 1 maximum threshold alarm +temp2_min rw remote temperature 1 minimum threshold for alarm +temp2_min_alarm ro remote temperature 1 minimum threshold alarm +temp3_input ro remote temperature 2 +temp3_max rw remote temperature 2 maximum threshold for alarm +temp3_max_alarm ro remote temperature 2 maximum threshold alarm +temp3_min rw remote temperature 2 minimum threshold for alarm +temp3_min_alarm ro remote temperature 2 minimum threshold alarm + +MAX1668 and MAX1989 only: +temp4_input ro remote temperature 3 +temp4_max rw remote temperature 3 maximum threshold for alarm +temp4_max_alarm ro remote temperature 3 maximum threshold alarm +temp4_min rw remote temperature 3 minimum threshold for alarm +temp4_min_alarm ro remote temperature 3 minimum threshold alarm +temp5_input ro remote temperature 4 +temp5_max rw remote temperature 4 maximum threshold for alarm +temp5_max_alarm ro remote temperature 4 maximum threshold alarm +temp5_min rw remote temperature 4 minimum threshold for alarm +temp5_min_alarm ro remote temperature 4 minimum threshold alarm + +Module Parameters +----------------- + +* read_only: int + Set to non-zero if you wish to prevent write access to alarm thresholds. diff --git a/trunk/Documentation/hwmon/max34440 b/trunk/Documentation/hwmon/max34440 index 6c525dd07d59..8ab51536a1eb 100644 --- a/trunk/Documentation/hwmon/max34440 +++ b/trunk/Documentation/hwmon/max34440 @@ -56,6 +56,8 @@ in[1-6]_min_alarm Voltage low alarm. From VOLTAGE_UV_WARNING status. in[1-6]_max_alarm Voltage high alarm. From VOLTAGE_OV_WARNING status. in[1-6]_lcrit_alarm Voltage critical low alarm. From VOLTAGE_UV_FAULT status. in[1-6]_crit_alarm Voltage critical high alarm. From VOLTAGE_OV_FAULT status. +in[1-6]_highest Historical maximum voltage. +in[1-6]_reset_history Write any value to reset history. curr[1-6]_label "iout[1-6]". curr[1-6]_input Measured current. From READ_IOUT register. @@ -63,6 +65,8 @@ curr[1-6]_max Maximum current. From IOUT_OC_WARN_LIMIT register. curr[1-6]_crit Critical maximum current. From IOUT_OC_FAULT_LIMIT register. curr[1-6]_max_alarm Current high alarm. From IOUT_OC_WARNING status. curr[1-6]_crit_alarm Current critical high alarm. From IOUT_OC_FAULT status. +curr[1-6]_highest Historical maximum current. +curr[1-6]_reset_history Write any value to reset history. in6 and curr6 attributes only exist for MAX34440. @@ -75,5 +79,7 @@ temp[1-8]_max Maximum temperature. From OT_WARN_LIMIT register. temp[1-8]_crit Critical high temperature. From OT_FAULT_LIMIT register. temp[1-8]_max_alarm Temperature high alarm. temp[1-8]_crit_alarm Temperature critical high alarm. +temp[1-8]_highest Historical maximum temperature. +temp[1-8]_reset_history Write any value to reset history. temp7 and temp8 attributes only exist for MAX34440. diff --git a/trunk/Documentation/hwmon/max8688 b/trunk/Documentation/hwmon/max8688 index 0ddd3a412030..71ed10a3c94e 100644 --- a/trunk/Documentation/hwmon/max8688 +++ b/trunk/Documentation/hwmon/max8688 @@ -50,6 +50,8 @@ in1_min_alarm Voltage low alarm. From VOLTAGE_UV_WARNING status. in1_max_alarm Voltage high alarm. From VOLTAGE_OV_WARNING status. in1_lcrit_alarm Voltage critical low alarm. From VOLTAGE_UV_FAULT status. in1_crit_alarm Voltage critical high alarm. From VOLTAGE_OV_FAULT status. +in1_highest Historical maximum voltage. +in1_reset_history Write any value to reset history. curr1_label "iout1" curr1_input Measured current. From READ_IOUT register. @@ -57,6 +59,8 @@ curr1_max Maximum current. From IOUT_OC_WARN_LIMIT register. curr1_crit Critical maximum current. From IOUT_OC_FAULT_LIMIT register. curr1_max_alarm Current high alarm. From IOUT_OC_WARN_LIMIT register. curr1_crit_alarm Current critical high alarm. From IOUT_OC_FAULT status. +curr1_highest Historical maximum current. +curr1_reset_history Write any value to reset history. temp1_input Measured temperature. From READ_TEMPERATURE_1 register. temp1_max Maximum temperature. From OT_WARN_LIMIT register. @@ -67,3 +71,5 @@ temp1_max_alarm Chip temperature high alarm. Set by comparing temp1_crit_alarm Chip temperature critical high alarm. Set by comparing READ_TEMPERATURE_1 with OT_FAULT_LIMIT if TEMP_OT_FAULT status is set. +temp1_highest Historical maximum temperature. +temp1_reset_history Write any value to reset history. diff --git a/trunk/Documentation/hwmon/ntc_thermistor b/trunk/Documentation/hwmon/ntc_thermistor new file mode 100644 index 000000000000..3bfda94096fd --- /dev/null +++ b/trunk/Documentation/hwmon/ntc_thermistor @@ -0,0 +1,93 @@ +Kernel driver ntc_thermistor +================= + +Supported thermistors: +* Murata NTC Thermistors NCP15WB473, NCP18WB473, NCP21WB473, NCP03WB473, NCP15WL333 + Prefixes: 'ncp15wb473', 'ncp18wb473', 'ncp21wb473', 'ncp03wb473', 'ncp15wl333' + Datasheet: Publicly available at Murata + +Other NTC thermistors can be supported simply by adding compensation +tables; e.g., NCP15WL333 support is added by the table ncpXXwl333. + +Authors: + MyungJoo Ham + +Description +----------- + +The NTC thermistor is a simple thermistor that requires users to provide the +resistance and lookup the corresponding compensation table to get the +temperature input. + +The NTC driver provides lookup tables with a linear approximation function +and four circuit models with an option not to use any of the four models. + +The four circuit models provided are: + + $: resister, [TH]: the thermistor + + 1. connect = NTC_CONNECTED_POSITIVE, pullup_ohm > 0 + + [pullup_uV] + | | + [TH] $ (pullup_ohm) + | | + +----+-----------------------[read_uV] + | + $ (pulldown_ohm) + | + --- (ground) + + 2. connect = NTC_CONNECTED_POSITIVE, pullup_ohm = 0 (not-connected) + + [pullup_uV] + | + [TH] + | + +----------------------------[read_uV] + | + $ (pulldown_ohm) + | + --- (ground) + + 3. connect = NTC_CONNECTED_GROUND, pulldown_ohm > 0 + + [pullup_uV] + | + $ (pullup_ohm) + | + +----+-----------------------[read_uV] + | | + [TH] $ (pulldown_ohm) + | | + -------- (ground) + + 4. connect = NTC_CONNECTED_GROUND, pulldown_ohm = 0 (not-connected) + + [pullup_uV] + | + $ (pullup_ohm) + | + +----------------------------[read_uV] + | + [TH] + | + --- (ground) + +When one of the four circuit models is used, read_uV, pullup_uV, pullup_ohm, +pulldown_ohm, and connect should be provided. When none of the four models +are suitable or the user can get the resistance directly, the user should +provide read_ohm and _not_ provide the others. + +Sysfs Interface +--------------- +name the mandatory global attribute, the thermistor name. + +temp1_type always 4 (thermistor) + RO + +temp1_input measure the temperature and provide the measured value. + (reading this file initiates the reading procedure.) + RO + +Note that each NTC thermistor has only _one_ thermistor; thus, only temp1 exists. diff --git a/trunk/Documentation/hwmon/pmbus b/trunk/Documentation/hwmon/pmbus index 5e462fc7f99b..c36c1c1a62bb 100644 --- a/trunk/Documentation/hwmon/pmbus +++ b/trunk/Documentation/hwmon/pmbus @@ -13,6 +13,13 @@ Supported chips: Prefix: 'ltc2978' Addresses scanned: - Datasheet: http://cds.linear.com/docs/Datasheet/2978fa.pdf + * ON Semiconductor ADP4000, NCP4200, NCP4208 + Prefixes: 'adp4000', 'ncp4200', 'ncp4208' + Addresses scanned: - + Datasheets: + http://www.onsemi.com/pub_link/Collateral/ADP4000-D.PDF + http://www.onsemi.com/pub_link/Collateral/NCP4200-D.PDF + http://www.onsemi.com/pub_link/Collateral/JUNE%202009-%20REV.%200.PDF * Generic PMBus devices Prefix: 'pmbus' Addresses scanned: - diff --git a/trunk/Documentation/hwmon/sysfs-interface b/trunk/Documentation/hwmon/sysfs-interface index 8f63c244f1aa..a4aa8f600e09 100644 --- a/trunk/Documentation/hwmon/sysfs-interface +++ b/trunk/Documentation/hwmon/sysfs-interface @@ -139,6 +139,29 @@ in[0-*]_input Voltage input value. thumb: drivers should report the voltage values at the "pins" of the chip. +in[0-*]_average + Average voltage + Unit: millivolt + RO + +in[0-*]_lowest + Historical minimum voltage + Unit: millivolt + RO + +in[0-*]_highest + Historical maximum voltage + Unit: millivolt + RO + +in[0-*]_reset_history + Reset inX_lowest and inX_highest + WO + +in_reset_history + Reset inX_lowest and inX_highest for all sensors + WO + in[0-*]_label Suggested voltage channel label. Text string Should only be created if the driver has hints about what @@ -407,6 +430,29 @@ curr[1-*]_input Current input value Unit: milliampere RO +curr[1-*]_average + Average current use + Unit: milliampere + RO + +curr[1-*]_lowest + Historical minimum current + Unit: milliampere + RO + +curr[1-*]_highest + Historical maximum current + Unit: milliampere + RO + +curr[1-*]_reset_history + Reset currX_lowest and currX_highest + WO + +curr_reset_history + Reset currX_lowest and currX_highest for all sensors + WO + Also see the Alarms section for status flags associated with currents. ********* diff --git a/trunk/Documentation/kernel-parameters.txt b/trunk/Documentation/kernel-parameters.txt index 4ca93898fbd3..26a83743af19 100644 --- a/trunk/Documentation/kernel-parameters.txt +++ b/trunk/Documentation/kernel-parameters.txt @@ -2153,6 +2153,8 @@ bytes respectively. Such letter suffixes can also be entirely omitted. [HW,MOUSE] Controls Logitech smartscroll autorepeat. 0 = disabled, 1 = enabled (default). + pstore.backend= Specify the name of the pstore backend to use + pt. [PARIDE] See Documentation/blockdev/paride.txt. diff --git a/trunk/Documentation/md.txt b/trunk/Documentation/md.txt index f0eee83ff78a..fc94770f44ab 100644 --- a/trunk/Documentation/md.txt +++ b/trunk/Documentation/md.txt @@ -360,18 +360,20 @@ Each directory contains: A file recording the current state of the device in the array which can be a comma separated list of faulty - device has been kicked from active use due to - a detected fault + a detected fault or it has unacknowledged bad + blocks in_sync - device is a fully in-sync member of the array writemostly - device will only be subject to read requests if there are no other options. This applies only to raid1 arrays. - blocked - device has failed, metadata is "external", - and the failure hasn't been acknowledged yet. + blocked - device has failed, and the failure hasn't been + acknowledged yet by the metadata handler. Writes that would write to this device if it were not faulty are blocked. spare - device is working, but not a full member. This includes spares that are in the process of being recovered to + write_error - device has ever seen a write error. This list may grow in future. This can be written to. Writing "faulty" simulates a failure on the device. @@ -379,9 +381,11 @@ Each directory contains: Writing "writemostly" sets the writemostly flag. Writing "-writemostly" clears the writemostly flag. Writing "blocked" sets the "blocked" flag. - Writing "-blocked" clears the "blocked" flag and allows writes - to complete. + Writing "-blocked" clears the "blocked" flags and allows writes + to complete and possibly simulates an error. Writing "in_sync" sets the in_sync flag. + Writing "write_error" sets writeerrorseen flag. + Writing "-write_error" clears writeerrorseen flag. This file responds to select/poll. Any change to 'faulty' or 'blocked' causes an event. @@ -419,7 +423,6 @@ Each directory contains: written, it will be rejected. recovery_start - When the device is not 'in_sync', this records the number of sectors from the start of the device which are known to be correct. This is normally zero, but during a recovery @@ -435,6 +438,20 @@ Each directory contains: Setting this to 'none' is equivalent to setting 'in_sync'. Setting to any other value also clears the 'in_sync' flag. + bad_blocks + This gives the list of all known bad blocks in the form of + start address and length (in sectors respectively). If output + is too big to fit in a page, it will be truncated. Writing + "sector length" to this file adds new acknowledged (i.e. + recorded to disk safely) bad blocks. + + unacknowledged_bad_blocks + This gives the list of known-but-not-yet-saved-to-disk bad + blocks in the same form of 'bad_blocks'. If output is too big + to fit in a page, it will be truncated. Writing to this file + adds bad blocks without acknowledging them. This is largely + for testing. + An active md device will also contain and entry for each active device diff --git a/trunk/Documentation/media-framework.txt b/trunk/Documentation/media-framework.txt index 76a2087db205..669b5fb03a86 100644 --- a/trunk/Documentation/media-framework.txt +++ b/trunk/Documentation/media-framework.txt @@ -310,7 +310,7 @@ is non-immutable. The operation must either configure the hardware or store the configuration information to be applied later. Link configuration must not have any side effect on other links. If an enabled -link at a sink pad prevents another link at the same pad from being disabled, +link at a sink pad prevents another link at the same pad from being enabled, the link_setup operation must return -EBUSY and can't implicitly disable the first enabled link. diff --git a/trunk/Documentation/scsi/ChangeLog.megaraid_sas b/trunk/Documentation/scsi/ChangeLog.megaraid_sas index 9ed1d9d96783..1b6e27ddb7f3 100644 --- a/trunk/Documentation/scsi/ChangeLog.megaraid_sas +++ b/trunk/Documentation/scsi/ChangeLog.megaraid_sas @@ -1,3 +1,11 @@ +Release Date : Tue. Jul 26, 2011 17:00:00 PST 2010 - + (emaild-id:megaraidlinux@lsi.com) + Adam Radford +Current Version : 00.00.05.40-rc1 +Old Version : 00.00.05.38-rc1 + 1. Fix FastPath I/O to work with degraded RAID 1. + 2. Add .change_queue_depth support. +------------------------------------------------------------------------------- Release Date : Wed. May 11, 2011 17:00:00 PST 2010 - (emaild-id:megaraidlinux@lsi.com) Adam Radford diff --git a/trunk/Documentation/security/keys-ecryptfs.txt b/trunk/Documentation/security/keys-ecryptfs.txt new file mode 100644 index 000000000000..c3bbeba63562 --- /dev/null +++ b/trunk/Documentation/security/keys-ecryptfs.txt @@ -0,0 +1,68 @@ + Encrypted keys for the eCryptfs filesystem + +ECryptfs is a stacked filesystem which transparently encrypts and decrypts each +file using a randomly generated File Encryption Key (FEK). + +Each FEK is in turn encrypted with a File Encryption Key Encryption Key (FEFEK) +either in kernel space or in user space with a daemon called 'ecryptfsd'. In +the former case the operation is performed directly by the kernel CryptoAPI +using a key, the FEFEK, derived from a user prompted passphrase; in the latter +the FEK is encrypted by 'ecryptfsd' with the help of external libraries in order +to support other mechanisms like public key cryptography, PKCS#11 and TPM based +operations. + +The data structure defined by eCryptfs to contain information required for the +FEK decryption is called authentication token and, currently, can be stored in a +kernel key of the 'user' type, inserted in the user's session specific keyring +by the userspace utility 'mount.ecryptfs' shipped with the package +'ecryptfs-utils'. + +The 'encrypted' key type has been extended with the introduction of the new +format 'ecryptfs' in order to be used in conjunction with the eCryptfs +filesystem. Encrypted keys of the newly introduced format store an +authentication token in its payload with a FEFEK randomly generated by the +kernel and protected by the parent master key. + +In order to avoid known-plaintext attacks, the datablob obtained through +commands 'keyctl print' or 'keyctl pipe' does not contain the overall +authentication token, which content is well known, but only the FEFEK in +encrypted form. + +The eCryptfs filesystem may really benefit from using encrypted keys in that the +required key can be securely generated by an Administrator and provided at boot +time after the unsealing of a 'trusted' key in order to perform the mount in a +controlled environment. Another advantage is that the key is not exposed to +threats of malicious software, because it is available in clear form only at +kernel level. + +Usage: + keyctl add encrypted name "new ecryptfs key-type:master-key-name keylen" ring + keyctl add encrypted name "load hex_blob" ring + keyctl update keyid "update key-type:master-key-name" + +name:= '<16 hexadecimal characters>' +key-type:= 'trusted' | 'user' +keylen:= 64 + + +Example of encrypted key usage with the eCryptfs filesystem: + +Create an encrypted key "1000100010001000" of length 64 bytes with format +'ecryptfs' and save it using a previously loaded user key "test": + + $ keyctl add encrypted 1000100010001000 "new ecryptfs user:test 64" @u + 19184530 + + $ keyctl print 19184530 + ecryptfs user:test 64 490045d4bfe48c99f0d465fbbbb79e7500da954178e2de0697 + dd85091f5450a0511219e9f7cd70dcd498038181466f78ac8d4c19504fcc72402bfc41c2 + f253a41b7507ccaa4b2b03fff19a69d1cc0b16e71746473f023a95488b6edfd86f7fdd40 + 9d292e4bacded1258880122dd553a661 + + $ keyctl pipe 19184530 > ecryptfs.blob + +Mount an eCryptfs filesystem using the created encrypted key "1000100010001000" +into the '/secret' directory: + + $ mount -i -t ecryptfs -oecryptfs_sig=1000100010001000,\ + ecryptfs_cipher=aes,ecryptfs_key_bytes=32 /secret /secret diff --git a/trunk/Documentation/security/keys-trusted-encrypted.txt b/trunk/Documentation/security/keys-trusted-encrypted.txt index 8fb79bc1ac4b..5f50ccabfc8a 100644 --- a/trunk/Documentation/security/keys-trusted-encrypted.txt +++ b/trunk/Documentation/security/keys-trusted-encrypted.txt @@ -53,12 +53,19 @@ they are only as secure as the user key encrypting them. The master user key should therefore be loaded in as secure a way as possible, preferably early in boot. +The decrypted portion of encrypted keys can contain either a simple symmetric +key or a more complex structure. The format of the more complex structure is +application specific, which is identified by 'format'. + Usage: - keyctl add encrypted name "new key-type:master-key-name keylen" ring - keyctl add encrypted name "load hex_blob" ring - keyctl update keyid "update key-type:master-key-name" + keyctl add encrypted name "new [format] key-type:master-key-name keylen" + ring + keyctl add encrypted name "load hex_blob" ring + keyctl update keyid "update key-type:master-key-name" + +format:= 'default | ecryptfs' +key-type:= 'trusted' | 'user' -where 'key-type' is either 'trusted' or 'user'. Examples of trusted and encrypted key usage: @@ -114,15 +121,25 @@ Reseal a trusted key under new pcr values: 7ef6a24defe4846104209bf0c3eced7fa1a672ed5b125fc9d8cd88b476a658a4434644ef df8ae9a178e9f83ba9f08d10fa47e4226b98b0702f06b3b8 -Create and save an encrypted key "evm" using the above trusted key "kmk": +The initial consumer of trusted keys is EVM, which at boot time needs a high +quality symmetric key for HMAC protection of file metadata. The use of a +trusted key provides strong guarantees that the EVM key has not been +compromised by a user level problem, and when sealed to specific boot PCR +values, protects against boot and offline attacks. Create and save an +encrypted key "evm" using the above trusted key "kmk": +option 1: omitting 'format' $ keyctl add encrypted evm "new trusted:kmk 32" @u 159771175 +option 2: explicitly defining 'format' as 'default' + $ keyctl add encrypted evm "new default trusted:kmk 32" @u + 159771175 + $ keyctl print 159771175 - trusted:kmk 32 2375725ad57798846a9bbd240de8906f006e66c03af53b1b382dbbc55 - be2a44616e4959430436dc4f2a7a9659aa60bb4652aeb2120f149ed197c564e024717c64 - 5972dcb82ab2dde83376d82b2e3c09ffc + default trusted:kmk 32 2375725ad57798846a9bbd240de8906f006e66c03af53b1b3 + 82dbbc55be2a44616e4959430436dc4f2a7a9659aa60bb4652aeb2120f149ed197c564e0 + 24717c64 5972dcb82ab2dde83376d82b2e3c09ffc $ keyctl pipe 159771175 > evm.blob @@ -132,14 +149,11 @@ Load an encrypted key "evm" from saved blob: 831684262 $ keyctl print 831684262 - trusted:kmk 32 2375725ad57798846a9bbd240de8906f006e66c03af53b1b382dbbc55 - be2a44616e4959430436dc4f2a7a9659aa60bb4652aeb2120f149ed197c564e024717c64 - 5972dcb82ab2dde83376d82b2e3c09ffc - - -The initial consumer of trusted keys is EVM, which at boot time needs a high -quality symmetric key for HMAC protection of file metadata. The use of a -trusted key provides strong guarantees that the EVM key has not been -compromised by a user level problem, and when sealed to specific boot PCR -values, protects against boot and offline attacks. Other uses for trusted and -encrypted keys, such as for disk and file encryption are anticipated. + default trusted:kmk 32 2375725ad57798846a9bbd240de8906f006e66c03af53b1b3 + 82dbbc55be2a44616e4959430436dc4f2a7a9659aa60bb4652aeb2120f149ed197c564e0 + 24717c64 5972dcb82ab2dde83376d82b2e3c09ffc + +Other uses for trusted and encrypted keys, such as for disk and file encryption +are anticipated. In particular the new format 'ecryptfs' has been defined in +in order to use encrypted keys to mount an eCryptfs filesystem. More details +about the usage can be found in the file 'Documentation/keys-ecryptfs.txt'. diff --git a/trunk/Documentation/video4linux/API.html b/trunk/Documentation/video4linux/API.html index d72fd2aa9158..256f8efa992c 100644 --- a/trunk/Documentation/video4linux/API.html +++ b/trunk/Documentation/video4linux/API.html @@ -9,7 +9,7 @@

Video For Linux APIs

- V4L original API + V4L original API Obsoleted by V4L2 API diff --git a/trunk/Documentation/video4linux/CARDLIST.cx23885 b/trunk/Documentation/video4linux/CARDLIST.cx23885 index 87c46347bd63..8910449d23a8 100644 --- a/trunk/Documentation/video4linux/CARDLIST.cx23885 +++ b/trunk/Documentation/video4linux/CARDLIST.cx23885 @@ -27,3 +27,5 @@ 26 -> Hauppauge WinTV-HVR1290 [0070:8551] 27 -> Mygica X8558 PRO DMB-TH [14f1:8578] 28 -> LEADTEK WinFast PxTV1200 [107d:6f22] + 29 -> GoTView X5 3D Hybrid [5654:2390] + 30 -> NetUP Dual DVB-T/C-CI RF [1b55:e2e4] diff --git a/trunk/Documentation/video4linux/CARDLIST.cx88 b/trunk/Documentation/video4linux/CARDLIST.cx88 index 42517d9121de..d9c0f119196d 100644 --- a/trunk/Documentation/video4linux/CARDLIST.cx88 +++ b/trunk/Documentation/video4linux/CARDLIST.cx88 @@ -84,3 +84,4 @@ 83 -> Prof 7301 DVB-S/S2 [b034:3034] 84 -> Samsung SMT 7020 DVB-S [18ac:dc00,18ac:dccd] 85 -> Twinhan VP-1027 DVB-S [1822:0023] + 86 -> TeVii S464 DVB-S/S2 [d464:9022] diff --git a/trunk/Documentation/video4linux/CARDLIST.em28xx b/trunk/Documentation/video4linux/CARDLIST.em28xx index 9aae449440dc..4a7b3df6d8bd 100644 --- a/trunk/Documentation/video4linux/CARDLIST.em28xx +++ b/trunk/Documentation/video4linux/CARDLIST.em28xx @@ -74,3 +74,5 @@ 74 -> Actionmaster/LinXcel/Digitus VC211A (em2800) 75 -> Dikom DK300 (em2882) 76 -> KWorld PlusTV 340U or UB435-Q (ATSC) (em2870) [1b80:a340] + 77 -> EM2874 Leadership ISDBT (em2874) + 78 -> PCTV nanoStick T2 290e (em28174) diff --git a/trunk/Documentation/video4linux/CARDLIST.saa7134 b/trunk/Documentation/video4linux/CARDLIST.saa7134 index 6b4c72d8862d..7efae9bd73ed 100644 --- a/trunk/Documentation/video4linux/CARDLIST.saa7134 +++ b/trunk/Documentation/video4linux/CARDLIST.saa7134 @@ -182,3 +182,7 @@ 181 -> TechoTrend TT-budget T-3000 [13c2:2804] 182 -> Kworld PCI SBTVD/ISDB-T Full-Seg Hybrid [17de:b136] 183 -> Compro VideoMate Vista M1F [185b:c900] +184 -> Encore ENLTV-FM 3 [1a7f:2108] +185 -> MagicPro ProHDTV Pro2 DMB-TH/Hybrid [17de:d136] +186 -> Beholder BeholdTV 501 [5ace:5010] +187 -> Beholder BeholdTV 503 FM [5ace:5030] diff --git a/trunk/Documentation/video4linux/CARDLIST.tuner b/trunk/Documentation/video4linux/CARDLIST.tuner index e67c1db96854..6323b7a20719 100644 --- a/trunk/Documentation/video4linux/CARDLIST.tuner +++ b/trunk/Documentation/video4linux/CARDLIST.tuner @@ -78,8 +78,10 @@ tuner=77 - TCL tuner MF02GIP-5N-E tuner=78 - Philips FMD1216MEX MK3 Hybrid Tuner tuner=79 - Philips PAL/SECAM multi (FM1216 MK5) tuner=80 - Philips FQ1216LME MK3 PAL/SECAM w/active loopthrough +tuner=81 - Xceive 4000 tuner tuner=81 - Partsnic (Daewoo) PTI-5NF05 tuner=82 - Philips CU1216L tuner=83 - NXP TDA18271 tuner=84 - Sony BTF-Pxn01Z tuner=85 - Philips FQ1236 MK5 +tuner=86 - Tena TNF5337 MFD diff --git a/trunk/Documentation/video4linux/CARDLIST.usbvision b/trunk/Documentation/video4linux/CARDLIST.usbvision index 0b72d3fee17e..6fd1af365142 100644 --- a/trunk/Documentation/video4linux/CARDLIST.usbvision +++ b/trunk/Documentation/video4linux/CARDLIST.usbvision @@ -63,3 +63,5 @@ 62 -> Pinnacle PCTV Bungee USB (PAL) FM [2304:0419] 63 -> Hauppauge WinTv-USB [2400:4200] 64 -> Pinnacle Studio PCTV USB (NTSC) FM V3 [2304:0113] + 65 -> Nogatech USB MicroCam NTSC (NV3000N) [0573:3000] + 66 -> Nogatech USB MicroCam PAL (NV3001P) [0573:3001] diff --git a/trunk/Documentation/video4linux/README.davinci-vpbe b/trunk/Documentation/video4linux/README.davinci-vpbe new file mode 100644 index 000000000000..7a460b0685bb --- /dev/null +++ b/trunk/Documentation/video4linux/README.davinci-vpbe @@ -0,0 +1,93 @@ + + VPBE V4L2 driver design + ====================================================================== + + File partitioning + ----------------- + V4L2 display device driver + drivers/media/video/davinci/vpbe_display.c + drivers/media/video/davinci/vpbe_display.h + + VPBE display controller + drivers/media/video/davinci/vpbe.c + drivers/media/video/davinci/vpbe.h + + VPBE venc sub device driver + drivers/media/video/davinci/vpbe_venc.c + drivers/media/video/davinci/vpbe_venc.h + drivers/media/video/davinci/vpbe_venc_regs.h + + VPBE osd driver + drivers/media/video/davinci/vpbe_osd.c + drivers/media/video/davinci/vpbe_osd.h + drivers/media/video/davinci/vpbe_osd_regs.h + + Functional partitioning + ----------------------- + + Consists of the following (in the same order as the list under file + partitioning):- + + 1. V4L2 display driver + Implements creation of video2 and video3 device nodes and + provides v4l2 device interface to manage VID0 and VID1 layers. + + 2. Display controller + Loads up VENC, OSD and external encoders such as ths8200. It provides + a set of API calls to V4L2 drivers to set the output/standards + in the VENC or external sub devices. It also provides + a device object to access the services from OSD subdevice + using sub device ops. The connection of external encoders to VENC LCD + controller port is done at init time based on default output and standard + selection or at run time when application change the output through + V4L2 IOCTLs. + + When connected to an external encoder, vpbe controller is also responsible + for setting up the interface between VENC and external encoders based on + board specific settings (specified in board-xxx-evm.c). This allows + interfacing external encoders such as ths8200. The setup_if_config() + is implemented for this as well as configure_venc() (part of the next patch) + API to set timings in VENC for a specific display resolution. As of this + patch series, the interconnection and enabling and setting of the external + encoders is not present, and would be a part of the next patch series. + + 3. VENC subdevice module + Responsible for setting outputs provided through internal DACs and also + setting timings at LCD controller port when external encoders are connected + at the port or LCD panel timings required. When external encoder/LCD panel + is connected, the timings for a specific standard/preset is retrieved from + the board specific table and the values are used to set the timings in + venc using non-standard timing mode. + + Support LCD Panel displays using the VENC. For example to support a Logic + PD display, it requires setting up the LCD controller port with a set of + timings for the resolution supported and setting the dot clock. So we could + add the available outputs as a board specific entry (i.e add the "LogicPD" + output name to board-xxx-evm.c). A table of timings for various LCDs + supported can be maintained in the board specific setup file to support + various LCD displays.As of this patch a basic driver is present, and this + support for external encoders and displays forms a part of the next + patch series. + + 4. OSD module + OSD module implements all OSD layer management and hardware specific + features. The VPBE module interacts with the OSD for enabling and + disabling appropriate features of the OSD. + + Current status:- + + A fully functional working version of the V4L2 driver is available. This + driver has been tested with NTSC and PAL standards and buffer streaming. + + Following are TBDs. + + vpbe display controller + - Add support for external encoders. + - add support for selecting external encoder as default at probe time. + + vpbe venc sub device + - add timings for supporting ths8200 + - add support for LogicPD LCD. + + FB drivers + - Add support for fbdev drivers.- Ready and part of subsequent patches. diff --git a/trunk/Documentation/video4linux/v4l2-controls.txt b/trunk/Documentation/video4linux/v4l2-controls.txt index 881e7f44491b..9346fc8cbf2b 100644 --- a/trunk/Documentation/video4linux/v4l2-controls.txt +++ b/trunk/Documentation/video4linux/v4l2-controls.txt @@ -277,16 +277,13 @@ implement g_volatile_ctrl like this: { switch (ctrl->id) { case V4L2_CID_BRIGHTNESS: - ctrl->cur.val = read_reg(0x123); + ctrl->val = read_reg(0x123); break; } } -The 'new value' union is not used in g_volatile_ctrl. In general controls -that need to implement g_volatile_ctrl are read-only controls. - -Note that if one or more controls in a control cluster are marked as volatile, -then all the controls in the cluster are seen as volatile. +Note that you use the 'new value' union as well in g_volatile_ctrl. In general +controls that need to implement g_volatile_ctrl are read-only controls. To mark a control as volatile you have to set the is_volatile flag: @@ -453,6 +450,25 @@ In the example above the following are equivalent for the VOLUME case: ctrl == ctrl->cluster[AUDIO_CL_VOLUME] == state->audio_cluster[AUDIO_CL_VOLUME] ctrl->cluster[AUDIO_CL_MUTE] == state->audio_cluster[AUDIO_CL_MUTE] +In practice using cluster arrays like this becomes very tiresome. So instead +the following equivalent method is used: + + struct { + /* audio cluster */ + struct v4l2_ctrl *volume; + struct v4l2_ctrl *mute; + }; + +The anonymous struct is used to clearly 'cluster' these two control pointers, +but it serves no other purpose. The effect is the same as creating an +array with two control pointers. So you can just do: + + state->volume = v4l2_ctrl_new_std(&state->ctrl_handler, ...); + state->mute = v4l2_ctrl_new_std(&state->ctrl_handler, ...); + v4l2_ctrl_cluster(2, &state->volume); + +And in foo_s_ctrl you can use these pointers directly: state->mute->val. + Note that controls in a cluster may be NULL. For example, if for some reason mute was never added (because the hardware doesn't support that particular feature), then mute will be NULL. So in that case we have a @@ -475,6 +491,43 @@ controls, then the 'is_new' flag would be 1 for both controls. The 'is_new' flag is always 1 when called from v4l2_ctrl_handler_setup(). +Handling autogain/gain-type Controls with Auto Clusters +======================================================= + +A common type of control cluster is one that handles 'auto-foo/foo'-type +controls. Typical examples are autogain/gain, autoexposure/exposure, +autowhitebalance/red balance/blue balance. In all cases you have one controls +that determines whether another control is handled automatically by the hardware, +or whether it is under manual control from the user. + +If the cluster is in automatic mode, then the manual controls should be +marked inactive. When the volatile controls are read the g_volatile_ctrl +operation should return the value that the hardware's automatic mode set up +automatically. + +If the cluster is put in manual mode, then the manual controls should become +active again and the is_volatile flag should be ignored (so g_volatile_ctrl is +no longer called while in manual mode). + +Finally the V4L2_CTRL_FLAG_UPDATE should be set for the auto control since +changing that control affects the control flags of the manual controls. + +In order to simplify this a special variation of v4l2_ctrl_cluster was +introduced: + +void v4l2_ctrl_auto_cluster(unsigned ncontrols, struct v4l2_ctrl **controls, + u8 manual_val, bool set_volatile); + +The first two arguments are identical to v4l2_ctrl_cluster. The third argument +tells the framework which value switches the cluster into manual mode. The +last argument will optionally set the is_volatile flag for the non-auto controls. + +The first control of the cluster is assumed to be the 'auto' control. + +Using this function will ensure that you don't need to handle all the complex +flag and volatile handling. + + VIDIOC_LOG_STATUS Support ========================= @@ -636,9 +689,7 @@ button controls are write-only controls. -EINVAL as the spec says. 5) The spec does not mention what should happen when you try to set/get a -control class controls. ivtv currently returns -EINVAL (indicating that the -control ID does not exist) while the framework will return -EACCES, which -makes more sense. +control class controls. The framework will return -EACCES. Proposals for Extensions diff --git a/trunk/Documentation/video4linux/v4l2-framework.txt b/trunk/Documentation/video4linux/v4l2-framework.txt index cf21f7aae976..f8dcabf7852c 100644 --- a/trunk/Documentation/video4linux/v4l2-framework.txt +++ b/trunk/Documentation/video4linux/v4l2-framework.txt @@ -817,11 +817,7 @@ int my_open(struct file *file) ... - ret = v4l2_fh_init(&my_fh->fh, vfd); - if (ret) { - kfree(my_fh); - return ret; - } + v4l2_fh_init(&my_fh->fh, vfd); ... @@ -844,7 +840,7 @@ int my_release(struct file *file) Below is a short description of the v4l2_fh functions used: -int v4l2_fh_init(struct v4l2_fh *fh, struct video_device *vdev) +void v4l2_fh_init(struct v4l2_fh *fh, struct video_device *vdev) Initialise the file handle. This *MUST* be performed in the driver's v4l2_file_operations->open() handler. @@ -901,14 +897,38 @@ V4L2 events The V4L2 events provide a generic way to pass events to user space. The driver must use v4l2_fh to be able to support V4L2 events. -Useful functions: +Events are defined by a type and an optional ID. The ID may refer to a V4L2 +object such as a control ID. If unused, then the ID is 0. + +When the user subscribes to an event the driver will allocate a number of +kevent structs for that event. So every (type, ID) event tuple will have +its own set of kevent structs. This guarantees that if a driver is generating +lots of events of one type in a short time, then that will not overwrite +events of another type. + +But if you get more events of one type than the number of kevents that were +reserved, then the oldest event will be dropped and the new one added. + +Furthermore, the internal struct v4l2_subscribed_event has merge() and +replace() callbacks which drivers can set. These callbacks are called when +a new event is raised and there is no more room. The replace() callback +allows you to replace the payload of the old event with that of the new event, +merging any relevant data from the old payload into the new payload that +replaces it. It is called when this event type has only one kevent struct +allocated. The merge() callback allows you to merge the oldest event payload +into that of the second-oldest event payload. It is called when there are two +or more kevent structs allocated. -- v4l2_event_alloc() +This way no status information is lost, just the intermediate steps leading +up to that state. - To use events, the driver must allocate events for the file handle. By - calling the function more than once, the driver may assure that at least n - events in total have been allocated. The function may not be called in - atomic context. +A good example of these replace/merge callbacks is in v4l2-event.c: +ctrls_replace() and ctrls_merge() callbacks for the control event. + +Note: these callbacks can be called from interrupt context, so they must be +fast. + +Useful functions: - v4l2_event_queue() @@ -920,7 +940,9 @@ Useful functions: The video_device->ioctl_ops->vidioc_subscribe_event must check the driver is able to produce events with specified event id. Then it calls - v4l2_event_subscribe() to subscribe the event. + v4l2_event_subscribe() to subscribe the event. The last argument is the + size of the event queue for this event. If it is 0, then the framework + will fill in a default value (this depends on the event type). - v4l2_event_unsubscribe() @@ -935,14 +957,8 @@ Useful functions: Returns the number of pending events. Useful when implementing poll. -Drivers do not initialise events directly. The events are initialised -through v4l2_fh_init() if video_device->ioctl_ops->vidioc_subscribe_event is -non-NULL. This *MUST* be performed in the driver's -v4l2_file_operations->open() handler. - Events are delivered to user space through the poll system call. The driver -can use v4l2_fh->events->wait wait_queue_head_t as the argument for -poll_wait(). +can use v4l2_fh->wait (a wait_queue_head_t) as the argument for poll_wait(). There are standard and private events. New standard events must use the smallest available event type. The drivers must allocate their events from @@ -952,5 +968,4 @@ The first event type in the class is reserved for future use, so the first available event type is 'class base + 1'. An example on how the V4L2 events may be used can be found in the OMAP -3 ISP driver available at as of -writing this. +3 ISP driver (drivers/media/video/omap3isp). diff --git a/trunk/Documentation/watchdog/00-INDEX b/trunk/Documentation/watchdog/00-INDEX index ee994513a9b1..fc51128071c2 100644 --- a/trunk/Documentation/watchdog/00-INDEX +++ b/trunk/Documentation/watchdog/00-INDEX @@ -8,6 +8,8 @@ src/ - directory holding watchdog related example programs. watchdog-api.txt - description of the Linux Watchdog driver API. +watchdog-kernel-api.txt + - description of the Linux WatchDog Timer Driver Core kernel API. watchdog-parameters.txt - information on driver parameters (for drivers other than the ones that have driver-specific files here) diff --git a/trunk/Documentation/watchdog/watchdog-kernel-api.txt b/trunk/Documentation/watchdog/watchdog-kernel-api.txt new file mode 100644 index 000000000000..4f7c894244d2 --- /dev/null +++ b/trunk/Documentation/watchdog/watchdog-kernel-api.txt @@ -0,0 +1,162 @@ +The Linux WatchDog Timer Driver Core kernel API. +=============================================== +Last reviewed: 22-Jul-2011 + +Wim Van Sebroeck + +Introduction +------------ +This document does not describe what a WatchDog Timer (WDT) Driver or Device is. +It also does not describe the API which can be used by user space to communicate +with a WatchDog Timer. If you want to know this then please read the following +file: Documentation/watchdog/watchdog-api.txt . + +So what does this document describe? It describes the API that can be used by +WatchDog Timer Drivers that want to use the WatchDog Timer Driver Core +Framework. This framework provides all interfacing towards user space so that +the same code does not have to be reproduced each time. This also means that +a watchdog timer driver then only needs to provide the different routines +(operations) that control the watchdog timer (WDT). + +The API +------- +Each watchdog timer driver that wants to use the WatchDog Timer Driver Core +must #include (you would have to do this anyway when +writing a watchdog device driver). This include file contains following +register/unregister routines: + +extern int watchdog_register_device(struct watchdog_device *); +extern void watchdog_unregister_device(struct watchdog_device *); + +The watchdog_register_device routine registers a watchdog timer device. +The parameter of this routine is a pointer to a watchdog_device structure. +This routine returns zero on success and a negative errno code for failure. + +The watchdog_unregister_device routine deregisters a registered watchdog timer +device. The parameter of this routine is the pointer to the registered +watchdog_device structure. + +The watchdog device structure looks like this: + +struct watchdog_device { + const struct watchdog_info *info; + const struct watchdog_ops *ops; + unsigned int bootstatus; + unsigned int timeout; + unsigned int min_timeout; + unsigned int max_timeout; + void *driver_data; + unsigned long status; +}; + +It contains following fields: +* info: a pointer to a watchdog_info structure. This structure gives some + additional information about the watchdog timer itself. (Like it's unique name) +* ops: a pointer to the list of watchdog operations that the watchdog supports. +* timeout: the watchdog timer's timeout value (in seconds). +* min_timeout: the watchdog timer's minimum timeout value (in seconds). +* max_timeout: the watchdog timer's maximum timeout value (in seconds). +* bootstatus: status of the device after booting (reported with watchdog + WDIOF_* status bits). +* driver_data: a pointer to the drivers private data of a watchdog device. + This data should only be accessed via the watchdog_set_drvadata and + watchdog_get_drvdata routines. +* status: this field contains a number of status bits that give extra + information about the status of the device (Like: is the watchdog timer + running/active, is the nowayout bit set, is the device opened via + the /dev/watchdog interface or not, ...). + +The list of watchdog operations is defined as: + +struct watchdog_ops { + struct module *owner; + /* mandatory operations */ + int (*start)(struct watchdog_device *); + int (*stop)(struct watchdog_device *); + /* optional operations */ + int (*ping)(struct watchdog_device *); + unsigned int (*status)(struct watchdog_device *); + int (*set_timeout)(struct watchdog_device *, unsigned int); + long (*ioctl)(struct watchdog_device *, unsigned int, unsigned long); +}; + +It is important that you first define the module owner of the watchdog timer +driver's operations. This module owner will be used to lock the module when +the watchdog is active. (This to avoid a system crash when you unload the +module and /dev/watchdog is still open). +Some operations are mandatory and some are optional. The mandatory operations +are: +* start: this is a pointer to the routine that starts the watchdog timer + device. + The routine needs a pointer to the watchdog timer device structure as a + parameter. It returns zero on success or a negative errno code for failure. +* stop: with this routine the watchdog timer device is being stopped. + The routine needs a pointer to the watchdog timer device structure as a + parameter. It returns zero on success or a negative errno code for failure. + Some watchdog timer hardware can only be started and not be stopped. The + driver supporting this hardware needs to make sure that a start and stop + routine is being provided. This can be done by using a timer in the driver + that regularly sends a keepalive ping to the watchdog timer hardware. + +Not all watchdog timer hardware supports the same functionality. That's why +all other routines/operations are optional. They only need to be provided if +they are supported. These optional routines/operations are: +* ping: this is the routine that sends a keepalive ping to the watchdog timer + hardware. + The routine needs a pointer to the watchdog timer device structure as a + parameter. It returns zero on success or a negative errno code for failure. + Most hardware that does not support this as a separate function uses the + start function to restart the watchdog timer hardware. And that's also what + the watchdog timer driver core does: to send a keepalive ping to the watchdog + timer hardware it will either use the ping operation (when available) or the + start operation (when the ping operation is not available). + (Note: the WDIOC_KEEPALIVE ioctl call will only be active when the + WDIOF_KEEPALIVEPING bit has been set in the option field on the watchdog's + info structure). +* status: this routine checks the status of the watchdog timer device. The + status of the device is reported with watchdog WDIOF_* status flags/bits. +* set_timeout: this routine checks and changes the timeout of the watchdog + timer device. It returns 0 on success, -EINVAL for "parameter out of range" + and -EIO for "could not write value to the watchdog". On success the timeout + value of the watchdog_device will be changed to the value that was just used + to re-program the watchdog timer device. + (Note: the WDIOF_SETTIMEOUT needs to be set in the options field of the + watchdog's info structure). +* ioctl: if this routine is present then it will be called first before we do + our own internal ioctl call handling. This routine should return -ENOIOCTLCMD + if a command is not supported. The parameters that are passed to the ioctl + call are: watchdog_device, cmd and arg. + +The status bits should (preferably) be set with the set_bit and clear_bit alike +bit-operations. The status bits that are defined are: +* WDOG_ACTIVE: this status bit indicates whether or not a watchdog timer device + is active or not. When the watchdog is active after booting, then you should + set this status bit (Note: when you register the watchdog timer device with + this bit set, then opening /dev/watchdog will skip the start operation) +* WDOG_DEV_OPEN: this status bit shows whether or not the watchdog device + was opened via /dev/watchdog. + (This bit should only be used by the WatchDog Timer Driver Core). +* WDOG_ALLOW_RELEASE: this bit stores whether or not the magic close character + has been sent (so that we can support the magic close feature). + (This bit should only be used by the WatchDog Timer Driver Core). +* WDOG_NO_WAY_OUT: this bit stores the nowayout setting for the watchdog. + If this bit is set then the watchdog timer will not be able to stop. + +Note: The WatchDog Timer Driver Core supports the magic close feature and +the nowayout feature. To use the magic close feature you must set the +WDIOF_MAGICCLOSE bit in the options field of the watchdog's info structure. +The nowayout feature will overrule the magic close feature. + +To get or set driver specific data the following two helper functions should be +used: + +static inline void watchdog_set_drvdata(struct watchdog_device *wdd, void *data) +static inline void *watchdog_get_drvdata(struct watchdog_device *wdd) + +The watchdog_set_drvdata function allows you to add driver specific data. The +arguments of this function are the watchdog device where you want to add the +driver specific data to and a pointer to the data itself. + +The watchdog_get_drvdata function allows you to retrieve driver specific data. +The argument of this function is the watchdog device where you want to retrieve +data from. The function retruns the pointer to the driver specific data. diff --git a/trunk/MAINTAINERS b/trunk/MAINTAINERS index 7b2e9e85e427..c9c6324a7a9f 100644 --- a/trunk/MAINTAINERS +++ b/trunk/MAINTAINERS @@ -1925,6 +1925,12 @@ S: Maintained F: arch/x86/kernel/cpuid.c F: arch/x86/kernel/msr.c +CPU POWER MONITORING SUBSYSTEM +M: Dominik Brodowski +M: Thomas Renninger +S: Maintained +F: tools/power/cpupower + CPUSETS M: Paul Menage W: http://www.bullopensource.org/cpuset/ @@ -4150,6 +4156,13 @@ S: Orphan F: drivers/video/matrox/matroxfb_* F: include/linux/matroxfb.h +MAX1668 TEMPERATURE SENSOR DRIVER +M: "David George" +L: lm-sensors@lm-sensors.org +S: Maintained +F: Documentation/hwmon/max1668 +F: drivers/hwmon/max1668.c + MAX6650 HARDWARE MONITOR AND FAN CONTROLLER DRIVER M: "Hans J. Koch" L: lm-sensors@lm-sensors.org @@ -4999,6 +5012,17 @@ F: drivers/i2c/busses/i2c-puv3.c F: drivers/video/fb-puv3.c F: drivers/rtc/rtc-puv3.c +PMBUS HARDWARE MONITORING DRIVERS +M: Guenter Roeck +L: lm-sensors@lm-sensors.org +W: http://www.lm-sensors.org/ +W: http://www.roeck-us.net/linux/drivers/ +T: git git://git.kernel.org/pub/scm/linux/kernel/git/groeck/linux-staging.git +S: Maintained +F: Documentation/hwmon/pmbus +F: drivers/hwmon/pmbus/ +F: include/linux/i2c/pmbus.h + PMC SIERRA MaxRAID DRIVER M: Anil Ravindranath L: linux-scsi@vger.kernel.org @@ -6408,7 +6432,7 @@ L: tomoyo-users-en@lists.sourceforge.jp (subscribers-only, for users in English) L: tomoyo-dev@lists.sourceforge.jp (subscribers-only, for developers in Japanese) L: tomoyo-users@lists.sourceforge.jp (subscribers-only, for users in Japanese) W: http://tomoyo.sourceforge.jp/ -T: quilt http://svn.sourceforge.jp/svnroot/tomoyo/trunk/2.3.x/tomoyo-lsm/patches/ +T: quilt http://svn.sourceforge.jp/svnroot/tomoyo/trunk/2.4.x/tomoyo-lsm/patches/ S: Maintained F: security/tomoyo/ diff --git a/trunk/Makefile b/trunk/Makefile index d0189560613c..f676d15cd348 100644 --- a/trunk/Makefile +++ b/trunk/Makefile @@ -360,7 +360,7 @@ CFLAGS_GCOV = -fprofile-arcs -ftest-coverage LINUXINCLUDE := -I$(srctree)/arch/$(hdr-arch)/include \ -Iarch/$(hdr-arch)/include/generated -Iinclude \ $(if $(KBUILD_SRC), -I$(srctree)/include) \ - -include include/generated/autoconf.h + -include $(srctree)/include/linux/kconfig.h KBUILD_CPPFLAGS := -D__KERNEL__ diff --git a/trunk/arch/alpha/kernel/sys_alcor.c b/trunk/arch/alpha/kernel/sys_alcor.c index 0e1439904cdb..8606d77e5163 100644 --- a/trunk/arch/alpha/kernel/sys_alcor.c +++ b/trunk/arch/alpha/kernel/sys_alcor.c @@ -183,7 +183,7 @@ alcor_init_irq(void) */ static int __init -alcor_map_irq(struct pci_dev *dev, u8 slot, u8 pin) +alcor_map_irq(const struct pci_dev *dev, u8 slot, u8 pin) { static char irq_tab[7][5] __initdata = { /*INT INTA INTB INTC INTD */ diff --git a/trunk/arch/alpha/kernel/sys_cabriolet.c b/trunk/arch/alpha/kernel/sys_cabriolet.c index c8c112d51584..1029619fb6c0 100644 --- a/trunk/arch/alpha/kernel/sys_cabriolet.c +++ b/trunk/arch/alpha/kernel/sys_cabriolet.c @@ -175,7 +175,7 @@ pc164_init_irq(void) */ static inline int __init -eb66p_map_irq(struct pci_dev *dev, u8 slot, u8 pin) +eb66p_map_irq(const struct pci_dev *dev, u8 slot, u8 pin) { static char irq_tab[5][5] __initdata = { /*INT INTA INTB INTC INTD */ @@ -205,7 +205,7 @@ eb66p_map_irq(struct pci_dev *dev, u8 slot, u8 pin) */ static inline int __init -cabriolet_map_irq(struct pci_dev *dev, u8 slot, u8 pin) +cabriolet_map_irq(const struct pci_dev *dev, u8 slot, u8 pin) { static char irq_tab[5][5] __initdata = { /*INT INTA INTB INTC INTD */ @@ -289,7 +289,7 @@ cia_cab_init_pci(void) */ static inline int __init -alphapc164_map_irq(struct pci_dev *dev, u8 slot, u8 pin) +alphapc164_map_irq(const struct pci_dev *dev, u8 slot, u8 pin) { static char irq_tab[7][5] __initdata = { /*INT INTA INTB INTC INTD */ diff --git a/trunk/arch/alpha/kernel/sys_dp264.c b/trunk/arch/alpha/kernel/sys_dp264.c index f8856829c22a..bb7f0c7cb17a 100644 --- a/trunk/arch/alpha/kernel/sys_dp264.c +++ b/trunk/arch/alpha/kernel/sys_dp264.c @@ -382,7 +382,7 @@ isa_irq_fixup(struct pci_dev *dev, int irq) } static int __init -dp264_map_irq(struct pci_dev *dev, u8 slot, u8 pin) +dp264_map_irq(const struct pci_dev *dev, u8 slot, u8 pin) { static char irq_tab[6][5] __initdata = { /*INT INTA INTB INTC INTD */ @@ -404,7 +404,7 @@ dp264_map_irq(struct pci_dev *dev, u8 slot, u8 pin) } static int __init -monet_map_irq(struct pci_dev *dev, u8 slot, u8 pin) +monet_map_irq(const struct pci_dev *dev, u8 slot, u8 pin) { static char irq_tab[13][5] __initdata = { /*INT INTA INTB INTC INTD */ @@ -466,7 +466,7 @@ monet_swizzle(struct pci_dev *dev, u8 *pinp) } static int __init -webbrick_map_irq(struct pci_dev *dev, u8 slot, u8 pin) +webbrick_map_irq(const struct pci_dev *dev, u8 slot, u8 pin) { static char irq_tab[13][5] __initdata = { /*INT INTA INTB INTC INTD */ @@ -488,7 +488,7 @@ webbrick_map_irq(struct pci_dev *dev, u8 slot, u8 pin) } static int __init -clipper_map_irq(struct pci_dev *dev, u8 slot, u8 pin) +clipper_map_irq(const struct pci_dev *dev, u8 slot, u8 pin) { static char irq_tab[7][5] __initdata = { /*INT INTA INTB INTC INTD */ diff --git a/trunk/arch/alpha/kernel/sys_eb64p.c b/trunk/arch/alpha/kernel/sys_eb64p.c index a7a23b40eec5..3c6c13cd8b19 100644 --- a/trunk/arch/alpha/kernel/sys_eb64p.c +++ b/trunk/arch/alpha/kernel/sys_eb64p.c @@ -169,7 +169,7 @@ eb64p_init_irq(void) */ static int __init -eb64p_map_irq(struct pci_dev *dev, u8 slot, u8 pin) +eb64p_map_irq(const struct pci_dev *dev, u8 slot, u8 pin) { static char irq_tab[5][5] __initdata = { /*INT INTA INTB INTC INTD */ diff --git a/trunk/arch/alpha/kernel/sys_eiger.c b/trunk/arch/alpha/kernel/sys_eiger.c index a60cd5b2621e..35f480db7719 100644 --- a/trunk/arch/alpha/kernel/sys_eiger.c +++ b/trunk/arch/alpha/kernel/sys_eiger.c @@ -144,7 +144,7 @@ eiger_init_irq(void) } static int __init -eiger_map_irq(struct pci_dev *dev, u8 slot, u8 pin) +eiger_map_irq(const struct pci_dev *dev, u8 slot, u8 pin) { u8 irq_orig; diff --git a/trunk/arch/alpha/kernel/sys_marvel.c b/trunk/arch/alpha/kernel/sys_marvel.c index 388b99d1779d..95cfc83ece8f 100644 --- a/trunk/arch/alpha/kernel/sys_marvel.c +++ b/trunk/arch/alpha/kernel/sys_marvel.c @@ -318,7 +318,7 @@ marvel_init_irq(void) } static int -marvel_map_irq(struct pci_dev *dev, u8 slot, u8 pin) +marvel_map_irq(const struct pci_dev *dev, u8 slot, u8 pin) { struct pci_controller *hose = dev->sysdata; struct io7_port *io7_port = hose->sysdata; diff --git a/trunk/arch/alpha/kernel/sys_miata.c b/trunk/arch/alpha/kernel/sys_miata.c index 61ccd95579ec..258da684670b 100644 --- a/trunk/arch/alpha/kernel/sys_miata.c +++ b/trunk/arch/alpha/kernel/sys_miata.c @@ -151,7 +151,7 @@ miata_init_irq(void) */ static int __init -miata_map_irq(struct pci_dev *dev, u8 slot, u8 pin) +miata_map_irq(const struct pci_dev *dev, u8 slot, u8 pin) { static char irq_tab[18][5] __initdata = { /*INT INTA INTB INTC INTD */ diff --git a/trunk/arch/alpha/kernel/sys_mikasa.c b/trunk/arch/alpha/kernel/sys_mikasa.c index 0e6e4697a025..c0fd7284dec3 100644 --- a/trunk/arch/alpha/kernel/sys_mikasa.c +++ b/trunk/arch/alpha/kernel/sys_mikasa.c @@ -146,7 +146,7 @@ mikasa_init_irq(void) */ static int __init -mikasa_map_irq(struct pci_dev *dev, u8 slot, u8 pin) +mikasa_map_irq(const struct pci_dev *dev, u8 slot, u8 pin) { static char irq_tab[8][5] __initdata = { /*INT INTA INTB INTC INTD */ diff --git a/trunk/arch/alpha/kernel/sys_nautilus.c b/trunk/arch/alpha/kernel/sys_nautilus.c index 99c0f46f6b9c..4112200307c7 100644 --- a/trunk/arch/alpha/kernel/sys_nautilus.c +++ b/trunk/arch/alpha/kernel/sys_nautilus.c @@ -65,7 +65,7 @@ nautilus_init_irq(void) } static int __init -nautilus_map_irq(struct pci_dev *dev, u8 slot, u8 pin) +nautilus_map_irq(const struct pci_dev *dev, u8 slot, u8 pin) { /* Preserve the IRQ set up by the console. */ diff --git a/trunk/arch/alpha/kernel/sys_noritake.c b/trunk/arch/alpha/kernel/sys_noritake.c index a00ac7087167..21725283cdd7 100644 --- a/trunk/arch/alpha/kernel/sys_noritake.c +++ b/trunk/arch/alpha/kernel/sys_noritake.c @@ -194,7 +194,7 @@ noritake_init_irq(void) */ static int __init -noritake_map_irq(struct pci_dev *dev, u8 slot, u8 pin) +noritake_map_irq(const struct pci_dev *dev, u8 slot, u8 pin) { static char irq_tab[15][5] __initdata = { /*INT INTA INTB INTC INTD */ diff --git a/trunk/arch/alpha/kernel/sys_rawhide.c b/trunk/arch/alpha/kernel/sys_rawhide.c index 7f52161f3d88..a125d6bea7e1 100644 --- a/trunk/arch/alpha/kernel/sys_rawhide.c +++ b/trunk/arch/alpha/kernel/sys_rawhide.c @@ -223,7 +223,7 @@ rawhide_init_irq(void) */ static int __init -rawhide_map_irq(struct pci_dev *dev, u8 slot, u8 pin) +rawhide_map_irq(const struct pci_dev *dev, u8 slot, u8 pin) { static char irq_tab[5][5] __initdata = { /*INT INTA INTB INTC INTD */ diff --git a/trunk/arch/alpha/kernel/sys_ruffian.c b/trunk/arch/alpha/kernel/sys_ruffian.c index f33648e4e8cf..2581cbec6fc2 100644 --- a/trunk/arch/alpha/kernel/sys_ruffian.c +++ b/trunk/arch/alpha/kernel/sys_ruffian.c @@ -119,7 +119,7 @@ ruffian_kill_arch (int mode) */ static int __init -ruffian_map_irq(struct pci_dev *dev, u8 slot, u8 pin) +ruffian_map_irq(const struct pci_dev *dev, u8 slot, u8 pin) { static char irq_tab[11][5] __initdata = { /*INT INTA INTB INTC INTD */ diff --git a/trunk/arch/alpha/kernel/sys_rx164.c b/trunk/arch/alpha/kernel/sys_rx164.c index 216d94d9c0c1..b172b27555a7 100644 --- a/trunk/arch/alpha/kernel/sys_rx164.c +++ b/trunk/arch/alpha/kernel/sys_rx164.c @@ -144,7 +144,7 @@ rx164_init_irq(void) */ static int __init -rx164_map_irq(struct pci_dev *dev, u8 slot, u8 pin) +rx164_map_irq(const struct pci_dev *dev, u8 slot, u8 pin) { #if 0 static char irq_tab_pass1[6][5] __initdata = { diff --git a/trunk/arch/alpha/kernel/sys_sable.c b/trunk/arch/alpha/kernel/sys_sable.c index da714e427c5f..98d1dbffe98f 100644 --- a/trunk/arch/alpha/kernel/sys_sable.c +++ b/trunk/arch/alpha/kernel/sys_sable.c @@ -194,7 +194,7 @@ sable_init_irq(void) */ static int __init -sable_map_irq(struct pci_dev *dev, u8 slot, u8 pin) +sable_map_irq(const struct pci_dev *dev, u8 slot, u8 pin) { static char irq_tab[9][5] __initdata = { /*INT INTA INTB INTC INTD */ @@ -376,7 +376,7 @@ lynx_init_irq(void) */ static int __init -lynx_map_irq(struct pci_dev *dev, u8 slot, u8 pin) +lynx_map_irq(const struct pci_dev *dev, u8 slot, u8 pin) { static char irq_tab[19][5] __initdata = { /*INT INTA INTB INTC INTD */ diff --git a/trunk/arch/alpha/kernel/sys_sio.c b/trunk/arch/alpha/kernel/sys_sio.c index 85b4aea01ef8..47bec1e97d1c 100644 --- a/trunk/arch/alpha/kernel/sys_sio.c +++ b/trunk/arch/alpha/kernel/sys_sio.c @@ -146,7 +146,7 @@ sio_fixup_irq_levels(unsigned int level_bits) } static inline int __init -noname_map_irq(struct pci_dev *dev, u8 slot, u8 pin) +noname_map_irq(const struct pci_dev *dev, u8 slot, u8 pin) { /* * The Noname board has 5 PCI slots with each of the 4 @@ -185,7 +185,7 @@ noname_map_irq(struct pci_dev *dev, u8 slot, u8 pin) } static inline int __init -p2k_map_irq(struct pci_dev *dev, u8 slot, u8 pin) +p2k_map_irq(const struct pci_dev *dev, u8 slot, u8 pin) { static char irq_tab[][5] __initdata = { /*INT A B C D */ diff --git a/trunk/arch/alpha/kernel/sys_sx164.c b/trunk/arch/alpha/kernel/sys_sx164.c index 41d4ad4c7c44..73e1c317afcb 100644 --- a/trunk/arch/alpha/kernel/sys_sx164.c +++ b/trunk/arch/alpha/kernel/sys_sx164.c @@ -95,7 +95,7 @@ sx164_init_irq(void) */ static int __init -sx164_map_irq(struct pci_dev *dev, u8 slot, u8 pin) +sx164_map_irq(const struct pci_dev *dev, u8 slot, u8 pin) { static char irq_tab[5][5] __initdata = { /*INT INTA INTB INTC INTD */ diff --git a/trunk/arch/alpha/kernel/sys_takara.c b/trunk/arch/alpha/kernel/sys_takara.c index a31f8cd9bd6b..2ae99ad6975e 100644 --- a/trunk/arch/alpha/kernel/sys_takara.c +++ b/trunk/arch/alpha/kernel/sys_takara.c @@ -157,7 +157,7 @@ takara_init_irq(void) */ static int __init -takara_map_irq_srm(struct pci_dev *dev, u8 slot, u8 pin) +takara_map_irq_srm(const struct pci_dev *dev, u8 slot, u8 pin) { static char irq_tab[15][5] __initdata = { { 16+3, 16+3, 16+3, 16+3, 16+3}, /* slot 6 == device 3 */ @@ -188,7 +188,7 @@ takara_map_irq_srm(struct pci_dev *dev, u8 slot, u8 pin) } static int __init -takara_map_irq(struct pci_dev *dev, u8 slot, u8 pin) +takara_map_irq(const struct pci_dev *dev, u8 slot, u8 pin) { static char irq_tab[15][5] __initdata = { { 16+3, 16+3, 16+3, 16+3, 16+3}, /* slot 6 == device 3 */ diff --git a/trunk/arch/alpha/kernel/sys_titan.c b/trunk/arch/alpha/kernel/sys_titan.c index 6994407e242a..f47b30a2a117 100644 --- a/trunk/arch/alpha/kernel/sys_titan.c +++ b/trunk/arch/alpha/kernel/sys_titan.c @@ -305,7 +305,7 @@ titan_late_init(void) } static int __devinit -titan_map_irq(struct pci_dev *dev, u8 slot, u8 pin) +titan_map_irq(const struct pci_dev *dev, u8 slot, u8 pin) { u8 intline; int irq; diff --git a/trunk/arch/alpha/kernel/sys_wildfire.c b/trunk/arch/alpha/kernel/sys_wildfire.c index d92cdc715c65..17c85a65e7b0 100644 --- a/trunk/arch/alpha/kernel/sys_wildfire.c +++ b/trunk/arch/alpha/kernel/sys_wildfire.c @@ -290,7 +290,7 @@ wildfire_device_interrupt(unsigned long vector) */ static int __init -wildfire_map_irq(struct pci_dev *dev, u8 slot, u8 pin) +wildfire_map_irq(const struct pci_dev *dev, u8 slot, u8 pin) { static char irq_tab[8][5] __initdata = { /*INT INTA INTB INTC INTD */ diff --git a/trunk/arch/arm/Kconfig b/trunk/arch/arm/Kconfig index 09ebf0ba64fa..2c71a8f3535a 100644 --- a/trunk/arch/arm/Kconfig +++ b/trunk/arch/arm/Kconfig @@ -1716,6 +1716,7 @@ config USE_OF bool "Flattened Device Tree support" select OF select OF_EARLY_FLATTREE + select IRQ_DOMAIN help Include support for flattened device tree machine descriptions. diff --git a/trunk/arch/arm/Makefile b/trunk/arch/arm/Makefile index 3a4a04b33d0f..70c424eaf7b0 100644 --- a/trunk/arch/arm/Makefile +++ b/trunk/arch/arm/Makefile @@ -282,6 +282,12 @@ zImage Image xipImage bootpImage uImage: vmlinux zinstall uinstall install: vmlinux $(Q)$(MAKE) $(build)=$(boot) MACHINE=$(MACHINE) $@ +%.dtb: + $(Q)$(MAKE) $(build)=$(boot) MACHINE=$(MACHINE) $(boot)/$@ + +dtbs: + $(Q)$(MAKE) $(build)=$(boot) MACHINE=$(MACHINE) $(boot)/$@ + # We use MRPROPER_FILES and CLEAN_FILES now archclean: $(Q)$(MAKE) $(clean)=$(boot) @@ -298,6 +304,7 @@ define archhelp echo ' uImage - U-Boot wrapped zImage' echo ' bootpImage - Combined zImage and initial RAM disk' echo ' (supply initrd image via make variable INITRD=)' + echo ' dtbs - Build device tree blobs for enabled boards' echo ' install - Install uncompressed kernel' echo ' zinstall - Install compressed kernel' echo ' uinstall - Install U-Boot wrapped compressed kernel' diff --git a/trunk/arch/arm/boot/Makefile b/trunk/arch/arm/boot/Makefile index 9128fddf1109..a1edfd5a129a 100644 --- a/trunk/arch/arm/boot/Makefile +++ b/trunk/arch/arm/boot/Makefile @@ -59,6 +59,12 @@ $(obj)/zImage: $(obj)/compressed/vmlinux FORCE endif +# Rule to build device tree blobs +$(obj)/%.dtb: $(src)/dts/%.dts + $(call cmd,dtc) + +$(obj)/dtbs: $(addprefix $(obj)/, $(dtb-y)) + quiet_cmd_uimage = UIMAGE $@ cmd_uimage = $(CONFIG_SHELL) $(MKIMAGE) -A arm -O linux -T kernel \ -C none -a $(LOADADDR) -e $(STARTADDR) \ diff --git a/trunk/arch/arm/boot/dts/skeleton.dtsi b/trunk/arch/arm/boot/dts/skeleton.dtsi new file mode 100644 index 000000000000..b41d241de2cd --- /dev/null +++ b/trunk/arch/arm/boot/dts/skeleton.dtsi @@ -0,0 +1,13 @@ +/* + * Skeleton device tree; the bare minimum needed to boot; just include and + * add a compatible value. The bootloader will typically populate the memory + * node. + */ + +/ { + #address-cells = <1>; + #size-cells = <1>; + chosen { }; + aliases { }; + memory { device_type = "memory"; reg = <0 0>; }; +}; diff --git a/trunk/arch/arm/boot/dts/tegra-harmony.dts b/trunk/arch/arm/boot/dts/tegra-harmony.dts new file mode 100644 index 000000000000..4c053340ce33 --- /dev/null +++ b/trunk/arch/arm/boot/dts/tegra-harmony.dts @@ -0,0 +1,70 @@ +/dts-v1/; + +/memreserve/ 0x1c000000 0x04000000; +/include/ "tegra20.dtsi" + +/ { + model = "NVIDIA Tegra2 Harmony evaluation board"; + compatible = "nvidia,harmony", "nvidia,tegra20"; + + chosen { + bootargs = "vmalloc=192M video=tegrafb console=ttyS0,115200n8 root=/dev/mmcblk0p2 rw rootwait"; + }; + + memory@0 { + reg = < 0x00000000 0x40000000 >; + }; + + i2c@7000c000 { + clock-frequency = <400000>; + + codec: wm8903@1a { + compatible = "wlf,wm8903"; + reg = <0x1a>; + interrupts = < 347 >; + + gpio-controller; + #gpio-cells = <2>; + + /* 0x8000 = Not configured */ + gpio-cfg = < 0x8000 0x8000 0 0x8000 0x8000 >; + }; + }; + + i2c@7000c400 { + clock-frequency = <400000>; + }; + + i2c@7000c500 { + clock-frequency = <400000>; + }; + + i2c@7000d000 { + clock-frequency = <400000>; + }; + + sound { + compatible = "nvidia,harmony-sound", "nvidia,tegra-wm8903"; + + spkr-en-gpios = <&codec 2 0>; + hp-det-gpios = <&gpio 178 0>; + int-mic-en-gpios = <&gpio 184 0>; + ext-mic-en-gpios = <&gpio 185 0>; + }; + + serial@70006300 { + clock-frequency = < 216000000 >; + }; + + sdhci@c8000200 { + gpios = <&gpio 69 0>, /* cd, gpio PI5 */ + <&gpio 57 0>, /* wp, gpio PH1 */ + <&gpio 155 0>; /* power, gpio PT3 */ + }; + + sdhci@c8000600 { + gpios = <&gpio 58 0>, /* cd, gpio PH2 */ + <&gpio 59 0>, /* wp, gpio PH3 */ + <&gpio 70 0>; /* power, gpio PI6 */ + }; +}; diff --git a/trunk/arch/arm/boot/dts/tegra-seaboard.dts b/trunk/arch/arm/boot/dts/tegra-seaboard.dts new file mode 100644 index 000000000000..1940cae00748 --- /dev/null +++ b/trunk/arch/arm/boot/dts/tegra-seaboard.dts @@ -0,0 +1,28 @@ +/dts-v1/; + +/memreserve/ 0x1c000000 0x04000000; +/include/ "tegra20.dtsi" + +/ { + model = "NVIDIA Seaboard"; + compatible = "nvidia,seaboard", "nvidia,tegra20"; + + chosen { + bootargs = "vmalloc=192M video=tegrafb console=ttyS0,115200n8 root=/dev/mmcblk1p3 rw rootwait"; + }; + + memory { + device_type = "memory"; + reg = < 0x00000000 0x40000000 >; + }; + + serial@70006300 { + clock-frequency = < 216000000 >; + }; + + sdhci@c8000400 { + gpios = <&gpio 69 0>, /* cd, gpio PI5 */ + <&gpio 57 0>, /* wp, gpio PH1 */ + <&gpio 70 0>; /* power, gpio PI6 */ + }; +}; diff --git a/trunk/arch/arm/boot/dts/tegra20.dtsi b/trunk/arch/arm/boot/dts/tegra20.dtsi new file mode 100644 index 000000000000..5727595cde61 --- /dev/null +++ b/trunk/arch/arm/boot/dts/tegra20.dtsi @@ -0,0 +1,139 @@ +/include/ "skeleton.dtsi" + +/ { + compatible = "nvidia,tegra20"; + interrupt-parent = <&intc>; + + intc: interrupt-controller@50041000 { + compatible = "nvidia,tegra20-gic"; + interrupt-controller; + #interrupt-cells = <1>; + reg = < 0x50041000 0x1000 >, + < 0x50040100 0x0100 >; + }; + + i2c@7000c000 { + #address-cells = <1>; + #size-cells = <0>; + compatible = "nvidia,tegra20-i2c"; + reg = <0x7000C000 0x100>; + interrupts = < 70 >; + }; + + i2c@7000c400 { + #address-cells = <1>; + #size-cells = <0>; + compatible = "nvidia,tegra20-i2c"; + reg = <0x7000C400 0x100>; + interrupts = < 116 >; + }; + + i2c@7000c500 { + #address-cells = <1>; + #size-cells = <0>; + compatible = "nvidia,tegra20-i2c"; + reg = <0x7000C500 0x100>; + interrupts = < 124 >; + }; + + i2c@7000d000 { + #address-cells = <1>; + #size-cells = <0>; + compatible = "nvidia,tegra20-i2c"; + reg = <0x7000D000 0x200>; + interrupts = < 85 >; + }; + + i2s@70002800 { + #address-cells = <1>; + #size-cells = <0>; + compatible = "nvidia,tegra20-i2s"; + reg = <0x70002800 0x200>; + interrupts = < 45 >; + dma-channel = < 2 >; + }; + + i2s@70002a00 { + #address-cells = <1>; + #size-cells = <0>; + compatible = "nvidia,tegra20-i2s"; + reg = <0x70002a00 0x200>; + interrupts = < 35 >; + dma-channel = < 1 >; + }; + + das@70000c00 { + #address-cells = <1>; + #size-cells = <0>; + compatible = "nvidia,tegra20-das"; + reg = <0x70000c00 0x80>; + }; + + gpio: gpio@6000d000 { + compatible = "nvidia,tegra20-gpio"; + reg = < 0x6000d000 0x1000 >; + interrupts = < 64 65 66 67 87 119 121 >; + #gpio-cells = <2>; + gpio-controller; + }; + + serial@70006000 { + compatible = "nvidia,tegra20-uart"; + reg = <0x70006000 0x40>; + reg-shift = <2>; + interrupts = < 68 >; + }; + + serial@70006040 { + compatible = "nvidia,tegra20-uart"; + reg = <0x70006040 0x40>; + reg-shift = <2>; + interrupts = < 69 >; + }; + + serial@70006200 { + compatible = "nvidia,tegra20-uart"; + reg = <0x70006200 0x100>; + reg-shift = <2>; + interrupts = < 78 >; + }; + + serial@70006300 { + compatible = "nvidia,tegra20-uart"; + reg = <0x70006300 0x100>; + reg-shift = <2>; + interrupts = < 122 >; + }; + + serial@70006400 { + compatible = "nvidia,tegra20-uart"; + reg = <0x70006400 0x100>; + reg-shift = <2>; + interrupts = < 123 >; + }; + + sdhci@c8000000 { + compatible = "nvidia,tegra20-sdhci"; + reg = <0xc8000000 0x200>; + interrupts = < 46 >; + }; + + sdhci@c8000200 { + compatible = "nvidia,tegra20-sdhci"; + reg = <0xc8000200 0x200>; + interrupts = < 47 >; + }; + + sdhci@c8000400 { + compatible = "nvidia,tegra20-sdhci"; + reg = <0xc8000400 0x200>; + interrupts = < 51 >; + }; + + sdhci@c8000600 { + compatible = "nvidia,tegra20-sdhci"; + reg = <0xc8000600 0x200>; + interrupts = < 63 >; + }; +}; + diff --git a/trunk/arch/arm/boot/dts/versatile-ab.dts b/trunk/arch/arm/boot/dts/versatile-ab.dts new file mode 100644 index 000000000000..0b32925f2147 --- /dev/null +++ b/trunk/arch/arm/boot/dts/versatile-ab.dts @@ -0,0 +1,192 @@ +/dts-v1/; +/include/ "skeleton.dtsi" + +/ { + model = "ARM Versatile AB"; + compatible = "arm,versatile-ab"; + #address-cells = <1>; + #size-cells = <1>; + interrupt-parent = <&vic>; + + aliases { + serial0 = &uart0; + serial1 = &uart1; + serial2 = &uart2; + i2c0 = &i2c0; + }; + + memory { + reg = <0x0 0x08000000>; + }; + + flash@34000000 { + compatible = "arm,versatile-flash"; + reg = <0x34000000 0x4000000>; + bank-width = <4>; + }; + + i2c0: i2c@10002000 { + #address-cells = <1>; + #size-cells = <0>; + compatible = "arm,versatile-i2c"; + reg = <0x10002000 0x1000>; + + rtc@68 { + compatible = "dallas,ds1338"; + reg = <0x68>; + }; + }; + + net@10010000 { + compatible = "smsc,lan91c111"; + reg = <0x10010000 0x10000>; + interrupts = <25>; + }; + + lcd@10008000 { + compatible = "arm,versatile-lcd"; + reg = <0x10008000 0x1000>; + }; + + amba { + compatible = "arm,amba-bus"; + #address-cells = <1>; + #size-cells = <1>; + ranges; + + vic: intc@10140000 { + compatible = "arm,versatile-vic"; + interrupt-controller; + #interrupt-cells = <1>; + reg = <0x10140000 0x1000>; + }; + + sic: intc@10003000 { + compatible = "arm,versatile-sic"; + interrupt-controller; + #interrupt-cells = <1>; + reg = <0x10003000 0x1000>; + interrupt-parent = <&vic>; + interrupts = <31>; /* Cascaded to vic */ + }; + + dma@10130000 { + compatible = "arm,pl081", "arm,primecell"; + reg = <0x10130000 0x1000>; + interrupts = <17>; + }; + + uart0: uart@101f1000 { + compatible = "arm,pl011", "arm,primecell"; + reg = <0x101f1000 0x1000>; + interrupts = <12>; + }; + + uart1: uart@101f2000 { + compatible = "arm,pl011", "arm,primecell"; + reg = <0x101f2000 0x1000>; + interrupts = <13>; + }; + + uart2: uart@101f3000 { + compatible = "arm,pl011", "arm,primecell"; + reg = <0x101f3000 0x1000>; + interrupts = <14>; + }; + + smc@10100000 { + compatible = "arm,primecell"; + reg = <0x10100000 0x1000>; + }; + + mpmc@10110000 { + compatible = "arm,primecell"; + reg = <0x10110000 0x1000>; + }; + + display@10120000 { + compatible = "arm,pl110", "arm,primecell"; + reg = <0x10120000 0x1000>; + interrupts = <16>; + }; + + sctl@101e0000 { + compatible = "arm,primecell"; + reg = <0x101e0000 0x1000>; + }; + + watchdog@101e1000 { + compatible = "arm,primecell"; + reg = <0x101e1000 0x1000>; + interrupts = <0>; + }; + + gpio0: gpio@101e4000 { + compatible = "arm,pl061", "arm,primecell"; + reg = <0x101e4000 0x1000>; + gpio-controller; + interrupts = <6>; + #gpio-cells = <2>; + interrupt-controller; + #interrupt-cells = <2>; + }; + + gpio1: gpio@101e5000 { + compatible = "arm,pl061", "arm,primecell"; + reg = <0x101e5000 0x1000>; + interrupts = <7>; + gpio-controller; + #gpio-cells = <2>; + interrupt-controller; + #interrupt-cells = <2>; + }; + + rtc@101e8000 { + compatible = "arm,pl030", "arm,primecell"; + reg = <0x101e8000 0x1000>; + interrupts = <10>; + }; + + sci@101f0000 { + compatible = "arm,primecell"; + reg = <0x101f0000 0x1000>; + interrupts = <15>; + }; + + ssp@101f4000 { + compatible = "arm,pl022", "arm,primecell"; + reg = <0x101f4000 0x1000>; + interrupts = <11>; + }; + + fpga { + compatible = "arm,versatile-fpga", "simple-bus"; + #address-cells = <1>; + #size-cells = <1>; + ranges = <0 0x10000000 0x10000>; + + aaci@4000 { + compatible = "arm,primecell"; + reg = <0x4000 0x1000>; + interrupts = <24>; + }; + mmc@5000 { + compatible = "arm,primecell"; + reg = < 0x5000 0x1000>; + interrupts = <22>; + }; + kmi@6000 { + compatible = "arm,pl050", "arm,primecell"; + reg = <0x6000 0x1000>; + interrupt-parent = <&sic>; + interrupts = <3>; + }; + kmi@7000 { + compatible = "arm,pl050", "arm,primecell"; + reg = <0x7000 0x1000>; + interrupt-parent = <&sic>; + interrupts = <4>; + }; + }; + }; +}; diff --git a/trunk/arch/arm/boot/dts/versatile-pb.dts b/trunk/arch/arm/boot/dts/versatile-pb.dts new file mode 100644 index 000000000000..8a614e398004 --- /dev/null +++ b/trunk/arch/arm/boot/dts/versatile-pb.dts @@ -0,0 +1,48 @@ +/include/ "versatile-ab.dts" + +/ { + model = "ARM Versatile PB"; + compatible = "arm,versatile-pb"; + + amba { + gpio2: gpio@101e6000 { + compatible = "arm,pl061", "arm,primecell"; + reg = <0x101e6000 0x1000>; + interrupts = <8>; + gpio-controller; + #gpio-cells = <2>; + interrupt-controller; + #interrupt-cells = <2>; + }; + + gpio3: gpio@101e7000 { + compatible = "arm,pl061", "arm,primecell"; + reg = <0x101e7000 0x1000>; + interrupts = <9>; + gpio-controller; + #gpio-cells = <2>; + interrupt-controller; + #interrupt-cells = <2>; + }; + + fpga { + uart@9000 { + compatible = "arm,pl011", "arm,primecell"; + reg = <0x9000 0x1000>; + interrupt-parent = <&sic>; + interrupts = <6>; + }; + sci@a000 { + compatible = "arm,primecell"; + reg = <0xa000 0x1000>; + interrupt-parent = <&sic>; + interrupts = <5>; + }; + mmc@b000 { + compatible = "arm,primecell"; + reg = <0xb000 0x1000>; + interrupts = <23>; + }; + }; + }; +}; diff --git a/trunk/arch/arm/common/it8152.c b/trunk/arch/arm/common/it8152.c index 14ad62e16dd1..a7934ba9e1df 100644 --- a/trunk/arch/arm/common/it8152.c +++ b/trunk/arch/arm/common/it8152.c @@ -144,7 +144,7 @@ void it8152_irq_demux(unsigned int irq, struct irq_desc *desc) } /* mapping for on-chip devices */ -int __init it8152_pci_map_irq(struct pci_dev *dev, u8 slot, u8 pin) +int __init it8152_pci_map_irq(const struct pci_dev *dev, u8 slot, u8 pin) { if ((dev->vendor == PCI_VENDOR_ID_ITE) && (dev->device == PCI_DEVICE_ID_ITE_8152)) { diff --git a/trunk/arch/arm/include/asm/hardware/it8152.h b/trunk/arch/arm/include/asm/hardware/it8152.h index b2f95c72287c..b3fea38d55c6 100644 --- a/trunk/arch/arm/include/asm/hardware/it8152.h +++ b/trunk/arch/arm/include/asm/hardware/it8152.h @@ -105,7 +105,7 @@ struct pci_sys_data; extern void it8152_irq_demux(unsigned int irq, struct irq_desc *desc); extern void it8152_init_irq(void); -extern int it8152_pci_map_irq(struct pci_dev *dev, u8 slot, u8 pin); +extern int it8152_pci_map_irq(const struct pci_dev *dev, u8 slot, u8 pin); extern int it8152_pci_setup(int nr, struct pci_sys_data *sys); extern struct pci_bus *it8152_pci_scan_bus(int nr, struct pci_sys_data *sys); diff --git a/trunk/arch/arm/include/asm/mach/arch.h b/trunk/arch/arm/include/asm/mach/arch.h index 3281fb4b12e3..217aa1911dd7 100644 --- a/trunk/arch/arm/include/asm/mach/arch.h +++ b/trunk/arch/arm/include/asm/mach/arch.h @@ -74,4 +74,11 @@ static const struct machine_desc __mach_desc_##_type \ #define MACHINE_END \ }; +#define DT_MACHINE_START(_name, _namestr) \ +static const struct machine_desc __mach_desc_##_name \ + __used \ + __attribute__((__section__(".arch.info.init"))) = { \ + .nr = ~0, \ + .name = _namestr, + #endif diff --git a/trunk/arch/arm/include/asm/mach/pci.h b/trunk/arch/arm/include/asm/mach/pci.h index 16330bd0657c..186efd4e05c9 100644 --- a/trunk/arch/arm/include/asm/mach/pci.h +++ b/trunk/arch/arm/include/asm/mach/pci.h @@ -25,7 +25,7 @@ struct hw_pci { void (*preinit)(void); void (*postinit)(void); u8 (*swizzle)(struct pci_dev *dev, u8 *pin); - int (*map_irq)(struct pci_dev *dev, u8 slot, u8 pin); + int (*map_irq)(const struct pci_dev *dev, u8 slot, u8 pin); }; /* @@ -44,7 +44,7 @@ struct pci_sys_data { /* Bridge swizzling */ u8 (*swizzle)(struct pci_dev *, u8 *); /* IRQ mapping */ - int (*map_irq)(struct pci_dev *, u8, u8); + int (*map_irq)(const struct pci_dev *, u8, u8); struct hw_pci *hw; void *private_data; /* platform controller private data */ }; diff --git a/trunk/arch/arm/include/asm/prom.h b/trunk/arch/arm/include/asm/prom.h index 11b8708fc4db..6f65ca86a5ec 100644 --- a/trunk/arch/arm/include/asm/prom.h +++ b/trunk/arch/arm/include/asm/prom.h @@ -16,11 +16,6 @@ #include #include -static inline void irq_dispose_mapping(unsigned int virq) -{ - return; -} - extern struct machine_desc *setup_machine_fdt(unsigned int dt_phys); extern void arm_dt_memblock_reserve(void); diff --git a/trunk/arch/arm/kernel/bios32.c b/trunk/arch/arm/kernel/bios32.c index e4ee050aad7d..d6df359408f0 100644 --- a/trunk/arch/arm/kernel/bios32.c +++ b/trunk/arch/arm/kernel/bios32.c @@ -476,7 +476,7 @@ static u8 __devinit pcibios_swizzle(struct pci_dev *dev, u8 *pin) /* * Map a slot/pin to an IRQ. */ -static int pcibios_map_irq(struct pci_dev *dev, u8 slot, u8 pin) +static int pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin) { struct pci_sys_data *sys = dev->sysdata; int irq = -1; diff --git a/trunk/arch/arm/kernel/devtree.c b/trunk/arch/arm/kernel/devtree.c index 0cdd7b456cb2..1a33e9d6bb1f 100644 --- a/trunk/arch/arm/kernel/devtree.c +++ b/trunk/arch/arm/kernel/devtree.c @@ -132,17 +132,3 @@ struct machine_desc * __init setup_machine_fdt(unsigned int dt_phys) return mdesc_best; } - -/** - * irq_create_of_mapping - Hook to resolve OF irq specifier into a Linux irq# - * - * Currently the mapping mechanism is trivial; simple flat hwirq numbers are - * mapped 1:1 onto Linux irq numbers. Cascaded irq controllers are not - * supported. - */ -unsigned int irq_create_of_mapping(struct device_node *controller, - const u32 *intspec, unsigned int intsize) -{ - return intspec[0]; -} -EXPORT_SYMBOL_GPL(irq_create_of_mapping); diff --git a/trunk/arch/arm/mach-at91/Makefile b/trunk/arch/arm/mach-at91/Makefile index 96966231920c..bf57e8b1c9d0 100644 --- a/trunk/arch/arm/mach-at91/Makefile +++ b/trunk/arch/arm/mach-at91/Makefile @@ -2,7 +2,7 @@ # Makefile for the linux kernel. # -obj-y := irq.o gpio.o +obj-y := irq.o gpio.o setup.o obj-m := obj-n := obj- := diff --git a/trunk/arch/arm/mach-at91/at91cap9.c b/trunk/arch/arm/mach-at91/at91cap9.c index f1013d08bb57..bfc684441ef8 100644 --- a/trunk/arch/arm/mach-at91/at91cap9.c +++ b/trunk/arch/arm/mach-at91/at91cap9.c @@ -25,23 +25,10 @@ #include #include +#include "soc.h" #include "generic.h" #include "clock.h" -static struct map_desc at91cap9_io_desc[] __initdata = { - { - .virtual = AT91_VA_BASE_SYS, - .pfn = __phys_to_pfn(AT91_BASE_SYS), - .length = SZ_16K, - .type = MT_DEVICE, - }, { - .virtual = AT91_IO_VIRT_BASE - AT91CAP9_SRAM_SIZE, - .pfn = __phys_to_pfn(AT91CAP9_SRAM_BASE), - .length = AT91CAP9_SRAM_SIZE, - .type = MT_DEVICE, - }, -}; - /* -------------------------------------------------------------------- * Clocks * -------------------------------------------------------------------- */ @@ -339,24 +326,17 @@ static void at91cap9_poweroff(void) * AT91CAP9 processor initialization * -------------------------------------------------------------------- */ -void __init at91cap9_map_io(void) +static void __init at91cap9_map_io(void) { - /* Map peripherals */ - iotable_init(at91cap9_io_desc, ARRAY_SIZE(at91cap9_io_desc)); + at91_init_sram(0, AT91CAP9_SRAM_BASE, AT91CAP9_SRAM_SIZE); } -void __init at91cap9_initialize(unsigned long main_clock) +static void __init at91cap9_initialize(void) { at91_arch_reset = at91cap9_reset; pm_power_off = at91cap9_poweroff; at91_extern_irq = (1 << AT91CAP9_ID_IRQ0) | (1 << AT91CAP9_ID_IRQ1); - /* Init clock subsystem */ - at91_clock_init(main_clock); - - /* Register the processor-specific clocks */ - at91cap9_register_clocks(); - /* Register GPIO subsystem */ at91_gpio_init(at91cap9_gpio, 4); @@ -409,14 +389,9 @@ static unsigned int at91cap9_default_irq_priority[NR_AIC_IRQS] __initdata = { 0, /* Advanced Interrupt Controller (IRQ1) */ }; -void __init at91cap9_init_interrupts(unsigned int priority[NR_AIC_IRQS]) -{ - if (!priority) - priority = at91cap9_default_irq_priority; - - /* Initialize the AIC interrupt controller */ - at91_aic_init(priority); - - /* Enable GPIO interrupts */ - at91_gpio_irq_setup(); -} +struct at91_init_soc __initdata at91cap9_soc = { + .map_io = at91cap9_map_io, + .default_irq_priority = at91cap9_default_irq_priority, + .register_clocks = at91cap9_register_clocks, + .init = at91cap9_initialize, +}; diff --git a/trunk/arch/arm/mach-at91/at91rm9200.c b/trunk/arch/arm/mach-at91/at91rm9200.c index 83a1a3fee554..f73302dbc6a5 100644 --- a/trunk/arch/arm/mach-at91/at91rm9200.c +++ b/trunk/arch/arm/mach-at91/at91rm9200.c @@ -20,25 +20,16 @@ #include #include +#include "soc.h" #include "generic.h" #include "clock.h" static struct map_desc at91rm9200_io_desc[] __initdata = { { - .virtual = AT91_VA_BASE_SYS, - .pfn = __phys_to_pfn(AT91_BASE_SYS), - .length = SZ_4K, - .type = MT_DEVICE, - }, { .virtual = AT91_VA_BASE_EMAC, .pfn = __phys_to_pfn(AT91RM9200_BASE_EMAC), .length = SZ_16K, .type = MT_DEVICE, - }, { - .virtual = AT91_IO_VIRT_BASE - AT91RM9200_SRAM_SIZE, - .pfn = __phys_to_pfn(AT91RM9200_SRAM_BASE), - .length = AT91RM9200_SRAM_SIZE, - .type = MT_DEVICE, }, }; @@ -304,24 +295,17 @@ static void at91rm9200_reset(void) at91_sys_write(AT91_ST_CR, AT91_ST_WDRST); } -int rm9200_type; -EXPORT_SYMBOL(rm9200_type); - -void __init at91rm9200_set_type(int type) -{ - rm9200_type = type; -} - /* -------------------------------------------------------------------- * AT91RM9200 processor initialization * -------------------------------------------------------------------- */ -void __init at91rm9200_map_io(void) +static void __init at91rm9200_map_io(void) { /* Map peripherals */ + at91_init_sram(0, AT91RM9200_SRAM_BASE, AT91RM9200_SRAM_SIZE); iotable_init(at91rm9200_io_desc, ARRAY_SIZE(at91rm9200_io_desc)); } -void __init at91rm9200_initialize(unsigned long main_clock) +static void __init at91rm9200_initialize(void) { at91_arch_reset = at91rm9200_reset; at91_extern_irq = (1 << AT91RM9200_ID_IRQ0) | (1 << AT91RM9200_ID_IRQ1) @@ -329,12 +313,6 @@ void __init at91rm9200_initialize(unsigned long main_clock) | (1 << AT91RM9200_ID_IRQ4) | (1 << AT91RM9200_ID_IRQ5) | (1 << AT91RM9200_ID_IRQ6); - /* Init clock subsystem */ - at91_clock_init(main_clock); - - /* Register the processor-specific clocks */ - at91rm9200_register_clocks(); - /* Initialize GPIO subsystem */ at91_gpio_init(at91rm9200_gpio, cpu_is_at91rm9200_bga() ? AT91RM9200_BGA : AT91RM9200_PQFP); @@ -383,14 +361,9 @@ static unsigned int at91rm9200_default_irq_priority[NR_AIC_IRQS] __initdata = { 0 /* Advanced Interrupt Controller (IRQ6) */ }; -void __init at91rm9200_init_interrupts(unsigned int priority[NR_AIC_IRQS]) -{ - if (!priority) - priority = at91rm9200_default_irq_priority; - - /* Initialize the AIC interrupt controller */ - at91_aic_init(priority); - - /* Enable GPIO interrupts */ - at91_gpio_irq_setup(); -} +struct at91_init_soc __initdata at91rm9200_soc = { + .map_io = at91rm9200_map_io, + .default_irq_priority = at91rm9200_default_irq_priority, + .register_clocks = at91rm9200_register_clocks, + .init = at91rm9200_initialize, +}; diff --git a/trunk/arch/arm/mach-at91/at91sam9260.c b/trunk/arch/arm/mach-at91/at91sam9260.c index 7d606b04d313..cb397be14448 100644 --- a/trunk/arch/arm/mach-at91/at91sam9260.c +++ b/trunk/arch/arm/mach-at91/at91sam9260.c @@ -17,58 +17,16 @@ #include #include #include +#include #include #include #include #include +#include "soc.h" #include "generic.h" #include "clock.h" -static struct map_desc at91sam9260_io_desc[] __initdata = { - { - .virtual = AT91_VA_BASE_SYS, - .pfn = __phys_to_pfn(AT91_BASE_SYS), - .length = SZ_16K, - .type = MT_DEVICE, - } -}; - -static struct map_desc at91sam9260_sram_desc[] __initdata = { - { - .virtual = AT91_IO_VIRT_BASE - AT91SAM9260_SRAM0_SIZE, - .pfn = __phys_to_pfn(AT91SAM9260_SRAM0_BASE), - .length = AT91SAM9260_SRAM0_SIZE, - .type = MT_DEVICE, - }, { - .virtual = AT91_IO_VIRT_BASE - AT91SAM9260_SRAM0_SIZE - AT91SAM9260_SRAM1_SIZE, - .pfn = __phys_to_pfn(AT91SAM9260_SRAM1_BASE), - .length = AT91SAM9260_SRAM1_SIZE, - .type = MT_DEVICE, - } -}; - -static struct map_desc at91sam9g20_sram_desc[] __initdata = { - { - .virtual = AT91_IO_VIRT_BASE - AT91SAM9G20_SRAM0_SIZE, - .pfn = __phys_to_pfn(AT91SAM9G20_SRAM0_BASE), - .length = AT91SAM9G20_SRAM0_SIZE, - .type = MT_DEVICE, - }, { - .virtual = AT91_IO_VIRT_BASE - AT91SAM9G20_SRAM0_SIZE - AT91SAM9G20_SRAM1_SIZE, - .pfn = __phys_to_pfn(AT91SAM9G20_SRAM1_BASE), - .length = AT91SAM9G20_SRAM1_SIZE, - .type = MT_DEVICE, - } -}; - -static struct map_desc at91sam9xe_sram_desc[] __initdata = { - { - .pfn = __phys_to_pfn(AT91SAM9XE_SRAM_BASE), - .type = MT_DEVICE, - } -}; - /* -------------------------------------------------------------------- * Clocks * -------------------------------------------------------------------- */ @@ -330,11 +288,9 @@ static void at91sam9260_poweroff(void) static void __init at91sam9xe_map_io(void) { - unsigned long cidr, sram_size; - - cidr = at91_sys_read(AT91_DBGU_CIDR); + unsigned long sram_size; - switch (cidr & AT91_CIDR_SRAMSIZ) { + switch (at91_soc_initdata.cidr & AT91_CIDR_SRAMSIZ) { case AT91_CIDR_SRAMSIZ_32K: sram_size = 2 * SZ_16K; break; @@ -343,38 +299,29 @@ static void __init at91sam9xe_map_io(void) sram_size = SZ_16K; } - at91sam9xe_sram_desc->virtual = AT91_IO_VIRT_BASE - sram_size; - at91sam9xe_sram_desc->length = sram_size; - - iotable_init(at91sam9xe_sram_desc, ARRAY_SIZE(at91sam9xe_sram_desc)); + at91_init_sram(0, AT91SAM9XE_SRAM_BASE, sram_size); } -void __init at91sam9260_map_io(void) +static void __init at91sam9260_map_io(void) { - /* Map peripherals */ - iotable_init(at91sam9260_io_desc, ARRAY_SIZE(at91sam9260_io_desc)); - - if (cpu_is_at91sam9xe()) + if (cpu_is_at91sam9xe()) { at91sam9xe_map_io(); - else if (cpu_is_at91sam9g20()) - iotable_init(at91sam9g20_sram_desc, ARRAY_SIZE(at91sam9g20_sram_desc)); - else - iotable_init(at91sam9260_sram_desc, ARRAY_SIZE(at91sam9260_sram_desc)); + } else if (cpu_is_at91sam9g20()) { + at91_init_sram(0, AT91SAM9G20_SRAM0_BASE, AT91SAM9G20_SRAM0_SIZE); + at91_init_sram(1, AT91SAM9G20_SRAM1_BASE, AT91SAM9G20_SRAM1_SIZE); + } else { + at91_init_sram(0, AT91SAM9260_SRAM0_BASE, AT91SAM9260_SRAM0_SIZE); + at91_init_sram(1, AT91SAM9260_SRAM1_BASE, AT91SAM9260_SRAM1_SIZE); + } } -void __init at91sam9260_initialize(unsigned long main_clock) +static void __init at91sam9260_initialize(void) { at91_arch_reset = at91sam9_alt_reset; pm_power_off = at91sam9260_poweroff; at91_extern_irq = (1 << AT91SAM9260_ID_IRQ0) | (1 << AT91SAM9260_ID_IRQ1) | (1 << AT91SAM9260_ID_IRQ2); - /* Init clock subsystem */ - at91_clock_init(main_clock); - - /* Register the processor-specific clocks */ - at91sam9260_register_clocks(); - /* Register GPIO subsystem */ at91_gpio_init(at91sam9260_gpio, 3); } @@ -421,14 +368,9 @@ static unsigned int at91sam9260_default_irq_priority[NR_AIC_IRQS] __initdata = { 0, /* Advanced Interrupt Controller */ }; -void __init at91sam9260_init_interrupts(unsigned int priority[NR_AIC_IRQS]) -{ - if (!priority) - priority = at91sam9260_default_irq_priority; - - /* Initialize the AIC interrupt controller */ - at91_aic_init(priority); - - /* Enable GPIO interrupts */ - at91_gpio_irq_setup(); -} +struct at91_init_soc __initdata at91sam9260_soc = { + .map_io = at91sam9260_map_io, + .default_irq_priority = at91sam9260_default_irq_priority, + .register_clocks = at91sam9260_register_clocks, + .init = at91sam9260_initialize, +}; diff --git a/trunk/arch/arm/mach-at91/at91sam9261.c b/trunk/arch/arm/mach-at91/at91sam9261.c index c1483168c97a..d522b47e30b5 100644 --- a/trunk/arch/arm/mach-at91/at91sam9261.c +++ b/trunk/arch/arm/mach-at91/at91sam9261.c @@ -22,36 +22,10 @@ #include #include +#include "soc.h" #include "generic.h" #include "clock.h" -static struct map_desc at91sam9261_io_desc[] __initdata = { - { - .virtual = AT91_VA_BASE_SYS, - .pfn = __phys_to_pfn(AT91_BASE_SYS), - .length = SZ_16K, - .type = MT_DEVICE, - }, -}; - -static struct map_desc at91sam9261_sram_desc[] __initdata = { - { - .virtual = AT91_IO_VIRT_BASE - AT91SAM9261_SRAM_SIZE, - .pfn = __phys_to_pfn(AT91SAM9261_SRAM_BASE), - .length = AT91SAM9261_SRAM_SIZE, - .type = MT_DEVICE, - }, -}; - -static struct map_desc at91sam9g10_sram_desc[] __initdata = { - { - .virtual = AT91_IO_VIRT_BASE - AT91SAM9G10_SRAM_SIZE, - .pfn = __phys_to_pfn(AT91SAM9G10_SRAM_BASE), - .length = AT91SAM9G10_SRAM_SIZE, - .type = MT_DEVICE, - }, -}; - /* -------------------------------------------------------------------- * Clocks * -------------------------------------------------------------------- */ @@ -302,30 +276,21 @@ static void at91sam9261_poweroff(void) * AT91SAM9261 processor initialization * -------------------------------------------------------------------- */ -void __init at91sam9261_map_io(void) +static void __init at91sam9261_map_io(void) { - /* Map peripherals */ - iotable_init(at91sam9261_io_desc, ARRAY_SIZE(at91sam9261_io_desc)); - if (cpu_is_at91sam9g10()) - iotable_init(at91sam9g10_sram_desc, ARRAY_SIZE(at91sam9g10_sram_desc)); + at91_init_sram(0, AT91SAM9G10_SRAM_BASE, AT91SAM9G10_SRAM_SIZE); else - iotable_init(at91sam9261_sram_desc, ARRAY_SIZE(at91sam9261_sram_desc)); + at91_init_sram(0, AT91SAM9261_SRAM_BASE, AT91SAM9261_SRAM_SIZE); } -void __init at91sam9261_initialize(unsigned long main_clock) +static void __init at91sam9261_initialize(void) { at91_arch_reset = at91sam9_alt_reset; pm_power_off = at91sam9261_poweroff; at91_extern_irq = (1 << AT91SAM9261_ID_IRQ0) | (1 << AT91SAM9261_ID_IRQ1) | (1 << AT91SAM9261_ID_IRQ2); - /* Init clock subsystem */ - at91_clock_init(main_clock); - - /* Register the processor-specific clocks */ - at91sam9261_register_clocks(); - /* Register GPIO subsystem */ at91_gpio_init(at91sam9261_gpio, 3); } @@ -372,14 +337,9 @@ static unsigned int at91sam9261_default_irq_priority[NR_AIC_IRQS] __initdata = { 0, /* Advanced Interrupt Controller */ }; -void __init at91sam9261_init_interrupts(unsigned int priority[NR_AIC_IRQS]) -{ - if (!priority) - priority = at91sam9261_default_irq_priority; - - /* Initialize the AIC interrupt controller */ - at91_aic_init(priority); - - /* Enable GPIO interrupts */ - at91_gpio_irq_setup(); -} +struct at91_init_soc __initdata at91sam9261_soc = { + .map_io = at91sam9261_map_io, + .default_irq_priority = at91sam9261_default_irq_priority, + .register_clocks = at91sam9261_register_clocks, + .init = at91sam9261_initialize, +}; diff --git a/trunk/arch/arm/mach-at91/at91sam9263.c b/trunk/arch/arm/mach-at91/at91sam9263.c index dc28477d14ff..044f3c927e64 100644 --- a/trunk/arch/arm/mach-at91/at91sam9263.c +++ b/trunk/arch/arm/mach-at91/at91sam9263.c @@ -21,28 +21,10 @@ #include #include +#include "soc.h" #include "generic.h" #include "clock.h" -static struct map_desc at91sam9263_io_desc[] __initdata = { - { - .virtual = AT91_VA_BASE_SYS, - .pfn = __phys_to_pfn(AT91_BASE_SYS), - .length = SZ_16K, - .type = MT_DEVICE, - }, { - .virtual = AT91_IO_VIRT_BASE - AT91SAM9263_SRAM0_SIZE, - .pfn = __phys_to_pfn(AT91SAM9263_SRAM0_BASE), - .length = AT91SAM9263_SRAM0_SIZE, - .type = MT_DEVICE, - }, { - .virtual = AT91_IO_VIRT_BASE - AT91SAM9263_SRAM0_SIZE - AT91SAM9263_SRAM1_SIZE, - .pfn = __phys_to_pfn(AT91SAM9263_SRAM1_BASE), - .length = AT91SAM9263_SRAM1_SIZE, - .type = MT_DEVICE, - }, -}; - /* -------------------------------------------------------------------- * Clocks * -------------------------------------------------------------------- */ @@ -313,24 +295,18 @@ static void at91sam9263_poweroff(void) * AT91SAM9263 processor initialization * -------------------------------------------------------------------- */ -void __init at91sam9263_map_io(void) +static void __init at91sam9263_map_io(void) { - /* Map peripherals */ - iotable_init(at91sam9263_io_desc, ARRAY_SIZE(at91sam9263_io_desc)); + at91_init_sram(0, AT91SAM9263_SRAM0_BASE, AT91SAM9263_SRAM0_SIZE); + at91_init_sram(1, AT91SAM9263_SRAM1_BASE, AT91SAM9263_SRAM1_SIZE); } -void __init at91sam9263_initialize(unsigned long main_clock) +static void __init at91sam9263_initialize(void) { at91_arch_reset = at91sam9_alt_reset; pm_power_off = at91sam9263_poweroff; at91_extern_irq = (1 << AT91SAM9263_ID_IRQ0) | (1 << AT91SAM9263_ID_IRQ1); - /* Init clock subsystem */ - at91_clock_init(main_clock); - - /* Register the processor-specific clocks */ - at91sam9263_register_clocks(); - /* Register GPIO subsystem */ at91_gpio_init(at91sam9263_gpio, 5); } @@ -377,14 +353,9 @@ static unsigned int at91sam9263_default_irq_priority[NR_AIC_IRQS] __initdata = { 0, /* Advanced Interrupt Controller (IRQ1) */ }; -void __init at91sam9263_init_interrupts(unsigned int priority[NR_AIC_IRQS]) -{ - if (!priority) - priority = at91sam9263_default_irq_priority; - - /* Initialize the AIC interrupt controller */ - at91_aic_init(priority); - - /* Enable GPIO interrupts */ - at91_gpio_irq_setup(); -} +struct at91_init_soc __initdata at91sam9263_soc = { + .map_io = at91sam9263_map_io, + .default_irq_priority = at91sam9263_default_irq_priority, + .register_clocks = at91sam9263_register_clocks, + .init = at91sam9263_initialize, +}; diff --git a/trunk/arch/arm/mach-at91/at91sam9g45.c b/trunk/arch/arm/mach-at91/at91sam9g45.c index 11e214121b23..e04c5fb6f1ee 100644 --- a/trunk/arch/arm/mach-at91/at91sam9g45.c +++ b/trunk/arch/arm/mach-at91/at91sam9g45.c @@ -22,23 +22,10 @@ #include #include +#include "soc.h" #include "generic.h" #include "clock.h" -static struct map_desc at91sam9g45_io_desc[] __initdata = { - { - .virtual = AT91_VA_BASE_SYS, - .pfn = __phys_to_pfn(AT91_BASE_SYS), - .length = SZ_16K, - .type = MT_DEVICE, - }, { - .virtual = AT91_IO_VIRT_BASE - AT91SAM9G45_SRAM_SIZE, - .pfn = __phys_to_pfn(AT91SAM9G45_SRAM_BASE), - .length = AT91SAM9G45_SRAM_SIZE, - .type = MT_DEVICE, - } -}; - /* -------------------------------------------------------------------- * Clocks * -------------------------------------------------------------------- */ @@ -329,24 +316,17 @@ static void at91sam9g45_poweroff(void) * AT91SAM9G45 processor initialization * -------------------------------------------------------------------- */ -void __init at91sam9g45_map_io(void) +static void __init at91sam9g45_map_io(void) { - /* Map peripherals */ - iotable_init(at91sam9g45_io_desc, ARRAY_SIZE(at91sam9g45_io_desc)); + at91_init_sram(0, AT91SAM9G45_SRAM_BASE, AT91SAM9G45_SRAM_SIZE); } -void __init at91sam9g45_initialize(unsigned long main_clock) +static void __init at91sam9g45_initialize(void) { at91_arch_reset = at91sam9g45_reset; pm_power_off = at91sam9g45_poweroff; at91_extern_irq = (1 << AT91SAM9G45_ID_IRQ0); - /* Init clock subsystem */ - at91_clock_init(main_clock); - - /* Register the processor-specific clocks */ - at91sam9g45_register_clocks(); - /* Register GPIO subsystem */ at91_gpio_init(at91sam9g45_gpio, 5); } @@ -393,14 +373,9 @@ static unsigned int at91sam9g45_default_irq_priority[NR_AIC_IRQS] __initdata = { 0, /* Advanced Interrupt Controller (IRQ0) */ }; -void __init at91sam9g45_init_interrupts(unsigned int priority[NR_AIC_IRQS]) -{ - if (!priority) - priority = at91sam9g45_default_irq_priority; - - /* Initialize the AIC interrupt controller */ - at91_aic_init(priority); - - /* Enable GPIO interrupts */ - at91_gpio_irq_setup(); -} +struct at91_init_soc __initdata at91sam9g45_soc = { + .map_io = at91sam9g45_map_io, + .default_irq_priority = at91sam9g45_default_irq_priority, + .register_clocks = at91sam9g45_register_clocks, + .init = at91sam9g45_initialize, +}; diff --git a/trunk/arch/arm/mach-at91/at91sam9rl.c b/trunk/arch/arm/mach-at91/at91sam9rl.c index 29dff18ed130..a238105d2c11 100644 --- a/trunk/arch/arm/mach-at91/at91sam9rl.c +++ b/trunk/arch/arm/mach-at91/at91sam9rl.c @@ -16,30 +16,16 @@ #include #include #include +#include #include #include #include #include +#include "soc.h" #include "generic.h" #include "clock.h" -static struct map_desc at91sam9rl_io_desc[] __initdata = { - { - .virtual = AT91_VA_BASE_SYS, - .pfn = __phys_to_pfn(AT91_BASE_SYS), - .length = SZ_16K, - .type = MT_DEVICE, - }, -}; - -static struct map_desc at91sam9rl_sram_desc[] __initdata = { - { - .pfn = __phys_to_pfn(AT91SAM9RL_SRAM_BASE), - .type = MT_DEVICE, - } -}; - /* -------------------------------------------------------------------- * Clocks * -------------------------------------------------------------------- */ @@ -287,16 +273,11 @@ static void at91sam9rl_poweroff(void) * AT91SAM9RL processor initialization * -------------------------------------------------------------------- */ -void __init at91sam9rl_map_io(void) +static void __init at91sam9rl_map_io(void) { - unsigned long cidr, sram_size; - - /* Map peripherals */ - iotable_init(at91sam9rl_io_desc, ARRAY_SIZE(at91sam9rl_io_desc)); - - cidr = at91_sys_read(AT91_DBGU_CIDR); + unsigned long sram_size; - switch (cidr & AT91_CIDR_SRAMSIZ) { + switch (at91_soc_initdata.cidr & AT91_CIDR_SRAMSIZ) { case AT91_CIDR_SRAMSIZ_32K: sram_size = 2 * SZ_16K; break; @@ -305,25 +286,16 @@ void __init at91sam9rl_map_io(void) sram_size = SZ_16K; } - at91sam9rl_sram_desc->virtual = AT91_IO_VIRT_BASE - sram_size; - at91sam9rl_sram_desc->length = sram_size; - /* Map SRAM */ - iotable_init(at91sam9rl_sram_desc, ARRAY_SIZE(at91sam9rl_sram_desc)); + at91_init_sram(0, AT91SAM9RL_SRAM_BASE, sram_size); } -void __init at91sam9rl_initialize(unsigned long main_clock) +static void __init at91sam9rl_initialize(void) { at91_arch_reset = at91sam9_alt_reset; pm_power_off = at91sam9rl_poweroff; at91_extern_irq = (1 << AT91SAM9RL_ID_IRQ0); - /* Init clock subsystem */ - at91_clock_init(main_clock); - - /* Register the processor-specific clocks */ - at91sam9rl_register_clocks(); - /* Register GPIO subsystem */ at91_gpio_init(at91sam9rl_gpio, 4); } @@ -370,14 +342,9 @@ static unsigned int at91sam9rl_default_irq_priority[NR_AIC_IRQS] __initdata = { 0, /* Advanced Interrupt Controller */ }; -void __init at91sam9rl_init_interrupts(unsigned int priority[NR_AIC_IRQS]) -{ - if (!priority) - priority = at91sam9rl_default_irq_priority; - - /* Initialize the AIC interrupt controller */ - at91_aic_init(priority); - - /* Enable GPIO interrupts */ - at91_gpio_irq_setup(); -} +struct at91_init_soc __initdata at91sam9rl_soc = { + .map_io = at91sam9rl_map_io, + .default_irq_priority = at91sam9rl_default_irq_priority, + .register_clocks = at91sam9rl_register_clocks, + .init = at91sam9rl_initialize, +}; diff --git a/trunk/arch/arm/mach-at91/board-1arm.c b/trunk/arch/arm/mach-at91/board-1arm.c index ab1d463aa47d..5aa58851eb39 100644 --- a/trunk/arch/arm/mach-at91/board-1arm.c +++ b/trunk/arch/arm/mach-at91/board-1arm.c @@ -46,7 +46,7 @@ static void __init onearm_init_early(void) at91rm9200_set_type(ARCH_REVISON_9200_PQFP); /* Initialize processor: 18.432 MHz crystal */ - at91rm9200_initialize(18432000); + at91_initialize(18432000); /* DBGU on ttyS0. (Rx & Tx only) */ at91_register_uart(0, 0, 0); @@ -63,11 +63,6 @@ static void __init onearm_init_early(void) at91_set_serial_console(0); } -static void __init onearm_init_irq(void) -{ - at91rm9200_init_interrupts(NULL); -} - static struct at91_eth_data __initdata onearm_eth_data = { .phy_irq_pin = AT91_PIN_PC4, .is_rmii = 1, @@ -97,8 +92,8 @@ static void __init onearm_board_init(void) MACHINE_START(ONEARM, "Ajeco 1ARM single board computer") /* Maintainer: Lennert Buytenhek */ .timer = &at91rm9200_timer, - .map_io = at91rm9200_map_io, + .map_io = at91_map_io, .init_early = onearm_init_early, - .init_irq = onearm_init_irq, + .init_irq = at91_init_irq_default, .init_machine = onearm_board_init, MACHINE_END diff --git a/trunk/arch/arm/mach-at91/board-afeb-9260v1.c b/trunk/arch/arm/mach-at91/board-afeb-9260v1.c index a4924de48c36..b0c796d42e49 100644 --- a/trunk/arch/arm/mach-at91/board-afeb-9260v1.c +++ b/trunk/arch/arm/mach-at91/board-afeb-9260v1.c @@ -51,7 +51,7 @@ static void __init afeb9260_init_early(void) { /* Initialize processor: 18.432 MHz crystal */ - at91sam9260_initialize(18432000); + at91_initialize(18432000); /* DBGU on ttyS0. (Rx & Tx only) */ at91_register_uart(0, 0, 0); @@ -70,12 +70,6 @@ static void __init afeb9260_init_early(void) at91_set_serial_console(0); } -static void __init afeb9260_init_irq(void) -{ - at91sam9260_init_interrupts(NULL); -} - - /* * USB Host port */ @@ -219,9 +213,9 @@ static void __init afeb9260_board_init(void) MACHINE_START(AFEB9260, "Custom afeb9260 board") /* Maintainer: Sergey Lapin */ .timer = &at91sam926x_timer, - .map_io = at91sam9260_map_io, + .map_io = at91_map_io, .init_early = afeb9260_init_early, - .init_irq = afeb9260_init_irq, + .init_irq = at91_init_irq_default, .init_machine = afeb9260_board_init, MACHINE_END diff --git a/trunk/arch/arm/mach-at91/board-cam60.c b/trunk/arch/arm/mach-at91/board-cam60.c index 148fccb9a25a..d1abd5898e85 100644 --- a/trunk/arch/arm/mach-at91/board-cam60.c +++ b/trunk/arch/arm/mach-at91/board-cam60.c @@ -48,7 +48,7 @@ static void __init cam60_init_early(void) { /* Initialize processor: 10 MHz crystal */ - at91sam9260_initialize(10000000); + at91_initialize(10000000); /* DBGU on ttyS0. (Rx & Tx only) */ at91_register_uart(0, 0, 0); @@ -57,12 +57,6 @@ static void __init cam60_init_early(void) at91_set_serial_console(0); } -static void __init cam60_init_irq(void) -{ - at91sam9260_init_interrupts(NULL); -} - - /* * USB Host */ @@ -199,8 +193,8 @@ static void __init cam60_board_init(void) MACHINE_START(CAM60, "KwikByte CAM60") /* Maintainer: KwikByte */ .timer = &at91sam926x_timer, - .map_io = at91sam9260_map_io, + .map_io = at91_map_io, .init_early = cam60_init_early, - .init_irq = cam60_init_irq, + .init_irq = at91_init_irq_default, .init_machine = cam60_board_init, MACHINE_END diff --git a/trunk/arch/arm/mach-at91/board-cap9adk.c b/trunk/arch/arm/mach-at91/board-cap9adk.c index cdb65d483250..679b0b743e92 100644 --- a/trunk/arch/arm/mach-at91/board-cap9adk.c +++ b/trunk/arch/arm/mach-at91/board-cap9adk.c @@ -53,7 +53,7 @@ static void __init cap9adk_init_early(void) { /* Initialize processor: 12 MHz crystal */ - at91cap9_initialize(12000000); + at91_initialize(12000000); /* Setup the LEDs: USER1 and USER2 LED for cpu/timer... */ at91_init_leds(AT91_PIN_PA10, AT91_PIN_PA11); @@ -65,12 +65,6 @@ static void __init cap9adk_init_early(void) at91_set_serial_console(0); } -static void __init cap9adk_init_irq(void) -{ - at91cap9_init_interrupts(NULL); -} - - /* * USB Host port */ @@ -397,8 +391,8 @@ static void __init cap9adk_board_init(void) MACHINE_START(AT91CAP9ADK, "Atmel AT91CAP9A-DK") /* Maintainer: Stelian Pop */ .timer = &at91sam926x_timer, - .map_io = at91cap9_map_io, + .map_io = at91_map_io, .init_early = cap9adk_init_early, - .init_irq = cap9adk_init_irq, + .init_irq = at91_init_irq_default, .init_machine = cap9adk_board_init, MACHINE_END diff --git a/trunk/arch/arm/mach-at91/board-carmeva.c b/trunk/arch/arm/mach-at91/board-carmeva.c index f36b18687494..c578c5d90728 100644 --- a/trunk/arch/arm/mach-at91/board-carmeva.c +++ b/trunk/arch/arm/mach-at91/board-carmeva.c @@ -43,7 +43,7 @@ static void __init carmeva_init_early(void) { /* Initialize processor: 20.000 MHz crystal */ - at91rm9200_initialize(20000000); + at91_initialize(20000000); /* DBGU on ttyS0. (Rx & Tx only) */ at91_register_uart(0, 0, 0); @@ -57,11 +57,6 @@ static void __init carmeva_init_early(void) at91_set_serial_console(0); } -static void __init carmeva_init_irq(void) -{ - at91rm9200_init_interrupts(NULL); -} - static struct at91_eth_data __initdata carmeva_eth_data = { .phy_irq_pin = AT91_PIN_PC4, .is_rmii = 1, @@ -163,8 +158,8 @@ static void __init carmeva_board_init(void) MACHINE_START(CARMEVA, "Carmeva") /* Maintainer: Conitec Datasystems */ .timer = &at91rm9200_timer, - .map_io = at91rm9200_map_io, + .map_io = at91_map_io, .init_early = carmeva_init_early, - .init_irq = carmeva_init_irq, + .init_irq = at91_init_irq_default, .init_machine = carmeva_board_init, MACHINE_END diff --git a/trunk/arch/arm/mach-at91/board-cpu9krea.c b/trunk/arch/arm/mach-at91/board-cpu9krea.c index 980511084fe4..f4da8a16d5dc 100644 --- a/trunk/arch/arm/mach-at91/board-cpu9krea.c +++ b/trunk/arch/arm/mach-at91/board-cpu9krea.c @@ -50,7 +50,7 @@ static void __init cpu9krea_init_early(void) { /* Initialize processor: 18.432 MHz crystal */ - at91sam9260_initialize(18432000); + at91_initialize(18432000); /* DGBU on ttyS0. (Rx & Tx only) */ at91_register_uart(0, 0, 0); @@ -81,11 +81,6 @@ static void __init cpu9krea_init_early(void) at91_set_serial_console(0); } -static void __init cpu9krea_init_irq(void) -{ - at91sam9260_init_interrupts(NULL); -} - /* * USB Host port */ @@ -376,8 +371,8 @@ MACHINE_START(CPUAT9G20, "Eukrea CPU9G20") #endif /* Maintainer: Eric Benard - EUKREA Electromatique */ .timer = &at91sam926x_timer, - .map_io = at91sam9260_map_io, + .map_io = at91_map_io, .init_early = cpu9krea_init_early, - .init_irq = cpu9krea_init_irq, + .init_irq = at91_init_irq_default, .init_machine = cpu9krea_board_init, MACHINE_END diff --git a/trunk/arch/arm/mach-at91/board-cpuat91.c b/trunk/arch/arm/mach-at91/board-cpuat91.c index 6daabe3907a1..2d919f5a4f57 100644 --- a/trunk/arch/arm/mach-at91/board-cpuat91.c +++ b/trunk/arch/arm/mach-at91/board-cpuat91.c @@ -57,7 +57,7 @@ static void __init cpuat91_init_early(void) at91rm9200_set_type(ARCH_REVISON_9200_PQFP); /* Initialize processor: 18.432 MHz crystal */ - at91rm9200_initialize(18432000); + at91_initialize(18432000); /* DBGU on ttyS0. (Rx & Tx only) */ at91_register_uart(0, 0, 0); @@ -82,11 +82,6 @@ static void __init cpuat91_init_early(void) at91_set_serial_console(0); } -static void __init cpuat91_init_irq(void) -{ - at91rm9200_init_interrupts(NULL); -} - static struct at91_eth_data __initdata cpuat91_eth_data = { .is_rmii = 1, }; @@ -180,8 +175,8 @@ static void __init cpuat91_board_init(void) MACHINE_START(CPUAT91, "Eukrea") /* Maintainer: Eric Benard - EUKREA Electromatique */ .timer = &at91rm9200_timer, - .map_io = at91rm9200_map_io, + .map_io = at91_map_io, .init_early = cpuat91_init_early, - .init_irq = cpuat91_init_irq, + .init_irq = at91_init_irq_default, .init_machine = cpuat91_board_init, MACHINE_END diff --git a/trunk/arch/arm/mach-at91/board-csb337.c b/trunk/arch/arm/mach-at91/board-csb337.c index d98bcec1dfe0..17654d5e94e6 100644 --- a/trunk/arch/arm/mach-at91/board-csb337.c +++ b/trunk/arch/arm/mach-at91/board-csb337.c @@ -46,7 +46,7 @@ static void __init csb337_init_early(void) { /* Initialize processor: 3.6864 MHz crystal */ - at91rm9200_initialize(3686400); + at91_initialize(3686400); /* Setup the LEDs */ at91_init_leds(AT91_PIN_PB0, AT91_PIN_PB1); @@ -58,11 +58,6 @@ static void __init csb337_init_early(void) at91_set_serial_console(0); } -static void __init csb337_init_irq(void) -{ - at91rm9200_init_interrupts(NULL); -} - static struct at91_eth_data __initdata csb337_eth_data = { .phy_irq_pin = AT91_PIN_PC2, .is_rmii = 0, @@ -258,8 +253,8 @@ static void __init csb337_board_init(void) MACHINE_START(CSB337, "Cogent CSB337") /* Maintainer: Bill Gatliff */ .timer = &at91rm9200_timer, - .map_io = at91rm9200_map_io, + .map_io = at91_map_io, .init_early = csb337_init_early, - .init_irq = csb337_init_irq, + .init_irq = at91_init_irq_default, .init_machine = csb337_board_init, MACHINE_END diff --git a/trunk/arch/arm/mach-at91/board-csb637.c b/trunk/arch/arm/mach-at91/board-csb637.c index 019aab4e20b0..72b55674616c 100644 --- a/trunk/arch/arm/mach-at91/board-csb637.c +++ b/trunk/arch/arm/mach-at91/board-csb637.c @@ -43,7 +43,7 @@ static void __init csb637_init_early(void) { /* Initialize processor: 3.6864 MHz crystal */ - at91rm9200_initialize(3686400); + at91_initialize(3686400); /* DBGU on ttyS0. (Rx & Tx only) */ at91_register_uart(0, 0, 0); @@ -52,11 +52,6 @@ static void __init csb637_init_early(void) at91_set_serial_console(0); } -static void __init csb637_init_irq(void) -{ - at91rm9200_init_interrupts(NULL); -} - static struct at91_eth_data __initdata csb637_eth_data = { .phy_irq_pin = AT91_PIN_PC0, .is_rmii = 0, @@ -139,8 +134,8 @@ static void __init csb637_board_init(void) MACHINE_START(CSB637, "Cogent CSB637") /* Maintainer: Bill Gatliff */ .timer = &at91rm9200_timer, - .map_io = at91rm9200_map_io, + .map_io = at91_map_io, .init_early = csb637_init_early, - .init_irq = csb637_init_irq, + .init_irq = at91_init_irq_default, .init_machine = csb637_board_init, MACHINE_END diff --git a/trunk/arch/arm/mach-at91/board-eb9200.c b/trunk/arch/arm/mach-at91/board-eb9200.c index e9484535cbc8..01170a2766a8 100644 --- a/trunk/arch/arm/mach-at91/board-eb9200.c +++ b/trunk/arch/arm/mach-at91/board-eb9200.c @@ -43,7 +43,7 @@ static void __init eb9200_init_early(void) { /* Initialize processor: 18.432 MHz crystal */ - at91rm9200_initialize(18432000); + at91_initialize(18432000); /* DBGU on ttyS0. (Rx & Tx only) */ at91_register_uart(0, 0, 0); @@ -60,11 +60,6 @@ static void __init eb9200_init_early(void) at91_set_serial_console(0); } -static void __init eb9200_init_irq(void) -{ - at91rm9200_init_interrupts(NULL); -} - static struct at91_eth_data __initdata eb9200_eth_data = { .phy_irq_pin = AT91_PIN_PC4, .is_rmii = 1, @@ -121,8 +116,8 @@ static void __init eb9200_board_init(void) MACHINE_START(ATEB9200, "Embest ATEB9200") .timer = &at91rm9200_timer, - .map_io = at91rm9200_map_io, + .map_io = at91_map_io, .init_early = eb9200_init_early, - .init_irq = eb9200_init_irq, + .init_irq = at91_init_irq_default, .init_machine = eb9200_board_init, MACHINE_END diff --git a/trunk/arch/arm/mach-at91/board-ecbat91.c b/trunk/arch/arm/mach-at91/board-ecbat91.c index a6f57faa10a7..7c0313c51f26 100644 --- a/trunk/arch/arm/mach-at91/board-ecbat91.c +++ b/trunk/arch/arm/mach-at91/board-ecbat91.c @@ -49,7 +49,7 @@ static void __init ecb_at91init_early(void) at91rm9200_set_type(ARCH_REVISON_9200_PQFP); /* Initialize processor: 18.432 MHz crystal */ - at91rm9200_initialize(18432000); + at91_initialize(18432000); /* Setup the LEDs */ at91_init_leds(AT91_PIN_PC7, AT91_PIN_PC7); @@ -64,11 +64,6 @@ static void __init ecb_at91init_early(void) at91_set_serial_console(0); } -static void __init ecb_at91init_irq(void) -{ - at91rm9200_init_interrupts(NULL); -} - static struct at91_eth_data __initdata ecb_at91eth_data = { .phy_irq_pin = AT91_PIN_PC4, .is_rmii = 0, @@ -173,8 +168,8 @@ static void __init ecb_at91board_init(void) MACHINE_START(ECBAT91, "emQbit's ECB_AT91") /* Maintainer: emQbit.com */ .timer = &at91rm9200_timer, - .map_io = at91rm9200_map_io, + .map_io = at91_map_io, .init_early = ecb_at91init_early, - .init_irq = ecb_at91init_irq, + .init_irq = at91_init_irq_default, .init_machine = ecb_at91board_init, MACHINE_END diff --git a/trunk/arch/arm/mach-at91/board-eco920.c b/trunk/arch/arm/mach-at91/board-eco920.c index bfc0062d1483..8252c722607b 100644 --- a/trunk/arch/arm/mach-at91/board-eco920.c +++ b/trunk/arch/arm/mach-at91/board-eco920.c @@ -35,7 +35,7 @@ static void __init eco920_init_early(void) /* Set cpu type: PQFP */ at91rm9200_set_type(ARCH_REVISON_9200_PQFP); - at91rm9200_initialize(18432000); + at91_initialize(18432000); /* Setup the LEDs */ at91_init_leds(AT91_PIN_PB0, AT91_PIN_PB1); @@ -47,11 +47,6 @@ static void __init eco920_init_early(void) at91_set_serial_console(0); } -static void __init eco920_init_irq(void) -{ - at91rm9200_init_interrupts(NULL); -} - static struct at91_eth_data __initdata eco920_eth_data = { .phy_irq_pin = AT91_PIN_PC2, .is_rmii = 1, @@ -135,8 +130,8 @@ static void __init eco920_board_init(void) MACHINE_START(ECO920, "eco920") /* Maintainer: Sascha Hauer */ .timer = &at91rm9200_timer, - .map_io = at91rm9200_map_io, + .map_io = at91_map_io, .init_early = eco920_init_early, - .init_irq = eco920_init_irq, + .init_irq = at91_init_irq_default, .init_machine = eco920_board_init, MACHINE_END diff --git a/trunk/arch/arm/mach-at91/board-flexibity.c b/trunk/arch/arm/mach-at91/board-flexibity.c index 466c063b8d21..4c3f65d9c59b 100644 --- a/trunk/arch/arm/mach-at91/board-flexibity.c +++ b/trunk/arch/arm/mach-at91/board-flexibity.c @@ -40,7 +40,7 @@ static void __init flexibity_init_early(void) { /* Initialize processor: 18.432 MHz crystal */ - at91sam9260_initialize(18432000); + at91_initialize(18432000); /* DBGU on ttyS0. (Rx & Tx only) */ at91_register_uart(0, 0, 0); @@ -49,11 +49,6 @@ static void __init flexibity_init_early(void) at91_set_serial_console(0); } -static void __init flexibity_init_irq(void) -{ - at91sam9260_init_interrupts(NULL); -} - /* USB Host port */ static struct at91_usbh_data __initdata flexibity_usbh_data = { .ports = 2, @@ -155,8 +150,8 @@ static void __init flexibity_board_init(void) MACHINE_START(FLEXIBITY, "Flexibity Connect") /* Maintainer: Maxim Osipov */ .timer = &at91sam926x_timer, - .map_io = at91sam9260_map_io, + .map_io = at91_map_io, .init_early = flexibity_init_early, - .init_irq = flexibity_init_irq, + .init_irq = at91_init_irq_default, .init_machine = flexibity_board_init, MACHINE_END diff --git a/trunk/arch/arm/mach-at91/board-foxg20.c b/trunk/arch/arm/mach-at91/board-foxg20.c index e2d1dc9eff45..f27d1a780cfa 100644 --- a/trunk/arch/arm/mach-at91/board-foxg20.c +++ b/trunk/arch/arm/mach-at91/board-foxg20.c @@ -60,7 +60,7 @@ static void __init foxg20_init_early(void) { /* Initialize processor: 18.432 MHz crystal */ - at91sam9260_initialize(18432000); + at91_initialize(18432000); /* DBGU on ttyS0. (Rx & Tx only) */ at91_register_uart(0, 0, 0); @@ -101,12 +101,6 @@ static void __init foxg20_init_early(void) } -static void __init foxg20_init_irq(void) -{ - at91sam9260_init_interrupts(NULL); -} - - /* * USB Host port */ @@ -267,8 +261,8 @@ static void __init foxg20_board_init(void) MACHINE_START(ACMENETUSFOXG20, "Acme Systems srl FOX Board G20") /* Maintainer: Sergio Tanzilli */ .timer = &at91sam926x_timer, - .map_io = at91sam9260_map_io, + .map_io = at91_map_io, .init_early = foxg20_init_early, - .init_irq = foxg20_init_irq, + .init_irq = at91_init_irq_default, .init_machine = foxg20_board_init, MACHINE_END diff --git a/trunk/arch/arm/mach-at91/board-gsia18s.c b/trunk/arch/arm/mach-at91/board-gsia18s.c index 1d4f36b3cb27..2e95949737e6 100644 --- a/trunk/arch/arm/mach-at91/board-gsia18s.c +++ b/trunk/arch/arm/mach-at91/board-gsia18s.c @@ -75,11 +75,6 @@ static void __init gsia18s_init_early(void) at91_register_uart(AT91SAM9260_ID_US4, 5, 0); } -static void __init init_irq(void) -{ - at91sam9260_init_interrupts(NULL); -} - /* * Two USB Host ports */ @@ -577,8 +572,8 @@ static void __init gsia18s_board_init(void) MACHINE_START(GSIA18S, "GS_IA18_S") .timer = &at91sam926x_timer, - .map_io = at91sam9260_map_io, + .map_io = at91_map_io, .init_early = gsia18s_init_early, - .init_irq = init_irq, + .init_irq = at91_init_irq_default, .init_machine = gsia18s_board_init, MACHINE_END diff --git a/trunk/arch/arm/mach-at91/board-kafa.c b/trunk/arch/arm/mach-at91/board-kafa.c index 9b003ff744ba..4a170890b3b1 100644 --- a/trunk/arch/arm/mach-at91/board-kafa.c +++ b/trunk/arch/arm/mach-at91/board-kafa.c @@ -46,7 +46,7 @@ static void __init kafa_init_early(void) at91rm9200_set_type(ARCH_REVISON_9200_PQFP); /* Initialize processor: 18.432 MHz crystal */ - at91rm9200_initialize(18432000); + at91_initialize(18432000); /* Set up the LEDs */ at91_init_leds(AT91_PIN_PB4, AT91_PIN_PB4); @@ -61,11 +61,6 @@ static void __init kafa_init_early(void) at91_set_serial_console(0); } -static void __init kafa_init_irq(void) -{ - at91rm9200_init_interrupts(NULL); -} - static struct at91_eth_data __initdata kafa_eth_data = { .phy_irq_pin = AT91_PIN_PC4, .is_rmii = 0, @@ -99,8 +94,8 @@ static void __init kafa_board_init(void) MACHINE_START(KAFA, "Sperry-Sun KAFA") /* Maintainer: Sergei Sharonov */ .timer = &at91rm9200_timer, - .map_io = at91rm9200_map_io, + .map_io = at91_map_io, .init_early = kafa_init_early, - .init_irq = kafa_init_irq, + .init_irq = at91_init_irq_default, .init_machine = kafa_board_init, MACHINE_END diff --git a/trunk/arch/arm/mach-at91/board-kb9202.c b/trunk/arch/arm/mach-at91/board-kb9202.c index a813a74b65f9..9dc8d496ead1 100644 --- a/trunk/arch/arm/mach-at91/board-kb9202.c +++ b/trunk/arch/arm/mach-at91/board-kb9202.c @@ -48,7 +48,7 @@ static void __init kb9202_init_early(void) at91rm9200_set_type(ARCH_REVISON_9200_PQFP); /* Initialize processor: 10 MHz crystal */ - at91rm9200_initialize(10000000); + at91_initialize(10000000); /* Set up the LEDs */ at91_init_leds(AT91_PIN_PC19, AT91_PIN_PC18); @@ -69,11 +69,6 @@ static void __init kb9202_init_early(void) at91_set_serial_console(0); } -static void __init kb9202_init_irq(void) -{ - at91rm9200_init_interrupts(NULL); -} - static struct at91_eth_data __initdata kb9202_eth_data = { .phy_irq_pin = AT91_PIN_PB29, .is_rmii = 0, @@ -140,8 +135,8 @@ static void __init kb9202_board_init(void) MACHINE_START(KB9200, "KB920x") /* Maintainer: KwikByte, Inc. */ .timer = &at91rm9200_timer, - .map_io = at91rm9200_map_io, + .map_io = at91_map_io, .init_early = kb9202_init_early, - .init_irq = kb9202_init_irq, + .init_irq = at91_init_irq_default, .init_machine = kb9202_board_init, MACHINE_END diff --git a/trunk/arch/arm/mach-at91/board-neocore926.c b/trunk/arch/arm/mach-at91/board-neocore926.c index 961e805db68c..9bc6ab32e0ac 100644 --- a/trunk/arch/arm/mach-at91/board-neocore926.c +++ b/trunk/arch/arm/mach-at91/board-neocore926.c @@ -54,7 +54,7 @@ static void __init neocore926_init_early(void) { /* Initialize processor: 20 MHz crystal */ - at91sam9263_initialize(20000000); + at91_initialize(20000000); /* DBGU on ttyS0. (Rx & Tx only) */ at91_register_uart(0, 0, 0); @@ -66,12 +66,6 @@ static void __init neocore926_init_early(void) at91_set_serial_console(0); } -static void __init neocore926_init_irq(void) -{ - at91sam9263_init_interrupts(NULL); -} - - /* * USB Host port */ @@ -388,8 +382,8 @@ static void __init neocore926_board_init(void) MACHINE_START(NEOCORE926, "ADENEO NEOCORE 926") /* Maintainer: ADENEO */ .timer = &at91sam926x_timer, - .map_io = at91sam9263_map_io, + .map_io = at91_map_io, .init_early = neocore926_init_early, - .init_irq = neocore926_init_irq, + .init_irq = at91_init_irq_default, .init_machine = neocore926_board_init, MACHINE_END diff --git a/trunk/arch/arm/mach-at91/board-pcontrol-g20.c b/trunk/arch/arm/mach-at91/board-pcontrol-g20.c index 21a21af25878..49e3f699b48e 100644 --- a/trunk/arch/arm/mach-at91/board-pcontrol-g20.c +++ b/trunk/arch/arm/mach-at91/board-pcontrol-g20.c @@ -53,13 +53,6 @@ static void __init pcontrol_g20_init_early(void) at91_register_uart(AT91SAM9260_ID_US4, 3, 0); } - -static void __init init_irq(void) -{ - at91sam9260_init_interrupts(NULL); -} - - static struct sam9_smc_config __initdata pcontrol_smc_config[2] = { { .ncs_read_setup = 16, .nrd_setup = 18, @@ -223,8 +216,8 @@ static void __init pcontrol_g20_board_init(void) MACHINE_START(PCONTROL_G20, "PControl G20") /* Maintainer: pgsellmann@portner-elektronik.at */ .timer = &at91sam926x_timer, - .map_io = at91sam9260_map_io, + .map_io = at91_map_io, .init_early = pcontrol_g20_init_early, - .init_irq = init_irq, + .init_irq = at91_init_irq_default, .init_machine = pcontrol_g20_board_init, MACHINE_END diff --git a/trunk/arch/arm/mach-at91/board-picotux200.c b/trunk/arch/arm/mach-at91/board-picotux200.c index 756cc2a745dd..b7b8390e8a00 100644 --- a/trunk/arch/arm/mach-at91/board-picotux200.c +++ b/trunk/arch/arm/mach-at91/board-picotux200.c @@ -46,7 +46,7 @@ static void __init picotux200_init_early(void) { /* Initialize processor: 18.432 MHz crystal */ - at91rm9200_initialize(18432000); + at91_initialize(18432000); /* DBGU on ttyS0. (Rx & Tx only) */ at91_register_uart(0, 0, 0); @@ -60,11 +60,6 @@ static void __init picotux200_init_early(void) at91_set_serial_console(0); } -static void __init picotux200_init_irq(void) -{ - at91rm9200_init_interrupts(NULL); -} - static struct at91_eth_data __initdata picotux200_eth_data = { .phy_irq_pin = AT91_PIN_PC4, .is_rmii = 1, @@ -124,8 +119,8 @@ static void __init picotux200_board_init(void) MACHINE_START(PICOTUX2XX, "picotux 200") /* Maintainer: Kleinhenz Elektronik GmbH */ .timer = &at91rm9200_timer, - .map_io = at91rm9200_map_io, + .map_io = at91_map_io, .init_early = picotux200_init_early, - .init_irq = picotux200_init_irq, + .init_irq = at91_init_irq_default, .init_machine = picotux200_board_init, MACHINE_END diff --git a/trunk/arch/arm/mach-at91/board-qil-a9260.c b/trunk/arch/arm/mach-at91/board-qil-a9260.c index d1a6001b0bd8..81f911033681 100644 --- a/trunk/arch/arm/mach-at91/board-qil-a9260.c +++ b/trunk/arch/arm/mach-at91/board-qil-a9260.c @@ -51,7 +51,7 @@ static void __init ek_init_early(void) { /* Initialize processor: 12.000 MHz crystal */ - at91sam9260_initialize(12000000); + at91_initialize(12000000); /* DBGU on ttyS0. (Rx & Tx only) */ at91_register_uart(0, 0, 0); @@ -72,12 +72,6 @@ static void __init ek_init_early(void) } -static void __init ek_init_irq(void) -{ - at91sam9260_init_interrupts(NULL); -} - - /* * USB Host port */ @@ -269,8 +263,8 @@ static void __init ek_board_init(void) MACHINE_START(QIL_A9260, "CALAO QIL_A9260") /* Maintainer: calao-systems */ .timer = &at91sam926x_timer, - .map_io = at91sam9260_map_io, + .map_io = at91_map_io, .init_early = ek_init_early, - .init_irq = ek_init_irq, + .init_irq = at91_init_irq_default, .init_machine = ek_board_init, MACHINE_END diff --git a/trunk/arch/arm/mach-at91/board-rm9200dk.c b/trunk/arch/arm/mach-at91/board-rm9200dk.c index aef9627710b0..6f08faadb474 100644 --- a/trunk/arch/arm/mach-at91/board-rm9200dk.c +++ b/trunk/arch/arm/mach-at91/board-rm9200dk.c @@ -48,7 +48,7 @@ static void __init dk_init_early(void) { /* Initialize processor: 18.432 MHz crystal */ - at91rm9200_initialize(18432000); + at91_initialize(18432000); /* Setup the LEDs */ at91_init_leds(AT91_PIN_PB2, AT91_PIN_PB2); @@ -65,11 +65,6 @@ static void __init dk_init_early(void) at91_set_serial_console(0); } -static void __init dk_init_irq(void) -{ - at91rm9200_init_interrupts(NULL); -} - static struct at91_eth_data __initdata dk_eth_data = { .phy_irq_pin = AT91_PIN_PC4, .is_rmii = 1, @@ -228,8 +223,8 @@ static void __init dk_board_init(void) MACHINE_START(AT91RM9200DK, "Atmel AT91RM9200-DK") /* Maintainer: SAN People/Atmel */ .timer = &at91rm9200_timer, - .map_io = at91rm9200_map_io, + .map_io = at91_map_io, .init_early = dk_init_early, - .init_irq = dk_init_irq, + .init_irq = at91_init_irq_default, .init_machine = dk_board_init, MACHINE_END diff --git a/trunk/arch/arm/mach-at91/board-rm9200ek.c b/trunk/arch/arm/mach-at91/board-rm9200ek.c index 015a02183080..85bcccd7b9e4 100644 --- a/trunk/arch/arm/mach-at91/board-rm9200ek.c +++ b/trunk/arch/arm/mach-at91/board-rm9200ek.c @@ -48,7 +48,7 @@ static void __init ek_init_early(void) { /* Initialize processor: 18.432 MHz crystal */ - at91rm9200_initialize(18432000); + at91_initialize(18432000); /* Setup the LEDs */ at91_init_leds(AT91_PIN_PB1, AT91_PIN_PB2); @@ -65,11 +65,6 @@ static void __init ek_init_early(void) at91_set_serial_console(0); } -static void __init ek_init_irq(void) -{ - at91rm9200_init_interrupts(NULL); -} - static struct at91_eth_data __initdata ek_eth_data = { .phy_irq_pin = AT91_PIN_PC4, .is_rmii = 1, @@ -194,8 +189,8 @@ static void __init ek_board_init(void) MACHINE_START(AT91RM9200EK, "Atmel AT91RM9200-EK") /* Maintainer: SAN People/Atmel */ .timer = &at91rm9200_timer, - .map_io = at91rm9200_map_io, + .map_io = at91_map_io, .init_early = ek_init_early, - .init_irq = ek_init_irq, + .init_irq = at91_init_irq_default, .init_machine = ek_board_init, MACHINE_END diff --git a/trunk/arch/arm/mach-at91/board-sam9-l9260.c b/trunk/arch/arm/mach-at91/board-sam9-l9260.c index aaf1bf0989b3..4d3a02f1289e 100644 --- a/trunk/arch/arm/mach-at91/board-sam9-l9260.c +++ b/trunk/arch/arm/mach-at91/board-sam9-l9260.c @@ -47,7 +47,7 @@ static void __init ek_init_early(void) { /* Initialize processor: 18.432 MHz crystal */ - at91sam9260_initialize(18432000); + at91_initialize(18432000); /* Setup the LEDs */ at91_init_leds(AT91_PIN_PA9, AT91_PIN_PA6); @@ -67,12 +67,6 @@ static void __init ek_init_early(void) at91_set_serial_console(0); } -static void __init ek_init_irq(void) -{ - at91sam9260_init_interrupts(NULL); -} - - /* * USB Host port */ @@ -213,8 +207,8 @@ static void __init ek_board_init(void) MACHINE_START(SAM9_L9260, "Olimex SAM9-L9260") /* Maintainer: Olimex */ .timer = &at91sam926x_timer, - .map_io = at91sam9260_map_io, + .map_io = at91_map_io, .init_early = ek_init_early, - .init_irq = ek_init_irq, + .init_irq = at91_init_irq_default, .init_machine = ek_board_init, MACHINE_END diff --git a/trunk/arch/arm/mach-at91/board-sam9260ek.c b/trunk/arch/arm/mach-at91/board-sam9260ek.c index 5c240743c5b7..8a50c3e67186 100644 --- a/trunk/arch/arm/mach-at91/board-sam9260ek.c +++ b/trunk/arch/arm/mach-at91/board-sam9260ek.c @@ -53,7 +53,7 @@ static void __init ek_init_early(void) { /* Initialize processor: 18.432 MHz crystal */ - at91sam9260_initialize(18432000); + at91_initialize(18432000); /* DBGU on ttyS0. (Rx & Tx only) */ at91_register_uart(0, 0, 0); @@ -70,12 +70,6 @@ static void __init ek_init_early(void) at91_set_serial_console(0); } -static void __init ek_init_irq(void) -{ - at91sam9260_init_interrupts(NULL); -} - - /* * USB Host port */ @@ -354,8 +348,8 @@ static void __init ek_board_init(void) MACHINE_START(AT91SAM9260EK, "Atmel AT91SAM9260-EK") /* Maintainer: Atmel */ .timer = &at91sam926x_timer, - .map_io = at91sam9260_map_io, + .map_io = at91_map_io, .init_early = ek_init_early, - .init_irq = ek_init_irq, + .init_irq = at91_init_irq_default, .init_machine = ek_board_init, MACHINE_END diff --git a/trunk/arch/arm/mach-at91/board-sam9261ek.c b/trunk/arch/arm/mach-at91/board-sam9261ek.c index b60c22b6e241..5096a0ec50c1 100644 --- a/trunk/arch/arm/mach-at91/board-sam9261ek.c +++ b/trunk/arch/arm/mach-at91/board-sam9261ek.c @@ -57,7 +57,7 @@ static void __init ek_init_early(void) { /* Initialize processor: 18.432 MHz crystal */ - at91sam9261_initialize(18432000); + at91_initialize(18432000); /* Setup the LEDs */ at91_init_leds(AT91_PIN_PA13, AT91_PIN_PA14); @@ -69,12 +69,6 @@ static void __init ek_init_early(void) at91_set_serial_console(0); } -static void __init ek_init_irq(void) -{ - at91sam9261_init_interrupts(NULL); -} - - /* * DM9000 ethernet device */ @@ -621,8 +615,8 @@ MACHINE_START(AT91SAM9G10EK, "Atmel AT91SAM9G10-EK") #endif /* Maintainer: Atmel */ .timer = &at91sam926x_timer, - .map_io = at91sam9261_map_io, + .map_io = at91_map_io, .init_early = ek_init_early, - .init_irq = ek_init_irq, + .init_irq = at91_init_irq_default, .init_machine = ek_board_init, MACHINE_END diff --git a/trunk/arch/arm/mach-at91/board-sam9263ek.c b/trunk/arch/arm/mach-at91/board-sam9263ek.c index 9bbdc92ea194..ea8f185d3b9d 100644 --- a/trunk/arch/arm/mach-at91/board-sam9263ek.c +++ b/trunk/arch/arm/mach-at91/board-sam9263ek.c @@ -56,7 +56,7 @@ static void __init ek_init_early(void) { /* Initialize processor: 16.367 MHz crystal */ - at91sam9263_initialize(16367660); + at91_initialize(16367660); /* DBGU on ttyS0. (Rx & Tx only) */ at91_register_uart(0, 0, 0); @@ -68,12 +68,6 @@ static void __init ek_init_early(void) at91_set_serial_console(0); } -static void __init ek_init_irq(void) -{ - at91sam9263_init_interrupts(NULL); -} - - /* * USB Host port */ @@ -452,8 +446,8 @@ static void __init ek_board_init(void) MACHINE_START(AT91SAM9263EK, "Atmel AT91SAM9263-EK") /* Maintainer: Atmel */ .timer = &at91sam926x_timer, - .map_io = at91sam9263_map_io, + .map_io = at91_map_io, .init_early = ek_init_early, - .init_irq = ek_init_irq, + .init_irq = at91_init_irq_default, .init_machine = ek_board_init, MACHINE_END diff --git a/trunk/arch/arm/mach-at91/board-sam9g20ek.c b/trunk/arch/arm/mach-at91/board-sam9g20ek.c index 1325a50101a8..817f59d7251b 100644 --- a/trunk/arch/arm/mach-at91/board-sam9g20ek.c +++ b/trunk/arch/arm/mach-at91/board-sam9g20ek.c @@ -64,7 +64,7 @@ static int inline ek_have_2mmc(void) static void __init ek_init_early(void) { /* Initialize processor: 18.432 MHz crystal */ - at91sam9260_initialize(18432000); + at91_initialize(18432000); /* DBGU on ttyS0. (Rx & Tx only) */ at91_register_uart(0, 0, 0); @@ -81,12 +81,6 @@ static void __init ek_init_early(void) at91_set_serial_console(0); } -static void __init ek_init_irq(void) -{ - at91sam9260_init_interrupts(NULL); -} - - /* * USB Host port */ @@ -404,17 +398,17 @@ static void __init ek_board_init(void) MACHINE_START(AT91SAM9G20EK, "Atmel AT91SAM9G20-EK") /* Maintainer: Atmel */ .timer = &at91sam926x_timer, - .map_io = at91sam9260_map_io, + .map_io = at91_map_io, .init_early = ek_init_early, - .init_irq = ek_init_irq, + .init_irq = at91_init_irq_default, .init_machine = ek_board_init, MACHINE_END MACHINE_START(AT91SAM9G20EK_2MMC, "Atmel AT91SAM9G20-EK 2 MMC Slot Mod") /* Maintainer: Atmel */ .timer = &at91sam926x_timer, - .map_io = at91sam9260_map_io, + .map_io = at91_map_io, .init_early = ek_init_early, - .init_irq = ek_init_irq, + .init_irq = at91_init_irq_default, .init_machine = ek_board_init, MACHINE_END diff --git a/trunk/arch/arm/mach-at91/board-sam9m10g45ek.c b/trunk/arch/arm/mach-at91/board-sam9m10g45ek.c index 33eaa135f248..ad234ccbf57e 100644 --- a/trunk/arch/arm/mach-at91/board-sam9m10g45ek.c +++ b/trunk/arch/arm/mach-at91/board-sam9m10g45ek.c @@ -50,7 +50,7 @@ static void __init ek_init_early(void) { /* Initialize processor: 12.000 MHz crystal */ - at91sam9g45_initialize(12000000); + at91_initialize(12000000); /* DGBU on ttyS0. (Rx & Tx only) */ at91_register_uart(0, 0, 0); @@ -63,12 +63,6 @@ static void __init ek_init_early(void) at91_set_serial_console(0); } -static void __init ek_init_irq(void) -{ - at91sam9g45_init_interrupts(NULL); -} - - /* * USB HS Host port (common to OHCI & EHCI) */ @@ -422,8 +416,8 @@ static void __init ek_board_init(void) MACHINE_START(AT91SAM9M10G45EK, "Atmel AT91SAM9M10G45-EK") /* Maintainer: Atmel */ .timer = &at91sam926x_timer, - .map_io = at91sam9g45_map_io, + .map_io = at91_map_io, .init_early = ek_init_early, - .init_irq = ek_init_irq, + .init_irq = at91_init_irq_default, .init_machine = ek_board_init, MACHINE_END diff --git a/trunk/arch/arm/mach-at91/board-sam9rlek.c b/trunk/arch/arm/mach-at91/board-sam9rlek.c index effb399a80a6..4f14b54b93a8 100644 --- a/trunk/arch/arm/mach-at91/board-sam9rlek.c +++ b/trunk/arch/arm/mach-at91/board-sam9rlek.c @@ -41,7 +41,7 @@ static void __init ek_init_early(void) { /* Initialize processor: 12.000 MHz crystal */ - at91sam9rl_initialize(12000000); + at91_initialize(12000000); /* DBGU on ttyS0. (Rx & Tx only) */ at91_register_uart(0, 0, 0); @@ -53,12 +53,6 @@ static void __init ek_init_early(void) at91_set_serial_console(0); } -static void __init ek_init_irq(void) -{ - at91sam9rl_init_interrupts(NULL); -} - - /* * USB HS Device port */ @@ -330,8 +324,8 @@ static void __init ek_board_init(void) MACHINE_START(AT91SAM9RLEK, "Atmel AT91SAM9RL-EK") /* Maintainer: Atmel */ .timer = &at91sam926x_timer, - .map_io = at91sam9rl_map_io, + .map_io = at91_map_io, .init_early = ek_init_early, - .init_irq = ek_init_irq, + .init_irq = at91_init_irq_default, .init_machine = ek_board_init, MACHINE_END diff --git a/trunk/arch/arm/mach-at91/board-snapper9260.c b/trunk/arch/arm/mach-at91/board-snapper9260.c index 6010ce16b3cf..c73d25e5faea 100644 --- a/trunk/arch/arm/mach-at91/board-snapper9260.c +++ b/trunk/arch/arm/mach-at91/board-snapper9260.c @@ -42,7 +42,7 @@ static void __init snapper9260_init_early(void) { - at91sam9260_initialize(18432000); + at91_initialize(18432000); /* Debug on ttyS0 */ at91_register_uart(0, 0, 0); @@ -55,11 +55,6 @@ static void __init snapper9260_init_early(void) at91_register_uart(AT91SAM9260_ID_US2, 3, 0); } -static void __init snapper9260_init_irq(void) -{ - at91sam9260_init_interrupts(NULL); -} - static struct at91_usbh_data __initdata snapper9260_usbh_data = { .ports = 2, }; @@ -179,9 +174,9 @@ static void __init snapper9260_board_init(void) MACHINE_START(SNAPPER_9260, "Bluewater Systems Snapper 9260/9G20 module") .timer = &at91sam926x_timer, - .map_io = at91sam9260_map_io, + .map_io = at91_map_io, .init_early = snapper9260_init_early, - .init_irq = snapper9260_init_irq, + .init_irq = at91_init_irq_default, .init_machine = snapper9260_board_init, MACHINE_END diff --git a/trunk/arch/arm/mach-at91/board-stamp9g20.c b/trunk/arch/arm/mach-at91/board-stamp9g20.c index 5e5c85688f5f..936e5fd7f406 100644 --- a/trunk/arch/arm/mach-at91/board-stamp9g20.c +++ b/trunk/arch/arm/mach-at91/board-stamp9g20.c @@ -35,7 +35,7 @@ void __init stamp9g20_init_early(void) { /* Initialize processor: 18.432 MHz crystal */ - at91sam9260_initialize(18432000); + at91_initialize(18432000); /* DGBU on ttyS0. (Rx & Tx only) */ at91_register_uart(0, 0, 0); @@ -76,12 +76,6 @@ static void __init portuxg20_init_early(void) at91_register_uart(AT91SAM9260_ID_US5, 6, 0); } -static void __init init_irq(void) -{ - at91sam9260_init_interrupts(NULL); -} - - /* * NAND flash */ @@ -299,17 +293,17 @@ static void __init stamp9g20evb_board_init(void) MACHINE_START(PORTUXG20, "taskit PortuxG20") /* Maintainer: taskit GmbH */ .timer = &at91sam926x_timer, - .map_io = at91sam9260_map_io, + .map_io = at91_map_io, .init_early = portuxg20_init_early, - .init_irq = init_irq, + .init_irq = at91_init_irq_default, .init_machine = portuxg20_board_init, MACHINE_END MACHINE_START(STAMP9G20, "taskit Stamp9G20") /* Maintainer: taskit GmbH */ .timer = &at91sam926x_timer, - .map_io = at91sam9260_map_io, + .map_io = at91_map_io, .init_early = stamp9g20evb_init_early, - .init_irq = init_irq, + .init_irq = at91_init_irq_default, .init_machine = stamp9g20evb_board_init, MACHINE_END diff --git a/trunk/arch/arm/mach-at91/board-usb-a9260.c b/trunk/arch/arm/mach-at91/board-usb-a9260.c index 0e784e6fedec..8c4c1a02c4be 100644 --- a/trunk/arch/arm/mach-at91/board-usb-a9260.c +++ b/trunk/arch/arm/mach-at91/board-usb-a9260.c @@ -51,7 +51,7 @@ static void __init ek_init_early(void) { /* Initialize processor: 12.000 MHz crystal */ - at91sam9260_initialize(12000000); + at91_initialize(12000000); /* DBGU on ttyS0. (Rx & Tx only) */ at91_register_uart(0, 0, 0); @@ -60,12 +60,6 @@ static void __init ek_init_early(void) at91_set_serial_console(0); } -static void __init ek_init_irq(void) -{ - at91sam9260_init_interrupts(NULL); -} - - /* * USB Host port */ @@ -229,8 +223,8 @@ static void __init ek_board_init(void) MACHINE_START(USB_A9260, "CALAO USB_A9260") /* Maintainer: calao-systems */ .timer = &at91sam926x_timer, - .map_io = at91sam9260_map_io, + .map_io = at91_map_io, .init_early = ek_init_early, - .init_irq = ek_init_irq, + .init_irq = at91_init_irq_default, .init_machine = ek_board_init, MACHINE_END diff --git a/trunk/arch/arm/mach-at91/board-usb-a9263.c b/trunk/arch/arm/mach-at91/board-usb-a9263.c index cf626dd14b2c..25e793782a4e 100644 --- a/trunk/arch/arm/mach-at91/board-usb-a9263.c +++ b/trunk/arch/arm/mach-at91/board-usb-a9263.c @@ -50,7 +50,7 @@ static void __init ek_init_early(void) { /* Initialize processor: 12.00 MHz crystal */ - at91sam9263_initialize(12000000); + at91_initialize(12000000); /* DBGU on ttyS0. (Rx & Tx only) */ at91_register_uart(0, 0, 0); @@ -59,12 +59,6 @@ static void __init ek_init_early(void) at91_set_serial_console(0); } -static void __init ek_init_irq(void) -{ - at91sam9263_init_interrupts(NULL); -} - - /* * USB Host port */ @@ -245,8 +239,8 @@ static void __init ek_board_init(void) MACHINE_START(USB_A9263, "CALAO USB_A9263") /* Maintainer: calao-systems */ .timer = &at91sam926x_timer, - .map_io = at91sam9263_map_io, + .map_io = at91_map_io, .init_early = ek_init_early, - .init_irq = ek_init_irq, + .init_irq = at91_init_irq_default, .init_machine = ek_board_init, MACHINE_END diff --git a/trunk/arch/arm/mach-at91/board-yl-9200.c b/trunk/arch/arm/mach-at91/board-yl-9200.c index c208cc334d7d..95edcbd2aec6 100644 --- a/trunk/arch/arm/mach-at91/board-yl-9200.c +++ b/trunk/arch/arm/mach-at91/board-yl-9200.c @@ -56,7 +56,7 @@ static void __init yl9200_init_early(void) at91rm9200_set_type(ARCH_REVISON_9200_PQFP); /* Initialize processor: 18.432 MHz crystal */ - at91rm9200_initialize(18432000); + at91_initialize(18432000); /* Setup the LEDs D2=PB17 (timer), D3=PB16 (cpu) */ at91_init_leds(AT91_PIN_PB16, AT91_PIN_PB17); @@ -79,12 +79,6 @@ static void __init yl9200_init_early(void) at91_set_serial_console(0); } -static void __init yl9200_init_irq(void) -{ - at91rm9200_init_interrupts(NULL); -} - - /* * LEDs */ @@ -599,8 +593,8 @@ static void __init yl9200_board_init(void) MACHINE_START(YL9200, "uCdragon YL-9200") /* Maintainer: S.Birtles */ .timer = &at91rm9200_timer, - .map_io = at91rm9200_map_io, + .map_io = at91_map_io, .init_early = yl9200_init_early, - .init_irq = yl9200_init_irq, + .init_irq = at91_init_irq_default, .init_machine = yl9200_board_init, MACHINE_END diff --git a/trunk/arch/arm/mach-at91/generic.h b/trunk/arch/arm/mach-at91/generic.h index 8ff3418f3430..938b34f57741 100644 --- a/trunk/arch/arm/mach-at91/generic.h +++ b/trunk/arch/arm/mach-at91/generic.h @@ -11,35 +11,19 @@ #include /* Map io */ -extern void __init at91rm9200_map_io(void); -extern void __init at91sam9260_map_io(void); -extern void __init at91sam9261_map_io(void); -extern void __init at91sam9263_map_io(void); -extern void __init at91sam9rl_map_io(void); -extern void __init at91sam9g45_map_io(void); -extern void __init at91x40_map_io(void); -extern void __init at91cap9_map_io(void); +extern void __init at91_map_io(void); +extern void __init at91_init_sram(int bank, unsigned long base, + unsigned int length); /* Processors */ extern void __init at91rm9200_set_type(int type); -extern void __init at91rm9200_initialize(unsigned long main_clock); -extern void __init at91sam9260_initialize(unsigned long main_clock); -extern void __init at91sam9261_initialize(unsigned long main_clock); -extern void __init at91sam9263_initialize(unsigned long main_clock); -extern void __init at91sam9rl_initialize(unsigned long main_clock); -extern void __init at91sam9g45_initialize(unsigned long main_clock); +extern void __init at91_initialize(unsigned long main_clock); extern void __init at91x40_initialize(unsigned long main_clock); -extern void __init at91cap9_initialize(unsigned long main_clock); /* Interrupts */ -extern void __init at91rm9200_init_interrupts(unsigned int priority[]); -extern void __init at91sam9260_init_interrupts(unsigned int priority[]); -extern void __init at91sam9261_init_interrupts(unsigned int priority[]); -extern void __init at91sam9263_init_interrupts(unsigned int priority[]); -extern void __init at91sam9rl_init_interrupts(unsigned int priority[]); -extern void __init at91sam9g45_init_interrupts(unsigned int priority[]); +extern void __init at91_init_irq_default(void); +extern void __init at91_init_interrupts(unsigned int priority[]); extern void __init at91x40_init_interrupts(unsigned int priority[]); -extern void __init at91cap9_init_interrupts(unsigned int priority[]); extern void __init at91_aic_init(unsigned int priority[]); /* Timer */ @@ -49,7 +33,6 @@ extern struct sys_timer at91sam926x_timer; extern struct sys_timer at91x40_timer; /* Clocks */ -extern int __init at91_clock_init(unsigned long main_clock); /* * function to specify the clock of the default console. As we do not * use the device/driver bus, the dev_name is not intialize. So we need @@ -62,6 +45,11 @@ extern void __init at91sam9263_set_console_clock(int id); extern void __init at91sam9rl_set_console_clock(int id); extern void __init at91sam9g45_set_console_clock(int id); extern void __init at91cap9_set_console_clock(int id); +#ifdef CONFIG_AT91_PMC_UNIT +extern int __init at91_clock_init(unsigned long main_clock); +#else +static int inline at91_clock_init(unsigned long main_clock) { return 0; } +#endif struct device; /* Power Management */ diff --git a/trunk/arch/arm/mach-at91/include/mach/at91_dbgu.h b/trunk/arch/arm/mach-at91/include/mach/at91_dbgu.h index 6dcaa7716871..dbfe455a4c41 100644 --- a/trunk/arch/arm/mach-at91/include/mach/at91_dbgu.h +++ b/trunk/arch/arm/mach-at91/include/mach/at91_dbgu.h @@ -16,22 +16,25 @@ #ifndef AT91_DBGU_H #define AT91_DBGU_H +#define dbgu_readl(dbgu, field) \ + __raw_readl(AT91_VA_BASE_SYS + dbgu + AT91_DBGU_ ## field) + #ifdef AT91_DBGU -#define AT91_DBGU_CR (AT91_DBGU + 0x00) /* Control Register */ -#define AT91_DBGU_MR (AT91_DBGU + 0x04) /* Mode Register */ -#define AT91_DBGU_IER (AT91_DBGU + 0x08) /* Interrupt Enable Register */ +#define AT91_DBGU_CR (0x00) /* Control Register */ +#define AT91_DBGU_MR (0x04) /* Mode Register */ +#define AT91_DBGU_IER (0x08) /* Interrupt Enable Register */ #define AT91_DBGU_TXRDY (1 << 1) /* Transmitter Ready */ #define AT91_DBGU_TXEMPTY (1 << 9) /* Transmitter Empty */ -#define AT91_DBGU_IDR (AT91_DBGU + 0x0c) /* Interrupt Disable Register */ -#define AT91_DBGU_IMR (AT91_DBGU + 0x10) /* Interrupt Mask Register */ -#define AT91_DBGU_SR (AT91_DBGU + 0x14) /* Status Register */ -#define AT91_DBGU_RHR (AT91_DBGU + 0x18) /* Receiver Holding Register */ -#define AT91_DBGU_THR (AT91_DBGU + 0x1c) /* Transmitter Holding Register */ -#define AT91_DBGU_BRGR (AT91_DBGU + 0x20) /* Baud Rate Generator Register */ +#define AT91_DBGU_IDR (0x0c) /* Interrupt Disable Register */ +#define AT91_DBGU_IMR (0x10) /* Interrupt Mask Register */ +#define AT91_DBGU_SR (0x14) /* Status Register */ +#define AT91_DBGU_RHR (0x18) /* Receiver Holding Register */ +#define AT91_DBGU_THR (0x1c) /* Transmitter Holding Register */ +#define AT91_DBGU_BRGR (0x20) /* Baud Rate Generator Register */ -#define AT91_DBGU_CIDR (AT91_DBGU + 0x40) /* Chip ID Register */ -#define AT91_DBGU_EXID (AT91_DBGU + 0x44) /* Chip ID Extension Register */ -#define AT91_DBGU_FNR (AT91_DBGU + 0x48) /* Force NTRST Register [SAM9 only] */ +#define AT91_DBGU_CIDR (0x40) /* Chip ID Register */ +#define AT91_DBGU_EXID (0x44) /* Chip ID Extension Register */ +#define AT91_DBGU_FNR (0x48) /* Force NTRST Register [SAM9 only] */ #define AT91_DBGU_FNTRST (1 << 0) /* Force NTRST */ #endif /* AT91_DBGU */ diff --git a/trunk/arch/arm/mach-at91/include/mach/at91cap9.h b/trunk/arch/arm/mach-at91/include/mach/at91cap9.h index 665993849a7b..c5df1e8f1955 100644 --- a/trunk/arch/arm/mach-at91/include/mach/at91cap9.h +++ b/trunk/arch/arm/mach-at91/include/mach/at91cap9.h @@ -75,7 +75,6 @@ #define AT91CAP9_BASE_EMAC 0xfffbc000 #define AT91CAP9_BASE_ADC 0xfffc0000 #define AT91CAP9_BASE_ISI 0xfffc4000 -#define AT91_BASE_SYS 0xffffe200 /* * System Peripherals (offset from AT91_BASE_SYS) diff --git a/trunk/arch/arm/mach-at91/include/mach/at91rm9200.h b/trunk/arch/arm/mach-at91/include/mach/at91rm9200.h index 99e0f8d02d7b..e4037b500302 100644 --- a/trunk/arch/arm/mach-at91/include/mach/at91rm9200.h +++ b/trunk/arch/arm/mach-at91/include/mach/at91rm9200.h @@ -74,7 +74,6 @@ #define AT91RM9200_BASE_SSC1 0xfffd4000 #define AT91RM9200_BASE_SSC2 0xfffd8000 #define AT91RM9200_BASE_SPI 0xfffe0000 -#define AT91_BASE_SYS 0xfffff000 /* diff --git a/trunk/arch/arm/mach-at91/include/mach/at91sam9260.h b/trunk/arch/arm/mach-at91/include/mach/at91sam9260.h index 8b6bf835cd73..9a791165913f 100644 --- a/trunk/arch/arm/mach-at91/include/mach/at91sam9260.h +++ b/trunk/arch/arm/mach-at91/include/mach/at91sam9260.h @@ -76,7 +76,6 @@ #define AT91SAM9260_BASE_TC4 0xfffdc040 #define AT91SAM9260_BASE_TC5 0xfffdc080 #define AT91SAM9260_BASE_ADC 0xfffe0000 -#define AT91_BASE_SYS 0xffffe800 /* * System Peripherals (offset from AT91_BASE_SYS) diff --git a/trunk/arch/arm/mach-at91/include/mach/at91sam9261.h b/trunk/arch/arm/mach-at91/include/mach/at91sam9261.h index eafbddaf523c..ce596204cefa 100644 --- a/trunk/arch/arm/mach-at91/include/mach/at91sam9261.h +++ b/trunk/arch/arm/mach-at91/include/mach/at91sam9261.h @@ -60,7 +60,6 @@ #define AT91SAM9261_BASE_SSC2 0xfffc4000 #define AT91SAM9261_BASE_SPI0 0xfffc8000 #define AT91SAM9261_BASE_SPI1 0xfffcc000 -#define AT91_BASE_SYS 0xffffea00 /* diff --git a/trunk/arch/arm/mach-at91/include/mach/at91sam9263.h b/trunk/arch/arm/mach-at91/include/mach/at91sam9263.h index e2d348213a7b..f1b92961a2b1 100644 --- a/trunk/arch/arm/mach-at91/include/mach/at91sam9263.h +++ b/trunk/arch/arm/mach-at91/include/mach/at91sam9263.h @@ -70,7 +70,6 @@ #define AT91SAM9263_BASE_EMAC 0xfffbc000 #define AT91SAM9263_BASE_ISI 0xfffc4000 #define AT91SAM9263_BASE_2DGE 0xfffc8000 -#define AT91_BASE_SYS 0xffffe000 /* * System Peripherals (offset from AT91_BASE_SYS) diff --git a/trunk/arch/arm/mach-at91/include/mach/at91sam9g45.h b/trunk/arch/arm/mach-at91/include/mach/at91sam9g45.h index 659304aa73d9..2c611b9a0138 100644 --- a/trunk/arch/arm/mach-at91/include/mach/at91sam9g45.h +++ b/trunk/arch/arm/mach-at91/include/mach/at91sam9g45.h @@ -82,7 +82,6 @@ #define AT91SAM9G45_BASE_TC3 0xfffd4000 #define AT91SAM9G45_BASE_TC4 0xfffd4040 #define AT91SAM9G45_BASE_TC5 0xfffd4080 -#define AT91_BASE_SYS 0xffffe200 /* * System Peripherals (offset from AT91_BASE_SYS) diff --git a/trunk/arch/arm/mach-at91/include/mach/at91sam9rl.h b/trunk/arch/arm/mach-at91/include/mach/at91sam9rl.h index 41dbbe61055c..1aabacd315d4 100644 --- a/trunk/arch/arm/mach-at91/include/mach/at91sam9rl.h +++ b/trunk/arch/arm/mach-at91/include/mach/at91sam9rl.h @@ -64,7 +64,6 @@ #define AT91SAM9RL_BASE_TSC 0xfffd0000 #define AT91SAM9RL_BASE_UDPHS 0xfffd4000 #define AT91SAM9RL_BASE_AC97C 0xfffd8000 -#define AT91_BASE_SYS 0xffffc000 /* diff --git a/trunk/arch/arm/mach-at91/include/mach/cpu.h b/trunk/arch/arm/mach-at91/include/mach/cpu.h index df966c2bc2d4..f6ce936dba2b 100644 --- a/trunk/arch/arm/mach-at91/include/mach/cpu.h +++ b/trunk/arch/arm/mach-at91/include/mach/cpu.h @@ -1,7 +1,8 @@ /* * arch/arm/mach-at91/include/mach/cpu.h * - * Copyright (C) 2006 SAN People + * Copyright (C) 2006 SAN People + * Copyright (C) 2011 Jean-Christophe PLAGNIOL-VILLARD * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -10,12 +11,8 @@ * */ -#ifndef __ASM_ARCH_CPU_H -#define __ASM_ARCH_CPU_H - -#include -#include - +#ifndef __MACH_CPU_H__ +#define __MACH_CPU_H__ #define ARCH_ID_AT91RM9200 0x09290780 #define ARCH_ID_AT91SAM9260 0x019803a0 @@ -39,16 +36,6 @@ #define ARCH_ID_AT91M40807 0x14080745 #define ARCH_ID_AT91R40008 0x44000840 -static inline unsigned long at91_cpu_identify(void) -{ - return (at91_sys_read(AT91_DBGU_CIDR) & ~AT91_CIDR_VERSION); -} - -static inline unsigned long at91_cpu_fully_identify(void) -{ - return at91_sys_read(AT91_DBGU_CIDR); -} - #define ARCH_EXID_AT91SAM9M11 0x00000001 #define ARCH_EXID_AT91SAM9M10 0x00000002 #define ARCH_EXID_AT91SAM9G46 0x00000003 @@ -60,40 +47,80 @@ static inline unsigned long at91_cpu_fully_identify(void) #define ARCH_EXID_AT91SAM9G25 0x00000003 #define ARCH_EXID_AT91SAM9X25 0x00000004 -static inline unsigned long at91_exid_identify(void) -{ - return at91_sys_read(AT91_DBGU_EXID); -} - - #define ARCH_FAMILY_AT91X92 0x09200000 #define ARCH_FAMILY_AT91SAM9 0x01900000 #define ARCH_FAMILY_AT91SAM9XE 0x02900000 -static inline unsigned long at91_arch_identify(void) -{ - return (at91_sys_read(AT91_DBGU_CIDR) & AT91_CIDR_ARCH); -} - -#ifdef CONFIG_ARCH_AT91CAP9 -#include - +/* PMC revision */ #define ARCH_REVISION_CAP9_B 0x399 #define ARCH_REVISION_CAP9_C 0x601 -static inline unsigned long at91cap9_rev_identify(void) +/* RM9200 type */ +#define ARCH_REVISON_9200_BGA (0 << 0) +#define ARCH_REVISON_9200_PQFP (1 << 0) + +enum at91_soc_type { + /* 920T */ + AT91_SOC_RM9200, + + /* CAP */ + AT91_SOC_CAP9, + + /* SAM92xx */ + AT91_SOC_SAM9260, AT91_SOC_SAM9261, AT91_SOC_SAM9263, + + /* SAM9Gxx */ + AT91_SOC_SAM9G10, AT91_SOC_SAM9G20, AT91_SOC_SAM9G45, + + /* SAM9RL */ + AT91_SOC_SAM9RL, + + /* SAM9X5 */ + AT91_SOC_SAM9X5, + + /* Unknown type */ + AT91_SOC_NONE +}; + +enum at91_soc_subtype { + /* RM9200 */ + AT91_SOC_RM9200_BGA, AT91_SOC_RM9200_PQFP, + + /* CAP9 */ + AT91_SOC_CAP9_REV_B, AT91_SOC_CAP9_REV_C, + + /* SAM9260 */ + AT91_SOC_SAM9XE, + + /* SAM9G45 */ + AT91_SOC_SAM9G45ES, AT91_SOC_SAM9M10, AT91_SOC_SAM9G46, AT91_SOC_SAM9M11, + + /* SAM9X5 */ + AT91_SOC_SAM9G15, AT91_SOC_SAM9G35, AT91_SOC_SAM9X35, + AT91_SOC_SAM9G25, AT91_SOC_SAM9X25, + + /* Unknown subtype */ + AT91_SOC_SUBTYPE_NONE +}; + +struct at91_socinfo { + unsigned int type, subtype; + unsigned int cidr, exid; +}; + +extern struct at91_socinfo at91_soc_initdata; +const char *at91_get_soc_type(struct at91_socinfo *c); +const char *at91_get_soc_subtype(struct at91_socinfo *c); + +static inline int at91_soc_is_detected(void) { - return (at91_sys_read(AT91_PMC_VER)); + return at91_soc_initdata.type != AT91_SOC_NONE; } -#endif #ifdef CONFIG_ARCH_AT91RM9200 -extern int rm9200_type; -#define ARCH_REVISON_9200_BGA (0 << 0) -#define ARCH_REVISON_9200_PQFP (1 << 0) -#define cpu_is_at91rm9200() (at91_cpu_identify() == ARCH_ID_AT91RM9200) -#define cpu_is_at91rm9200_bga() (!cpu_is_at91rm9200_pqfp()) -#define cpu_is_at91rm9200_pqfp() (cpu_is_at91rm9200() && rm9200_type & ARCH_REVISON_9200_PQFP) +#define cpu_is_at91rm9200() (at91_soc_initdata.type == AT91_SOC_RM9200) +#define cpu_is_at91rm9200_bga() (at91_soc_initdata.subtype == AT91_SOC_RM9200_BGA) +#define cpu_is_at91rm9200_pqfp() (at91_soc_initdata.subtype == AT91_SOC_RM9200_PQFP) #else #define cpu_is_at91rm9200() (0) #define cpu_is_at91rm9200_bga() (0) @@ -101,52 +128,49 @@ extern int rm9200_type; #endif #ifdef CONFIG_ARCH_AT91SAM9260 -#define cpu_is_at91sam9xe() (at91_arch_identify() == ARCH_FAMILY_AT91SAM9XE) -#define cpu_is_at91sam9260() ((at91_cpu_identify() == ARCH_ID_AT91SAM9260) || cpu_is_at91sam9xe()) +#define cpu_is_at91sam9xe() (at91_soc_initdata.subtype == AT91_SOC_SAM9XE) +#define cpu_is_at91sam9260() (at91_soc_initdata.type == AT91_SOC_SAM9260) #else #define cpu_is_at91sam9xe() (0) #define cpu_is_at91sam9260() (0) #endif #ifdef CONFIG_ARCH_AT91SAM9G20 -#define cpu_is_at91sam9g20() (at91_cpu_identify() == ARCH_ID_AT91SAM9G20) +#define cpu_is_at91sam9g20() (at91_soc_initdata.type == AT91_SOC_SAM9G20) #else #define cpu_is_at91sam9g20() (0) #endif #ifdef CONFIG_ARCH_AT91SAM9261 -#define cpu_is_at91sam9261() (at91_cpu_identify() == ARCH_ID_AT91SAM9261) +#define cpu_is_at91sam9261() (at91_soc_initdata.type == AT91_SOC_SAM9261) #else #define cpu_is_at91sam9261() (0) #endif #ifdef CONFIG_ARCH_AT91SAM9G10 -#define cpu_is_at91sam9g10() ((at91_cpu_identify() & ~AT91_CIDR_EXT) == ARCH_ID_AT91SAM9G10) +#define cpu_is_at91sam9g10() (at91_soc_initdata.type == AT91_SOC_SAM9G10) #else #define cpu_is_at91sam9g10() (0) #endif #ifdef CONFIG_ARCH_AT91SAM9263 -#define cpu_is_at91sam9263() (at91_cpu_identify() == ARCH_ID_AT91SAM9263) +#define cpu_is_at91sam9263() (at91_soc_initdata.type == AT91_SOC_SAM9263) #else #define cpu_is_at91sam9263() (0) #endif #ifdef CONFIG_ARCH_AT91SAM9RL -#define cpu_is_at91sam9rl() (at91_cpu_identify() == ARCH_ID_AT91SAM9RL64) +#define cpu_is_at91sam9rl() (at91_soc_initdata.type == AT91_SOC_SAM9RL) #else #define cpu_is_at91sam9rl() (0) #endif #ifdef CONFIG_ARCH_AT91SAM9G45 -#define cpu_is_at91sam9g45() (at91_cpu_identify() == ARCH_ID_AT91SAM9G45) -#define cpu_is_at91sam9g45es() (at91_cpu_fully_identify() == ARCH_ID_AT91SAM9G45ES) -#define cpu_is_at91sam9m10() (cpu_is_at91sam9g45() && \ - (at91_exid_identify() == ARCH_EXID_AT91SAM9M10)) -#define cpu_is_at91sam9m46() (cpu_is_at91sam9g45() && \ - (at91_exid_identify() == ARCH_EXID_AT91SAM9G46)) -#define cpu_is_at91sam9m11() (cpu_is_at91sam9g45() && \ - (at91_exid_identify() == ARCH_EXID_AT91SAM9M11)) +#define cpu_is_at91sam9g45() (at91_soc_initdata.type == AT91_SOC_SAM9G45) +#define cpu_is_at91sam9g45es() (at91_soc_initdata.subtype == AT91_SOC_SAM9G45ES) +#define cpu_is_at91sam9m10() (at91_soc_initdata.subtype == AT91_SOC_SAM9M10) +#define cpu_is_at91sam9g46() (at91_soc_initdata.subtype == AT91_SOC_SAM9G46) +#define cpu_is_at91sam9m11() (at91_soc_initdata.subtype == AT91_SOC_SAM9M11) #else #define cpu_is_at91sam9g45() (0) #define cpu_is_at91sam9g45es() (0) @@ -156,17 +180,12 @@ extern int rm9200_type; #endif #ifdef CONFIG_ARCH_AT91SAM9X5 -#define cpu_is_at91sam9x5() (at91_cpu_identify() == ARCH_ID_AT91SAM9X5) -#define cpu_is_at91sam9g15() (cpu_is_at91sam9x5() && \ - (at91_exid_identify() == ARCH_EXID_AT91SAM9G15)) -#define cpu_is_at91sam9g35() (cpu_is_at91sam9x5() && \ - (at91_exid_identify() == ARCH_EXID_AT91SAM9G35)) -#define cpu_is_at91sam9x35() (cpu_is_at91sam9x5() && \ - (at91_exid_identify() == ARCH_EXID_AT91SAM9X35)) -#define cpu_is_at91sam9g25() (cpu_is_at91sam9x5() && \ - (at91_exid_identify() == ARCH_EXID_AT91SAM9G25)) -#define cpu_is_at91sam9x25() (cpu_is_at91sam9x5() && \ - (at91_exid_identify() == ARCH_EXID_AT91SAM9X25)) +#define cpu_is_at91sam9x5() (at91_soc_initdata.type == AT91_SOC_SAM9X5) +#define cpu_is_at91sam9g15() (at91_soc_initdata.subtype == AT91_SOC_SAM9G15) +#define cpu_is_at91sam9g35() (at91_soc_initdata.subtype == AT91_SOC_SAM9G35) +#define cpu_is_at91sam9x35() (at91_soc_initdata.subtype == AT91_SOC_SAM9X35) +#define cpu_is_at91sam9g25() (at91_soc_initdata.subtype == AT91_SOC_SAM9G25) +#define cpu_is_at91sam9x25() (at91_soc_initdata.subtype == AT91_SOC_SAM9X25) #else #define cpu_is_at91sam9x5() (0) #define cpu_is_at91sam9g15() (0) @@ -177,9 +196,9 @@ extern int rm9200_type; #endif #ifdef CONFIG_ARCH_AT91CAP9 -#define cpu_is_at91cap9() (at91_cpu_identify() == ARCH_ID_AT91CAP9) -#define cpu_is_at91cap9_revB() (at91cap9_rev_identify() == ARCH_REVISION_CAP9_B) -#define cpu_is_at91cap9_revC() (at91cap9_rev_identify() == ARCH_REVISION_CAP9_C) +#define cpu_is_at91cap9() (at91_soc_initdata.type == AT91_SOC_CAP9) +#define cpu_is_at91cap9_revB() (at91_soc_initdata.subtype == AT91_SOC_CAP9_REV_B) +#define cpu_is_at91cap9_revC() (at91_soc_initdata.subtype == AT91_SOC_CAP9_REV_C) #else #define cpu_is_at91cap9() (0) #define cpu_is_at91cap9_revB() (0) @@ -192,4 +211,4 @@ extern int rm9200_type; */ #define cpu_is_at32ap7000() (0) -#endif +#endif /* __MACH_CPU_H__ */ diff --git a/trunk/arch/arm/mach-at91/include/mach/debug-macro.S b/trunk/arch/arm/mach-at91/include/mach/debug-macro.S index 0f959faf74a9..bc1e0b2e2f4f 100644 --- a/trunk/arch/arm/mach-at91/include/mach/debug-macro.S +++ b/trunk/arch/arm/mach-at91/include/mach/debug-macro.S @@ -15,23 +15,23 @@ #include .macro addruart, rp, rv - ldr \rp, =(AT91_BASE_SYS + AT91_DBGU) @ System peripherals (phys address) - ldr \rv, =(AT91_VA_BASE_SYS + AT91_DBGU) @ System peripherals (virt address) + ldr \rp, =(AT91_BASE_SYS + AT91_DBGU) @ System peripherals (phys address) + ldr \rv, =(AT91_VA_BASE_SYS + AT91_DBGU) @ System peripherals (virt address) .endm .macro senduart,rd,rx - strb \rd, [\rx, #(AT91_DBGU_THR - AT91_DBGU)] @ Write to Transmitter Holding Register + strb \rd, [\rx, #(AT91_DBGU_THR)] @ Write to Transmitter Holding Register .endm .macro waituart,rd,rx -1001: ldr \rd, [\rx, #(AT91_DBGU_SR - AT91_DBGU)] @ Read Status Register - tst \rd, #AT91_DBGU_TXRDY @ DBGU_TXRDY = 1 when ready to transmit +1001: ldr \rd, [\rx, #(AT91_DBGU_SR)] @ Read Status Register + tst \rd, #AT91_DBGU_TXRDY @ DBGU_TXRDY = 1 when ready to transmit beq 1001b .endm .macro busyuart,rd,rx -1001: ldr \rd, [\rx, #(AT91_DBGU_SR - AT91_DBGU)] @ Read Status Register - tst \rd, #AT91_DBGU_TXEMPTY @ DBGU_TXEMPTY = 1 when transmission complete +1001: ldr \rd, [\rx, #(AT91_DBGU_SR)] @ Read Status Register + tst \rd, #AT91_DBGU_TXEMPTY @ DBGU_TXEMPTY = 1 when transmission complete beq 1001b .endm diff --git a/trunk/arch/arm/mach-at91/include/mach/hardware.h b/trunk/arch/arm/mach-at91/include/mach/hardware.h index 1008b9fb5074..483478d8be6b 100644 --- a/trunk/arch/arm/mach-at91/include/mach/hardware.h +++ b/trunk/arch/arm/mach-at91/include/mach/hardware.h @@ -36,6 +36,20 @@ #error "Unsupported AT91 processor" #endif +#if !defined(CONFIG_ARCH_AT91X40) +/* + * On all at91 except rm9200 and x40 have the System Controller starts + * at address 0xffffc000 and has a size of 16KiB. + * + * On rm9200 it's start at 0xfffe4000 of 111KiB with non reserved data starting + * at 0xfffff000 + * + * Removes the individual definitions of AT91_BASE_SYS and + * replaces them with a common version at base 0xfffffc000 and size 16KiB + * and map the same memory space + */ +#define AT91_BASE_SYS 0xffffc000 +#endif /* * Peripheral identifiers/interrupts. diff --git a/trunk/arch/arm/mach-at91/include/mach/io.h b/trunk/arch/arm/mach-at91/include/mach/io.h index 0b0cccc46e68..4298e7806c76 100644 --- a/trunk/arch/arm/mach-at91/include/mach/io.h +++ b/trunk/arch/arm/mach-at91/include/mach/io.h @@ -21,14 +21,23 @@ #ifndef __ASM_ARCH_IO_H #define __ASM_ARCH_IO_H +#include + #define IO_SPACE_LIMIT 0xFFFFFFFF #define __io(a) __typesafe_io(a) #define __mem_pci(a) (a) - #ifndef __ASSEMBLY__ +#ifndef CONFIG_ARCH_AT91X40 +#define __arch_ioremap at91_ioremap +#define __arch_iounmap at91_iounmap +#endif + +void __iomem *at91_ioremap(unsigned long phys, size_t size, unsigned int type); +void at91_iounmap(volatile void __iomem *addr); + static inline unsigned int at91_sys_read(unsigned int reg_offset) { void __iomem *addr = (void __iomem *)AT91_VA_BASE_SYS; diff --git a/trunk/arch/arm/mach-at91/setup.c b/trunk/arch/arm/mach-at91/setup.c new file mode 100644 index 000000000000..aa64294c7db3 --- /dev/null +++ b/trunk/arch/arm/mach-at91/setup.c @@ -0,0 +1,297 @@ +/* + * Copyright (C) 2007 Atmel Corporation. + * Copyright (C) 2011 Jean-Christophe PLAGNIOL-VILLARD + * + * Under GPLv2 + */ + +#include +#include +#include + +#include + +#include +#include +#include +#include + +#include "soc.h" +#include "generic.h" + +struct at91_init_soc __initdata at91_boot_soc; + +struct at91_socinfo at91_soc_initdata; +EXPORT_SYMBOL(at91_soc_initdata); + +void __init at91rm9200_set_type(int type) +{ + if (type == ARCH_REVISON_9200_PQFP) + at91_soc_initdata.subtype = AT91_SOC_RM9200_BGA; + else + at91_soc_initdata.subtype = AT91_SOC_RM9200_PQFP; +} + +void __init at91_init_irq_default(void) +{ + at91_init_interrupts(at91_boot_soc.default_irq_priority); +} + +void __init at91_init_interrupts(unsigned int *priority) +{ + /* Initialize the AIC interrupt controller */ + at91_aic_init(priority); + + /* Enable GPIO interrupts */ + at91_gpio_irq_setup(); +} + +static struct map_desc sram_desc[2] __initdata; + +void __init at91_init_sram(int bank, unsigned long base, unsigned int length) +{ + struct map_desc *desc = &sram_desc[bank]; + + desc->virtual = AT91_IO_VIRT_BASE - length; + if (bank > 0) + desc->virtual -= sram_desc[bank - 1].length; + + desc->pfn = __phys_to_pfn(base); + desc->length = length; + desc->type = MT_DEVICE; + + pr_info("AT91: sram at 0x%lx of 0x%x mapped at 0x%lx\n", + base, length, desc->virtual); + + iotable_init(desc, 1); +} + +static struct map_desc at91_io_desc __initdata = { + .virtual = AT91_VA_BASE_SYS, + .pfn = __phys_to_pfn(AT91_BASE_SYS), + .length = SZ_16K, + .type = MT_DEVICE, +}; + +void __iomem *at91_ioremap(unsigned long p, size_t size, unsigned int type) +{ + if (p >= AT91_BASE_SYS && p <= (AT91_BASE_SYS + SZ_16K - 1)) + return (void __iomem *)AT91_IO_P2V(p); + + return __arm_ioremap_caller(p, size, type, __builtin_return_address(0)); +} +EXPORT_SYMBOL(at91_ioremap); + +void at91_iounmap(volatile void __iomem *addr) +{ + unsigned long virt = (unsigned long)addr; + + if (virt >= VMALLOC_START && virt < VMALLOC_END) + __iounmap(addr); +} +EXPORT_SYMBOL(at91_iounmap); + +#define AT91_DBGU0 0xfffff200 +#define AT91_DBGU1 0xffffee00 + +static void __init soc_detect(u32 dbgu_base) +{ + u32 cidr, socid; + + cidr = __raw_readl(AT91_IO_P2V(dbgu_base) + AT91_DBGU_CIDR); + socid = cidr & ~AT91_CIDR_VERSION; + + switch (socid) { + case ARCH_ID_AT91CAP9: { +#ifdef CONFIG_AT91_PMC_UNIT + u32 pmc_ver = at91_sys_read(AT91_PMC_VER); + + if (pmc_ver == ARCH_REVISION_CAP9_B) + at91_soc_initdata.subtype = AT91_SOC_CAP9_REV_B; + else if (pmc_ver == ARCH_REVISION_CAP9_C) + at91_soc_initdata.subtype = AT91_SOC_CAP9_REV_C; +#endif + at91_soc_initdata.type = AT91_SOC_CAP9; + at91_boot_soc = at91cap9_soc; + break; + } + + case ARCH_ID_AT91RM9200: + at91_soc_initdata.type = AT91_SOC_RM9200; + at91_boot_soc = at91rm9200_soc; + break; + + case ARCH_ID_AT91SAM9260: + at91_soc_initdata.type = AT91_SOC_SAM9260; + at91_boot_soc = at91sam9260_soc; + break; + + case ARCH_ID_AT91SAM9261: + at91_soc_initdata.type = AT91_SOC_SAM9261; + at91_boot_soc = at91sam9261_soc; + break; + + case ARCH_ID_AT91SAM9263: + at91_soc_initdata.type = AT91_SOC_SAM9263; + at91_boot_soc = at91sam9263_soc; + break; + + case ARCH_ID_AT91SAM9G20: + at91_soc_initdata.type = AT91_SOC_SAM9G20; + at91_boot_soc = at91sam9260_soc; + break; + + case ARCH_ID_AT91SAM9G45: + at91_soc_initdata.type = AT91_SOC_SAM9G45; + if (cidr == ARCH_ID_AT91SAM9G45ES) + at91_soc_initdata.subtype = AT91_SOC_SAM9G45ES; + at91_boot_soc = at91sam9g45_soc; + break; + + case ARCH_ID_AT91SAM9RL64: + at91_soc_initdata.type = AT91_SOC_SAM9RL; + at91_boot_soc = at91sam9rl_soc; + break; + + case ARCH_ID_AT91SAM9X5: + at91_soc_initdata.type = AT91_SOC_SAM9X5; + at91_boot_soc = at91sam9x5_soc; + break; + } + + /* at91sam9g10 */ + if ((cidr & ~AT91_CIDR_EXT) == ARCH_ID_AT91SAM9G10) { + at91_soc_initdata.type = AT91_SOC_SAM9G10; + at91_boot_soc = at91sam9261_soc; + } + /* at91sam9xe */ + else if ((cidr & AT91_CIDR_ARCH) == ARCH_FAMILY_AT91SAM9XE) { + at91_soc_initdata.type = AT91_SOC_SAM9260; + at91_soc_initdata.subtype = AT91_SOC_SAM9XE; + at91_boot_soc = at91sam9260_soc; + } + + if (!at91_soc_is_detected()) + return; + + at91_soc_initdata.cidr = cidr; + + /* sub version of soc */ + at91_soc_initdata.exid = __raw_readl(AT91_IO_P2V(dbgu_base) + AT91_DBGU_EXID); + + if (at91_soc_initdata.type == AT91_SOC_SAM9G45) { + switch (at91_soc_initdata.exid) { + case ARCH_EXID_AT91SAM9M10: + at91_soc_initdata.subtype = AT91_SOC_SAM9M10; + break; + case ARCH_EXID_AT91SAM9G46: + at91_soc_initdata.subtype = AT91_SOC_SAM9G46; + break; + case ARCH_EXID_AT91SAM9M11: + at91_soc_initdata.subtype = AT91_SOC_SAM9M11; + break; + } + } + + if (at91_soc_initdata.type == AT91_SOC_SAM9X5) { + switch (at91_soc_initdata.exid) { + case ARCH_EXID_AT91SAM9G15: + at91_soc_initdata.subtype = AT91_SOC_SAM9G15; + break; + case ARCH_EXID_AT91SAM9G35: + at91_soc_initdata.subtype = AT91_SOC_SAM9G35; + break; + case ARCH_EXID_AT91SAM9X35: + at91_soc_initdata.subtype = AT91_SOC_SAM9X35; + break; + case ARCH_EXID_AT91SAM9G25: + at91_soc_initdata.subtype = AT91_SOC_SAM9G25; + break; + case ARCH_EXID_AT91SAM9X25: + at91_soc_initdata.subtype = AT91_SOC_SAM9X25; + break; + } + } +} + +static const char *soc_name[] = { + [AT91_SOC_RM9200] = "at91rm9200", + [AT91_SOC_CAP9] = "at91cap9", + [AT91_SOC_SAM9260] = "at91sam9260", + [AT91_SOC_SAM9261] = "at91sam9261", + [AT91_SOC_SAM9263] = "at91sam9263", + [AT91_SOC_SAM9G10] = "at91sam9g10", + [AT91_SOC_SAM9G20] = "at91sam9g20", + [AT91_SOC_SAM9G45] = "at91sam9g45", + [AT91_SOC_SAM9RL] = "at91sam9rl", + [AT91_SOC_SAM9X5] = "at91sam9x5", + [AT91_SOC_NONE] = "Unknown" +}; + +const char *at91_get_soc_type(struct at91_socinfo *c) +{ + return soc_name[c->type]; +} +EXPORT_SYMBOL(at91_get_soc_type); + +static const char *soc_subtype_name[] = { + [AT91_SOC_RM9200_BGA] = "at91rm9200 BGA", + [AT91_SOC_RM9200_PQFP] = "at91rm9200 PQFP", + [AT91_SOC_CAP9_REV_B] = "at91cap9 revB", + [AT91_SOC_CAP9_REV_C] = "at91cap9 revC", + [AT91_SOC_SAM9XE] = "at91sam9xe", + [AT91_SOC_SAM9G45ES] = "at91sam9g45es", + [AT91_SOC_SAM9M10] = "at91sam9m10", + [AT91_SOC_SAM9G46] = "at91sam9g46", + [AT91_SOC_SAM9M11] = "at91sam9m11", + [AT91_SOC_SAM9G15] = "at91sam9g15", + [AT91_SOC_SAM9G35] = "at91sam9g35", + [AT91_SOC_SAM9X35] = "at91sam9x35", + [AT91_SOC_SAM9G25] = "at91sam9g25", + [AT91_SOC_SAM9X25] = "at91sam9x25", + [AT91_SOC_SUBTYPE_NONE] = "Unknown" +}; + +const char *at91_get_soc_subtype(struct at91_socinfo *c) +{ + return soc_subtype_name[c->subtype]; +} +EXPORT_SYMBOL(at91_get_soc_subtype); + +void __init at91_map_io(void) +{ + /* Map peripherals */ + iotable_init(&at91_io_desc, 1); + + at91_soc_initdata.type = AT91_SOC_NONE; + at91_soc_initdata.subtype = AT91_SOC_SUBTYPE_NONE; + + soc_detect(AT91_DBGU0); + if (!at91_soc_is_detected()) + soc_detect(AT91_DBGU1); + + if (!at91_soc_is_detected()) + panic("AT91: Impossible to detect the SOC type"); + + pr_info("AT91: Detected soc type: %s\n", + at91_get_soc_type(&at91_soc_initdata)); + pr_info("AT91: Detected soc subtype: %s\n", + at91_get_soc_subtype(&at91_soc_initdata)); + + if (!at91_soc_is_enabled()) + panic("AT91: Soc not enabled"); + + if (at91_boot_soc.map_io) + at91_boot_soc.map_io(); +} + +void __init at91_initialize(unsigned long main_clock) +{ + /* Init clock subsystem */ + at91_clock_init(main_clock); + + /* Register the processor-specific clocks */ + at91_boot_soc.register_clocks(); + + at91_boot_soc.init(); +} diff --git a/trunk/arch/arm/mach-at91/soc.h b/trunk/arch/arm/mach-at91/soc.h new file mode 100644 index 000000000000..21ed8816e6f7 --- /dev/null +++ b/trunk/arch/arm/mach-at91/soc.h @@ -0,0 +1,59 @@ +/* + * Copyright (C) 2011 Jean-Christophe PLAGNIOL-VILLARD + * + * Under GPLv2 + */ + +struct at91_init_soc { + unsigned int *default_irq_priority; + void (*map_io)(void); + void (*register_clocks)(void); + void (*init)(void); +}; + +extern struct at91_init_soc at91_boot_soc; +extern struct at91_init_soc at91cap9_soc; +extern struct at91_init_soc at91rm9200_soc; +extern struct at91_init_soc at91sam9260_soc; +extern struct at91_init_soc at91sam9261_soc; +extern struct at91_init_soc at91sam9263_soc; +extern struct at91_init_soc at91sam9g45_soc; +extern struct at91_init_soc at91sam9rl_soc; +extern struct at91_init_soc at91sam9x5_soc; + +static inline int at91_soc_is_enabled(void) +{ + return at91_boot_soc.init != NULL; +} + +#if !defined(CONFIG_ARCH_AT91CAP9) +#define at91cap9_soc at91_boot_soc +#endif + +#if !defined(CONFIG_ARCH_AT91RM9200) +#define at91rm9200_soc at91_boot_soc +#endif + +#if !(defined(CONFIG_ARCH_AT91SAM9260) || defined(CONFIG_ARCH_AT91SAM9G20)) +#define at91sam9260_soc at91_boot_soc +#endif + +#if !(defined(CONFIG_ARCH_AT91SAM9261) || defined(CONFIG_ARCH_AT91SAM9G10)) +#define at91sam9261_soc at91_boot_soc +#endif + +#if !defined(CONFIG_ARCH_AT91SAM9263) +#define at91sam9263_soc at91_boot_soc +#endif + +#if !defined(CONFIG_ARCH_AT91SAM9G45) +#define at91sam9g45_soc at91_boot_soc +#endif + +#if !defined(CONFIG_ARCH_AT91SAM9RL) +#define at91sam9rl_soc at91_boot_soc +#endif + +#if !defined(CONFIG_ARCH_AT91SAM9X5) +#define at91sam9x5_soc at91_boot_soc +#endif diff --git a/trunk/arch/arm/mach-cns3xxx/pcie.c b/trunk/arch/arm/mach-cns3xxx/pcie.c index a4ec080908b8..06fd25d70aec 100644 --- a/trunk/arch/arm/mach-cns3xxx/pcie.c +++ b/trunk/arch/arm/mach-cns3xxx/pcie.c @@ -172,7 +172,7 @@ static struct pci_bus *cns3xxx_pci_scan_bus(int nr, struct pci_sys_data *sys) return pci_scan_bus(sys->busnr, &cns3xxx_pcie_ops, sys); } -static int cns3xxx_pcie_map_irq(struct pci_dev *dev, u8 slot, u8 pin) +static int cns3xxx_pcie_map_irq(const struct pci_dev *dev, u8 slot, u8 pin) { struct cns3xxx_pcie *cnspci = pdev_to_cnspci(dev); int irq = cnspci->irqs[slot]; diff --git a/trunk/arch/arm/mach-dove/pcie.c b/trunk/arch/arm/mach-dove/pcie.c index c2f1c4767f21..aa2b3a09a51d 100644 --- a/trunk/arch/arm/mach-dove/pcie.c +++ b/trunk/arch/arm/mach-dove/pcie.c @@ -193,7 +193,7 @@ dove_pcie_scan_bus(int nr, struct pci_sys_data *sys) return bus; } -static int __init dove_pcie_map_irq(struct pci_dev *dev, u8 slot, u8 pin) +static int __init dove_pcie_map_irq(const struct pci_dev *dev, u8 slot, u8 pin) { struct pcie_port *pp = bus_to_port(dev->bus->number); diff --git a/trunk/arch/arm/mach-footbridge/cats-pci.c b/trunk/arch/arm/mach-footbridge/cats-pci.c index ae3e1c8c7583..32321f66dec4 100644 --- a/trunk/arch/arm/mach-footbridge/cats-pci.c +++ b/trunk/arch/arm/mach-footbridge/cats-pci.c @@ -16,7 +16,7 @@ /* cats host-specific stuff */ static int irqmap_cats[] __initdata = { IRQ_PCI, IRQ_IN0, IRQ_IN1, IRQ_IN3 }; -static int __init cats_map_irq(struct pci_dev *dev, u8 slot, u8 pin) +static int __init cats_map_irq(const struct pci_dev *dev, u8 slot, u8 pin) { if (dev->irq >= 255) return -1; /* not a valid interrupt. */ diff --git a/trunk/arch/arm/mach-footbridge/ebsa285-pci.c b/trunk/arch/arm/mach-footbridge/ebsa285-pci.c index e5ab5bddbc8c..511c673ffa9d 100644 --- a/trunk/arch/arm/mach-footbridge/ebsa285-pci.c +++ b/trunk/arch/arm/mach-footbridge/ebsa285-pci.c @@ -15,7 +15,7 @@ static int irqmap_ebsa285[] __initdata = { IRQ_IN3, IRQ_IN1, IRQ_IN0, IRQ_PCI }; -static int __init ebsa285_map_irq(struct pci_dev *dev, u8 slot, u8 pin) +static int __init ebsa285_map_irq(const struct pci_dev *dev, u8 slot, u8 pin) { if (dev->vendor == PCI_VENDOR_ID_CONTAQ && dev->device == PCI_DEVICE_ID_CONTAQ_82C693) diff --git a/trunk/arch/arm/mach-footbridge/netwinder-pci.c b/trunk/arch/arm/mach-footbridge/netwinder-pci.c index e263d6d54a0f..62187610e17e 100644 --- a/trunk/arch/arm/mach-footbridge/netwinder-pci.c +++ b/trunk/arch/arm/mach-footbridge/netwinder-pci.c @@ -17,7 +17,7 @@ * We now use the slot ID instead of the device identifiers to select * which interrupt is routed where. */ -static int __init netwinder_map_irq(struct pci_dev *dev, u8 slot, u8 pin) +static int __init netwinder_map_irq(const struct pci_dev *dev, u8 slot, u8 pin) { switch (slot) { case 0: /* host bridge */ diff --git a/trunk/arch/arm/mach-footbridge/personal-pci.c b/trunk/arch/arm/mach-footbridge/personal-pci.c index d5fca95afdad..aeb651d914a6 100644 --- a/trunk/arch/arm/mach-footbridge/personal-pci.c +++ b/trunk/arch/arm/mach-footbridge/personal-pci.c @@ -18,7 +18,8 @@ static int irqmap_personal_server[] __initdata = { IRQ_DOORBELLHOST, IRQ_DMA1, IRQ_DMA2, IRQ_PCI }; -static int __init personal_server_map_irq(struct pci_dev *dev, u8 slot, u8 pin) +static int __init personal_server_map_irq(const struct pci_dev *dev, u8 slot, + u8 pin) { unsigned char line; diff --git a/trunk/arch/arm/mach-imx/clock-imx1.c b/trunk/arch/arm/mach-imx/clock-imx1.c index dcc41728fe72..4aabeb241563 100644 --- a/trunk/arch/arm/mach-imx/clock-imx1.c +++ b/trunk/arch/arm/mach-imx/clock-imx1.c @@ -587,9 +587,9 @@ static struct clk_lookup lookups[] __initdata = { _REGISTER_CLOCK(NULL, "mma", mma_clk) _REGISTER_CLOCK("imx_udc.0", NULL, usbd_clk) _REGISTER_CLOCK(NULL, "gpt", gpt_clk) - _REGISTER_CLOCK("imx-uart.0", NULL, uart_clk) - _REGISTER_CLOCK("imx-uart.1", NULL, uart_clk) - _REGISTER_CLOCK("imx-uart.2", NULL, uart_clk) + _REGISTER_CLOCK("imx1-uart.0", NULL, uart_clk) + _REGISTER_CLOCK("imx1-uart.1", NULL, uart_clk) + _REGISTER_CLOCK("imx1-uart.2", NULL, uart_clk) _REGISTER_CLOCK("imx-i2c.0", NULL, i2c_clk) _REGISTER_CLOCK("imx1-cspi.0", NULL, spi_clk) _REGISTER_CLOCK("imx1-cspi.1", NULL, spi_clk) diff --git a/trunk/arch/arm/mach-imx/clock-imx21.c b/trunk/arch/arm/mach-imx/clock-imx21.c index bf30a8c7ce6f..ee15d8c9db08 100644 --- a/trunk/arch/arm/mach-imx/clock-imx21.c +++ b/trunk/arch/arm/mach-imx/clock-imx21.c @@ -1162,10 +1162,10 @@ static struct clk_lookup lookups[] = { _REGISTER_CLOCK(NULL, "perclk3", per_clk[2]) _REGISTER_CLOCK(NULL, "perclk4", per_clk[3]) _REGISTER_CLOCK(NULL, "clko", clko_clk) - _REGISTER_CLOCK("imx-uart.0", NULL, uart_clk[0]) - _REGISTER_CLOCK("imx-uart.1", NULL, uart_clk[1]) - _REGISTER_CLOCK("imx-uart.2", NULL, uart_clk[2]) - _REGISTER_CLOCK("imx-uart.3", NULL, uart_clk[3]) + _REGISTER_CLOCK("imx21-uart.0", NULL, uart_clk[0]) + _REGISTER_CLOCK("imx21-uart.1", NULL, uart_clk[1]) + _REGISTER_CLOCK("imx21-uart.2", NULL, uart_clk[2]) + _REGISTER_CLOCK("imx21-uart.3", NULL, uart_clk[3]) _REGISTER_CLOCK(NULL, "gpt1", gpt_clk[0]) _REGISTER_CLOCK(NULL, "gpt1", gpt_clk[1]) _REGISTER_CLOCK(NULL, "gpt1", gpt_clk[2]) diff --git a/trunk/arch/arm/mach-imx/clock-imx25.c b/trunk/arch/arm/mach-imx/clock-imx25.c index af1c580b06bc..0fc7ba56d616 100644 --- a/trunk/arch/arm/mach-imx/clock-imx25.c +++ b/trunk/arch/arm/mach-imx/clock-imx25.c @@ -272,11 +272,12 @@ DEFINE_CLOCK(can2_clk, 1, CCM_CGCR1, 3, get_rate_ipg, NULL, NULL); }, static struct clk_lookup lookups[] = { - _REGISTER_CLOCK("imx-uart.0", NULL, uart1_clk) - _REGISTER_CLOCK("imx-uart.1", NULL, uart2_clk) - _REGISTER_CLOCK("imx-uart.2", NULL, uart3_clk) - _REGISTER_CLOCK("imx-uart.3", NULL, uart4_clk) - _REGISTER_CLOCK("imx-uart.4", NULL, uart5_clk) + /* i.mx25 has the i.mx21 type uart */ + _REGISTER_CLOCK("imx21-uart.0", NULL, uart1_clk) + _REGISTER_CLOCK("imx21-uart.1", NULL, uart2_clk) + _REGISTER_CLOCK("imx21-uart.2", NULL, uart3_clk) + _REGISTER_CLOCK("imx21-uart.3", NULL, uart4_clk) + _REGISTER_CLOCK("imx21-uart.4", NULL, uart5_clk) _REGISTER_CLOCK("mxc-ehci.0", "usb", usbotg_clk) _REGISTER_CLOCK("mxc-ehci.1", "usb", usbotg_clk) _REGISTER_CLOCK("mxc-ehci.2", "usb", usbotg_clk) @@ -295,19 +296,20 @@ static struct clk_lookup lookups[] = { _REGISTER_CLOCK("imx-i2c.0", NULL, i2c_clk) _REGISTER_CLOCK("imx-i2c.1", NULL, i2c_clk) _REGISTER_CLOCK("imx-i2c.2", NULL, i2c_clk) - _REGISTER_CLOCK("fec.0", NULL, fec_clk) + _REGISTER_CLOCK("imx25-fec.0", NULL, fec_clk) _REGISTER_CLOCK("imxdi_rtc.0", NULL, dryice_clk) _REGISTER_CLOCK("imx-fb.0", NULL, lcdc_clk) _REGISTER_CLOCK("imx2-wdt.0", NULL, wdt_clk) _REGISTER_CLOCK("imx-ssi.0", NULL, ssi1_clk) _REGISTER_CLOCK("imx-ssi.1", NULL, ssi2_clk) - _REGISTER_CLOCK("sdhci-esdhc-imx.0", NULL, esdhc1_clk) - _REGISTER_CLOCK("sdhci-esdhc-imx.1", NULL, esdhc2_clk) + _REGISTER_CLOCK("sdhci-esdhc-imx25.0", NULL, esdhc1_clk) + _REGISTER_CLOCK("sdhci-esdhc-imx25.1", NULL, esdhc2_clk) _REGISTER_CLOCK("mx2-camera.0", NULL, csi_clk) _REGISTER_CLOCK(NULL, "audmux", audmux_clk) _REGISTER_CLOCK("flexcan.0", NULL, can1_clk) _REGISTER_CLOCK("flexcan.1", NULL, can2_clk) - _REGISTER_CLOCK("imx-sdma", NULL, sdma_clk) + /* i.mx25 has the i.mx35 type sdma */ + _REGISTER_CLOCK("imx35-sdma", NULL, sdma_clk) }; int __init mx25_clocks_init(void) diff --git a/trunk/arch/arm/mach-imx/clock-imx27.c b/trunk/arch/arm/mach-imx/clock-imx27.c index 583f2515c1d5..6912b821b37b 100644 --- a/trunk/arch/arm/mach-imx/clock-imx27.c +++ b/trunk/arch/arm/mach-imx/clock-imx27.c @@ -624,12 +624,13 @@ DEFINE_CLOCK1(csi_clk, 0, NULL, 0, parent, &csi_clk1, &per4_clk); }, static struct clk_lookup lookups[] = { - _REGISTER_CLOCK("imx-uart.0", NULL, uart1_clk) - _REGISTER_CLOCK("imx-uart.1", NULL, uart2_clk) - _REGISTER_CLOCK("imx-uart.2", NULL, uart3_clk) - _REGISTER_CLOCK("imx-uart.3", NULL, uart4_clk) - _REGISTER_CLOCK("imx-uart.4", NULL, uart5_clk) - _REGISTER_CLOCK("imx-uart.5", NULL, uart6_clk) + /* i.mx27 has the i.mx21 type uart */ + _REGISTER_CLOCK("imx21-uart.0", NULL, uart1_clk) + _REGISTER_CLOCK("imx21-uart.1", NULL, uart2_clk) + _REGISTER_CLOCK("imx21-uart.2", NULL, uart3_clk) + _REGISTER_CLOCK("imx21-uart.3", NULL, uart4_clk) + _REGISTER_CLOCK("imx21-uart.4", NULL, uart5_clk) + _REGISTER_CLOCK("imx21-uart.5", NULL, uart6_clk) _REGISTER_CLOCK(NULL, "gpt1", gpt1_clk) _REGISTER_CLOCK(NULL, "gpt2", gpt2_clk) _REGISTER_CLOCK(NULL, "gpt3", gpt3_clk) @@ -662,7 +663,7 @@ static struct clk_lookup lookups[] = { _REGISTER_CLOCK(NULL, "brom", brom_clk) _REGISTER_CLOCK(NULL, "emma", emma_clk) _REGISTER_CLOCK(NULL, "slcdc", slcdc_clk) - _REGISTER_CLOCK("fec.0", NULL, fec_clk) + _REGISTER_CLOCK("imx27-fec.0", NULL, fec_clk) _REGISTER_CLOCK(NULL, "emi", emi_clk) _REGISTER_CLOCK(NULL, "sahara2", sahara2_clk) _REGISTER_CLOCK(NULL, "ata", ata_clk) diff --git a/trunk/arch/arm/mach-imx/clock-imx31.c b/trunk/arch/arm/mach-imx/clock-imx31.c index 25f343fca2b9..d973770b1f96 100644 --- a/trunk/arch/arm/mach-imx/clock-imx31.c +++ b/trunk/arch/arm/mach-imx/clock-imx31.c @@ -547,11 +547,12 @@ static struct clk_lookup lookups[] = { _REGISTER_CLOCK("fsl-usb2-udc", "usb", usb_clk1) _REGISTER_CLOCK("fsl-usb2-udc", "usb_ahb", usb_clk2) _REGISTER_CLOCK("mx3-camera.0", NULL, csi_clk) - _REGISTER_CLOCK("imx-uart.0", NULL, uart1_clk) - _REGISTER_CLOCK("imx-uart.1", NULL, uart2_clk) - _REGISTER_CLOCK("imx-uart.2", NULL, uart3_clk) - _REGISTER_CLOCK("imx-uart.3", NULL, uart4_clk) - _REGISTER_CLOCK("imx-uart.4", NULL, uart5_clk) + /* i.mx31 has the i.mx21 type uart */ + _REGISTER_CLOCK("imx21-uart.0", NULL, uart1_clk) + _REGISTER_CLOCK("imx21-uart.1", NULL, uart2_clk) + _REGISTER_CLOCK("imx21-uart.2", NULL, uart3_clk) + _REGISTER_CLOCK("imx21-uart.3", NULL, uart4_clk) + _REGISTER_CLOCK("imx21-uart.4", NULL, uart5_clk) _REGISTER_CLOCK("imx-i2c.0", NULL, i2c1_clk) _REGISTER_CLOCK("imx-i2c.1", NULL, i2c2_clk) _REGISTER_CLOCK("imx-i2c.2", NULL, i2c3_clk) @@ -564,7 +565,7 @@ static struct clk_lookup lookups[] = { _REGISTER_CLOCK(NULL, "ata", ata_clk) _REGISTER_CLOCK(NULL, "rtic", rtic_clk) _REGISTER_CLOCK(NULL, "rng", rng_clk) - _REGISTER_CLOCK("imx-sdma", NULL, sdma_clk1) + _REGISTER_CLOCK("imx31-sdma", NULL, sdma_clk1) _REGISTER_CLOCK(NULL, "sdma_ipg", sdma_clk2) _REGISTER_CLOCK(NULL, "mstick", mstick1_clk) _REGISTER_CLOCK(NULL, "mstick", mstick2_clk) diff --git a/trunk/arch/arm/mach-imx/clock-imx35.c b/trunk/arch/arm/mach-imx/clock-imx35.c index 5a4cc1ea405b..88b62a071aea 100644 --- a/trunk/arch/arm/mach-imx/clock-imx35.c +++ b/trunk/arch/arm/mach-imx/clock-imx35.c @@ -458,10 +458,11 @@ static struct clk_lookup lookups[] = { _REGISTER_CLOCK("imx-epit.0", NULL, epit1_clk) _REGISTER_CLOCK("imx-epit.1", NULL, epit2_clk) _REGISTER_CLOCK(NULL, "esai", esai_clk) - _REGISTER_CLOCK("sdhci-esdhc-imx.0", NULL, esdhc1_clk) - _REGISTER_CLOCK("sdhci-esdhc-imx.1", NULL, esdhc2_clk) - _REGISTER_CLOCK("sdhci-esdhc-imx.2", NULL, esdhc3_clk) - _REGISTER_CLOCK("fec.0", NULL, fec_clk) + _REGISTER_CLOCK("sdhci-esdhc-imx35.0", NULL, esdhc1_clk) + _REGISTER_CLOCK("sdhci-esdhc-imx35.1", NULL, esdhc2_clk) + _REGISTER_CLOCK("sdhci-esdhc-imx35.2", NULL, esdhc3_clk) + /* i.mx35 has the i.mx27 type fec */ + _REGISTER_CLOCK("imx27-fec.0", NULL, fec_clk) _REGISTER_CLOCK(NULL, "gpio", gpio1_clk) _REGISTER_CLOCK(NULL, "gpio", gpio2_clk) _REGISTER_CLOCK(NULL, "gpio", gpio3_clk) @@ -481,14 +482,15 @@ static struct clk_lookup lookups[] = { _REGISTER_CLOCK(NULL, "rtc", rtc_clk) _REGISTER_CLOCK(NULL, "rtic", rtic_clk) _REGISTER_CLOCK(NULL, "scc", scc_clk) - _REGISTER_CLOCK("imx-sdma", NULL, sdma_clk) + _REGISTER_CLOCK("imx35-sdma", NULL, sdma_clk) _REGISTER_CLOCK(NULL, "spba", spba_clk) _REGISTER_CLOCK(NULL, "spdif", spdif_clk) _REGISTER_CLOCK("imx-ssi.0", NULL, ssi1_clk) _REGISTER_CLOCK("imx-ssi.1", NULL, ssi2_clk) - _REGISTER_CLOCK("imx-uart.0", NULL, uart1_clk) - _REGISTER_CLOCK("imx-uart.1", NULL, uart2_clk) - _REGISTER_CLOCK("imx-uart.2", NULL, uart3_clk) + /* i.mx35 has the i.mx21 type uart */ + _REGISTER_CLOCK("imx21-uart.0", NULL, uart1_clk) + _REGISTER_CLOCK("imx21-uart.1", NULL, uart2_clk) + _REGISTER_CLOCK("imx21-uart.2", NULL, uart3_clk) _REGISTER_CLOCK("mxc-ehci.0", "usb", usbotg_clk) _REGISTER_CLOCK("mxc-ehci.1", "usb", usbotg_clk) _REGISTER_CLOCK("mxc-ehci.2", "usb", usbotg_clk) diff --git a/trunk/arch/arm/mach-imx/eukrea_mbimxsd25-baseboard.c b/trunk/arch/arm/mach-imx/eukrea_mbimxsd25-baseboard.c index 01ebcb31e482..66e8726253fa 100644 --- a/trunk/arch/arm/mach-imx/eukrea_mbimxsd25-baseboard.c +++ b/trunk/arch/arm/mach-imx/eukrea_mbimxsd25-baseboard.c @@ -225,7 +225,8 @@ struct imx_ssi_platform_data eukrea_mbimxsd_ssi_pdata __initconst = { static struct esdhc_platform_data sd1_pdata = { .cd_gpio = GPIO_SD1CD, - .wp_gpio = -EINVAL, + .cd_type = ESDHC_CD_GPIO, + .wp_type = ESDHC_WP_NONE, }; /* diff --git a/trunk/arch/arm/mach-imx/eukrea_mbimxsd35-baseboard.c b/trunk/arch/arm/mach-imx/eukrea_mbimxsd35-baseboard.c index 558eb526ba56..0f0af02b3182 100644 --- a/trunk/arch/arm/mach-imx/eukrea_mbimxsd35-baseboard.c +++ b/trunk/arch/arm/mach-imx/eukrea_mbimxsd35-baseboard.c @@ -236,7 +236,8 @@ struct imx_ssi_platform_data eukrea_mbimxsd_ssi_pdata __initconst = { static struct esdhc_platform_data sd1_pdata = { .cd_gpio = GPIO_SD1CD, - .wp_gpio = -EINVAL, + .cd_type = ESDHC_CD_GPIO, + .wp_type = ESDHC_WP_NONE, }; /* diff --git a/trunk/arch/arm/mach-imx/mach-mx25_3ds.c b/trunk/arch/arm/mach-imx/mach-mx25_3ds.c index 01534bb61305..7f66a91df361 100644 --- a/trunk/arch/arm/mach-imx/mach-mx25_3ds.c +++ b/trunk/arch/arm/mach-imx/mach-mx25_3ds.c @@ -215,6 +215,8 @@ static const struct imxi2c_platform_data mx25_3ds_i2c0_data __initconst = { static const struct esdhc_platform_data mx25pdk_esdhc_pdata __initconst = { .wp_gpio = SD1_GPIO_WP, .cd_gpio = SD1_GPIO_CD, + .wp_type = ESDHC_WP_GPIO, + .cd_type = ESDHC_CD_GPIO, }; static void __init mx25pdk_init(void) diff --git a/trunk/arch/arm/mach-imx/mach-pcm043.c b/trunk/arch/arm/mach-imx/mach-pcm043.c index 163cc318cafb..660ec3e80cf8 100644 --- a/trunk/arch/arm/mach-imx/mach-pcm043.c +++ b/trunk/arch/arm/mach-imx/mach-pcm043.c @@ -349,6 +349,8 @@ __setup("otg_mode=", pcm043_otg_mode); static struct esdhc_platform_data sd1_pdata = { .wp_gpio = SD1_GPIO_WP, .cd_gpio = SD1_GPIO_CD, + .wp_type = ESDHC_WP_GPIO, + .cd_type = ESDHC_CD_GPIO, }; /* diff --git a/trunk/arch/arm/mach-imx/mm-imx25.c b/trunk/arch/arm/mach-imx/mm-imx25.c index 8bf029164652..cc4d152bd9bd 100644 --- a/trunk/arch/arm/mach-imx/mm-imx25.c +++ b/trunk/arch/arm/mach-imx/mm-imx25.c @@ -79,7 +79,6 @@ static struct sdma_script_start_addrs imx25_sdma_script __initdata = { }; static struct sdma_platform_data imx25_sdma_pdata __initdata = { - .sdma_version = 2, .fw_name = "sdma-imx25.bin", .script_addrs = &imx25_sdma_script, }; @@ -92,5 +91,6 @@ void __init imx25_soc_init(void) mxc_register_gpio("imx31-gpio", 2, MX25_GPIO3_BASE_ADDR, SZ_16K, MX25_INT_GPIO3, 0); mxc_register_gpio("imx31-gpio", 3, MX25_GPIO4_BASE_ADDR, SZ_16K, MX25_INT_GPIO4, 0); - imx_add_imx_sdma(MX25_SDMA_BASE_ADDR, MX25_INT_SDMA, &imx25_sdma_pdata); + /* i.mx25 has the i.mx35 type sdma */ + imx_add_imx_sdma("imx35-sdma", MX25_SDMA_BASE_ADDR, MX25_INT_SDMA, &imx25_sdma_pdata); } diff --git a/trunk/arch/arm/mach-imx/mm-imx31.c b/trunk/arch/arm/mach-imx/mm-imx31.c index 61bff38cb955..b7c55e7db000 100644 --- a/trunk/arch/arm/mach-imx/mm-imx31.c +++ b/trunk/arch/arm/mach-imx/mm-imx31.c @@ -69,7 +69,6 @@ static struct sdma_script_start_addrs imx31_to2_sdma_script __initdata = { }; static struct sdma_platform_data imx31_sdma_pdata __initdata = { - .sdma_version = 1, .fw_name = "sdma-imx31-to2.bin", .script_addrs = &imx31_to2_sdma_script, }; @@ -88,5 +87,5 @@ void __init imx31_soc_init(void) imx31_sdma_pdata.script_addrs = &imx31_to1_sdma_script; } - imx_add_imx_sdma(MX31_SDMA_BASE_ADDR, MX31_INT_SDMA, &imx31_sdma_pdata); + imx_add_imx_sdma("imx31-sdma", MX31_SDMA_BASE_ADDR, MX31_INT_SDMA, &imx31_sdma_pdata); } diff --git a/trunk/arch/arm/mach-imx/mm-imx35.c b/trunk/arch/arm/mach-imx/mm-imx35.c index 98769ae34377..f49bac7a1ede 100644 --- a/trunk/arch/arm/mach-imx/mm-imx35.c +++ b/trunk/arch/arm/mach-imx/mm-imx35.c @@ -86,7 +86,6 @@ static struct sdma_script_start_addrs imx35_to2_sdma_script __initdata = { }; static struct sdma_platform_data imx35_sdma_pdata __initdata = { - .sdma_version = 2, .fw_name = "sdma-imx35-to2.bin", .script_addrs = &imx35_to2_sdma_script, }; @@ -106,5 +105,5 @@ void __init imx35_soc_init(void) imx35_sdma_pdata.script_addrs = &imx35_to1_sdma_script; } - imx_add_imx_sdma(MX35_SDMA_BASE_ADDR, MX35_INT_SDMA, &imx35_sdma_pdata); + imx_add_imx_sdma("imx35-sdma", MX35_SDMA_BASE_ADDR, MX35_INT_SDMA, &imx35_sdma_pdata); } diff --git a/trunk/arch/arm/mach-integrator/pci.c b/trunk/arch/arm/mach-integrator/pci.c index 2fdb95433f0a..520b6bf81bb1 100644 --- a/trunk/arch/arm/mach-integrator/pci.c +++ b/trunk/arch/arm/mach-integrator/pci.c @@ -95,7 +95,7 @@ static int irq_tab[4] __initdata = { * map the specified device/slot/pin to an IRQ. This works out such * that slot 9 pin 1 is INT0, pin 2 is INT1, and slot 10 pin 1 is INT1. */ -static int __init integrator_map_irq(struct pci_dev *dev, u8 slot, u8 pin) +static int __init integrator_map_irq(const struct pci_dev *dev, u8 slot, u8 pin) { int intnr = ((slot - 9) + (pin - 1)) & 3; diff --git a/trunk/arch/arm/mach-iop13xx/iq81340mc.c b/trunk/arch/arm/mach-iop13xx/iq81340mc.c index 9b5a63f5d07d..23dfaffc586c 100644 --- a/trunk/arch/arm/mach-iop13xx/iq81340mc.c +++ b/trunk/arch/arm/mach-iop13xx/iq81340mc.c @@ -30,7 +30,7 @@ extern int init_atu; /* Flag to select which ATU(s) to initialize / disable */ static int __init -iq81340mc_pcix_map_irq(struct pci_dev *dev, u8 idsel, u8 pin) +iq81340mc_pcix_map_irq(const struct pci_dev *dev, u8 idsel, u8 pin) { switch (idsel) { case 1: diff --git a/trunk/arch/arm/mach-iop13xx/pci.c b/trunk/arch/arm/mach-iop13xx/pci.c index 0690b1d7fd3e..251c40897dad 100644 --- a/trunk/arch/arm/mach-iop13xx/pci.c +++ b/trunk/arch/arm/mach-iop13xx/pci.c @@ -388,7 +388,7 @@ static int iop13xx_atue_pci_status(int clear) } static int -iop13xx_pcie_map_irq(struct pci_dev *dev, u8 idsel, u8 pin) +iop13xx_pcie_map_irq(const struct pci_dev *dev, u8 idsel, u8 pin) { WARN_ON(idsel != 0); diff --git a/trunk/arch/arm/mach-iop32x/em7210.c b/trunk/arch/arm/mach-iop32x/em7210.c index 779f924af302..6cbffbfc2bba 100644 --- a/trunk/arch/arm/mach-iop32x/em7210.c +++ b/trunk/arch/arm/mach-iop32x/em7210.c @@ -81,7 +81,7 @@ void __init em7210_map_io(void) #define INTD IRQ_IOP32X_XINT3 static int __init -em7210_pci_map_irq(struct pci_dev *dev, u8 slot, u8 pin) +em7210_pci_map_irq(const struct pci_dev *dev, u8 slot, u8 pin) { static int pci_irq_table[][4] = { /* diff --git a/trunk/arch/arm/mach-iop32x/glantank.c b/trunk/arch/arm/mach-iop32x/glantank.c index c6b6f9c5650d..ceef5d4dce1a 100644 --- a/trunk/arch/arm/mach-iop32x/glantank.c +++ b/trunk/arch/arm/mach-iop32x/glantank.c @@ -77,7 +77,7 @@ void __init glantank_map_io(void) #define INTD IRQ_IOP32X_XINT3 static int __init -glantank_pci_map_irq(struct pci_dev *dev, u8 slot, u8 pin) +glantank_pci_map_irq(const struct pci_dev *dev, u8 slot, u8 pin) { static int pci_irq_table[][4] = { /* diff --git a/trunk/arch/arm/mach-iop32x/iq31244.c b/trunk/arch/arm/mach-iop32x/iq31244.c index fde962c057f0..3a62514dae7c 100644 --- a/trunk/arch/arm/mach-iop32x/iq31244.c +++ b/trunk/arch/arm/mach-iop32x/iq31244.c @@ -103,7 +103,7 @@ void __init iq31244_map_io(void) * EP80219/IQ31244 PCI. */ static int __init -ep80219_pci_map_irq(struct pci_dev *dev, u8 slot, u8 pin) +ep80219_pci_map_irq(const struct pci_dev *dev, u8 slot, u8 pin) { int irq; @@ -139,7 +139,7 @@ static struct hw_pci ep80219_pci __initdata = { }; static int __init -iq31244_pci_map_irq(struct pci_dev *dev, u8 slot, u8 pin) +iq31244_pci_map_irq(const struct pci_dev *dev, u8 slot, u8 pin) { int irq; diff --git a/trunk/arch/arm/mach-iop32x/iq80321.c b/trunk/arch/arm/mach-iop32x/iq80321.c index 3a95950e8737..35b7e6914d3b 100644 --- a/trunk/arch/arm/mach-iop32x/iq80321.c +++ b/trunk/arch/arm/mach-iop32x/iq80321.c @@ -71,7 +71,7 @@ void __init iq80321_map_io(void) * IQ80321 PCI. */ static int __init -iq80321_pci_map_irq(struct pci_dev *dev, u8 slot, u8 pin) +iq80321_pci_map_irq(const struct pci_dev *dev, u8 slot, u8 pin) { int irq; diff --git a/trunk/arch/arm/mach-iop32x/n2100.c b/trunk/arch/arm/mach-iop32x/n2100.c index 626aa375915d..1a374eab6007 100644 --- a/trunk/arch/arm/mach-iop32x/n2100.c +++ b/trunk/arch/arm/mach-iop32x/n2100.c @@ -78,7 +78,7 @@ void __init n2100_map_io(void) * N2100 PCI. */ static int __init -n2100_pci_map_irq(struct pci_dev *dev, u8 slot, u8 pin) +n2100_pci_map_irq(const struct pci_dev *dev, u8 slot, u8 pin) { int irq; diff --git a/trunk/arch/arm/mach-iop33x/iq80331.c b/trunk/arch/arm/mach-iop33x/iq80331.c index c565f8d1e3a4..637c0272d5e0 100644 --- a/trunk/arch/arm/mach-iop33x/iq80331.c +++ b/trunk/arch/arm/mach-iop33x/iq80331.c @@ -54,7 +54,7 @@ static struct sys_timer iq80331_timer = { * IQ80331 PCI. */ static int __init -iq80331_pci_map_irq(struct pci_dev *dev, u8 slot, u8 pin) +iq80331_pci_map_irq(const struct pci_dev *dev, u8 slot, u8 pin) { int irq; diff --git a/trunk/arch/arm/mach-iop33x/iq80332.c b/trunk/arch/arm/mach-iop33x/iq80332.c index 36a9efb254c2..90a0436d7255 100644 --- a/trunk/arch/arm/mach-iop33x/iq80332.c +++ b/trunk/arch/arm/mach-iop33x/iq80332.c @@ -54,7 +54,7 @@ static struct sys_timer iq80332_timer = { * IQ80332 PCI. */ static int __init -iq80332_pci_map_irq(struct pci_dev *dev, u8 slot, u8 pin) +iq80332_pci_map_irq(const struct pci_dev *dev, u8 slot, u8 pin) { int irq; diff --git a/trunk/arch/arm/mach-ixp2000/enp2611.c b/trunk/arch/arm/mach-ixp2000/enp2611.c index 88663ab1d2ad..62c60ade5274 100644 --- a/trunk/arch/arm/mach-ixp2000/enp2611.c +++ b/trunk/arch/arm/mach-ixp2000/enp2611.c @@ -148,7 +148,8 @@ static struct pci_bus * __init enp2611_pci_scan_bus(int nr, return pci_scan_bus(sys->busnr, &enp2611_pci_ops, sys); } -static int __init enp2611_pci_map_irq(struct pci_dev *dev, u8 slot, u8 pin) +static int __init enp2611_pci_map_irq(const struct pci_dev *dev, u8 slot, + u8 pin) { int irq; diff --git a/trunk/arch/arm/mach-ixp2000/ixdp2400.c b/trunk/arch/arm/mach-ixp2000/ixdp2400.c index dfffc1e817fa..5bad1a8419b7 100644 --- a/trunk/arch/arm/mach-ixp2000/ixdp2400.c +++ b/trunk/arch/arm/mach-ixp2000/ixdp2400.c @@ -78,7 +78,8 @@ int ixdp2400_pci_setup(int nr, struct pci_sys_data *sys) return 1; } -static int __init ixdp2400_pci_map_irq(struct pci_dev *dev, u8 slot, u8 pin) +static int __init ixdp2400_pci_map_irq(const struct pci_dev *dev, u8 slot, + u8 pin) { if (ixdp2x00_master_npu()) { diff --git a/trunk/arch/arm/mach-ixp2000/ixdp2800.c b/trunk/arch/arm/mach-ixp2000/ixdp2800.c index cd4c9bcff2b5..3d3cef876467 100644 --- a/trunk/arch/arm/mach-ixp2000/ixdp2800.c +++ b/trunk/arch/arm/mach-ixp2000/ixdp2800.c @@ -161,7 +161,8 @@ static int __init ixdp2800_pci_setup(int nr, struct pci_sys_data *sys) return 1; } -static int __init ixdp2800_pci_map_irq(struct pci_dev *dev, u8 slot, u8 pin) +static int __init ixdp2800_pci_map_irq(const struct pci_dev *dev, u8 slot, + u8 pin) { if (ixdp2x00_master_npu()) { diff --git a/trunk/arch/arm/mach-ixp2000/ixdp2x01.c b/trunk/arch/arm/mach-ixp2000/ixdp2x01.c index 84835b209557..be2a254f1374 100644 --- a/trunk/arch/arm/mach-ixp2000/ixdp2x01.c +++ b/trunk/arch/arm/mach-ixp2000/ixdp2x01.c @@ -252,7 +252,8 @@ void __init ixdp2x01_pci_preinit(void) #define DEVPIN(dev, pin) ((pin) | ((dev) << 3)) -static int __init ixdp2x01_pci_map_irq(struct pci_dev *dev, u8 slot, u8 pin) +static int __init ixdp2x01_pci_map_irq(const struct pci_dev *dev, u8 slot, + u8 pin) { u8 bus = dev->bus->number; u32 devpin = DEVPIN(PCI_SLOT(dev->devfn), pin); diff --git a/trunk/arch/arm/mach-ixp23xx/ixdp2351.c b/trunk/arch/arm/mach-ixp23xx/ixdp2351.c index 8dcba17c81e7..ec028e35f401 100644 --- a/trunk/arch/arm/mach-ixp23xx/ixdp2351.c +++ b/trunk/arch/arm/mach-ixp23xx/ixdp2351.c @@ -168,7 +168,7 @@ void __init ixdp2351_init_irq(void) */ #define DEVPIN(dev, pin) ((pin) | ((dev) << 3)) -static int __init ixdp2351_map_irq(struct pci_dev *dev, u8 slot, u8 pin) +static int __init ixdp2351_map_irq(const struct pci_dev *dev, u8 slot, u8 pin) { u8 bus = dev->bus->number; u32 devpin = DEVPIN(PCI_SLOT(dev->devfn), pin); diff --git a/trunk/arch/arm/mach-ixp23xx/roadrunner.c b/trunk/arch/arm/mach-ixp23xx/roadrunner.c index 8fe0c6273262..844551d2368b 100644 --- a/trunk/arch/arm/mach-ixp23xx/roadrunner.c +++ b/trunk/arch/arm/mach-ixp23xx/roadrunner.c @@ -56,7 +56,8 @@ #define INTC_PIN IXP23XX_GPIO_PIN_11 #define INTD_PIN IXP23XX_GPIO_PIN_12 -static int __init roadrunner_map_irq(struct pci_dev *dev, u8 idsel, u8 pin) +static int __init roadrunner_map_irq(const struct pci_dev *dev, u8 idsel, + u8 pin) { static int pci_card_slot_irq[] = {INTB, INTC, INTD, INTA}; static int pmc_card_slot_irq[] = {INTA, INTB, INTC, INTD}; diff --git a/trunk/arch/arm/mach-ixp4xx/avila-pci.c b/trunk/arch/arm/mach-ixp4xx/avila-pci.c index 162043ff29ff..8fea0a3c5246 100644 --- a/trunk/arch/arm/mach-ixp4xx/avila-pci.c +++ b/trunk/arch/arm/mach-ixp4xx/avila-pci.c @@ -46,7 +46,7 @@ void __init avila_pci_preinit(void) ixp4xx_pci_preinit(); } -static int __init avila_map_irq(struct pci_dev *dev, u8 slot, u8 pin) +static int __init avila_map_irq(const struct pci_dev *dev, u8 slot, u8 pin) { static int pci_irq_table[IRQ_LINES] = { IXP4XX_GPIO_IRQ(INTA), diff --git a/trunk/arch/arm/mach-ixp4xx/coyote-pci.c b/trunk/arch/arm/mach-ixp4xx/coyote-pci.c index 37fda7d6e83d..71f5c9c60fc3 100644 --- a/trunk/arch/arm/mach-ixp4xx/coyote-pci.c +++ b/trunk/arch/arm/mach-ixp4xx/coyote-pci.c @@ -37,7 +37,7 @@ void __init coyote_pci_preinit(void) ixp4xx_pci_preinit(); } -static int __init coyote_map_irq(struct pci_dev *dev, u8 slot, u8 pin) +static int __init coyote_map_irq(const struct pci_dev *dev, u8 slot, u8 pin) { if (slot == SLOT0_DEVID) return IXP4XX_GPIO_IRQ(SLOT0_INTA); diff --git a/trunk/arch/arm/mach-ixp4xx/dsmg600-pci.c b/trunk/arch/arm/mach-ixp4xx/dsmg600-pci.c index c7612010b3fc..0532510b5e8c 100644 --- a/trunk/arch/arm/mach-ixp4xx/dsmg600-pci.c +++ b/trunk/arch/arm/mach-ixp4xx/dsmg600-pci.c @@ -44,7 +44,7 @@ void __init dsmg600_pci_preinit(void) ixp4xx_pci_preinit(); } -static int __init dsmg600_map_irq(struct pci_dev *dev, u8 slot, u8 pin) +static int __init dsmg600_map_irq(const struct pci_dev *dev, u8 slot, u8 pin) { static int pci_irq_table[MAX_DEV][IRQ_LINES] = { { IXP4XX_GPIO_IRQ(INTE), -1, -1 }, diff --git a/trunk/arch/arm/mach-ixp4xx/fsg-pci.c b/trunk/arch/arm/mach-ixp4xx/fsg-pci.c index 44ccde9d4879..d2ac803328f7 100644 --- a/trunk/arch/arm/mach-ixp4xx/fsg-pci.c +++ b/trunk/arch/arm/mach-ixp4xx/fsg-pci.c @@ -38,7 +38,7 @@ void __init fsg_pci_preinit(void) ixp4xx_pci_preinit(); } -static int __init fsg_map_irq(struct pci_dev *dev, u8 slot, u8 pin) +static int __init fsg_map_irq(const struct pci_dev *dev, u8 slot, u8 pin) { static int pci_irq_table[IRQ_LINES] = { IXP4XX_GPIO_IRQ(INTC), diff --git a/trunk/arch/arm/mach-ixp4xx/gateway7001-pci.c b/trunk/arch/arm/mach-ixp4xx/gateway7001-pci.c index fc1124168874..76581fb467c4 100644 --- a/trunk/arch/arm/mach-ixp4xx/gateway7001-pci.c +++ b/trunk/arch/arm/mach-ixp4xx/gateway7001-pci.c @@ -35,7 +35,8 @@ void __init gateway7001_pci_preinit(void) ixp4xx_pci_preinit(); } -static int __init gateway7001_map_irq(struct pci_dev *dev, u8 slot, u8 pin) +static int __init gateway7001_map_irq(const struct pci_dev *dev, u8 slot, + u8 pin) { if (slot == 1) return IRQ_IXP4XX_GPIO11; diff --git a/trunk/arch/arm/mach-ixp4xx/goramo_mlr.c b/trunk/arch/arm/mach-ixp4xx/goramo_mlr.c index 5f00ad224fe0..7548d9a2efe2 100644 --- a/trunk/arch/arm/mach-ixp4xx/goramo_mlr.c +++ b/trunk/arch/arm/mach-ixp4xx/goramo_mlr.c @@ -462,7 +462,7 @@ static void __init gmlr_pci_postinit(void) } } -static int __init gmlr_map_irq(struct pci_dev *dev, u8 slot, u8 pin) +static int __init gmlr_map_irq(const struct pci_dev *dev, u8 slot, u8 pin) { switch(slot) { case SLOT_ETHA: return IXP4XX_GPIO_IRQ(GPIO_IRQ_ETHA); diff --git a/trunk/arch/arm/mach-ixp4xx/gtwx5715-pci.c b/trunk/arch/arm/mach-ixp4xx/gtwx5715-pci.c index 38cc0725dbd8..d68fc068c38d 100644 --- a/trunk/arch/arm/mach-ixp4xx/gtwx5715-pci.c +++ b/trunk/arch/arm/mach-ixp4xx/gtwx5715-pci.c @@ -49,7 +49,7 @@ void __init gtwx5715_pci_preinit(void) } -static int __init gtwx5715_map_irq(struct pci_dev *dev, u8 slot, u8 pin) +static int __init gtwx5715_map_irq(const struct pci_dev *dev, u8 slot, u8 pin) { int rc = -1; diff --git a/trunk/arch/arm/mach-ixp4xx/ixdp425-pci.c b/trunk/arch/arm/mach-ixp4xx/ixdp425-pci.c index 58f400417eaf..fffd8c5e40bf 100644 --- a/trunk/arch/arm/mach-ixp4xx/ixdp425-pci.c +++ b/trunk/arch/arm/mach-ixp4xx/ixdp425-pci.c @@ -43,7 +43,7 @@ void __init ixdp425_pci_preinit(void) ixp4xx_pci_preinit(); } -static int __init ixdp425_map_irq(struct pci_dev *dev, u8 slot, u8 pin) +static int __init ixdp425_map_irq(const struct pci_dev *dev, u8 slot, u8 pin) { static int pci_irq_table[IRQ_LINES] = { IXP4XX_GPIO_IRQ(INTA), diff --git a/trunk/arch/arm/mach-ixp4xx/ixdpg425-pci.c b/trunk/arch/arm/mach-ixp4xx/ixdpg425-pci.c index e64f6d041488..34efe75015ec 100644 --- a/trunk/arch/arm/mach-ixp4xx/ixdpg425-pci.c +++ b/trunk/arch/arm/mach-ixp4xx/ixdpg425-pci.c @@ -31,7 +31,7 @@ void __init ixdpg425_pci_preinit(void) ixp4xx_pci_preinit(); } -static int __init ixdpg425_map_irq(struct pci_dev *dev, u8 slot, u8 pin) +static int __init ixdpg425_map_irq(const struct pci_dev *dev, u8 slot, u8 pin) { if (slot == 12 || slot == 13) return IRQ_IXP4XX_GPIO7; diff --git a/trunk/arch/arm/mach-ixp4xx/nas100d-pci.c b/trunk/arch/arm/mach-ixp4xx/nas100d-pci.c index 428d1202b799..5434ccf553eb 100644 --- a/trunk/arch/arm/mach-ixp4xx/nas100d-pci.c +++ b/trunk/arch/arm/mach-ixp4xx/nas100d-pci.c @@ -41,7 +41,7 @@ void __init nas100d_pci_preinit(void) ixp4xx_pci_preinit(); } -static int __init nas100d_map_irq(struct pci_dev *dev, u8 slot, u8 pin) +static int __init nas100d_map_irq(const struct pci_dev *dev, u8 slot, u8 pin) { static int pci_irq_table[MAX_DEV][IRQ_LINES] = { { IXP4XX_GPIO_IRQ(INTA), -1, -1 }, diff --git a/trunk/arch/arm/mach-ixp4xx/nslu2-pci.c b/trunk/arch/arm/mach-ixp4xx/nslu2-pci.c index 2e85f76b950d..b57160535e47 100644 --- a/trunk/arch/arm/mach-ixp4xx/nslu2-pci.c +++ b/trunk/arch/arm/mach-ixp4xx/nslu2-pci.c @@ -38,7 +38,7 @@ void __init nslu2_pci_preinit(void) ixp4xx_pci_preinit(); } -static int __init nslu2_map_irq(struct pci_dev *dev, u8 slot, u8 pin) +static int __init nslu2_map_irq(const struct pci_dev *dev, u8 slot, u8 pin) { static int pci_irq_table[IRQ_LINES] = { IXP4XX_GPIO_IRQ(INTA), diff --git a/trunk/arch/arm/mach-ixp4xx/vulcan-pci.c b/trunk/arch/arm/mach-ixp4xx/vulcan-pci.c index 03bdec5140a7..0bc3f34c282f 100644 --- a/trunk/arch/arm/mach-ixp4xx/vulcan-pci.c +++ b/trunk/arch/arm/mach-ixp4xx/vulcan-pci.c @@ -43,7 +43,7 @@ void __init vulcan_pci_preinit(void) ixp4xx_pci_preinit(); } -static int __init vulcan_map_irq(struct pci_dev *dev, u8 slot, u8 pin) +static int __init vulcan_map_irq(const struct pci_dev *dev, u8 slot, u8 pin) { if (slot == 1) return IXP4XX_GPIO_IRQ(INTA); diff --git a/trunk/arch/arm/mach-ixp4xx/wg302v2-pci.c b/trunk/arch/arm/mach-ixp4xx/wg302v2-pci.c index 17f3cf59a31b..f27dfcfe811b 100644 --- a/trunk/arch/arm/mach-ixp4xx/wg302v2-pci.c +++ b/trunk/arch/arm/mach-ixp4xx/wg302v2-pci.c @@ -35,7 +35,7 @@ void __init wg302v2_pci_preinit(void) ixp4xx_pci_preinit(); } -static int __init wg302v2_map_irq(struct pci_dev *dev, u8 slot, u8 pin) +static int __init wg302v2_map_irq(const struct pci_dev *dev, u8 slot, u8 pin) { if (slot == 1) return IRQ_IXP4XX_GPIO8; diff --git a/trunk/arch/arm/mach-kirkwood/pcie.c b/trunk/arch/arm/mach-kirkwood/pcie.c index bfeb9c900cec..74b992d810ea 100644 --- a/trunk/arch/arm/mach-kirkwood/pcie.c +++ b/trunk/arch/arm/mach-kirkwood/pcie.c @@ -245,7 +245,8 @@ kirkwood_pcie_scan_bus(int nr, struct pci_sys_data *sys) return bus; } -static int __init kirkwood_pcie_map_irq(struct pci_dev *dev, u8 slot, u8 pin) +static int __init kirkwood_pcie_map_irq(const struct pci_dev *dev, u8 slot, + u8 pin) { struct pcie_port *pp = bus_to_port(dev->bus); diff --git a/trunk/arch/arm/mach-ks8695/board-dsm320.c b/trunk/arch/arm/mach-ks8695/board-dsm320.c index ada92b6bed24..1338cb3e9827 100644 --- a/trunk/arch/arm/mach-ks8695/board-dsm320.c +++ b/trunk/arch/arm/mach-ks8695/board-dsm320.c @@ -34,7 +34,7 @@ #include "generic.h" #ifdef CONFIG_PCI -static int dsm320_pci_map_irq(struct pci_dev *dev, u8 slot, u8 pin) +static int dsm320_pci_map_irq(const struct pci_dev *dev, u8 slot, u8 pin) { switch (slot) { case 0: diff --git a/trunk/arch/arm/mach-ks8695/board-micrel.c b/trunk/arch/arm/mach-ks8695/board-micrel.c index c7ad09bd6ea2..e2e3cba8dcdb 100644 --- a/trunk/arch/arm/mach-ks8695/board-micrel.c +++ b/trunk/arch/arm/mach-ks8695/board-micrel.c @@ -24,7 +24,7 @@ #include "generic.h" #ifdef CONFIG_PCI -static int micrel_pci_map_irq(struct pci_dev *dev, u8 slot, u8 pin) +static int micrel_pci_map_irq(const struct pci_dev *dev, u8 slot, u8 pin) { return KS8695_IRQ_EXTERN0; } diff --git a/trunk/arch/arm/mach-ks8695/include/mach/devices.h b/trunk/arch/arm/mach-ks8695/include/mach/devices.h index 2744fecb429c..85a3c9aa7d13 100644 --- a/trunk/arch/arm/mach-ks8695/include/mach/devices.h +++ b/trunk/arch/arm/mach-ks8695/include/mach/devices.h @@ -30,7 +30,7 @@ extern void __init ks8695_init_leds(u8 cpu_led, u8 timer_led); struct ks8695_pci_cfg { short mode; - int (*map_irq)(struct pci_dev *, u8, u8); + int (*map_irq)(const struct pci_dev *, u8, u8); }; extern __init void ks8695_init_pci(struct ks8695_pci_cfg *); diff --git a/trunk/arch/arm/mach-msm/Kconfig b/trunk/arch/arm/mach-msm/Kconfig index 888e92502e15..ebde97f5d5f0 100644 --- a/trunk/arch/arm/mach-msm/Kconfig +++ b/trunk/arch/arm/mach-msm/Kconfig @@ -11,6 +11,7 @@ config ARCH_MSM7X00A select MSM_SMD select MSM_SMD_PKG3 select CPU_V6 + select GPIO_MSM_V1 select MSM_PROC_COMM select HAS_MSM_DEBUG_UART_PHYS @@ -22,6 +23,7 @@ config ARCH_MSM7X30 select MSM_VIC select CPU_V7 select MSM_GPIOMUX + select GPIO_MSM_V1 select MSM_PROC_COMM select HAS_MSM_DEBUG_UART_PHYS @@ -33,6 +35,7 @@ config ARCH_QSD8X50 select MSM_VIC select CPU_V7 select MSM_GPIOMUX + select GPIO_MSM_V1 select MSM_PROC_COMM select HAS_MSM_DEBUG_UART_PHYS @@ -44,6 +47,7 @@ config ARCH_MSM8X60 select ARM_GIC select CPU_V7 select MSM_V2_TLMM + select GPIO_MSM_V2 select MSM_GPIOMUX select MSM_SCM if SMP diff --git a/trunk/arch/arm/mach-msm/Makefile b/trunk/arch/arm/mach-msm/Makefile index b70658c5ae00..4285dfd80b6f 100644 --- a/trunk/arch/arm/mach-msm/Makefile +++ b/trunk/arch/arm/mach-msm/Makefile @@ -29,11 +29,3 @@ obj-$(CONFIG_ARCH_MSM8960) += board-msm8960.o devices-msm8960.o obj-$(CONFIG_ARCH_MSM7X30) += gpiomux-v1.o gpiomux.o obj-$(CONFIG_ARCH_QSD8X50) += gpiomux-8x50.o gpiomux-v1.o gpiomux.o obj-$(CONFIG_ARCH_MSM8X60) += gpiomux-8x60.o gpiomux-v2.o gpiomux.o -ifdef CONFIG_MSM_V2_TLMM -ifndef CONFIG_ARCH_MSM8960 -# TODO: TLMM Mapping issues need to be resolved -obj-y += gpio-v2.o -endif -else -obj-y += gpio.o -endif diff --git a/trunk/arch/arm/mach-msm/gpio.c b/trunk/arch/arm/mach-msm/gpio.c deleted file mode 100644 index 5ea273b00da8..000000000000 --- a/trunk/arch/arm/mach-msm/gpio.c +++ /dev/null @@ -1,376 +0,0 @@ -/* linux/arch/arm/mach-msm/gpio.c - * - * Copyright (C) 2007 Google, Inc. - * Copyright (c) 2009-2010, Code Aurora Forum. All rights reserved. - * - * This software is licensed under the terms of the GNU General Public - * License version 2, as published by the Free Software Foundation, and - * may be copied, distributed, and modified under those terms. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - */ - -#include -#include -#include -#include -#include -#include -#include "gpio_hw.h" -#include "gpiomux.h" - -#define FIRST_GPIO_IRQ MSM_GPIO_TO_INT(0) - -#define MSM_GPIO_BANK(bank, first, last) \ - { \ - .regs = { \ - .out = MSM_GPIO_OUT_##bank, \ - .in = MSM_GPIO_IN_##bank, \ - .int_status = MSM_GPIO_INT_STATUS_##bank, \ - .int_clear = MSM_GPIO_INT_CLEAR_##bank, \ - .int_en = MSM_GPIO_INT_EN_##bank, \ - .int_edge = MSM_GPIO_INT_EDGE_##bank, \ - .int_pos = MSM_GPIO_INT_POS_##bank, \ - .oe = MSM_GPIO_OE_##bank, \ - }, \ - .chip = { \ - .base = (first), \ - .ngpio = (last) - (first) + 1, \ - .get = msm_gpio_get, \ - .set = msm_gpio_set, \ - .direction_input = msm_gpio_direction_input, \ - .direction_output = msm_gpio_direction_output, \ - .to_irq = msm_gpio_to_irq, \ - .request = msm_gpio_request, \ - .free = msm_gpio_free, \ - } \ - } - -#define MSM_GPIO_BROKEN_INT_CLEAR 1 - -struct msm_gpio_regs { - void __iomem *out; - void __iomem *in; - void __iomem *int_status; - void __iomem *int_clear; - void __iomem *int_en; - void __iomem *int_edge; - void __iomem *int_pos; - void __iomem *oe; -}; - -struct msm_gpio_chip { - spinlock_t lock; - struct gpio_chip chip; - struct msm_gpio_regs regs; -#if MSM_GPIO_BROKEN_INT_CLEAR - unsigned int_status_copy; -#endif - unsigned int both_edge_detect; - unsigned int int_enable[2]; /* 0: awake, 1: sleep */ -}; - -static int msm_gpio_write(struct msm_gpio_chip *msm_chip, - unsigned offset, unsigned on) -{ - unsigned mask = BIT(offset); - unsigned val; - - val = readl(msm_chip->regs.out); - if (on) - writel(val | mask, msm_chip->regs.out); - else - writel(val & ~mask, msm_chip->regs.out); - return 0; -} - -static void msm_gpio_update_both_edge_detect(struct msm_gpio_chip *msm_chip) -{ - int loop_limit = 100; - unsigned pol, val, val2, intstat; - do { - val = readl(msm_chip->regs.in); - pol = readl(msm_chip->regs.int_pos); - pol = (pol & ~msm_chip->both_edge_detect) | - (~val & msm_chip->both_edge_detect); - writel(pol, msm_chip->regs.int_pos); - intstat = readl(msm_chip->regs.int_status); - val2 = readl(msm_chip->regs.in); - if (((val ^ val2) & msm_chip->both_edge_detect & ~intstat) == 0) - return; - } while (loop_limit-- > 0); - printk(KERN_ERR "msm_gpio_update_both_edge_detect, " - "failed to reach stable state %x != %x\n", val, val2); -} - -static int msm_gpio_clear_detect_status(struct msm_gpio_chip *msm_chip, - unsigned offset) -{ - unsigned bit = BIT(offset); - -#if MSM_GPIO_BROKEN_INT_CLEAR - /* Save interrupts that already triggered before we loose them. */ - /* Any interrupt that triggers between the read of int_status */ - /* and the write to int_clear will still be lost though. */ - msm_chip->int_status_copy |= readl(msm_chip->regs.int_status); - msm_chip->int_status_copy &= ~bit; -#endif - writel(bit, msm_chip->regs.int_clear); - msm_gpio_update_both_edge_detect(msm_chip); - return 0; -} - -static int msm_gpio_direction_input(struct gpio_chip *chip, unsigned offset) -{ - struct msm_gpio_chip *msm_chip; - unsigned long irq_flags; - - msm_chip = container_of(chip, struct msm_gpio_chip, chip); - spin_lock_irqsave(&msm_chip->lock, irq_flags); - writel(readl(msm_chip->regs.oe) & ~BIT(offset), msm_chip->regs.oe); - spin_unlock_irqrestore(&msm_chip->lock, irq_flags); - return 0; -} - -static int -msm_gpio_direction_output(struct gpio_chip *chip, unsigned offset, int value) -{ - struct msm_gpio_chip *msm_chip; - unsigned long irq_flags; - - msm_chip = container_of(chip, struct msm_gpio_chip, chip); - spin_lock_irqsave(&msm_chip->lock, irq_flags); - msm_gpio_write(msm_chip, offset, value); - writel(readl(msm_chip->regs.oe) | BIT(offset), msm_chip->regs.oe); - spin_unlock_irqrestore(&msm_chip->lock, irq_flags); - return 0; -} - -static int msm_gpio_get(struct gpio_chip *chip, unsigned offset) -{ - struct msm_gpio_chip *msm_chip; - - msm_chip = container_of(chip, struct msm_gpio_chip, chip); - return (readl(msm_chip->regs.in) & (1U << offset)) ? 1 : 0; -} - -static void msm_gpio_set(struct gpio_chip *chip, unsigned offset, int value) -{ - struct msm_gpio_chip *msm_chip; - unsigned long irq_flags; - - msm_chip = container_of(chip, struct msm_gpio_chip, chip); - spin_lock_irqsave(&msm_chip->lock, irq_flags); - msm_gpio_write(msm_chip, offset, value); - spin_unlock_irqrestore(&msm_chip->lock, irq_flags); -} - -static int msm_gpio_to_irq(struct gpio_chip *chip, unsigned offset) -{ - return MSM_GPIO_TO_INT(chip->base + offset); -} - -#ifdef CONFIG_MSM_GPIOMUX -static int msm_gpio_request(struct gpio_chip *chip, unsigned offset) -{ - return msm_gpiomux_get(chip->base + offset); -} - -static void msm_gpio_free(struct gpio_chip *chip, unsigned offset) -{ - msm_gpiomux_put(chip->base + offset); -} -#else -#define msm_gpio_request NULL -#define msm_gpio_free NULL -#endif - -struct msm_gpio_chip msm_gpio_chips[] = { -#if defined(CONFIG_ARCH_MSM7X00A) - MSM_GPIO_BANK(0, 0, 15), - MSM_GPIO_BANK(1, 16, 42), - MSM_GPIO_BANK(2, 43, 67), - MSM_GPIO_BANK(3, 68, 94), - MSM_GPIO_BANK(4, 95, 106), - MSM_GPIO_BANK(5, 107, 121), -#elif defined(CONFIG_ARCH_MSM7X25) || defined(CONFIG_ARCH_MSM7X27) - MSM_GPIO_BANK(0, 0, 15), - MSM_GPIO_BANK(1, 16, 42), - MSM_GPIO_BANK(2, 43, 67), - MSM_GPIO_BANK(3, 68, 94), - MSM_GPIO_BANK(4, 95, 106), - MSM_GPIO_BANK(5, 107, 132), -#elif defined(CONFIG_ARCH_MSM7X30) - MSM_GPIO_BANK(0, 0, 15), - MSM_GPIO_BANK(1, 16, 43), - MSM_GPIO_BANK(2, 44, 67), - MSM_GPIO_BANK(3, 68, 94), - MSM_GPIO_BANK(4, 95, 106), - MSM_GPIO_BANK(5, 107, 133), - MSM_GPIO_BANK(6, 134, 150), - MSM_GPIO_BANK(7, 151, 181), -#elif defined(CONFIG_ARCH_QSD8X50) - MSM_GPIO_BANK(0, 0, 15), - MSM_GPIO_BANK(1, 16, 42), - MSM_GPIO_BANK(2, 43, 67), - MSM_GPIO_BANK(3, 68, 94), - MSM_GPIO_BANK(4, 95, 103), - MSM_GPIO_BANK(5, 104, 121), - MSM_GPIO_BANK(6, 122, 152), - MSM_GPIO_BANK(7, 153, 164), -#endif -}; - -static void msm_gpio_irq_ack(struct irq_data *d) -{ - unsigned long irq_flags; - struct msm_gpio_chip *msm_chip = irq_data_get_irq_chip_data(d); - spin_lock_irqsave(&msm_chip->lock, irq_flags); - msm_gpio_clear_detect_status(msm_chip, - d->irq - gpio_to_irq(msm_chip->chip.base)); - spin_unlock_irqrestore(&msm_chip->lock, irq_flags); -} - -static void msm_gpio_irq_mask(struct irq_data *d) -{ - unsigned long irq_flags; - struct msm_gpio_chip *msm_chip = irq_data_get_irq_chip_data(d); - unsigned offset = d->irq - gpio_to_irq(msm_chip->chip.base); - - spin_lock_irqsave(&msm_chip->lock, irq_flags); - /* level triggered interrupts are also latched */ - if (!(readl(msm_chip->regs.int_edge) & BIT(offset))) - msm_gpio_clear_detect_status(msm_chip, offset); - msm_chip->int_enable[0] &= ~BIT(offset); - writel(msm_chip->int_enable[0], msm_chip->regs.int_en); - spin_unlock_irqrestore(&msm_chip->lock, irq_flags); -} - -static void msm_gpio_irq_unmask(struct irq_data *d) -{ - unsigned long irq_flags; - struct msm_gpio_chip *msm_chip = irq_data_get_irq_chip_data(d); - unsigned offset = d->irq - gpio_to_irq(msm_chip->chip.base); - - spin_lock_irqsave(&msm_chip->lock, irq_flags); - /* level triggered interrupts are also latched */ - if (!(readl(msm_chip->regs.int_edge) & BIT(offset))) - msm_gpio_clear_detect_status(msm_chip, offset); - msm_chip->int_enable[0] |= BIT(offset); - writel(msm_chip->int_enable[0], msm_chip->regs.int_en); - spin_unlock_irqrestore(&msm_chip->lock, irq_flags); -} - -static int msm_gpio_irq_set_wake(struct irq_data *d, unsigned int on) -{ - unsigned long irq_flags; - struct msm_gpio_chip *msm_chip = irq_data_get_irq_chip_data(d); - unsigned offset = d->irq - gpio_to_irq(msm_chip->chip.base); - - spin_lock_irqsave(&msm_chip->lock, irq_flags); - - if (on) - msm_chip->int_enable[1] |= BIT(offset); - else - msm_chip->int_enable[1] &= ~BIT(offset); - - spin_unlock_irqrestore(&msm_chip->lock, irq_flags); - return 0; -} - -static int msm_gpio_irq_set_type(struct irq_data *d, unsigned int flow_type) -{ - unsigned long irq_flags; - struct msm_gpio_chip *msm_chip = irq_data_get_irq_chip_data(d); - unsigned offset = d->irq - gpio_to_irq(msm_chip->chip.base); - unsigned val, mask = BIT(offset); - - spin_lock_irqsave(&msm_chip->lock, irq_flags); - val = readl(msm_chip->regs.int_edge); - if (flow_type & IRQ_TYPE_EDGE_BOTH) { - writel(val | mask, msm_chip->regs.int_edge); - __irq_set_handler_locked(d->irq, handle_edge_irq); - } else { - writel(val & ~mask, msm_chip->regs.int_edge); - __irq_set_handler_locked(d->irq, handle_level_irq); - } - if ((flow_type & IRQ_TYPE_EDGE_BOTH) == IRQ_TYPE_EDGE_BOTH) { - msm_chip->both_edge_detect |= mask; - msm_gpio_update_both_edge_detect(msm_chip); - } else { - msm_chip->both_edge_detect &= ~mask; - val = readl(msm_chip->regs.int_pos); - if (flow_type & (IRQF_TRIGGER_RISING | IRQF_TRIGGER_HIGH)) - writel(val | mask, msm_chip->regs.int_pos); - else - writel(val & ~mask, msm_chip->regs.int_pos); - } - spin_unlock_irqrestore(&msm_chip->lock, irq_flags); - return 0; -} - -static void msm_gpio_irq_handler(unsigned int irq, struct irq_desc *desc) -{ - int i, j, mask; - unsigned val; - - for (i = 0; i < ARRAY_SIZE(msm_gpio_chips); i++) { - struct msm_gpio_chip *msm_chip = &msm_gpio_chips[i]; - val = readl(msm_chip->regs.int_status); - val &= msm_chip->int_enable[0]; - while (val) { - mask = val & -val; - j = fls(mask) - 1; - /* printk("%s %08x %08x bit %d gpio %d irq %d\n", - __func__, v, m, j, msm_chip->chip.start + j, - FIRST_GPIO_IRQ + msm_chip->chip.start + j); */ - val &= ~mask; - generic_handle_irq(FIRST_GPIO_IRQ + - msm_chip->chip.base + j); - } - } - desc->irq_data.chip->irq_ack(&desc->irq_data); -} - -static struct irq_chip msm_gpio_irq_chip = { - .name = "msmgpio", - .irq_ack = msm_gpio_irq_ack, - .irq_mask = msm_gpio_irq_mask, - .irq_unmask = msm_gpio_irq_unmask, - .irq_set_wake = msm_gpio_irq_set_wake, - .irq_set_type = msm_gpio_irq_set_type, -}; - -static int __init msm_init_gpio(void) -{ - int i, j = 0; - - for (i = FIRST_GPIO_IRQ; i < FIRST_GPIO_IRQ + NR_GPIO_IRQS; i++) { - if (i - FIRST_GPIO_IRQ >= - msm_gpio_chips[j].chip.base + - msm_gpio_chips[j].chip.ngpio) - j++; - irq_set_chip_data(i, &msm_gpio_chips[j]); - irq_set_chip_and_handler(i, &msm_gpio_irq_chip, - handle_edge_irq); - set_irq_flags(i, IRQF_VALID); - } - - for (i = 0; i < ARRAY_SIZE(msm_gpio_chips); i++) { - spin_lock_init(&msm_gpio_chips[i].lock); - writel(0, msm_gpio_chips[i].regs.int_en); - gpiochip_add(&msm_gpio_chips[i].chip); - } - - irq_set_chained_handler(INT_GPIO_GROUP1, msm_gpio_irq_handler); - irq_set_chained_handler(INT_GPIO_GROUP2, msm_gpio_irq_handler); - irq_set_irq_wake(INT_GPIO_GROUP1, 1); - irq_set_irq_wake(INT_GPIO_GROUP2, 2); - return 0; -} - -postcore_initcall(msm_init_gpio); diff --git a/trunk/arch/arm/mach-msm/gpio_hw.h b/trunk/arch/arm/mach-msm/gpio_hw.h deleted file mode 100644 index 6b5066038baa..000000000000 --- a/trunk/arch/arm/mach-msm/gpio_hw.h +++ /dev/null @@ -1,278 +0,0 @@ -/* arch/arm/mach-msm/gpio_hw.h - * - * Copyright (C) 2007 Google, Inc. - * Author: Brian Swetland - * Copyright (c) 2008-2010, Code Aurora Forum. All rights reserved. - * - * This software is licensed under the terms of the GNU General Public - * License version 2, as published by the Free Software Foundation, and - * may be copied, distributed, and modified under those terms. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - */ - -#ifndef __ARCH_ARM_MACH_MSM_GPIO_HW_H -#define __ARCH_ARM_MACH_MSM_GPIO_HW_H - -#include - -/* see 80-VA736-2 Rev C pp 695-751 -** -** These are actually the *shadow* gpio registers, since the -** real ones (which allow full access) are only available to the -** ARM9 side of the world. -** -** Since the _BASE need to be page-aligned when we're mapping them -** to virtual addresses, adjust for the additional offset in these -** macros. -*/ - -#if defined(CONFIG_ARCH_MSM7X30) -#define MSM_GPIO1_REG(off) (MSM_GPIO1_BASE + (off)) -#define MSM_GPIO2_REG(off) (MSM_GPIO2_BASE + 0x400 + (off)) -#else -#define MSM_GPIO1_REG(off) (MSM_GPIO1_BASE + 0x800 + (off)) -#define MSM_GPIO2_REG(off) (MSM_GPIO2_BASE + 0xC00 + (off)) -#endif - -#if defined(CONFIG_ARCH_MSM7X00A) || defined(CONFIG_ARCH_MSM7X25) ||\ - defined(CONFIG_ARCH_MSM7X27) - -/* output value */ -#define MSM_GPIO_OUT_0 MSM_GPIO1_REG(0x00) /* gpio 15-0 */ -#define MSM_GPIO_OUT_1 MSM_GPIO2_REG(0x00) /* gpio 42-16 */ -#define MSM_GPIO_OUT_2 MSM_GPIO1_REG(0x04) /* gpio 67-43 */ -#define MSM_GPIO_OUT_3 MSM_GPIO1_REG(0x08) /* gpio 94-68 */ -#define MSM_GPIO_OUT_4 MSM_GPIO1_REG(0x0C) /* gpio 106-95 */ -#define MSM_GPIO_OUT_5 MSM_GPIO1_REG(0x50) /* gpio 107-121 */ - -/* same pin map as above, output enable */ -#define MSM_GPIO_OE_0 MSM_GPIO1_REG(0x10) -#define MSM_GPIO_OE_1 MSM_GPIO2_REG(0x08) -#define MSM_GPIO_OE_2 MSM_GPIO1_REG(0x14) -#define MSM_GPIO_OE_3 MSM_GPIO1_REG(0x18) -#define MSM_GPIO_OE_4 MSM_GPIO1_REG(0x1C) -#define MSM_GPIO_OE_5 MSM_GPIO1_REG(0x54) - -/* same pin map as above, input read */ -#define MSM_GPIO_IN_0 MSM_GPIO1_REG(0x34) -#define MSM_GPIO_IN_1 MSM_GPIO2_REG(0x20) -#define MSM_GPIO_IN_2 MSM_GPIO1_REG(0x38) -#define MSM_GPIO_IN_3 MSM_GPIO1_REG(0x3C) -#define MSM_GPIO_IN_4 MSM_GPIO1_REG(0x40) -#define MSM_GPIO_IN_5 MSM_GPIO1_REG(0x44) - -/* same pin map as above, 1=edge 0=level interrup */ -#define MSM_GPIO_INT_EDGE_0 MSM_GPIO1_REG(0x60) -#define MSM_GPIO_INT_EDGE_1 MSM_GPIO2_REG(0x50) -#define MSM_GPIO_INT_EDGE_2 MSM_GPIO1_REG(0x64) -#define MSM_GPIO_INT_EDGE_3 MSM_GPIO1_REG(0x68) -#define MSM_GPIO_INT_EDGE_4 MSM_GPIO1_REG(0x6C) -#define MSM_GPIO_INT_EDGE_5 MSM_GPIO1_REG(0xC0) - -/* same pin map as above, 1=positive 0=negative */ -#define MSM_GPIO_INT_POS_0 MSM_GPIO1_REG(0x70) -#define MSM_GPIO_INT_POS_1 MSM_GPIO2_REG(0x58) -#define MSM_GPIO_INT_POS_2 MSM_GPIO1_REG(0x74) -#define MSM_GPIO_INT_POS_3 MSM_GPIO1_REG(0x78) -#define MSM_GPIO_INT_POS_4 MSM_GPIO1_REG(0x7C) -#define MSM_GPIO_INT_POS_5 MSM_GPIO1_REG(0xBC) - -/* same pin map as above, interrupt enable */ -#define MSM_GPIO_INT_EN_0 MSM_GPIO1_REG(0x80) -#define MSM_GPIO_INT_EN_1 MSM_GPIO2_REG(0x60) -#define MSM_GPIO_INT_EN_2 MSM_GPIO1_REG(0x84) -#define MSM_GPIO_INT_EN_3 MSM_GPIO1_REG(0x88) -#define MSM_GPIO_INT_EN_4 MSM_GPIO1_REG(0x8C) -#define MSM_GPIO_INT_EN_5 MSM_GPIO1_REG(0xB8) - -/* same pin map as above, write 1 to clear interrupt */ -#define MSM_GPIO_INT_CLEAR_0 MSM_GPIO1_REG(0x90) -#define MSM_GPIO_INT_CLEAR_1 MSM_GPIO2_REG(0x68) -#define MSM_GPIO_INT_CLEAR_2 MSM_GPIO1_REG(0x94) -#define MSM_GPIO_INT_CLEAR_3 MSM_GPIO1_REG(0x98) -#define MSM_GPIO_INT_CLEAR_4 MSM_GPIO1_REG(0x9C) -#define MSM_GPIO_INT_CLEAR_5 MSM_GPIO1_REG(0xB4) - -/* same pin map as above, 1=interrupt pending */ -#define MSM_GPIO_INT_STATUS_0 MSM_GPIO1_REG(0xA0) -#define MSM_GPIO_INT_STATUS_1 MSM_GPIO2_REG(0x70) -#define MSM_GPIO_INT_STATUS_2 MSM_GPIO1_REG(0xA4) -#define MSM_GPIO_INT_STATUS_3 MSM_GPIO1_REG(0xA8) -#define MSM_GPIO_INT_STATUS_4 MSM_GPIO1_REG(0xAC) -#define MSM_GPIO_INT_STATUS_5 MSM_GPIO1_REG(0xB0) - -#endif - -#if defined(CONFIG_ARCH_QSD8X50) -/* output value */ -#define MSM_GPIO_OUT_0 MSM_GPIO1_REG(0x00) /* gpio 15-0 */ -#define MSM_GPIO_OUT_1 MSM_GPIO2_REG(0x00) /* gpio 42-16 */ -#define MSM_GPIO_OUT_2 MSM_GPIO1_REG(0x04) /* gpio 67-43 */ -#define MSM_GPIO_OUT_3 MSM_GPIO1_REG(0x08) /* gpio 94-68 */ -#define MSM_GPIO_OUT_4 MSM_GPIO1_REG(0x0C) /* gpio 103-95 */ -#define MSM_GPIO_OUT_5 MSM_GPIO1_REG(0x10) /* gpio 121-104 */ -#define MSM_GPIO_OUT_6 MSM_GPIO1_REG(0x14) /* gpio 152-122 */ -#define MSM_GPIO_OUT_7 MSM_GPIO1_REG(0x18) /* gpio 164-153 */ - -/* same pin map as above, output enable */ -#define MSM_GPIO_OE_0 MSM_GPIO1_REG(0x20) -#define MSM_GPIO_OE_1 MSM_GPIO2_REG(0x08) -#define MSM_GPIO_OE_2 MSM_GPIO1_REG(0x24) -#define MSM_GPIO_OE_3 MSM_GPIO1_REG(0x28) -#define MSM_GPIO_OE_4 MSM_GPIO1_REG(0x2C) -#define MSM_GPIO_OE_5 MSM_GPIO1_REG(0x30) -#define MSM_GPIO_OE_6 MSM_GPIO1_REG(0x34) -#define MSM_GPIO_OE_7 MSM_GPIO1_REG(0x38) - -/* same pin map as above, input read */ -#define MSM_GPIO_IN_0 MSM_GPIO1_REG(0x50) -#define MSM_GPIO_IN_1 MSM_GPIO2_REG(0x20) -#define MSM_GPIO_IN_2 MSM_GPIO1_REG(0x54) -#define MSM_GPIO_IN_3 MSM_GPIO1_REG(0x58) -#define MSM_GPIO_IN_4 MSM_GPIO1_REG(0x5C) -#define MSM_GPIO_IN_5 MSM_GPIO1_REG(0x60) -#define MSM_GPIO_IN_6 MSM_GPIO1_REG(0x64) -#define MSM_GPIO_IN_7 MSM_GPIO1_REG(0x68) - -/* same pin map as above, 1=edge 0=level interrup */ -#define MSM_GPIO_INT_EDGE_0 MSM_GPIO1_REG(0x70) -#define MSM_GPIO_INT_EDGE_1 MSM_GPIO2_REG(0x50) -#define MSM_GPIO_INT_EDGE_2 MSM_GPIO1_REG(0x74) -#define MSM_GPIO_INT_EDGE_3 MSM_GPIO1_REG(0x78) -#define MSM_GPIO_INT_EDGE_4 MSM_GPIO1_REG(0x7C) -#define MSM_GPIO_INT_EDGE_5 MSM_GPIO1_REG(0x80) -#define MSM_GPIO_INT_EDGE_6 MSM_GPIO1_REG(0x84) -#define MSM_GPIO_INT_EDGE_7 MSM_GPIO1_REG(0x88) - -/* same pin map as above, 1=positive 0=negative */ -#define MSM_GPIO_INT_POS_0 MSM_GPIO1_REG(0x90) -#define MSM_GPIO_INT_POS_1 MSM_GPIO2_REG(0x58) -#define MSM_GPIO_INT_POS_2 MSM_GPIO1_REG(0x94) -#define MSM_GPIO_INT_POS_3 MSM_GPIO1_REG(0x98) -#define MSM_GPIO_INT_POS_4 MSM_GPIO1_REG(0x9C) -#define MSM_GPIO_INT_POS_5 MSM_GPIO1_REG(0xA0) -#define MSM_GPIO_INT_POS_6 MSM_GPIO1_REG(0xA4) -#define MSM_GPIO_INT_POS_7 MSM_GPIO1_REG(0xA8) - -/* same pin map as above, interrupt enable */ -#define MSM_GPIO_INT_EN_0 MSM_GPIO1_REG(0xB0) -#define MSM_GPIO_INT_EN_1 MSM_GPIO2_REG(0x60) -#define MSM_GPIO_INT_EN_2 MSM_GPIO1_REG(0xB4) -#define MSM_GPIO_INT_EN_3 MSM_GPIO1_REG(0xB8) -#define MSM_GPIO_INT_EN_4 MSM_GPIO1_REG(0xBC) -#define MSM_GPIO_INT_EN_5 MSM_GPIO1_REG(0xC0) -#define MSM_GPIO_INT_EN_6 MSM_GPIO1_REG(0xC4) -#define MSM_GPIO_INT_EN_7 MSM_GPIO1_REG(0xC8) - -/* same pin map as above, write 1 to clear interrupt */ -#define MSM_GPIO_INT_CLEAR_0 MSM_GPIO1_REG(0xD0) -#define MSM_GPIO_INT_CLEAR_1 MSM_GPIO2_REG(0x68) -#define MSM_GPIO_INT_CLEAR_2 MSM_GPIO1_REG(0xD4) -#define MSM_GPIO_INT_CLEAR_3 MSM_GPIO1_REG(0xD8) -#define MSM_GPIO_INT_CLEAR_4 MSM_GPIO1_REG(0xDC) -#define MSM_GPIO_INT_CLEAR_5 MSM_GPIO1_REG(0xE0) -#define MSM_GPIO_INT_CLEAR_6 MSM_GPIO1_REG(0xE4) -#define MSM_GPIO_INT_CLEAR_7 MSM_GPIO1_REG(0xE8) - -/* same pin map as above, 1=interrupt pending */ -#define MSM_GPIO_INT_STATUS_0 MSM_GPIO1_REG(0xF0) -#define MSM_GPIO_INT_STATUS_1 MSM_GPIO2_REG(0x70) -#define MSM_GPIO_INT_STATUS_2 MSM_GPIO1_REG(0xF4) -#define MSM_GPIO_INT_STATUS_3 MSM_GPIO1_REG(0xF8) -#define MSM_GPIO_INT_STATUS_4 MSM_GPIO1_REG(0xFC) -#define MSM_GPIO_INT_STATUS_5 MSM_GPIO1_REG(0x100) -#define MSM_GPIO_INT_STATUS_6 MSM_GPIO1_REG(0x104) -#define MSM_GPIO_INT_STATUS_7 MSM_GPIO1_REG(0x108) - -#endif - -#if defined(CONFIG_ARCH_MSM7X30) - -/* output value */ -#define MSM_GPIO_OUT_0 MSM_GPIO1_REG(0x00) /* gpio 15-0 */ -#define MSM_GPIO_OUT_1 MSM_GPIO2_REG(0x00) /* gpio 43-16 */ -#define MSM_GPIO_OUT_2 MSM_GPIO1_REG(0x04) /* gpio 67-44 */ -#define MSM_GPIO_OUT_3 MSM_GPIO1_REG(0x08) /* gpio 94-68 */ -#define MSM_GPIO_OUT_4 MSM_GPIO1_REG(0x0C) /* gpio 106-95 */ -#define MSM_GPIO_OUT_5 MSM_GPIO1_REG(0x50) /* gpio 133-107 */ -#define MSM_GPIO_OUT_6 MSM_GPIO1_REG(0xC4) /* gpio 150-134 */ -#define MSM_GPIO_OUT_7 MSM_GPIO1_REG(0x214) /* gpio 181-151 */ - -/* same pin map as above, output enable */ -#define MSM_GPIO_OE_0 MSM_GPIO1_REG(0x10) -#define MSM_GPIO_OE_1 MSM_GPIO2_REG(0x08) -#define MSM_GPIO_OE_2 MSM_GPIO1_REG(0x14) -#define MSM_GPIO_OE_3 MSM_GPIO1_REG(0x18) -#define MSM_GPIO_OE_4 MSM_GPIO1_REG(0x1C) -#define MSM_GPIO_OE_5 MSM_GPIO1_REG(0x54) -#define MSM_GPIO_OE_6 MSM_GPIO1_REG(0xC8) -#define MSM_GPIO_OE_7 MSM_GPIO1_REG(0x218) - -/* same pin map as above, input read */ -#define MSM_GPIO_IN_0 MSM_GPIO1_REG(0x34) -#define MSM_GPIO_IN_1 MSM_GPIO2_REG(0x20) -#define MSM_GPIO_IN_2 MSM_GPIO1_REG(0x38) -#define MSM_GPIO_IN_3 MSM_GPIO1_REG(0x3C) -#define MSM_GPIO_IN_4 MSM_GPIO1_REG(0x40) -#define MSM_GPIO_IN_5 MSM_GPIO1_REG(0x44) -#define MSM_GPIO_IN_6 MSM_GPIO1_REG(0xCC) -#define MSM_GPIO_IN_7 MSM_GPIO1_REG(0x21C) - -/* same pin map as above, 1=edge 0=level interrup */ -#define MSM_GPIO_INT_EDGE_0 MSM_GPIO1_REG(0x60) -#define MSM_GPIO_INT_EDGE_1 MSM_GPIO2_REG(0x50) -#define MSM_GPIO_INT_EDGE_2 MSM_GPIO1_REG(0x64) -#define MSM_GPIO_INT_EDGE_3 MSM_GPIO1_REG(0x68) -#define MSM_GPIO_INT_EDGE_4 MSM_GPIO1_REG(0x6C) -#define MSM_GPIO_INT_EDGE_5 MSM_GPIO1_REG(0xC0) -#define MSM_GPIO_INT_EDGE_6 MSM_GPIO1_REG(0xD0) -#define MSM_GPIO_INT_EDGE_7 MSM_GPIO1_REG(0x240) - -/* same pin map as above, 1=positive 0=negative */ -#define MSM_GPIO_INT_POS_0 MSM_GPIO1_REG(0x70) -#define MSM_GPIO_INT_POS_1 MSM_GPIO2_REG(0x58) -#define MSM_GPIO_INT_POS_2 MSM_GPIO1_REG(0x74) -#define MSM_GPIO_INT_POS_3 MSM_GPIO1_REG(0x78) -#define MSM_GPIO_INT_POS_4 MSM_GPIO1_REG(0x7C) -#define MSM_GPIO_INT_POS_5 MSM_GPIO1_REG(0xBC) -#define MSM_GPIO_INT_POS_6 MSM_GPIO1_REG(0xD4) -#define MSM_GPIO_INT_POS_7 MSM_GPIO1_REG(0x228) - -/* same pin map as above, interrupt enable */ -#define MSM_GPIO_INT_EN_0 MSM_GPIO1_REG(0x80) -#define MSM_GPIO_INT_EN_1 MSM_GPIO2_REG(0x60) -#define MSM_GPIO_INT_EN_2 MSM_GPIO1_REG(0x84) -#define MSM_GPIO_INT_EN_3 MSM_GPIO1_REG(0x88) -#define MSM_GPIO_INT_EN_4 MSM_GPIO1_REG(0x8C) -#define MSM_GPIO_INT_EN_5 MSM_GPIO1_REG(0xB8) -#define MSM_GPIO_INT_EN_6 MSM_GPIO1_REG(0xD8) -#define MSM_GPIO_INT_EN_7 MSM_GPIO1_REG(0x22C) - -/* same pin map as above, write 1 to clear interrupt */ -#define MSM_GPIO_INT_CLEAR_0 MSM_GPIO1_REG(0x90) -#define MSM_GPIO_INT_CLEAR_1 MSM_GPIO2_REG(0x68) -#define MSM_GPIO_INT_CLEAR_2 MSM_GPIO1_REG(0x94) -#define MSM_GPIO_INT_CLEAR_3 MSM_GPIO1_REG(0x98) -#define MSM_GPIO_INT_CLEAR_4 MSM_GPIO1_REG(0x9C) -#define MSM_GPIO_INT_CLEAR_5 MSM_GPIO1_REG(0xB4) -#define MSM_GPIO_INT_CLEAR_6 MSM_GPIO1_REG(0xDC) -#define MSM_GPIO_INT_CLEAR_7 MSM_GPIO1_REG(0x230) - -/* same pin map as above, 1=interrupt pending */ -#define MSM_GPIO_INT_STATUS_0 MSM_GPIO1_REG(0xA0) -#define MSM_GPIO_INT_STATUS_1 MSM_GPIO2_REG(0x70) -#define MSM_GPIO_INT_STATUS_2 MSM_GPIO1_REG(0xA4) -#define MSM_GPIO_INT_STATUS_3 MSM_GPIO1_REG(0xA8) -#define MSM_GPIO_INT_STATUS_4 MSM_GPIO1_REG(0xAC) -#define MSM_GPIO_INT_STATUS_5 MSM_GPIO1_REG(0xB0) -#define MSM_GPIO_INT_STATUS_6 MSM_GPIO1_REG(0xE0) -#define MSM_GPIO_INT_STATUS_7 MSM_GPIO1_REG(0x234) - -#endif - -#endif diff --git a/trunk/arch/arm/mach-msm/gpiomux.h b/trunk/arch/arm/mach-msm/gpiomux.h index b178d9cb742f..00459f6ee13c 100644 --- a/trunk/arch/arm/mach-msm/gpiomux.h +++ b/trunk/arch/arm/mach-msm/gpiomux.h @@ -19,6 +19,7 @@ #include #include +#include #if defined(CONFIG_MSM_V2_TLMM) #include "gpiomux-v2.h" @@ -71,12 +72,6 @@ enum { */ extern struct msm_gpiomux_config msm_gpiomux_configs[GPIOMUX_NGPIOS]; -/* Increment a gpio's reference count, possibly activating the line. */ -int __must_check msm_gpiomux_get(unsigned gpio); - -/* Decrement a gpio's reference count, possibly suspending the line. */ -int msm_gpiomux_put(unsigned gpio); - /* Install a new configuration to the gpio line. To avoid overwriting * a configuration, leave the VALID bit out. */ @@ -94,16 +89,6 @@ int msm_gpiomux_write(unsigned gpio, */ void __msm_gpiomux_write(unsigned gpio, gpiomux_config_t val); #else -static inline int __must_check msm_gpiomux_get(unsigned gpio) -{ - return -ENOSYS; -} - -static inline int msm_gpiomux_put(unsigned gpio) -{ - return -ENOSYS; -} - static inline int msm_gpiomux_write(unsigned gpio, gpiomux_config_t active, gpiomux_config_t suspended) diff --git a/trunk/arch/arm/mach-msm/include/mach/msm_gpiomux.h b/trunk/arch/arm/mach-msm/include/mach/msm_gpiomux.h new file mode 100644 index 000000000000..0c7d3936e02f --- /dev/null +++ b/trunk/arch/arm/mach-msm/include/mach/msm_gpiomux.h @@ -0,0 +1,38 @@ +/* Copyright (c) 2011, Code Aurora Forum. All rights reserved. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 and + * only version 2 as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + */ + +#ifndef _LINUX_MSM_GPIOMUX_H +#define _LINUX_MSM_GPIOMUX_H + +#ifdef CONFIG_MSM_GPIOMUX + +/* Increment a gpio's reference count, possibly activating the line. */ +int __must_check msm_gpiomux_get(unsigned gpio); + +/* Decrement a gpio's reference count, possibly suspending the line. */ +int msm_gpiomux_put(unsigned gpio); + +#else + +static inline int __must_check msm_gpiomux_get(unsigned gpio) +{ + return -ENOSYS; +} + +static inline int msm_gpiomux_put(unsigned gpio) +{ + return -ENOSYS; +} + +#endif + +#endif /* _LINUX_MSM_GPIOMUX_H */ diff --git a/trunk/arch/arm/mach-msm/include/mach/msm_iomap-7x00.h b/trunk/arch/arm/mach-msm/include/mach/msm_iomap-7x00.h index 8f99d97615a0..94fe9fe6feb3 100644 --- a/trunk/arch/arm/mach-msm/include/mach/msm_iomap-7x00.h +++ b/trunk/arch/arm/mach-msm/include/mach/msm_iomap-7x00.h @@ -55,13 +55,11 @@ #define MSM_DMOV_PHYS 0xA9700000 #define MSM_DMOV_SIZE SZ_4K -#define MSM_GPIO1_BASE IOMEM(0xE0003000) -#define MSM_GPIO1_PHYS 0xA9200000 -#define MSM_GPIO1_SIZE SZ_4K +#define MSM7X00_GPIO1_PHYS 0xA9200000 +#define MSM7X00_GPIO1_SIZE SZ_4K -#define MSM_GPIO2_BASE IOMEM(0xE0004000) -#define MSM_GPIO2_PHYS 0xA9300000 -#define MSM_GPIO2_SIZE SZ_4K +#define MSM7X00_GPIO2_PHYS 0xA9300000 +#define MSM7X00_GPIO2_SIZE SZ_4K #define MSM_CLK_CTL_BASE IOMEM(0xE0005000) #define MSM_CLK_CTL_PHYS 0xA8600000 diff --git a/trunk/arch/arm/mach-msm/include/mach/msm_iomap-7x30.h b/trunk/arch/arm/mach-msm/include/mach/msm_iomap-7x30.h index 4d84be15955e..37694442d1bd 100644 --- a/trunk/arch/arm/mach-msm/include/mach/msm_iomap-7x30.h +++ b/trunk/arch/arm/mach-msm/include/mach/msm_iomap-7x30.h @@ -46,13 +46,11 @@ #define MSM_DMOV_PHYS 0xAC400000 #define MSM_DMOV_SIZE SZ_4K -#define MSM_GPIO1_BASE IOMEM(0xE0003000) -#define MSM_GPIO1_PHYS 0xAC001000 -#define MSM_GPIO1_SIZE SZ_4K +#define MSM7X30_GPIO1_PHYS 0xAC001000 +#define MSM7X30_GPIO1_SIZE SZ_4K -#define MSM_GPIO2_BASE IOMEM(0xE0004000) -#define MSM_GPIO2_PHYS 0xAC101000 -#define MSM_GPIO2_SIZE SZ_4K +#define MSM7X30_GPIO2_PHYS 0xAC101000 +#define MSM7X30_GPIO2_SIZE SZ_4K #define MSM_CLK_CTL_BASE IOMEM(0xE0005000) #define MSM_CLK_CTL_PHYS 0xAB800000 diff --git a/trunk/arch/arm/mach-msm/include/mach/msm_iomap-8x50.h b/trunk/arch/arm/mach-msm/include/mach/msm_iomap-8x50.h index d4143201999f..d67cd73316f4 100644 --- a/trunk/arch/arm/mach-msm/include/mach/msm_iomap-8x50.h +++ b/trunk/arch/arm/mach-msm/include/mach/msm_iomap-8x50.h @@ -46,13 +46,11 @@ #define MSM_DMOV_PHYS 0xA9700000 #define MSM_DMOV_SIZE SZ_4K -#define MSM_GPIO1_BASE IOMEM(0xE0003000) -#define MSM_GPIO1_PHYS 0xA9000000 -#define MSM_GPIO1_SIZE SZ_4K +#define QSD8X50_GPIO1_PHYS 0xA9000000 +#define QSD8X50_GPIO1_SIZE SZ_4K -#define MSM_GPIO2_BASE IOMEM(0xE0004000) -#define MSM_GPIO2_PHYS 0xA9100000 -#define MSM_GPIO2_SIZE SZ_4K +#define QSD8X50_GPIO2_PHYS 0xA9100000 +#define QSD8X50_GPIO2_SIZE SZ_4K #define MSM_CLK_CTL_BASE IOMEM(0xE0005000) #define MSM_CLK_CTL_PHYS 0xA8600000 diff --git a/trunk/arch/arm/mach-msm/include/mach/msm_iomap.h b/trunk/arch/arm/mach-msm/include/mach/msm_iomap.h index 2f494b6a9d0a..4ded15238b60 100644 --- a/trunk/arch/arm/mach-msm/include/mach/msm_iomap.h +++ b/trunk/arch/arm/mach-msm/include/mach/msm_iomap.h @@ -61,5 +61,7 @@ #define MSM_QGIC_CPU_BASE IOMEM(0xF0001000) #define MSM_TMR_BASE IOMEM(0xF0200000) #define MSM_TMR0_BASE IOMEM(0xF0201000) +#define MSM_GPIO1_BASE IOMEM(0xE0003000) +#define MSM_GPIO2_BASE IOMEM(0xE0004000) #endif diff --git a/trunk/arch/arm/mach-msm/io.c b/trunk/arch/arm/mach-msm/io.c index cec6ed1c91d3..140ddbbc3a8a 100644 --- a/trunk/arch/arm/mach-msm/io.c +++ b/trunk/arch/arm/mach-msm/io.c @@ -43,8 +43,8 @@ static struct map_desc msm_io_desc[] __initdata = { MSM_DEVICE(VIC), MSM_CHIP_DEVICE(CSR, MSM7X00), MSM_DEVICE(DMOV), - MSM_DEVICE(GPIO1), - MSM_DEVICE(GPIO2), + MSM_CHIP_DEVICE(GPIO1, MSM7X00), + MSM_CHIP_DEVICE(GPIO2, MSM7X00), MSM_DEVICE(CLK_CTL), #ifdef CONFIG_MSM_DEBUG_UART MSM_DEVICE(DEBUG_UART), @@ -76,8 +76,8 @@ static struct map_desc qsd8x50_io_desc[] __initdata = { MSM_DEVICE(VIC), MSM_CHIP_DEVICE(CSR, QSD8X50), MSM_DEVICE(DMOV), - MSM_DEVICE(GPIO1), - MSM_DEVICE(GPIO2), + MSM_CHIP_DEVICE(GPIO1, QSD8X50), + MSM_CHIP_DEVICE(GPIO2, QSD8X50), MSM_DEVICE(CLK_CTL), MSM_DEVICE(SIRC), MSM_DEVICE(SCPLL), @@ -135,8 +135,8 @@ static struct map_desc msm7x30_io_desc[] __initdata = { MSM_DEVICE(VIC), MSM_CHIP_DEVICE(CSR, MSM7X30), MSM_DEVICE(DMOV), - MSM_DEVICE(GPIO1), - MSM_DEVICE(GPIO2), + MSM_CHIP_DEVICE(GPIO1, MSM7X30), + MSM_CHIP_DEVICE(GPIO2, MSM7X30), MSM_DEVICE(CLK_CTL), MSM_DEVICE(CLK_CTL_SH2), MSM_DEVICE(AD5), diff --git a/trunk/arch/arm/mach-mv78xx0/pcie.c b/trunk/arch/arm/mach-mv78xx0/pcie.c index d6336afe9948..c51af1cac300 100644 --- a/trunk/arch/arm/mach-mv78xx0/pcie.c +++ b/trunk/arch/arm/mach-mv78xx0/pcie.c @@ -260,7 +260,8 @@ mv78xx0_pcie_scan_bus(int nr, struct pci_sys_data *sys) return bus; } -static int __init mv78xx0_pcie_map_irq(struct pci_dev *dev, u8 slot, u8 pin) +static int __init mv78xx0_pcie_map_irq(const struct pci_dev *dev, u8 slot, + u8 pin) { struct pcie_port *pp = bus_to_port(dev->bus->number); diff --git a/trunk/arch/arm/mach-mx5/board-mx51_babbage.c b/trunk/arch/arm/mach-mx5/board-mx51_babbage.c index 15c600026aee..e400b09109ce 100644 --- a/trunk/arch/arm/mach-mx5/board-mx51_babbage.c +++ b/trunk/arch/arm/mach-mx5/board-mx51_babbage.c @@ -41,8 +41,6 @@ #define BABBAGE_POWER_KEY IMX_GPIO_NR(2, 21) #define BABBAGE_ECSPI1_CS0 IMX_GPIO_NR(4, 24) #define BABBAGE_ECSPI1_CS1 IMX_GPIO_NR(4, 25) -#define BABBAGE_SD1_CD IMX_GPIO_NR(1, 0) -#define BABBAGE_SD1_WP IMX_GPIO_NR(1, 1) #define BABBAGE_SD2_CD IMX_GPIO_NR(1, 6) #define BABBAGE_SD2_WP IMX_GPIO_NR(1, 5) @@ -146,8 +144,9 @@ static iomux_v3_cfg_t mx51babbage_pads[] = { MX51_PAD_SD1_DATA1__SD1_DATA1, MX51_PAD_SD1_DATA2__SD1_DATA2, MX51_PAD_SD1_DATA3__SD1_DATA3, - MX51_PAD_GPIO1_0__GPIO1_0, - MX51_PAD_GPIO1_1__GPIO1_1, + /* CD/WP from controller */ + MX51_PAD_GPIO1_0__SD1_CD, + MX51_PAD_GPIO1_1__SD1_WP, /* SD 2 */ MX51_PAD_SD2_CMD__SD2_CMD, @@ -156,6 +155,7 @@ static iomux_v3_cfg_t mx51babbage_pads[] = { MX51_PAD_SD2_DATA1__SD2_DATA1, MX51_PAD_SD2_DATA2__SD2_DATA2, MX51_PAD_SD2_DATA3__SD2_DATA3, + /* CD/WP gpio */ MX51_PAD_GPIO1_6__GPIO1_6, MX51_PAD_GPIO1_5__GPIO1_5, @@ -340,13 +340,15 @@ static const struct spi_imx_master mx51_babbage_spi_pdata __initconst = { }; static const struct esdhc_platform_data mx51_babbage_sd1_data __initconst = { - .cd_gpio = BABBAGE_SD1_CD, - .wp_gpio = BABBAGE_SD1_WP, + .cd_type = ESDHC_CD_CONTROLLER, + .wp_type = ESDHC_WP_CONTROLLER, }; static const struct esdhc_platform_data mx51_babbage_sd2_data __initconst = { .cd_gpio = BABBAGE_SD2_CD, .wp_gpio = BABBAGE_SD2_WP, + .cd_type = ESDHC_CD_GPIO, + .wp_type = ESDHC_WP_GPIO, }; /* diff --git a/trunk/arch/arm/mach-mx5/board-mx53_loco.c b/trunk/arch/arm/mach-mx5/board-mx53_loco.c index 54be525e2bd7..4e1d51d252dc 100644 --- a/trunk/arch/arm/mach-mx5/board-mx53_loco.c +++ b/trunk/arch/arm/mach-mx5/board-mx53_loco.c @@ -210,11 +210,15 @@ static const struct gpio_keys_platform_data loco_button_data __initconst = { static const struct esdhc_platform_data mx53_loco_sd1_data __initconst = { .cd_gpio = LOCO_SD1_CD, + .cd_type = ESDHC_CD_GPIO, + .wp_type = ESDHC_WP_NONE, }; static const struct esdhc_platform_data mx53_loco_sd3_data __initconst = { .cd_gpio = LOCO_SD3_CD, .wp_gpio = LOCO_SD3_WP, + .cd_type = ESDHC_CD_GPIO, + .wp_type = ESDHC_WP_GPIO, }; static inline void mx53_loco_fec_reset(void) diff --git a/trunk/arch/arm/mach-mx5/clock-mx51-mx53.c b/trunk/arch/arm/mach-mx5/clock-mx51-mx53.c index 23cd809fa8b8..7f20308c4dbd 100644 --- a/trunk/arch/arm/mach-mx5/clock-mx51-mx53.c +++ b/trunk/arch/arm/mach-mx5/clock-mx51-mx53.c @@ -1422,11 +1422,13 @@ DEFINE_CLOCK(ipu_di1_clk, 0, MXC_CCM_CCGR6, MXC_CCM_CCGRx_CG6_OFFSET, }, static struct clk_lookup mx51_lookups[] = { - _REGISTER_CLOCK("imx-uart.0", NULL, uart1_clk) - _REGISTER_CLOCK("imx-uart.1", NULL, uart2_clk) - _REGISTER_CLOCK("imx-uart.2", NULL, uart3_clk) + /* i.mx51 has the i.mx21 type uart */ + _REGISTER_CLOCK("imx21-uart.0", NULL, uart1_clk) + _REGISTER_CLOCK("imx21-uart.1", NULL, uart2_clk) + _REGISTER_CLOCK("imx21-uart.2", NULL, uart3_clk) _REGISTER_CLOCK(NULL, "gpt", gpt_clk) - _REGISTER_CLOCK("fec.0", NULL, fec_clk) + /* i.mx51 has the i.mx27 type fec */ + _REGISTER_CLOCK("imx27-fec.0", NULL, fec_clk) _REGISTER_CLOCK("mxc_pwm.0", "pwm", pwm1_clk) _REGISTER_CLOCK("mxc_pwm.1", "pwm", pwm2_clk) _REGISTER_CLOCK("imx-i2c.0", NULL, i2c1_clk) @@ -1446,7 +1448,8 @@ static struct clk_lookup mx51_lookups[] = { _REGISTER_CLOCK("imx-ssi.0", NULL, ssi1_clk) _REGISTER_CLOCK("imx-ssi.1", NULL, ssi2_clk) _REGISTER_CLOCK("imx-ssi.2", NULL, ssi3_clk) - _REGISTER_CLOCK("imx-sdma", NULL, sdma_clk) + /* i.mx51 has the i.mx35 type sdma */ + _REGISTER_CLOCK("imx35-sdma", NULL, sdma_clk) _REGISTER_CLOCK(NULL, "ckih", ckih_clk) _REGISTER_CLOCK(NULL, "ckih2", ckih2_clk) _REGISTER_CLOCK(NULL, "gpt_32k", gpt_32k_clk) @@ -1454,10 +1457,10 @@ static struct clk_lookup mx51_lookups[] = { _REGISTER_CLOCK("imx51-ecspi.1", NULL, ecspi2_clk) /* i.mx51 has the i.mx35 type cspi */ _REGISTER_CLOCK("imx35-cspi.0", NULL, cspi_clk) - _REGISTER_CLOCK("sdhci-esdhc-imx.0", NULL, esdhc1_clk) - _REGISTER_CLOCK("sdhci-esdhc-imx.1", NULL, esdhc2_clk) - _REGISTER_CLOCK("sdhci-esdhc-imx.2", NULL, esdhc3_clk) - _REGISTER_CLOCK("sdhci-esdhc-imx.3", NULL, esdhc4_clk) + _REGISTER_CLOCK("sdhci-esdhc-imx51.0", NULL, esdhc1_clk) + _REGISTER_CLOCK("sdhci-esdhc-imx51.1", NULL, esdhc2_clk) + _REGISTER_CLOCK("sdhci-esdhc-imx51.2", NULL, esdhc3_clk) + _REGISTER_CLOCK("sdhci-esdhc-imx51.3", NULL, esdhc4_clk) _REGISTER_CLOCK(NULL, "cpu_clk", cpu_clk) _REGISTER_CLOCK(NULL, "iim_clk", iim_clk) _REGISTER_CLOCK("imx2-wdt.0", NULL, dummy_clk) @@ -1470,29 +1473,32 @@ static struct clk_lookup mx51_lookups[] = { }; static struct clk_lookup mx53_lookups[] = { - _REGISTER_CLOCK("imx-uart.0", NULL, uart1_clk) - _REGISTER_CLOCK("imx-uart.1", NULL, uart2_clk) - _REGISTER_CLOCK("imx-uart.2", NULL, uart3_clk) - _REGISTER_CLOCK("imx-uart.3", NULL, uart4_clk) - _REGISTER_CLOCK("imx-uart.4", NULL, uart5_clk) + /* i.mx53 has the i.mx21 type uart */ + _REGISTER_CLOCK("imx21-uart.0", NULL, uart1_clk) + _REGISTER_CLOCK("imx21-uart.1", NULL, uart2_clk) + _REGISTER_CLOCK("imx21-uart.2", NULL, uart3_clk) + _REGISTER_CLOCK("imx21-uart.3", NULL, uart4_clk) + _REGISTER_CLOCK("imx21-uart.4", NULL, uart5_clk) _REGISTER_CLOCK(NULL, "gpt", gpt_clk) - _REGISTER_CLOCK("fec.0", NULL, fec_clk) + /* i.mx53 has the i.mx25 type fec */ + _REGISTER_CLOCK("imx25-fec.0", NULL, fec_clk) _REGISTER_CLOCK(NULL, "iim_clk", iim_clk) _REGISTER_CLOCK("imx-i2c.0", NULL, i2c1_clk) _REGISTER_CLOCK("imx-i2c.1", NULL, i2c2_clk) _REGISTER_CLOCK("imx-i2c.2", NULL, i2c3_mx53_clk) - _REGISTER_CLOCK("sdhci-esdhc-imx.0", NULL, esdhc1_clk) - _REGISTER_CLOCK("sdhci-esdhc-imx.1", NULL, esdhc2_mx53_clk) - _REGISTER_CLOCK("sdhci-esdhc-imx.2", NULL, esdhc3_mx53_clk) - _REGISTER_CLOCK("sdhci-esdhc-imx.3", NULL, esdhc4_mx53_clk) /* i.mx53 has the i.mx51 type ecspi */ _REGISTER_CLOCK("imx51-ecspi.0", NULL, ecspi1_clk) _REGISTER_CLOCK("imx51-ecspi.1", NULL, ecspi2_clk) /* i.mx53 has the i.mx25 type cspi */ _REGISTER_CLOCK("imx35-cspi.0", NULL, cspi_clk) + _REGISTER_CLOCK("sdhci-esdhc-imx53.0", NULL, esdhc1_clk) + _REGISTER_CLOCK("sdhci-esdhc-imx53.1", NULL, esdhc2_mx53_clk) + _REGISTER_CLOCK("sdhci-esdhc-imx53.2", NULL, esdhc3_mx53_clk) + _REGISTER_CLOCK("sdhci-esdhc-imx53.3", NULL, esdhc4_mx53_clk) _REGISTER_CLOCK("imx2-wdt.0", NULL, dummy_clk) _REGISTER_CLOCK("imx2-wdt.1", NULL, dummy_clk) - _REGISTER_CLOCK("imx-sdma", NULL, sdma_clk) + /* i.mx53 has the i.mx35 type sdma */ + _REGISTER_CLOCK("imx35-sdma", NULL, sdma_clk) _REGISTER_CLOCK("imx-ssi.0", NULL, ssi1_clk) _REGISTER_CLOCK("imx-ssi.1", NULL, ssi2_clk) _REGISTER_CLOCK("imx-ssi.2", NULL, ssi3_clk) diff --git a/trunk/arch/arm/mach-mx5/mm.c b/trunk/arch/arm/mach-mx5/mm.c index ef8aec9319b6..baea6e5cddd9 100644 --- a/trunk/arch/arm/mach-mx5/mm.c +++ b/trunk/arch/arm/mach-mx5/mm.c @@ -115,7 +115,6 @@ static struct sdma_script_start_addrs imx51_sdma_script __initdata = { }; static struct sdma_platform_data imx51_sdma_pdata __initdata = { - .sdma_version = 2, .fw_name = "sdma-imx51.bin", .script_addrs = &imx51_sdma_script, }; @@ -135,7 +134,6 @@ static struct sdma_script_start_addrs imx53_sdma_script __initdata = { }; static struct sdma_platform_data imx53_sdma_pdata __initdata = { - .sdma_version = 2, .fw_name = "sdma-imx53.bin", .script_addrs = &imx53_sdma_script, }; @@ -148,7 +146,8 @@ void __init imx51_soc_init(void) mxc_register_gpio("imx31-gpio", 2, MX51_GPIO3_BASE_ADDR, SZ_16K, MX51_MXC_INT_GPIO3_LOW, MX51_MXC_INT_GPIO3_HIGH); mxc_register_gpio("imx31-gpio", 3, MX51_GPIO4_BASE_ADDR, SZ_16K, MX51_MXC_INT_GPIO4_LOW, MX51_MXC_INT_GPIO4_HIGH); - imx_add_imx_sdma(MX51_SDMA_BASE_ADDR, MX51_INT_SDMA, &imx51_sdma_pdata); + /* i.mx51 has the i.mx35 type sdma */ + imx_add_imx_sdma("imx35-sdma", MX51_SDMA_BASE_ADDR, MX51_INT_SDMA, &imx51_sdma_pdata); } void __init imx53_soc_init(void) @@ -162,5 +161,6 @@ void __init imx53_soc_init(void) mxc_register_gpio("imx31-gpio", 5, MX53_GPIO6_BASE_ADDR, SZ_16K, MX53_INT_GPIO6_LOW, MX53_INT_GPIO6_HIGH); mxc_register_gpio("imx31-gpio", 6, MX53_GPIO7_BASE_ADDR, SZ_16K, MX53_INT_GPIO7_LOW, MX53_INT_GPIO7_HIGH); - imx_add_imx_sdma(MX53_SDMA_BASE_ADDR, MX53_INT_SDMA, &imx53_sdma_pdata); + /* i.mx53 has the i.mx35 type sdma */ + imx_add_imx_sdma("imx35-sdma", MX53_SDMA_BASE_ADDR, MX53_INT_SDMA, &imx53_sdma_pdata); } diff --git a/trunk/arch/arm/mach-mx5/mx51_efika.c b/trunk/arch/arm/mach-mx5/mx51_efika.c index 56739c23aca7..4435e03cea5d 100644 --- a/trunk/arch/arm/mach-mx5/mx51_efika.c +++ b/trunk/arch/arm/mach-mx5/mx51_efika.c @@ -260,8 +260,8 @@ static struct regulator_consumer_supply vvideo_consumers[] = { }; static struct regulator_consumer_supply vsd_consumers[] = { - REGULATOR_SUPPLY("vmmc", "sdhci-esdhc-imx.0"), - REGULATOR_SUPPLY("vmmc", "sdhci-esdhc-imx.1"), + REGULATOR_SUPPLY("vmmc", "sdhci-esdhc-imx51.0"), + REGULATOR_SUPPLY("vmmc", "sdhci-esdhc-imx51.1"), }; static struct regulator_consumer_supply pwgt1_consumer[] = { diff --git a/trunk/arch/arm/mach-omap2/board-rx51-peripherals.c b/trunk/arch/arm/mach-omap2/board-rx51-peripherals.c index cc503aa89c5e..5a886cd2c598 100644 --- a/trunk/arch/arm/mach-omap2/board-rx51-peripherals.c +++ b/trunk/arch/arm/mach-omap2/board-rx51-peripherals.c @@ -418,6 +418,10 @@ static struct regulator_consumer_supply rx51_vmmc1_supply[] = { REGULATOR_SUPPLY("vmmc", "omap_hsmmc.0"), }; +static struct regulator_consumer_supply rx51_vaux2_supply[] = { + REGULATOR_SUPPLY("vdds_csib", "omap3isp"), +}; + static struct regulator_consumer_supply rx51_vaux3_supply[] = { REGULATOR_SUPPLY("vmmc", "omap_hsmmc.1"), }; @@ -479,6 +483,8 @@ static struct regulator_init_data rx51_vaux2 = { .valid_ops_mask = REGULATOR_CHANGE_MODE | REGULATOR_CHANGE_STATUS, }, + .num_consumer_supplies = ARRAY_SIZE(rx51_vaux2_supply), + .consumer_supplies = rx51_vaux2_supply, }; /* VAUX3 - adds more power to VIO_18 rail */ diff --git a/trunk/arch/arm/mach-omap2/display.c b/trunk/arch/arm/mach-omap2/display.c index 543fcb8b518c..a5b7a236aa5b 100644 --- a/trunk/arch/arm/mach-omap2/display.c +++ b/trunk/arch/arm/mach-omap2/display.c @@ -25,6 +25,7 @@ #include