Merge commit 'v2.6.35-rc6' into devicetree/next
Conflicts: arch/sparc/kernel/prom_64.c
Este commit está contenido en:
@@ -89,7 +89,6 @@ struct gc_pad {
|
||||
struct gc {
|
||||
struct pardevice *pd;
|
||||
struct gc_pad pads[GC_MAX_DEVICES];
|
||||
struct input_dev *dev[GC_MAX_DEVICES];
|
||||
struct timer_list timer;
|
||||
int pad_count[GC_MAX];
|
||||
int used;
|
||||
@@ -387,7 +386,7 @@ static void gc_nes_process_packet(struct gc *gc)
|
||||
for (i = 0; i < GC_MAX_DEVICES; i++) {
|
||||
|
||||
pad = &gc->pads[i];
|
||||
dev = gc->dev[i];
|
||||
dev = pad->dev;
|
||||
s = gc_status_bit[i];
|
||||
|
||||
switch (pad->type) {
|
||||
@@ -579,7 +578,7 @@ static void gc_psx_command(struct gc *gc, int b, unsigned char *data)
|
||||
read = parport_read_status(port) ^ 0x80;
|
||||
|
||||
for (j = 0; j < GC_MAX_DEVICES; j++) {
|
||||
struct gc_pad *pad = &gc->pads[i];
|
||||
struct gc_pad *pad = &gc->pads[j];
|
||||
|
||||
if (pad->type == GC_PSX || pad->type == GC_DDR)
|
||||
data[j] |= (read & gc_status_bit[j]) ? (1 << i) : 0;
|
||||
|
@@ -73,7 +73,7 @@ config KEYBOARD_ATKBD
|
||||
default y
|
||||
select SERIO
|
||||
select SERIO_LIBPS2
|
||||
select SERIO_I8042 if X86 && !X86_MRST
|
||||
select SERIO_I8042 if X86
|
||||
select SERIO_GSCPS2 if GSC
|
||||
help
|
||||
Say Y here if you want to use a standard AT or PS/2 keyboard. Usually
|
||||
@@ -124,7 +124,7 @@ config KEYBOARD_ATKBD_RDI_KEYCODES
|
||||
right-hand column will be interpreted as the key shown in the
|
||||
left-hand column.
|
||||
|
||||
config QT2160
|
||||
config KEYBOARD_QT2160
|
||||
tristate "Atmel AT42QT2160 Touch Sensor Chip"
|
||||
depends on I2C && EXPERIMENTAL
|
||||
help
|
||||
|
@@ -51,8 +51,12 @@
|
||||
*/
|
||||
#define TWL4030_MAX_ROWS 8 /* TWL4030 hard limit */
|
||||
#define TWL4030_MAX_COLS 8
|
||||
#define TWL4030_ROW_SHIFT 3
|
||||
#define TWL4030_KEYMAP_SIZE (TWL4030_MAX_ROWS * TWL4030_MAX_COLS)
|
||||
/*
|
||||
* Note that we add space for an extra column so that we can handle
|
||||
* row lines connected to the gnd (see twl4030_col_xlate()).
|
||||
*/
|
||||
#define TWL4030_ROW_SHIFT 4
|
||||
#define TWL4030_KEYMAP_SIZE (TWL4030_MAX_ROWS << TWL4030_ROW_SHIFT)
|
||||
|
||||
struct twl4030_keypad {
|
||||
unsigned short keymap[TWL4030_KEYMAP_SIZE];
|
||||
@@ -182,7 +186,7 @@ static int twl4030_read_kp_matrix_state(struct twl4030_keypad *kp, u16 *state)
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int twl4030_is_in_ghost_state(struct twl4030_keypad *kp, u16 *key_state)
|
||||
static bool twl4030_is_in_ghost_state(struct twl4030_keypad *kp, u16 *key_state)
|
||||
{
|
||||
int i;
|
||||
u16 check = 0;
|
||||
@@ -191,12 +195,12 @@ static int twl4030_is_in_ghost_state(struct twl4030_keypad *kp, u16 *key_state)
|
||||
u16 col = key_state[i];
|
||||
|
||||
if ((col & check) && hweight16(col) > 1)
|
||||
return 1;
|
||||
return true;
|
||||
|
||||
check |= col;
|
||||
}
|
||||
|
||||
return 0;
|
||||
return false;
|
||||
}
|
||||
|
||||
static void twl4030_kp_scan(struct twl4030_keypad *kp, bool release_all)
|
||||
@@ -225,7 +229,8 @@ static void twl4030_kp_scan(struct twl4030_keypad *kp, bool release_all)
|
||||
if (!changed)
|
||||
continue;
|
||||
|
||||
for (col = 0; col < kp->n_cols; col++) {
|
||||
/* Extra column handles "all gnd" rows */
|
||||
for (col = 0; col < kp->n_cols + 1; col++) {
|
||||
int code;
|
||||
|
||||
if (!(changed & (1 << col)))
|
||||
|
@@ -258,7 +258,7 @@ static struct platform_driver w90p910_keypad_driver = {
|
||||
.probe = w90p910_keypad_probe,
|
||||
.remove = __devexit_p(w90p910_keypad_remove),
|
||||
.driver = {
|
||||
.name = "nuc900-keypad",
|
||||
.name = "nuc900-kpi",
|
||||
.owner = THIS_MODULE,
|
||||
},
|
||||
};
|
||||
|
@@ -69,7 +69,7 @@ static irqreturn_t pcf8574_kp_irq_handler(int irq, void *dev_id)
|
||||
unsigned char nextstate = read_state(lp);
|
||||
|
||||
if (lp->laststate != nextstate) {
|
||||
int key_down = nextstate <= ARRAY_SIZE(lp->btncode);
|
||||
int key_down = nextstate < ARRAY_SIZE(lp->btncode);
|
||||
unsigned short keycode = key_down ?
|
||||
lp->btncode[nextstate] : lp->btncode[lp->laststate];
|
||||
|
||||
|
@@ -17,7 +17,7 @@ config MOUSE_PS2
|
||||
default y
|
||||
select SERIO
|
||||
select SERIO_LIBPS2
|
||||
select SERIO_I8042 if X86 && !X86_MRST
|
||||
select SERIO_I8042 if X86
|
||||
select SERIO_GSCPS2 if GSC
|
||||
help
|
||||
Say Y here if you have a PS/2 mouse connected to your system. This
|
||||
|
@@ -141,8 +141,13 @@ static int synaptics_capability(struct psmouse *psmouse)
|
||||
priv->capabilities = (cap[0] << 16) | (cap[1] << 8) | cap[2];
|
||||
priv->ext_cap = priv->ext_cap_0c = 0;
|
||||
|
||||
if (!SYN_CAP_VALID(priv->capabilities))
|
||||
/*
|
||||
* Older firmwares had submodel ID fixed to 0x47
|
||||
*/
|
||||
if (SYN_ID_FULL(priv->identity) < 0x705 &&
|
||||
SYN_CAP_SUBMODEL_ID(priv->capabilities) != 0x47) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
/*
|
||||
* Unless capExtended is set the rest of the flags should be ignored
|
||||
@@ -206,6 +211,7 @@ static int synaptics_resolution(struct psmouse *psmouse)
|
||||
unsigned char max[3];
|
||||
|
||||
if (SYN_ID_MAJOR(priv->identity) < 4)
|
||||
return 0;
|
||||
|
||||
if (synaptics_send_cmd(psmouse, SYN_QUE_RESOLUTION, res) == 0) {
|
||||
if (res[0] != 0 && (res[1] & 0x80) && res[2] != 0) {
|
||||
|
@@ -47,7 +47,7 @@
|
||||
#define SYN_CAP_FOUR_BUTTON(c) ((c) & (1 << 3))
|
||||
#define SYN_CAP_MULTIFINGER(c) ((c) & (1 << 1))
|
||||
#define SYN_CAP_PALMDETECT(c) ((c) & (1 << 0))
|
||||
#define SYN_CAP_VALID(c) ((((c) & 0x00ff00) >> 8) == 0x47)
|
||||
#define SYN_CAP_SUBMODEL_ID(c) (((c) & 0x00ff00) >> 8)
|
||||
#define SYN_EXT_CAP_REQUESTS(c) (((c) & 0x700000) >> 20)
|
||||
#define SYN_CAP_MULTI_BUTTON_NO(ec) (((ec) & 0x00f000) >> 12)
|
||||
#define SYN_CAP_PRODUCT_ID(ec) (((ec) & 0xff0000) >> 16)
|
||||
@@ -66,6 +66,7 @@
|
||||
#define SYN_ID_MODEL(i) (((i) >> 4) & 0x0f)
|
||||
#define SYN_ID_MAJOR(i) ((i) & 0x0f)
|
||||
#define SYN_ID_MINOR(i) (((i) >> 16) & 0xff)
|
||||
#define SYN_ID_FULL(i) ((SYN_ID_MAJOR(i) << 8) | SYN_ID_MINOR(i))
|
||||
#define SYN_ID_IS_SYNAPTICS(i) ((((i) >> 8) & 0xff) == 0x47)
|
||||
|
||||
/* synaptics special commands */
|
||||
|
@@ -7,6 +7,10 @@
|
||||
* the Free Software Foundation.
|
||||
*/
|
||||
|
||||
#ifdef CONFIG_X86
|
||||
#include <asm/x86_init.h>
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Names.
|
||||
*/
|
||||
@@ -165,6 +169,13 @@ static const struct dmi_system_id __initconst i8042_dmi_noloop_table[] = {
|
||||
DMI_MATCH(DMI_BOARD_VERSION, "1.02"),
|
||||
},
|
||||
},
|
||||
{
|
||||
/* Gigabyte Spring Peak - defines wrong chassis type */
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "GIGABYTE"),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "Spring Peak"),
|
||||
},
|
||||
},
|
||||
{
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"),
|
||||
@@ -840,6 +851,12 @@ static int __init i8042_platform_init(void)
|
||||
{
|
||||
int retval;
|
||||
|
||||
#ifdef CONFIG_X86
|
||||
/* Just return if pre-detection shows no i8042 controller exist */
|
||||
if (!x86_platform.i8042_detect())
|
||||
return -ENODEV;
|
||||
#endif
|
||||
|
||||
/*
|
||||
* On ix86 platforms touching the i8042 data register region can do really
|
||||
* bad things. Because of this the region is always reserved on ix86 boxes.
|
||||
|
@@ -284,12 +284,13 @@ static int wacom_intuos_inout(struct wacom_wac *wacom)
|
||||
(data[4] << 20) + (data[5] << 12) +
|
||||
(data[6] << 4) + (data[7] >> 4);
|
||||
|
||||
wacom->id[idx] = (data[2] << 4) | (data[3] >> 4);
|
||||
wacom->id[idx] = (data[2] << 4) | (data[3] >> 4) |
|
||||
((data[7] & 0x0f) << 20) | ((data[8] & 0xf0) << 12);
|
||||
|
||||
switch (wacom->id[idx]) {
|
||||
switch (wacom->id[idx] & 0xfffff) {
|
||||
case 0x812: /* Inking pen */
|
||||
case 0x801: /* Intuos3 Inking pen */
|
||||
case 0x20802: /* Intuos4 Classic Pen */
|
||||
case 0x20802: /* Intuos4 Inking Pen */
|
||||
case 0x012:
|
||||
wacom->tool[idx] = BTN_TOOL_PENCIL;
|
||||
break;
|
||||
@@ -513,7 +514,7 @@ static int wacom_intuos_irq(struct wacom_wac *wacom)
|
||||
input_report_abs(input, ABS_RX, ((data[1] & 0x1f) << 8) | data[2]);
|
||||
input_report_abs(input, ABS_RY, ((data[3] & 0x1f) << 8) | data[4]);
|
||||
|
||||
if ((data[5] & 0x1f) | (data[6] & 0x1f) | (data[1] & 0x1f) |
|
||||
if ((data[5] & 0x1f) | data[6] | (data[1] & 0x1f) |
|
||||
data[2] | (data[3] & 0x1f) | data[4] | data[8] |
|
||||
(data[7] & 0x01)) {
|
||||
input_report_key(input, wacom->tool[1], 1);
|
||||
|
@@ -679,6 +679,13 @@ static int __devinit ad7877_probe(struct spi_device *spi)
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
spi->bits_per_word = 16;
|
||||
err = spi_setup(spi);
|
||||
if (err) {
|
||||
dev_dbg(&spi->dev, "spi master doesn't support 16 bits/word\n");
|
||||
return err;
|
||||
}
|
||||
|
||||
ts = kzalloc(sizeof(struct ad7877), GFP_KERNEL);
|
||||
input_dev = input_allocate_device();
|
||||
if (!ts || !input_dev) {
|
||||
|
@@ -233,7 +233,7 @@ static int __devinit w90x900ts_probe(struct platform_device *pdev)
|
||||
w90p910_ts->state = TS_IDLE;
|
||||
spin_lock_init(&w90p910_ts->lock);
|
||||
setup_timer(&w90p910_ts->timer, w90p910_check_pen_up,
|
||||
(unsigned long)&w90p910_ts);
|
||||
(unsigned long)w90p910_ts);
|
||||
|
||||
res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
|
||||
if (!res) {
|
||||
|
Referencia en una nueva incidencia
Block a user