Merge git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/driver-2.6
Trivial manual merge fixup for usb_find_interface clashes.
This commit is contained in:
commit
db9edfd7e3
64 changed files with 878 additions and 823 deletions
|
@ -47,8 +47,8 @@ struct bus_type {
|
|||
struct driver_attribute * drv_attrs;
|
||||
|
||||
int (*match)(struct device * dev, struct device_driver * drv);
|
||||
int (*hotplug) (struct device *dev, char **envp,
|
||||
int num_envp, char *buffer, int buffer_size);
|
||||
int (*uevent)(struct device *dev, char **envp,
|
||||
int num_envp, char *buffer, int buffer_size);
|
||||
int (*suspend)(struct device * dev, pm_message_t state);
|
||||
int (*resume)(struct device * dev);
|
||||
};
|
||||
|
@ -151,7 +151,7 @@ struct class {
|
|||
struct class_attribute * class_attrs;
|
||||
struct class_device_attribute * class_dev_attrs;
|
||||
|
||||
int (*hotplug)(struct class_device *dev, char **envp,
|
||||
int (*uevent)(struct class_device *dev, char **envp,
|
||||
int num_envp, char *buffer, int buffer_size);
|
||||
|
||||
void (*release)(struct class_device *dev);
|
||||
|
@ -209,9 +209,9 @@ extern int class_device_create_file(struct class_device *,
|
|||
* set, this will be called instead of the class specific release function.
|
||||
* Only use this if you want to override the default release function, like
|
||||
* when you are nesting class_device structures.
|
||||
* @hotplug: pointer to a hotplug function for this struct class_device. If
|
||||
* set, this will be called instead of the class specific hotplug function.
|
||||
* Only use this if you want to override the default hotplug function, like
|
||||
* @uevent: pointer to a uevent function for this struct class_device. If
|
||||
* set, this will be called instead of the class specific uevent function.
|
||||
* Only use this if you want to override the default uevent function, like
|
||||
* when you are nesting class_device structures.
|
||||
*/
|
||||
struct class_device {
|
||||
|
@ -227,7 +227,7 @@ struct class_device {
|
|||
struct class_device *parent; /* parent of this child device, if there is one */
|
||||
|
||||
void (*release)(struct class_device *dev);
|
||||
int (*hotplug)(struct class_device *dev, char **envp,
|
||||
int (*uevent)(struct class_device *dev, char **envp,
|
||||
int num_envp, char *buffer, int buffer_size);
|
||||
char class_id[BUS_ID_SIZE]; /* unique to this class */
|
||||
};
|
||||
|
|
|
@ -14,7 +14,7 @@ struct device;
|
|||
int request_firmware(const struct firmware **fw, const char *name,
|
||||
struct device *device);
|
||||
int request_firmware_nowait(
|
||||
struct module *module, int hotplug,
|
||||
struct module *module, int uevent,
|
||||
const char *name, struct device *device, void *context,
|
||||
void (*cont)(const struct firmware *fw, void *context));
|
||||
|
||||
|
|
|
@ -13,6 +13,7 @@
|
|||
#include <linux/time.h>
|
||||
#include <linux/list.h>
|
||||
#include <linux/device.h>
|
||||
#include <linux/mod_devicetable.h>
|
||||
#else
|
||||
#include <sys/time.h>
|
||||
#include <sys/ioctl.h>
|
||||
|
@ -511,6 +512,8 @@ struct input_absinfo {
|
|||
#define KEY_FN_S 0x1e3
|
||||
#define KEY_FN_B 0x1e4
|
||||
|
||||
/* We avoid low common keys in module aliases so they don't get huge. */
|
||||
#define KEY_MIN_INTERESTING KEY_MUTE
|
||||
#define KEY_MAX 0x1ff
|
||||
|
||||
/*
|
||||
|
@ -793,6 +796,44 @@ struct ff_effect {
|
|||
|
||||
#define FF_MAX 0x7f
|
||||
|
||||
struct input_device_id {
|
||||
|
||||
kernel_ulong_t flags;
|
||||
|
||||
struct input_id id;
|
||||
|
||||
kernel_ulong_t evbit[EV_MAX/BITS_PER_LONG+1];
|
||||
kernel_ulong_t keybit[KEY_MAX/BITS_PER_LONG+1];
|
||||
kernel_ulong_t relbit[REL_MAX/BITS_PER_LONG+1];
|
||||
kernel_ulong_t absbit[ABS_MAX/BITS_PER_LONG+1];
|
||||
kernel_ulong_t mscbit[MSC_MAX/BITS_PER_LONG+1];
|
||||
kernel_ulong_t ledbit[LED_MAX/BITS_PER_LONG+1];
|
||||
kernel_ulong_t sndbit[SND_MAX/BITS_PER_LONG+1];
|
||||
kernel_ulong_t ffbit[FF_MAX/BITS_PER_LONG+1];
|
||||
kernel_ulong_t swbit[SW_MAX/BITS_PER_LONG+1];
|
||||
|
||||
kernel_ulong_t driver_info;
|
||||
};
|
||||
|
||||
/*
|
||||
* Structure for hotplug & device<->driver matching.
|
||||
*/
|
||||
|
||||
#define INPUT_DEVICE_ID_MATCH_BUS 1
|
||||
#define INPUT_DEVICE_ID_MATCH_VENDOR 2
|
||||
#define INPUT_DEVICE_ID_MATCH_PRODUCT 4
|
||||
#define INPUT_DEVICE_ID_MATCH_VERSION 8
|
||||
|
||||
#define INPUT_DEVICE_ID_MATCH_EVBIT 0x010
|
||||
#define INPUT_DEVICE_ID_MATCH_KEYBIT 0x020
|
||||
#define INPUT_DEVICE_ID_MATCH_RELBIT 0x040
|
||||
#define INPUT_DEVICE_ID_MATCH_ABSBIT 0x080
|
||||
#define INPUT_DEVICE_ID_MATCH_MSCIT 0x100
|
||||
#define INPUT_DEVICE_ID_MATCH_LEDBIT 0x200
|
||||
#define INPUT_DEVICE_ID_MATCH_SNDBIT 0x400
|
||||
#define INPUT_DEVICE_ID_MATCH_FFBIT 0x800
|
||||
#define INPUT_DEVICE_ID_MATCH_SWBIT 0x1000
|
||||
|
||||
#ifdef __KERNEL__
|
||||
|
||||
/*
|
||||
|
@ -901,49 +942,11 @@ struct input_dev {
|
|||
};
|
||||
#define to_input_dev(d) container_of(d, struct input_dev, cdev)
|
||||
|
||||
/*
|
||||
* Structure for hotplug & device<->driver matching.
|
||||
*/
|
||||
|
||||
#define INPUT_DEVICE_ID_MATCH_BUS 1
|
||||
#define INPUT_DEVICE_ID_MATCH_VENDOR 2
|
||||
#define INPUT_DEVICE_ID_MATCH_PRODUCT 4
|
||||
#define INPUT_DEVICE_ID_MATCH_VERSION 8
|
||||
|
||||
#define INPUT_DEVICE_ID_MATCH_EVBIT 0x010
|
||||
#define INPUT_DEVICE_ID_MATCH_KEYBIT 0x020
|
||||
#define INPUT_DEVICE_ID_MATCH_RELBIT 0x040
|
||||
#define INPUT_DEVICE_ID_MATCH_ABSBIT 0x080
|
||||
#define INPUT_DEVICE_ID_MATCH_MSCIT 0x100
|
||||
#define INPUT_DEVICE_ID_MATCH_LEDBIT 0x200
|
||||
#define INPUT_DEVICE_ID_MATCH_SNDBIT 0x400
|
||||
#define INPUT_DEVICE_ID_MATCH_FFBIT 0x800
|
||||
#define INPUT_DEVICE_ID_MATCH_SWBIT 0x1000
|
||||
|
||||
#define INPUT_DEVICE_ID_MATCH_DEVICE\
|
||||
(INPUT_DEVICE_ID_MATCH_BUS | INPUT_DEVICE_ID_MATCH_VENDOR | INPUT_DEVICE_ID_MATCH_PRODUCT)
|
||||
#define INPUT_DEVICE_ID_MATCH_DEVICE_AND_VERSION\
|
||||
(INPUT_DEVICE_ID_MATCH_DEVICE | INPUT_DEVICE_ID_MATCH_VERSION)
|
||||
|
||||
struct input_device_id {
|
||||
|
||||
unsigned long flags;
|
||||
|
||||
struct input_id id;
|
||||
|
||||
unsigned long evbit[NBITS(EV_MAX)];
|
||||
unsigned long keybit[NBITS(KEY_MAX)];
|
||||
unsigned long relbit[NBITS(REL_MAX)];
|
||||
unsigned long absbit[NBITS(ABS_MAX)];
|
||||
unsigned long mscbit[NBITS(MSC_MAX)];
|
||||
unsigned long ledbit[NBITS(LED_MAX)];
|
||||
unsigned long sndbit[NBITS(SND_MAX)];
|
||||
unsigned long ffbit[NBITS(FF_MAX)];
|
||||
unsigned long swbit[NBITS(SW_MAX)];
|
||||
|
||||
unsigned long driver_info;
|
||||
};
|
||||
|
||||
struct input_handle;
|
||||
|
||||
struct input_handler {
|
||||
|
|
|
@ -23,14 +23,27 @@
|
|||
#include <linux/spinlock.h>
|
||||
#include <linux/rwsem.h>
|
||||
#include <linux/kref.h>
|
||||
#include <linux/kobject_uevent.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <asm/atomic.h>
|
||||
|
||||
#define KOBJ_NAME_LEN 20
|
||||
#define KOBJ_NAME_LEN 20
|
||||
#define UEVENT_HELPER_PATH_LEN 256
|
||||
|
||||
/* counter to tag the hotplug event, read only except for the kobject core */
|
||||
extern u64 hotplug_seqnum;
|
||||
/* path to the userspace helper executed on an event */
|
||||
extern char uevent_helper[];
|
||||
|
||||
/* counter to tag the uevent, read only except for the kobject core */
|
||||
extern u64 uevent_seqnum;
|
||||
|
||||
/* the actions here must match the proper string in lib/kobject_uevent.c */
|
||||
typedef int __bitwise kobject_action_t;
|
||||
enum kobject_action {
|
||||
KOBJ_ADD = (__force kobject_action_t) 0x01, /* exclusive to core */
|
||||
KOBJ_REMOVE = (__force kobject_action_t) 0x02, /* exclusive to core */
|
||||
KOBJ_CHANGE = (__force kobject_action_t) 0x03, /* device state change */
|
||||
KOBJ_OFFLINE = (__force kobject_action_t) 0x04, /* device offline */
|
||||
KOBJ_ONLINE = (__force kobject_action_t) 0x05, /* device online */
|
||||
};
|
||||
|
||||
struct kobject {
|
||||
const char * k_name;
|
||||
|
@ -87,15 +100,14 @@ struct kobj_type {
|
|||
* of object; multiple ksets can belong to one subsystem. All
|
||||
* ksets of a subsystem share the subsystem's lock.
|
||||
*
|
||||
* Each kset can support hotplugging; if it does, it will be given
|
||||
* the opportunity to filter out specific kobjects from being
|
||||
* reported, as well as to add its own "data" elements to the
|
||||
* environment being passed to the hotplug helper.
|
||||
* Each kset can support specific event variables; it can
|
||||
* supress the event generation or add subsystem specific
|
||||
* variables carried with the event.
|
||||
*/
|
||||
struct kset_hotplug_ops {
|
||||
struct kset_uevent_ops {
|
||||
int (*filter)(struct kset *kset, struct kobject *kobj);
|
||||
const char *(*name)(struct kset *kset, struct kobject *kobj);
|
||||
int (*hotplug)(struct kset *kset, struct kobject *kobj, char **envp,
|
||||
int (*uevent)(struct kset *kset, struct kobject *kobj, char **envp,
|
||||
int num_envp, char *buffer, int buffer_size);
|
||||
};
|
||||
|
||||
|
@ -105,7 +117,7 @@ struct kset {
|
|||
struct list_head list;
|
||||
spinlock_t list_lock;
|
||||
struct kobject kobj;
|
||||
struct kset_hotplug_ops * hotplug_ops;
|
||||
struct kset_uevent_ops * uevent_ops;
|
||||
};
|
||||
|
||||
|
||||
|
@ -153,20 +165,20 @@ struct subsystem {
|
|||
struct rw_semaphore rwsem;
|
||||
};
|
||||
|
||||
#define decl_subsys(_name,_type,_hotplug_ops) \
|
||||
#define decl_subsys(_name,_type,_uevent_ops) \
|
||||
struct subsystem _name##_subsys = { \
|
||||
.kset = { \
|
||||
.kobj = { .name = __stringify(_name) }, \
|
||||
.ktype = _type, \
|
||||
.hotplug_ops =_hotplug_ops, \
|
||||
.uevent_ops =_uevent_ops, \
|
||||
} \
|
||||
}
|
||||
#define decl_subsys_name(_varname,_name,_type,_hotplug_ops) \
|
||||
#define decl_subsys_name(_varname,_name,_type,_uevent_ops) \
|
||||
struct subsystem _varname##_subsys = { \
|
||||
.kset = { \
|
||||
.kobj = { .name = __stringify(_name) }, \
|
||||
.ktype = _type, \
|
||||
.hotplug_ops =_hotplug_ops, \
|
||||
.uevent_ops =_uevent_ops, \
|
||||
} \
|
||||
}
|
||||
|
||||
|
@ -241,15 +253,17 @@ struct subsys_attribute {
|
|||
extern int subsys_create_file(struct subsystem * , struct subsys_attribute *);
|
||||
extern void subsys_remove_file(struct subsystem * , struct subsys_attribute *);
|
||||
|
||||
#ifdef CONFIG_HOTPLUG
|
||||
void kobject_hotplug(struct kobject *kobj, enum kobject_action action);
|
||||
int add_hotplug_env_var(char **envp, int num_envp, int *cur_index,
|
||||
#if defined(CONFIG_HOTPLUG) & defined(CONFIG_NET)
|
||||
void kobject_uevent(struct kobject *kobj, enum kobject_action action);
|
||||
|
||||
int add_uevent_var(char **envp, int num_envp, int *cur_index,
|
||||
char *buffer, int buffer_size, int *cur_len,
|
||||
const char *format, ...)
|
||||
__attribute__((format (printf, 7, 8)));
|
||||
#else
|
||||
static inline void kobject_hotplug(struct kobject *kobj, enum kobject_action action) { }
|
||||
static inline int add_hotplug_env_var(char **envp, int num_envp, int *cur_index,
|
||||
static inline void kobject_uevent(struct kobject *kobj, enum kobject_action action) { }
|
||||
|
||||
static inline int add_uevent_var(char **envp, int num_envp, int *cur_index,
|
||||
char *buffer, int buffer_size, int *cur_len,
|
||||
const char *format, ...)
|
||||
{ return 0; }
|
||||
|
|
|
@ -1,57 +0,0 @@
|
|||
/*
|
||||
* kobject_uevent.h - list of kobject user events that can be generated
|
||||
*
|
||||
* Copyright (C) 2004 IBM Corp.
|
||||
* Copyright (C) 2004 Greg Kroah-Hartman <greg@kroah.com>
|
||||
*
|
||||
* This file is released under the GPLv2.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef _KOBJECT_EVENT_H_
|
||||
#define _KOBJECT_EVENT_H_
|
||||
|
||||
#define HOTPLUG_PATH_LEN 256
|
||||
|
||||
/* path to the hotplug userspace helper executed on an event */
|
||||
extern char hotplug_path[];
|
||||
|
||||
/*
|
||||
* If you add an action here, you must also add the proper string to the
|
||||
* lib/kobject_uevent.c file.
|
||||
*/
|
||||
typedef int __bitwise kobject_action_t;
|
||||
enum kobject_action {
|
||||
KOBJ_ADD = (__force kobject_action_t) 0x01, /* add event, for hotplug */
|
||||
KOBJ_REMOVE = (__force kobject_action_t) 0x02, /* remove event, for hotplug */
|
||||
KOBJ_CHANGE = (__force kobject_action_t) 0x03, /* a sysfs attribute file has changed */
|
||||
KOBJ_MOUNT = (__force kobject_action_t) 0x04, /* mount event for block devices */
|
||||
KOBJ_UMOUNT = (__force kobject_action_t) 0x05, /* umount event for block devices */
|
||||
KOBJ_OFFLINE = (__force kobject_action_t) 0x06, /* offline event for hotplug devices */
|
||||
KOBJ_ONLINE = (__force kobject_action_t) 0x07, /* online event for hotplug devices */
|
||||
};
|
||||
|
||||
|
||||
#ifdef CONFIG_KOBJECT_UEVENT
|
||||
int kobject_uevent(struct kobject *kobj,
|
||||
enum kobject_action action,
|
||||
struct attribute *attr);
|
||||
int kobject_uevent_atomic(struct kobject *kobj,
|
||||
enum kobject_action action,
|
||||
struct attribute *attr);
|
||||
#else
|
||||
static inline int kobject_uevent(struct kobject *kobj,
|
||||
enum kobject_action action,
|
||||
struct attribute *attr)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
static inline int kobject_uevent_atomic(struct kobject *kobj,
|
||||
enum kobject_action action,
|
||||
struct attribute *attr)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
|
@ -41,6 +41,7 @@ extern struct platform_device *platform_device_alloc(const char *name, unsigned
|
|||
extern int platform_device_add_resources(struct platform_device *pdev, struct resource *res, unsigned int num);
|
||||
extern int platform_device_add_data(struct platform_device *pdev, void *data, size_t size);
|
||||
extern int platform_device_add(struct platform_device *pdev);
|
||||
extern void platform_device_del(struct platform_device *pdev);
|
||||
extern void platform_device_put(struct platform_device *pdev);
|
||||
|
||||
struct platform_driver {
|
||||
|
|
|
@ -124,7 +124,7 @@ enum
|
|||
KERN_OVERFLOWUID=46, /* int: overflow UID */
|
||||
KERN_OVERFLOWGID=47, /* int: overflow GID */
|
||||
KERN_SHMPATH=48, /* string: path to shm fs */
|
||||
KERN_HOTPLUG=49, /* string: path to hotplug policy agent */
|
||||
KERN_HOTPLUG=49, /* string: path to uevent helper (deprecated) */
|
||||
KERN_IEEE_EMULATION_WARNINGS=50, /* int: unimplemented ieee instructions */
|
||||
KERN_S390_USER_DEBUG_LOGGING=51, /* int: dumps of user faults */
|
||||
KERN_CORE_USES_PID=52, /* int: use core or core.%pid */
|
||||
|
|
|
@ -225,7 +225,7 @@ struct usb_interface_cache {
|
|||
* Device drivers should not attempt to activate configurations. The choice
|
||||
* of which configuration to install is a policy decision based on such
|
||||
* considerations as available power, functionality provided, and the user's
|
||||
* desires (expressed through hotplug scripts). However, drivers can call
|
||||
* desires (expressed through userspace tools). However, drivers can call
|
||||
* usb_reset_configuration() to reinitialize the current configuration and
|
||||
* all its interfaces.
|
||||
*/
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue