mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-07-16 15:39:42 -04:00
Merge master.kernel.org:/pub/scm/linux/kernel/git/torvalds/linux-2.6
Conflicts: drivers/usb/input/Makefile drivers/usb/input/gtco.c
This commit is contained in:
@@ -190,16 +190,14 @@ static void gameport_run_poll_handler(unsigned long d)
|
||||
* Basic gameport -> driver core mappings
|
||||
*/
|
||||
|
||||
static void gameport_bind_driver(struct gameport *gameport, struct gameport_driver *drv)
|
||||
static int gameport_bind_driver(struct gameport *gameport, struct gameport_driver *drv)
|
||||
{
|
||||
int error;
|
||||
|
||||
down_write(&gameport_bus.subsys.rwsem);
|
||||
|
||||
gameport->dev.driver = &drv->driver;
|
||||
if (drv->connect(gameport, drv)) {
|
||||
gameport->dev.driver = NULL;
|
||||
goto out;
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
error = device_bind_driver(&gameport->dev);
|
||||
@@ -211,31 +209,21 @@ static void gameport_bind_driver(struct gameport *gameport, struct gameport_driv
|
||||
drv->description, error);
|
||||
drv->disconnect(gameport);
|
||||
gameport->dev.driver = NULL;
|
||||
goto out;
|
||||
return error;
|
||||
}
|
||||
|
||||
out:
|
||||
up_write(&gameport_bus.subsys.rwsem);
|
||||
}
|
||||
|
||||
static void gameport_release_driver(struct gameport *gameport)
|
||||
{
|
||||
down_write(&gameport_bus.subsys.rwsem);
|
||||
device_release_driver(&gameport->dev);
|
||||
up_write(&gameport_bus.subsys.rwsem);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void gameport_find_driver(struct gameport *gameport)
|
||||
{
|
||||
int error;
|
||||
|
||||
down_write(&gameport_bus.subsys.rwsem);
|
||||
error = device_attach(&gameport->dev);
|
||||
if (error < 0)
|
||||
printk(KERN_WARNING
|
||||
"gameport: device_attach() failed for %s (%s), error: %d\n",
|
||||
gameport->phys, gameport->name, error);
|
||||
up_write(&gameport_bus.subsys.rwsem);
|
||||
}
|
||||
|
||||
|
||||
@@ -483,13 +471,12 @@ static ssize_t gameport_rebind_driver(struct device *dev, struct device_attribut
|
||||
{
|
||||
struct gameport *gameport = to_gameport_port(dev);
|
||||
struct device_driver *drv;
|
||||
int retval;
|
||||
int error;
|
||||
|
||||
retval = mutex_lock_interruptible(&gameport_mutex);
|
||||
if (retval)
|
||||
return retval;
|
||||
error = mutex_lock_interruptible(&gameport_mutex);
|
||||
if (error)
|
||||
return error;
|
||||
|
||||
retval = count;
|
||||
if (!strncmp(buf, "none", count)) {
|
||||
gameport_disconnect_port(gameport);
|
||||
} else if (!strncmp(buf, "reconnect", count)) {
|
||||
@@ -499,15 +486,15 @@ static ssize_t gameport_rebind_driver(struct device *dev, struct device_attribut
|
||||
gameport_find_driver(gameport);
|
||||
} else if ((drv = driver_find(buf, &gameport_bus)) != NULL) {
|
||||
gameport_disconnect_port(gameport);
|
||||
gameport_bind_driver(gameport, to_gameport_driver(drv));
|
||||
error = gameport_bind_driver(gameport, to_gameport_driver(drv));
|
||||
put_driver(drv);
|
||||
} else {
|
||||
retval = -EINVAL;
|
||||
error = -EINVAL;
|
||||
}
|
||||
|
||||
mutex_unlock(&gameport_mutex);
|
||||
|
||||
return retval;
|
||||
return error ? error : count;
|
||||
}
|
||||
|
||||
static struct device_attribute gameport_device_attrs[] = {
|
||||
@@ -655,7 +642,7 @@ static void gameport_disconnect_port(struct gameport *gameport)
|
||||
do {
|
||||
parent = s->parent;
|
||||
|
||||
gameport_release_driver(s);
|
||||
device_release_driver(&s->dev);
|
||||
gameport_destroy_port(s);
|
||||
} while ((s = parent) != gameport);
|
||||
}
|
||||
@@ -663,7 +650,7 @@ static void gameport_disconnect_port(struct gameport *gameport)
|
||||
/*
|
||||
* Ok, no children left, now disconnect this port
|
||||
*/
|
||||
gameport_release_driver(gameport);
|
||||
device_release_driver(&gameport->dev);
|
||||
}
|
||||
|
||||
void gameport_rescan(struct gameport *gameport)
|
||||
|
||||
@@ -224,14 +224,16 @@ config KEYBOARD_AAED2000
|
||||
module will be called aaed2000_kbd.
|
||||
|
||||
config KEYBOARD_GPIO
|
||||
tristate "Buttons on CPU GPIOs (PXA)"
|
||||
depends on (ARCH_SA1100 || ARCH_PXA || ARCH_S3C2410)
|
||||
tristate "GPIO Buttons"
|
||||
depends on GENERIC_GPIO
|
||||
help
|
||||
This driver implements support for buttons connected
|
||||
directly to GPIO pins of SA1100, PXA or S3C24xx CPUs.
|
||||
to GPIO pins of various CPUs (and some other chips).
|
||||
|
||||
Say Y here if your device has buttons connected
|
||||
directly to GPIO pins of the CPU.
|
||||
directly to such GPIO pins. Your board-specific
|
||||
setup logic must also provide a platform device,
|
||||
with configuration data saying which GPIOs are used.
|
||||
|
||||
To compile this driver as a module, choose M here: the
|
||||
module will be called gpio-keys.
|
||||
|
||||
@@ -23,11 +23,9 @@
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/input.h>
|
||||
#include <linux/irq.h>
|
||||
#include <linux/gpio_keys.h>
|
||||
|
||||
#include <asm/gpio.h>
|
||||
#include <asm/arch/hardware.h>
|
||||
|
||||
#include <asm/hardware/gpio_keys.h>
|
||||
|
||||
static irqreturn_t gpio_keys_isr(int irq, void *dev_id)
|
||||
{
|
||||
|
||||
@@ -553,7 +553,8 @@ static int __devinit i8042_check_aux(void)
|
||||
*/
|
||||
|
||||
param = 0x5a;
|
||||
if (i8042_command(¶m, I8042_CMD_AUX_LOOP) || param != 0x5a) {
|
||||
retval = i8042_command(¶m, I8042_CMD_AUX_LOOP);
|
||||
if (retval || param != 0x5a) {
|
||||
|
||||
/*
|
||||
* External connection test - filters out AT-soldered PS/2 i8042's
|
||||
@@ -567,7 +568,12 @@ static int __devinit i8042_check_aux(void)
|
||||
(param && param != 0xfa && param != 0xff))
|
||||
return -1;
|
||||
|
||||
aux_loop_broken = 1;
|
||||
/*
|
||||
* If AUX_LOOP completed without error but returned unexpected data
|
||||
* mark it as broken
|
||||
*/
|
||||
if (!retval)
|
||||
aux_loop_broken = 1;
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
@@ -97,7 +97,7 @@ EXPORT_SYMBOL(ps2_drain);
|
||||
|
||||
int ps2_is_keyboard_id(char id_byte)
|
||||
{
|
||||
const static char keyboard_ids[] = {
|
||||
static const char keyboard_ids[] = {
|
||||
0xab, /* Regular keyboards */
|
||||
0xac, /* NCD Sun keyboard */
|
||||
0x2b, /* Trust keyboard, translated */
|
||||
|
||||
@@ -115,18 +115,18 @@ static int serio_match_port(const struct serio_device_id *ids, struct serio *ser
|
||||
* Basic serio -> driver core mappings
|
||||
*/
|
||||
|
||||
static void serio_bind_driver(struct serio *serio, struct serio_driver *drv)
|
||||
static int serio_bind_driver(struct serio *serio, struct serio_driver *drv)
|
||||
{
|
||||
int error;
|
||||
|
||||
down_write(&serio_bus.subsys.rwsem);
|
||||
|
||||
if (serio_match_port(drv->id_table, serio)) {
|
||||
|
||||
serio->dev.driver = &drv->driver;
|
||||
if (serio_connect_driver(serio, drv)) {
|
||||
serio->dev.driver = NULL;
|
||||
goto out;
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
error = device_bind_driver(&serio->dev);
|
||||
if (error) {
|
||||
printk(KERN_WARNING
|
||||
@@ -136,31 +136,21 @@ static void serio_bind_driver(struct serio *serio, struct serio_driver *drv)
|
||||
drv->description, error);
|
||||
serio_disconnect_driver(serio);
|
||||
serio->dev.driver = NULL;
|
||||
goto out;
|
||||
return error;
|
||||
}
|
||||
}
|
||||
out:
|
||||
up_write(&serio_bus.subsys.rwsem);
|
||||
}
|
||||
|
||||
static void serio_release_driver(struct serio *serio)
|
||||
{
|
||||
down_write(&serio_bus.subsys.rwsem);
|
||||
device_release_driver(&serio->dev);
|
||||
up_write(&serio_bus.subsys.rwsem);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void serio_find_driver(struct serio *serio)
|
||||
{
|
||||
int error;
|
||||
|
||||
down_write(&serio_bus.subsys.rwsem);
|
||||
error = device_attach(&serio->dev);
|
||||
if (error < 0)
|
||||
printk(KERN_WARNING
|
||||
"serio: device_attach() failed for %s (%s), error: %d\n",
|
||||
serio->phys, serio->name, error);
|
||||
up_write(&serio_bus.subsys.rwsem);
|
||||
}
|
||||
|
||||
|
||||
@@ -470,13 +460,12 @@ static ssize_t serio_rebind_driver(struct device *dev, struct device_attribute *
|
||||
{
|
||||
struct serio *serio = to_serio_port(dev);
|
||||
struct device_driver *drv;
|
||||
int retval;
|
||||
int error;
|
||||
|
||||
retval = mutex_lock_interruptible(&serio_mutex);
|
||||
if (retval)
|
||||
return retval;
|
||||
error = mutex_lock_interruptible(&serio_mutex);
|
||||
if (error)
|
||||
return error;
|
||||
|
||||
retval = count;
|
||||
if (!strncmp(buf, "none", count)) {
|
||||
serio_disconnect_port(serio);
|
||||
} else if (!strncmp(buf, "reconnect", count)) {
|
||||
@@ -486,15 +475,15 @@ static ssize_t serio_rebind_driver(struct device *dev, struct device_attribute *
|
||||
serio_find_driver(serio);
|
||||
} else if ((drv = driver_find(buf, &serio_bus)) != NULL) {
|
||||
serio_disconnect_port(serio);
|
||||
serio_bind_driver(serio, to_serio_driver(drv));
|
||||
error = serio_bind_driver(serio, to_serio_driver(drv));
|
||||
put_driver(drv);
|
||||
} else {
|
||||
retval = -EINVAL;
|
||||
error = -EINVAL;
|
||||
}
|
||||
|
||||
mutex_unlock(&serio_mutex);
|
||||
|
||||
return retval;
|
||||
return error ? error : count;
|
||||
}
|
||||
|
||||
static ssize_t serio_show_bind_mode(struct device *dev, struct device_attribute *attr, char *buf)
|
||||
@@ -665,7 +654,7 @@ static void serio_disconnect_port(struct serio *serio)
|
||||
do {
|
||||
parent = s->parent;
|
||||
|
||||
serio_release_driver(s);
|
||||
device_release_driver(&s->dev);
|
||||
serio_destroy_port(s);
|
||||
} while ((s = parent) != serio);
|
||||
}
|
||||
@@ -673,7 +662,7 @@ static void serio_disconnect_port(struct serio *serio)
|
||||
/*
|
||||
* Ok, no children left, now disconnect this port
|
||||
*/
|
||||
serio_release_driver(serio);
|
||||
device_release_driver(&serio->dev);
|
||||
}
|
||||
|
||||
void serio_rescan(struct serio *serio)
|
||||
|
||||
@@ -557,6 +557,7 @@ static int ucb1400_ts_remove(struct device *dev)
|
||||
}
|
||||
|
||||
static struct device_driver ucb1400_ts_driver = {
|
||||
.name = "ucb1400_ts",
|
||||
.owner = THIS_MODULE,
|
||||
.bus = &ac97_bus_type,
|
||||
.probe = ucb1400_ts_probe,
|
||||
|
||||
Reference in New Issue
Block a user