Merge commit '070680218379e15c1901f4bf21b98e3cbf12b527' into stable/for-linus-fixes-3.3

* commit '070680218379e15c1901f4bf21b98e3cbf12b527': (50 commits)
  xen-balloon: convert sysdev_class to a regular subsystem
  clocksource: convert sysdev_class to a regular subsystem
  ibm_rtl: convert sysdev_class to a regular subsystem
  edac: convert sysdev_class to a regular subsystem
  rtmutex-tester: convert sysdev_class to a regular subsystem
  driver-core: implement 'sysdev' functionality for regular devices and buses
  kref: fix up the kfree build problems
  kref: Remove the memory barriers
  kref: Implement kref_put in terms of kref_sub
  kref: Inline all functions
  Drivers: hv: Get rid of an unnecessary check in hv.c
  Drivers: hv: Make the vmbus driver unloadable
  Drivers: hv: Fix a memory leak
  Documentation: Update stable address
  MAINTAINERS: stable: Update address
  w1: add fast search for single slave bus
  driver-core: skip uevent generation when nobody is listening
  drivers: hv: Don't OOPS when you cannot init vmbus
  firmware: google: fix gsmi.c build warning
  drivers_base: make argument to platform_device_register_full const
  ...
This commit is contained in:
Konrad Rzeszutek Wilk
2012-01-12 11:53:55 -05:00
351 changed files with 1372 additions and 5090 deletions

View File

@@ -275,8 +275,8 @@ versions.
If no 2.6.x.y kernel is available, then the highest numbered 2.6.x If no 2.6.x.y kernel is available, then the highest numbered 2.6.x
kernel is the current stable kernel. kernel is the current stable kernel.
2.6.x.y are maintained by the "stable" team <stable@kernel.org>, and are 2.6.x.y are maintained by the "stable" team <stable@vger.kernel.org>, and
released as needs dictate. The normal release period is approximately are released as needs dictate. The normal release period is approximately
two weeks, but it can be longer if there are no pressing problems. A two weeks, but it can be longer if there are no pressing problems. A
security-related problem, instead, can cause a release to happen almost security-related problem, instead, can cause a release to happen almost
instantly. instantly.

View File

@@ -271,10 +271,10 @@ copies should go to:
the linux-kernel list. the linux-kernel list.
- If you are fixing a bug, think about whether the fix should go into the - If you are fixing a bug, think about whether the fix should go into the
next stable update. If so, stable@kernel.org should get a copy of the next stable update. If so, stable@vger.kernel.org should get a copy of
patch. Also add a "Cc: stable@kernel.org" to the tags within the patch the patch. Also add a "Cc: stable@vger.kernel.org" to the tags within
itself; that will cause the stable team to get a notification when your the patch itself; that will cause the stable team to get a notification
fix goes into the mainline. when your fix goes into the mainline.
When selecting recipients for a patch, it is good to have an idea of who When selecting recipients for a patch, it is good to have an idea of who
you think will eventually accept the patch and get it merged. While it you think will eventually accept the patch and get it merged. While it

View File

@@ -262,6 +262,7 @@ IOMAP
devm_ioremap() devm_ioremap()
devm_ioremap_nocache() devm_ioremap_nocache()
devm_iounmap() devm_iounmap()
devm_request_and_ioremap() : checks resource, requests region, ioremaps
pcim_iomap() pcim_iomap()
pcim_iounmap() pcim_iounmap()
pcim_iomap_table() : array of mapped addresses indexed by BAR pcim_iomap_table() : array of mapped addresses indexed by BAR

View File

@@ -97,7 +97,8 @@ A read on the resulting file will yield either Y (for non-zero values) or
N, followed by a newline. If written to, it will accept either upper- or N, followed by a newline. If written to, it will accept either upper- or
lower-case values, or 1 or 0. Any other input will be silently ignored. lower-case values, or 1 or 0. Any other input will be silently ignored.
Finally, a block of arbitrary binary data can be exported with: Another option is exporting a block of arbitrary binary data, with
this structure and function:
struct debugfs_blob_wrapper { struct debugfs_blob_wrapper {
void *data; void *data;
@@ -115,6 +116,35 @@ can be used to export binary information, but there does not appear to be
any code which does so in the mainline. Note that all files created with any code which does so in the mainline. Note that all files created with
debugfs_create_blob() are read-only. debugfs_create_blob() are read-only.
If you want to dump a block of registers (something that happens quite
often during development, even if little such code reaches mainline.
Debugfs offers two functions: one to make a registers-only file, and
another to insert a register block in the middle of another sequential
file.
struct debugfs_reg32 {
char *name;
unsigned long offset;
};
struct debugfs_regset32 {
struct debugfs_reg32 *regs;
int nregs;
void __iomem *base;
};
struct dentry *debugfs_create_regset32(const char *name, mode_t mode,
struct dentry *parent,
struct debugfs_regset32 *regset);
int debugfs_print_regs32(struct seq_file *s, struct debugfs_reg32 *regs,
int nregs, void __iomem *base, char *prefix);
The "base" argument may be 0, but you may want to build the reg32 array
using __stringify, and a number of register names (macros) are actually
byte offsets over a base for the register block.
There are a couple of other directory-oriented helper functions: There are a couple of other directory-oriented helper functions:
struct dentry *debugfs_rename(struct dentry *old_dir, struct dentry *debugfs_rename(struct dentry *old_dir,

View File

@@ -6261,7 +6261,7 @@ F: arch/alpha/kernel/srm_env.c
STABLE BRANCH STABLE BRANCH
M: Greg Kroah-Hartman <greg@kroah.com> M: Greg Kroah-Hartman <greg@kroah.com>
L: stable@kernel.org L: stable@vger.kernel.org
S: Maintained S: Maintained
STAGING SUBSYSTEM STAGING SUBSYSTEM

View File

@@ -116,6 +116,8 @@ source "drivers/vlynq/Kconfig"
source "drivers/virtio/Kconfig" source "drivers/virtio/Kconfig"
source "drivers/hv/Kconfig"
source "drivers/xen/Kconfig" source "drivers/xen/Kconfig"
source "drivers/staging/Kconfig" source "drivers/staging/Kconfig"
@@ -132,8 +134,6 @@ source "drivers/iommu/Kconfig"
source "drivers/virt/Kconfig" source "drivers/virt/Kconfig"
source "drivers/hv/Kconfig"
source "drivers/devfreq/Kconfig" source "drivers/devfreq/Kconfig"
endmenu endmenu

View File

@@ -3,7 +3,8 @@
obj-y := core.o sys.o bus.o dd.o syscore.o \ obj-y := core.o sys.o bus.o dd.o syscore.o \
driver.o class.o platform.o \ driver.o class.o platform.o \
cpu.o firmware.o init.o map.o devres.o \ cpu.o firmware.o init.o map.o devres.o \
attribute_container.o transport_class.o attribute_container.o transport_class.o \
topology.o
obj-$(CONFIG_DEVTMPFS) += devtmpfs.o obj-$(CONFIG_DEVTMPFS) += devtmpfs.o
obj-y += power/ obj-y += power/
obj-$(CONFIG_HAS_DMA) += dma-mapping.o obj-$(CONFIG_HAS_DMA) += dma-mapping.o
@@ -12,7 +13,6 @@ obj-$(CONFIG_ISA) += isa.o
obj-$(CONFIG_FW_LOADER) += firmware_class.o obj-$(CONFIG_FW_LOADER) += firmware_class.o
obj-$(CONFIG_NUMA) += node.o obj-$(CONFIG_NUMA) += node.o
obj-$(CONFIG_MEMORY_HOTPLUG_SPARSE) += memory.o obj-$(CONFIG_MEMORY_HOTPLUG_SPARSE) += memory.o
obj-$(CONFIG_SMP) += topology.o
ifeq ($(CONFIG_SYSFS),y) ifeq ($(CONFIG_SYSFS),y)
obj-$(CONFIG_MODULES) += module.o obj-$(CONFIG_MODULES) += module.o
endif endif

View File

@@ -4,7 +4,9 @@
* struct subsys_private - structure to hold the private to the driver core portions of the bus_type/class structure. * struct subsys_private - structure to hold the private to the driver core portions of the bus_type/class structure.
* *
* @subsys - the struct kset that defines this subsystem * @subsys - the struct kset that defines this subsystem
* @devices_kset - the list of devices associated * @devices_kset - the subsystem's 'devices' directory
* @interfaces - list of subsystem interfaces associated
* @mutex - protect the devices, and interfaces lists.
* *
* @drivers_kset - the list of drivers associated * @drivers_kset - the list of drivers associated
* @klist_devices - the klist to iterate over the @devices_kset * @klist_devices - the klist to iterate over the @devices_kset
@@ -14,10 +16,8 @@
* @bus - pointer back to the struct bus_type that this structure is associated * @bus - pointer back to the struct bus_type that this structure is associated
* with. * with.
* *
* @class_interfaces - list of class_interfaces associated
* @glue_dirs - "glue" directory to put in-between the parent device to * @glue_dirs - "glue" directory to put in-between the parent device to
* avoid namespace conflicts * avoid namespace conflicts
* @class_mutex - mutex to protect the children, devices, and interfaces lists.
* @class - pointer back to the struct class that this structure is associated * @class - pointer back to the struct class that this structure is associated
* with. * with.
* *
@@ -28,6 +28,8 @@
struct subsys_private { struct subsys_private {
struct kset subsys; struct kset subsys;
struct kset *devices_kset; struct kset *devices_kset;
struct list_head interfaces;
struct mutex mutex;
struct kset *drivers_kset; struct kset *drivers_kset;
struct klist klist_devices; struct klist klist_devices;
@@ -36,9 +38,7 @@ struct subsys_private {
unsigned int drivers_autoprobe:1; unsigned int drivers_autoprobe:1;
struct bus_type *bus; struct bus_type *bus;
struct list_head class_interfaces;
struct kset glue_dirs; struct kset glue_dirs;
struct mutex class_mutex;
struct class *class; struct class *class;
}; };
#define to_subsys_private(obj) container_of(obj, struct subsys_private, subsys.kobj) #define to_subsys_private(obj) container_of(obj, struct subsys_private, subsys.kobj)
@@ -94,7 +94,6 @@ extern int hypervisor_init(void);
static inline int hypervisor_init(void) { return 0; } static inline int hypervisor_init(void) { return 0; }
#endif #endif
extern int platform_bus_init(void); extern int platform_bus_init(void);
extern int system_bus_init(void);
extern int cpu_dev_init(void); extern int cpu_dev_init(void);
extern int bus_add_device(struct device *dev); extern int bus_add_device(struct device *dev);
@@ -116,6 +115,7 @@ extern char *make_class_name(const char *name, struct kobject *kobj);
extern int devres_release_all(struct device *dev); extern int devres_release_all(struct device *dev);
/* /sys/devices directory */
extern struct kset *devices_kset; extern struct kset *devices_kset;
#if defined(CONFIG_MODULES) && defined(CONFIG_SYSFS) #if defined(CONFIG_MODULES) && defined(CONFIG_SYSFS)

View File

@@ -16,9 +16,14 @@
#include <linux/slab.h> #include <linux/slab.h>
#include <linux/init.h> #include <linux/init.h>
#include <linux/string.h> #include <linux/string.h>
#include <linux/mutex.h>
#include "base.h" #include "base.h"
#include "power/power.h" #include "power/power.h"
/* /sys/devices/system */
/* FIXME: make static after drivers/base/sys.c is deleted */
struct kset *system_kset;
#define to_bus_attr(_attr) container_of(_attr, struct bus_attribute, attr) #define to_bus_attr(_attr) container_of(_attr, struct bus_attribute, attr)
/* /*
@@ -360,6 +365,47 @@ struct device *bus_find_device_by_name(struct bus_type *bus,
} }
EXPORT_SYMBOL_GPL(bus_find_device_by_name); EXPORT_SYMBOL_GPL(bus_find_device_by_name);
/**
* subsys_find_device_by_id - find a device with a specific enumeration number
* @subsys: subsystem
* @id: index 'id' in struct device
* @hint: device to check first
*
* Check the hint's next object and if it is a match return it directly,
* otherwise, fall back to a full list search. Either way a reference for
* the returned object is taken.
*/
struct device *subsys_find_device_by_id(struct bus_type *subsys, unsigned int id,
struct device *hint)
{
struct klist_iter i;
struct device *dev;
if (!subsys)
return NULL;
if (hint) {
klist_iter_init_node(&subsys->p->klist_devices, &i, &hint->p->knode_bus);
dev = next_device(&i);
if (dev && dev->id == id && get_device(dev)) {
klist_iter_exit(&i);
return dev;
}
klist_iter_exit(&i);
}
klist_iter_init_node(&subsys->p->klist_devices, &i, NULL);
while ((dev = next_device(&i))) {
if (dev->id == id && get_device(dev)) {
klist_iter_exit(&i);
return dev;
}
}
klist_iter_exit(&i);
return NULL;
}
EXPORT_SYMBOL_GPL(subsys_find_device_by_id);
static struct device_driver *next_driver(struct klist_iter *i) static struct device_driver *next_driver(struct klist_iter *i)
{ {
struct klist_node *n = klist_next(i); struct klist_node *n = klist_next(i);
@@ -487,26 +533,48 @@ out_put:
void bus_probe_device(struct device *dev) void bus_probe_device(struct device *dev)
{ {
struct bus_type *bus = dev->bus; struct bus_type *bus = dev->bus;
struct subsys_interface *sif;
int ret; int ret;
if (bus && bus->p->drivers_autoprobe) { if (!bus)
return;
if (bus->p->drivers_autoprobe) {
ret = device_attach(dev); ret = device_attach(dev);
WARN_ON(ret < 0); WARN_ON(ret < 0);
} }
mutex_lock(&bus->p->mutex);
list_for_each_entry(sif, &bus->p->interfaces, node)
if (sif->add_dev)
sif->add_dev(dev, sif);
mutex_unlock(&bus->p->mutex);
} }
/** /**
* bus_remove_device - remove device from bus * bus_remove_device - remove device from bus
* @dev: device to be removed * @dev: device to be removed
* *
* - Remove symlink from bus's directory. * - Remove device from all interfaces.
* - Remove symlink from bus' directory.
* - Delete device from bus's list. * - Delete device from bus's list.
* - Detach from its driver. * - Detach from its driver.
* - Drop reference taken in bus_add_device(). * - Drop reference taken in bus_add_device().
*/ */
void bus_remove_device(struct device *dev) void bus_remove_device(struct device *dev)
{ {
if (dev->bus) { struct bus_type *bus = dev->bus;
struct subsys_interface *sif;
if (!bus)
return;
mutex_lock(&bus->p->mutex);
list_for_each_entry(sif, &bus->p->interfaces, node)
if (sif->remove_dev)
sif->remove_dev(dev, sif);
mutex_unlock(&bus->p->mutex);
sysfs_remove_link(&dev->kobj, "subsystem"); sysfs_remove_link(&dev->kobj, "subsystem");
sysfs_remove_link(&dev->bus->p->devices_kset->kobj, sysfs_remove_link(&dev->bus->p->devices_kset->kobj,
dev_name(dev)); dev_name(dev));
@@ -519,7 +587,6 @@ void bus_remove_device(struct device *dev)
device_release_driver(dev); device_release_driver(dev);
bus_put(dev->bus); bus_put(dev->bus);
} }
}
static int driver_add_attrs(struct bus_type *bus, struct device_driver *drv) static int driver_add_attrs(struct bus_type *bus, struct device_driver *drv)
{ {
@@ -847,14 +914,14 @@ static ssize_t bus_uevent_store(struct bus_type *bus,
static BUS_ATTR(uevent, S_IWUSR, NULL, bus_uevent_store); static BUS_ATTR(uevent, S_IWUSR, NULL, bus_uevent_store);
/** /**
* bus_register - register a bus with the system. * __bus_register - register a driver-core subsystem
* @bus: bus. * @bus: bus.
* *
* Once we have that, we registered the bus with the kobject * Once we have that, we registered the bus with the kobject
* infrastructure, then register the children subsystems it has: * infrastructure, then register the children subsystems it has:
* the devices and drivers that belong to the bus. * the devices and drivers that belong to the subsystem.
*/ */
int bus_register(struct bus_type *bus) int __bus_register(struct bus_type *bus, struct lock_class_key *key)
{ {
int retval; int retval;
struct subsys_private *priv; struct subsys_private *priv;
@@ -898,6 +965,8 @@ int bus_register(struct bus_type *bus)
goto bus_drivers_fail; goto bus_drivers_fail;
} }
INIT_LIST_HEAD(&priv->interfaces);
__mutex_init(&priv->mutex, "subsys mutex", key);
klist_init(&priv->klist_devices, klist_devices_get, klist_devices_put); klist_init(&priv->klist_devices, klist_devices_get, klist_devices_put);
klist_init(&priv->klist_drivers, NULL, NULL); klist_init(&priv->klist_drivers, NULL, NULL);
@@ -927,7 +996,7 @@ out:
bus->p = NULL; bus->p = NULL;
return retval; return retval;
} }
EXPORT_SYMBOL_GPL(bus_register); EXPORT_SYMBOL_GPL(__bus_register);
/** /**
* bus_unregister - remove a bus from the system * bus_unregister - remove a bus from the system
@@ -939,6 +1008,8 @@ EXPORT_SYMBOL_GPL(bus_register);
void bus_unregister(struct bus_type *bus) void bus_unregister(struct bus_type *bus)
{ {
pr_debug("bus: '%s': unregistering\n", bus->name); pr_debug("bus: '%s': unregistering\n", bus->name);
if (bus->dev_root)
device_unregister(bus->dev_root);
bus_remove_attrs(bus); bus_remove_attrs(bus);
remove_probe_files(bus); remove_probe_files(bus);
kset_unregister(bus->p->drivers_kset); kset_unregister(bus->p->drivers_kset);
@@ -1028,10 +1099,194 @@ void bus_sort_breadthfirst(struct bus_type *bus,
} }
EXPORT_SYMBOL_GPL(bus_sort_breadthfirst); EXPORT_SYMBOL_GPL(bus_sort_breadthfirst);
/**
* subsys_dev_iter_init - initialize subsys device iterator
* @iter: subsys iterator to initialize
* @subsys: the subsys we wanna iterate over
* @start: the device to start iterating from, if any
* @type: device_type of the devices to iterate over, NULL for all
*
* Initialize subsys iterator @iter such that it iterates over devices
* of @subsys. If @start is set, the list iteration will start there,
* otherwise if it is NULL, the iteration starts at the beginning of
* the list.
*/
void subsys_dev_iter_init(struct subsys_dev_iter *iter, struct bus_type *subsys,
struct device *start, const struct device_type *type)
{
struct klist_node *start_knode = NULL;
if (start)
start_knode = &start->p->knode_bus;
klist_iter_init_node(&subsys->p->klist_devices, &iter->ki, start_knode);
iter->type = type;
}
EXPORT_SYMBOL_GPL(subsys_dev_iter_init);
/**
* subsys_dev_iter_next - iterate to the next device
* @iter: subsys iterator to proceed
*
* Proceed @iter to the next device and return it. Returns NULL if
* iteration is complete.
*
* The returned device is referenced and won't be released till
* iterator is proceed to the next device or exited. The caller is
* free to do whatever it wants to do with the device including
* calling back into subsys code.
*/
struct device *subsys_dev_iter_next(struct subsys_dev_iter *iter)
{
struct klist_node *knode;
struct device *dev;
for (;;) {
knode = klist_next(&iter->ki);
if (!knode)
return NULL;
dev = container_of(knode, struct device_private, knode_bus)->device;
if (!iter->type || iter->type == dev->type)
return dev;
}
}
EXPORT_SYMBOL_GPL(subsys_dev_iter_next);
/**
* subsys_dev_iter_exit - finish iteration
* @iter: subsys iterator to finish
*
* Finish an iteration. Always call this function after iteration is
* complete whether the iteration ran till the end or not.
*/
void subsys_dev_iter_exit(struct subsys_dev_iter *iter)
{
klist_iter_exit(&iter->ki);
}
EXPORT_SYMBOL_GPL(subsys_dev_iter_exit);
int subsys_interface_register(struct subsys_interface *sif)
{
struct bus_type *subsys;
struct subsys_dev_iter iter;
struct device *dev;
if (!sif || !sif->subsys)
return -ENODEV;
subsys = bus_get(sif->subsys);
if (!subsys)
return -EINVAL;
mutex_lock(&subsys->p->mutex);
list_add_tail(&sif->node, &subsys->p->interfaces);
if (sif->add_dev) {
subsys_dev_iter_init(&iter, subsys, NULL, NULL);
while ((dev = subsys_dev_iter_next(&iter)))
sif->add_dev(dev, sif);
subsys_dev_iter_exit(&iter);
}
mutex_unlock(&subsys->p->mutex);
return 0;
}
EXPORT_SYMBOL_GPL(subsys_interface_register);
void subsys_interface_unregister(struct subsys_interface *sif)
{
struct bus_type *subsys = sif->subsys;
struct subsys_dev_iter iter;
struct device *dev;
if (!sif)
return;
mutex_lock(&subsys->p->mutex);
list_del_init(&sif->node);
if (sif->remove_dev) {
subsys_dev_iter_init(&iter, subsys, NULL, NULL);
while ((dev = subsys_dev_iter_next(&iter)))
sif->remove_dev(dev, sif);
subsys_dev_iter_exit(&iter);
}
mutex_unlock(&subsys->p->mutex);
bus_put(subsys);
}
EXPORT_SYMBOL_GPL(subsys_interface_unregister);
static void system_root_device_release(struct device *dev)
{
kfree(dev);
}
/**
* subsys_system_register - register a subsystem at /sys/devices/system/
* @subsys - system subsystem
* @groups - default attributes for the root device
*
* All 'system' subsystems have a /sys/devices/system/<name> root device
* with the name of the subsystem. The root device can carry subsystem-
* wide attributes. All registered devices are below this single root
* device and are named after the subsystem with a simple enumeration
* number appended. The registered devices are not explicitely named;
* only 'id' in the device needs to be set.
*
* Do not use this interface for anything new, it exists for compatibility
* with bad ideas only. New subsystems should use plain subsystems; and
* add the subsystem-wide attributes should be added to the subsystem
* directory itself and not some create fake root-device placed in
* /sys/devices/system/<name>.
*/
int subsys_system_register(struct bus_type *subsys,
const struct attribute_group **groups)
{
struct device *dev;
int err;
err = bus_register(subsys);
if (err < 0)
return err;
dev = kzalloc(sizeof(struct device), GFP_KERNEL);
if (!dev) {
err = -ENOMEM;
goto err_dev;
}
err = dev_set_name(dev, "%s", subsys->name);
if (err < 0)
goto err_name;
dev->kobj.parent = &system_kset->kobj;
dev->groups = groups;
dev->release = system_root_device_release;
err = device_register(dev);
if (err < 0)
goto err_dev_reg;
subsys->dev_root = dev;
return 0;
err_dev_reg:
put_device(dev);
dev = NULL;
err_name:
kfree(dev);
err_dev:
bus_unregister(subsys);
return err;
}
EXPORT_SYMBOL_GPL(subsys_system_register);
int __init buses_init(void) int __init buses_init(void)
{ {
bus_kset = kset_create_and_add("bus", &bus_uevent_ops, NULL); bus_kset = kset_create_and_add("bus", &bus_uevent_ops, NULL);
if (!bus_kset) if (!bus_kset)
return -ENOMEM; return -ENOMEM;
system_kset = kset_create_and_add("system", NULL, &devices_kset->kobj);
if (!system_kset)
return -ENOMEM;
return 0; return 0;
} }

View File

@@ -184,9 +184,9 @@ int __class_register(struct class *cls, struct lock_class_key *key)
if (!cp) if (!cp)
return -ENOMEM; return -ENOMEM;
klist_init(&cp->klist_devices, klist_class_dev_get, klist_class_dev_put); klist_init(&cp->klist_devices, klist_class_dev_get, klist_class_dev_put);
INIT_LIST_HEAD(&cp->class_interfaces); INIT_LIST_HEAD(&cp->interfaces);
kset_init(&cp->glue_dirs); kset_init(&cp->glue_dirs);
__mutex_init(&cp->class_mutex, "struct class mutex", key); __mutex_init(&cp->mutex, "subsys mutex", key);
error = kobject_set_name(&cp->subsys.kobj, "%s", cls->name); error = kobject_set_name(&cp->subsys.kobj, "%s", cls->name);
if (error) { if (error) {
kfree(cp); kfree(cp);
@@ -460,15 +460,15 @@ int class_interface_register(struct class_interface *class_intf)
if (!parent) if (!parent)
return -EINVAL; return -EINVAL;
mutex_lock(&parent->p->class_mutex); mutex_lock(&parent->p->mutex);
list_add_tail(&class_intf->node, &parent->p->class_interfaces); list_add_tail(&class_intf->node, &parent->p->interfaces);
if (class_intf->add_dev) { if (class_intf->add_dev) {
class_dev_iter_init(&iter, parent, NULL, NULL); class_dev_iter_init(&iter, parent, NULL, NULL);
while ((dev = class_dev_iter_next(&iter))) while ((dev = class_dev_iter_next(&iter)))
class_intf->add_dev(dev, class_intf); class_intf->add_dev(dev, class_intf);
class_dev_iter_exit(&iter); class_dev_iter_exit(&iter);
} }
mutex_unlock(&parent->p->class_mutex); mutex_unlock(&parent->p->mutex);
return 0; return 0;
} }
@@ -482,7 +482,7 @@ void class_interface_unregister(struct class_interface *class_intf)
if (!parent) if (!parent)
return; return;
mutex_lock(&parent->p->class_mutex); mutex_lock(&parent->p->mutex);
list_del_init(&class_intf->node); list_del_init(&class_intf->node);
if (class_intf->remove_dev) { if (class_intf->remove_dev) {
class_dev_iter_init(&iter, parent, NULL, NULL); class_dev_iter_init(&iter, parent, NULL, NULL);
@@ -490,7 +490,7 @@ void class_interface_unregister(struct class_interface *class_intf)
class_intf->remove_dev(dev, class_intf); class_intf->remove_dev(dev, class_intf);
class_dev_iter_exit(&iter); class_dev_iter_exit(&iter);
} }
mutex_unlock(&parent->p->class_mutex); mutex_unlock(&parent->p->mutex);
class_put(parent); class_put(parent);
} }

View File

@@ -118,6 +118,56 @@ static const struct sysfs_ops dev_sysfs_ops = {
.store = dev_attr_store, .store = dev_attr_store,
}; };
#define to_ext_attr(x) container_of(x, struct dev_ext_attribute, attr)
ssize_t device_store_ulong(struct device *dev,
struct device_attribute *attr,
const char *buf, size_t size)
{
struct dev_ext_attribute *ea = to_ext_attr(attr);
char *end;
unsigned long new = simple_strtoul(buf, &end, 0);
if (end == buf)
return -EINVAL;
*(unsigned long *)(ea->var) = new;
/* Always return full write size even if we didn't consume all */
return size;
}
EXPORT_SYMBOL_GPL(device_store_ulong);
ssize_t device_show_ulong(struct device *dev,
struct device_attribute *attr,
char *buf)
{
struct dev_ext_attribute *ea = to_ext_attr(attr);
return snprintf(buf, PAGE_SIZE, "%lx\n", *(unsigned long *)(ea->var));
}
EXPORT_SYMBOL_GPL(device_show_ulong);
ssize_t device_store_int(struct device *dev,
struct device_attribute *attr,
const char *buf, size_t size)
{
struct dev_ext_attribute *ea = to_ext_attr(attr);
char *end;
long new = simple_strtol(buf, &end, 0);
if (end == buf || new > INT_MAX || new < INT_MIN)
return -EINVAL;
*(int *)(ea->var) = new;
/* Always return full write size even if we didn't consume all */
return size;
}
EXPORT_SYMBOL_GPL(device_store_int);
ssize_t device_show_int(struct device *dev,
struct device_attribute *attr,
char *buf)
{
struct dev_ext_attribute *ea = to_ext_attr(attr);
return snprintf(buf, PAGE_SIZE, "%d\n", *(int *)(ea->var));
}
EXPORT_SYMBOL_GPL(device_show_int);
/** /**
* device_release - free device structure. * device_release - free device structure.
@@ -464,7 +514,7 @@ static ssize_t show_dev(struct device *dev, struct device_attribute *attr,
static struct device_attribute devt_attr = static struct device_attribute devt_attr =
__ATTR(dev, S_IRUGO, show_dev, NULL); __ATTR(dev, S_IRUGO, show_dev, NULL);
/* kset to create /sys/devices/ */ /* /sys/devices/ */
struct kset *devices_kset; struct kset *devices_kset;
/** /**
@@ -711,6 +761,10 @@ static struct kobject *get_device_parent(struct device *dev,
return k; return k;
} }
/* subsystems can specify a default root directory for their devices */
if (!parent && dev->bus && dev->bus->dev_root)
return &dev->bus->dev_root->kobj;
if (parent) if (parent)
return &parent->kobj; return &parent->kobj;
return NULL; return NULL;
@@ -731,14 +785,6 @@ static void cleanup_device_parent(struct device *dev)
cleanup_glue_dir(dev, dev->kobj.parent); cleanup_glue_dir(dev, dev->kobj.parent);
} }
static void setup_parent(struct device *dev, struct device *parent)
{
struct kobject *kobj;
kobj = get_device_parent(dev, parent);
if (kobj)
dev->kobj.parent = kobj;
}
static int device_add_class_symlinks(struct device *dev) static int device_add_class_symlinks(struct device *dev)
{ {
int error; int error;
@@ -891,6 +937,7 @@ int device_private_init(struct device *dev)
int device_add(struct device *dev) int device_add(struct device *dev)
{ {
struct device *parent = NULL; struct device *parent = NULL;
struct kobject *kobj;
struct class_interface *class_intf; struct class_interface *class_intf;
int error = -EINVAL; int error = -EINVAL;
@@ -914,6 +961,10 @@ int device_add(struct device *dev)
dev->init_name = NULL; dev->init_name = NULL;
} }
/* subsystems can specify simple device enumeration */
if (!dev_name(dev) && dev->bus && dev->bus->dev_name)
dev_set_name(dev, "%s%u", dev->bus->dev_name, dev->id);
if (!dev_name(dev)) { if (!dev_name(dev)) {
error = -EINVAL; error = -EINVAL;
goto name_error; goto name_error;
@@ -922,7 +973,9 @@ int device_add(struct device *dev)
pr_debug("device: '%s': %s\n", dev_name(dev), __func__); pr_debug("device: '%s': %s\n", dev_name(dev), __func__);
parent = get_device(dev->parent); parent = get_device(dev->parent);
setup_parent(dev, parent); kobj = get_device_parent(dev, parent);
if (kobj)
dev->kobj.parent = kobj;
/* use parent numa_node */ /* use parent numa_node */
if (parent) if (parent)
@@ -982,17 +1035,17 @@ int device_add(struct device *dev)
&parent->p->klist_children); &parent->p->klist_children);
if (dev->class) { if (dev->class) {
mutex_lock(&dev->class->p->class_mutex); mutex_lock(&dev->class->p->mutex);
/* tie the class to the device */ /* tie the class to the device */
klist_add_tail(&dev->knode_class, klist_add_tail(&dev->knode_class,
&dev->class->p->klist_devices); &dev->class->p->klist_devices);
/* notify any interfaces that the device is here */ /* notify any interfaces that the device is here */
list_for_each_entry(class_intf, list_for_each_entry(class_intf,
&dev->class->p->class_interfaces, node) &dev->class->p->interfaces, node)
if (class_intf->add_dev) if (class_intf->add_dev)
class_intf->add_dev(dev, class_intf); class_intf->add_dev(dev, class_intf);
mutex_unlock(&dev->class->p->class_mutex); mutex_unlock(&dev->class->p->mutex);
} }
done: done:
put_device(dev); put_device(dev);
@@ -1107,15 +1160,15 @@ void device_del(struct device *dev)
if (dev->class) { if (dev->class) {
device_remove_class_symlinks(dev); device_remove_class_symlinks(dev);
mutex_lock(&dev->class->p->class_mutex); mutex_lock(&dev->class->p->mutex);
/* notify any interfaces that the device is now gone */ /* notify any interfaces that the device is now gone */
list_for_each_entry(class_intf, list_for_each_entry(class_intf,
&dev->class->p->class_interfaces, node) &dev->class->p->interfaces, node)
if (class_intf->remove_dev) if (class_intf->remove_dev)
class_intf->remove_dev(dev, class_intf); class_intf->remove_dev(dev, class_intf);
/* remove the device from the class list */ /* remove the device from the class list */
klist_del(&dev->knode_class); klist_del(&dev->knode_class);
mutex_unlock(&dev->class->p->class_mutex); mutex_unlock(&dev->class->p->mutex);
} }
device_remove_file(dev, &uevent_attr); device_remove_file(dev, &uevent_attr);
device_remove_attrs(dev); device_remove_attrs(dev);

View File

@@ -413,10 +413,9 @@ static int devtmpfsd(void *p)
} }
spin_lock(&req_lock); spin_lock(&req_lock);
} }
set_current_state(TASK_INTERRUPTIBLE); __set_current_state(TASK_INTERRUPTIBLE);
spin_unlock(&req_lock); spin_unlock(&req_lock);
schedule(); schedule();
__set_current_state(TASK_RUNNING);
} }
return 0; return 0;
out: out:

View File

@@ -31,7 +31,6 @@ void __init driver_init(void)
* core core pieces. * core core pieces.
*/ */
platform_bus_init(); platform_bus_init();
system_bus_init();
cpu_dev_init(); cpu_dev_init();
memory_dev_init(); memory_dev_init();
} }

View File

@@ -383,7 +383,7 @@ EXPORT_SYMBOL_GPL(platform_device_unregister);
* Returns &struct platform_device pointer on success, or ERR_PTR() on error. * Returns &struct platform_device pointer on success, or ERR_PTR() on error.
*/ */
struct platform_device *platform_device_register_full( struct platform_device *platform_device_register_full(
struct platform_device_info *pdevinfo) const struct platform_device_info *pdevinfo)
{ {
int ret = -ENOMEM; int ret = -ENOMEM;
struct platform_device *pdev; struct platform_device *pdev;

View File

@@ -126,7 +126,7 @@ void sysdev_class_remove_file(struct sysdev_class *c,
} }
EXPORT_SYMBOL_GPL(sysdev_class_remove_file); EXPORT_SYMBOL_GPL(sysdev_class_remove_file);
static struct kset *system_kset; extern struct kset *system_kset;
int sysdev_class_register(struct sysdev_class *cls) int sysdev_class_register(struct sysdev_class *cls)
{ {
@@ -331,14 +331,6 @@ void sysdev_unregister(struct sys_device *sysdev)
EXPORT_SYMBOL_GPL(sysdev_register); EXPORT_SYMBOL_GPL(sysdev_register);
EXPORT_SYMBOL_GPL(sysdev_unregister); EXPORT_SYMBOL_GPL(sysdev_unregister);
int __init system_bus_init(void)
{
system_kset = kset_create_and_add("system", NULL, &devices_kset->kobj);
if (!system_kset)
return -ENOMEM;
return 0;
}
#define to_ext_attr(x) container_of(x, struct sysdev_ext_attribute, attr) #define to_ext_attr(x) container_of(x, struct sysdev_ext_attribute, attr)
ssize_t sysdev_store_ulong(struct sys_device *sysdev, ssize_t sysdev_store_ulong(struct sys_device *sysdev,

View File

@@ -423,19 +423,7 @@ static struct usb_driver ath3k_driver = {
.id_table = ath3k_table, .id_table = ath3k_table,
}; };
static int __init ath3k_init(void) module_usb_driver(ath3k_driver);
{
BT_INFO("Atheros AR30xx firmware driver ver %s", VERSION);
return usb_register(&ath3k_driver);
}
static void __exit ath3k_exit(void)
{
usb_deregister(&ath3k_driver);
}
module_init(ath3k_init);
module_exit(ath3k_exit);
MODULE_AUTHOR("Atheros Communications"); MODULE_AUTHOR("Atheros Communications");
MODULE_DESCRIPTION("Atheros AR30xx firmware driver"); MODULE_DESCRIPTION("Atheros AR30xx firmware driver");

View File

@@ -281,26 +281,7 @@ static struct usb_driver bcm203x_driver = {
.id_table = bcm203x_table, .id_table = bcm203x_table,
}; };
static int __init bcm203x_init(void) module_usb_driver(bcm203x_driver);
{
int err;
BT_INFO("Broadcom Blutonium firmware driver ver %s", VERSION);
err = usb_register(&bcm203x_driver);
if (err < 0)
BT_ERR("Failed to register USB driver");
return err;
}
static void __exit bcm203x_exit(void)
{
usb_deregister(&bcm203x_driver);
}
module_init(bcm203x_init);
module_exit(bcm203x_exit);
MODULE_AUTHOR("Marcel Holtmann <marcel@holtmann.org>"); MODULE_AUTHOR("Marcel Holtmann <marcel@holtmann.org>");
MODULE_DESCRIPTION("Broadcom Blutonium firmware driver ver " VERSION); MODULE_DESCRIPTION("Broadcom Blutonium firmware driver ver " VERSION);

View File

@@ -764,26 +764,7 @@ static struct usb_driver bfusb_driver = {
.id_table = bfusb_table, .id_table = bfusb_table,
}; };
static int __init bfusb_init(void) module_usb_driver(bfusb_driver);
{
int err;
BT_INFO("BlueFRITZ! USB driver ver %s", VERSION);
err = usb_register(&bfusb_driver);
if (err < 0)
BT_ERR("Failed to register BlueFRITZ! USB driver");
return err;
}
static void __exit bfusb_exit(void)
{
usb_deregister(&bfusb_driver);
}
module_init(bfusb_init);
module_exit(bfusb_exit);
MODULE_AUTHOR("Marcel Holtmann <marcel@holtmann.org>"); MODULE_AUTHOR("Marcel Holtmann <marcel@holtmann.org>");
MODULE_DESCRIPTION("BlueFRITZ! USB driver ver " VERSION); MODULE_DESCRIPTION("BlueFRITZ! USB driver ver " VERSION);

View File

@@ -521,20 +521,7 @@ static struct usb_driver bpa10x_driver = {
.id_table = bpa10x_table, .id_table = bpa10x_table,
}; };
static int __init bpa10x_init(void) module_usb_driver(bpa10x_driver);
{
BT_INFO("Digianswer Bluetooth USB driver ver %s", VERSION);
return usb_register(&bpa10x_driver);
}
static void __exit bpa10x_exit(void)
{
usb_deregister(&bpa10x_driver);
}
module_init(bpa10x_init);
module_exit(bpa10x_exit);
MODULE_AUTHOR("Marcel Holtmann <marcel@holtmann.org>"); MODULE_AUTHOR("Marcel Holtmann <marcel@holtmann.org>");
MODULE_DESCRIPTION("Digianswer Bluetooth USB driver ver " VERSION); MODULE_DESCRIPTION("Digianswer Bluetooth USB driver ver " VERSION);

View File

@@ -1223,20 +1223,7 @@ static struct usb_driver btusb_driver = {
.supports_autosuspend = 1, .supports_autosuspend = 1,
}; };
static int __init btusb_init(void) module_usb_driver(btusb_driver);
{
BT_INFO("Generic Bluetooth USB driver ver %s", VERSION);
return usb_register(&btusb_driver);
}
static void __exit btusb_exit(void)
{
usb_deregister(&btusb_driver);
}
module_init(btusb_init);
module_exit(btusb_exit);
module_param(ignore_dga, bool, 0644); module_param(ignore_dga, bool, 0644);
MODULE_PARM_DESC(ignore_dga, "Ignore devices with id 08fd:0001"); MODULE_PARM_DESC(ignore_dga, "Ignore devices with id 08fd:0001");

View File

@@ -32,7 +32,6 @@
#include <linux/completion.h> #include <linux/completion.h>
#include <linux/kobject.h> #include <linux/kobject.h>
#include <linux/platform_device.h> #include <linux/platform_device.h>
#include <linux/sysdev.h>
#include <linux/workqueue.h> #include <linux/workqueue.h>
#include <linux/edac.h> #include <linux/edac.h>
@@ -243,8 +242,8 @@ struct edac_device_ctl_info {
*/ */
struct edac_dev_sysfs_attribute *sysfs_attributes; struct edac_dev_sysfs_attribute *sysfs_attributes;
/* pointer to main 'edac' class in sysfs */ /* pointer to main 'edac' subsys in sysfs */
struct sysdev_class *edac_class; struct bus_type *edac_subsys;
/* the internal state of this controller instance */ /* the internal state of this controller instance */
int op_state; int op_state;
@@ -342,7 +341,7 @@ struct edac_pci_ctl_info {
int pci_idx; int pci_idx;
struct sysdev_class *edac_class; /* pointer to class */ struct bus_type *edac_subsys; /* pointer to subsystem */
/* the internal state of this controller instance */ /* the internal state of this controller instance */
int op_state; int op_state;

View File

@@ -23,7 +23,6 @@
#include <linux/jiffies.h> #include <linux/jiffies.h>
#include <linux/spinlock.h> #include <linux/spinlock.h>
#include <linux/list.h> #include <linux/list.h>
#include <linux/sysdev.h>
#include <linux/ctype.h> #include <linux/ctype.h>
#include <linux/workqueue.h> #include <linux/workqueue.h>
#include <asm/uaccess.h> #include <asm/uaccess.h>

View File

@@ -1,5 +1,5 @@
/* /*
* file for managing the edac_device class of devices for EDAC * file for managing the edac_device subsystem of devices for EDAC
* *
* (C) 2007 SoftwareBitMaker * (C) 2007 SoftwareBitMaker
* *
@@ -230,21 +230,21 @@ static struct kobj_type ktype_device_ctrl = {
*/ */
int edac_device_register_sysfs_main_kobj(struct edac_device_ctl_info *edac_dev) int edac_device_register_sysfs_main_kobj(struct edac_device_ctl_info *edac_dev)
{ {
struct sysdev_class *edac_class; struct bus_type *edac_subsys;
int err; int err;
debugf1("%s()\n", __func__); debugf1("%s()\n", __func__);
/* get the /sys/devices/system/edac reference */ /* get the /sys/devices/system/edac reference */
edac_class = edac_get_sysfs_class(); edac_subsys = edac_get_sysfs_subsys();
if (edac_class == NULL) { if (edac_subsys == NULL) {
debugf1("%s() no edac_class error\n", __func__); debugf1("%s() no edac_subsys error\n", __func__);
err = -ENODEV; err = -ENODEV;
goto err_out; goto err_out;
} }
/* Point to the 'edac_class' this instance 'reports' to */ /* Point to the 'edac_subsys' this instance 'reports' to */
edac_dev->edac_class = edac_class; edac_dev->edac_subsys = edac_subsys;
/* Init the devices's kobject */ /* Init the devices's kobject */
memset(&edac_dev->kobj, 0, sizeof(struct kobject)); memset(&edac_dev->kobj, 0, sizeof(struct kobject));
@@ -261,7 +261,7 @@ int edac_device_register_sysfs_main_kobj(struct edac_device_ctl_info *edac_dev)
/* register */ /* register */
err = kobject_init_and_add(&edac_dev->kobj, &ktype_device_ctrl, err = kobject_init_and_add(&edac_dev->kobj, &ktype_device_ctrl,
&edac_class->kset.kobj, &edac_subsys->dev_root->kobj,
"%s", edac_dev->name); "%s", edac_dev->name);
if (err) { if (err) {
debugf1("%s()Failed to register '.../edac/%s'\n", debugf1("%s()Failed to register '.../edac/%s'\n",
@@ -284,7 +284,7 @@ err_kobj_reg:
module_put(edac_dev->owner); module_put(edac_dev->owner);
err_mod_get: err_mod_get:
edac_put_sysfs_class(); edac_put_sysfs_subsys();
err_out: err_out:
return err; return err;
@@ -308,7 +308,7 @@ void edac_device_unregister_sysfs_main_kobj(struct edac_device_ctl_info *dev)
* b) 'kfree' the memory * b) 'kfree' the memory
*/ */
kobject_put(&dev->kobj); kobject_put(&dev->kobj);
edac_put_sysfs_class(); edac_put_sysfs_subsys();
} }
/* edac_dev -> instance information */ /* edac_dev -> instance information */

View File

@@ -25,7 +25,6 @@
#include <linux/jiffies.h> #include <linux/jiffies.h>
#include <linux/spinlock.h> #include <linux/spinlock.h>
#include <linux/list.h> #include <linux/list.h>
#include <linux/sysdev.h>
#include <linux/ctype.h> #include <linux/ctype.h>
#include <linux/edac.h> #include <linux/edac.h>
#include <asm/uaccess.h> #include <asm/uaccess.h>

View File

@@ -1021,19 +1021,19 @@ void edac_remove_sysfs_mci_device(struct mem_ctl_info *mci)
int edac_sysfs_setup_mc_kset(void) int edac_sysfs_setup_mc_kset(void)
{ {
int err = -EINVAL; int err = -EINVAL;
struct sysdev_class *edac_class; struct bus_type *edac_subsys;
debugf1("%s()\n", __func__); debugf1("%s()\n", __func__);
/* get the /sys/devices/system/edac class reference */ /* get the /sys/devices/system/edac subsys reference */
edac_class = edac_get_sysfs_class(); edac_subsys = edac_get_sysfs_subsys();
if (edac_class == NULL) { if (edac_subsys == NULL) {
debugf1("%s() no edac_class error=%d\n", __func__, err); debugf1("%s() no edac_subsys error=%d\n", __func__, err);
goto fail_out; goto fail_out;
} }
/* Init the MC's kobject */ /* Init the MC's kobject */
mc_kset = kset_create_and_add("mc", NULL, &edac_class->kset.kobj); mc_kset = kset_create_and_add("mc", NULL, &edac_subsys->dev_root->kobj);
if (!mc_kset) { if (!mc_kset) {
err = -ENOMEM; err = -ENOMEM;
debugf1("%s() Failed to register '.../edac/mc'\n", __func__); debugf1("%s() Failed to register '.../edac/mc'\n", __func__);
@@ -1045,7 +1045,7 @@ int edac_sysfs_setup_mc_kset(void)
return 0; return 0;
fail_kset: fail_kset:
edac_put_sysfs_class(); edac_put_sysfs_subsys();
fail_out: fail_out:
return err; return err;
@@ -1059,6 +1059,6 @@ fail_out:
void edac_sysfs_teardown_mc_kset(void) void edac_sysfs_teardown_mc_kset(void)
{ {
kset_unregister(mc_kset); kset_unregister(mc_kset);
edac_put_sysfs_class(); edac_put_sysfs_subsys();
} }

View File

@@ -10,8 +10,6 @@
#ifndef __EDAC_MODULE_H__ #ifndef __EDAC_MODULE_H__
#define __EDAC_MODULE_H__ #define __EDAC_MODULE_H__
#include <linux/sysdev.h>
#include "edac_core.h" #include "edac_core.h"
/* /*

View File

@@ -19,7 +19,6 @@
#include <linux/slab.h> #include <linux/slab.h>
#include <linux/spinlock.h> #include <linux/spinlock.h>
#include <linux/list.h> #include <linux/list.h>
#include <linux/sysdev.h>
#include <linux/ctype.h> #include <linux/ctype.h>
#include <linux/workqueue.h> #include <linux/workqueue.h>
#include <asm/uaccess.h> #include <asm/uaccess.h>

View File

@@ -338,12 +338,12 @@ static struct kobj_type ktype_edac_pci_main_kobj = {
* edac_pci_main_kobj_setup() * edac_pci_main_kobj_setup()
* *
* setup the sysfs for EDAC PCI attributes * setup the sysfs for EDAC PCI attributes
* assumes edac_class has already been initialized * assumes edac_subsys has already been initialized
*/ */
static int edac_pci_main_kobj_setup(void) static int edac_pci_main_kobj_setup(void)
{ {
int err; int err;
struct sysdev_class *edac_class; struct bus_type *edac_subsys;
debugf0("%s()\n", __func__); debugf0("%s()\n", __func__);
@@ -354,9 +354,9 @@ static int edac_pci_main_kobj_setup(void)
/* First time, so create the main kobject and its /* First time, so create the main kobject and its
* controls and attributes * controls and attributes
*/ */
edac_class = edac_get_sysfs_class(); edac_subsys = edac_get_sysfs_subsys();
if (edac_class == NULL) { if (edac_subsys == NULL) {
debugf1("%s() no edac_class\n", __func__); debugf1("%s() no edac_subsys\n", __func__);
err = -ENODEV; err = -ENODEV;
goto decrement_count_fail; goto decrement_count_fail;
} }
@@ -381,7 +381,7 @@ static int edac_pci_main_kobj_setup(void)
/* Instanstiate the pci object */ /* Instanstiate the pci object */
err = kobject_init_and_add(edac_pci_top_main_kobj, err = kobject_init_and_add(edac_pci_top_main_kobj,
&ktype_edac_pci_main_kobj, &ktype_edac_pci_main_kobj,
&edac_class->kset.kobj, "pci"); &edac_subsys->dev_root->kobj, "pci");
if (err) { if (err) {
debugf1("Failed to register '.../edac/pci'\n"); debugf1("Failed to register '.../edac/pci'\n");
goto kobject_init_and_add_fail; goto kobject_init_and_add_fail;
@@ -404,7 +404,7 @@ kzalloc_fail:
module_put(THIS_MODULE); module_put(THIS_MODULE);
mod_get_fail: mod_get_fail:
edac_put_sysfs_class(); edac_put_sysfs_subsys();
decrement_count_fail: decrement_count_fail:
/* if are on this error exit, nothing to tear down */ /* if are on this error exit, nothing to tear down */
@@ -432,7 +432,7 @@ static void edac_pci_main_kobj_teardown(void)
__func__); __func__);
kobject_put(edac_pci_top_main_kobj); kobject_put(edac_pci_top_main_kobj);
} }
edac_put_sysfs_class(); edac_put_sysfs_subsys();
} }
/* /*

View File

@@ -26,7 +26,7 @@ EXPORT_SYMBOL_GPL(edac_handlers);
int edac_err_assert = 0; int edac_err_assert = 0;
EXPORT_SYMBOL_GPL(edac_err_assert); EXPORT_SYMBOL_GPL(edac_err_assert);
static atomic_t edac_class_valid = ATOMIC_INIT(0); static atomic_t edac_subsys_valid = ATOMIC_INIT(0);
/* /*
* called to determine if there is an EDAC driver interested in * called to determine if there is an EDAC driver interested in
@@ -54,36 +54,37 @@ EXPORT_SYMBOL_GPL(edac_atomic_assert_error);
* sysfs object: /sys/devices/system/edac * sysfs object: /sys/devices/system/edac
* need to export to other files * need to export to other files
*/ */
struct sysdev_class edac_class = { struct bus_type edac_subsys = {
.name = "edac", .name = "edac",
.dev_name = "edac",
}; };
EXPORT_SYMBOL_GPL(edac_class); EXPORT_SYMBOL_GPL(edac_subsys);
/* return pointer to the 'edac' node in sysfs */ /* return pointer to the 'edac' node in sysfs */
struct sysdev_class *edac_get_sysfs_class(void) struct bus_type *edac_get_sysfs_subsys(void)
{ {
int err = 0; int err = 0;
if (atomic_read(&edac_class_valid)) if (atomic_read(&edac_subsys_valid))
goto out; goto out;
/* create the /sys/devices/system/edac directory */ /* create the /sys/devices/system/edac directory */
err = sysdev_class_register(&edac_class); err = subsys_system_register(&edac_subsys, NULL);
if (err) { if (err) {
printk(KERN_ERR "Error registering toplevel EDAC sysfs dir\n"); printk(KERN_ERR "Error registering toplevel EDAC sysfs dir\n");
return NULL; return NULL;
} }
out: out:
atomic_inc(&edac_class_valid); atomic_inc(&edac_subsys_valid);
return &edac_class; return &edac_subsys;
} }
EXPORT_SYMBOL_GPL(edac_get_sysfs_class); EXPORT_SYMBOL_GPL(edac_get_sysfs_subsys);
void edac_put_sysfs_class(void) void edac_put_sysfs_subsys(void)
{ {
/* last user unregisters it */ /* last user unregisters it */
if (atomic_dec_and_test(&edac_class_valid)) if (atomic_dec_and_test(&edac_subsys_valid))
sysdev_class_unregister(&edac_class); bus_unregister(&edac_subsys);
} }
EXPORT_SYMBOL_GPL(edac_put_sysfs_class); EXPORT_SYMBOL_GPL(edac_put_sysfs_subsys);

View File

@@ -11,7 +11,6 @@
*/ */
#include <linux/kobject.h> #include <linux/kobject.h>
#include <linux/sysdev.h>
#include <linux/edac.h> #include <linux/edac.h>
#include <linux/module.h> #include <linux/module.h>
#include <asm/mce.h> #include <asm/mce.h>
@@ -116,14 +115,14 @@ static struct edac_mce_attr *sysfs_attrs[] = { &mce_attr_status, &mce_attr_misc,
static int __init edac_init_mce_inject(void) static int __init edac_init_mce_inject(void)
{ {
struct sysdev_class *edac_class = NULL; struct bus_type *edac_subsys = NULL;
int i, err = 0; int i, err = 0;
edac_class = edac_get_sysfs_class(); edac_subsys = edac_get_sysfs_subsys();
if (!edac_class) if (!edac_subsys)
return -EINVAL; return -EINVAL;
mce_kobj = kobject_create_and_add("mce", &edac_class->kset.kobj); mce_kobj = kobject_create_and_add("mce", &edac_subsys->dev_root->kobj);
if (!mce_kobj) { if (!mce_kobj) {
printk(KERN_ERR "Error creating a mce kset.\n"); printk(KERN_ERR "Error creating a mce kset.\n");
err = -ENOMEM; err = -ENOMEM;
@@ -147,7 +146,7 @@ err_sysfs_create:
kobject_del(mce_kobj); kobject_del(mce_kobj);
err_mce_kobj: err_mce_kobj:
edac_put_sysfs_class(); edac_put_sysfs_subsys();
return err; return err;
} }
@@ -161,7 +160,7 @@ static void __exit edac_exit_mce_inject(void)
kobject_del(mce_kobj); kobject_del(mce_kobj);
edac_put_sysfs_class(); edac_put_sysfs_subsys();
} }
module_init(edac_init_mce_inject); module_init(edac_init_mce_inject);

View File

@@ -345,7 +345,8 @@ static efi_status_t gsmi_get_variable(efi_char16_t *name,
memcpy(&param, gsmi_dev.param_buf->start, sizeof(param)); memcpy(&param, gsmi_dev.param_buf->start, sizeof(param));
/* The size reported is the min of all of our buffers */ /* The size reported is the min of all of our buffers */
*data_size = min(*data_size, gsmi_dev.data_buf->length); *data_size = min_t(unsigned long, *data_size,
gsmi_dev.data_buf->length);
*data_size = min_t(unsigned long, *data_size, param.data_len); *data_size = min_t(unsigned long, *data_size, param.data_len);
/* Copy data back to return buffer. */ /* Copy data back to return buffer. */

View File

@@ -354,19 +354,4 @@ static struct usb_driver usb_kbd_driver = {
.id_table = usb_kbd_id_table, .id_table = usb_kbd_id_table,
}; };
static int __init usb_kbd_init(void) module_usb_driver(usb_kbd_driver);
{
int result = usb_register(&usb_kbd_driver);
if (result == 0)
printk(KERN_INFO KBUILD_MODNAME ": " DRIVER_VERSION ":"
DRIVER_DESC "\n");
return result;
}
static void __exit usb_kbd_exit(void)
{
usb_deregister(&usb_kbd_driver);
}
module_init(usb_kbd_init);
module_exit(usb_kbd_exit);

View File

@@ -241,19 +241,4 @@ static struct usb_driver usb_mouse_driver = {
.id_table = usb_mouse_id_table, .id_table = usb_mouse_id_table,
}; };
static int __init usb_mouse_init(void) module_usb_driver(usb_mouse_driver);
{
int retval = usb_register(&usb_mouse_driver);
if (retval == 0)
printk(KERN_INFO KBUILD_MODNAME ": " DRIVER_VERSION ":"
DRIVER_DESC "\n");
return retval;
}
static void __exit usb_mouse_exit(void)
{
usb_deregister(&usb_mouse_driver);
}
module_init(usb_mouse_init);
module_exit(usb_mouse_exit);

View File

@@ -1,3 +1,5 @@
menu "Microsoft Hyper-V guest support"
config HYPERV config HYPERV
tristate "Microsoft Hyper-V client drivers" tristate "Microsoft Hyper-V client drivers"
depends on X86 && ACPI && PCI depends on X86 && ACPI && PCI
@@ -11,4 +13,4 @@ config HYPERV_UTILS
help help
Select this option to enable the Hyper-V Utilities. Select this option to enable the Hyper-V Utilities.
endmenu

View File

@@ -223,6 +223,17 @@ static void vmbus_process_rescind_offer(struct work_struct *work)
vmbus_device_unregister(channel->device_obj); vmbus_device_unregister(channel->device_obj);
} }
void vmbus_free_channels(void)
{
struct vmbus_channel *channel;
list_for_each_entry(channel, &vmbus_connection.chn_list, listentry) {
vmbus_device_unregister(channel->device_obj);
kfree(channel->device_obj);
free_channel(channel);
}
}
/* /*
* vmbus_process_offer - Process the offer by creating a channel/device * vmbus_process_offer - Process the offer by creating a channel/device
* associated with this offer * associated with this offer
@@ -287,6 +298,7 @@ static void vmbus_process_offer(struct work_struct *work)
spin_lock_irqsave(&vmbus_connection.channel_lock, flags); spin_lock_irqsave(&vmbus_connection.channel_lock, flags);
list_del(&newchannel->listentry); list_del(&newchannel->listentry);
spin_unlock_irqrestore(&vmbus_connection.channel_lock, flags); spin_unlock_irqrestore(&vmbus_connection.channel_lock, flags);
kfree(newchannel->device_obj);
free_channel(newchannel); free_channel(newchannel);
} else { } else {

View File

@@ -164,11 +164,6 @@ int hv_init(void)
max_leaf = query_hypervisor_info(); max_leaf = query_hypervisor_info();
rdmsrl(HV_X64_MSR_GUEST_OS_ID, hv_context.guestid);
if (hv_context.guestid != 0)
goto cleanup;
/* Write our OS info */ /* Write our OS info */
wrmsrl(HV_X64_MSR_GUEST_OS_ID, HV_LINUX_GUEST_ID); wrmsrl(HV_X64_MSR_GUEST_OS_ID, HV_LINUX_GUEST_ID);
hv_context.guestid = HV_LINUX_GUEST_ID; hv_context.guestid = HV_LINUX_GUEST_ID;
@@ -237,6 +232,9 @@ void hv_cleanup(void)
{ {
union hv_x64_msr_hypercall_contents hypercall_msr; union hv_x64_msr_hypercall_contents hypercall_msr;
/* Reset our OS id */
wrmsrl(HV_X64_MSR_GUEST_OS_ID, 0);
kfree(hv_context.signal_event_buffer); kfree(hv_context.signal_event_buffer);
hv_context.signal_event_buffer = NULL; hv_context.signal_event_buffer = NULL;
hv_context.signal_event_param = NULL; hv_context.signal_event_param = NULL;

View File

@@ -611,6 +611,7 @@ void vmbus_device_unregister(struct hv_device *device_obj);
struct vmbus_channel *relid2channel(u32 relid); struct vmbus_channel *relid2channel(u32 relid);
void vmbus_free_channels(void);
/* Connection interface */ /* Connection interface */

View File

@@ -62,6 +62,14 @@ struct hv_device_info {
struct hv_dev_port_info outbound; struct hv_dev_port_info outbound;
}; };
static int vmbus_exists(void)
{
if (hv_acpi_dev == NULL)
return -ENODEV;
return 0;
}
static void get_channel_info(struct hv_device *device, static void get_channel_info(struct hv_device *device,
struct hv_device_info *info) struct hv_device_info *info)
@@ -590,6 +598,10 @@ int __vmbus_driver_register(struct hv_driver *hv_driver, struct module *owner, c
pr_info("registering driver %s\n", hv_driver->name); pr_info("registering driver %s\n", hv_driver->name);
ret = vmbus_exists();
if (ret < 0)
return ret;
hv_driver->driver.name = hv_driver->name; hv_driver->driver.name = hv_driver->name;
hv_driver->driver.owner = owner; hv_driver->driver.owner = owner;
hv_driver->driver.mod_name = mod_name; hv_driver->driver.mod_name = mod_name;
@@ -614,6 +626,9 @@ void vmbus_driver_unregister(struct hv_driver *hv_driver)
{ {
pr_info("unregistering driver %s\n", hv_driver->name); pr_info("unregistering driver %s\n", hv_driver->name);
if (!vmbus_exists())
return;
driver_unregister(&hv_driver->driver); driver_unregister(&hv_driver->driver);
} }
@@ -776,11 +791,23 @@ static int __init hv_acpi_init(void)
cleanup: cleanup:
acpi_bus_unregister_driver(&vmbus_acpi_driver); acpi_bus_unregister_driver(&vmbus_acpi_driver);
hv_acpi_dev = NULL;
return ret; return ret;
} }
static void __exit vmbus_exit(void)
{
free_irq(irq, hv_acpi_dev);
vmbus_free_channels();
bus_unregister(&hv_bus);
hv_cleanup();
acpi_bus_unregister_driver(&vmbus_acpi_driver);
}
MODULE_LICENSE("GPL"); MODULE_LICENSE("GPL");
MODULE_VERSION(HV_DRV_VERSION); MODULE_VERSION(HV_DRV_VERSION);
module_init(hv_acpi_init); subsys_initcall(hv_acpi_init);
module_exit(vmbus_exit);

View File

@@ -515,20 +515,7 @@ static struct usb_driver diolan_u2c_driver = {
.id_table = diolan_u2c_table, .id_table = diolan_u2c_table,
}; };
static int __init diolan_u2c_init(void) module_usb_driver(diolan_u2c_driver);
{
/* register this driver with the USB subsystem */
return usb_register(&diolan_u2c_driver);
}
static void __exit diolan_u2c_exit(void)
{
/* deregister this driver with the USB subsystem */
usb_deregister(&diolan_u2c_driver);
}
module_init(diolan_u2c_init);
module_exit(diolan_u2c_exit);
MODULE_AUTHOR("Guenter Roeck <guenter.roeck@ericsson.com>"); MODULE_AUTHOR("Guenter Roeck <guenter.roeck@ericsson.com>");
MODULE_DESCRIPTION(DRIVER_NAME " driver"); MODULE_DESCRIPTION(DRIVER_NAME " driver");

View File

@@ -262,20 +262,7 @@ static struct usb_driver i2c_tiny_usb_driver = {
.id_table = i2c_tiny_usb_table, .id_table = i2c_tiny_usb_table,
}; };
static int __init usb_i2c_tiny_usb_init(void) module_usb_driver(i2c_tiny_usb_driver);
{
/* register this driver with the USB subsystem */
return usb_register(&i2c_tiny_usb_driver);
}
static void __exit usb_i2c_tiny_usb_exit(void)
{
/* deregister this driver with the USB subsystem */
usb_deregister(&i2c_tiny_usb_driver);
}
module_init(usb_i2c_tiny_usb_init);
module_exit(usb_i2c_tiny_usb_exit);
/* ----- end of usb layer ------------------------------------------------ */ /* ----- end of usb layer ------------------------------------------------ */

View File

@@ -1041,18 +1041,7 @@ static struct usb_driver xpad_driver = {
.id_table = xpad_table, .id_table = xpad_table,
}; };
static int __init usb_xpad_init(void) module_usb_driver(xpad_driver);
{
return usb_register(&xpad_driver);
}
static void __exit usb_xpad_exit(void)
{
usb_deregister(&xpad_driver);
}
module_init(usb_xpad_init);
module_exit(usb_xpad_exit);
MODULE_AUTHOR(DRIVER_AUTHOR); MODULE_AUTHOR(DRIVER_AUTHOR);
MODULE_DESCRIPTION(DRIVER_DESC); MODULE_DESCRIPTION(DRIVER_DESC);

View File

@@ -1010,23 +1010,4 @@ static int ati_remote2_post_reset(struct usb_interface *interface)
return r; return r;
} }
static int __init ati_remote2_init(void) module_usb_driver(ati_remote2_driver);
{
int r;
r = usb_register(&ati_remote2_driver);
if (r)
printk(KERN_ERR "ati_remote2: usb_register() = %d\n", r);
else
printk(KERN_INFO "ati_remote2: " DRIVER_DESC " " DRIVER_VERSION "\n");
return r;
}
static void __exit ati_remote2_exit(void)
{
usb_deregister(&ati_remote2_driver);
}
module_init(ati_remote2_init);
module_exit(ati_remote2_exit);

View File

@@ -580,26 +580,7 @@ static struct usb_driver keyspan_driver =
.id_table = keyspan_table .id_table = keyspan_table
}; };
static int __init usb_keyspan_init(void) module_usb_driver(keyspan_driver);
{
int result;
/* register this driver with the USB subsystem */
result = usb_register(&keyspan_driver);
if (result)
err("usb_register failed. Error number %d\n", result);
return result;
}
static void __exit usb_keyspan_exit(void)
{
/* deregister this driver with the USB subsystem */
usb_deregister(&keyspan_driver);
}
module_init(usb_keyspan_init);
module_exit(usb_keyspan_exit);
MODULE_DEVICE_TABLE(usb, keyspan_table); MODULE_DEVICE_TABLE(usb, keyspan_table);
MODULE_AUTHOR(DRIVER_AUTHOR); MODULE_AUTHOR(DRIVER_AUTHOR);

View File

@@ -441,18 +441,7 @@ static struct usb_driver powermate_driver = {
.id_table = powermate_devices, .id_table = powermate_devices,
}; };
static int __init powermate_init(void) module_usb_driver(powermate_driver);
{
return usb_register(&powermate_driver);
}
static void __exit powermate_cleanup(void)
{
usb_deregister(&powermate_driver);
}
module_init(powermate_init);
module_exit(powermate_cleanup);
MODULE_AUTHOR( "William R Sowerbutts" ); MODULE_AUTHOR( "William R Sowerbutts" );
MODULE_DESCRIPTION( "Griffin Technology, Inc PowerMate driver" ); MODULE_DESCRIPTION( "Griffin Technology, Inc PowerMate driver" );

View File

@@ -988,22 +988,7 @@ static struct usb_driver yealink_driver = {
.id_table = usb_table, .id_table = usb_table,
}; };
static int __init yealink_dev_init(void) module_usb_driver(yealink_driver);
{
int ret = usb_register(&yealink_driver);
if (ret == 0)
printk(KERN_INFO KBUILD_MODNAME ": " DRIVER_VERSION ":"
DRIVER_DESC "\n");
return ret;
}
static void __exit yealink_dev_exit(void)
{
usb_deregister(&yealink_driver);
}
module_init(yealink_dev_init);
module_exit(yealink_dev_exit);
MODULE_DEVICE_TABLE (usb, usb_table); MODULE_DEVICE_TABLE (usb, usb_table);

View File

@@ -938,15 +938,4 @@ static struct usb_driver atp_driver = {
.id_table = atp_table, .id_table = atp_table,
}; };
static int __init atp_init(void) module_usb_driver(atp_driver);
{
return usb_register(&atp_driver);
}
static void __exit atp_exit(void)
{
usb_deregister(&atp_driver);
}
module_init(atp_init);
module_exit(atp_exit);

View File

@@ -940,16 +940,4 @@ static struct usb_driver bcm5974_driver = {
.supports_autosuspend = 1, .supports_autosuspend = 1,
}; };
static int __init bcm5974_init(void) module_usb_driver(bcm5974_driver);
{
return usb_register(&bcm5974_driver);
}
static void __exit bcm5974_exit(void)
{
usb_deregister(&bcm5974_driver);
}
module_init(bcm5974_init);
module_exit(bcm5974_exit);

View File

@@ -269,19 +269,4 @@ static struct usb_driver usb_acecad_driver = {
.id_table = usb_acecad_id_table, .id_table = usb_acecad_id_table,
}; };
static int __init usb_acecad_init(void) module_usb_driver(usb_acecad_driver);
{
int result = usb_register(&usb_acecad_driver);
if (result == 0)
printk(KERN_INFO KBUILD_MODNAME ": " DRIVER_VERSION ":"
DRIVER_DESC "\n");
return result;
}
static void __exit usb_acecad_exit(void)
{
usb_deregister(&usb_acecad_driver);
}
module_init(usb_acecad_init);
module_exit(usb_acecad_exit);

View File

@@ -1919,21 +1919,7 @@ static struct usb_driver aiptek_driver = {
.id_table = aiptek_ids, .id_table = aiptek_ids,
}; };
static int __init aiptek_init(void) module_usb_driver(aiptek_driver);
{
int result = usb_register(&aiptek_driver);
if (result == 0) {
printk(KERN_INFO KBUILD_MODNAME ": " DRIVER_VERSION ":"
DRIVER_DESC "\n");
printk(KERN_INFO KBUILD_MODNAME ": " DRIVER_AUTHOR "\n");
}
return result;
}
static void __exit aiptek_exit(void)
{
usb_deregister(&aiptek_driver);
}
MODULE_AUTHOR(DRIVER_AUTHOR); MODULE_AUTHOR(DRIVER_AUTHOR);
MODULE_DESCRIPTION(DRIVER_DESC); MODULE_DESCRIPTION(DRIVER_DESC);
@@ -1943,6 +1929,3 @@ module_param(programmableDelay, int, 0);
MODULE_PARM_DESC(programmableDelay, "delay used during tablet programming"); MODULE_PARM_DESC(programmableDelay, "delay used during tablet programming");
module_param(jitterDelay, int, 0); module_param(jitterDelay, int, 0);
MODULE_PARM_DESC(jitterDelay, "stylus/mouse settlement delay"); MODULE_PARM_DESC(jitterDelay, "stylus/mouse settlement delay");
module_init(aiptek_init);
module_exit(aiptek_exit);

View File

@@ -1022,33 +1022,7 @@ static struct usb_driver gtco_driverinfo_table = {
.disconnect = gtco_disconnect, .disconnect = gtco_disconnect,
}; };
/* module_usb_driver(gtco_driverinfo_table);
* Register this module with the USB subsystem
*/
static int __init gtco_init(void)
{
int error;
error = usb_register(&gtco_driverinfo_table);
if (error) {
err("usb_register() failed rc=0x%x", error);
return error;
}
printk("GTCO usb driver version: %s", GTCO_VERSION);
return 0;
}
/*
* Deregister this module with the USB subsystem
*/
static void __exit gtco_exit(void)
{
usb_deregister(&gtco_driverinfo_table);
}
module_init(gtco_init);
module_exit(gtco_exit);
MODULE_DESCRIPTION("GTCO digitizer USB driver"); MODULE_DESCRIPTION("GTCO digitizer USB driver");
MODULE_LICENSE("GPL"); MODULE_LICENSE("GPL");

View File

@@ -432,15 +432,4 @@ static struct usb_driver hanwang_driver = {
.id_table = hanwang_ids, .id_table = hanwang_ids,
}; };
static int __init hanwang_init(void) module_usb_driver(hanwang_driver);
{
return usb_register(&hanwang_driver);
}
static void __exit hanwang_exit(void)
{
usb_deregister(&hanwang_driver);
}
module_init(hanwang_init);
module_exit(hanwang_exit);

View File

@@ -198,22 +198,4 @@ static struct usb_driver kbtab_driver = {
.id_table = kbtab_ids, .id_table = kbtab_ids,
}; };
static int __init kbtab_init(void) module_usb_driver(kbtab_driver);
{
int retval;
retval = usb_register(&kbtab_driver);
if (retval)
goto out;
printk(KERN_INFO KBUILD_MODNAME ": " DRIVER_VERSION ":"
DRIVER_DESC "\n");
out:
return retval;
}
static void __exit kbtab_exit(void)
{
usb_deregister(&kbtab_driver);
}
module_init(kbtab_init);
module_exit(kbtab_exit);

View File

@@ -919,21 +919,4 @@ static struct usb_driver wacom_driver = {
.supports_autosuspend = 1, .supports_autosuspend = 1,
}; };
static int __init wacom_init(void) module_usb_driver(wacom_driver);
{
int result;
result = usb_register(&wacom_driver);
if (result == 0)
printk(KERN_INFO KBUILD_MODNAME ": " DRIVER_VERSION ":"
DRIVER_DESC "\n");
return result;
}
static void __exit wacom_exit(void)
{
usb_deregister(&wacom_driver);
}
module_init(wacom_init);
module_exit(wacom_exit);

View File

@@ -1580,18 +1580,7 @@ static struct usb_driver usbtouch_driver = {
.supports_autosuspend = 1, .supports_autosuspend = 1,
}; };
static int __init usbtouch_init(void) module_usb_driver(usbtouch_driver);
{
return usb_register(&usbtouch_driver);
}
static void __exit usbtouch_cleanup(void)
{
usb_deregister(&usbtouch_driver);
}
module_init(usbtouch_init);
module_exit(usbtouch_cleanup);
MODULE_AUTHOR(DRIVER_AUTHOR); MODULE_AUTHOR(DRIVER_AUTHOR);
MODULE_DESCRIPTION(DRIVER_DESC); MODULE_DESCRIPTION(DRIVER_DESC);

View File

@@ -2154,30 +2154,4 @@ static struct usb_driver hfcsusb_drv = {
.disconnect = hfcsusb_disconnect, .disconnect = hfcsusb_disconnect,
}; };
static int __init module_usb_driver(hfcsusb_drv);
hfcsusb_init(void)
{
printk(KERN_INFO DRIVER_NAME " driver Rev. %s debug(0x%x) poll(%i)\n",
hfcsusb_rev, debug, poll);
if (usb_register(&hfcsusb_drv)) {
printk(KERN_INFO DRIVER_NAME
": Unable to register hfcsusb module at usb stack\n");
return -ENODEV;
}
return 0;
}
static void __exit
hfcsusb_cleanup(void)
{
if (debug & DBG_HFC_CALL_TRACE)
printk(KERN_INFO DRIVER_NAME ": %s\n", __func__);
/* unregister Hardware */
usb_deregister(&hfcsusb_drv); /* release our driver */
}
module_init(hfcsusb_init);
module_exit(hfcsusb_cleanup);

View File

@@ -583,25 +583,7 @@ static struct usb_driver flexcop_usb_driver = {
.id_table = flexcop_usb_table, .id_table = flexcop_usb_table,
}; };
/* module stuff */ module_usb_driver(flexcop_usb_driver);
static int __init flexcop_usb_module_init(void)
{
int result;
if ((result = usb_register(&flexcop_usb_driver))) {
err("usb_register failed. (%d)", result);
return result;
}
return 0;
}
static void __exit flexcop_usb_module_exit(void)
{
/* deregister this driver from the USB subsystem */
usb_deregister(&flexcop_usb_driver);
}
module_init(flexcop_usb_module_init);
module_exit(flexcop_usb_module_exit);
MODULE_AUTHOR(DRIVER_AUTHOR); MODULE_AUTHOR(DRIVER_AUTHOR);
MODULE_DESCRIPTION(DRIVER_NAME); MODULE_DESCRIPTION(DRIVER_NAME);

View File

@@ -183,26 +183,7 @@ static struct usb_driver a800_driver = {
.id_table = a800_table, .id_table = a800_table,
}; };
/* module stuff */ module_usb_driver(a800_driver);
static int __init a800_module_init(void)
{
int result;
if ((result = usb_register(&a800_driver))) {
err("usb_register failed. Error number %d",result);
return result;
}
return 0;
}
static void __exit a800_module_exit(void)
{
/* deregister this driver from the USB subsystem */
usb_deregister(&a800_driver);
}
module_init (a800_module_init);
module_exit (a800_module_exit);
MODULE_AUTHOR("Patrick Boettcher <patrick.boettcher@desy.de>"); MODULE_AUTHOR("Patrick Boettcher <patrick.boettcher@desy.de>");
MODULE_DESCRIPTION("AVerMedia AverTV DVB-T USB 2.0 (A800)"); MODULE_DESCRIPTION("AVerMedia AverTV DVB-T USB 2.0 (A800)");

View File

@@ -1713,25 +1713,7 @@ static struct usb_driver af9015_usb_driver = {
.id_table = af9015_usb_table, .id_table = af9015_usb_table,
}; };
/* module stuff */ module_usb_driver(af9015_usb_driver);
static int __init af9015_usb_module_init(void)
{
int ret;
ret = usb_register(&af9015_usb_driver);
if (ret)
err("module init failed:%d", ret);
return ret;
}
static void __exit af9015_usb_module_exit(void)
{
/* deregister this driver from the USB subsystem */
usb_deregister(&af9015_usb_driver);
}
module_init(af9015_usb_module_init);
module_exit(af9015_usb_module_exit);
MODULE_AUTHOR("Antti Palosaari <crope@iki.fi>"); MODULE_AUTHOR("Antti Palosaari <crope@iki.fi>");
MODULE_DESCRIPTION("Driver for Afatech AF9015 DVB-T"); MODULE_DESCRIPTION("Driver for Afatech AF9015 DVB-T");

View File

@@ -1091,26 +1091,7 @@ static struct usb_driver anysee_driver = {
.id_table = anysee_table, .id_table = anysee_table,
}; };
/* module stuff */ module_usb_driver(anysee_driver);
static int __init anysee_module_init(void)
{
int ret;
ret = usb_register(&anysee_driver);
if (ret)
err("%s: usb_register failed. Error number %d", __func__, ret);
return ret;
}
static void __exit anysee_module_exit(void)
{
/* deregister this driver from the USB subsystem */
usb_deregister(&anysee_driver);
}
module_init(anysee_module_init);
module_exit(anysee_module_exit);
MODULE_AUTHOR("Antti Palosaari <crope@iki.fi>"); MODULE_AUTHOR("Antti Palosaari <crope@iki.fi>");
MODULE_DESCRIPTION("Driver Anysee E30 DVB-C & DVB-T USB2.0"); MODULE_DESCRIPTION("Driver Anysee E30 DVB-C & DVB-T USB2.0");

View File

@@ -244,26 +244,7 @@ static struct usb_driver au6610_driver = {
.id_table = au6610_table, .id_table = au6610_table,
}; };
/* module stuff */ module_usb_driver(au6610_driver);
static int __init au6610_module_init(void)
{
int ret;
ret = usb_register(&au6610_driver);
if (ret)
err("usb_register failed. Error number %d", ret);
return ret;
}
static void __exit au6610_module_exit(void)
{
/* deregister this driver from the USB subsystem */
usb_deregister(&au6610_driver);
}
module_init(au6610_module_init);
module_exit(au6610_module_exit);
MODULE_AUTHOR("Antti Palosaari <crope@iki.fi>"); MODULE_AUTHOR("Antti Palosaari <crope@iki.fi>");
MODULE_DESCRIPTION("Driver for Alcor Micro AU6610 DVB-T USB2.0"); MODULE_DESCRIPTION("Driver for Alcor Micro AU6610 DVB-T USB2.0");

View File

@@ -1174,28 +1174,7 @@ static struct usb_driver az6027_usb_driver = {
.id_table = az6027_usb_table, .id_table = az6027_usb_table,
}; };
/* module stuff */ module_usb_driver(az6027_usb_driver);
static int __init az6027_usb_module_init(void)
{
int result;
result = usb_register(&az6027_usb_driver);
if (result) {
err("usb_register failed. (%d)", result);
return result;
}
return 0;
}
static void __exit az6027_usb_module_exit(void)
{
/* deregister this driver from the USB subsystem */
usb_deregister(&az6027_usb_driver);
}
module_init(az6027_usb_module_init);
module_exit(az6027_usb_module_exit);
MODULE_AUTHOR("Adams Xu <Adams.xu@azwave.com.cn>"); MODULE_AUTHOR("Adams Xu <Adams.xu@azwave.com.cn>");
MODULE_DESCRIPTION("Driver for AZUREWAVE DVB-S/S2 USB2.0 (AZ6027)"); MODULE_DESCRIPTION("Driver for AZUREWAVE DVB-S/S2 USB2.0 (AZ6027)");

View File

@@ -317,27 +317,7 @@ static struct usb_driver ce6230_driver = {
.id_table = ce6230_table, .id_table = ce6230_table,
}; };
/* module stuff */ module_usb_driver(ce6230_driver);
static int __init ce6230_module_init(void)
{
int ret;
deb_info("%s:\n", __func__);
ret = usb_register(&ce6230_driver);
if (ret)
err("usb_register failed with error:%d", ret);
return ret;
}
static void __exit ce6230_module_exit(void)
{
deb_info("%s:\n", __func__);
/* deregister this driver from the USB subsystem */
usb_deregister(&ce6230_driver);
}
module_init(ce6230_module_init);
module_exit(ce6230_module_exit);
MODULE_AUTHOR("Antti Palosaari <crope@iki.fi>"); MODULE_AUTHOR("Antti Palosaari <crope@iki.fi>");
MODULE_DESCRIPTION("Driver for Intel CE6230 DVB-T USB2.0"); MODULE_DESCRIPTION("Driver for Intel CE6230 DVB-T USB2.0");

View File

@@ -247,25 +247,7 @@ static struct usb_driver cinergyt2_driver = {
.id_table = cinergyt2_usb_table .id_table = cinergyt2_usb_table
}; };
static int __init cinergyt2_usb_init(void) module_usb_driver(cinergyt2_driver);
{
int err;
err = usb_register(&cinergyt2_driver);
if (err) {
err("usb_register() failed! (err %i)\n", err);
return err;
}
return 0;
}
static void __exit cinergyt2_usb_exit(void)
{
usb_deregister(&cinergyt2_driver);
}
module_init(cinergyt2_usb_init);
module_exit(cinergyt2_usb_exit);
MODULE_DESCRIPTION("Terratec Cinergy T2 DVB-T driver"); MODULE_DESCRIPTION("Terratec Cinergy T2 DVB-T driver");
MODULE_LICENSE("GPL"); MODULE_LICENSE("GPL");

View File

@@ -2034,26 +2034,7 @@ static struct usb_driver cxusb_driver = {
.id_table = cxusb_table, .id_table = cxusb_table,
}; };
/* module stuff */ module_usb_driver(cxusb_driver);
static int __init cxusb_module_init(void)
{
int result;
if ((result = usb_register(&cxusb_driver))) {
err("usb_register failed. Error number %d",result);
return result;
}
return 0;
}
static void __exit cxusb_module_exit(void)
{
/* deregister this driver from the USB subsystem */
usb_deregister(&cxusb_driver);
}
module_init (cxusb_module_init);
module_exit (cxusb_module_exit);
MODULE_AUTHOR("Patrick Boettcher <patrick.boettcher@desy.de>"); MODULE_AUTHOR("Patrick Boettcher <patrick.boettcher@desy.de>");
MODULE_AUTHOR("Michael Krufky <mkrufky@linuxtv.org>"); MODULE_AUTHOR("Michael Krufky <mkrufky@linuxtv.org>");

View File

@@ -832,27 +832,7 @@ static struct usb_driver dib0700_driver = {
.id_table = dib0700_usb_id_table, .id_table = dib0700_usb_id_table,
}; };
/* module stuff */ module_usb_driver(dib0700_driver);
static int __init dib0700_module_init(void)
{
int result;
info("loaded with support for %d different device-types", dib0700_device_count);
if ((result = usb_register(&dib0700_driver))) {
err("usb_register failed. Error number %d",result);
return result;
}
return 0;
}
static void __exit dib0700_module_exit(void)
{
/* deregister this driver from the USB subsystem */
usb_deregister(&dib0700_driver);
}
module_init (dib0700_module_init);
module_exit (dib0700_module_exit);
MODULE_AUTHOR("Patrick Boettcher <pboettcher@dibcom.fr>"); MODULE_AUTHOR("Patrick Boettcher <pboettcher@dibcom.fr>");
MODULE_DESCRIPTION("Driver for devices based on DiBcom DiB0700 - USB bridge"); MODULE_DESCRIPTION("Driver for devices based on DiBcom DiB0700 - USB bridge");

View File

@@ -463,26 +463,7 @@ static struct usb_driver dibusb_driver = {
.id_table = dibusb_dib3000mb_table, .id_table = dibusb_dib3000mb_table,
}; };
/* module stuff */ module_usb_driver(dibusb_driver);
static int __init dibusb_module_init(void)
{
int result;
if ((result = usb_register(&dibusb_driver))) {
err("usb_register failed. Error number %d",result);
return result;
}
return 0;
}
static void __exit dibusb_module_exit(void)
{
/* deregister this driver from the USB subsystem */
usb_deregister(&dibusb_driver);
}
module_init (dibusb_module_init);
module_exit (dibusb_module_exit);
MODULE_AUTHOR("Patrick Boettcher <patrick.boettcher@desy.de>"); MODULE_AUTHOR("Patrick Boettcher <patrick.boettcher@desy.de>");
MODULE_DESCRIPTION("Driver for DiBcom USB DVB-T devices (DiB3000M-B based)"); MODULE_DESCRIPTION("Driver for DiBcom USB DVB-T devices (DiB3000M-B based)");

View File

@@ -141,26 +141,7 @@ static struct usb_driver dibusb_mc_driver = {
.id_table = dibusb_dib3000mc_table, .id_table = dibusb_dib3000mc_table,
}; };
/* module stuff */ module_usb_driver(dibusb_mc_driver);
static int __init dibusb_mc_module_init(void)
{
int result;
if ((result = usb_register(&dibusb_mc_driver))) {
err("usb_register failed. Error number %d",result);
return result;
}
return 0;
}
static void __exit dibusb_mc_module_exit(void)
{
/* deregister this driver from the USB subsystem */
usb_deregister(&dibusb_mc_driver);
}
module_init (dibusb_mc_module_init);
module_exit (dibusb_mc_module_exit);
MODULE_AUTHOR("Patrick Boettcher <patrick.boettcher@desy.de>"); MODULE_AUTHOR("Patrick Boettcher <patrick.boettcher@desy.de>");
MODULE_DESCRIPTION("Driver for DiBcom USB2.0 DVB-T (DiB3000M-C/P based) devices"); MODULE_DESCRIPTION("Driver for DiBcom USB2.0 DVB-T (DiB3000M-C/P based) devices");

View File

@@ -346,26 +346,7 @@ static struct usb_driver digitv_driver = {
.id_table = digitv_table, .id_table = digitv_table,
}; };
/* module stuff */ module_usb_driver(digitv_driver);
static int __init digitv_module_init(void)
{
int result;
if ((result = usb_register(&digitv_driver))) {
err("usb_register failed. Error number %d",result);
return result;
}
return 0;
}
static void __exit digitv_module_exit(void)
{
/* deregister this driver from the USB subsystem */
usb_deregister(&digitv_driver);
}
module_init (digitv_module_init);
module_exit (digitv_module_exit);
MODULE_AUTHOR("Patrick Boettcher <patrick.boettcher@desy.de>"); MODULE_AUTHOR("Patrick Boettcher <patrick.boettcher@desy.de>");
MODULE_DESCRIPTION("Driver for Nebula Electronics uDigiTV DVB-T USB2.0"); MODULE_DESCRIPTION("Driver for Nebula Electronics uDigiTV DVB-T USB2.0");

View File

@@ -360,26 +360,7 @@ static struct usb_driver dtt200u_usb_driver = {
.id_table = dtt200u_usb_table, .id_table = dtt200u_usb_table,
}; };
/* module stuff */ module_usb_driver(dtt200u_usb_driver);
static int __init dtt200u_usb_module_init(void)
{
int result;
if ((result = usb_register(&dtt200u_usb_driver))) {
err("usb_register failed. (%d)",result);
return result;
}
return 0;
}
static void __exit dtt200u_usb_module_exit(void)
{
/* deregister this driver from the USB subsystem */
usb_deregister(&dtt200u_usb_driver);
}
module_init(dtt200u_usb_module_init);
module_exit(dtt200u_usb_module_exit);
MODULE_AUTHOR("Patrick Boettcher <patrick.boettcher@desy.de>"); MODULE_AUTHOR("Patrick Boettcher <patrick.boettcher@desy.de>");
MODULE_DESCRIPTION("Driver for the WideView/Yakumo/Hama/Typhoon/Club3D/Miglia DVB-T USB2.0 devices"); MODULE_DESCRIPTION("Driver for the WideView/Yakumo/Hama/Typhoon/Club3D/Miglia DVB-T USB2.0 devices");

View File

@@ -217,26 +217,7 @@ static struct usb_driver dtv5100_driver = {
.id_table = dtv5100_table, .id_table = dtv5100_table,
}; };
/* module stuff */ module_usb_driver(dtv5100_driver);
static int __init dtv5100_module_init(void)
{
int ret;
ret = usb_register(&dtv5100_driver);
if (ret)
err("usb_register failed. Error number %d", ret);
return ret;
}
static void __exit dtv5100_module_exit(void)
{
/* deregister this driver from the USB subsystem */
usb_deregister(&dtv5100_driver);
}
module_init(dtv5100_module_init);
module_exit(dtv5100_module_exit);
MODULE_AUTHOR(DRIVER_AUTHOR); MODULE_AUTHOR(DRIVER_AUTHOR);
MODULE_DESCRIPTION(DRIVER_DESC); MODULE_DESCRIPTION(DRIVER_DESC);

View File

@@ -1928,22 +1928,7 @@ static struct usb_driver dw2102_driver = {
.id_table = dw2102_table, .id_table = dw2102_table,
}; };
static int __init dw2102_module_init(void) module_usb_driver(dw2102_driver);
{
int ret = usb_register(&dw2102_driver);
if (ret)
err("usb_register failed. Error number %d", ret);
return ret;
}
static void __exit dw2102_module_exit(void)
{
usb_deregister(&dw2102_driver);
}
module_init(dw2102_module_init);
module_exit(dw2102_module_exit);
MODULE_AUTHOR("Igor M. Liplianin (c) liplianin@me.by"); MODULE_AUTHOR("Igor M. Liplianin (c) liplianin@me.by");
MODULE_DESCRIPTION("Driver for DVBWorld DVB-S 2101, 2102, DVB-S2 2104," MODULE_DESCRIPTION("Driver for DVBWorld DVB-S 2101, 2102, DVB-S2 2104,"

View File

@@ -428,27 +428,7 @@ static struct usb_driver ec168_driver = {
.id_table = ec168_id, .id_table = ec168_id,
}; };
/* module stuff */ module_usb_driver(ec168_driver);
static int __init ec168_module_init(void)
{
int ret;
deb_info("%s:\n", __func__);
ret = usb_register(&ec168_driver);
if (ret)
err("module init failed:%d", ret);
return ret;
}
static void __exit ec168_module_exit(void)
{
deb_info("%s:\n", __func__);
/* deregister this driver from the USB subsystem */
usb_deregister(&ec168_driver);
}
module_init(ec168_module_init);
module_exit(ec168_module_exit);
MODULE_AUTHOR("Antti Palosaari <crope@iki.fi>"); MODULE_AUTHOR("Antti Palosaari <crope@iki.fi>");
MODULE_DESCRIPTION("E3C EC168 DVB-T USB2.0 driver"); MODULE_DESCRIPTION("E3C EC168 DVB-T USB2.0 driver");

View File

@@ -514,28 +514,7 @@ static struct usb_driver friio_driver = {
.id_table = friio_table, .id_table = friio_table,
}; };
module_usb_driver(friio_driver);
/* module stuff */
static int __init friio_module_init(void)
{
int ret;
ret = usb_register(&friio_driver);
if (ret)
err("usb_register failed. Error number %d", ret);
return ret;
}
static void __exit friio_module_exit(void)
{
/* deregister this driver from the USB subsystem */
usb_deregister(&friio_driver);
}
module_init(friio_module_init);
module_exit(friio_module_exit);
MODULE_AUTHOR("Akihiro Tsukada <tskd2@yahoo.co.jp>"); MODULE_AUTHOR("Akihiro Tsukada <tskd2@yahoo.co.jp>");
MODULE_DESCRIPTION("Driver for Friio ISDB-T USB2.0 Receiver"); MODULE_DESCRIPTION("Driver for Friio ISDB-T USB2.0 Receiver");

View File

@@ -209,26 +209,7 @@ static struct usb_driver gl861_driver = {
.id_table = gl861_table, .id_table = gl861_table,
}; };
/* module stuff */ module_usb_driver(gl861_driver);
static int __init gl861_module_init(void)
{
int ret;
ret = usb_register(&gl861_driver);
if (ret)
err("usb_register failed. Error number %d", ret);
return ret;
}
static void __exit gl861_module_exit(void)
{
/* deregister this driver from the USB subsystem */
usb_deregister(&gl861_driver);
}
module_init(gl861_module_init);
module_exit(gl861_module_exit);
MODULE_AUTHOR("Carl Lundqvist <comabug@gmail.com>"); MODULE_AUTHOR("Carl Lundqvist <comabug@gmail.com>");
MODULE_DESCRIPTION("Driver MSI Mega Sky 580 DVB-T USB2.0 / GL861"); MODULE_DESCRIPTION("Driver MSI Mega Sky 580 DVB-T USB2.0 / GL861");

View File

@@ -320,26 +320,7 @@ static struct usb_driver gp8psk_usb_driver = {
.id_table = gp8psk_usb_table, .id_table = gp8psk_usb_table,
}; };
/* module stuff */ module_usb_driver(gp8psk_usb_driver);
static int __init gp8psk_usb_module_init(void)
{
int result;
if ((result = usb_register(&gp8psk_usb_driver))) {
err("usb_register failed. (%d)",result);
return result;
}
return 0;
}
static void __exit gp8psk_usb_module_exit(void)
{
/* deregister this driver from the USB subsystem */
usb_deregister(&gp8psk_usb_driver);
}
module_init(gp8psk_usb_module_init);
module_exit(gp8psk_usb_module_exit);
MODULE_AUTHOR("Alan Nisota <alannisota@gamil.com>"); MODULE_AUTHOR("Alan Nisota <alannisota@gamil.com>");
MODULE_DESCRIPTION("Driver for Genpix DVB-S"); MODULE_DESCRIPTION("Driver for Genpix DVB-S");

View File

@@ -675,26 +675,7 @@ static struct usb_driver it913x_driver = {
.id_table = it913x_table, .id_table = it913x_table,
}; };
/* module stuff */ module_usb_driver(it913x_driver);
static int __init it913x_module_init(void)
{
int result = usb_register(&it913x_driver);
if (result) {
err("usb_register failed. Error number %d", result);
return result;
}
return 0;
}
static void __exit it913x_module_exit(void)
{
/* deregister this driver from the USB subsystem */
usb_deregister(&it913x_driver);
}
module_init(it913x_module_init);
module_exit(it913x_module_exit);
MODULE_AUTHOR("Malcolm Priestley <tvboxspy@gmail.com>"); MODULE_AUTHOR("Malcolm Priestley <tvboxspy@gmail.com>");
MODULE_DESCRIPTION("it913x USB 2 Driver"); MODULE_DESCRIPTION("it913x USB 2 Driver");

View File

@@ -1289,26 +1289,7 @@ static struct usb_driver lme2510_driver = {
.id_table = lme2510_table, .id_table = lme2510_table,
}; };
/* module stuff */ module_usb_driver(lme2510_driver);
static int __init lme2510_module_init(void)
{
int result = usb_register(&lme2510_driver);
if (result) {
err("usb_register failed. Error number %d", result);
return result;
}
return 0;
}
static void __exit lme2510_module_exit(void)
{
/* deregister this driver from the USB subsystem */
usb_deregister(&lme2510_driver);
}
module_init(lme2510_module_init);
module_exit(lme2510_module_exit);
MODULE_AUTHOR("Malcolm Priestley <tvboxspy@gmail.com>"); MODULE_AUTHOR("Malcolm Priestley <tvboxspy@gmail.com>");
MODULE_DESCRIPTION("LME2510(C) DVB-S USB2.0"); MODULE_DESCRIPTION("LME2510(C) DVB-S USB2.0");

View File

@@ -1086,27 +1086,7 @@ static struct usb_driver m920x_driver = {
.id_table = m920x_table, .id_table = m920x_table,
}; };
/* module stuff */ module_usb_driver(m920x_driver);
static int __init m920x_module_init(void)
{
int ret;
if ((ret = usb_register(&m920x_driver))) {
err("usb_register failed. Error number %d", ret);
return ret;
}
return 0;
}
static void __exit m920x_module_exit(void)
{
/* deregister this driver from the USB subsystem */
usb_deregister(&m920x_driver);
}
module_init (m920x_module_init);
module_exit (m920x_module_exit);
MODULE_AUTHOR("Aapo Tahkola <aet@rasterburn.org>"); MODULE_AUTHOR("Aapo Tahkola <aet@rasterburn.org>");
MODULE_DESCRIPTION("DVB Driver for ULI M920x"); MODULE_DESCRIPTION("DVB Driver for ULI M920x");

View File

@@ -1055,24 +1055,7 @@ static struct usb_driver mxl111sf_driver = {
.id_table = mxl111sf_table, .id_table = mxl111sf_table,
}; };
static int __init mxl111sf_module_init(void) module_usb_driver(mxl111sf_driver);
{
int result = usb_register(&mxl111sf_driver);
if (result) {
err("usb_register failed. Error number %d", result);
return result;
}
return 0;
}
static void __exit mxl111sf_module_exit(void)
{
usb_deregister(&mxl111sf_driver);
}
module_init(mxl111sf_module_init);
module_exit(mxl111sf_module_exit);
MODULE_AUTHOR("Michael Krufky <mkrufky@kernellabs.com>"); MODULE_AUTHOR("Michael Krufky <mkrufky@kernellabs.com>");
MODULE_DESCRIPTION("Driver for MaxLinear MxL111SF"); MODULE_DESCRIPTION("Driver for MaxLinear MxL111SF");

View File

@@ -225,26 +225,7 @@ static struct usb_driver nova_t_driver = {
.id_table = nova_t_table, .id_table = nova_t_table,
}; };
/* module stuff */ module_usb_driver(nova_t_driver);
static int __init nova_t_module_init(void)
{
int result;
if ((result = usb_register(&nova_t_driver))) {
err("usb_register failed. Error number %d",result);
return result;
}
return 0;
}
static void __exit nova_t_module_exit(void)
{
/* deregister this driver from the USB subsystem */
usb_deregister(&nova_t_driver);
}
module_init (nova_t_module_init);
module_exit (nova_t_module_exit);
MODULE_AUTHOR("Patrick Boettcher <patrick.boettcher@desy.de>"); MODULE_AUTHOR("Patrick Boettcher <patrick.boettcher@desy.de>");
MODULE_DESCRIPTION("Hauppauge WinTV-NOVA-T usb2"); MODULE_DESCRIPTION("Hauppauge WinTV-NOVA-T usb2");

View File

@@ -574,22 +574,7 @@ static struct usb_driver opera1_driver = {
.id_table = opera1_table, .id_table = opera1_table,
}; };
static int __init opera1_module_init(void) module_usb_driver(opera1_driver);
{
int result = 0;
if ((result = usb_register(&opera1_driver))) {
err("usb_register failed. Error number %d", result);
}
return result;
}
static void __exit opera1_module_exit(void)
{
usb_deregister(&opera1_driver);
}
module_init(opera1_module_init);
module_exit(opera1_module_exit);
MODULE_AUTHOR("Mario Hlawitschka (c) dh1pa@amsat.org"); MODULE_AUTHOR("Mario Hlawitschka (c) dh1pa@amsat.org");
MODULE_AUTHOR("Marco Gittler (c) g.marco@freenet.de"); MODULE_AUTHOR("Marco Gittler (c) g.marco@freenet.de");

View File

@@ -1055,22 +1055,7 @@ static struct usb_driver pctv452e_usb_driver = {
.id_table = pctv452e_usb_table, .id_table = pctv452e_usb_table,
}; };
static int __init pctv452e_usb_init(void) module_usb_driver(pctv452e_usb_driver);
{
int ret = usb_register(&pctv452e_usb_driver);
if (ret)
err("%s: usb_register failed! Error %d", __FILE__, ret);
return ret;
}
static void __exit pctv452e_usb_exit(void)
{
usb_deregister(&pctv452e_usb_driver);
}
module_init(pctv452e_usb_init);
module_exit(pctv452e_usb_exit);
MODULE_AUTHOR("Dominik Kuhlen <dkuhlen@gmx.net>"); MODULE_AUTHOR("Dominik Kuhlen <dkuhlen@gmx.net>");
MODULE_AUTHOR("Andre Weidemann <Andre.Weidemann@web.de>"); MODULE_AUTHOR("Andre Weidemann <Andre.Weidemann@web.de>");

View File

@@ -781,25 +781,7 @@ static struct usb_driver technisat_usb2_driver = {
.id_table = technisat_usb2_id_table, .id_table = technisat_usb2_id_table,
}; };
/* module stuff */ module_usb_driver(technisat_usb2_driver);
static int __init technisat_usb2_module_init(void)
{
int result = usb_register(&technisat_usb2_driver);
if (result) {
err("usb_register failed. Code %d", result);
return result;
}
return 0;
}
static void __exit technisat_usb2_module_exit(void)
{
usb_deregister(&technisat_usb2_driver);
}
module_init(technisat_usb2_module_init);
module_exit(technisat_usb2_module_exit);
MODULE_AUTHOR("Patrick Boettcher <pboettcher@kernellabs.com>"); MODULE_AUTHOR("Patrick Boettcher <pboettcher@kernellabs.com>");
MODULE_DESCRIPTION("Driver for Technisat DVB-S/S2 USB 2.0 device"); MODULE_DESCRIPTION("Driver for Technisat DVB-S/S2 USB 2.0 device");

View File

@@ -799,26 +799,7 @@ static struct usb_driver ttusb2_driver = {
.id_table = ttusb2_table, .id_table = ttusb2_table,
}; };
/* module stuff */ module_usb_driver(ttusb2_driver);
static int __init ttusb2_module_init(void)
{
int result;
if ((result = usb_register(&ttusb2_driver))) {
err("usb_register failed. Error number %d",result);
return result;
}
return 0;
}
static void __exit ttusb2_module_exit(void)
{
/* deregister this driver from the USB subsystem */
usb_deregister(&ttusb2_driver);
}
module_init (ttusb2_module_init);
module_exit (ttusb2_module_exit);
MODULE_AUTHOR("Patrick Boettcher <patrick.boettcher@desy.de>"); MODULE_AUTHOR("Patrick Boettcher <patrick.boettcher@desy.de>");
MODULE_DESCRIPTION("Driver for Pinnacle PCTV 400e DVB-S USB2.0"); MODULE_DESCRIPTION("Driver for Pinnacle PCTV 400e DVB-S USB2.0");

View File

@@ -143,26 +143,7 @@ static struct usb_driver umt_driver = {
.id_table = umt_table, .id_table = umt_table,
}; };
/* module stuff */ module_usb_driver(umt_driver);
static int __init umt_module_init(void)
{
int result;
if ((result = usb_register(&umt_driver))) {
err("usb_register failed. Error number %d",result);
return result;
}
return 0;
}
static void __exit umt_module_exit(void)
{
/* deregister this driver from the USB subsystem */
usb_deregister(&umt_driver);
}
module_init (umt_module_init);
module_exit (umt_module_exit);
MODULE_AUTHOR("Patrick Boettcher <patrick.boettcher@desy.de>"); MODULE_AUTHOR("Patrick Boettcher <patrick.boettcher@desy.de>");
MODULE_DESCRIPTION("Driver for HanfTek UMT 010 USB2.0 DVB-T device"); MODULE_DESCRIPTION("Driver for HanfTek UMT 010 USB2.0 DVB-T device");

View File

@@ -436,26 +436,7 @@ static struct usb_driver vp702x_usb_driver = {
.id_table = vp702x_usb_table, .id_table = vp702x_usb_table,
}; };
/* module stuff */ module_usb_driver(vp702x_usb_driver);
static int __init vp702x_usb_module_init(void)
{
int result;
if ((result = usb_register(&vp702x_usb_driver))) {
err("usb_register failed. (%d)",result);
return result;
}
return 0;
}
static void __exit vp702x_usb_module_exit(void)
{
/* deregister this driver from the USB subsystem */
usb_deregister(&vp702x_usb_driver);
}
module_init(vp702x_usb_module_init);
module_exit(vp702x_usb_module_exit);
MODULE_AUTHOR("Patrick Boettcher <patrick.boettcher@desy.de>"); MODULE_AUTHOR("Patrick Boettcher <patrick.boettcher@desy.de>");
MODULE_DESCRIPTION("Driver for Twinhan StarBox DVB-S USB2.0 and clones"); MODULE_DESCRIPTION("Driver for Twinhan StarBox DVB-S USB2.0 and clones");

View File

@@ -294,26 +294,7 @@ static struct usb_driver vp7045_usb_driver = {
.id_table = vp7045_usb_table, .id_table = vp7045_usb_table,
}; };
/* module stuff */ module_usb_driver(vp7045_usb_driver);
static int __init vp7045_usb_module_init(void)
{
int result;
if ((result = usb_register(&vp7045_usb_driver))) {
err("usb_register failed. (%d)",result);
return result;
}
return 0;
}
static void __exit vp7045_usb_module_exit(void)
{
/* deregister this driver from the USB subsystem */
usb_deregister(&vp7045_usb_driver);
}
module_init(vp7045_usb_module_init);
module_exit(vp7045_usb_module_exit);
MODULE_AUTHOR("Patrick Boettcher <patrick.boettcher@desy.de>"); MODULE_AUTHOR("Patrick Boettcher <patrick.boettcher@desy.de>");
MODULE_DESCRIPTION("Driver for Twinhan MagicBox/Alpha and DNTV tinyUSB2 DVB-T USB2.0"); MODULE_DESCRIPTION("Driver for Twinhan MagicBox/Alpha and DNTV tinyUSB2 DVB-T USB2.0");

View File

@@ -557,26 +557,7 @@ static struct usb_driver smsusb_driver = {
.resume = smsusb_resume, .resume = smsusb_resume,
}; };
static int __init smsusb_module_init(void) module_usb_driver(smsusb_driver);
{
int rc = usb_register(&smsusb_driver);
if (rc)
sms_err("usb_register failed. Error number %d", rc);
sms_debug("");
return rc;
}
static void __exit smsusb_module_exit(void)
{
/* Regular USB Cleanup */
usb_deregister(&smsusb_driver);
sms_info("end");
}
module_init(smsusb_module_init);
module_exit(smsusb_module_exit);
MODULE_DESCRIPTION("Driver for the Siano SMS1xxx USB dongle"); MODULE_DESCRIPTION("Driver for the Siano SMS1xxx USB dongle");
MODULE_AUTHOR("Siano Mobile Silicon, INC. (uris@siano-ms.com)"); MODULE_AUTHOR("Siano Mobile Silicon, INC. (uris@siano-ms.com)");

View File

@@ -1794,26 +1794,7 @@ static struct usb_driver ttusb_driver = {
.id_table = ttusb_table, .id_table = ttusb_table,
}; };
static int __init ttusb_init(void) module_usb_driver(ttusb_driver);
{
int err;
if ((err = usb_register(&ttusb_driver)) < 0) {
printk("%s: usb_register failed! Error number %d",
__FILE__, err);
return err;
}
return 0;
}
static void __exit ttusb_exit(void)
{
usb_deregister(&ttusb_driver);
}
module_init(ttusb_init);
module_exit(ttusb_exit);
MODULE_AUTHOR("Holger Waechtler <holger@convergence.de>"); MODULE_AUTHOR("Holger Waechtler <holger@convergence.de>");
MODULE_DESCRIPTION("TTUSB DVB Driver"); MODULE_DESCRIPTION("TTUSB DVB Driver");

View File

@@ -1756,26 +1756,7 @@ static struct usb_driver ttusb_dec_driver = {
.id_table = ttusb_dec_table, .id_table = ttusb_dec_table,
}; };
static int __init ttusb_dec_init(void) module_usb_driver(ttusb_dec_driver);
{
int result;
if ((result = usb_register(&ttusb_dec_driver)) < 0) {
printk("%s: initialisation failed: error %d.\n", __func__,
result);
return result;
}
return 0;
}
static void __exit ttusb_dec_exit(void)
{
usb_deregister(&ttusb_dec_driver);
}
module_init(ttusb_dec_init);
module_exit(ttusb_dec_exit);
MODULE_AUTHOR("Alex Woods <linux-dvb@giblets.org>"); MODULE_AUTHOR("Alex Woods <linux-dvb@giblets.org>");
MODULE_DESCRIPTION(DRIVER_NAME); MODULE_DESCRIPTION(DRIVER_NAME);

View File

@@ -624,21 +624,7 @@ static int usb_dsbr100_probe(struct usb_interface *intf,
return 0; return 0;
} }
static int __init dsbr100_init(void) module_usb_driver(usb_dsbr100_driver);
{
int retval = usb_register(&usb_dsbr100_driver);
printk(KERN_INFO KBUILD_MODNAME ": " DRIVER_VERSION ":"
DRIVER_DESC "\n");
return retval;
}
static void __exit dsbr100_exit(void)
{
usb_deregister(&usb_dsbr100_driver);
}
module_init (dsbr100_init);
module_exit (dsbr100_exit);
MODULE_AUTHOR( DRIVER_AUTHOR ); MODULE_AUTHOR( DRIVER_AUTHOR );
MODULE_DESCRIPTION( DRIVER_DESC ); MODULE_DESCRIPTION( DRIVER_DESC );

View File

@@ -659,25 +659,4 @@ err:
return retval; return retval;
} }
static int __init amradio_init(void) module_usb_driver(usb_amradio_driver);
{
int retval = usb_register(&usb_amradio_driver);
pr_info(KBUILD_MODNAME
": version " DRIVER_VERSION " " DRIVER_DESC "\n");
if (retval)
pr_err(KBUILD_MODNAME
": usb_register failed. Error number %d\n", retval);
return retval;
}
static void __exit amradio_exit(void)
{
usb_deregister(&usb_amradio_driver);
}
module_init(amradio_init);
module_exit(amradio_exit);

View File

@@ -861,33 +861,7 @@ static struct usb_driver si470x_usb_driver = {
.supports_autosuspend = 1, .supports_autosuspend = 1,
}; };
module_usb_driver(si470x_usb_driver);
/**************************************************************************
* Module Interface
**************************************************************************/
/*
* si470x_module_init - module init
*/
static int __init si470x_module_init(void)
{
printk(KERN_INFO DRIVER_DESC ", Version " DRIVER_VERSION "\n");
return usb_register(&si470x_usb_driver);
}
/*
* si470x_module_exit - module exit
*/
static void __exit si470x_module_exit(void)
{
usb_deregister(&si470x_usb_driver);
}
module_init(si470x_module_init);
module_exit(si470x_module_exit);
MODULE_LICENSE("GPL"); MODULE_LICENSE("GPL");
MODULE_AUTHOR(DRIVER_AUTHOR); MODULE_AUTHOR(DRIVER_AUTHOR);

View File

@@ -908,38 +908,7 @@ static void ati_remote_disconnect(struct usb_interface *interface)
kfree(ati_remote); kfree(ati_remote);
} }
/* module_usb_driver(ati_remote_driver);
* ati_remote_init
*/
static int __init ati_remote_init(void)
{
int result;
result = usb_register(&ati_remote_driver);
if (result)
printk(KERN_ERR KBUILD_MODNAME
": usb_register error #%d\n", result);
else
printk(KERN_INFO KBUILD_MODNAME ": " DRIVER_VERSION ":"
DRIVER_DESC "\n");
return result;
}
/*
* ati_remote_exit
*/
static void __exit ati_remote_exit(void)
{
usb_deregister(&ati_remote_driver);
}
/*
* module specification
*/
module_init(ati_remote_init);
module_exit(ati_remote_exit);
MODULE_AUTHOR(DRIVER_AUTHOR); MODULE_AUTHOR(DRIVER_AUTHOR);
MODULE_DESCRIPTION(DRIVER_DESC); MODULE_DESCRIPTION(DRIVER_DESC);

View File

@@ -2458,23 +2458,4 @@ static int imon_resume(struct usb_interface *intf)
return rc; return rc;
} }
static int __init imon_init(void) module_usb_driver(imon_driver);
{
int rc;
rc = usb_register(&imon_driver);
if (rc) {
pr_err("usb register failed(%d)\n", rc);
rc = -ENODEV;
}
return rc;
}
static void __exit imon_exit(void)
{
usb_deregister(&imon_driver);
}
module_init(imon_init);
module_exit(imon_exit);

View File

@@ -1448,25 +1448,7 @@ static struct usb_driver mceusb_dev_driver = {
.id_table = mceusb_dev_table .id_table = mceusb_dev_table
}; };
static int __init mceusb_dev_init(void) module_usb_driver(mceusb_dev_driver);
{
int ret;
ret = usb_register(&mceusb_dev_driver);
if (ret < 0)
printk(KERN_ERR DRIVER_NAME
": usb register failed, result = %d\n", ret);
return ret;
}
static void __exit mceusb_dev_exit(void)
{
usb_deregister(&mceusb_dev_driver);
}
module_init(mceusb_dev_init);
module_exit(mceusb_dev_exit);
MODULE_DESCRIPTION(DRIVER_DESC); MODULE_DESCRIPTION(DRIVER_DESC);
MODULE_AUTHOR(DRIVER_AUTHOR); MODULE_AUTHOR(DRIVER_AUTHOR);

View File

@@ -1300,25 +1300,7 @@ static struct usb_driver redrat3_dev_driver = {
.id_table = redrat3_dev_table .id_table = redrat3_dev_table
}; };
static int __init redrat3_dev_init(void) module_usb_driver(redrat3_dev_driver);
{
int ret;
ret = usb_register(&redrat3_dev_driver);
if (ret < 0)
pr_err(DRIVER_NAME
": usb register failed, result = %d\n", ret);
return ret;
}
static void __exit redrat3_dev_exit(void)
{
usb_deregister(&redrat3_dev_driver);
}
module_init(redrat3_dev_init);
module_exit(redrat3_dev_exit);
MODULE_DESCRIPTION(DRIVER_DESC); MODULE_DESCRIPTION(DRIVER_DESC);
MODULE_AUTHOR(DRIVER_AUTHOR); MODULE_AUTHOR(DRIVER_AUTHOR);

View File

@@ -523,33 +523,7 @@ static int streamzap_resume(struct usb_interface *intf)
return 0; return 0;
} }
/** module_usb_driver(streamzap_driver);
* streamzap_init
*/
static int __init streamzap_init(void)
{
int ret;
/* register this driver with the USB subsystem */
ret = usb_register(&streamzap_driver);
if (ret < 0)
printk(KERN_ERR DRIVER_NAME ": usb register failed, "
"result = %d\n", ret);
return ret;
}
/**
* streamzap_exit
*/
static void __exit streamzap_exit(void)
{
usb_deregister(&streamzap_driver);
}
module_init(streamzap_init);
module_exit(streamzap_exit);
MODULE_AUTHOR("Jarod Wilson <jarod@wilsonet.com>"); MODULE_AUTHOR("Jarod Wilson <jarod@wilsonet.com>");
MODULE_DESCRIPTION(DRIVER_DESC); MODULE_DESCRIPTION(DRIVER_DESC);

View File

@@ -1385,26 +1385,4 @@ static struct usb_driver cx231xx_usb_driver = {
.id_table = cx231xx_id_table, .id_table = cx231xx_id_table,
}; };
static int __init cx231xx_module_init(void) module_usb_driver(cx231xx_usb_driver);
{
int result;
printk(KERN_INFO DRIVER_NAME " v4l2 driver loaded.\n");
/* register this driver with the USB subsystem */
result = usb_register(&cx231xx_usb_driver);
if (result)
cx231xx_err(DRIVER_NAME
" usb_register failed. Error number %d.\n", result);
return result;
}
static void __exit cx231xx_module_exit(void)
{
/* deregister this driver with the USB subsystem */
usb_deregister(&cx231xx_usb_driver);
}
module_init(cx231xx_module_init);
module_exit(cx231xx_module_exit);

View File

@@ -3325,26 +3325,4 @@ static struct usb_driver em28xx_usb_driver = {
.id_table = em28xx_id_table, .id_table = em28xx_id_table,
}; };
static int __init em28xx_module_init(void) module_usb_driver(em28xx_usb_driver);
{
int result;
/* register this driver with the USB subsystem */
result = usb_register(&em28xx_usb_driver);
if (result)
em28xx_err(DRIVER_NAME
" usb_register failed. Error number %d.\n", result);
printk(KERN_INFO DRIVER_NAME " driver loaded\n");
return result;
}
static void __exit em28xx_module_exit(void)
{
/* deregister this driver with the USB subsystem */
usb_deregister(&em28xx_usb_driver);
}
module_init(em28xx_module_init);
module_exit(em28xx_module_exit);

Some files were not shown because too many files have changed in this diff Show More