aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
Diffstat (limited to 'drivers')
-rw-r--r--drivers/hid/Kconfig22
1 files changed, 11 insertions, 11 deletions
diff --git a/drivers/hid/Kconfig b/drivers/hid/Kconfig
index 152b006833cd..faf45fe6298b 100644
--- a/drivers/hid/Kconfig
+++ b/drivers/hid/Kconfig
@@ -92,7 +92,7 @@ menu "Special HID drivers"
92 depends on HID 92 depends on HID
93 93
94config HID_A4TECH 94config HID_A4TECH
95 tristate "A4 tech mice" if EXPERT 95 tristate "A4 tech mice"
96 depends on HID 96 depends on HID
97 default !EXPERT 97 default !EXPERT
98 ---help--- 98 ---help---
@@ -113,7 +113,7 @@ config HID_ACRUX_FF
113 game controllers. 113 game controllers.
114 114
115config HID_APPLE 115config HID_APPLE
116 tristate "Apple {i,Power,Mac}Books" if EXPERT 116 tristate "Apple {i,Power,Mac}Books"
117 depends on HID 117 depends on HID
118 default !EXPERT 118 default !EXPERT
119 ---help--- 119 ---help---
@@ -141,7 +141,7 @@ config HID_AUREAL
141 Support for Aureal Cy se W-01RN Remote Controller and other Aureal derived remotes. 141 Support for Aureal Cy se W-01RN Remote Controller and other Aureal derived remotes.
142 142
143config HID_BELKIN 143config HID_BELKIN
144 tristate "Belkin Flip KVM and Wireless keyboard" if EXPERT 144 tristate "Belkin Flip KVM and Wireless keyboard"
145 depends on HID 145 depends on HID
146 default !EXPERT 146 default !EXPERT
147 ---help--- 147 ---help---
@@ -158,14 +158,14 @@ config HID_BETOP_FF
158 - BETOP 2185 PC & BFM MODE 158 - BETOP 2185 PC & BFM MODE
159 159
160config HID_CHERRY 160config HID_CHERRY
161 tristate "Cherry Cymotion keyboard" if EXPERT 161 tristate "Cherry Cymotion keyboard"
162 depends on HID 162 depends on HID
163 default !EXPERT 163 default !EXPERT
164 ---help--- 164 ---help---
165 Support for Cherry Cymotion keyboard. 165 Support for Cherry Cymotion keyboard.
166 166
167config HID_CHICONY 167config HID_CHICONY
168 tristate "Chicony Tactical pad" if EXPERT 168 tristate "Chicony Tactical pad"
169 depends on HID 169 depends on HID
170 default !EXPERT 170 default !EXPERT
171 ---help--- 171 ---help---
@@ -196,7 +196,7 @@ config HID_CP2112
196 customizable USB descriptor fields are exposed as sysfs attributes. 196 customizable USB descriptor fields are exposed as sysfs attributes.
197 197
198config HID_CYPRESS 198config HID_CYPRESS
199 tristate "Cypress mouse and barcode readers" if EXPERT 199 tristate "Cypress mouse and barcode readers"
200 depends on HID 200 depends on HID
201 default !EXPERT 201 default !EXPERT
202 ---help--- 202 ---help---
@@ -245,7 +245,7 @@ config HID_ELO
245 different devices than those handled by CONFIG_TOUCHSCREEN_USB_ELO. 245 different devices than those handled by CONFIG_TOUCHSCREEN_USB_ELO.
246 246
247config HID_EZKEY 247config HID_EZKEY
248 tristate "Ezkey BTC 8193 keyboard" if EXPERT 248 tristate "Ezkey BTC 8193 keyboard"
249 depends on HID 249 depends on HID
250 default !EXPERT 250 default !EXPERT
251 ---help--- 251 ---help---
@@ -344,7 +344,7 @@ config HID_TWINHAN
344 Support for Twinhan IR remote control. 344 Support for Twinhan IR remote control.
345 345
346config HID_KENSINGTON 346config HID_KENSINGTON
347 tristate "Kensington Slimblade Trackball" if EXPERT 347 tristate "Kensington Slimblade Trackball"
348 depends on HID 348 depends on HID
349 default !EXPERT 349 default !EXPERT
350 ---help--- 350 ---help---
@@ -372,7 +372,7 @@ config HID_LENOVO
372 - ThinkPad Compact USB Keyboard with TrackPoint (supports Fn keys) 372 - ThinkPad Compact USB Keyboard with TrackPoint (supports Fn keys)
373 373
374config HID_LOGITECH 374config HID_LOGITECH
375 tristate "Logitech devices" if EXPERT 375 tristate "Logitech devices"
376 depends on HID 376 depends on HID
377 default !EXPERT 377 default !EXPERT
378 ---help--- 378 ---help---
@@ -461,14 +461,14 @@ config HID_MAGICMOUSE
461 Apple Wireless "Magic" Mouse and the Apple Wireless "Magic" Trackpad. 461 Apple Wireless "Magic" Mouse and the Apple Wireless "Magic" Trackpad.
462 462
463config HID_MICROSOFT 463config HID_MICROSOFT
464 tristate "Microsoft non-fully HID-compliant devices" if EXPERT 464 tristate "Microsoft non-fully HID-compliant devices"
465 depends on HID 465 depends on HID
466 default !EXPERT 466 default !EXPERT
467 ---help--- 467 ---help---
468 Support for Microsoft devices that are not fully compliant with HID standard. 468 Support for Microsoft devices that are not fully compliant with HID standard.
469 469
470config HID_MONTEREY 470config HID_MONTEREY
471 tristate "Monterey Genius KB29E keyboard" if EXPERT 471 tristate "Monterey Genius KB29E keyboard"
472 depends on HID 472 depends on HID
473 default !EXPERT 473 default !EXPERT
474 ---help--- 474 ---help---
class="hl kwd">get_indirect_ea(s, ea_in_anode(ea), ea_sec(ea), *size = ea_len(ea)); if (!(ret = kmalloc((*size = ea_valuelen(ea)) + 1, GFP_NOFS))) { printk("HPFS: out of memory for EA\n"); return NULL; } if (hpfs_ea_read(s, a, ano, pos + 4 + ea->namelen + 1, ea_valuelen(ea), ret)) { kfree(ret); return NULL; } ret[ea_valuelen(ea)] = 0; return ret; } pos += ea->namelen + ea_valuelen(ea) + 5; } return NULL; } /* * Update or create extended attribute 'key' with value 'data'. Note that * when this ea exists, it MUST have the same size as size of data. * This driver can't change sizes of eas ('cause I just don't need it). */ void hpfs_set_ea(struct inode *inode, struct fnode *fnode, const char *key, const char *data, int size) { fnode_secno fno = inode->i_ino; struct super_block *s = inode->i_sb; unsigned pos; int ano, len; secno a; unsigned char h[4]; struct extended_attribute *ea; struct extended_attribute *ea_end = fnode_end_ea(fnode); for (ea = fnode_ea(fnode); ea < ea_end; ea = next_ea(ea)) if (!strcmp(ea->name, key)) { if (ea_indirect(ea)) { if (ea_len(ea) == size) set_indirect_ea(s, ea_in_anode(ea), ea_sec(ea), data, size); } else if (ea_valuelen(ea) == size) { memcpy(ea_data(ea), data, size); } return; } a = le32_to_cpu(fnode->ea_secno); len = le32_to_cpu(fnode->ea_size_l); ano = fnode_in_anode(fnode); pos = 0; while (pos < len) { char ex[4 + 255 + 1 + 8]; ea = (struct extended_attribute *)ex; if (pos + 4 > len) { hpfs_error(s, "EAs don't end correctly, %s %08x, len %08x", ano ? "anode" : "sectors", a, len); return; } if (hpfs_ea_read(s, a, ano, pos, 4, ex)) return; if (hpfs_ea_read(s, a, ano, pos + 4, ea->namelen + 1 + (ea_indirect(ea) ? 8 : 0), ex + 4)) return; if (!strcmp(ea->name, key)) { if (ea_indirect(ea)) { if (ea_len(ea) == size) set_indirect_ea(s, ea_in_anode(ea), ea_sec(ea), data, size); } else { if (ea_valuelen(ea) == size) hpfs_ea_write(s, a, ano, pos + 4 + ea->namelen + 1, size, data); } return; } pos += ea->namelen + ea_valuelen(ea) + 5; } if (!le16_to_cpu(fnode->ea_offs)) { /*if (le16_to_cpu(fnode->ea_size_s)) { hpfs_error(s, "fnode %08x: ea_size_s == %03x, ea_offs == 0", inode->i_ino, le16_to_cpu(fnode->ea_size_s)); return; }*/ fnode->ea_offs = cpu_to_le16(0xc4); } if (le16_to_cpu(fnode->ea_offs) < 0xc4 || le16_to_cpu(fnode->ea_offs) + le16_to_cpu(fnode->acl_size_s) + le16_to_cpu(fnode->ea_size_s) > 0x200) { hpfs_error(s, "fnode %08lx: ea_offs == %03x, ea_size_s == %03x", (unsigned long)inode->i_ino, le16_to_cpu(fnode->ea_offs), le16_to_cpu(fnode->ea_size_s)); return; } if ((le16_to_cpu(fnode->ea_size_s) || !le32_to_cpu(fnode->ea_size_l)) && le16_to_cpu(fnode->ea_offs) + le16_to_cpu(fnode->acl_size_s) + le16_to_cpu(fnode->ea_size_s) + strlen(key) + size + 5 <= 0x200) { ea = fnode_end_ea(fnode); *(char *)ea = 0; ea->namelen = strlen(key); ea->valuelen_lo = size; ea->valuelen_hi = size >> 8; strcpy(ea->name, key); memcpy(ea_data(ea), data, size); fnode->ea_size_s = cpu_to_le16(le16_to_cpu(fnode->ea_size_s) + strlen(key) + size + 5); goto ret; } /* Most the code here is 99.9993422% unused. I hope there are no bugs. But what .. HPFS.IFS has also bugs in ea management. */ if (le16_to_cpu(fnode->ea_size_s) && !le32_to_cpu(fnode->ea_size_l)) { secno n; struct buffer_head *bh; char *data; if (!(n = hpfs_alloc_sector(s, fno, 1, 0))) return; if (!(data = hpfs_get_sector(s, n, &bh))) { hpfs_free_sectors(s, n, 1); return; } memcpy(data, fnode_ea(fnode), le16_to_cpu(fnode->ea_size_s)); fnode->ea_size_l = cpu_to_le32(le16_to_cpu(fnode->ea_size_s)); fnode->ea_size_s = cpu_to_le16(0); fnode->ea_secno = cpu_to_le32(n); fnode->flags &= ~FNODE_anode; mark_buffer_dirty(bh); brelse(bh); } pos = le32_to_cpu(fnode->ea_size_l) + 5 + strlen(key) + size; len = (le32_to_cpu(fnode->ea_size_l) + 511) >> 9; if (pos >= 30000) goto bail; while (((pos + 511) >> 9) > len) { if (!len) { secno q = hpfs_alloc_sector(s, fno, 1, 0); if (!q) goto bail; fnode->ea_secno = cpu_to_le32(q); fnode->flags &= ~FNODE_anode; len++; } else if (!fnode_in_anode(fnode)) { if (hpfs_alloc_if_possible(s, le32_to_cpu(fnode->ea_secno) + len)) { len++; } else { /* Aargh... don't know how to create ea anodes :-( */ /*struct buffer_head *bh; struct anode *anode; anode_secno a_s; if (!(anode = hpfs_alloc_anode(s, fno, &a_s, &bh))) goto bail; anode->up = cpu_to_le32(fno); anode->btree.fnode_parent = 1; anode->btree.n_free_nodes--; anode->btree.n_used_nodes++; anode->btree.first_free = cpu_to_le16(le16_to_cpu(anode->btree.first_free) + 12); anode->u.external[0].disk_secno = cpu_to_le32(le32_to_cpu(fnode->ea_secno)); anode->u.external[0].file_secno = cpu_to_le32(0); anode->u.external[0].length = cpu_to_le32(len); mark_buffer_dirty(bh); brelse(bh); fnode->flags |= FNODE_anode; fnode->ea_secno = cpu_to_le32(a_s);*/ secno new_sec; int i; if (!(new_sec = hpfs_alloc_sector(s, fno, 1, 1 - ((pos + 511) >> 9)))) goto bail; for (i = 0; i < len; i++) { struct buffer_head *bh1, *bh2; void *b1, *b2; if (!(b1 = hpfs_map_sector(s, le32_to_cpu(fnode->ea_secno) + i, &bh1, len - i - 1))) { hpfs_free_sectors(s, new_sec, (pos + 511) >> 9); goto bail; } if (!(b2 = hpfs_get_sector(s, new_sec + i, &bh2))) { brelse(bh1); hpfs_free_sectors(s, new_sec, (pos + 511) >> 9);