diff options
author | Takashi Iwai <tiwai@suse.de> | 2010-08-18 09:17:52 -0400 |
---|---|---|
committer | Takashi Iwai <tiwai@suse.de> | 2010-08-18 09:17:52 -0400 |
commit | e7cfbea9cb7a02ea29fdae5d39c9e3d09102c4d5 (patch) | |
tree | 37c20ec03e70dc7b5df1d02f16b6ac38d8ed1364 /Documentation | |
parent | 7ac03db84baa204d7d280401ed65842541ed1078 (diff) | |
parent | 56385a12d9bb9e173751f74b6c430742018cafc0 (diff) |
Merge branch 'fix/misc' into topic/misc
Diffstat (limited to 'Documentation')
38 files changed, 1539 insertions, 550 deletions
diff --git a/Documentation/00-INDEX b/Documentation/00-INDEX index 5405f7aecefc..8dfc6708a257 100644 --- a/Documentation/00-INDEX +++ b/Documentation/00-INDEX | |||
@@ -130,8 +130,6 @@ edac.txt | |||
130 | - information on EDAC - Error Detection And Correction | 130 | - information on EDAC - Error Detection And Correction |
131 | eisa.txt | 131 | eisa.txt |
132 | - info on EISA bus support. | 132 | - info on EISA bus support. |
133 | exception.txt | ||
134 | - how Linux v2.2 handles exceptions without verify_area etc. | ||
135 | fault-injection/ | 133 | fault-injection/ |
136 | - dir with docs about the fault injection capabilities infrastructure. | 134 | - dir with docs about the fault injection capabilities infrastructure. |
137 | fb/ | 135 | fb/ |
@@ -234,6 +232,8 @@ memory.txt | |||
234 | - info on typical Linux memory problems. | 232 | - info on typical Linux memory problems. |
235 | mips/ | 233 | mips/ |
236 | - directory with info about Linux on MIPS architecture. | 234 | - directory with info about Linux on MIPS architecture. |
235 | mmc/ | ||
236 | - directory with info about the MMC subsystem | ||
237 | mono.txt | 237 | mono.txt |
238 | - how to execute Mono-based .NET binaries with the help of BINFMT_MISC. | 238 | - how to execute Mono-based .NET binaries with the help of BINFMT_MISC. |
239 | mutex-design.txt | 239 | mutex-design.txt |
diff --git a/Documentation/ABI/testing/sysfs-devices-platform-_UDC_-gadget b/Documentation/ABI/testing/sysfs-devices-platform-_UDC_-gadget index 34034027b13c..d548eaac230a 100644 --- a/Documentation/ABI/testing/sysfs-devices-platform-_UDC_-gadget +++ b/Documentation/ABI/testing/sysfs-devices-platform-_UDC_-gadget | |||
@@ -7,3 +7,15 @@ Description: | |||
7 | 0 -> resumed | 7 | 0 -> resumed |
8 | 8 | ||
9 | (_UDC_ is the name of the USB Device Controller driver) | 9 | (_UDC_ is the name of the USB Device Controller driver) |
10 | |||
11 | What: /sys/devices/platform/_UDC_/gadget/gadget-lunX/nofua | ||
12 | Date: July 2010 | ||
13 | Contact: Andy Shevchenko <andy.shevchenko@gmail.com> | ||
14 | Description: | ||
15 | Show or set the reaction on the FUA (Force Unit Access) bit in | ||
16 | the SCSI WRITE(10,12) commands when a gadget in USB Mass | ||
17 | Storage mode. | ||
18 | |||
19 | Possible values are: | ||
20 | 1 -> ignore the FUA flag | ||
21 | 0 -> obey the FUA flag | ||
diff --git a/Documentation/DMA-API-HOWTO.txt b/Documentation/DMA-API-HOWTO.txt index 98ce51796f71..d568bc235bc0 100644 --- a/Documentation/DMA-API-HOWTO.txt +++ b/Documentation/DMA-API-HOWTO.txt | |||
@@ -738,21 +738,31 @@ to "Closing". | |||
738 | CONFIG_NEED_SG_DMA_LENGTH if the architecture supports IOMMUs | 738 | CONFIG_NEED_SG_DMA_LENGTH if the architecture supports IOMMUs |
739 | (including software IOMMU). | 739 | (including software IOMMU). |
740 | 740 | ||
741 | 2) ARCH_KMALLOC_MINALIGN | 741 | 2) ARCH_DMA_MINALIGN |
742 | 742 | ||
743 | Architectures must ensure that kmalloc'ed buffer is | 743 | Architectures must ensure that kmalloc'ed buffer is |
744 | DMA-safe. Drivers and subsystems depend on it. If an architecture | 744 | DMA-safe. Drivers and subsystems depend on it. If an architecture |
745 | isn't fully DMA-coherent (i.e. hardware doesn't ensure that data in | 745 | isn't fully DMA-coherent (i.e. hardware doesn't ensure that data in |
746 | the CPU cache is identical to data in main memory), | 746 | the CPU cache is identical to data in main memory), |
747 | ARCH_KMALLOC_MINALIGN must be set so that the memory allocator | 747 | ARCH_DMA_MINALIGN must be set so that the memory allocator |
748 | makes sure that kmalloc'ed buffer doesn't share a cache line with | 748 | makes sure that kmalloc'ed buffer doesn't share a cache line with |
749 | the others. See arch/arm/include/asm/cache.h as an example. | 749 | the others. See arch/arm/include/asm/cache.h as an example. |
750 | 750 | ||
751 | Note that ARCH_KMALLOC_MINALIGN is about DMA memory alignment | 751 | Note that ARCH_DMA_MINALIGN is about DMA memory alignment |
752 | constraints. You don't need to worry about the architecture data | 752 | constraints. You don't need to worry about the architecture data |
753 | alignment constraints (e.g. the alignment constraints about 64-bit | 753 | alignment constraints (e.g. the alignment constraints about 64-bit |
754 | objects). | 754 | objects). |
755 | 755 | ||
756 | 3) Supporting multiple types of IOMMUs | ||
757 | |||
758 | If your architecture needs to support multiple types of IOMMUs, you | ||
759 | can use include/linux/asm-generic/dma-mapping-common.h. It's a | ||
760 | library to support the DMA API with multiple types of IOMMUs. Lots | ||
761 | of architectures (x86, powerpc, sh, alpha, ia64, microblaze and | ||
762 | sparc) use it. Choose one to see how it can be used. If you need to | ||
763 | support multiple types of IOMMUs in a single system, the example of | ||
764 | x86 or powerpc helps. | ||
765 | |||
756 | Closing | 766 | Closing |
757 | 767 | ||
758 | This document, and the API itself, would not be in its current | 768 | This document, and the API itself, would not be in its current |
diff --git a/Documentation/DMA-API.txt b/Documentation/DMA-API.txt index 05e2ae236865..fe2326906610 100644 --- a/Documentation/DMA-API.txt +++ b/Documentation/DMA-API.txt | |||
@@ -456,12 +456,6 @@ be identical to those passed in (and returned by | |||
456 | dma_alloc_noncoherent()). | 456 | dma_alloc_noncoherent()). |
457 | 457 | ||
458 | int | 458 | int |
459 | dma_is_consistent(struct device *dev, dma_addr_t dma_handle) | ||
460 | |||
461 | Returns true if the device dev is performing consistent DMA on the memory | ||
462 | area pointed to by the dma_handle. | ||
463 | |||
464 | int | ||
465 | dma_get_cache_alignment(void) | 459 | dma_get_cache_alignment(void) |
466 | 460 | ||
467 | Returns the processor cache alignment. This is the absolute minimum | 461 | Returns the processor cache alignment. This is the absolute minimum |
diff --git a/Documentation/DocBook/Makefile b/Documentation/DocBook/Makefile index c7e5dc7e8cb3..34929f24c284 100644 --- a/Documentation/DocBook/Makefile +++ b/Documentation/DocBook/Makefile | |||
@@ -35,7 +35,7 @@ PS_METHOD = $(prefer-db2x) | |||
35 | PHONY += xmldocs sgmldocs psdocs pdfdocs htmldocs mandocs installmandocs cleandocs xmldoclinks | 35 | PHONY += xmldocs sgmldocs psdocs pdfdocs htmldocs mandocs installmandocs cleandocs xmldoclinks |
36 | 36 | ||
37 | BOOKS := $(addprefix $(obj)/,$(DOCBOOKS)) | 37 | BOOKS := $(addprefix $(obj)/,$(DOCBOOKS)) |
38 | xmldocs: $(BOOKS) xmldoclinks | 38 | xmldocs: $(BOOKS) |
39 | sgmldocs: xmldocs | 39 | sgmldocs: xmldocs |
40 | 40 | ||
41 | PS := $(patsubst %.xml, %.ps, $(BOOKS)) | 41 | PS := $(patsubst %.xml, %.ps, $(BOOKS)) |
@@ -45,7 +45,7 @@ PDF := $(patsubst %.xml, %.pdf, $(BOOKS)) | |||
45 | pdfdocs: $(PDF) | 45 | pdfdocs: $(PDF) |
46 | 46 | ||
47 | HTML := $(sort $(patsubst %.xml, %.html, $(BOOKS))) | 47 | HTML := $(sort $(patsubst %.xml, %.html, $(BOOKS))) |
48 | htmldocs: $(HTML) | 48 | htmldocs: $(HTML) xmldoclinks |
49 | $(call build_main_index) | 49 | $(call build_main_index) |
50 | $(call build_images) | 50 | $(call build_images) |
51 | 51 | ||
@@ -95,7 +95,7 @@ define rule_docproc | |||
95 | ) > $(dir $@).$(notdir $@).cmd | 95 | ) > $(dir $@).$(notdir $@).cmd |
96 | endef | 96 | endef |
97 | 97 | ||
98 | %.xml: %.tmpl FORCE | 98 | %.xml: %.tmpl xmldoclinks FORCE |
99 | $(call if_changed_rule,docproc) | 99 | $(call if_changed_rule,docproc) |
100 | 100 | ||
101 | ### | 101 | ### |
diff --git a/Documentation/DocBook/kernel-api.tmpl b/Documentation/DocBook/kernel-api.tmpl index 44b3def961a2..a20c6f6fffc3 100644 --- a/Documentation/DocBook/kernel-api.tmpl +++ b/Documentation/DocBook/kernel-api.tmpl | |||
@@ -132,7 +132,6 @@ X!Ilib/string.c | |||
132 | <title>FIFO Buffer</title> | 132 | <title>FIFO Buffer</title> |
133 | <sect1><title>kfifo interface</title> | 133 | <sect1><title>kfifo interface</title> |
134 | !Iinclude/linux/kfifo.h | 134 | !Iinclude/linux/kfifo.h |
135 | !Ekernel/kfifo.c | ||
136 | </sect1> | 135 | </sect1> |
137 | </chapter> | 136 | </chapter> |
138 | 137 | ||
diff --git a/Documentation/DocBook/v4l/lirc_device_interface.xml b/Documentation/DocBook/v4l/lirc_device_interface.xml index 0413234023d4..68134c0ab4d1 100644 --- a/Documentation/DocBook/v4l/lirc_device_interface.xml +++ b/Documentation/DocBook/v4l/lirc_device_interface.xml | |||
@@ -229,6 +229,22 @@ on working with the default settings initially.</para> | |||
229 | and LIRC_SETUP_END. Drivers can also choose to ignore these ioctls.</para> | 229 | and LIRC_SETUP_END. Drivers can also choose to ignore these ioctls.</para> |
230 | </listitem> | 230 | </listitem> |
231 | </varlistentry> | 231 | </varlistentry> |
232 | <varlistentry> | ||
233 | <term>LIRC_SET_WIDEBAND_RECEIVER</term> | ||
234 | <listitem> | ||
235 | <para>Some receivers are equipped with special wide band receiver which is intended | ||
236 | to be used to learn output of existing remote. | ||
237 | Calling that ioctl with (1) will enable it, and with (0) disable it. | ||
238 | This might be useful of receivers that have otherwise narrow band receiver | ||
239 | that prevents them to be used with some remotes. | ||
240 | Wide band receiver might also be more precise | ||
241 | On the other hand its disadvantage it usually reduced range of reception. | ||
242 | Note: wide band receiver might be implictly enabled if you enable | ||
243 | carrier reports. In that case it will be disabled as soon as you disable | ||
244 | carrier reports. Trying to disable wide band receiver while carrier | ||
245 | reports are active will do nothing.</para> | ||
246 | </listitem> | ||
247 | </varlistentry> | ||
232 | </variablelist> | 248 | </variablelist> |
233 | 249 | ||
234 | </section> | 250 | </section> |
diff --git a/Documentation/DocBook/v4l/pixfmt-packed-rgb.xml b/Documentation/DocBook/v4l/pixfmt-packed-rgb.xml index d2dd697a81d8..26e879231088 100644 --- a/Documentation/DocBook/v4l/pixfmt-packed-rgb.xml +++ b/Documentation/DocBook/v4l/pixfmt-packed-rgb.xml | |||
@@ -240,6 +240,45 @@ colorspace <constant>V4L2_COLORSPACE_SRGB</constant>.</para> | |||
240 | <entry>r<subscript>1</subscript></entry> | 240 | <entry>r<subscript>1</subscript></entry> |
241 | <entry>r<subscript>0</subscript></entry> | 241 | <entry>r<subscript>0</subscript></entry> |
242 | </row> | 242 | </row> |
243 | <row id="V4L2-PIX-FMT-BGR666"> | ||
244 | <entry><constant>V4L2_PIX_FMT_BGR666</constant></entry> | ||
245 | <entry>'BGRH'</entry> | ||
246 | <entry></entry> | ||
247 | <entry>b<subscript>5</subscript></entry> | ||
248 | <entry>b<subscript>4</subscript></entry> | ||
249 | <entry>b<subscript>3</subscript></entry> | ||
250 | <entry>b<subscript>2</subscript></entry> | ||
251 | <entry>b<subscript>1</subscript></entry> | ||
252 | <entry>b<subscript>0</subscript></entry> | ||
253 | <entry>g<subscript>5</subscript></entry> | ||
254 | <entry>g<subscript>4</subscript></entry> | ||
255 | <entry></entry> | ||
256 | <entry>g<subscript>3</subscript></entry> | ||
257 | <entry>g<subscript>2</subscript></entry> | ||
258 | <entry>g<subscript>1</subscript></entry> | ||
259 | <entry>g<subscript>0</subscript></entry> | ||
260 | <entry>r<subscript>5</subscript></entry> | ||
261 | <entry>r<subscript>4</subscript></entry> | ||
262 | <entry>r<subscript>3</subscript></entry> | ||
263 | <entry>r<subscript>2</subscript></entry> | ||
264 | <entry></entry> | ||
265 | <entry>r<subscript>1</subscript></entry> | ||
266 | <entry>r<subscript>0</subscript></entry> | ||
267 | <entry></entry> | ||
268 | <entry></entry> | ||
269 | <entry></entry> | ||
270 | <entry></entry> | ||
271 | <entry></entry> | ||
272 | <entry></entry> | ||
273 | <entry></entry> | ||
274 | <entry></entry> | ||
275 | <entry></entry> | ||
276 | <entry></entry> | ||
277 | <entry></entry> | ||
278 | <entry></entry> | ||
279 | <entry></entry> | ||
280 | <entry></entry> | ||
281 | </row> | ||
243 | <row id="V4L2-PIX-FMT-BGR24"> | 282 | <row id="V4L2-PIX-FMT-BGR24"> |
244 | <entry><constant>V4L2_PIX_FMT_BGR24</constant></entry> | 283 | <entry><constant>V4L2_PIX_FMT_BGR24</constant></entry> |
245 | <entry>'BGR3'</entry> | 284 | <entry>'BGR3'</entry> |
@@ -700,6 +739,45 @@ defined in error. Drivers may interpret them as in <xref | |||
700 | <entry>b<subscript>1</subscript></entry> | 739 | <entry>b<subscript>1</subscript></entry> |
701 | <entry>b<subscript>0</subscript></entry> | 740 | <entry>b<subscript>0</subscript></entry> |
702 | </row> | 741 | </row> |
742 | <row id="V4L2-PIX-FMT-BGR666"> | ||
743 | <entry><constant>V4L2_PIX_FMT_BGR666</constant></entry> | ||
744 | <entry>'BGRH'</entry> | ||
745 | <entry></entry> | ||
746 | <entry>b<subscript>5</subscript></entry> | ||
747 | <entry>b<subscript>4</subscript></entry> | ||
748 | <entry>b<subscript>3</subscript></entry> | ||
749 | <entry>b<subscript>2</subscript></entry> | ||
750 | <entry>b<subscript>1</subscript></entry> | ||
751 | <entry>b<subscript>0</subscript></entry> | ||
752 | <entry>g<subscript>5</subscript></entry> | ||
753 | <entry>g<subscript>4</subscript></entry> | ||
754 | <entry></entry> | ||
755 | <entry>g<subscript>3</subscript></entry> | ||
756 | <entry>g<subscript>2</subscript></entry> | ||
757 | <entry>g<subscript>1</subscript></entry> | ||
758 | <entry>g<subscript>0</subscript></entry> | ||
759 | <entry>r<subscript>5</subscript></entry> | ||
760 | <entry>r<subscript>4</subscript></entry> | ||
761 | <entry>r<subscript>3</subscript></entry> | ||
762 | <entry>r<subscript>2</subscript></entry> | ||
763 | <entry></entry> | ||
764 | <entry>r<subscript>1</subscript></entry> | ||
765 | <entry>r<subscript>0</subscript></entry> | ||
766 | <entry></entry> | ||
767 | <entry></entry> | ||
768 | <entry></entry> | ||
769 | <entry></entry> | ||
770 | <entry></entry> | ||
771 | <entry></entry> | ||
772 | <entry></entry> | ||
773 | <entry></entry> | ||
774 | <entry></entry> | ||
775 | <entry></entry> | ||
776 | <entry></entry> | ||
777 | <entry></entry> | ||
778 | <entry></entry> | ||
779 | <entry></entry> | ||
780 | </row> | ||
703 | <row><!-- id="V4L2-PIX-FMT-BGR24" --> | 781 | <row><!-- id="V4L2-PIX-FMT-BGR24" --> |
704 | <entry><constant>V4L2_PIX_FMT_BGR24</constant></entry> | 782 | <entry><constant>V4L2_PIX_FMT_BGR24</constant></entry> |
705 | <entry>'BGR3'</entry> | 783 | <entry>'BGR3'</entry> |
diff --git a/Documentation/acpi/method-customizing.txt b/Documentation/acpi/method-customizing.txt index e628cd23ca80..3e1d25aee3fb 100644 --- a/Documentation/acpi/method-customizing.txt +++ b/Documentation/acpi/method-customizing.txt | |||
@@ -19,6 +19,8 @@ Note: Only ACPI METHOD can be overridden, any other object types like | |||
19 | "Device", "OperationRegion", are not recognized. | 19 | "Device", "OperationRegion", are not recognized. |
20 | Note: The same ACPI control method can be overridden for many times, | 20 | Note: The same ACPI control method can be overridden for many times, |
21 | and it's always the latest one that used by Linux/kernel. | 21 | and it's always the latest one that used by Linux/kernel. |
22 | Note: To get the ACPI debug object output (Store (AAAA, Debug)), | ||
23 | please run "echo 1 > /sys/module/acpi/parameters/aml_debug_output". | ||
22 | 24 | ||
23 | 1. override an existing method | 25 | 1. override an existing method |
24 | a) get the ACPI table via ACPI sysfs I/F. e.g. to get the DSDT, | 26 | a) get the ACPI table via ACPI sysfs I/F. e.g. to get the DSDT, |
diff --git a/Documentation/cpu-hotplug.txt b/Documentation/cpu-hotplug.txt index a99d7031cdf9..45d5a217484f 100644 --- a/Documentation/cpu-hotplug.txt +++ b/Documentation/cpu-hotplug.txt | |||
@@ -2,7 +2,7 @@ | |||
2 | 2 | ||
3 | Maintainers: | 3 | Maintainers: |
4 | CPU Hotplug Core: | 4 | CPU Hotplug Core: |
5 | Rusty Russell <rusty@rustycorp.com.au> | 5 | Rusty Russell <rusty@rustcorp.com.au> |
6 | Srivatsa Vaddagiri <vatsa@in.ibm.com> | 6 | Srivatsa Vaddagiri <vatsa@in.ibm.com> |
7 | i386: | 7 | i386: |
8 | Zwane Mwaikambo <zwane@arm.linux.org.uk> | 8 | Zwane Mwaikambo <zwane@arm.linux.org.uk> |
diff --git a/Documentation/devices.txt b/Documentation/devices.txt index f2da781705b2..d0d1df6cb5de 100644 --- a/Documentation/devices.txt +++ b/Documentation/devices.txt | |||
@@ -445,6 +445,7 @@ Your cooperation is appreciated. | |||
445 | 233 = /dev/kmview View-OS A process with a view | 445 | 233 = /dev/kmview View-OS A process with a view |
446 | 234 = /dev/btrfs-control Btrfs control device | 446 | 234 = /dev/btrfs-control Btrfs control device |
447 | 235 = /dev/autofs Autofs control device | 447 | 235 = /dev/autofs Autofs control device |
448 | 236 = /dev/mapper/control Device-Mapper control device | ||
448 | 240-254 Reserved for local use | 449 | 240-254 Reserved for local use |
449 | 255 Reserved for MISC_DYNAMIC_MINOR | 450 | 255 Reserved for MISC_DYNAMIC_MINOR |
450 | 451 | ||
diff --git a/Documentation/feature-removal-schedule.txt b/Documentation/feature-removal-schedule.txt index 56cee4727b1a..842aa9de84a6 100644 --- a/Documentation/feature-removal-schedule.txt +++ b/Documentation/feature-removal-schedule.txt | |||
@@ -360,14 +360,6 @@ When: 2.6.33 | |||
360 | Why: Should be implemented in userspace, policy daemon. | 360 | Why: Should be implemented in userspace, policy daemon. |
361 | Who: Johannes Berg <johannes@sipsolutions.net> | 361 | Who: Johannes Berg <johannes@sipsolutions.net> |
362 | 362 | ||
363 | --------------------------- | ||
364 | |||
365 | What: CONFIG_INOTIFY | ||
366 | When: 2.6.33 | ||
367 | Why: last user (audit) will be converted to the newer more generic | ||
368 | and more easily maintained fsnotify subsystem | ||
369 | Who: Eric Paris <eparis@redhat.com> | ||
370 | |||
371 | ---------------------------- | 363 | ---------------------------- |
372 | 364 | ||
373 | What: sound-slot/service-* module aliases and related clutters in | 365 | What: sound-slot/service-* module aliases and related clutters in |
@@ -555,3 +547,20 @@ Why: superseded by acpi_sleep=nonvs | |||
555 | Who: Rafael J. Wysocki <rjw@sisk.pl> | 547 | Who: Rafael J. Wysocki <rjw@sisk.pl> |
556 | 548 | ||
557 | ---------------------------- | 549 | ---------------------------- |
550 | |||
551 | What: PCI DMA unmap state API | ||
552 | When: August 2012 | ||
553 | Why: PCI DMA unmap state API (include/linux/pci-dma.h) was replaced | ||
554 | with DMA unmap state API (DMA unmap state API can be used for | ||
555 | any bus). | ||
556 | Who: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp> | ||
557 | |||
558 | ---------------------------- | ||
559 | |||
560 | What: DMA_xxBIT_MASK macros | ||
561 | When: Jun 2011 | ||
562 | Why: DMA_xxBIT_MASK macros were replaced with DMA_BIT_MASK() macros. | ||
563 | Who: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp> | ||
564 | |||
565 | ---------------------------- | ||
566 | |||
diff --git a/Documentation/filesystems/Locking b/Documentation/filesystems/Locking index 96d4293607ec..2db4283efa8d 100644 --- a/Documentation/filesystems/Locking +++ b/Documentation/filesystems/Locking | |||
@@ -92,8 +92,8 @@ prototypes: | |||
92 | void (*destroy_inode)(struct inode *); | 92 | void (*destroy_inode)(struct inode *); |
93 | void (*dirty_inode) (struct inode *); | 93 | void (*dirty_inode) (struct inode *); |
94 | int (*write_inode) (struct inode *, int); | 94 | int (*write_inode) (struct inode *, int); |
95 | void (*drop_inode) (struct inode *); | 95 | int (*drop_inode) (struct inode *); |
96 | void (*delete_inode) (struct inode *); | 96 | void (*evict_inode) (struct inode *); |
97 | void (*put_super) (struct super_block *); | 97 | void (*put_super) (struct super_block *); |
98 | void (*write_super) (struct super_block *); | 98 | void (*write_super) (struct super_block *); |
99 | int (*sync_fs)(struct super_block *sb, int wait); | 99 | int (*sync_fs)(struct super_block *sb, int wait); |
@@ -101,14 +101,13 @@ prototypes: | |||
101 | int (*unfreeze_fs) (struct super_block *); | 101 | int (*unfreeze_fs) (struct super_block *); |
102 | int (*statfs) (struct dentry *, struct kstatfs *); | 102 | int (*statfs) (struct dentry *, struct kstatfs *); |
103 | int (*remount_fs) (struct super_block *, int *, char *); | 103 | int (*remount_fs) (struct super_block *, int *, char *); |
104 | void (*clear_inode) (struct inode *); | ||
105 | void (*umount_begin) (struct super_block *); | 104 | void (*umount_begin) (struct super_block *); |
106 | int (*show_options)(struct seq_file *, struct vfsmount *); | 105 | int (*show_options)(struct seq_file *, struct vfsmount *); |
107 | ssize_t (*quota_read)(struct super_block *, int, char *, size_t, loff_t); | 106 | ssize_t (*quota_read)(struct super_block *, int, char *, size_t, loff_t); |
108 | ssize_t (*quota_write)(struct super_block *, int, const char *, size_t, loff_t); | 107 | ssize_t (*quota_write)(struct super_block *, int, const char *, size_t, loff_t); |
109 | 108 | ||
110 | locking rules: | 109 | locking rules: |
111 | All may block. | 110 | All may block [not true, see below] |
112 | None have BKL | 111 | None have BKL |
113 | s_umount | 112 | s_umount |
114 | alloc_inode: | 113 | alloc_inode: |
@@ -116,22 +115,25 @@ destroy_inode: | |||
116 | dirty_inode: (must not sleep) | 115 | dirty_inode: (must not sleep) |
117 | write_inode: | 116 | write_inode: |
118 | drop_inode: !!!inode_lock!!! | 117 | drop_inode: !!!inode_lock!!! |
119 | delete_inode: | 118 | evict_inode: |
120 | put_super: write | 119 | put_super: write |
121 | write_super: read | 120 | write_super: read |
122 | sync_fs: read | 121 | sync_fs: read |
123 | freeze_fs: read | 122 | freeze_fs: read |
124 | unfreeze_fs: read | 123 | unfreeze_fs: read |
125 | statfs: no | 124 | statfs: maybe(read) (see below) |
126 | remount_fs: maybe (see below) | 125 | remount_fs: write |
127 | clear_inode: | ||
128 | umount_begin: no | 126 | umount_begin: no |
129 | show_options: no (namespace_sem) | 127 | show_options: no (namespace_sem) |
130 | quota_read: no (see below) | 128 | quota_read: no (see below) |
131 | quota_write: no (see below) | 129 | quota_write: no (see below) |
132 | 130 | ||
133 | ->remount_fs() will have the s_umount exclusive lock if it's already mounted. | 131 | ->statfs() has s_umount (shared) when called by ustat(2) (native or |
134 | When called from get_sb_single, it does NOT have the s_umount lock. | 132 | compat), but that's an accident of bad API; s_umount is used to pin |
133 | the superblock down when we only have dev_t given us by userland to | ||
134 | identify the superblock. Everything else (statfs(), fstatfs(), etc.) | ||
135 | doesn't hold it when calling ->statfs() - superblock is pinned down | ||
136 | by resolving the pathname passed to syscall. | ||
135 | ->quota_read() and ->quota_write() functions are both guaranteed to | 137 | ->quota_read() and ->quota_write() functions are both guaranteed to |
136 | be the only ones operating on the quota file by the quota code (via | 138 | be the only ones operating on the quota file by the quota code (via |
137 | dqio_sem) (unless an admin really wants to screw up something and | 139 | dqio_sem) (unless an admin really wants to screw up something and |
@@ -372,8 +374,6 @@ prototypes: | |||
372 | ssize_t (*aio_write) (struct kiocb *, const struct iovec *, unsigned long, loff_t); | 374 | ssize_t (*aio_write) (struct kiocb *, const struct iovec *, unsigned long, loff_t); |
373 | int (*readdir) (struct file *, void *, filldir_t); | 375 | int (*readdir) (struct file *, void *, filldir_t); |
374 | unsigned int (*poll) (struct file *, struct poll_table_struct *); | 376 | unsigned int (*poll) (struct file *, struct poll_table_struct *); |
375 | int (*ioctl) (struct inode *, struct file *, unsigned int, | ||
376 | unsigned long); | ||
377 | long (*unlocked_ioctl) (struct file *, unsigned int, unsigned long); | 377 | long (*unlocked_ioctl) (struct file *, unsigned int, unsigned long); |
378 | long (*compat_ioctl) (struct file *, unsigned int, unsigned long); | 378 | long (*compat_ioctl) (struct file *, unsigned int, unsigned long); |
379 | int (*mmap) (struct file *, struct vm_area_struct *); | 379 | int (*mmap) (struct file *, struct vm_area_struct *); |
@@ -407,8 +407,7 @@ write: no | |||
407 | aio_write: no | 407 | aio_write: no |
408 | readdir: no | 408 | readdir: no |
409 | poll: no | 409 | poll: no |
410 | ioctl: yes (see below) | 410 | unlocked_ioctl: no |
411 | unlocked_ioctl: no (see below) | ||
412 | compat_ioctl: no | 411 | compat_ioctl: no |
413 | mmap: no | 412 | mmap: no |
414 | open: no | 413 | open: no |
@@ -451,9 +450,6 @@ move ->readdir() to inode_operations and use a separate method for directory | |||
451 | anything that resembles union-mount we won't have a struct file for all | 450 | anything that resembles union-mount we won't have a struct file for all |
452 | components. And there are other reasons why the current interface is a mess... | 451 | components. And there are other reasons why the current interface is a mess... |
453 | 452 | ||
454 | ->ioctl() on regular files is superceded by the ->unlocked_ioctl() that | ||
455 | doesn't take the BKL. | ||
456 | |||
457 | ->read on directories probably must go away - we should just enforce -EISDIR | 453 | ->read on directories probably must go away - we should just enforce -EISDIR |
458 | in sys_read() and friends. | 454 | in sys_read() and friends. |
459 | 455 | ||
diff --git a/Documentation/filesystems/porting b/Documentation/filesystems/porting index a7e9746ee7ea..b12c89538680 100644 --- a/Documentation/filesystems/porting +++ b/Documentation/filesystems/porting | |||
@@ -273,3 +273,48 @@ it's safe to remove it. If you don't need it, remove it. | |||
273 | deliberate; as soon as struct block_device * is propagated in a reasonable | 273 | deliberate; as soon as struct block_device * is propagated in a reasonable |
274 | way by that code fixing will become trivial; until then nothing can be | 274 | way by that code fixing will become trivial; until then nothing can be |
275 | done. | 275 | done. |
276 | |||
277 | [mandatory] | ||
278 | |||
279 | block truncatation on error exit from ->write_begin, and ->direct_IO | ||
280 | moved from generic methods (block_write_begin, cont_write_begin, | ||
281 | nobh_write_begin, blockdev_direct_IO*) to callers. Take a look at | ||
282 | ext2_write_failed and callers for an example. | ||
283 | |||
284 | [mandatory] | ||
285 | |||
286 | ->truncate is going away. The whole truncate sequence needs to be | ||
287 | implemented in ->setattr, which is now mandatory for filesystems | ||
288 | implementing on-disk size changes. Start with a copy of the old inode_setattr | ||
289 | and vmtruncate, and the reorder the vmtruncate + foofs_vmtruncate sequence to | ||
290 | be in order of zeroing blocks using block_truncate_page or similar helpers, | ||
291 | size update and on finally on-disk truncation which should not fail. | ||
292 | inode_change_ok now includes the size checks for ATTR_SIZE and must be called | ||
293 | in the beginning of ->setattr unconditionally. | ||
294 | |||
295 | [mandatory] | ||
296 | |||
297 | ->clear_inode() and ->delete_inode() are gone; ->evict_inode() should | ||
298 | be used instead. It gets called whenever the inode is evicted, whether it has | ||
299 | remaining links or not. Caller does *not* evict the pagecache or inode-associated | ||
300 | metadata buffers; getting rid of those is responsibility of method, as it had | ||
301 | been for ->delete_inode(). | ||
302 | ->drop_inode() returns int now; it's called on final iput() with inode_lock | ||
303 | held and it returns true if filesystems wants the inode to be dropped. As before, | ||
304 | generic_drop_inode() is still the default and it's been updated appropriately. | ||
305 | generic_delete_inode() is also alive and it consists simply of return 1. Note that | ||
306 | all actual eviction work is done by caller after ->drop_inode() returns. | ||
307 | clear_inode() is gone; use end_writeback() instead. As before, it must | ||
308 | be called exactly once on each call of ->evict_inode() (as it used to be for | ||
309 | each call of ->delete_inode()). Unlike before, if you are using inode-associated | ||
310 | metadata buffers (i.e. mark_buffer_dirty_inode()), it's your responsibility to | ||
311 | call invalidate_inode_buffers() before end_writeback(). | ||
312 | No async writeback (and thus no calls of ->write_inode()) will happen | ||
313 | after end_writeback() returns, so actions that should not overlap with ->write_inode() | ||
314 | (e.g. freeing on-disk inode if i_nlink is 0) ought to be done after that call. | ||
315 | |||
316 | NOTE: checking i_nlink in the beginning of ->write_inode() and bailing out | ||
317 | if it's zero is not *and* *never* *had* *been* enough. Final unlink() and iput() | ||
318 | may happen while the inode is in the middle of ->write_inode(); e.g. if you blindly | ||
319 | free the on-disk inode, you may end up doing that while ->write_inode() is writing | ||
320 | to it. | ||
diff --git a/Documentation/filesystems/squashfs.txt b/Documentation/filesystems/squashfs.txt index 203f7202cc9e..66699afd66ca 100644 --- a/Documentation/filesystems/squashfs.txt +++ b/Documentation/filesystems/squashfs.txt | |||
@@ -2,7 +2,7 @@ SQUASHFS 4.0 FILESYSTEM | |||
2 | ======================= | 2 | ======================= |
3 | 3 | ||
4 | Squashfs is a compressed read-only filesystem for Linux. | 4 | Squashfs is a compressed read-only filesystem for Linux. |
5 | It uses zlib compression to compress files, inodes and directories. | 5 | It uses zlib/lzo compression to compress files, inodes and directories. |
6 | Inodes in the system are very small and all blocks are packed to minimise | 6 | Inodes in the system are very small and all blocks are packed to minimise |
7 | data overhead. Block sizes greater than 4K are supported up to a maximum | 7 | data overhead. Block sizes greater than 4K are supported up to a maximum |
8 | of 1Mbytes (default block size 128K). | 8 | of 1Mbytes (default block size 128K). |
diff --git a/Documentation/filesystems/vfs.txt b/Documentation/filesystems/vfs.txt index 94677e7dcb13..ed7e5efc06d8 100644 --- a/Documentation/filesystems/vfs.txt +++ b/Documentation/filesystems/vfs.txt | |||
@@ -727,7 +727,6 @@ struct file_operations { | |||
727 | ssize_t (*aio_write) (struct kiocb *, const struct iovec *, unsigned long, loff_t); | 727 | ssize_t (*aio_write) (struct kiocb *, const struct iovec *, unsigned long, loff_t); |
728 | int (*readdir) (struct file *, void *, filldir_t); | 728 | int (*readdir) (struct file *, void *, filldir_t); |
729 | unsigned int (*poll) (struct file *, struct poll_table_struct *); | 729 | unsigned int (*poll) (struct file *, struct poll_table_struct *); |
730 | int (*ioctl) (struct inode *, struct file *, unsigned int, unsigned long); | ||
731 | long (*unlocked_ioctl) (struct file *, unsigned int, unsigned long); | 730 | long (*unlocked_ioctl) (struct file *, unsigned int, unsigned long); |
732 | long (*compat_ioctl) (struct file *, unsigned int, unsigned long); | 731 | long (*compat_ioctl) (struct file *, unsigned int, unsigned long); |
733 | int (*mmap) (struct file *, struct vm_area_struct *); | 732 | int (*mmap) (struct file *, struct vm_area_struct *); |
@@ -768,10 +767,7 @@ otherwise noted. | |||
768 | activity on this file and (optionally) go to sleep until there | 767 | activity on this file and (optionally) go to sleep until there |
769 | is activity. Called by the select(2) and poll(2) system calls | 768 | is activity. Called by the select(2) and poll(2) system calls |
770 | 769 | ||
771 | ioctl: called by the ioctl(2) system call | 770 | unlocked_ioctl: called by the ioctl(2) system call. |
772 | |||
773 | unlocked_ioctl: called by the ioctl(2) system call. Filesystems that do not | ||
774 | require the BKL should use this method instead of the ioctl() above. | ||
775 | 771 | ||
776 | compat_ioctl: called by the ioctl(2) system call when 32 bit system calls | 772 | compat_ioctl: called by the ioctl(2) system call when 32 bit system calls |
777 | are used on 64 bit kernels. | 773 | are used on 64 bit kernels. |
diff --git a/Documentation/gpio.txt b/Documentation/gpio.txt index c2c6e9b39bbe..d96a6dba5748 100644 --- a/Documentation/gpio.txt +++ b/Documentation/gpio.txt | |||
@@ -158,10 +158,11 @@ and configure pullups/pulldowns appropriately.) | |||
158 | Spinlock-Safe GPIO access | 158 | Spinlock-Safe GPIO access |
159 | ------------------------- | 159 | ------------------------- |
160 | Most GPIO controllers can be accessed with memory read/write instructions. | 160 | Most GPIO controllers can be accessed with memory read/write instructions. |
161 | That doesn't need to sleep, and can safely be done from inside IRQ handlers. | 161 | Those don't need to sleep, and can safely be done from inside hard |
162 | (That includes hardirq contexts on RT kernels.) | 162 | (nonthreaded) IRQ handlers and similar contexts. |
163 | 163 | ||
164 | Use these calls to access such GPIOs: | 164 | Use the following calls to access such GPIOs, |
165 | for which gpio_cansleep() will always return false (see below): | ||
165 | 166 | ||
166 | /* GPIO INPUT: return zero or nonzero */ | 167 | /* GPIO INPUT: return zero or nonzero */ |
167 | int gpio_get_value(unsigned gpio); | 168 | int gpio_get_value(unsigned gpio); |
@@ -210,9 +211,31 @@ To access such GPIOs, a different set of accessors is defined: | |||
210 | /* GPIO OUTPUT, might sleep */ | 211 | /* GPIO OUTPUT, might sleep */ |
211 | void gpio_set_value_cansleep(unsigned gpio, int value); | 212 | void gpio_set_value_cansleep(unsigned gpio, int value); |
212 | 213 | ||
213 | Other than the fact that these calls might sleep, and will not be ignored | 214 | |
214 | for GPIOs that can't be accessed from IRQ handlers, these calls act the | 215 | Accessing such GPIOs requires a context which may sleep, for example |
215 | same as the spinlock-safe calls. | 216 | a threaded IRQ handler, and those accessors must be used instead of |
217 | spinlock-safe accessors without the cansleep() name suffix. | ||
218 | |||
219 | Other than the fact that these accessors might sleep, and will work | ||
220 | on GPIOs that can't be accessed from hardIRQ handlers, these calls act | ||
221 | the same as the spinlock-safe calls. | ||
222 | |||
223 | ** IN ADDITION ** calls to setup and configure such GPIOs must be made | ||
224 | from contexts which may sleep, since they may need to access the GPIO | ||
225 | controller chip too: (These setup calls are usually made from board | ||
226 | setup or driver probe/teardown code, so this is an easy constraint.) | ||
227 | |||
228 | gpio_direction_input() | ||
229 | gpio_direction_output() | ||
230 | gpio_request() | ||
231 | |||
232 | ## gpio_request_one() | ||
233 | ## gpio_request_array() | ||
234 | ## gpio_free_array() | ||
235 | |||
236 | gpio_free() | ||
237 | gpio_set_debounce() | ||
238 | |||
216 | 239 | ||
217 | 240 | ||
218 | Claiming and Releasing GPIOs | 241 | Claiming and Releasing GPIOs |
diff --git a/Documentation/hwmon/emc2103 b/Documentation/hwmon/emc2103 new file mode 100644 index 000000000000..a12b2c127140 --- /dev/null +++ b/Documentation/hwmon/emc2103 | |||
@@ -0,0 +1,33 @@ | |||
1 | Kernel driver emc2103 | ||
2 | ====================== | ||
3 | |||
4 | Supported chips: | ||
5 | * SMSC EMC2103 | ||
6 | Addresses scanned: I2C 0x2e | ||
7 | Prefix: 'emc2103' | ||
8 | Datasheet: Not public | ||
9 | |||
10 | Authors: | ||
11 | Steve Glendinning <steve.glendinning@smsc.com> | ||
12 | |||
13 | Description | ||
14 | ----------- | ||
15 | |||
16 | The Standard Microsystems Corporation (SMSC) EMC2103 chips | ||
17 | contain up to 4 temperature sensors and a single fan controller. | ||
18 | |||
19 | Fan rotation speeds are reported in RPM (rotations per minute). An alarm is | ||
20 | triggered if the rotation speed has dropped below a programmable limit. Fan | ||
21 | readings can be divided by a programmable divider (1, 2, 4 or 8) to give | ||
22 | the readings more range or accuracy. Not all RPM values can accurately be | ||
23 | represented, so some rounding is done. With a divider of 1, the lowest | ||
24 | representable value is 480 RPM. | ||
25 | |||
26 | This driver supports RPM based control, to use this a fan target | ||
27 | should be written to fan1_target and pwm1_enable should be set to 3. | ||
28 | |||
29 | The 2103-2 and 2103-4 variants have a third temperature sensor, which can | ||
30 | be connected to two anti-parallel diodes. These values can be read | ||
31 | as temp3 and temp4. If only one diode is attached to this channel, temp4 | ||
32 | will show as "fault". The module parameter "apd=0" can be used to suppress | ||
33 | this 4th channel when anti-parallel diodes are not fitted. | ||
diff --git a/Documentation/hwmon/ltc4245 b/Documentation/hwmon/ltc4245 index 86b5880d8502..b478b0864965 100644 --- a/Documentation/hwmon/ltc4245 +++ b/Documentation/hwmon/ltc4245 | |||
@@ -72,9 +72,31 @@ in6_min_alarm 5v output undervoltage alarm | |||
72 | in7_min_alarm 3v output undervoltage alarm | 72 | in7_min_alarm 3v output undervoltage alarm |
73 | in8_min_alarm Vee (-12v) output undervoltage alarm | 73 | in8_min_alarm Vee (-12v) output undervoltage alarm |
74 | 74 | ||
75 | in9_input GPIO voltage data | 75 | in9_input GPIO voltage data (see note 1) |
76 | in10_input GPIO voltage data (see note 1) | ||
77 | in11_input GPIO voltage data (see note 1) | ||
76 | 78 | ||
77 | power1_input 12v power usage (mW) | 79 | power1_input 12v power usage (mW) |
78 | power2_input 5v power usage (mW) | 80 | power2_input 5v power usage (mW) |
79 | power3_input 3v power usage (mW) | 81 | power3_input 3v power usage (mW) |
80 | power4_input Vee (-12v) power usage (mW) | 82 | power4_input Vee (-12v) power usage (mW) |
83 | |||
84 | |||
85 | Note 1 | ||
86 | ------ | ||
87 | |||
88 | If you have NOT configured the driver to sample all GPIO pins as analog | ||
89 | voltages, then the in10_input and in11_input sysfs attributes will not be | ||
90 | created. The driver will sample the GPIO pin that is currently connected to the | ||
91 | ADC as an analog voltage, and report the value in in9_input. | ||
92 | |||
93 | If you have configured the driver to sample all GPIO pins as analog voltages, | ||
94 | then they will be sampled in round-robin fashion. If userspace reads too | ||
95 | slowly, -EAGAIN will be returned when you read the sysfs attribute containing | ||
96 | the sensor reading. | ||
97 | |||
98 | The LTC4245 chip can be configured to sample all GPIO pins with two methods: | ||
99 | 1) platform data -- see include/linux/i2c/ltc4245.h | ||
100 | 2) OF device tree -- add the "ltc4245,use-extra-gpios" property to each chip | ||
101 | |||
102 | The default mode of operation is to sample a single GPIO pin. | ||
diff --git a/Documentation/hwmon/pc87427 b/Documentation/hwmon/pc87427 index db5cc1227a83..8fdd08c9e48b 100644 --- a/Documentation/hwmon/pc87427 +++ b/Documentation/hwmon/pc87427 | |||
@@ -18,10 +18,11 @@ Description | |||
18 | 18 | ||
19 | The National Semiconductor Super I/O chip includes complete hardware | 19 | The National Semiconductor Super I/O chip includes complete hardware |
20 | monitoring capabilities. It can monitor up to 18 voltages, 8 fans and | 20 | monitoring capabilities. It can monitor up to 18 voltages, 8 fans and |
21 | 6 temperature sensors. Only the fans are supported at the moment. | 21 | 6 temperature sensors. Only the fans and temperatures are supported at |
22 | the moment, voltages aren't. | ||
22 | 23 | ||
23 | This chip also has fan controlling features, which are not yet supported | 24 | This chip also has fan controlling features (up to 4 PWM outputs), |
24 | by this driver either. | 25 | which are partly supported by this driver. |
25 | 26 | ||
26 | The driver assumes that no more than one chip is present, which seems | 27 | The driver assumes that no more than one chip is present, which seems |
27 | reasonable. | 28 | reasonable. |
@@ -36,3 +37,23 @@ signal. Speeds down to 83 RPM can be measured. | |||
36 | An alarm is triggered if the rotation speed drops below a programmable | 37 | An alarm is triggered if the rotation speed drops below a programmable |
37 | limit. Another alarm is triggered if the speed is too low to be measured | 38 | limit. Another alarm is triggered if the speed is too low to be measured |
38 | (including stalled or missing fan). | 39 | (including stalled or missing fan). |
40 | |||
41 | |||
42 | Fan Speed Control | ||
43 | ----------------- | ||
44 | |||
45 | Fan speed can be controlled by PWM outputs. There are 4 possible modes: | ||
46 | always off, always on, manual and automatic. The latter isn't supported | ||
47 | by the driver: you can only return to that mode if it was the original | ||
48 | setting, and the configuration interface is missing. | ||
49 | |||
50 | |||
51 | Temperature Monitoring | ||
52 | ---------------------- | ||
53 | |||
54 | The PC87427 relies on external sensors (following the SensorPath | ||
55 | standard), so the resolution and range depend on the type of sensor | ||
56 | connected. The integer part can be 8-bit or 9-bit, and can be signed or | ||
57 | not. I couldn't find a way to figure out the external sensor data | ||
58 | temperature format, so user-space adjustment (typically by a factor 2) | ||
59 | may be required. | ||
diff --git a/Documentation/hwmon/sysfs-interface b/Documentation/hwmon/sysfs-interface index d4e2917c6f18..ff45d1f837c8 100644 --- a/Documentation/hwmon/sysfs-interface +++ b/Documentation/hwmon/sysfs-interface | |||
@@ -107,10 +107,24 @@ in[0-*]_min Voltage min value. | |||
107 | Unit: millivolt | 107 | Unit: millivolt |
108 | RW | 108 | RW |
109 | 109 | ||
110 | in[0-*]_lcrit Voltage critical min value. | ||
111 | Unit: millivolt | ||
112 | RW | ||
113 | If voltage drops to or below this limit, the system may | ||
114 | take drastic action such as power down or reset. At the very | ||
115 | least, it should report a fault. | ||
116 | |||
110 | in[0-*]_max Voltage max value. | 117 | in[0-*]_max Voltage max value. |
111 | Unit: millivolt | 118 | Unit: millivolt |
112 | RW | 119 | RW |
113 | 120 | ||
121 | in[0-*]_crit Voltage critical max value. | ||
122 | Unit: millivolt | ||
123 | RW | ||
124 | If voltage reaches or exceeds this limit, the system may | ||
125 | take drastic action such as power down or reset. At the very | ||
126 | least, it should report a fault. | ||
127 | |||
114 | in[0-*]_input Voltage input value. | 128 | in[0-*]_input Voltage input value. |
115 | Unit: millivolt | 129 | Unit: millivolt |
116 | RO | 130 | RO |
@@ -284,7 +298,7 @@ temp[1-*]_input Temperature input value. | |||
284 | Unit: millidegree Celsius | 298 | Unit: millidegree Celsius |
285 | RO | 299 | RO |
286 | 300 | ||
287 | temp[1-*]_crit Temperature critical value, typically greater than | 301 | temp[1-*]_crit Temperature critical max value, typically greater than |
288 | corresponding temp_max values. | 302 | corresponding temp_max values. |
289 | Unit: millidegree Celsius | 303 | Unit: millidegree Celsius |
290 | RW | 304 | RW |
@@ -296,6 +310,11 @@ temp[1-*]_crit_hyst | |||
296 | from the critical value. | 310 | from the critical value. |
297 | RW | 311 | RW |
298 | 312 | ||
313 | temp[1-*]_lcrit Temperature critical min value, typically lower than | ||
314 | corresponding temp_min values. | ||
315 | Unit: millidegree Celsius | ||
316 | RW | ||
317 | |||
299 | temp[1-*]_offset | 318 | temp[1-*]_offset |
300 | Temperature offset which is added to the temperature reading | 319 | Temperature offset which is added to the temperature reading |
301 | by the chip. | 320 | by the chip. |
@@ -344,9 +363,6 @@ Also see the Alarms section for status flags associated with temperatures. | |||
344 | * Currents * | 363 | * Currents * |
345 | ************ | 364 | ************ |
346 | 365 | ||
347 | Note that no known chip provides current measurements as of writing, | ||
348 | so this part is theoretical, so to say. | ||
349 | |||
350 | curr[1-*]_max Current max value | 366 | curr[1-*]_max Current max value |
351 | Unit: milliampere | 367 | Unit: milliampere |
352 | RW | 368 | RW |
@@ -471,6 +487,7 @@ limit-related alarms, not both. The driver should just reflect the hardware | |||
471 | implementation. | 487 | implementation. |
472 | 488 | ||
473 | in[0-*]_alarm | 489 | in[0-*]_alarm |
490 | curr[1-*]_alarm | ||
474 | fan[1-*]_alarm | 491 | fan[1-*]_alarm |
475 | temp[1-*]_alarm | 492 | temp[1-*]_alarm |
476 | Channel alarm | 493 | Channel alarm |
@@ -482,6 +499,8 @@ OR | |||
482 | 499 | ||
483 | in[0-*]_min_alarm | 500 | in[0-*]_min_alarm |
484 | in[0-*]_max_alarm | 501 | in[0-*]_max_alarm |
502 | curr[1-*]_min_alarm | ||
503 | curr[1-*]_max_alarm | ||
485 | fan[1-*]_min_alarm | 504 | fan[1-*]_min_alarm |
486 | fan[1-*]_max_alarm | 505 | fan[1-*]_max_alarm |
487 | temp[1-*]_min_alarm | 506 | temp[1-*]_min_alarm |
@@ -497,7 +516,6 @@ to notify open diodes, unconnected fans etc. where the hardware | |||
497 | supports it. When this boolean has value 1, the measurement for that | 516 | supports it. When this boolean has value 1, the measurement for that |
498 | channel should not be trusted. | 517 | channel should not be trusted. |
499 | 518 | ||
500 | in[0-*]_fault | ||
501 | fan[1-*]_fault | 519 | fan[1-*]_fault |
502 | temp[1-*]_fault | 520 | temp[1-*]_fault |
503 | Input fault condition | 521 | Input fault condition |
@@ -513,6 +531,7 @@ beep_enable Master beep enable | |||
513 | RW | 531 | RW |
514 | 532 | ||
515 | in[0-*]_beep | 533 | in[0-*]_beep |
534 | curr[1-*]_beep | ||
516 | fan[1-*]_beep | 535 | fan[1-*]_beep |
517 | temp[1-*]_beep | 536 | temp[1-*]_beep |
518 | Channel beep | 537 | Channel beep |
diff --git a/Documentation/hwmon/w83627ehf b/Documentation/hwmon/w83627ehf index b7e42ec4b26b..13d556112fc0 100644 --- a/Documentation/hwmon/w83627ehf +++ b/Documentation/hwmon/w83627ehf | |||
@@ -20,6 +20,10 @@ Supported chips: | |||
20 | Prefix: 'w83667hg' | 20 | Prefix: 'w83667hg' |
21 | Addresses scanned: ISA address retrieved from Super I/O registers | 21 | Addresses scanned: ISA address retrieved from Super I/O registers |
22 | Datasheet: not available | 22 | Datasheet: not available |
23 | * Winbond W83667HG-B | ||
24 | Prefix: 'w83667hg' | ||
25 | Addresses scanned: ISA address retrieved from Super I/O registers | ||
26 | Datasheet: Available from Nuvoton upon request | ||
23 | 27 | ||
24 | Authors: | 28 | Authors: |
25 | Jean Delvare <khali@linux-fr.org> | 29 | Jean Delvare <khali@linux-fr.org> |
@@ -32,8 +36,8 @@ Description | |||
32 | ----------- | 36 | ----------- |
33 | 37 | ||
34 | This driver implements support for the Winbond W83627EHF, W83627EHG, | 38 | This driver implements support for the Winbond W83627EHF, W83627EHG, |
35 | W83627DHG, W83627DHG-P and W83667HG super I/O chips. We will refer to them | 39 | W83627DHG, W83627DHG-P, W83667HG and W83667HG-B super I/O chips. |
36 | collectively as Winbond chips. | 40 | We will refer to them collectively as Winbond chips. |
37 | 41 | ||
38 | The chips implement three temperature sensors, five fan rotation | 42 | The chips implement three temperature sensors, five fan rotation |
39 | speed sensors, ten analog voltage sensors (only nine for the 627DHG), one | 43 | speed sensors, ten analog voltage sensors (only nine for the 627DHG), one |
@@ -68,14 +72,15 @@ follows: | |||
68 | temp1 -> pwm1 | 72 | temp1 -> pwm1 |
69 | temp2 -> pwm2 | 73 | temp2 -> pwm2 |
70 | temp3 -> pwm3 | 74 | temp3 -> pwm3 |
71 | prog -> pwm4 (not on 667HG; the programmable setting is not supported by | 75 | prog -> pwm4 (not on 667HG and 667HG-B; the programmable setting is not |
72 | the driver) | 76 | supported by the driver) |
73 | 77 | ||
74 | /sys files | 78 | /sys files |
75 | ---------- | 79 | ---------- |
76 | 80 | ||
77 | name - this is a standard hwmon device entry. For the W83627EHF and W83627EHG, | 81 | name - this is a standard hwmon device entry. For the W83627EHF and W83627EHG, |
78 | it is set to "w83627ehf" and for the W83627DHG it is set to "w83627dhg" | 82 | it is set to "w83627ehf", for the W83627DHG it is set to "w83627dhg", |
83 | and for the W83667HG it is set to "w83667hg". | ||
79 | 84 | ||
80 | pwm[1-4] - this file stores PWM duty cycle or DC value (fan speed) in range: | 85 | pwm[1-4] - this file stores PWM duty cycle or DC value (fan speed) in range: |
81 | 0 (stop) to 255 (full) | 86 | 0 (stop) to 255 (full) |
diff --git a/Documentation/i2c/instantiating-devices b/Documentation/i2c/instantiating-devices index e89490270aba..87da405a8597 100644 --- a/Documentation/i2c/instantiating-devices +++ b/Documentation/i2c/instantiating-devices | |||
@@ -102,7 +102,7 @@ static int __devinit usb_hcd_pnx4008_probe(struct platform_device *pdev) | |||
102 | memset(&i2c_info, 0, sizeof(struct i2c_board_info)); | 102 | memset(&i2c_info, 0, sizeof(struct i2c_board_info)); |
103 | strlcpy(i2c_info.name, "isp1301_pnx", I2C_NAME_SIZE); | 103 | strlcpy(i2c_info.name, "isp1301_pnx", I2C_NAME_SIZE); |
104 | isp1301_i2c_client = i2c_new_probed_device(i2c_adap, &i2c_info, | 104 | isp1301_i2c_client = i2c_new_probed_device(i2c_adap, &i2c_info, |
105 | normal_i2c); | 105 | normal_i2c, NULL); |
106 | i2c_put_adapter(i2c_adap); | 106 | i2c_put_adapter(i2c_adap); |
107 | (...) | 107 | (...) |
108 | } | 108 | } |
diff --git a/Documentation/kbuild/makefiles.txt b/Documentation/kbuild/makefiles.txt index c375313cb128..c787ae512120 100644 --- a/Documentation/kbuild/makefiles.txt +++ b/Documentation/kbuild/makefiles.txt | |||
@@ -45,7 +45,6 @@ This document describes the Linux kernel Makefiles. | |||
45 | --- 7.1 header-y | 45 | --- 7.1 header-y |
46 | --- 7.2 objhdr-y | 46 | --- 7.2 objhdr-y |
47 | --- 7.3 destination-y | 47 | --- 7.3 destination-y |
48 | --- 7.4 unifdef-y (deprecated) | ||
49 | 48 | ||
50 | === 8 Kbuild Variables | 49 | === 8 Kbuild Variables |
51 | === 9 Makefile language | 50 | === 9 Makefile language |
@@ -1245,11 +1244,6 @@ See subsequent chapter for the syntax of the Kbuild file. | |||
1245 | will be located in the directory "include/linux" when exported. | 1244 | will be located in the directory "include/linux" when exported. |
1246 | 1245 | ||
1247 | 1246 | ||
1248 | --- 7.4 unifdef-y (deprecated) | ||
1249 | |||
1250 | unifdef-y is deprecated. A direct replacement is header-y. | ||
1251 | |||
1252 | |||
1253 | === 8 Kbuild Variables | 1247 | === 8 Kbuild Variables |
1254 | 1248 | ||
1255 | The top Makefile exports the following variables: | 1249 | The top Makefile exports the following variables: |
diff --git a/Documentation/kernel-parameters.txt b/Documentation/kernel-parameters.txt index 44f6b19c50bb..2c85c0692b01 100644 --- a/Documentation/kernel-parameters.txt +++ b/Documentation/kernel-parameters.txt | |||
@@ -88,8 +88,8 @@ parameter is applicable: | |||
88 | RAM RAM disk support is enabled. | 88 | RAM RAM disk support is enabled. |
89 | S390 S390 architecture is enabled. | 89 | S390 S390 architecture is enabled. |
90 | SCSI Appropriate SCSI support is enabled. | 90 | SCSI Appropriate SCSI support is enabled. |
91 | A lot of drivers has their options described inside of | 91 | A lot of drivers have their options described inside |
92 | Documentation/scsi/. | 92 | the Documentation/scsi/ sub-directory. |
93 | SECURITY Different security models are enabled. | 93 | SECURITY Different security models are enabled. |
94 | SELINUX SELinux support is enabled. | 94 | SELINUX SELinux support is enabled. |
95 | APPARMOR AppArmor support is enabled. | 95 | APPARMOR AppArmor support is enabled. |
@@ -284,27 +284,12 @@ and is between 256 and 4096 characters. It is defined in the file | |||
284 | add_efi_memmap [EFI; X86] Include EFI memory map in | 284 | add_efi_memmap [EFI; X86] Include EFI memory map in |
285 | kernel's map of available physical RAM. | 285 | kernel's map of available physical RAM. |
286 | 286 | ||
287 | advansys= [HW,SCSI] | ||
288 | See header of drivers/scsi/advansys.c. | ||
289 | |||
290 | agp= [AGP] | 287 | agp= [AGP] |
291 | { off | try_unsupported } | 288 | { off | try_unsupported } |
292 | off: disable AGP support | 289 | off: disable AGP support |
293 | try_unsupported: try to drive unsupported chipsets | 290 | try_unsupported: try to drive unsupported chipsets |
294 | (may crash computer or cause data corruption) | 291 | (may crash computer or cause data corruption) |
295 | 292 | ||
296 | aha152x= [HW,SCSI] | ||
297 | See Documentation/scsi/aha152x.txt. | ||
298 | |||
299 | aha1542= [HW,SCSI] | ||
300 | Format: <portbase>[,<buson>,<busoff>[,<dmaspeed>]] | ||
301 | |||
302 | aic7xxx= [HW,SCSI] | ||
303 | See Documentation/scsi/aic7xxx.txt. | ||
304 | |||
305 | aic79xx= [HW,SCSI] | ||
306 | See Documentation/scsi/aic79xx.txt. | ||
307 | |||
308 | ALSA [HW,ALSA] | 293 | ALSA [HW,ALSA] |
309 | See Documentation/sound/alsa/alsa-parameters.txt | 294 | See Documentation/sound/alsa/alsa-parameters.txt |
310 | 295 | ||
@@ -368,8 +353,6 @@ and is between 256 and 4096 characters. It is defined in the file | |||
368 | 353 | ||
369 | atarimouse= [HW,MOUSE] Atari Mouse | 354 | atarimouse= [HW,MOUSE] Atari Mouse |
370 | 355 | ||
371 | atascsi= [HW,SCSI] Atari SCSI | ||
372 | |||
373 | atkbd.extra= [HW] Enable extra LEDs and keys on IBM RapidAccess, | 356 | atkbd.extra= [HW] Enable extra LEDs and keys on IBM RapidAccess, |
374 | EzKey and similar keyboards | 357 | EzKey and similar keyboards |
375 | 358 | ||
@@ -419,10 +402,6 @@ and is between 256 and 4096 characters. It is defined in the file | |||
419 | bttv.pll= See Documentation/video4linux/bttv/Insmod-options | 402 | bttv.pll= See Documentation/video4linux/bttv/Insmod-options |
420 | bttv.tuner= and Documentation/video4linux/bttv/CARDLIST | 403 | bttv.tuner= and Documentation/video4linux/bttv/CARDLIST |
421 | 404 | ||
422 | BusLogic= [HW,SCSI] | ||
423 | See drivers/scsi/BusLogic.c, comment before function | ||
424 | BusLogic_ParseDriverOptions(). | ||
425 | |||
426 | c101= [NET] Moxa C101 synchronous serial card | 405 | c101= [NET] Moxa C101 synchronous serial card |
427 | 406 | ||
428 | cachesize= [BUGS=X86-32] Override level 2 CPU cache size detection. | 407 | cachesize= [BUGS=X86-32] Override level 2 CPU cache size detection. |
@@ -671,8 +650,6 @@ and is between 256 and 4096 characters. It is defined in the file | |||
671 | 650 | ||
672 | dscc4.setup= [NET] | 651 | dscc4.setup= [NET] |
673 | 652 | ||
674 | dtc3181e= [HW,SCSI] | ||
675 | |||
676 | dynamic_printk Enables pr_debug()/dev_dbg() calls if | 653 | dynamic_printk Enables pr_debug()/dev_dbg() calls if |
677 | CONFIG_DYNAMIC_PRINTK_DEBUG has been enabled. | 654 | CONFIG_DYNAMIC_PRINTK_DEBUG has been enabled. |
678 | These can also be switched on/off via | 655 | These can also be switched on/off via |
@@ -681,8 +658,11 @@ and is between 256 and 4096 characters. It is defined in the file | |||
681 | earlycon= [KNL] Output early console device and options. | 658 | earlycon= [KNL] Output early console device and options. |
682 | uart[8250],io,<addr>[,options] | 659 | uart[8250],io,<addr>[,options] |
683 | uart[8250],mmio,<addr>[,options] | 660 | uart[8250],mmio,<addr>[,options] |
661 | uart[8250],mmio32,<addr>[,options] | ||
684 | Start an early, polled-mode console on the 8250/16550 | 662 | Start an early, polled-mode console on the 8250/16550 |
685 | UART at the specified I/O port or MMIO address. | 663 | UART at the specified I/O port or MMIO address. |
664 | MMIO inter-register address stride is either 8bit (mmio) | ||
665 | or 32bit (mmio32). | ||
686 | The options are the same as for ttyS, above. | 666 | The options are the same as for ttyS, above. |
687 | 667 | ||
688 | earlyprintk= [X86,SH,BLACKFIN] | 668 | earlyprintk= [X86,SH,BLACKFIN] |
@@ -710,8 +690,6 @@ and is between 256 and 4096 characters. It is defined in the file | |||
710 | This is desgined to be used in conjunction with | 690 | This is desgined to be used in conjunction with |
711 | the boot argument: earlyprintk=vga | 691 | the boot argument: earlyprintk=vga |
712 | 692 | ||
713 | eata= [HW,SCSI] | ||
714 | |||
715 | edd= [EDD] | 693 | edd= [EDD] |
716 | Format: {"off" | "on" | "skip[mbr]"} | 694 | Format: {"off" | "on" | "skip[mbr]"} |
717 | 695 | ||
@@ -767,12 +745,6 @@ and is between 256 and 4096 characters. It is defined in the file | |||
767 | Format: <interval>,<probability>,<space>,<times> | 745 | Format: <interval>,<probability>,<space>,<times> |
768 | See also /Documentation/fault-injection/. | 746 | See also /Documentation/fault-injection/. |
769 | 747 | ||
770 | fd_mcs= [HW,SCSI] | ||
771 | See header of drivers/scsi/fd_mcs.c. | ||
772 | |||
773 | fdomain= [HW,SCSI] | ||
774 | See header of drivers/scsi/fdomain.c. | ||
775 | |||
776 | floppy= [HW] | 748 | floppy= [HW] |
777 | See Documentation/blockdev/floppy.txt. | 749 | See Documentation/blockdev/floppy.txt. |
778 | 750 | ||
@@ -832,14 +804,9 @@ and is between 256 and 4096 characters. It is defined in the file | |||
832 | When zero, profiling data is discarded and associated | 804 | When zero, profiling data is discarded and associated |
833 | debugfs files are removed at module unload time. | 805 | debugfs files are removed at module unload time. |
834 | 806 | ||
835 | gdth= [HW,SCSI] | ||
836 | See header of drivers/scsi/gdth.c. | ||
837 | |||
838 | gpt [EFI] Forces disk with valid GPT signature but | 807 | gpt [EFI] Forces disk with valid GPT signature but |
839 | invalid Protective MBR to be treated as GPT. | 808 | invalid Protective MBR to be treated as GPT. |
840 | 809 | ||
841 | gvp11= [HW,SCSI] | ||
842 | |||
843 | hashdist= [KNL,NUMA] Large hashes allocated during boot | 810 | hashdist= [KNL,NUMA] Large hashes allocated during boot |
844 | are distributed across NUMA nodes. Defaults on | 811 | are distributed across NUMA nodes. Defaults on |
845 | for 64bit NUMA, off otherwise. | 812 | for 64bit NUMA, off otherwise. |
@@ -912,9 +879,6 @@ and is between 256 and 4096 characters. It is defined in the file | |||
912 | controller | 879 | controller |
913 | i8042.nopnp [HW] Don't use ACPIPnP / PnPBIOS to discover KBD/AUX | 880 | i8042.nopnp [HW] Don't use ACPIPnP / PnPBIOS to discover KBD/AUX |
914 | controllers | 881 | controllers |
915 | i8042.panicblink= | ||
916 | [HW] Frequency with which keyboard LEDs should blink | ||
917 | when kernel panics (default is 0.5 sec) | ||
918 | i8042.reset [HW] Reset the controller during init and cleanup | 882 | i8042.reset [HW] Reset the controller during init and cleanup |
919 | i8042.unlock [HW] Unlock (ignore) the keylock | 883 | i8042.unlock [HW] Unlock (ignore) the keylock |
920 | 884 | ||
@@ -931,9 +895,6 @@ and is between 256 and 4096 characters. It is defined in the file | |||
931 | i8k.restricted [HW] Allow controlling fans only if SYS_ADMIN | 895 | i8k.restricted [HW] Allow controlling fans only if SYS_ADMIN |
932 | capability is set. | 896 | capability is set. |
933 | 897 | ||
934 | ibmmcascsi= [HW,MCA,SCSI] IBM MicroChannel SCSI adapter | ||
935 | See Documentation/mca.txt. | ||
936 | |||
937 | icn= [HW,ISDN] | 898 | icn= [HW,ISDN] |
938 | Format: <io>[,<membase>[,<icn_id>[,<icn_id2>]]] | 899 | Format: <io>[,<membase>[,<icn_id>[,<icn_id2>]]] |
939 | 900 | ||
@@ -983,9 +944,6 @@ and is between 256 and 4096 characters. It is defined in the file | |||
983 | programs exec'd, files mmap'd for exec, and all files | 944 | programs exec'd, files mmap'd for exec, and all files |
984 | opened for read by uid=0. | 945 | opened for read by uid=0. |
985 | 946 | ||
986 | in2000= [HW,SCSI] | ||
987 | See header of drivers/scsi/in2000.c. | ||
988 | |||
989 | init= [KNL] | 947 | init= [KNL] |
990 | Format: <full_path> | 948 | Format: <full_path> |
991 | Run specified binary instead of /sbin/init as init | 949 | Run specified binary instead of /sbin/init as init |
@@ -1023,6 +981,12 @@ and is between 256 and 4096 characters. It is defined in the file | |||
1023 | result in a hardware IOTLB flush operation as opposed | 981 | result in a hardware IOTLB flush operation as opposed |
1024 | to batching them for performance. | 982 | to batching them for performance. |
1025 | 983 | ||
984 | intremap= [X86-64, Intel-IOMMU] | ||
985 | Format: { on (default) | off | nosid } | ||
986 | on enable Interrupt Remapping (default) | ||
987 | off disable Interrupt Remapping | ||
988 | nosid disable Source ID checking | ||
989 | |||
1026 | inttest= [IA64] | 990 | inttest= [IA64] |
1027 | 991 | ||
1028 | iomem= Disable strict checking of access to MMIO memory | 992 | iomem= Disable strict checking of access to MMIO memory |
@@ -1063,9 +1027,6 @@ and is between 256 and 4096 characters. It is defined in the file | |||
1063 | See comment before ip2_setup() in | 1027 | See comment before ip2_setup() in |
1064 | drivers/char/ip2/ip2base.c. | 1028 | drivers/char/ip2/ip2base.c. |
1065 | 1029 | ||
1066 | ips= [HW,SCSI] Adaptec / IBM ServeRAID controller | ||
1067 | See header of drivers/scsi/ips.c. | ||
1068 | |||
1069 | irqfixup [HW] | 1030 | irqfixup [HW] |
1070 | When an interrupt is not handled search all handlers | 1031 | When an interrupt is not handled search all handlers |
1071 | for it. Intended to get systems with badly broken | 1032 | for it. Intended to get systems with badly broken |
@@ -1341,9 +1302,6 @@ and is between 256 and 4096 characters. It is defined in the file | |||
1341 | ltpc= [NET] | 1302 | ltpc= [NET] |
1342 | Format: <io>,<irq>,<dma> | 1303 | Format: <io>,<irq>,<dma> |
1343 | 1304 | ||
1344 | mac5380= [HW,SCSI] Format: | ||
1345 | <can_queue>,<cmd_per_lun>,<sg_tablesize>,<hostid>,<use_tags> | ||
1346 | |||
1347 | machvec= [IA64] Force the use of a particular machine-vector | 1305 | machvec= [IA64] Force the use of a particular machine-vector |
1348 | (machvec) in a generic kernel. | 1306 | (machvec) in a generic kernel. |
1349 | Example: machvec=hpzx1_swiotlb | 1307 | Example: machvec=hpzx1_swiotlb |
@@ -1365,13 +1323,6 @@ and is between 256 and 4096 characters. It is defined in the file | |||
1365 | be mounted | 1323 | be mounted |
1366 | Format: <1-256> | 1324 | Format: <1-256> |
1367 | 1325 | ||
1368 | max_luns= [SCSI] Maximum number of LUNs to probe. | ||
1369 | Should be between 1 and 2^32-1. | ||
1370 | |||
1371 | max_report_luns= | ||
1372 | [SCSI] Maximum number of LUNs received. | ||
1373 | Should be between 1 and 16384. | ||
1374 | |||
1375 | mcatest= [IA-64] | 1326 | mcatest= [IA-64] |
1376 | 1327 | ||
1377 | mce [X86-32] Machine Check Exception | 1328 | mce [X86-32] Machine Check Exception |
@@ -1568,19 +1519,6 @@ and is between 256 and 4096 characters. It is defined in the file | |||
1568 | 1519 | ||
1569 | n2= [NET] SDL Inc. RISCom/N2 synchronous serial card | 1520 | n2= [NET] SDL Inc. RISCom/N2 synchronous serial card |
1570 | 1521 | ||
1571 | NCR_D700= [HW,SCSI] | ||
1572 | See header of drivers/scsi/NCR_D700.c. | ||
1573 | |||
1574 | ncr5380= [HW,SCSI] | ||
1575 | |||
1576 | ncr53c400= [HW,SCSI] | ||
1577 | |||
1578 | ncr53c400a= [HW,SCSI] | ||
1579 | |||
1580 | ncr53c406a= [HW,SCSI] | ||
1581 | |||
1582 | ncr53c8xx= [HW,SCSI] | ||
1583 | |||
1584 | netdev= [NET] Network devices parameters | 1522 | netdev= [NET] Network devices parameters |
1585 | Format: <irq>,<io>,<mem_start>,<mem_end>,<name> | 1523 | Format: <irq>,<io>,<mem_start>,<mem_end>,<name> |
1586 | Note that mem_start is often overloaded to mean | 1524 | Note that mem_start is often overloaded to mean |
@@ -1749,6 +1687,7 @@ and is between 256 and 4096 characters. It is defined in the file | |||
1749 | 1687 | ||
1750 | nointremap [X86-64, Intel-IOMMU] Do not enable interrupt | 1688 | nointremap [X86-64, Intel-IOMMU] Do not enable interrupt |
1751 | remapping. | 1689 | remapping. |
1690 | [Deprecated - use intremap=off] | ||
1752 | 1691 | ||
1753 | nointroute [IA-64] | 1692 | nointroute [IA-64] |
1754 | 1693 | ||
@@ -1859,10 +1798,6 @@ and is between 256 and 4096 characters. It is defined in the file | |||
1859 | OSS [HW,OSS] | 1798 | OSS [HW,OSS] |
1860 | See Documentation/sound/oss/oss-parameters.txt | 1799 | See Documentation/sound/oss/oss-parameters.txt |
1861 | 1800 | ||
1862 | osst= [HW,SCSI] SCSI Tape Driver | ||
1863 | Format: <buffer_size>,<write_threshold> | ||
1864 | See also Documentation/scsi/st.txt. | ||
1865 | |||
1866 | panic= [KNL] Kernel behaviour on panic | 1801 | panic= [KNL] Kernel behaviour on panic |
1867 | Format: <timeout> | 1802 | Format: <timeout> |
1868 | 1803 | ||
@@ -1895,9 +1830,6 @@ and is between 256 and 4096 characters. It is defined in the file | |||
1895 | Currently this function knows 686a and 8231 chips. | 1830 | Currently this function knows 686a and 8231 chips. |
1896 | Format: [spp|ps2|epp|ecp|ecpepp] | 1831 | Format: [spp|ps2|epp|ecp|ecpepp] |
1897 | 1832 | ||
1898 | pas16= [HW,SCSI] | ||
1899 | See header of drivers/scsi/pas16.c. | ||
1900 | |||
1901 | pause_on_oops= | 1833 | pause_on_oops= |
1902 | Halt all CPUs after the first oops has been printed for | 1834 | Halt all CPUs after the first oops has been printed for |
1903 | the specified number of seconds. This is to be used if | 1835 | the specified number of seconds. This is to be used if |
@@ -2264,30 +2196,6 @@ and is between 256 and 4096 characters. It is defined in the file | |||
2264 | 2196 | ||
2265 | sched_debug [KNL] Enables verbose scheduler debug messages. | 2197 | sched_debug [KNL] Enables verbose scheduler debug messages. |
2266 | 2198 | ||
2267 | scsi_debug_*= [SCSI] | ||
2268 | See drivers/scsi/scsi_debug.c. | ||
2269 | |||
2270 | scsi_default_dev_flags= | ||
2271 | [SCSI] SCSI default device flags | ||
2272 | Format: <integer> | ||
2273 | |||
2274 | scsi_dev_flags= [SCSI] Black/white list entry for vendor and model | ||
2275 | Format: <vendor>:<model>:<flags> | ||
2276 | (flags are integer value) | ||
2277 | |||
2278 | scsi_logging_level= [SCSI] a bit mask of logging levels | ||
2279 | See drivers/scsi/scsi_logging.h for bits. Also | ||
2280 | settable via sysctl at dev.scsi.logging_level | ||
2281 | (/proc/sys/dev/scsi/logging_level). | ||
2282 | There is also a nice 'scsi_logging_level' script in the | ||
2283 | S390-tools package, available for download at | ||
2284 | http://www-128.ibm.com/developerworks/linux/linux390/s390-tools-1.5.4.html | ||
2285 | |||
2286 | scsi_mod.scan= [SCSI] sync (default) scans SCSI busses as they are | ||
2287 | discovered. async scans them in kernel threads, | ||
2288 | allowing boot to proceed. none ignores them, expecting | ||
2289 | user space to do the scan. | ||
2290 | |||
2291 | security= [SECURITY] Choose a security module to enable at boot. | 2199 | security= [SECURITY] Choose a security module to enable at boot. |
2292 | If this boot parameter is not specified, only the first | 2200 | If this boot parameter is not specified, only the first |
2293 | security module asking for security registration will be | 2201 | security module asking for security registration will be |
@@ -2321,9 +2229,6 @@ and is between 256 and 4096 characters. It is defined in the file | |||
2321 | The parameter means the number of CPUs to show, | 2229 | The parameter means the number of CPUs to show, |
2322 | for example 1 means boot CPU only. | 2230 | for example 1 means boot CPU only. |
2323 | 2231 | ||
2324 | sim710= [SCSI,HW] | ||
2325 | See header of drivers/scsi/sim710.c. | ||
2326 | |||
2327 | simeth= [IA-64] | 2232 | simeth= [IA-64] |
2328 | simscsi= | 2233 | simscsi= |
2329 | 2234 | ||
@@ -2395,9 +2300,6 @@ and is between 256 and 4096 characters. It is defined in the file | |||
2395 | spia_pedr= | 2300 | spia_pedr= |
2396 | spia_peddr= | 2301 | spia_peddr= |
2397 | 2302 | ||
2398 | st= [HW,SCSI] SCSI tape parameters (buffers, etc.) | ||
2399 | See Documentation/scsi/st.txt. | ||
2400 | |||
2401 | stacktrace [FTRACE] | 2303 | stacktrace [FTRACE] |
2402 | Enabled the stack tracer on boot up. | 2304 | Enabled the stack tracer on boot up. |
2403 | 2305 | ||
@@ -2455,18 +2357,12 @@ and is between 256 and 4096 characters. It is defined in the file | |||
2455 | 2357 | ||
2456 | switches= [HW,M68k] | 2358 | switches= [HW,M68k] |
2457 | 2359 | ||
2458 | sym53c416= [HW,SCSI] | ||
2459 | See header of drivers/scsi/sym53c416.c. | ||
2460 | |||
2461 | sysrq_always_enabled | 2360 | sysrq_always_enabled |
2462 | [KNL] | 2361 | [KNL] |
2463 | Ignore sysrq setting - this boot parameter will | 2362 | Ignore sysrq setting - this boot parameter will |
2464 | neutralize any effect of /proc/sys/kernel/sysrq. | 2363 | neutralize any effect of /proc/sys/kernel/sysrq. |
2465 | Useful for debugging. | 2364 | Useful for debugging. |
2466 | 2365 | ||
2467 | t128= [HW,SCSI] | ||
2468 | See header of drivers/scsi/t128.c. | ||
2469 | |||
2470 | tdfx= [HW,DRM] | 2366 | tdfx= [HW,DRM] |
2471 | 2367 | ||
2472 | test_suspend= [SUSPEND] | 2368 | test_suspend= [SUSPEND] |
@@ -2503,10 +2399,6 @@ and is between 256 and 4096 characters. It is defined in the file | |||
2503 | <deci-seconds>: poll all this frequency | 2399 | <deci-seconds>: poll all this frequency |
2504 | 0: no polling (default) | 2400 | 0: no polling (default) |
2505 | 2401 | ||
2506 | tmscsim= [HW,SCSI] | ||
2507 | See comment before function dc390_setup() in | ||
2508 | drivers/scsi/tmscsim.c. | ||
2509 | |||
2510 | topology= [S390] | 2402 | topology= [S390] |
2511 | Format: {off | on} | 2403 | Format: {off | on} |
2512 | Specify if the kernel should make use of the cpu | 2404 | Specify if the kernel should make use of the cpu |
@@ -2547,9 +2439,6 @@ and is between 256 and 4096 characters. It is defined in the file | |||
2547 | <port#>,<js1>,<js2>,<js3>,<js4>,<js5>,<js6>,<js7> | 2439 | <port#>,<js1>,<js2>,<js3>,<js4>,<js5>,<js6>,<js7> |
2548 | See also Documentation/input/joystick-parport.txt | 2440 | See also Documentation/input/joystick-parport.txt |
2549 | 2441 | ||
2550 | u14-34f= [HW,SCSI] UltraStor 14F/34F SCSI host adapter | ||
2551 | See header of drivers/scsi/u14-34f.c. | ||
2552 | |||
2553 | uhash_entries= [KNL,NET] | 2442 | uhash_entries= [KNL,NET] |
2554 | Set number of hash buckets for UDP/UDP-Lite connections | 2443 | Set number of hash buckets for UDP/UDP-Lite connections |
2555 | 2444 | ||
@@ -2715,12 +2604,6 @@ and is between 256 and 4096 characters. It is defined in the file | |||
2715 | overridden by individual drivers. 0 will hide | 2604 | overridden by individual drivers. 0 will hide |
2716 | cursors, 1 will display them. | 2605 | cursors, 1 will display them. |
2717 | 2606 | ||
2718 | wd33c93= [HW,SCSI] | ||
2719 | See header of drivers/scsi/wd33c93.c. | ||
2720 | |||
2721 | wd7000= [HW,SCSI] | ||
2722 | See header of drivers/scsi/wd7000.c. | ||
2723 | |||
2724 | watchdog timers [HW,WDT] For information on watchdog timers, | 2607 | watchdog timers [HW,WDT] For information on watchdog timers, |
2725 | see Documentation/watchdog/watchdog-parameters.txt | 2608 | see Documentation/watchdog/watchdog-parameters.txt |
2726 | or other driver-specific files in the | 2609 | or other driver-specific files in the |
diff --git a/Documentation/mmc/00-INDEX b/Documentation/mmc/00-INDEX new file mode 100644 index 000000000000..fca586f5b853 --- /dev/null +++ b/Documentation/mmc/00-INDEX | |||
@@ -0,0 +1,4 @@ | |||
1 | 00-INDEX | ||
2 | - this file | ||
3 | mmc-dev-attrs.txt | ||
4 | - info on SD and MMC device attributes | ||
diff --git a/Documentation/mmc/mmc-dev-attrs.txt b/Documentation/mmc/mmc-dev-attrs.txt new file mode 100644 index 000000000000..ff2bd685bced --- /dev/null +++ b/Documentation/mmc/mmc-dev-attrs.txt | |||
@@ -0,0 +1,56 @@ | |||
1 | SD and MMC Device Attributes | ||
2 | ============================ | ||
3 | |||
4 | All attributes are read-only. | ||
5 | |||
6 | cid Card Identifaction Register | ||
7 | csd Card Specific Data Register | ||
8 | scr SD Card Configuration Register (SD only) | ||
9 | date Manufacturing Date (from CID Register) | ||
10 | fwrev Firmware/Product Revision (from CID Register) (SD and MMCv1 only) | ||
11 | hwrev Hardware/Product Revision (from CID Register) (SD and MMCv1 only) | ||
12 | manfid Manufacturer ID (from CID Register) | ||
13 | name Product Name (from CID Register) | ||
14 | oemid OEM/Application ID (from CID Register) | ||
15 | serial Product Serial Number (from CID Register) | ||
16 | erase_size Erase group size | ||
17 | preferred_erase_size Preferred erase size | ||
18 | |||
19 | Note on Erase Size and Preferred Erase Size: | ||
20 | |||
21 | "erase_size" is the minimum size, in bytes, of an erase | ||
22 | operation. For MMC, "erase_size" is the erase group size | ||
23 | reported by the card. Note that "erase_size" does not apply | ||
24 | to trim or secure trim operations where the minimum size is | ||
25 | always one 512 byte sector. For SD, "erase_size" is 512 | ||
26 | if the card is block-addressed, 0 otherwise. | ||
27 | |||
28 | SD/MMC cards can erase an arbitrarily large area up to and | ||
29 | including the whole card. When erasing a large area it may | ||
30 | be desirable to do it in smaller chunks for three reasons: | ||
31 | 1. A single erase command will make all other I/O on | ||
32 | the card wait. This is not a problem if the whole card | ||
33 | is being erased, but erasing one partition will make | ||
34 | I/O for another partition on the same card wait for the | ||
35 | duration of the erase - which could be a several | ||
36 | minutes. | ||
37 | 2. To be able to inform the user of erase progress. | ||
38 | 3. The erase timeout becomes too large to be very | ||
39 | useful. Because the erase timeout contains a margin | ||
40 | which is multiplied by the size of the erase area, | ||
41 | the value can end up being several minutes for large | ||
42 | areas. | ||
43 | |||
44 | "erase_size" is not the most efficient unit to erase | ||
45 | (especially for SD where it is just one sector), | ||
46 | hence "preferred_erase_size" provides a good chunk | ||
47 | size for erasing large areas. | ||
48 | |||
49 | For MMC, "preferred_erase_size" is the high-capacity | ||
50 | erase size if a card specifies one, otherwise it is | ||
51 | based on the capacity of the card. | ||
52 | |||
53 | For SD, "preferred_erase_size" is the allocation unit | ||
54 | size specified by the card. | ||
55 | |||
56 | "preferred_erase_size" is in bytes. | ||
diff --git a/Documentation/networking/wavelan.txt b/Documentation/networking/wavelan.txt deleted file mode 100644 index 90e0ac4e15da..000000000000 --- a/Documentation/networking/wavelan.txt +++ /dev/null | |||
@@ -1,74 +0,0 @@ | |||
1 | The Wavelan drivers saga | ||
2 | ------------------------ | ||
3 | |||
4 | By Jean Tourrilhes <jt@hpl.hp.com> | ||
5 | |||
6 | The Wavelan is a Radio network adapter designed by | ||
7 | Lucent. Under this generic name is hidden quite a variety of hardware, | ||
8 | and many Linux driver to support it. | ||
9 | The get the full story on Wireless LANs, please consult : | ||
10 | http://www.hpl.hp.com/personal/Jean_Tourrilhes/Linux/ | ||
11 | |||
12 | "wavelan" driver (old ISA Wavelan) | ||
13 | ---------------- | ||
14 | o Config : Network device -> Wireless LAN -> AT&T WaveLAN | ||
15 | o Location : .../drivers/net/wireless/wavelan* | ||
16 | o in-line doc : .../drivers/net/wireless/wavelan.p.h | ||
17 | o on-line doc : | ||
18 | http://www.hpl.hp.com/personal/Jean_Tourrilhes/Linux/Wavelan.html | ||
19 | |||
20 | This is the driver for the ISA version of the first generation | ||
21 | of the Wavelan, now discontinued. The device is 2 Mb/s, composed of a | ||
22 | Intel 82586 controller and a Lucent Modem, and is NOT 802.11 compliant. | ||
23 | The driver has been tested with the following hardware : | ||
24 | o Wavelan ISA 915 MHz (full length ISA card) | ||
25 | o Wavelan ISA 915 MHz 2.0 (half length ISA card) | ||
26 | o Wavelan ISA 2.4 GHz (full length ISA card, fixed frequency) | ||
27 | o Wavelan ISA 2.4 GHz 2.0 (half length ISA card, frequency selectable) | ||
28 | o Above cards with the optional DES encryption feature | ||
29 | |||
30 | "wavelan_cs" driver (old Pcmcia Wavelan) | ||
31 | ------------------- | ||
32 | o Config : Network device -> PCMCIA network -> | ||
33 | Pcmcia Wireless LAN -> AT&T/Lucent WaveLAN | ||
34 | o Location : .../drivers/net/pcmcia/wavelan* | ||
35 | o in-line doc : .../drivers/net/pcmcia/wavelan_cs.h | ||
36 | o on-line doc : | ||
37 | http://www.hpl.hp.com/personal/Jean_Tourrilhes/Linux/Wavelan.html | ||
38 | |||
39 | This is the driver for the PCMCIA version of the first | ||
40 | generation of the Wavelan, now discontinued. The device is 2 Mb/s, | ||
41 | composed of a Intel 82593 controller (totally different from the 82586) | ||
42 | and a Lucent Modem, and NOT 802.11 compatible. | ||
43 | The driver has been tested with the following hardware : | ||
44 | o Wavelan Pcmcia 915 MHz 2.0 (Pcmcia card + separate | ||
45 | modem/antenna block) | ||
46 | o Wavelan Pcmcia 2.4 GHz 2.0 (Pcmcia card + separate | ||
47 | modem/antenna block) | ||
48 | |||
49 | "wvlan_cs" driver (Wavelan IEEE, GPL) | ||
50 | ----------------- | ||
51 | o Config : Not yet in kernel | ||
52 | o Location : Pcmcia package 3.1.10+ | ||
53 | o on-line doc : | ||
54 | http://web.archive.org/web/*/http://www.fasta.fh-dortmund.de/users/andy/wvlan/ | ||
55 | |||
56 | This is the driver for the current generation of Wavelan IEEE, | ||
57 | which is 802.11 compatible. Depending on version, it is 2 Mb/s or 11 | ||
58 | Mb/s, with or without encryption, all implemented in Lucent specific | ||
59 | DSP (the Hermes). | ||
60 | This is a GPL full source PCMCIA driver (ISA is just a Pcmcia | ||
61 | card with ISA-Pcmcia bridge). | ||
62 | |||
63 | "wavelan2_cs" driver (Wavelan IEEE, binary) | ||
64 | -------------------- | ||
65 | o Config : Not yet in kernel | ||
66 | o Location : ftp://sourceforge.org/pcmcia/contrib/ | ||
67 | |||
68 | This driver support exactly the same hardware as the previous | ||
69 | driver, the main difference is that it is based on a binary library | ||
70 | and supported by Lucent. | ||
71 | |||
72 | I hope it clears the confusion ;-) | ||
73 | |||
74 | Jean | ||
diff --git a/Documentation/padata.txt b/Documentation/padata.txt index 473ebf22cd69..7ddfe216a0aa 100644 --- a/Documentation/padata.txt +++ b/Documentation/padata.txt | |||
@@ -19,7 +19,7 @@ overall control of how tasks are to be run: | |||
19 | 19 | ||
20 | The pcpumask describes which processors will be used to execute work | 20 | The pcpumask describes which processors will be used to execute work |
21 | submitted to this instance in parallel. The cbcpumask defines which | 21 | submitted to this instance in parallel. The cbcpumask defines which |
22 | processors are allowed to use as the serialization callback processor. | 22 | processors are allowed to be used as the serialization callback processor. |
23 | The workqueue wq is where the work will actually be done; it should be | 23 | The workqueue wq is where the work will actually be done; it should be |
24 | a multithreaded queue, naturally. | 24 | a multithreaded queue, naturally. |
25 | 25 | ||
@@ -30,10 +30,10 @@ cpumasks this helper function can be used: | |||
30 | 30 | ||
31 | Note: Padata maintains two kinds of cpumasks internally. The user supplied | 31 | Note: Padata maintains two kinds of cpumasks internally. The user supplied |
32 | cpumasks, submitted by padata_alloc/padata_alloc_possible and the 'usable' | 32 | cpumasks, submitted by padata_alloc/padata_alloc_possible and the 'usable' |
33 | cpumasks. The usable cpumasks are always the subset of active cpus in the | 33 | cpumasks. The usable cpumasks are always a subset of active CPUs in the |
34 | user supplied cpumasks, these are the cpumasks padata actually use. So | 34 | user supplied cpumasks; these are the cpumasks padata actually uses. So |
35 | it is legal to supply a cpumask to padata that contains offline cpus. | 35 | it is legal to supply a cpumask to padata that contains offline CPUs. |
36 | Once a offline cpu in the user supplied cpumask comes online, padata | 36 | Once an offline CPU in the user supplied cpumask comes online, padata |
37 | is going to use it. | 37 | is going to use it. |
38 | 38 | ||
39 | There are functions for enabling and disabling the instance: | 39 | There are functions for enabling and disabling the instance: |
@@ -44,7 +44,7 @@ There are functions for enabling and disabling the instance: | |||
44 | These functions are setting or clearing the "PADATA_INIT" flag; | 44 | These functions are setting or clearing the "PADATA_INIT" flag; |
45 | if that flag is not set, other functions will refuse to work. | 45 | if that flag is not set, other functions will refuse to work. |
46 | padata_start returns zero on success (flag set) or -EINVAL if the | 46 | padata_start returns zero on success (flag set) or -EINVAL if the |
47 | padata cpumask contains no active cpu (flag not set). | 47 | padata cpumask contains no active CPU (flag not set). |
48 | padata_stop clears the flag and blocks until the padata instance | 48 | padata_stop clears the flag and blocks until the padata instance |
49 | is unused. | 49 | is unused. |
50 | 50 | ||
@@ -63,11 +63,11 @@ done with great frequency. | |||
63 | 63 | ||
64 | It's possible to change both cpumasks of a padata instance with | 64 | It's possible to change both cpumasks of a padata instance with |
65 | padata_set_cpumasks by specifying the cpumasks for parallel execution (pcpumask) | 65 | padata_set_cpumasks by specifying the cpumasks for parallel execution (pcpumask) |
66 | and for the serial callback function (cbcpumask). padata_set_cpumask is to | 66 | and for the serial callback function (cbcpumask). padata_set_cpumask is used to |
67 | change just one of the cpumasks. Here cpumask_type is one of PADATA_CPU_SERIAL, | 67 | change just one of the cpumasks. Here cpumask_type is one of PADATA_CPU_SERIAL, |
68 | PADATA_CPU_PARALLEL and cpumask specifies the new cpumask to use. | 68 | PADATA_CPU_PARALLEL and cpumask specifies the new cpumask to use. |
69 | To simply add or remove one cpu from a certain cpumask the functions | 69 | To simply add or remove one CPU from a certain cpumask the functions |
70 | padata_add_cpu/padata_remove_cpu are used. cpu specifies the cpu to add or | 70 | padata_add_cpu/padata_remove_cpu are used. cpu specifies the CPU to add or |
71 | remove and mask is one of PADATA_CPU_SERIAL, PADATA_CPU_PARALLEL. | 71 | remove and mask is one of PADATA_CPU_SERIAL, PADATA_CPU_PARALLEL. |
72 | 72 | ||
73 | If a user is interested in padata cpumask changes, he can register to | 73 | If a user is interested in padata cpumask changes, he can register to |
@@ -82,7 +82,7 @@ To unregister from that notifier: | |||
82 | struct notifier_block *nblock); | 82 | struct notifier_block *nblock); |
83 | 83 | ||
84 | The padata cpumask change notifier notifies about changes of the usable | 84 | The padata cpumask change notifier notifies about changes of the usable |
85 | cpumasks, i.e. the subset of active cpus in the user supplied cpumask. | 85 | cpumasks, i.e. the subset of active CPUs in the user supplied cpumask. |
86 | 86 | ||
87 | Padata calls the notifier chain with: | 87 | Padata calls the notifier chain with: |
88 | 88 | ||
@@ -92,7 +92,7 @@ Padata calls the notifier chain with: | |||
92 | 92 | ||
93 | Here cpumask_change_notifier is registered notifier, notification_mask | 93 | Here cpumask_change_notifier is registered notifier, notification_mask |
94 | is one of PADATA_CPU_SERIAL, PADATA_CPU_PARALLEL and cpumask is a pointer | 94 | is one of PADATA_CPU_SERIAL, PADATA_CPU_PARALLEL and cpumask is a pointer |
95 | to a struct padata_cpumask that contains the new cpumask informations. | 95 | to a struct padata_cpumask that contains the new cpumask information. |
96 | 96 | ||
97 | Actually submitting work to the padata instance requires the creation of a | 97 | Actually submitting work to the padata instance requires the creation of a |
98 | padata_priv structure: | 98 | padata_priv structure: |
@@ -104,7 +104,7 @@ padata_priv structure: | |||
104 | }; | 104 | }; |
105 | 105 | ||
106 | This structure will almost certainly be embedded within some larger | 106 | This structure will almost certainly be embedded within some larger |
107 | structure specific to the work to be done. Most its fields are private to | 107 | structure specific to the work to be done. Most of its fields are private to |
108 | padata, but the structure should be zeroed at initialisation time, and the | 108 | padata, but the structure should be zeroed at initialisation time, and the |
109 | parallel() and serial() functions should be provided. Those functions will | 109 | parallel() and serial() functions should be provided. Those functions will |
110 | be called in the process of getting the work done as we will see | 110 | be called in the process of getting the work done as we will see |
diff --git a/Documentation/powerpc/dts-bindings/fsl/esdhc.txt b/Documentation/powerpc/dts-bindings/fsl/esdhc.txt index 8a0040738969..64bcb8be973c 100644 --- a/Documentation/powerpc/dts-bindings/fsl/esdhc.txt +++ b/Documentation/powerpc/dts-bindings/fsl/esdhc.txt | |||
@@ -14,6 +14,8 @@ Required properties: | |||
14 | reports inverted write-protect state; | 14 | reports inverted write-protect state; |
15 | - sdhci,1-bit-only : (optional) specifies that a controller can | 15 | - sdhci,1-bit-only : (optional) specifies that a controller can |
16 | only handle 1-bit data transfers. | 16 | only handle 1-bit data transfers. |
17 | - sdhci,auto-cmd12: (optional) specifies that a controller can | ||
18 | only handle auto CMD12. | ||
17 | 19 | ||
18 | Example: | 20 | Example: |
19 | 21 | ||
diff --git a/Documentation/scsi/scsi-parameters.txt b/Documentation/scsi/scsi-parameters.txt new file mode 100644 index 000000000000..21e5798526ee --- /dev/null +++ b/Documentation/scsi/scsi-parameters.txt | |||
@@ -0,0 +1,139 @@ | |||
1 | SCSI Kernel Parameters | ||
2 | ~~~~~~~~~~~~~~~~~~~~~~ | ||
3 | |||
4 | See Documentation/kernel-parameters.txt for general information on | ||
5 | specifying module parameters. | ||
6 | |||
7 | This document may not be entirely up to date and comprehensive. The command | ||
8 | "modinfo -p ${modulename}" shows a current list of all parameters of a loadable | ||
9 | module. Loadable modules, after being loaded into the running kernel, also | ||
10 | reveal their parameters in /sys/module/${modulename}/parameters/. Some of these | ||
11 | parameters may be changed at runtime by the command | ||
12 | "echo -n ${value} > /sys/module/${modulename}/parameters/${parm}". | ||
13 | |||
14 | |||
15 | advansys= [HW,SCSI] | ||
16 | See header of drivers/scsi/advansys.c. | ||
17 | |||
18 | aha152x= [HW,SCSI] | ||
19 | See Documentation/scsi/aha152x.txt. | ||
20 | |||
21 | aha1542= [HW,SCSI] | ||
22 | Format: <portbase>[,<buson>,<busoff>[,<dmaspeed>]] | ||
23 | |||
24 | aic7xxx= [HW,SCSI] | ||
25 | See Documentation/scsi/aic7xxx.txt. | ||
26 | |||
27 | aic79xx= [HW,SCSI] | ||
28 | See Documentation/scsi/aic79xx.txt. | ||
29 | |||
30 | atascsi= [HW,SCSI] Atari SCSI | ||
31 | |||
32 | BusLogic= [HW,SCSI] | ||
33 | See drivers/scsi/BusLogic.c, comment before function | ||
34 | BusLogic_ParseDriverOptions(). | ||
35 | |||
36 | dtc3181e= [HW,SCSI] | ||
37 | |||
38 | eata= [HW,SCSI] | ||
39 | |||
40 | fd_mcs= [HW,SCSI] | ||
41 | See header of drivers/scsi/fd_mcs.c. | ||
42 | |||
43 | fdomain= [HW,SCSI] | ||
44 | See header of drivers/scsi/fdomain.c. | ||
45 | |||
46 | gdth= [HW,SCSI] | ||
47 | See header of drivers/scsi/gdth.c. | ||
48 | |||
49 | gvp11= [HW,SCSI] | ||
50 | |||
51 | ibmmcascsi= [HW,MCA,SCSI] IBM MicroChannel SCSI adapter | ||
52 | See Documentation/mca.txt. | ||
53 | |||
54 | in2000= [HW,SCSI] | ||
55 | See header of drivers/scsi/in2000.c. | ||
56 | |||
57 | ips= [HW,SCSI] Adaptec / IBM ServeRAID controller | ||
58 | See header of drivers/scsi/ips.c. | ||
59 | |||
60 | mac5380= [HW,SCSI] Format: | ||
61 | <can_queue>,<cmd_per_lun>,<sg_tablesize>,<hostid>,<use_tags> | ||
62 | |||
63 | max_luns= [SCSI] Maximum number of LUNs to probe. | ||
64 | Should be between 1 and 2^32-1. | ||
65 | |||
66 | max_report_luns= | ||
67 | [SCSI] Maximum number of LUNs received. | ||
68 | Should be between 1 and 16384. | ||
69 | |||
70 | NCR_D700= [HW,SCSI] | ||
71 | See header of drivers/scsi/NCR_D700.c. | ||
72 | |||
73 | ncr5380= [HW,SCSI] | ||
74 | |||
75 | ncr53c400= [HW,SCSI] | ||
76 | |||
77 | ncr53c400a= [HW,SCSI] | ||
78 | |||
79 | ncr53c406a= [HW,SCSI] | ||
80 | |||
81 | ncr53c8xx= [HW,SCSI] | ||
82 | |||
83 | nodisconnect [HW,SCSI,M68K] Disables SCSI disconnects. | ||
84 | |||
85 | osst= [HW,SCSI] SCSI Tape Driver | ||
86 | Format: <buffer_size>,<write_threshold> | ||
87 | See also Documentation/scsi/st.txt. | ||
88 | |||
89 | pas16= [HW,SCSI] | ||
90 | See header of drivers/scsi/pas16.c. | ||
91 | |||
92 | scsi_debug_*= [SCSI] | ||
93 | See drivers/scsi/scsi_debug.c. | ||
94 | |||
95 | scsi_default_dev_flags= | ||
96 | [SCSI] SCSI default device flags | ||
97 | Format: <integer> | ||
98 | |||
99 | scsi_dev_flags= [SCSI] Black/white list entry for vendor and model | ||
100 | Format: <vendor>:<model>:<flags> | ||
101 | (flags are integer value) | ||
102 | |||
103 | scsi_logging_level= [SCSI] a bit mask of logging levels | ||
104 | See drivers/scsi/scsi_logging.h for bits. Also | ||
105 | settable via sysctl at dev.scsi.logging_level | ||
106 | (/proc/sys/dev/scsi/logging_level). | ||
107 | There is also a nice 'scsi_logging_level' script in the | ||
108 | S390-tools package, available for download at | ||
109 | http://www-128.ibm.com/developerworks/linux/linux390/s390-tools-1.5.4.html | ||
110 | |||
111 | scsi_mod.scan= [SCSI] sync (default) scans SCSI busses as they are | ||
112 | discovered. async scans them in kernel threads, | ||
113 | allowing boot to proceed. none ignores them, expecting | ||
114 | user space to do the scan. | ||
115 | |||
116 | sim710= [SCSI,HW] | ||
117 | See header of drivers/scsi/sim710.c. | ||
118 | |||
119 | st= [HW,SCSI] SCSI tape parameters (buffers, etc.) | ||
120 | See Documentation/scsi/st.txt. | ||
121 | |||
122 | sym53c416= [HW,SCSI] | ||
123 | See header of drivers/scsi/sym53c416.c. | ||
124 | |||
125 | t128= [HW,SCSI] | ||
126 | See header of drivers/scsi/t128.c. | ||
127 | |||
128 | tmscsim= [HW,SCSI] | ||
129 | See comment before function dc390_setup() in | ||
130 | drivers/scsi/tmscsim.c. | ||
131 | |||
132 | u14-34f= [HW,SCSI] UltraStor 14F/34F SCSI host adapter | ||
133 | See header of drivers/scsi/u14-34f.c. | ||
134 | |||
135 | wd33c93= [HW,SCSI] | ||
136 | See header of drivers/scsi/wd33c93.c. | ||
137 | |||
138 | wd7000= [HW,SCSI] | ||
139 | See header of drivers/scsi/wd7000.c. | ||
diff --git a/Documentation/usb/ehci.txt b/Documentation/usb/ehci.txt index 1536b7e75134..9dcafa7d930d 100644 --- a/Documentation/usb/ehci.txt +++ b/Documentation/usb/ehci.txt | |||
@@ -9,7 +9,7 @@ compatible with the USB 1.1 standard. It defines three transfer speeds: | |||
9 | - "Low Speed" 1.5 Mbit/sec | 9 | - "Low Speed" 1.5 Mbit/sec |
10 | 10 | ||
11 | USB 1.1 only addressed full speed and low speed. High speed devices | 11 | USB 1.1 only addressed full speed and low speed. High speed devices |
12 | can be used on USB 1.1 systems, but they slow down to USB 1.1 speeds. | 12 | can be used on USB 1.1 systems, but they slow down to USB 1.1 speeds. |
13 | 13 | ||
14 | USB 1.1 devices may also be used on USB 2.0 systems. When plugged | 14 | USB 1.1 devices may also be used on USB 2.0 systems. When plugged |
15 | into an EHCI controller, they are given to a USB 1.1 "companion" | 15 | into an EHCI controller, they are given to a USB 1.1 "companion" |
diff --git a/Documentation/usb/gadget_multi.txt b/Documentation/usb/gadget_multi.txt new file mode 100644 index 000000000000..80f4ef0eb75b --- /dev/null +++ b/Documentation/usb/gadget_multi.txt | |||
@@ -0,0 +1,150 @@ | |||
1 | -*- org -*- | ||
2 | |||
3 | * Overview | ||
4 | |||
5 | The Multifunction Composite Gadget (or g_multi) is a composite gadget | ||
6 | that makes extensive use of the composite framework to provide | ||
7 | a... multifunction gadget. | ||
8 | |||
9 | In it's standard configuration it provides a single USB configuration | ||
10 | with RNDIS[1] (that is Ethernet), USB CDC[2] ACM (that is serial) and | ||
11 | USB Mass Storage functions. | ||
12 | |||
13 | A CDC ECM (Ethernet) function may be turned on via a Kconfig option | ||
14 | and RNDIS can be turned off. If they are both enabled the gadget will | ||
15 | have two configurations -- one with RNDIS and another with CDC ECM[3]. | ||
16 | |||
17 | Please not that if you use non-standard configuration (that is enable | ||
18 | CDC ECM) you may need to change vendor and/or product ID. | ||
19 | |||
20 | * Host drivers | ||
21 | |||
22 | To make use of the gadget one needs to make it work on host side -- | ||
23 | without that there's no hope of achieving anything with the gadget. | ||
24 | As one might expect, things one need to do very from system to system. | ||
25 | |||
26 | ** Linux host drivers | ||
27 | |||
28 | Since the gadget uses standard composite framework and appears as such | ||
29 | to Linux host it does not need any additional drivers on Linux host | ||
30 | side. All the functions are handled by respective drivers developed | ||
31 | for them. | ||
32 | |||
33 | This is also true for two configuration set-up with RNDIS | ||
34 | configuration being the first one. Linux host will use the second | ||
35 | configuration with CDC ECM which should work better under Linux. | ||
36 | |||
37 | ** Windows host drivers | ||
38 | |||
39 | For the gadget two work under Windows two conditions have to be met: | ||
40 | |||
41 | *** Detecting as composite gadget | ||
42 | |||
43 | First of all, Windows need to detect the gadget as an USB composite | ||
44 | gadget which on its own have some conditions[4]. If they are met, | ||
45 | Windows lets USB Generic Parent Driver[5] handle the device which then | ||
46 | tries to much drivers for each individual interface (sort of, don't | ||
47 | get into too many details). | ||
48 | |||
49 | The good news is: you do not have to worry about most of the | ||
50 | conditions! | ||
51 | |||
52 | The only thing to worry is that the gadget has to have a single | ||
53 | configuration so a dual RNDIS and CDC ECM gadget won't work unless you | ||
54 | create a proper INF -- and of course, if you do submit it! | ||
55 | |||
56 | *** Installing drivers for each function | ||
57 | |||
58 | The other, trickier thing is making Windows install drivers for each | ||
59 | individual function. | ||
60 | |||
61 | For mass storage it is trivial since Windows detect it's an interface | ||
62 | implementing USB Mass Storage class and selects appropriate driver. | ||
63 | |||
64 | Things are harder with RDNIS and CDC ACM. | ||
65 | |||
66 | **** RNDIS | ||
67 | |||
68 | To make Windows select RNDIS drivers for the first function in the | ||
69 | gadget, one needs to use the [[file:linux.inf]] file provided with this | ||
70 | document. It "attaches" Window's RNDIS driver to the first interface | ||
71 | of the gadget. | ||
72 | |||
73 | Please note, that while testing we encountered some issues[6] when | ||
74 | RNDIS was not the first interface. You do not need to worry abut it | ||
75 | unless you are trying to develop your own gadget in which case watch | ||
76 | out for this bug. | ||
77 | |||
78 | **** CDC ACM | ||
79 | |||
80 | Similarly, [[file:linux-cdc-acm.inf]] is provided for CDC ACM. | ||
81 | |||
82 | **** Customising the gadget | ||
83 | |||
84 | If you intend to hack the g_multi gadget be advised that rearranging | ||
85 | functions will obviously change interface numbers for each of the | ||
86 | functionality. As an effect provided INFs won't work since they have | ||
87 | interface numbers hard-coded in them (it's not hard to change those | ||
88 | though[7]). | ||
89 | |||
90 | This also means, that after experimenting with g_multi and changing | ||
91 | provided functions one should change gadget's vendor and/or product ID | ||
92 | so there will be no collision with other customised gadgets or the | ||
93 | original gadget. | ||
94 | |||
95 | Failing to comply may cause brain damage after wondering for hours why | ||
96 | things don't work as intended before realising Windows have cached | ||
97 | some drivers information (changing USB port may sometimes help plus | ||
98 | you might try using USBDeview[8] to remove the phantom device). | ||
99 | |||
100 | **** INF testing | ||
101 | |||
102 | Provided INF files have been tested on Windows XP SP3, Windows Vista | ||
103 | and Windows 7, all 32-bit versions. It should work on 64-bit versions | ||
104 | as well. It most likely won't work on Windows prior to Windows XP | ||
105 | SP2. | ||
106 | |||
107 | ** Other systems | ||
108 | |||
109 | At this moment, drivers for any other systems have not been tested. | ||
110 | Knowing how MacOS is based on BSD and BSD is an Open Source it is | ||
111 | believed that it should (read: "I have no idea whether it will") work | ||
112 | out-of-the-box. | ||
113 | |||
114 | For more exotic systems I have even less to say... | ||
115 | |||
116 | Any testing and drivers *are* *welcome*! | ||
117 | |||
118 | * Authors | ||
119 | |||
120 | This document has been written by Michal Nazarewicz | ||
121 | ([[mailto:mina86@mina86.com]]). INF files have been hacked with | ||
122 | support of Marek Szyprowski ([[mailto:m.szyprowski@samsung.com]]) and | ||
123 | Xiaofan Chen ([[mailto:xiaofanc@gmail.com]]) basing on the MS RNDIS | ||
124 | template[9], Microchip's CDC ACM INF file and David Brownell's | ||
125 | ([[mailto:dbrownell@users.sourceforge.net]]) original INF files. | ||
126 | |||
127 | * Footnotes | ||
128 | |||
129 | [1] Remote Network Driver Interface Specification, | ||
130 | [[http://msdn.microsoft.com/en-us/library/ee484414.aspx]]. | ||
131 | |||
132 | [2] Communications Device Class Abstract Control Model, spec for this | ||
133 | and other USB classes can be found at | ||
134 | [[http://www.usb.org/developers/devclass_docs/]]. | ||
135 | |||
136 | [3] CDC Ethernet Control Model. | ||
137 | |||
138 | [4] [[http://msdn.microsoft.com/en-us/library/ff537109(v=VS.85).aspx]] | ||
139 | |||
140 | [5] [[http://msdn.microsoft.com/en-us/library/ff539234(v=VS.85).aspx]] | ||
141 | |||
142 | [6] To put it in some other nice words, Windows failed to respond to | ||
143 | any user input. | ||
144 | |||
145 | [7] You may find [[http://www.cygnal.org/ubb/Forum9/HTML/001050.html]] | ||
146 | useful. | ||
147 | |||
148 | [8] http://www.nirsoft.net/utils/usb_devices_view.html | ||
149 | |||
150 | [9] [[http://msdn.microsoft.com/en-us/library/ff570620.aspx]] | ||
diff --git a/Documentation/usb/gadget_serial.txt b/Documentation/usb/gadget_serial.txt index eac7df94d8e3..61e67f6a20a0 100644 --- a/Documentation/usb/gadget_serial.txt +++ b/Documentation/usb/gadget_serial.txt | |||
@@ -151,88 +151,23 @@ instructions below to install the host side driver. | |||
151 | 151 | ||
152 | Installing the Windows Host ACM Driver | 152 | Installing the Windows Host ACM Driver |
153 | -------------------------------------- | 153 | -------------------------------------- |
154 | To use the Windows ACM driver you must have the files "gserial.inf" | 154 | To use the Windows ACM driver you must have the "linux-cdc-acm.inf" |
155 | and "usbser.sys" together in a folder on the Windows machine. | 155 | file (provided along this document) which supports all recent versions |
156 | 156 | of Windows. | |
157 | The "gserial.inf" file is given here. | ||
158 | |||
159 | -------------------- CUT HERE -------------------- | ||
160 | [Version] | ||
161 | Signature="$Windows NT$" | ||
162 | Class=Ports | ||
163 | ClassGuid={4D36E978-E325-11CE-BFC1-08002BE10318} | ||
164 | Provider=%LINUX% | ||
165 | DriverVer=08/17/2004,0.0.2.0 | ||
166 | ; Copyright (C) 2004 Al Borchers (alborchers@steinerpoint.com) | ||
167 | |||
168 | [Manufacturer] | ||
169 | %LINUX%=GSerialDeviceList | ||
170 | |||
171 | [GSerialDeviceList] | ||
172 | %GSERIAL%=GSerialInstall, USB\VID_0525&PID_A4A7 | ||
173 | |||
174 | [DestinationDirs] | ||
175 | DefaultDestDir=10,System32\Drivers | ||
176 | |||
177 | [GSerialInstall] | ||
178 | CopyFiles=GSerialCopyFiles | ||
179 | AddReg=GSerialAddReg | ||
180 | |||
181 | [GSerialCopyFiles] | ||
182 | usbser.sys | ||
183 | |||
184 | [GSerialAddReg] | ||
185 | HKR,,DevLoader,,*ntkern | ||
186 | HKR,,NTMPDriver,,usbser.sys | ||
187 | HKR,,EnumPropPages32,,"MsPorts.dll,SerialPortPropPageProvider" | ||
188 | |||
189 | [GSerialInstall.Services] | ||
190 | AddService = usbser,0x0002,GSerialService | ||
191 | |||
192 | [GSerialService] | ||
193 | DisplayName = %GSERIAL_DISPLAY_NAME% | ||
194 | ServiceType = 1 ; SERVICE_KERNEL_DRIVER | ||
195 | StartType = 3 ; SERVICE_DEMAND_START | ||
196 | ErrorControl = 1 ; SERVICE_ERROR_NORMAL | ||
197 | ServiceBinary = %10%\System32\Drivers\usbser.sys | ||
198 | LoadOrderGroup = Base | ||
199 | |||
200 | [Strings] | ||
201 | LINUX = "Linux" | ||
202 | GSERIAL = "Gadget Serial" | ||
203 | GSERIAL_DISPLAY_NAME = "USB Gadget Serial Driver" | ||
204 | -------------------- CUT HERE -------------------- | ||
205 | |||
206 | The "usbser.sys" file comes with various versions of Windows. | ||
207 | For example, it can be found on Windows XP typically in | ||
208 | |||
209 | C:\WINDOWS\Driver Cache\i386\driver.cab | ||
210 | |||
211 | Or it can be found on the Windows 98SE CD in the "win98" folder | ||
212 | in the "DRIVER11.CAB" through "DRIVER20.CAB" cab files. You will | ||
213 | need the DOS "expand" program, the Cygwin "cabextract" program, or | ||
214 | a similar program to unpack these cab files and extract "usbser.sys". | ||
215 | |||
216 | For example, to extract "usbser.sys" into the current directory | ||
217 | on Windows XP, open a DOS window and run a command like | ||
218 | |||
219 | expand C:\WINDOWS\Driver~1\i386\driver.cab -F:usbser.sys . | ||
220 | |||
221 | (Thanks to Nishant Kamat for pointing out this DOS command.) | ||
222 | 157 | ||
223 | When the gadget serial driver is loaded and the USB device connected | 158 | When the gadget serial driver is loaded and the USB device connected |
224 | to the Windows host with a USB cable, Windows should recognize the | 159 | to the Windows host with a USB cable, Windows should recognize the |
225 | gadget serial device and ask for a driver. Tell Windows to find the | 160 | gadget serial device and ask for a driver. Tell Windows to find the |
226 | driver in the folder that contains "gserial.inf" and "usbser.sys". | 161 | driver in the folder that contains the "linux-cdc-acm.inf" file. |
227 | 162 | ||
228 | For example, on Windows XP, when the gadget serial device is first | 163 | For example, on Windows XP, when the gadget serial device is first |
229 | plugged in, the "Found New Hardware Wizard" starts up. Select | 164 | plugged in, the "Found New Hardware Wizard" starts up. Select |
230 | "Install from a list or specific location (Advanced)", then on | 165 | "Install from a list or specific location (Advanced)", then on the |
231 | the next screen select "Include this location in the search" and | 166 | next screen select "Include this location in the search" and enter the |
232 | enter the path or browse to the folder containing "gserial.inf" and | 167 | path or browse to the folder containing the "linux-cdc-acm.inf" file. |
233 | "usbser.sys". Windows will complain that the Gadget Serial driver | 168 | Windows will complain that the Gadget Serial driver has not passed |
234 | has not passed Windows Logo testing, but select "Continue anyway" | 169 | Windows Logo testing, but select "Continue anyway" and finish the |
235 | and finish the driver installation. | 170 | driver installation. |
236 | 171 | ||
237 | On Windows XP, in the "Device Manager" (under "Control Panel", | 172 | On Windows XP, in the "Device Manager" (under "Control Panel", |
238 | "System", "Hardware") expand the "Ports (COM & LPT)" entry and you | 173 | "System", "Hardware") expand the "Ports (COM & LPT)" entry and you |
@@ -345,5 +280,3 @@ you should be able to send data back and forth between the gadget | |||
345 | side and host side systems. Anything you type on the terminal | 280 | side and host side systems. Anything you type on the terminal |
346 | window on the gadget side should appear in the terminal window on | 281 | window on the gadget side should appear in the terminal window on |
347 | the host side and vice versa. | 282 | the host side and vice versa. |
348 | |||
349 | |||
diff --git a/Documentation/usb/hotplug.txt b/Documentation/usb/hotplug.txt index f53170665f37..4c945716a660 100644 --- a/Documentation/usb/hotplug.txt +++ b/Documentation/usb/hotplug.txt | |||
@@ -10,7 +10,7 @@ immediately usable. That means the system must do many things, including: | |||
10 | 10 | ||
11 | - Bind a driver to that device. Bus frameworks do that using a | 11 | - Bind a driver to that device. Bus frameworks do that using a |
12 | device driver's probe() routine. | 12 | device driver's probe() routine. |
13 | 13 | ||
14 | - Tell other subsystems to configure the new device. Print | 14 | - Tell other subsystems to configure the new device. Print |
15 | queues may need to be enabled, networks brought up, disk | 15 | queues may need to be enabled, networks brought up, disk |
16 | partitions mounted, and so on. In some cases these will | 16 | partitions mounted, and so on. In some cases these will |
@@ -84,7 +84,7 @@ USB MODUTILS SUPPORT | |||
84 | Current versions of module-init-tools will create a "modules.usbmap" file | 84 | Current versions of module-init-tools will create a "modules.usbmap" file |
85 | which contains the entries from each driver's MODULE_DEVICE_TABLE. Such | 85 | which contains the entries from each driver's MODULE_DEVICE_TABLE. Such |
86 | files can be used by various user mode policy agents to make sure all the | 86 | files can be used by various user mode policy agents to make sure all the |
87 | right driver modules get loaded, either at boot time or later. | 87 | right driver modules get loaded, either at boot time or later. |
88 | 88 | ||
89 | See <linux/usb.h> for full information about such table entries; or look | 89 | See <linux/usb.h> for full information about such table entries; or look |
90 | at existing drivers. Each table entry describes one or more criteria to | 90 | at existing drivers. Each table entry describes one or more criteria to |
diff --git a/Documentation/usb/linux-cdc-acm.inf b/Documentation/usb/linux-cdc-acm.inf new file mode 100644 index 000000000000..612e7220fb29 --- /dev/null +++ b/Documentation/usb/linux-cdc-acm.inf | |||
@@ -0,0 +1,107 @@ | |||
1 | ; Windows USB CDC ACM Setup File | ||
2 | |||
3 | ; Based on INF template which was: | ||
4 | ; Copyright (c) 2000 Microsoft Corporation | ||
5 | ; Copyright (c) 2007 Microchip Technology Inc. | ||
6 | ; likely to be covered by the MLPL as found at: | ||
7 | ; <http://msdn.microsoft.com/en-us/cc300389.aspx#MLPL>. | ||
8 | ; For use only on Windows operating systems. | ||
9 | |||
10 | [Version] | ||
11 | Signature="$Windows NT$" | ||
12 | Class=Ports | ||
13 | ClassGuid={4D36E978-E325-11CE-BFC1-08002BE10318} | ||
14 | Provider=%Linux% | ||
15 | DriverVer=11/15/2007,5.1.2600.0 | ||
16 | |||
17 | [Manufacturer] | ||
18 | %Linux%=DeviceList, NTamd64 | ||
19 | |||
20 | [DestinationDirs] | ||
21 | DefaultDestDir=12 | ||
22 | |||
23 | |||
24 | ;------------------------------------------------------------------------------ | ||
25 | ; Windows 2000/XP/Vista-32bit Sections | ||
26 | ;------------------------------------------------------------------------------ | ||
27 | |||
28 | [DriverInstall.nt] | ||
29 | include=mdmcpq.inf | ||
30 | CopyFiles=DriverCopyFiles.nt | ||
31 | AddReg=DriverInstall.nt.AddReg | ||
32 | |||
33 | [DriverCopyFiles.nt] | ||
34 | usbser.sys,,,0x20 | ||
35 | |||
36 | [DriverInstall.nt.AddReg] | ||
37 | HKR,,DevLoader,,*ntkern | ||
38 | HKR,,NTMPDriver,,USBSER.sys | ||
39 | HKR,,EnumPropPages32,,"MsPorts.dll,SerialPortPropPageProvider" | ||
40 | |||
41 | [DriverInstall.nt.Services] | ||
42 | AddService=usbser, 0x00000002, DriverService.nt | ||
43 | |||
44 | [DriverService.nt] | ||
45 | DisplayName=%SERVICE% | ||
46 | ServiceType=1 | ||
47 | StartType=3 | ||
48 | ErrorControl=1 | ||
49 | ServiceBinary=%12%\USBSER.sys | ||
50 | |||
51 | ;------------------------------------------------------------------------------ | ||
52 | ; Vista-64bit Sections | ||
53 | ;------------------------------------------------------------------------------ | ||
54 | |||
55 | [DriverInstall.NTamd64] | ||
56 | include=mdmcpq.inf | ||
57 | CopyFiles=DriverCopyFiles.NTamd64 | ||
58 | AddReg=DriverInstall.NTamd64.AddReg | ||
59 | |||
60 | [DriverCopyFiles.NTamd64] | ||
61 | USBSER.sys,,,0x20 | ||
62 | |||
63 | [DriverInstall.NTamd64.AddReg] | ||
64 | HKR,,DevLoader,,*ntkern | ||
65 | HKR,,NTMPDriver,,USBSER.sys | ||
66 | HKR,,EnumPropPages32,,"MsPorts.dll,SerialPortPropPageProvider" | ||
67 | |||
68 | [DriverInstall.NTamd64.Services] | ||
69 | AddService=usbser, 0x00000002, DriverService.NTamd64 | ||
70 | |||
71 | [DriverService.NTamd64] | ||
72 | DisplayName=%SERVICE% | ||
73 | ServiceType=1 | ||
74 | StartType=3 | ||
75 | ErrorControl=1 | ||
76 | ServiceBinary=%12%\USBSER.sys | ||
77 | |||
78 | |||
79 | ;------------------------------------------------------------------------------ | ||
80 | ; Vendor and Product ID Definitions | ||
81 | ;------------------------------------------------------------------------------ | ||
82 | ; When developing your USB device, the VID and PID used in the PC side | ||
83 | ; application program and the firmware on the microcontroller must match. | ||
84 | ; Modify the below line to use your VID and PID. Use the format as shown | ||
85 | ; below. | ||
86 | ; Note: One INF file can be used for multiple devices with different | ||
87 | ; VID and PIDs. For each supported device, append | ||
88 | ; ",USB\VID_xxxx&PID_yyyy" to the end of the line. | ||
89 | ;------------------------------------------------------------------------------ | ||
90 | [SourceDisksFiles] | ||
91 | [SourceDisksNames] | ||
92 | [DeviceList] | ||
93 | %DESCRIPTION%=DriverInstall, USB\VID_0525&PID_A4A7, USB\VID_0525&PID_A4AB&MI_02 | ||
94 | |||
95 | [DeviceList.NTamd64] | ||
96 | %DESCRIPTION%=DriverInstall, USB\VID_0525&PID_A4A7, USB\VID_0525&PID_A4AB&MI_02 | ||
97 | |||
98 | |||
99 | ;------------------------------------------------------------------------------ | ||
100 | ; String Definitions | ||
101 | ;------------------------------------------------------------------------------ | ||
102 | ;Modify these strings to customize your device | ||
103 | ;------------------------------------------------------------------------------ | ||
104 | [Strings] | ||
105 | Linux = "Linux Developer Community" | ||
106 | DESCRIPTION = "Gadget Serial" | ||
107 | SERVICE = "USB RS-232 Emulation Driver" | ||
diff --git a/Documentation/usb/linux.inf b/Documentation/usb/linux.inf index af71d87d9e94..4dee95851224 100644 --- a/Documentation/usb/linux.inf +++ b/Documentation/usb/linux.inf | |||
@@ -1,200 +1,66 @@ | |||
1 | ; MS-Windows driver config matching some basic modes of the | 1 | ; Based on template INF file found at |
2 | ; Linux-USB Ethernet/RNDIS gadget firmware: | 2 | ; <http://msdn.microsoft.com/en-us/library/ff570620.aspx> |
3 | ; | 3 | ; which was: |
4 | ; - RNDIS plus CDC Ethernet ... this may be familiar as a DOCSIS | 4 | ; Copyright (c) Microsoft Corporation |
5 | ; cable modem profile, and supports most non-Microsoft USB hosts | 5 | ; and released under the MLPL as found at: |
6 | ; | 6 | ; <http://msdn.microsoft.com/en-us/cc300389.aspx#MLPL>. |
7 | ; - RNDIS plus CDC Subset ... used by hardware that incapable of | 7 | ; For use only on Windows operating systems. |
8 | ; full CDC Ethernet support. | ||
9 | ; | ||
10 | ; Microsoft only directly supports RNDIS drivers, and bundled them into XP. | ||
11 | ; The Microsoft "Remote NDIS USB Driver Kit" is currently found at: | ||
12 | ; http://www.microsoft.com/whdc/device/network/ndis/rmndis.mspx | ||
13 | |||
14 | 8 | ||
15 | [Version] | 9 | [Version] |
16 | Signature = "$CHICAGO$" | 10 | Signature = "$Windows NT$" |
17 | Class = Net | 11 | Class = Net |
18 | ClassGUID = {4d36e972-e325-11ce-bfc1-08002be10318} | 12 | ClassGUID = {4d36e972-e325-11ce-bfc1-08002be10318} |
19 | Provider = %Linux% | 13 | Provider = %Linux% |
20 | Compatible = 1 | 14 | DriverVer = 06/21/2006,6.0.6000.16384 |
21 | MillenniumPreferred = .ME | ||
22 | DriverVer = 03/30/2004,0.0.0.0 | ||
23 | ; catalog file would be used by WHQL | ||
24 | ;CatalogFile = Linux.cat | ||
25 | 15 | ||
26 | [Manufacturer] | 16 | [Manufacturer] |
27 | %Linux% = LinuxDevices,NT.5.1 | 17 | %Linux% = LinuxDevices,NTx86,NTamd64,NTia64 |
18 | |||
19 | ; Decoration for x86 architecture | ||
20 | [LinuxDevices.NTx86] | ||
21 | %LinuxDevice% = RNDIS.NT.5.1, USB\VID_0525&PID_a4a2, USB\VID_0525&PID_a4ab&MI_00 | ||
28 | 22 | ||
29 | [LinuxDevices] | 23 | ; Decoration for x64 architecture |
30 | ; NetChip IDs, used by both firmware modes | 24 | [LinuxDevices.NTamd64] |
31 | %LinuxDevice% = RNDIS, USB\VID_0525&PID_a4a2 | 25 | %LinuxDevice% = RNDIS.NT.5.1, USB\VID_0525&PID_a4a2, USB\VID_0525&PID_a4ab&MI_00 |
32 | 26 | ||
33 | [LinuxDevices.NT.5.1] | 27 | ; Decoration for ia64 architecture |
34 | %LinuxDevice% = RNDIS.NT.5.1, USB\VID_0525&PID_a4a2 | 28 | [LinuxDevices.NTia64] |
29 | %LinuxDevice% = RNDIS.NT.5.1, USB\VID_0525&PID_a4a2, USB\VID_0525&PID_a4ab&MI_00 | ||
35 | 30 | ||
31 | ;@@@ This is the common setting for setup | ||
36 | [ControlFlags] | 32 | [ControlFlags] |
37 | ExcludeFromSelect=* | 33 | ExcludeFromSelect=* |
38 | 34 | ||
39 | ; Windows 98, Windows 98 Second Edition specific sections -------- | 35 | ; DDInstall section |
40 | 36 | ; References the in-build Netrndis.inf | |
41 | [RNDIS] | ||
42 | DeviceID = usb8023 | ||
43 | MaxInstance = 512 | ||
44 | DriverVer = 03/30/2004,0.0.0.0 | ||
45 | AddReg = RNDIS_AddReg_98, RNDIS_AddReg_Common | ||
46 | |||
47 | [RNDIS_AddReg_98] | ||
48 | HKR, , DevLoader, 0, *ndis | ||
49 | HKR, , DeviceVxDs, 0, usb8023.sys | ||
50 | HKR, NDIS, LogDriverName, 0, "usb8023" | ||
51 | HKR, NDIS, MajorNdisVersion, 1, 5 | ||
52 | HKR, NDIS, MinorNdisVersion, 1, 0 | ||
53 | HKR, Ndi\Interfaces, DefUpper, 0, "ndis3,ndis4,ndis5" | ||
54 | HKR, Ndi\Interfaces, DefLower, 0, "ethernet" | ||
55 | HKR, Ndi\Interfaces, UpperRange, 0, "ndis3,ndis4,ndis5" | ||
56 | HKR, Ndi\Interfaces, LowerRange, 0, "ethernet" | ||
57 | HKR, Ndi\Install, ndis3, 0, "RNDIS_Install_98" | ||
58 | HKR, Ndi\Install, ndis4, 0, "RNDIS_Install_98" | ||
59 | HKR, Ndi\Install, ndis5, 0, "RNDIS_Install_98" | ||
60 | HKR, Ndi, DeviceId, 0, "USB\VID_0525&PID_a4a2" | ||
61 | |||
62 | [RNDIS_Install_98] | ||
63 | CopyFiles=RNDIS_CopyFiles_98 | ||
64 | |||
65 | [RNDIS_CopyFiles_98] | ||
66 | usb8023.sys, usb8023w.sys, , 0 | ||
67 | rndismp.sys, rndismpw.sys, , 0 | ||
68 | |||
69 | ; Windows Millennium Edition specific sections -------------------- | ||
70 | |||
71 | [RNDIS.ME] | ||
72 | DeviceID = usb8023 | ||
73 | MaxInstance = 512 | ||
74 | DriverVer = 03/30/2004,0.0.0.0 | ||
75 | AddReg = RNDIS_AddReg_ME, RNDIS_AddReg_Common | ||
76 | Characteristics = 0x84 ; NCF_PHYSICAL + NCF_HAS_UI | ||
77 | BusType = 15 | ||
78 | |||
79 | [RNDIS_AddReg_ME] | ||
80 | HKR, , DevLoader, 0, *ndis | ||
81 | HKR, , DeviceVxDs, 0, usb8023.sys | ||
82 | HKR, NDIS, LogDriverName, 0, "usb8023" | ||
83 | HKR, NDIS, MajorNdisVersion, 1, 5 | ||
84 | HKR, NDIS, MinorNdisVersion, 1, 0 | ||
85 | HKR, Ndi\Interfaces, DefUpper, 0, "ndis3,ndis4,ndis5" | ||
86 | HKR, Ndi\Interfaces, DefLower, 0, "ethernet" | ||
87 | HKR, Ndi\Interfaces, UpperRange, 0, "ndis3,ndis4,ndis5" | ||
88 | HKR, Ndi\Interfaces, LowerRange, 0, "ethernet" | ||
89 | HKR, Ndi\Install, ndis3, 0, "RNDIS_Install_ME" | ||
90 | HKR, Ndi\Install, ndis4, 0, "RNDIS_Install_ME" | ||
91 | HKR, Ndi\Install, ndis5, 0, "RNDIS_Install_ME" | ||
92 | HKR, Ndi, DeviceId, 0, "USB\VID_0525&PID_a4a2" | ||
93 | |||
94 | [RNDIS_Install_ME] | ||
95 | CopyFiles=RNDIS_CopyFiles_ME | ||
96 | |||
97 | [RNDIS_CopyFiles_ME] | ||
98 | usb8023.sys, usb8023m.sys, , 0 | ||
99 | rndismp.sys, rndismpm.sys, , 0 | ||
100 | |||
101 | ; Windows 2000 specific sections --------------------------------- | ||
102 | |||
103 | [RNDIS.NT] | ||
104 | Characteristics = 0x84 ; NCF_PHYSICAL + NCF_HAS_UI | ||
105 | BusType = 15 | ||
106 | DriverVer = 03/30/2004,0.0.0.0 | ||
107 | AddReg = RNDIS_AddReg_NT, RNDIS_AddReg_Common | ||
108 | CopyFiles = RNDIS_CopyFiles_NT | ||
109 | |||
110 | [RNDIS.NT.Services] | ||
111 | AddService = USB_RNDIS, 2, RNDIS_ServiceInst_NT, RNDIS_EventLog | ||
112 | |||
113 | [RNDIS_CopyFiles_NT] | ||
114 | ; no rename of files on Windows 2000, use the 'k' names as is | ||
115 | usb8023k.sys, , , 0 | ||
116 | rndismpk.sys, , , 0 | ||
117 | |||
118 | [RNDIS_ServiceInst_NT] | ||
119 | DisplayName = %ServiceDisplayName% | ||
120 | ServiceType = 1 | ||
121 | StartType = 3 | ||
122 | ErrorControl = 1 | ||
123 | ServiceBinary = %12%\usb8023k.sys | ||
124 | LoadOrderGroup = NDIS | ||
125 | AddReg = RNDIS_WMI_AddReg_NT | ||
126 | |||
127 | [RNDIS_WMI_AddReg_NT] | ||
128 | HKR, , MofImagePath, 0x00020000, "System32\drivers\rndismpk.sys" | ||
129 | |||
130 | ; Windows XP specific sections ----------------------------------- | ||
131 | |||
132 | [RNDIS.NT.5.1] | 37 | [RNDIS.NT.5.1] |
133 | Characteristics = 0x84 ; NCF_PHYSICAL + NCF_HAS_UI | 38 | Characteristics = 0x84 ; NCF_PHYSICAL + NCF_HAS_UI |
134 | BusType = 15 | 39 | BusType = 15 |
135 | DriverVer = 03/30/2004,0.0.0.0 | 40 | ; NEVER REMOVE THE FOLLOWING REFERENCE FOR NETRNDIS.INF |
136 | AddReg = RNDIS_AddReg_NT, RNDIS_AddReg_Common | 41 | include = netrndis.inf |
137 | ; no copyfiles - the files are already in place | 42 | needs = Usb_Rndis.ndi |
138 | 43 | AddReg = Rndis_AddReg_Vista | |
44 | |||
45 | ; DDInstal.Services section | ||
139 | [RNDIS.NT.5.1.Services] | 46 | [RNDIS.NT.5.1.Services] |
140 | AddService = USB_RNDIS, 2, RNDIS_ServiceInst_51, RNDIS_EventLog | 47 | include = netrndis.inf |
141 | 48 | needs = Usb_Rndis.ndi.Services | |
142 | [RNDIS_ServiceInst_51] | 49 | |
143 | DisplayName = %ServiceDisplayName% | 50 | ; Optional registry settings. You can modify as needed. |
144 | ServiceType = 1 | 51 | [RNDIS_AddReg_Vista] |
145 | StartType = 3 | 52 | HKR, NDI\params\VistaProperty, ParamDesc, 0, %Vista_Property% |
146 | ErrorControl = 1 | 53 | HKR, NDI\params\VistaProperty, type, 0, "edit" |
147 | ServiceBinary = %12%\usb8023.sys | 54 | HKR, NDI\params\VistaProperty, LimitText, 0, "12" |
148 | LoadOrderGroup = NDIS | 55 | HKR, NDI\params\VistaProperty, UpperCase, 0, "1" |
149 | AddReg = RNDIS_WMI_AddReg_51 | 56 | HKR, NDI\params\VistaProperty, default, 0, " " |
150 | 57 | HKR, NDI\params\VistaProperty, optional, 0, "1" | |
151 | [RNDIS_WMI_AddReg_51] | 58 | |
152 | HKR, , MofImagePath, 0x00020000, "System32\drivers\rndismp.sys" | 59 | ; No sys copyfiles - the sys files are already in-build |
153 | 60 | ; (part of the operating system). | |
154 | ; Windows 2000 and Windows XP common sections -------------------- | 61 | ; We do not support XP SP1-, 2003 SP1-, ME, 9x. |
155 | |||
156 | [RNDIS_AddReg_NT] | ||
157 | HKR, Ndi, Service, 0, "USB_RNDIS" | ||
158 | HKR, Ndi\Interfaces, UpperRange, 0, "ndis5" | ||
159 | HKR, Ndi\Interfaces, LowerRange, 0, "ethernet" | ||
160 | |||
161 | [RNDIS_EventLog] | ||
162 | AddReg = RNDIS_EventLog_AddReg | ||
163 | |||
164 | [RNDIS_EventLog_AddReg] | ||
165 | HKR, , EventMessageFile, 0x00020000, "%%SystemRoot%%\System32\netevent.dll" | ||
166 | HKR, , TypesSupported, 0x00010001, 7 | ||
167 | |||
168 | ; Common Sections ------------------------------------------------- | ||
169 | |||
170 | [RNDIS_AddReg_Common] | ||
171 | HKR, NDI\params\NetworkAddress, ParamDesc, 0, %NetworkAddress% | ||
172 | HKR, NDI\params\NetworkAddress, type, 0, "edit" | ||
173 | HKR, NDI\params\NetworkAddress, LimitText, 0, "12" | ||
174 | HKR, NDI\params\NetworkAddress, UpperCase, 0, "1" | ||
175 | HKR, NDI\params\NetworkAddress, default, 0, " " | ||
176 | HKR, NDI\params\NetworkAddress, optional, 0, "1" | ||
177 | |||
178 | [SourceDisksNames] | ||
179 | 1=%SourceDisk%,,1 | ||
180 | |||
181 | [SourceDisksFiles] | ||
182 | usb8023m.sys=1 | ||
183 | rndismpm.sys=1 | ||
184 | usb8023w.sys=1 | ||
185 | rndismpw.sys=1 | ||
186 | usb8023k.sys=1 | ||
187 | rndismpk.sys=1 | ||
188 | |||
189 | [DestinationDirs] | ||
190 | RNDIS_CopyFiles_98 = 10, system32/drivers | ||
191 | RNDIS_CopyFiles_ME = 10, system32/drivers | ||
192 | RNDIS_CopyFiles_NT = 12 | ||
193 | 62 | ||
194 | [Strings] | 63 | [Strings] |
195 | ServiceDisplayName = "USB Remote NDIS Network Device Driver" | ||
196 | NetworkAddress = "Network Address" | ||
197 | Linux = "Linux Developer Community" | 64 | Linux = "Linux Developer Community" |
198 | LinuxDevice = "Linux USB Ethernet/RNDIS Gadget" | 65 | LinuxDevice = "Linux USB Ethernet/RNDIS Gadget" |
199 | SourceDisk = "Ethernet/RNDIS Gadget Driver Install Disk" | 66 | Vista_Property = "Optional Vista Property" |
200 | |||
diff --git a/Documentation/video4linux/v4l2-controls.txt b/Documentation/video4linux/v4l2-controls.txt new file mode 100644 index 000000000000..8773778d23fc --- /dev/null +++ b/Documentation/video4linux/v4l2-controls.txt | |||
@@ -0,0 +1,648 @@ | |||
1 | Introduction | ||
2 | ============ | ||
3 | |||
4 | The V4L2 control API seems simple enough, but quickly becomes very hard to | ||
5 | implement correctly in drivers. But much of the code needed to handle controls | ||
6 | is actually not driver specific and can be moved to the V4L core framework. | ||
7 | |||
8 | After all, the only part that a driver developer is interested in is: | ||
9 | |||
10 | 1) How do I add a control? | ||
11 | 2) How do I set the control's value? (i.e. s_ctrl) | ||
12 | |||
13 | And occasionally: | ||
14 | |||
15 | 3) How do I get the control's value? (i.e. g_volatile_ctrl) | ||
16 | 4) How do I validate the user's proposed control value? (i.e. try_ctrl) | ||
17 | |||
18 | All the rest is something that can be done centrally. | ||
19 | |||
20 | The control framework was created in order to implement all the rules of the | ||
21 | V4L2 specification with respect to controls in a central place. And to make | ||
22 | life as easy as possible for the driver developer. | ||
23 | |||
24 | Note that the control framework relies on the presence of a struct v4l2_device | ||
25 | for V4L2 drivers and struct v4l2_subdev for sub-device drivers. | ||
26 | |||
27 | |||
28 | Objects in the framework | ||
29 | ======================== | ||
30 | |||
31 | There are two main objects: | ||
32 | |||
33 | The v4l2_ctrl object describes the control properties and keeps track of the | ||
34 | control's value (both the current value and the proposed new value). | ||
35 | |||
36 | v4l2_ctrl_handler is the object that keeps track of controls. It maintains a | ||
37 | list of v4l2_ctrl objects that it owns and another list of references to | ||
38 | controls, possibly to controls owned by other handlers. | ||
39 | |||
40 | |||
41 | Basic usage for V4L2 and sub-device drivers | ||
42 | =========================================== | ||
43 | |||
44 | 1) Prepare the driver: | ||
45 | |||
46 | 1.1) Add the handler to your driver's top-level struct: | ||
47 | |||
48 | struct foo_dev { | ||
49 | ... | ||
50 | struct v4l2_ctrl_handler ctrl_handler; | ||
51 | ... | ||
52 | }; | ||
53 | |||
54 | struct foo_dev *foo; | ||
55 | |||
56 | 1.2) Initialize the handler: | ||
57 | |||
58 | v4l2_ctrl_handler_init(&foo->ctrl_handler, nr_of_controls); | ||
59 | |||
60 | The second argument is a hint telling the function how many controls this | ||
61 | handler is expected to handle. It will allocate a hashtable based on this | ||
62 | information. It is a hint only. | ||
63 | |||
64 | 1.3) Hook the control handler into the driver: | ||
65 | |||
66 | 1.3.1) For V4L2 drivers do this: | ||
67 | |||
68 | struct foo_dev { | ||
69 | ... | ||
70 | struct v4l2_device v4l2_dev; | ||
71 | ... | ||
72 | struct v4l2_ctrl_handler ctrl_handler; | ||
73 | ... | ||
74 | }; | ||
75 | |||
76 | foo->v4l2_dev.ctrl_handler = &foo->ctrl_handler; | ||
77 | |||
78 | Where foo->v4l2_dev is of type struct v4l2_device. | ||
79 | |||
80 | Finally, remove all control functions from your v4l2_ioctl_ops: | ||
81 | vidioc_queryctrl, vidioc_querymenu, vidioc_g_ctrl, vidioc_s_ctrl, | ||
82 | vidioc_g_ext_ctrls, vidioc_try_ext_ctrls and vidioc_s_ext_ctrls. | ||
83 | Those are now no longer needed. | ||
84 | |||
85 | 1.3.2) For sub-device drivers do this: | ||
86 | |||
87 | struct foo_dev { | ||
88 | ... | ||
89 | struct v4l2_subdev sd; | ||
90 | ... | ||
91 | struct v4l2_ctrl_handler ctrl_handler; | ||
92 | ... | ||
93 | }; | ||
94 | |||
95 | foo->sd.ctrl_handler = &foo->ctrl_handler; | ||
96 | |||
97 | Where foo->sd is of type struct v4l2_subdev. | ||
98 | |||
99 | And set all core control ops in your struct v4l2_subdev_core_ops to these | ||
100 | helpers: | ||
101 | |||
102 | .queryctrl = v4l2_subdev_queryctrl, | ||
103 | .querymenu = v4l2_subdev_querymenu, | ||
104 | .g_ctrl = v4l2_subdev_g_ctrl, | ||
105 | .s_ctrl = v4l2_subdev_s_ctrl, | ||
106 | .g_ext_ctrls = v4l2_subdev_g_ext_ctrls, | ||
107 | .try_ext_ctrls = v4l2_subdev_try_ext_ctrls, | ||
108 | .s_ext_ctrls = v4l2_subdev_s_ext_ctrls, | ||
109 | |||
110 | Note: this is a temporary solution only. Once all V4L2 drivers that depend | ||
111 | on subdev drivers are converted to the control framework these helpers will | ||
112 | no longer be needed. | ||
113 | |||
114 | 1.4) Clean up the handler at the end: | ||
115 | |||
116 | v4l2_ctrl_handler_free(&foo->ctrl_handler); | ||
117 | |||
118 | |||
119 | 2) Add controls: | ||
120 | |||
121 | You add non-menu controls by calling v4l2_ctrl_new_std: | ||
122 | |||
123 | struct v4l2_ctrl *v4l2_ctrl_new_std(struct v4l2_ctrl_handler *hdl, | ||
124 | const struct v4l2_ctrl_ops *ops, | ||
125 | u32 id, s32 min, s32 max, u32 step, s32 def); | ||
126 | |||
127 | Menu controls are added by calling v4l2_ctrl_new_std_menu: | ||
128 | |||
129 | struct v4l2_ctrl *v4l2_ctrl_new_std_menu(struct v4l2_ctrl_handler *hdl, | ||
130 | const struct v4l2_ctrl_ops *ops, | ||
131 | u32 id, s32 max, s32 skip_mask, s32 def); | ||
132 | |||
133 | These functions are typically called right after the v4l2_ctrl_handler_init: | ||
134 | |||
135 | v4l2_ctrl_handler_init(&foo->ctrl_handler, nr_of_controls); | ||
136 | v4l2_ctrl_new_std(&foo->ctrl_handler, &foo_ctrl_ops, | ||
137 | V4L2_CID_BRIGHTNESS, 0, 255, 1, 128); | ||
138 | v4l2_ctrl_new_std(&foo->ctrl_handler, &foo_ctrl_ops, | ||
139 | V4L2_CID_CONTRAST, 0, 255, 1, 128); | ||
140 | v4l2_ctrl_new_std_menu(&foo->ctrl_handler, &foo_ctrl_ops, | ||
141 | V4L2_CID_POWER_LINE_FREQUENCY, | ||
142 | V4L2_CID_POWER_LINE_FREQUENCY_60HZ, 0, | ||
143 | V4L2_CID_POWER_LINE_FREQUENCY_DISABLED); | ||
144 | ... | ||
145 | if (foo->ctrl_handler.error) { | ||
146 | int err = foo->ctrl_handler.error; | ||
147 | |||
148 | v4l2_ctrl_handler_free(&foo->ctrl_handler); | ||
149 | return err; | ||
150 | } | ||
151 | |||
152 | The v4l2_ctrl_new_std function returns the v4l2_ctrl pointer to the new | ||
153 | control, but if you do not need to access the pointer outside the control ops, | ||
154 | then there is no need to store it. | ||
155 | |||
156 | The v4l2_ctrl_new_std function will fill in most fields based on the control | ||
157 | ID except for the min, max, step and default values. These are passed in the | ||
158 | last four arguments. These values are driver specific while control attributes | ||
159 | like type, name, flags are all global. The control's current value will be set | ||
160 | to the default value. | ||
161 | |||
162 | The v4l2_ctrl_new_std_menu function is very similar but it is used for menu | ||
163 | controls. There is no min argument since that is always 0 for menu controls, | ||
164 | and instead of a step there is a skip_mask argument: if bit X is 1, then menu | ||
165 | item X is skipped. | ||
166 | |||
167 | Note that if something fails, the function will return NULL or an error and | ||
168 | set ctrl_handler->error to the error code. If ctrl_handler->error was already | ||
169 | set, then it will just return and do nothing. This is also true for | ||
170 | v4l2_ctrl_handler_init if it cannot allocate the internal data structure. | ||
171 | |||
172 | This makes it easy to init the handler and just add all controls and only check | ||
173 | the error code at the end. Saves a lot of repetitive error checking. | ||
174 | |||
175 | It is recommended to add controls in ascending control ID order: it will be | ||
176 | a bit faster that way. | ||
177 | |||
178 | 3) Optionally force initial control setup: | ||
179 | |||
180 | v4l2_ctrl_handler_setup(&foo->ctrl_handler); | ||
181 | |||
182 | This will call s_ctrl for all controls unconditionally. Effectively this | ||
183 | initializes the hardware to the default control values. It is recommended | ||
184 | that you do this as this ensures that both the internal data structures and | ||
185 | the hardware are in sync. | ||
186 | |||
187 | 4) Finally: implement the v4l2_ctrl_ops | ||
188 | |||
189 | static const struct v4l2_ctrl_ops foo_ctrl_ops = { | ||
190 | .s_ctrl = foo_s_ctrl, | ||
191 | }; | ||
192 | |||
193 | Usually all you need is s_ctrl: | ||
194 | |||
195 | static int foo_s_ctrl(struct v4l2_ctrl *ctrl) | ||
196 | { | ||
197 | struct foo *state = container_of(ctrl->handler, struct foo, ctrl_handler); | ||
198 | |||
199 | switch (ctrl->id) { | ||
200 | case V4L2_CID_BRIGHTNESS: | ||
201 | write_reg(0x123, ctrl->val); | ||
202 | break; | ||
203 | case V4L2_CID_CONTRAST: | ||
204 | write_reg(0x456, ctrl->val); | ||
205 | break; | ||
206 | } | ||
207 | return 0; | ||
208 | } | ||
209 | |||
210 | The control ops are called with the v4l2_ctrl pointer as argument. | ||
211 | The new control value has already been validated, so all you need to do is | ||
212 | to actually update the hardware registers. | ||
213 | |||
214 | You're done! And this is sufficient for most of the drivers we have. No need | ||
215 | to do any validation of control values, or implement QUERYCTRL/QUERYMENU. And | ||
216 | G/S_CTRL as well as G/TRY/S_EXT_CTRLS are automatically supported. | ||
217 | |||
218 | |||
219 | ============================================================================== | ||
220 | |||
221 | The remainder of this document deals with more advanced topics and scenarios. | ||
222 | In practice the basic usage as described above is sufficient for most drivers. | ||
223 | |||
224 | =============================================================================== | ||
225 | |||
226 | |||
227 | Inheriting Controls | ||
228 | =================== | ||
229 | |||
230 | When a sub-device is registered with a V4L2 driver by calling | ||
231 | v4l2_device_register_subdev() and the ctrl_handler fields of both v4l2_subdev | ||
232 | and v4l2_device are set, then the controls of the subdev will become | ||
233 | automatically available in the V4L2 driver as well. If the subdev driver | ||
234 | contains controls that already exist in the V4L2 driver, then those will be | ||
235 | skipped (so a V4L2 driver can always override a subdev control). | ||
236 | |||
237 | What happens here is that v4l2_device_register_subdev() calls | ||
238 | v4l2_ctrl_add_handler() adding the controls of the subdev to the controls | ||
239 | of v4l2_device. | ||
240 | |||
241 | |||
242 | Accessing Control Values | ||
243 | ======================== | ||
244 | |||
245 | The v4l2_ctrl struct contains these two unions: | ||
246 | |||
247 | /* The current control value. */ | ||
248 | union { | ||
249 | s32 val; | ||
250 | s64 val64; | ||
251 | char *string; | ||
252 | } cur; | ||
253 | |||
254 | /* The new control value. */ | ||
255 | union { | ||
256 | s32 val; | ||
257 | s64 val64; | ||
258 | char *string; | ||
259 | }; | ||
260 | |||
261 | Within the control ops you can freely use these. The val and val64 speak for | ||
262 | themselves. The string pointers point to character buffers of length | ||
263 | ctrl->maximum + 1, and are always 0-terminated. | ||
264 | |||
265 | In most cases 'cur' contains the current cached control value. When you create | ||
266 | a new control this value is made identical to the default value. After calling | ||
267 | v4l2_ctrl_handler_setup() this value is passed to the hardware. It is generally | ||
268 | a good idea to call this function. | ||
269 | |||
270 | Whenever a new value is set that new value is automatically cached. This means | ||
271 | that most drivers do not need to implement the g_volatile_ctrl() op. The | ||
272 | exception is for controls that return a volatile register such as a signal | ||
273 | strength read-out that changes continuously. In that case you will need to | ||
274 | implement g_volatile_ctrl like this: | ||
275 | |||
276 | static int foo_g_volatile_ctrl(struct v4l2_ctrl *ctrl) | ||
277 | { | ||
278 | switch (ctrl->id) { | ||
279 | case V4L2_CID_BRIGHTNESS: | ||
280 | ctrl->cur.val = read_reg(0x123); | ||
281 | break; | ||
282 | } | ||
283 | } | ||
284 | |||
285 | The 'new value' union is not used in g_volatile_ctrl. In general controls | ||
286 | that need to implement g_volatile_ctrl are read-only controls. | ||
287 | |||
288 | To mark a control as volatile you have to set the is_volatile flag: | ||
289 | |||
290 | ctrl = v4l2_ctrl_new_std(&sd->ctrl_handler, ...); | ||
291 | if (ctrl) | ||
292 | ctrl->is_volatile = 1; | ||
293 | |||
294 | For try/s_ctrl the new values (i.e. as passed by the user) are filled in and | ||
295 | you can modify them in try_ctrl or set them in s_ctrl. The 'cur' union | ||
296 | contains the current value, which you can use (but not change!) as well. | ||
297 | |||
298 | If s_ctrl returns 0 (OK), then the control framework will copy the new final | ||
299 | values to the 'cur' union. | ||
300 | |||
301 | While in g_volatile/s/try_ctrl you can access the value of all controls owned | ||
302 | by the same handler since the handler's lock is held. If you need to access | ||
303 | the value of controls owned by other handlers, then you have to be very careful | ||
304 | not to introduce deadlocks. | ||
305 | |||
306 | Outside of the control ops you have to go through to helper functions to get | ||
307 | or set a single control value safely in your driver: | ||
308 | |||
309 | s32 v4l2_ctrl_g_ctrl(struct v4l2_ctrl *ctrl); | ||
310 | int v4l2_ctrl_s_ctrl(struct v4l2_ctrl *ctrl, s32 val); | ||
311 | |||
312 | These functions go through the control framework just as VIDIOC_G/S_CTRL ioctls | ||
313 | do. Don't use these inside the control ops g_volatile/s/try_ctrl, though, that | ||
314 | will result in a deadlock since these helpers lock the handler as well. | ||
315 | |||
316 | You can also take the handler lock yourself: | ||
317 | |||
318 | mutex_lock(&state->ctrl_handler.lock); | ||
319 | printk(KERN_INFO "String value is '%s'\n", ctrl1->cur.string); | ||
320 | printk(KERN_INFO "Integer value is '%s'\n", ctrl2->cur.val); | ||
321 | mutex_unlock(&state->ctrl_handler.lock); | ||
322 | |||
323 | |||
324 | Menu Controls | ||
325 | ============= | ||
326 | |||
327 | The v4l2_ctrl struct contains this union: | ||
328 | |||
329 | union { | ||
330 | u32 step; | ||
331 | u32 menu_skip_mask; | ||
332 | }; | ||
333 | |||
334 | For menu controls menu_skip_mask is used. What it does is that it allows you | ||
335 | to easily exclude certain menu items. This is used in the VIDIOC_QUERYMENU | ||
336 | implementation where you can return -EINVAL if a certain menu item is not | ||
337 | present. Note that VIDIOC_QUERYCTRL always returns a step value of 1 for | ||
338 | menu controls. | ||
339 | |||
340 | A good example is the MPEG Audio Layer II Bitrate menu control where the | ||
341 | menu is a list of standardized possible bitrates. But in practice hardware | ||
342 | implementations will only support a subset of those. By setting the skip | ||
343 | mask you can tell the framework which menu items should be skipped. Setting | ||
344 | it to 0 means that all menu items are supported. | ||
345 | |||
346 | You set this mask either through the v4l2_ctrl_config struct for a custom | ||
347 | control, or by calling v4l2_ctrl_new_std_menu(). | ||
348 | |||
349 | |||
350 | Custom Controls | ||
351 | =============== | ||
352 | |||
353 | Driver specific controls can be created using v4l2_ctrl_new_custom(): | ||
354 | |||
355 | static const struct v4l2_ctrl_config ctrl_filter = { | ||
356 | .ops = &ctrl_custom_ops, | ||
357 | .id = V4L2_CID_MPEG_CX2341X_VIDEO_SPATIAL_FILTER, | ||
358 | .name = "Spatial Filter", | ||
359 | .type = V4L2_CTRL_TYPE_INTEGER, | ||
360 | .flags = V4L2_CTRL_FLAG_SLIDER, | ||
361 | .max = 15, | ||
362 | .step = 1, | ||
363 | }; | ||
364 | |||
365 | ctrl = v4l2_ctrl_new_custom(&foo->ctrl_handler, &ctrl_filter, NULL); | ||
366 | |||
367 | The last argument is the priv pointer which can be set to driver-specific | ||
368 | private data. | ||
369 | |||
370 | The v4l2_ctrl_config struct also has fields to set the is_private and is_volatile | ||
371 | flags. | ||
372 | |||
373 | If the name field is not set, then the framework will assume this is a standard | ||
374 | control and will fill in the name, type and flags fields accordingly. | ||
375 | |||
376 | |||
377 | Active and Grabbed Controls | ||
378 | =========================== | ||
379 | |||
380 | If you get more complex relationships between controls, then you may have to | ||
381 | activate and deactivate controls. For example, if the Chroma AGC control is | ||
382 | on, then the Chroma Gain control is inactive. That is, you may set it, but | ||
383 | the value will not be used by the hardware as long as the automatic gain | ||
384 | control is on. Typically user interfaces can disable such input fields. | ||
385 | |||
386 | You can set the 'active' status using v4l2_ctrl_activate(). By default all | ||
387 | controls are active. Note that the framework does not check for this flag. | ||
388 | It is meant purely for GUIs. The function is typically called from within | ||
389 | s_ctrl. | ||
390 | |||
391 | The other flag is the 'grabbed' flag. A grabbed control means that you cannot | ||
392 | change it because it is in use by some resource. Typical examples are MPEG | ||
393 | bitrate controls that cannot be changed while capturing is in progress. | ||
394 | |||
395 | If a control is set to 'grabbed' using v4l2_ctrl_grab(), then the framework | ||
396 | will return -EBUSY if an attempt is made to set this control. The | ||
397 | v4l2_ctrl_grab() function is typically called from the driver when it | ||
398 | starts or stops streaming. | ||
399 | |||
400 | |||
401 | Control Clusters | ||
402 | ================ | ||
403 | |||
404 | By default all controls are independent from the others. But in more | ||
405 | complex scenarios you can get dependencies from one control to another. | ||
406 | In that case you need to 'cluster' them: | ||
407 | |||
408 | struct foo { | ||
409 | struct v4l2_ctrl_handler ctrl_handler; | ||
410 | #define AUDIO_CL_VOLUME (0) | ||
411 | #define AUDIO_CL_MUTE (1) | ||
412 | struct v4l2_ctrl *audio_cluster[2]; | ||
413 | ... | ||
414 | }; | ||
415 | |||
416 | state->audio_cluster[AUDIO_CL_VOLUME] = | ||
417 | v4l2_ctrl_new_std(&state->ctrl_handler, ...); | ||
418 | state->audio_cluster[AUDIO_CL_MUTE] = | ||
419 | v4l2_ctrl_new_std(&state->ctrl_handler, ...); | ||
420 | v4l2_ctrl_cluster(ARRAY_SIZE(state->audio_cluster), state->audio_cluster); | ||
421 | |||
422 | From now on whenever one or more of the controls belonging to the same | ||
423 | cluster is set (or 'gotten', or 'tried'), only the control ops of the first | ||
424 | control ('volume' in this example) is called. You effectively create a new | ||
425 | composite control. Similar to how a 'struct' works in C. | ||
426 | |||
427 | So when s_ctrl is called with V4L2_CID_AUDIO_VOLUME as argument, you should set | ||
428 | all two controls belonging to the audio_cluster: | ||
429 | |||
430 | static int foo_s_ctrl(struct v4l2_ctrl *ctrl) | ||
431 | { | ||
432 | struct foo *state = container_of(ctrl->handler, struct foo, ctrl_handler); | ||
433 | |||
434 | switch (ctrl->id) { | ||
435 | case V4L2_CID_AUDIO_VOLUME: { | ||
436 | struct v4l2_ctrl *mute = ctrl->cluster[AUDIO_CL_MUTE]; | ||
437 | |||
438 | write_reg(0x123, mute->val ? 0 : ctrl->val); | ||
439 | break; | ||
440 | } | ||
441 | case V4L2_CID_CONTRAST: | ||
442 | write_reg(0x456, ctrl->val); | ||
443 | break; | ||
444 | } | ||
445 | return 0; | ||
446 | } | ||
447 | |||
448 | In the example above the following are equivalent for the VOLUME case: | ||
449 | |||
450 | ctrl == ctrl->cluster[AUDIO_CL_VOLUME] == state->audio_cluster[AUDIO_CL_VOLUME] | ||
451 | ctrl->cluster[AUDIO_CL_MUTE] == state->audio_cluster[AUDIO_CL_MUTE] | ||
452 | |||
453 | Note that controls in a cluster may be NULL. For example, if for some | ||
454 | reason mute was never added (because the hardware doesn't support that | ||
455 | particular feature), then mute will be NULL. So in that case we have a | ||
456 | cluster of 2 controls, of which only 1 is actually instantiated. The | ||
457 | only restriction is that the first control of the cluster must always be | ||
458 | present, since that is the 'master' control of the cluster. The master | ||
459 | control is the one that identifies the cluster and that provides the | ||
460 | pointer to the v4l2_ctrl_ops struct that is used for that cluster. | ||
461 | |||
462 | Obviously, all controls in the cluster array must be initialized to either | ||
463 | a valid control or to NULL. | ||
464 | |||
465 | |||
466 | VIDIOC_LOG_STATUS Support | ||
467 | ========================= | ||
468 | |||
469 | This ioctl allow you to dump the current status of a driver to the kernel log. | ||
470 | The v4l2_ctrl_handler_log_status(ctrl_handler, prefix) can be used to dump the | ||
471 | value of the controls owned by the given handler to the log. You can supply a | ||
472 | prefix as well. If the prefix didn't end with a space, then ': ' will be added | ||
473 | for you. | ||
474 | |||
475 | |||
476 | Different Handlers for Different Video Nodes | ||
477 | ============================================ | ||
478 | |||
479 | Usually the V4L2 driver has just one control handler that is global for | ||
480 | all video nodes. But you can also specify different control handlers for | ||
481 | different video nodes. You can do that by manually setting the ctrl_handler | ||
482 | field of struct video_device. | ||
483 | |||
484 | That is no problem if there are no subdevs involved but if there are, then | ||
485 | you need to block the automatic merging of subdev controls to the global | ||
486 | control handler. You do that by simply setting the ctrl_handler field in | ||
487 | struct v4l2_device to NULL. Now v4l2_device_register_subdev() will no longer | ||
488 | merge subdev controls. | ||
489 | |||
490 | After each subdev was added, you will then have to call v4l2_ctrl_add_handler | ||
491 | manually to add the subdev's control handler (sd->ctrl_handler) to the desired | ||
492 | control handler. This control handler may be specific to the video_device or | ||
493 | for a subset of video_device's. For example: the radio device nodes only have | ||
494 | audio controls, while the video and vbi device nodes share the same control | ||
495 | handler for the audio and video controls. | ||
496 | |||
497 | If you want to have one handler (e.g. for a radio device node) have a subset | ||
498 | of another handler (e.g. for a video device node), then you should first add | ||
499 | the controls to the first handler, add the other controls to the second | ||
500 | handler and finally add the first handler to the second. For example: | ||
501 | |||
502 | v4l2_ctrl_new_std(&radio_ctrl_handler, &radio_ops, V4L2_CID_AUDIO_VOLUME, ...); | ||
503 | v4l2_ctrl_new_std(&radio_ctrl_handler, &radio_ops, V4L2_CID_AUDIO_MUTE, ...); | ||
504 | v4l2_ctrl_new_std(&video_ctrl_handler, &video_ops, V4L2_CID_BRIGHTNESS, ...); | ||
505 | v4l2_ctrl_new_std(&video_ctrl_handler, &video_ops, V4L2_CID_CONTRAST, ...); | ||
506 | v4l2_ctrl_add_handler(&video_ctrl_handler, &radio_ctrl_handler); | ||
507 | |||
508 | Or you can add specific controls to a handler: | ||
509 | |||
510 | volume = v4l2_ctrl_new_std(&video_ctrl_handler, &ops, V4L2_CID_AUDIO_VOLUME, ...); | ||
511 | v4l2_ctrl_new_std(&video_ctrl_handler, &ops, V4L2_CID_BRIGHTNESS, ...); | ||
512 | v4l2_ctrl_new_std(&video_ctrl_handler, &ops, V4L2_CID_CONTRAST, ...); | ||
513 | v4l2_ctrl_add_ctrl(&radio_ctrl_handler, volume); | ||
514 | |||
515 | What you should not do is make two identical controls for two handlers. | ||
516 | For example: | ||
517 | |||
518 | v4l2_ctrl_new_std(&radio_ctrl_handler, &radio_ops, V4L2_CID_AUDIO_MUTE, ...); | ||
519 | v4l2_ctrl_new_std(&video_ctrl_handler, &video_ops, V4L2_CID_AUDIO_MUTE, ...); | ||
520 | |||
521 | This would be bad since muting the radio would not change the video mute | ||
522 | control. The rule is to have one control for each hardware 'knob' that you | ||
523 | can twiddle. | ||
524 | |||
525 | |||
526 | Finding Controls | ||
527 | ================ | ||
528 | |||
529 | Normally you have created the controls yourself and you can store the struct | ||
530 | v4l2_ctrl pointer into your own struct. | ||
531 | |||
532 | But sometimes you need to find a control from another handler that you do | ||
533 | not own. For example, if you have to find a volume control from a subdev. | ||
534 | |||
535 | You can do that by calling v4l2_ctrl_find: | ||
536 | |||
537 | struct v4l2_ctrl *volume; | ||
538 | |||
539 | volume = v4l2_ctrl_find(sd->ctrl_handler, V4L2_CID_AUDIO_VOLUME); | ||
540 | |||
541 | Since v4l2_ctrl_find will lock the handler you have to be careful where you | ||
542 | use it. For example, this is not a good idea: | ||
543 | |||
544 | struct v4l2_ctrl_handler ctrl_handler; | ||
545 | |||
546 | v4l2_ctrl_new_std(&ctrl_handler, &video_ops, V4L2_CID_BRIGHTNESS, ...); | ||
547 | v4l2_ctrl_new_std(&ctrl_handler, &video_ops, V4L2_CID_CONTRAST, ...); | ||
548 | |||
549 | ...and in video_ops.s_ctrl: | ||
550 | |||
551 | case V4L2_CID_BRIGHTNESS: | ||
552 | contrast = v4l2_find_ctrl(&ctrl_handler, V4L2_CID_CONTRAST); | ||
553 | ... | ||
554 | |||
555 | When s_ctrl is called by the framework the ctrl_handler.lock is already taken, so | ||
556 | attempting to find another control from the same handler will deadlock. | ||
557 | |||
558 | It is recommended not to use this function from inside the control ops. | ||
559 | |||
560 | |||
561 | Inheriting Controls | ||
562 | =================== | ||
563 | |||
564 | When one control handler is added to another using v4l2_ctrl_add_handler, then | ||
565 | by default all controls from one are merged to the other. But a subdev might | ||
566 | have low-level controls that make sense for some advanced embedded system, but | ||
567 | not when it is used in consumer-level hardware. In that case you want to keep | ||
568 | those low-level controls local to the subdev. You can do this by simply | ||
569 | setting the 'is_private' flag of the control to 1: | ||
570 | |||
571 | static const struct v4l2_ctrl_config ctrl_private = { | ||
572 | .ops = &ctrl_custom_ops, | ||
573 | .id = V4L2_CID_..., | ||
574 | .name = "Some Private Control", | ||
575 | .type = V4L2_CTRL_TYPE_INTEGER, | ||
576 | .max = 15, | ||
577 | .step = 1, | ||
578 | .is_private = 1, | ||
579 | }; | ||
580 | |||
581 | ctrl = v4l2_ctrl_new_custom(&foo->ctrl_handler, &ctrl_private, NULL); | ||
582 | |||
583 | These controls will now be skipped when v4l2_ctrl_add_handler is called. | ||
584 | |||
585 | |||
586 | V4L2_CTRL_TYPE_CTRL_CLASS Controls | ||
587 | ================================== | ||
588 | |||
589 | Controls of this type can be used by GUIs to get the name of the control class. | ||
590 | A fully featured GUI can make a dialog with multiple tabs with each tab | ||
591 | containing the controls belonging to a particular control class. The name of | ||
592 | each tab can be found by querying a special control with ID <control class | 1>. | ||
593 | |||
594 | Drivers do not have to care about this. The framework will automatically add | ||
595 | a control of this type whenever the first control belonging to a new control | ||
596 | class is added. | ||
597 | |||
598 | |||
599 | Differences from the Spec | ||
600 | ========================= | ||
601 | |||
602 | There are a few places where the framework acts slightly differently from the | ||
603 | V4L2 Specification. Those differences are described in this section. We will | ||
604 | have to see whether we need to adjust the spec or not. | ||
605 | |||
606 | 1) It is no longer required to have all controls contained in a | ||
607 | v4l2_ext_control array be from the same control class. The framework will be | ||
608 | able to handle any type of control in the array. You need to set ctrl_class | ||
609 | to 0 in order to enable this. If ctrl_class is non-zero, then it will still | ||
610 | check that all controls belong to that control class. | ||
611 | |||
612 | If you set ctrl_class to 0 and count to 0, then it will only return an error | ||
613 | if there are no controls at all. | ||
614 | |||
615 | 2) Clarified the way error_idx works. For get and set it will be equal to | ||
616 | count if nothing was done yet. If it is less than count then only the controls | ||
617 | up to error_idx-1 were successfully applied. | ||
618 | |||
619 | 3) When attempting to read a button control the framework will return -EACCES | ||
620 | instead of -EINVAL as stated in the spec. It seems to make more sense since | ||
621 | button controls are write-only controls. | ||
622 | |||
623 | 4) Attempting to write to a read-only control will return -EACCES instead of | ||
624 | -EINVAL as the spec says. | ||
625 | |||
626 | 5) The spec does not mention what should happen when you try to set/get a | ||
627 | control class controls. ivtv currently returns -EINVAL (indicating that the | ||
628 | control ID does not exist) while the framework will return -EACCES, which | ||
629 | makes more sense. | ||
630 | |||
631 | |||
632 | Proposals for Extensions | ||
633 | ======================== | ||
634 | |||
635 | Some ideas for future extensions to the spec: | ||
636 | |||
637 | 1) Add a V4L2_CTRL_FLAG_HEX to have values shown as hexadecimal instead of | ||
638 | decimal. Useful for e.g. video_mute_yuv. | ||
639 | |||
640 | 2) It is possible to mark in the controls array which controls have been | ||
641 | successfully written and which failed by for example adding a bit to the | ||
642 | control ID. Not sure if it is worth the effort, though. | ||
643 | |||
644 | 3) Trying to set volatile inactive controls should result in -EACCESS. | ||
645 | |||
646 | 4) Add a new flag to mark volatile controls. Any application that wants | ||
647 | to store the state of the controls can then skip volatile inactive controls. | ||
648 | Currently it is not possible to detect such controls. | ||