| .. | .. |
|---|
| 65 | 65 | return buf [0]; |
|---|
| 66 | 66 | } |
|---|
| 67 | 67 | EXPORT_SYMBOL_GPL(usb_gadget_get_string); |
|---|
| 68 | + |
|---|
| 69 | +/** |
|---|
| 70 | + * usb_validate_langid - validate usb language identifiers |
|---|
| 71 | + * @langid: usb language identifier |
|---|
| 72 | + * |
|---|
| 73 | + * Returns true for valid language identifier, otherwise false. |
|---|
| 74 | + */ |
|---|
| 75 | +bool usb_validate_langid(u16 langid) |
|---|
| 76 | +{ |
|---|
| 77 | + u16 primary_lang = langid & 0x3ff; /* bit [9:0] */ |
|---|
| 78 | + u16 sub_lang = langid >> 10; /* bit [15:10] */ |
|---|
| 79 | + |
|---|
| 80 | + switch (primary_lang) { |
|---|
| 81 | + case 0: |
|---|
| 82 | + case 0x62 ... 0xfe: |
|---|
| 83 | + case 0x100 ... 0x3ff: |
|---|
| 84 | + return false; |
|---|
| 85 | + } |
|---|
| 86 | + if (!sub_lang) |
|---|
| 87 | + return false; |
|---|
| 88 | + |
|---|
| 89 | + return true; |
|---|
| 90 | +} |
|---|
| 91 | +EXPORT_SYMBOL_GPL(usb_validate_langid); |
|---|