Manual merge with Linus
This commit is contained in:
@@ -230,6 +230,20 @@ config USB_EGALAX
|
||||
To compile this driver as a module, choose M here: the
|
||||
module will be called touchkitusb.
|
||||
|
||||
config USB_YEALINK
|
||||
tristate "Yealink usb-p1k voip phone"
|
||||
depends on USB && INPUT && EXPERIMENTAL
|
||||
---help---
|
||||
Say Y here if you want to enable keyboard and LCD functions of the
|
||||
Yealink usb-p1k usb phones. The audio part is enabled by the generic
|
||||
usb sound driver, so you might want to enable that as well.
|
||||
|
||||
For information about how to use these additional functions, see
|
||||
<file:Documentation/input/yealink.txt>.
|
||||
|
||||
To compile this driver as a module, choose M here: the module will be
|
||||
called yealink.
|
||||
|
||||
config USB_XPAD
|
||||
tristate "X-Box gamepad support"
|
||||
depends on USB && INPUT
|
||||
|
@@ -39,4 +39,5 @@ obj-$(CONFIG_USB_EGALAX) += touchkitusb.o
|
||||
obj-$(CONFIG_USB_POWERMATE) += powermate.o
|
||||
obj-$(CONFIG_USB_WACOM) += wacom.o
|
||||
obj-$(CONFIG_USB_ACECAD) += acecad.o
|
||||
obj-$(CONFIG_USB_YEALINK) += yealink.o
|
||||
obj-$(CONFIG_USB_XPAD) += xpad.o
|
||||
|
@@ -152,7 +152,7 @@ static int usb_acecad_probe(struct usb_interface *intf, const struct usb_device_
|
||||
pipe = usb_rcvintpipe(dev, endpoint->bEndpointAddress);
|
||||
maxp = usb_maxpacket(dev, pipe, usb_pipeout(pipe));
|
||||
|
||||
acecad = kcalloc(1, sizeof(struct usb_acecad), GFP_KERNEL);
|
||||
acecad = kzalloc(sizeof(struct usb_acecad), GFP_KERNEL);
|
||||
if (!acecad)
|
||||
return -ENOMEM;
|
||||
|
||||
|
@@ -1432,7 +1432,7 @@ void hid_init_reports(struct hid_device *hid)
|
||||
#define USB_DEVICE_ID_VERNIER_CYCLOPS 0x0004
|
||||
|
||||
#define USB_VENDOR_ID_LD 0x0f11
|
||||
#define USB_DEVICE_ID_CASSY 0x1000
|
||||
#define USB_DEVICE_ID_CASSY 0x1000
|
||||
#define USB_DEVICE_ID_POCKETCASSY 0x1010
|
||||
#define USB_DEVICE_ID_MOBILECASSY 0x1020
|
||||
#define USB_DEVICE_ID_JWM 0x1080
|
||||
@@ -1446,6 +1446,7 @@ void hid_init_reports(struct hid_device *hid)
|
||||
|
||||
#define USB_VENDOR_ID_APPLE 0x05ac
|
||||
#define USB_DEVICE_ID_APPLE_POWERMOUSE 0x0304
|
||||
#define USB_DEVICE_ID_APPLE_BLUETOOTH 0x1000
|
||||
|
||||
/*
|
||||
* Alphabetically sorted blacklist by quirk type.
|
||||
@@ -1464,6 +1465,7 @@ static struct hid_blacklist {
|
||||
{ USB_VENDOR_ID_AIPTEK, USB_DEVICE_ID_AIPTEK_22, HID_QUIRK_IGNORE },
|
||||
{ USB_VENDOR_ID_AIPTEK, USB_DEVICE_ID_AIPTEK_23, HID_QUIRK_IGNORE },
|
||||
{ USB_VENDOR_ID_AIPTEK, USB_DEVICE_ID_AIPTEK_24, HID_QUIRK_IGNORE },
|
||||
{ USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_BLUETOOTH, HID_QUIRK_IGNORE },
|
||||
{ USB_VENDOR_ID_BERKSHIRE, USB_DEVICE_ID_BERKSHIRE_PCWD, HID_QUIRK_IGNORE },
|
||||
{ USB_VENDOR_ID_CODEMERCS, USB_DEVICE_ID_CODEMERCS_IOW40, HID_QUIRK_IGNORE },
|
||||
{ USB_VENDOR_ID_CODEMERCS, USB_DEVICE_ID_CODEMERCS_IOW24, HID_QUIRK_IGNORE },
|
||||
@@ -1720,7 +1722,7 @@ static struct hid_device *usb_hid_configure(struct usb_interface *intf)
|
||||
usb_fill_int_urb(hid->urbin, dev, pipe, hid->inbuf, insize,
|
||||
hid_irq_in, hid, interval);
|
||||
hid->urbin->transfer_dma = hid->inbuf_dma;
|
||||
hid->urbin->transfer_flags |=(URB_NO_TRANSFER_DMA_MAP | URB_ASYNC_UNLINK);
|
||||
hid->urbin->transfer_flags |= URB_NO_TRANSFER_DMA_MAP;
|
||||
} else {
|
||||
if (hid->urbout)
|
||||
continue;
|
||||
@@ -1730,7 +1732,7 @@ static struct hid_device *usb_hid_configure(struct usb_interface *intf)
|
||||
usb_fill_int_urb(hid->urbout, dev, pipe, hid->outbuf, 0,
|
||||
hid_irq_out, hid, interval);
|
||||
hid->urbout->transfer_dma = hid->outbuf_dma;
|
||||
hid->urbout->transfer_flags |= (URB_NO_TRANSFER_DMA_MAP | URB_ASYNC_UNLINK);
|
||||
hid->urbout->transfer_flags |= URB_NO_TRANSFER_DMA_MAP;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1782,7 +1784,7 @@ static struct hid_device *usb_hid_configure(struct usb_interface *intf)
|
||||
hid->ctrlbuf, 1, hid_ctrl, hid);
|
||||
hid->urbctrl->setup_dma = hid->cr_dma;
|
||||
hid->urbctrl->transfer_dma = hid->ctrlbuf_dma;
|
||||
hid->urbctrl->transfer_flags |= (URB_NO_TRANSFER_DMA_MAP | URB_NO_SETUP_DMA_MAP | URB_ASYNC_UNLINK);
|
||||
hid->urbctrl->transfer_flags |= (URB_NO_TRANSFER_DMA_MAP | URB_NO_SETUP_DMA_MAP);
|
||||
|
||||
return hid;
|
||||
|
||||
|
@@ -166,7 +166,7 @@ static int itmtouch_probe(struct usb_interface *intf, const struct usb_device_id
|
||||
interface = intf->cur_altsetting;
|
||||
endpoint = &interface->endpoint[0].desc;
|
||||
|
||||
if (!(itmtouch = kcalloc(1, sizeof(struct itmtouch_dev), GFP_KERNEL))) {
|
||||
if (!(itmtouch = kzalloc(sizeof(struct itmtouch_dev), GFP_KERNEL))) {
|
||||
err("%s - Out of memory.", __FUNCTION__);
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
@@ -431,11 +431,6 @@ static int keyspan_probe(struct usb_interface *interface, const struct usb_devic
|
||||
struct usb_endpoint_descriptor *endpoint;
|
||||
struct usb_device *udev = usb_get_dev(interface_to_usbdev(interface));
|
||||
|
||||
/* See if the offered device matches what we can accept */
|
||||
if ((udev->descriptor.idVendor != USB_KEYSPAN_VENDOR_ID) ||
|
||||
(udev->descriptor.idProduct != USB_KEYSPAN_PRODUCT_UIA11) )
|
||||
return -ENODEV;
|
||||
|
||||
/* allocate memory for our device state and initialize it */
|
||||
remote = kmalloc(sizeof(*remote), GFP_KERNEL);
|
||||
if (remote == NULL) {
|
||||
|
189
drivers/usb/input/map_to_7segment.h
Normal file
189
drivers/usb/input/map_to_7segment.h
Normal file
@@ -0,0 +1,189 @@
|
||||
/*
|
||||
* drivers/usb/input/map_to_7segment.h
|
||||
*
|
||||
* Copyright (c) 2005 Henk Vergonet <Henk.Vergonet@gmail.com>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License as
|
||||
* published by the Free Software Foundation; either version 2 of
|
||||
* the License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*/
|
||||
|
||||
#ifndef MAP_TO_7SEGMENT_H
|
||||
#define MAP_TO_7SEGMENT_H
|
||||
|
||||
/* This file provides translation primitives and tables for the conversion
|
||||
* of (ASCII) characters to a 7-segments notation.
|
||||
*
|
||||
* The 7 segment's wikipedia notation below is used as standard.
|
||||
* See: http://en.wikipedia.org/wiki/Seven_segment_display
|
||||
*
|
||||
* Notation: +-a-+
|
||||
* f b
|
||||
* +-g-+
|
||||
* e c
|
||||
* +-d-+
|
||||
*
|
||||
* Usage:
|
||||
*
|
||||
* Register a map variable, and fill it with a character set:
|
||||
* static SEG7_DEFAULT_MAP(map_seg7);
|
||||
*
|
||||
*
|
||||
* Then use for conversion:
|
||||
* seg7 = map_to_seg7(&map_seg7, some_char);
|
||||
* ...
|
||||
*
|
||||
* In device drivers it is recommended, if required, to make the char map
|
||||
* accessible via the sysfs interface using the following scheme:
|
||||
*
|
||||
* static ssize_t show_map(struct device *dev, char *buf) {
|
||||
* memcpy(buf, &map_seg7, sizeof(map_seg7));
|
||||
* return sizeof(map_seg7);
|
||||
* }
|
||||
* static ssize_t store_map(struct device *dev, const char *buf, size_t cnt) {
|
||||
* if(cnt != sizeof(map_seg7))
|
||||
* return -EINVAL;
|
||||
* memcpy(&map_seg7, buf, cnt);
|
||||
* return cnt;
|
||||
* }
|
||||
* static DEVICE_ATTR(map_seg7, PERMS_RW, show_map, store_map);
|
||||
*
|
||||
* History:
|
||||
* 2005-05-31 RFC linux-kernel@vger.kernel.org
|
||||
*/
|
||||
#include <linux/errno.h>
|
||||
|
||||
|
||||
#define BIT_SEG7_A 0
|
||||
#define BIT_SEG7_B 1
|
||||
#define BIT_SEG7_C 2
|
||||
#define BIT_SEG7_D 3
|
||||
#define BIT_SEG7_E 4
|
||||
#define BIT_SEG7_F 5
|
||||
#define BIT_SEG7_G 6
|
||||
#define BIT_SEG7_RESERVED 7
|
||||
|
||||
struct seg7_conversion_map {
|
||||
unsigned char table[128];
|
||||
};
|
||||
|
||||
static inline int map_to_seg7(struct seg7_conversion_map *map, int c)
|
||||
{
|
||||
return c & 0x7f ? map->table[c] : -EINVAL;
|
||||
}
|
||||
|
||||
#define SEG7_CONVERSION_MAP(_name, _map) \
|
||||
struct seg7_conversion_map _name = { .table = { _map } }
|
||||
|
||||
/*
|
||||
* It is recommended to use a facility that allows user space to redefine
|
||||
* custom character sets for LCD devices. Please use a sysfs interface
|
||||
* as described above.
|
||||
*/
|
||||
#define MAP_TO_SEG7_SYSFS_FILE "map_seg7"
|
||||
|
||||
/*******************************************************************************
|
||||
* ASCII conversion table
|
||||
******************************************************************************/
|
||||
|
||||
#define _SEG7(l,a,b,c,d,e,f,g) \
|
||||
( a<<BIT_SEG7_A | b<<BIT_SEG7_B | c<<BIT_SEG7_C | d<<BIT_SEG7_D | \
|
||||
e<<BIT_SEG7_E | f<<BIT_SEG7_F | g<<BIT_SEG7_G )
|
||||
|
||||
#define _MAP_0_32_ASCII_SEG7_NON_PRINTABLE \
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
|
||||
#define _MAP_33_47_ASCII_SEG7_SYMBOL \
|
||||
_SEG7('!',0,0,0,0,1,1,0), _SEG7('"',0,1,0,0,0,1,0), _SEG7('#',0,1,1,0,1,1,0),\
|
||||
_SEG7('$',1,0,1,1,0,1,1), _SEG7('%',0,0,1,0,0,1,0), _SEG7('&',1,0,1,1,1,1,1),\
|
||||
_SEG7('\'',0,0,0,0,0,1,0),_SEG7('(',1,0,0,1,1,1,0), _SEG7(')',1,1,1,1,0,0,0),\
|
||||
_SEG7('*',0,1,1,0,1,1,1), _SEG7('+',0,1,1,0,0,0,1), _SEG7(',',0,0,0,0,1,0,0),\
|
||||
_SEG7('-',0,0,0,0,0,0,1), _SEG7('.',0,0,0,0,1,0,0), _SEG7('/',0,1,0,0,1,0,1),
|
||||
|
||||
#define _MAP_48_57_ASCII_SEG7_NUMERIC \
|
||||
_SEG7('0',1,1,1,1,1,1,0), _SEG7('1',0,1,1,0,0,0,0), _SEG7('2',1,1,0,1,1,0,1),\
|
||||
_SEG7('3',1,1,1,1,0,0,1), _SEG7('4',0,1,1,0,0,1,1), _SEG7('5',1,0,1,1,0,1,1),\
|
||||
_SEG7('6',1,0,1,1,1,1,1), _SEG7('7',1,1,1,0,0,0,0), _SEG7('8',1,1,1,1,1,1,1),\
|
||||
_SEG7('9',1,1,1,1,0,1,1),
|
||||
|
||||
#define _MAP_58_64_ASCII_SEG7_SYMBOL \
|
||||
_SEG7(':',0,0,0,1,0,0,1), _SEG7(';',0,0,0,1,0,0,1), _SEG7('<',1,0,0,0,0,1,1),\
|
||||
_SEG7('=',0,0,0,1,0,0,1), _SEG7('>',1,1,0,0,0,0,1), _SEG7('?',1,1,1,0,0,1,0),\
|
||||
_SEG7('@',1,1,0,1,1,1,1),
|
||||
|
||||
#define _MAP_65_90_ASCII_SEG7_ALPHA_UPPR \
|
||||
_SEG7('A',1,1,1,0,1,1,1), _SEG7('B',1,1,1,1,1,1,1), _SEG7('C',1,0,0,1,1,1,0),\
|
||||
_SEG7('D',1,1,1,1,1,1,0), _SEG7('E',1,0,0,1,1,1,1), _SEG7('F',1,0,0,0,1,1,1),\
|
||||
_SEG7('G',1,1,1,1,0,1,1), _SEG7('H',0,1,1,0,1,1,1), _SEG7('I',0,1,1,0,0,0,0),\
|
||||
_SEG7('J',0,1,1,1,0,0,0), _SEG7('K',0,1,1,0,1,1,1), _SEG7('L',0,0,0,1,1,1,0),\
|
||||
_SEG7('M',1,1,1,0,1,1,0), _SEG7('N',1,1,1,0,1,1,0), _SEG7('O',1,1,1,1,1,1,0),\
|
||||
_SEG7('P',1,1,0,0,1,1,1), _SEG7('Q',1,1,1,1,1,1,0), _SEG7('R',1,1,1,0,1,1,1),\
|
||||
_SEG7('S',1,0,1,1,0,1,1), _SEG7('T',0,0,0,1,1,1,1), _SEG7('U',0,1,1,1,1,1,0),\
|
||||
_SEG7('V',0,1,1,1,1,1,0), _SEG7('W',0,1,1,1,1,1,1), _SEG7('X',0,1,1,0,1,1,1),\
|
||||
_SEG7('Y',0,1,1,0,0,1,1), _SEG7('Z',1,1,0,1,1,0,1),
|
||||
|
||||
#define _MAP_91_96_ASCII_SEG7_SYMBOL \
|
||||
_SEG7('[',1,0,0,1,1,1,0), _SEG7('\\',0,0,1,0,0,1,1),_SEG7(']',1,1,1,1,0,0,0),\
|
||||
_SEG7('^',1,1,0,0,0,1,0), _SEG7('_',0,0,0,1,0,0,0), _SEG7('`',0,1,0,0,0,0,0),
|
||||
|
||||
#define _MAP_97_122_ASCII_SEG7_ALPHA_LOWER \
|
||||
_SEG7('A',1,1,1,0,1,1,1), _SEG7('b',0,0,1,1,1,1,1), _SEG7('c',0,0,0,1,1,0,1),\
|
||||
_SEG7('d',0,1,1,1,1,0,1), _SEG7('E',1,0,0,1,1,1,1), _SEG7('F',1,0,0,0,1,1,1),\
|
||||
_SEG7('G',1,1,1,1,0,1,1), _SEG7('h',0,0,1,0,1,1,1), _SEG7('i',0,0,1,0,0,0,0),\
|
||||
_SEG7('j',0,0,1,1,0,0,0), _SEG7('k',0,0,1,0,1,1,1), _SEG7('L',0,0,0,1,1,1,0),\
|
||||
_SEG7('M',1,1,1,0,1,1,0), _SEG7('n',0,0,1,0,1,0,1), _SEG7('o',0,0,1,1,1,0,1),\
|
||||
_SEG7('P',1,1,0,0,1,1,1), _SEG7('q',1,1,1,0,0,1,1), _SEG7('r',0,0,0,0,1,0,1),\
|
||||
_SEG7('S',1,0,1,1,0,1,1), _SEG7('T',0,0,0,1,1,1,1), _SEG7('u',0,0,1,1,1,0,0),\
|
||||
_SEG7('v',0,0,1,1,1,0,0), _SEG7('W',0,1,1,1,1,1,1), _SEG7('X',0,1,1,0,1,1,1),\
|
||||
_SEG7('y',0,1,1,1,0,1,1), _SEG7('Z',1,1,0,1,1,0,1),
|
||||
|
||||
#define _MAP_123_126_ASCII_SEG7_SYMBOL \
|
||||
_SEG7('{',1,0,0,1,1,1,0), _SEG7('|',0,0,0,0,1,1,0), _SEG7('}',1,1,1,1,0,0,0),\
|
||||
_SEG7('~',1,0,0,0,0,0,0),
|
||||
|
||||
/* Maps */
|
||||
|
||||
/* This set tries to map as close as possible to the visible characteristics
|
||||
* of the ASCII symbol, lowercase and uppercase letters may differ in
|
||||
* presentation on the display.
|
||||
*/
|
||||
#define MAP_ASCII7SEG_ALPHANUM \
|
||||
_MAP_0_32_ASCII_SEG7_NON_PRINTABLE \
|
||||
_MAP_33_47_ASCII_SEG7_SYMBOL \
|
||||
_MAP_48_57_ASCII_SEG7_NUMERIC \
|
||||
_MAP_58_64_ASCII_SEG7_SYMBOL \
|
||||
_MAP_65_90_ASCII_SEG7_ALPHA_UPPR \
|
||||
_MAP_91_96_ASCII_SEG7_SYMBOL \
|
||||
_MAP_97_122_ASCII_SEG7_ALPHA_LOWER \
|
||||
_MAP_123_126_ASCII_SEG7_SYMBOL
|
||||
|
||||
/* This set tries to map as close as possible to the symbolic characteristics
|
||||
* of the ASCII character for maximum discrimination.
|
||||
* For now this means all alpha chars are in lower case representations.
|
||||
* (This for example facilitates the use of hex numbers with uppercase input.)
|
||||
*/
|
||||
#define MAP_ASCII7SEG_ALPHANUM_LC \
|
||||
_MAP_0_32_ASCII_SEG7_NON_PRINTABLE \
|
||||
_MAP_33_47_ASCII_SEG7_SYMBOL \
|
||||
_MAP_48_57_ASCII_SEG7_NUMERIC \
|
||||
_MAP_58_64_ASCII_SEG7_SYMBOL \
|
||||
_MAP_97_122_ASCII_SEG7_ALPHA_LOWER \
|
||||
_MAP_91_96_ASCII_SEG7_SYMBOL \
|
||||
_MAP_97_122_ASCII_SEG7_ALPHA_LOWER \
|
||||
_MAP_123_126_ASCII_SEG7_SYMBOL
|
||||
|
||||
#define SEG7_DEFAULT_MAP(_name) \
|
||||
SEG7_CONVERSION_MAP(_name,MAP_ASCII7SEG_ALPHANUM)
|
||||
|
||||
#endif /* MAP_TO_7SEGMENT_H */
|
||||
|
@@ -263,7 +263,7 @@ int hid_pid_init(struct hid_device *hid)
|
||||
struct hid_ff_pid *private;
|
||||
struct hid_input *hidinput = list_entry(&hid->inputs, struct hid_input, list);
|
||||
|
||||
private = hid->ff_private = kcalloc(1, sizeof(struct hid_ff_pid), GFP_KERNEL);
|
||||
private = hid->ff_private = kzalloc(sizeof(struct hid_ff_pid), GFP_KERNEL);
|
||||
if (!private)
|
||||
return -ENOMEM;
|
||||
|
||||
|
1013
drivers/usb/input/yealink.c
Normal file
1013
drivers/usb/input/yealink.c
Normal file
File diff suppressed because it is too large
Load Diff
220
drivers/usb/input/yealink.h
Normal file
220
drivers/usb/input/yealink.h
Normal file
@@ -0,0 +1,220 @@
|
||||
/*
|
||||
* drivers/usb/input/yealink.h
|
||||
*
|
||||
* Copyright (c) 2005 Henk Vergonet <Henk.Vergonet@gmail.com>
|
||||
*
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License as
|
||||
* published by the Free Software Foundation; either version 2 of
|
||||
* the License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*/
|
||||
#ifndef INPUT_YEALINK_H
|
||||
#define INPUT_YEALINK_H
|
||||
|
||||
/* Using the control channel on interface 3 various aspects of the phone
|
||||
* can be controlled like LCD, LED, dialtone and the ringtone.
|
||||
*/
|
||||
|
||||
struct yld_ctl_packet {
|
||||
u8 cmd; /* command code, see below */
|
||||
u8 size; /* 1-11, size of used data bytes. */
|
||||
u16 offset; /* internal packet offset */
|
||||
u8 data[11];
|
||||
s8 sum; /* negative sum of 15 preceding bytes */
|
||||
} __attribute__ ((packed));
|
||||
|
||||
#define USB_PKT_LEN sizeof(struct yld_ctl_packet)
|
||||
|
||||
/* The following yld_ctl_packet's are available: */
|
||||
|
||||
/* Init registers
|
||||
*
|
||||
* cmd 0x8e
|
||||
* size 10
|
||||
* offset 0
|
||||
* data 0,0,0,0....
|
||||
*/
|
||||
#define CMD_INIT 0x8e
|
||||
|
||||
/* Request key scan
|
||||
*
|
||||
* cmd 0x80
|
||||
* size 1
|
||||
* offset 0
|
||||
* data[0] on return returns the key number, if it changes there's a new
|
||||
* key pressed.
|
||||
*/
|
||||
#define CMD_KEYPRESS 0x80
|
||||
|
||||
/* Request scancode
|
||||
*
|
||||
* cmd 0x81
|
||||
* size 1
|
||||
* offset key number [0-1f]
|
||||
* data[0] on return returns the scancode
|
||||
*/
|
||||
#define CMD_SCANCODE 0x81
|
||||
|
||||
/* Set LCD
|
||||
*
|
||||
* cmd 0x04
|
||||
* size 1-11
|
||||
* offset 0-23
|
||||
* data segment bits
|
||||
*/
|
||||
#define CMD_LCD 0x04
|
||||
|
||||
/* Set led
|
||||
*
|
||||
* cmd 0x05
|
||||
* size 1
|
||||
* offset 0
|
||||
* data[0] 0 OFF / 1 ON
|
||||
*/
|
||||
#define CMD_LED 0x05
|
||||
|
||||
/* Set ringtone volume
|
||||
*
|
||||
* cmd 0x11
|
||||
* size 1
|
||||
* offset 0
|
||||
* data[0] 0-0xff volume
|
||||
*/
|
||||
#define CMD_RING_VOLUME 0x11
|
||||
|
||||
/* Set ringtone notes
|
||||
*
|
||||
* cmd 0x02
|
||||
* size 1-11
|
||||
* offset 0->
|
||||
* data binary representation LE16(-freq), LE16(duration) ....
|
||||
*/
|
||||
#define CMD_RING_NOTE 0x02
|
||||
|
||||
/* Sound ringtone via the speaker on the back
|
||||
*
|
||||
* cmd 0x03
|
||||
* size 1
|
||||
* offset 0
|
||||
* data[0] 0 OFF / 0x24 ON
|
||||
*/
|
||||
#define CMD_RINGTONE 0x03
|
||||
|
||||
/* Sound dial tone via the ear speaker
|
||||
*
|
||||
* cmd 0x09
|
||||
* size 1
|
||||
* offset 0
|
||||
* data[0] 0 OFF / 1 ON
|
||||
*/
|
||||
#define CMD_DIALTONE 0x09
|
||||
|
||||
#endif /* INPUT_YEALINK_H */
|
||||
|
||||
|
||||
#if defined(_SEG) && defined(_PIC)
|
||||
/* This table maps the LCD segments onto individual bit positions in the
|
||||
* yld_status struct.
|
||||
*/
|
||||
|
||||
/* LCD, each segment must be driven seperately.
|
||||
*
|
||||
* Layout:
|
||||
*
|
||||
* |[] [][] [][] [][] in |[][]
|
||||
* |[] M [][] D [][] : [][] out |[][]
|
||||
* store
|
||||
*
|
||||
* NEW REP SU MO TU WE TH FR SA
|
||||
*
|
||||
* [] [] [] [] [] [] [] [] [] [] [] []
|
||||
* [] [] [] [] [] [] [] [] [] [] [] []
|
||||
*/
|
||||
|
||||
/* Line 1
|
||||
* Format : 18.e8.M8.88...188
|
||||
* Icon names : M D : IN OUT STORE
|
||||
*/
|
||||
#define LCD_LINE1_OFFSET 0
|
||||
#define LCD_LINE1_SIZE 17
|
||||
|
||||
/* Note: first g then f => ! ! */
|
||||
/* _SEG( type a b c d e g f ) */
|
||||
_SEG('1', 0,0 , 22,2 , 22,2 , 0,0 , 0,0 , 0,0 , 0,0 ),
|
||||
_SEG('8', 20,1 , 20,2 , 20,4 , 20,8 , 21,4 , 21,2 , 21,1 ),
|
||||
_PIC('.', 22,1 , "M" ),
|
||||
_SEG('e', 18,1 , 18,2 , 18,4 , 18,1 , 19,2 , 18,1 , 19,1 ),
|
||||
_SEG('8', 16,1 , 16,2 , 16,4 , 16,8 , 17,4 , 17,2 , 17,1 ),
|
||||
_PIC('.', 15,8 , "D" ),
|
||||
_SEG('M', 14,1 , 14,2 , 14,4 , 14,1 , 15,4 , 15,2 , 15,1 ),
|
||||
_SEG('8', 12,1 , 12,2 , 12,4 , 12,8 , 13,4 , 13,2 , 13,1 ),
|
||||
_PIC('.', 11,8 , ":" ),
|
||||
_SEG('8', 10,1 , 10,2 , 10,4 , 10,8 , 11,4 , 11,2 , 11,1 ),
|
||||
_SEG('8', 8,1 , 8,2 , 8,4 , 8,8 , 9,4 , 9,2 , 9,1 ),
|
||||
_PIC('.', 7,1 , "IN" ),
|
||||
_PIC('.', 7,2 , "OUT" ),
|
||||
_PIC('.', 7,4 , "STORE" ),
|
||||
_SEG('1', 0,0 , 5,1 , 5,1 , 0,0 , 0,0 , 0,0 , 0,0 ),
|
||||
_SEG('8', 4,1 , 4,2 , 4,4 , 4,8 , 5,8 , 5,4 , 5,2 ),
|
||||
_SEG('8', 2,1 , 2,2 , 2,4 , 2,8 , 3,4 , 3,2 , 3,1 ),
|
||||
|
||||
/* Line 2
|
||||
* Format : .........
|
||||
* Pict. name : NEW REP SU MO TU WE TH FR SA
|
||||
*/
|
||||
#define LCD_LINE2_OFFSET LCD_LINE1_OFFSET + LCD_LINE1_SIZE
|
||||
#define LCD_LINE2_SIZE 9
|
||||
|
||||
_PIC('.', 23,2 , "NEW" ),
|
||||
_PIC('.', 23,4 , "REP" ),
|
||||
_PIC('.', 1,8 , "SU" ),
|
||||
_PIC('.', 1,4 , "MO" ),
|
||||
_PIC('.', 1,2 , "TU" ),
|
||||
_PIC('.', 1,1 , "WE" ),
|
||||
_PIC('.', 0,1 , "TH" ),
|
||||
_PIC('.', 0,2 , "FR" ),
|
||||
_PIC('.', 0,4 , "SA" ),
|
||||
|
||||
/* Line 3
|
||||
* Format : 888888888888
|
||||
*/
|
||||
#define LCD_LINE3_OFFSET LCD_LINE2_OFFSET + LCD_LINE2_SIZE
|
||||
#define LCD_LINE3_SIZE 12
|
||||
|
||||
_SEG('8', 22,16, 22,32, 22,64, 22,128, 23,128, 23,64, 23,32 ),
|
||||
_SEG('8', 20,16, 20,32, 20,64, 20,128, 21,128, 21,64, 21,32 ),
|
||||
_SEG('8', 18,16, 18,32, 18,64, 18,128, 19,128, 19,64, 19,32 ),
|
||||
_SEG('8', 16,16, 16,32, 16,64, 16,128, 17,128, 17,64, 17,32 ),
|
||||
_SEG('8', 14,16, 14,32, 14,64, 14,128, 15,128, 15,64, 15,32 ),
|
||||
_SEG('8', 12,16, 12,32, 12,64, 12,128, 13,128, 13,64, 13,32 ),
|
||||
_SEG('8', 10,16, 10,32, 10,64, 10,128, 11,128, 11,64, 11,32 ),
|
||||
_SEG('8', 8,16, 8,32, 8,64, 8,128, 9,128, 9,64, 9,32 ),
|
||||
_SEG('8', 6,16, 6,32, 6,64, 6,128, 7,128, 7,64, 7,32 ),
|
||||
_SEG('8', 4,16, 4,32, 4,64, 4,128, 5,128, 5,64, 5,32 ),
|
||||
_SEG('8', 2,16, 2,32, 2,64, 2,128, 3,128, 3,64, 3,32 ),
|
||||
_SEG('8', 0,16, 0,32, 0,64, 0,128, 1,128, 1,64, 1,32 ),
|
||||
|
||||
/* Line 4
|
||||
*
|
||||
* The LED, DIALTONE and RINGTONE are implemented as icons and use the same
|
||||
* sysfs interface.
|
||||
*/
|
||||
#define LCD_LINE4_OFFSET LCD_LINE3_OFFSET + LCD_LINE3_SIZE
|
||||
|
||||
_PIC('.', offsetof(struct yld_status, led) , 0x01, "LED" ),
|
||||
_PIC('.', offsetof(struct yld_status, dialtone) , 0x01, "DIALTONE" ),
|
||||
_PIC('.', offsetof(struct yld_status, ringtone) , 0x24, "RINGTONE" ),
|
||||
|
||||
#undef _SEG
|
||||
#undef _PIC
|
||||
#endif /* _SEG && _PIC */
|
Reference in New Issue
Block a user