Skip to content

Commit

Permalink
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel…
Browse files Browse the repository at this point in the history
…/git/dtor/input

* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/dtor/input:
  Input: ads7846 - SPI_CPHA mode bugfix
  Input: ads7846 - document that it handles tsc2046 too
  Input: input-polldev - add module info
  Input: ucb1x00-ts - remove commented out code
  Input: ucb1400_ts - use sched_setscheduler()
  Input: ALPS - force stream mode
  Input: iforce - minor clean-ups
  Input: iforce - fix force feedback not working
  Input: adbhid - do not access input_dev->private directly
  Input: logips2pp - add type 72 (PS/2 TrackMan Marble)
  • Loading branch information
Linus Torvalds committed May 23, 2007
2 parents ad9ddd6 + 230ffc8 commit 31f6e1b
Show file tree
Hide file tree
Showing 11 changed files with 66 additions and 59 deletions.
4 changes: 1 addition & 3 deletions drivers/input/joystick/iforce/iforce-main.c
Original file line number Diff line number Diff line change
Expand Up @@ -370,10 +370,8 @@ int iforce_init_device(struct iforce *iforce)

/*
* Disable spring, enable force feedback.
* FIXME: We should use iforce_set_autocenter() et al here.
*/

iforce_send_packet(iforce, FF_CMD_AUTOCENTER, "\004\000");
iforce_set_autocenter(input_dev, 0);

/*
* Find appropriate device entry
Expand Down
10 changes: 8 additions & 2 deletions drivers/input/joystick/iforce/iforce-packets.c
Original file line number Diff line number Diff line change
Expand Up @@ -246,6 +246,8 @@ void iforce_process_packet(struct iforce *iforce, u16 cmd, unsigned char *data)

int iforce_get_id_packet(struct iforce *iforce, char *packet)
{
int status;

switch (iforce->bus) {

case IFORCE_USB:
Expand All @@ -254,18 +256,22 @@ int iforce_get_id_packet(struct iforce *iforce, char *packet)
iforce->cr.bRequest = packet[0];
iforce->ctrl->dev = iforce->usbdev;

if (usb_submit_urb(iforce->ctrl, GFP_ATOMIC))
status = usb_submit_urb(iforce->ctrl, GFP_ATOMIC);
if (status) {
err("usb_submit_urb failed %d", status);
return -1;
}

wait_event_interruptible_timeout(iforce->wait,
iforce->ctrl->status != -EINPROGRESS, HZ);

if (iforce->ctrl->status) {
dbg("iforce->ctrl->status = %d", iforce->ctrl->status);
usb_unlink_urb(iforce->ctrl);
return -1;
}
#else
err("iforce_get_id_packet: iforce->bus = USB!");
dbg("iforce_get_id_packet: iforce->bus = USB!");
#endif
break;

Expand Down
5 changes: 3 additions & 2 deletions drivers/input/joystick/iforce/iforce-usb.c
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,7 @@ void iforce_usb_xmit(struct iforce *iforce)
XMIT_INC(iforce->xmit.tail, n);

if ( (n=usb_submit_urb(iforce->out, GFP_ATOMIC)) ) {
clear_bit(IFORCE_XMIT_RUNNING, iforce->xmit_flags);
warn("usb_submit_urb failed %d\n", n);
}

Expand Down Expand Up @@ -163,8 +164,8 @@ static int iforce_usb_probe(struct usb_interface *intf,
usb_fill_int_urb(iforce->irq, dev, usb_rcvintpipe(dev, epirq->bEndpointAddress),
iforce->data, 16, iforce_usb_irq, iforce, epirq->bInterval);

usb_fill_bulk_urb(iforce->out, dev, usb_sndbulkpipe(dev, epout->bEndpointAddress),
iforce + 1, 32, iforce_usb_out, iforce);
usb_fill_int_urb(iforce->out, dev, usb_sndintpipe(dev, epout->bEndpointAddress),
iforce + 1, 32, iforce_usb_out, iforce, epout->bInterval);

usb_fill_control_urb(iforce->ctrl, dev, usb_rcvctrlpipe(dev, 0),
(void*) &iforce->cr, iforce->edata, 16, iforce_usb_ctrl, iforce);
Expand Down
5 changes: 5 additions & 0 deletions drivers/input/misc/input-polldev.c
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,11 @@
#include <linux/mutex.h>
#include <linux/input-polldev.h>

MODULE_AUTHOR("Dmitry Torokhov <[email protected]>");
MODULE_DESCRIPTION("Generic implementation of a polled input device");
MODULE_LICENSE("GPL v2");
MODULE_VERSION("0.1");

static DEFINE_MUTEX(polldev_mutex);
static int polldev_users;
static struct workqueue_struct *polldev_wq;
Expand Down
58 changes: 31 additions & 27 deletions drivers/input/mouse/alps.c
Original file line number Diff line number Diff line change
Expand Up @@ -251,11 +251,15 @@ static const struct alps_model_info *alps_get_model(struct psmouse *psmouse, int

dbg("E7 report: %2.2x %2.2x %2.2x", param[0], param[1], param[2]);

for (i = 0; i < ARRAY_SIZE(rates) && param[2] != rates[i]; i++);
*version = (param[0] << 8) | (param[1] << 4) | i;
if (version) {
for (i = 0; i < ARRAY_SIZE(rates) && param[2] != rates[i]; i++)
/* empty */;
*version = (param[0] << 8) | (param[1] << 4) | i;
}

for (i = 0; i < ARRAY_SIZE(alps_model_data); i++)
if (!memcmp(param, alps_model_data[i].signature, sizeof(alps_model_data[i].signature)))
if (!memcmp(param, alps_model_data[i].signature,
sizeof(alps_model_data[i].signature)))
return alps_model_data + i;

return NULL;
Expand Down Expand Up @@ -380,32 +384,46 @@ static int alps_poll(struct psmouse *psmouse)
return 0;
}

static int alps_reconnect(struct psmouse *psmouse)
static int alps_hw_init(struct psmouse *psmouse, int *version)
{
struct alps_data *priv = psmouse->private;
int version;

psmouse_reset(psmouse);

if (!(priv->i = alps_get_model(psmouse, &version)))
priv->i = alps_get_model(psmouse, version);
if (!priv->i)
return -1;

if ((priv->i->flags & ALPS_PASS) && alps_passthrough_mode(psmouse, 1))
return -1;

if (alps_tap_mode(psmouse, 1)) {
printk(KERN_WARNING "alps.c: Failed to reenable hardware tapping\n");
printk(KERN_WARNING "alps.c: Failed to enable hardware tapping\n");
return -1;
}

if (alps_absolute_mode(psmouse)) {
printk(KERN_ERR "alps.c: Failed to reenable absolute mode\n");
printk(KERN_ERR "alps.c: Failed to enable absolute mode\n");
return -1;
}

if ((priv->i->flags & ALPS_PASS) && alps_passthrough_mode(psmouse, 0))
return -1;

/* ALPS needs stream mode, otherwise it won't report any data */
if (ps2_command(&psmouse->ps2dev, NULL, PSMOUSE_CMD_SETSTREAM)) {
printk(KERN_ERR "alps.c: Failed to enable stream mode\n");
return -1;
}

return 0;
}

static int alps_reconnect(struct psmouse *psmouse)
{
psmouse_reset(psmouse);

if (alps_hw_init(psmouse, NULL))
return -1;

return 0;
}

Expand All @@ -430,23 +448,9 @@ int alps_init(struct psmouse *psmouse)
goto init_fail;

priv->dev2 = dev2;
psmouse->private = priv;

priv->i = alps_get_model(psmouse, &version);
if (!priv->i)
goto init_fail;

if ((priv->i->flags & ALPS_PASS) && alps_passthrough_mode(psmouse, 1))
goto init_fail;

if (alps_tap_mode(psmouse, 1))
printk(KERN_WARNING "alps.c: Failed to enable hardware tapping\n");

if (alps_absolute_mode(psmouse)) {
printk(KERN_ERR "alps.c: Failed to enable absolute mode\n");
goto init_fail;
}

if ((priv->i->flags & ALPS_PASS) && alps_passthrough_mode(psmouse, 0))
if (alps_hw_init(psmouse, &version))
goto init_fail;

dev1->evbit[LONG(EV_KEY)] |= BIT(EV_KEY);
Expand Down Expand Up @@ -493,13 +497,13 @@ int alps_init(struct psmouse *psmouse)
/* We are having trouble resyncing ALPS touchpads so disable it for now */
psmouse->resync_time = 0;

psmouse->private = priv;
return 0;

init_fail:
psmouse_reset(psmouse);
input_free_device(dev2);
kfree(priv);
psmouse->private = NULL;
return -1;
}

Expand Down
1 change: 1 addition & 0 deletions drivers/input/mouse/logips2pp.c
Original file line number Diff line number Diff line change
Expand Up @@ -221,6 +221,7 @@ static const struct ps2pp_info *get_model_info(unsigned char model)
{ 66, PS2PP_KIND_MX, /* MX3100 reciver */
PS2PP_WHEEL | PS2PP_SIDE_BTN | PS2PP_TASK_BTN |
PS2PP_EXTRA_BTN | PS2PP_NAV_BTN | PS2PP_HWHEEL },
{ 72, PS2PP_KIND_TRACKMAN, 0 }, /* T-CH11: TrackMan Marble */
{ 73, 0, PS2PP_SIDE_BTN },
{ 75, PS2PP_KIND_WHEEL, PS2PP_WHEEL },
{ 76, PS2PP_KIND_WHEEL, PS2PP_WHEEL },
Expand Down
8 changes: 4 additions & 4 deletions drivers/input/touchscreen/Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -12,17 +12,17 @@ menuconfig INPUT_TOUCHSCREEN
if INPUT_TOUCHSCREEN

config TOUCHSCREEN_ADS7846
tristate "ADS 7846/7843 based touchscreens"
tristate "ADS7846/TSC2046 and ADS7843 based touchscreens"
depends on SPI_MASTER
depends on HWMON = n || HWMON
help
Say Y here if you have a touchscreen interface using the
ADS7846 or ADS7843 controller, and your board-specific setup
code includes that in its table of SPI devices.
ADS7846/TSC2046 or ADS7843 controller, and your board-specific
setup code includes that in its table of SPI devices.

If HWMON is selected, and the driver is told the reference voltage
on your board, you will also get hwmon interfaces for the voltage
(and on ads7846, temperature) sensors of this chip.
(and on ads7846/tsc2046, temperature) sensors of this chip.

If unsure, say N (but it's safe to say "Y").

Expand Down
3 changes: 2 additions & 1 deletion drivers/input/touchscreen/ads7846.c
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@
/*
* This code has been heavily tested on a Nokia 770, and lightly
* tested on other ads7846 devices (OSK/Mistral, Lubbock).
* TSC2046 is just newer ads7846 silicon.
* Support for ads7843 tested on Atmel at91sam926x-EK.
* Support for ads7845 has only been stubbed in.
*
Expand Down Expand Up @@ -847,7 +848,7 @@ static int __devinit ads7846_probe(struct spi_device *spi)
* may not. So we stick to very-portable 8 bit words, both RX and TX.
*/
spi->bits_per_word = 8;
spi->mode = SPI_MODE_1;
spi->mode = SPI_MODE_0;
err = spi_setup(spi);
if (err < 0)
return err;
Expand Down
4 changes: 2 additions & 2 deletions drivers/input/touchscreen/ucb1400_ts.c
Original file line number Diff line number Diff line change
Expand Up @@ -288,9 +288,9 @@ static int ucb1400_ts_thread(void *_ucb)
struct ucb1400 *ucb = _ucb;
struct task_struct *tsk = current;
int valid = 0;
struct sched_param param = { .sched_priority = 1 };

tsk->policy = SCHED_FIFO;
tsk->rt_priority = 1;
sched_setscheduler(tsk, SCHED_FIFO, &param);

while (!kthread_should_stop()) {
unsigned int x, y, p;
Expand Down
16 changes: 8 additions & 8 deletions drivers/macintosh/adbhid.c
Original file line number Diff line number Diff line change
Expand Up @@ -628,16 +628,16 @@ static void real_leds(unsigned char leds, int device)
*/
static int adbhid_kbd_event(struct input_dev *dev, unsigned int type, unsigned int code, int value)
{
struct adbhid *adbhid = dev->private;
struct adbhid *adbhid = input_get_drvdata(dev);
unsigned char leds;

switch (type) {
case EV_LED:
leds = (test_bit(LED_SCROLLL, dev->led) ? 4 : 0)
| (test_bit(LED_NUML, dev->led) ? 1 : 0)
| (test_bit(LED_CAPSL, dev->led) ? 2 : 0);
real_leds(leds, adbhid->id);
return 0;
leds = (test_bit(LED_SCROLLL, dev->led) ? 4 : 0) |
(test_bit(LED_NUML, dev->led) ? 1 : 0) |
(test_bit(LED_CAPSL, dev->led) ? 2 : 0);
real_leds(leds, adbhid->id);
return 0;
}

return -1;
Expand All @@ -649,7 +649,7 @@ adb_message_handler(struct notifier_block *this, unsigned long code, void *x)
switch (code) {
case ADB_MSG_PRE_RESET:
case ADB_MSG_POWERDOWN:
/* Stop the repeat timer. Autopoll is already off at this point */
/* Stop the repeat timer. Autopoll is already off at this point */
{
int i;
for (i = 1; i < 16; i++) {
Expand Down Expand Up @@ -699,7 +699,7 @@ adbhid_input_register(int id, int default_id, int original_handler_id,
hid->current_handler_id = current_handler_id;
hid->mouse_kind = mouse_kind;
hid->flags = 0;
input_dev->private = hid;
input_set_drvdata(input_dev, hid);
input_dev->name = hid->name;
input_dev->phys = hid->phys;
input_dev->id.bustype = BUS_ADB;
Expand Down
11 changes: 1 addition & 10 deletions drivers/mfd/ucb1x00-ts.c
Original file line number Diff line number Diff line change
Expand Up @@ -207,16 +207,7 @@ static int ucb1x00_thread(void *_ts)
struct ucb1x00_ts *ts = _ts;
struct task_struct *tsk = current;
DECLARE_WAITQUEUE(wait, tsk);
int valid;

/*
* We could run as a real-time thread. However, thus far
* this doesn't seem to be necessary.
*/
// tsk->policy = SCHED_FIFO;
// tsk->rt_priority = 1;

valid = 0;
int valid = 0;

add_wait_queue(&ts->irq_wait, &wait);
while (!kthread_should_stop()) {
Expand Down

0 comments on commit 31f6e1b

Please sign in to comment.