Merge git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/driver-core-2.6
* git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/driver-core-2.6: (60 commits) uio: make uio_info's name and version const UIO: Documentation for UIO ioport info handling UIO: Pass information about ioports to userspace (V2) UIO: uio_pdrv_genirq: allow custom irq_flags UIO: use pci_ioremap_bar() in drivers/uio arm: struct device - replace bus_id with dev_name(), dev_set_name() libata: struct device - replace bus_id with dev_name(), dev_set_name() avr: struct device - replace bus_id with dev_name(), dev_set_name() block: struct device - replace bus_id with dev_name(), dev_set_name() chris: struct device - replace bus_id with dev_name(), dev_set_name() dmi: struct device - replace bus_id with dev_name(), dev_set_name() gadget: struct device - replace bus_id with dev_name(), dev_set_name() gpio: struct device - replace bus_id with dev_name(), dev_set_name() gpu: struct device - replace bus_id with dev_name(), dev_set_name() hwmon: struct device - replace bus_id with dev_name(), dev_set_name() i2o: struct device - replace bus_id with dev_name(), dev_set_name() IA64: struct device - replace bus_id with dev_name(), dev_set_name() i7300_idle: struct device - replace bus_id with dev_name(), dev_set_name() infiniband: struct device - replace bus_id with dev_name(), dev_set_name() ISDN: struct device - replace bus_id with dev_name(), dev_set_name() ...
This commit is contained in:
Коммит
40d7ee5d16
|
@ -41,6 +41,12 @@ GPL version 2.
|
|||
</abstract>
|
||||
|
||||
<revhistory>
|
||||
<revision>
|
||||
<revnumber>0.6</revnumber>
|
||||
<date>2008-12-05</date>
|
||||
<authorinitials>hjk</authorinitials>
|
||||
<revremark>Added description of portio sysfs attributes.</revremark>
|
||||
</revision>
|
||||
<revision>
|
||||
<revnumber>0.5</revnumber>
|
||||
<date>2008-05-22</date>
|
||||
|
@ -318,6 +324,54 @@ interested in translating it, please email me
|
|||
offset = N * getpagesize();
|
||||
</programlisting>
|
||||
|
||||
<para>
|
||||
Sometimes there is hardware with memory-like regions that can not be
|
||||
mapped with the technique described here, but there are still ways to
|
||||
access them from userspace. The most common example are x86 ioports.
|
||||
On x86 systems, userspace can access these ioports using
|
||||
<function>ioperm()</function>, <function>iopl()</function>,
|
||||
<function>inb()</function>, <function>outb()</function>, and similar
|
||||
functions.
|
||||
</para>
|
||||
<para>
|
||||
Since these ioport regions can not be mapped, they will not appear under
|
||||
<filename>/sys/class/uio/uioX/maps/</filename> like the normal memory
|
||||
described above. Without information about the port regions a hardware
|
||||
has to offer, it becomes difficult for the userspace part of the
|
||||
driver to find out which ports belong to which UIO device.
|
||||
</para>
|
||||
<para>
|
||||
To address this situation, the new directory
|
||||
<filename>/sys/class/uio/uioX/portio/</filename> was added. It only
|
||||
exists if the driver wants to pass information about one or more port
|
||||
regions to userspace. If that is the case, subdirectories named
|
||||
<filename>port0</filename>, <filename>port1</filename>, and so on,
|
||||
will appear underneath
|
||||
<filename>/sys/class/uio/uioX/portio/</filename>.
|
||||
</para>
|
||||
<para>
|
||||
Each <filename>portX/</filename> directory contains three read-only
|
||||
files that show start, size, and type of the port region:
|
||||
</para>
|
||||
<itemizedlist>
|
||||
<listitem>
|
||||
<para>
|
||||
<filename>start</filename>: The first port of this region.
|
||||
</para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<para>
|
||||
<filename>size</filename>: The number of ports in this region.
|
||||
</para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<para>
|
||||
<filename>porttype</filename>: A string describing the type of port.
|
||||
</para>
|
||||
</listitem>
|
||||
</itemizedlist>
|
||||
|
||||
|
||||
</sect1>
|
||||
</chapter>
|
||||
|
||||
|
@ -339,12 +393,12 @@ offset = N * getpagesize();
|
|||
|
||||
<itemizedlist>
|
||||
<listitem><para>
|
||||
<varname>char *name</varname>: Required. The name of your driver as
|
||||
<varname>const char *name</varname>: Required. The name of your driver as
|
||||
it will appear in sysfs. I recommend using the name of your module for this.
|
||||
</para></listitem>
|
||||
|
||||
<listitem><para>
|
||||
<varname>char *version</varname>: Required. This string appears in
|
||||
<varname>const char *version</varname>: Required. This string appears in
|
||||
<filename>/sys/class/uio/uioX/version</filename>.
|
||||
</para></listitem>
|
||||
|
||||
|
@ -355,6 +409,13 @@ mapping you need to fill one of the <varname>uio_mem</varname> structures.
|
|||
See the description below for details.
|
||||
</para></listitem>
|
||||
|
||||
<listitem><para>
|
||||
<varname>struct uio_port port[ MAX_UIO_PORTS_REGIONS ]</varname>: Required
|
||||
if you want to pass information about ioports to userspace. For each port
|
||||
region you need to fill one of the <varname>uio_port</varname> structures.
|
||||
See the description below for details.
|
||||
</para></listitem>
|
||||
|
||||
<listitem><para>
|
||||
<varname>long irq</varname>: Required. If your hardware generates an
|
||||
interrupt, it's your modules task to determine the irq number during
|
||||
|
@ -448,6 +509,42 @@ Please do not touch the <varname>kobj</varname> element of
|
|||
<varname>struct uio_mem</varname>! It is used by the UIO framework
|
||||
to set up sysfs files for this mapping. Simply leave it alone.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
Sometimes, your device can have one or more port regions which can not be
|
||||
mapped to userspace. But if there are other possibilities for userspace to
|
||||
access these ports, it makes sense to make information about the ports
|
||||
available in sysfs. For each region, you have to set up a
|
||||
<varname>struct uio_port</varname> in the <varname>port[]</varname> array.
|
||||
Here's a description of the fields of <varname>struct uio_port</varname>:
|
||||
</para>
|
||||
|
||||
<itemizedlist>
|
||||
<listitem><para>
|
||||
<varname>char *porttype</varname>: Required. Set this to one of the predefined
|
||||
constants. Use <varname>UIO_PORT_X86</varname> for the ioports found in x86
|
||||
architectures.
|
||||
</para></listitem>
|
||||
|
||||
<listitem><para>
|
||||
<varname>unsigned long start</varname>: Required if the port region is used.
|
||||
Fill in the number of the first port of this region.
|
||||
</para></listitem>
|
||||
|
||||
<listitem><para>
|
||||
<varname>unsigned long size</varname>: Fill in the number of ports in this
|
||||
region. If <varname>size</varname> is zero, the region is considered unused.
|
||||
Note that you <emphasis>must</emphasis> initialize <varname>size</varname>
|
||||
with zero for all unused regions.
|
||||
</para></listitem>
|
||||
</itemizedlist>
|
||||
|
||||
<para>
|
||||
Please do not touch the <varname>portio</varname> element of
|
||||
<varname>struct uio_port</varname>! It is used internally by the UIO
|
||||
framework to set up sysfs files for this region. Simply leave it alone.
|
||||
</para>
|
||||
|
||||
</sect1>
|
||||
|
||||
<sect1 id="adding_irq_handler">
|
||||
|
|
|
@ -118,8 +118,8 @@ the name of the kobject, call kobject_rename():
|
|||
|
||||
int kobject_rename(struct kobject *kobj, const char *new_name);
|
||||
|
||||
Note kobject_rename does perform any locking or have a solid notion of
|
||||
what names are valid so the provide must provide their own sanity checking
|
||||
kobject_rename does not perform any locking or have a solid notion of
|
||||
what names are valid so the caller must provide their own sanity checking
|
||||
and serialization.
|
||||
|
||||
There is a function called kobject_set_name() but that is legacy cruft and
|
||||
|
|
|
@ -817,7 +817,7 @@ static struct expansion_card *__init ecard_alloc_card(int type, int slot)
|
|||
ec->dma = NO_DMA;
|
||||
ec->ops = &ecard_default_ops;
|
||||
|
||||
snprintf(ec->dev.bus_id, sizeof(ec->dev.bus_id), "ecard%d", slot);
|
||||
dev_set_name(&ec->dev, "ecard%d", slot);
|
||||
ec->dev.parent = NULL;
|
||||
ec->dev.bus = &ecard_bus_type;
|
||||
ec->dev.dma_mask = &ec->dma_mask;
|
||||
|
|
|
@ -212,7 +212,7 @@ static struct clcd_board clcd_plat_data = {
|
|||
|
||||
static struct amba_device clcd_device = {
|
||||
.dev = {
|
||||
.bus_id = "mb:16",
|
||||
.init_name = "mb:16",
|
||||
.coherent_dma_mask = ~0,
|
||||
.platform_data = &clcd_plat_data,
|
||||
},
|
||||
|
|
|
@ -409,7 +409,7 @@ static struct amba_pl010_data ep93xx_uart_data = {
|
|||
|
||||
static struct amba_device uart1_device = {
|
||||
.dev = {
|
||||
.bus_id = "apb:uart1",
|
||||
.init_name = "apb:uart1",
|
||||
.platform_data = &ep93xx_uart_data,
|
||||
},
|
||||
.res = {
|
||||
|
@ -423,7 +423,7 @@ static struct amba_device uart1_device = {
|
|||
|
||||
static struct amba_device uart2_device = {
|
||||
.dev = {
|
||||
.bus_id = "apb:uart2",
|
||||
.init_name = "apb:uart2",
|
||||
.platform_data = &ep93xx_uart_data,
|
||||
},
|
||||
.res = {
|
||||
|
@ -437,7 +437,7 @@ static struct amba_device uart2_device = {
|
|||
|
||||
static struct amba_device uart3_device = {
|
||||
.dev = {
|
||||
.bus_id = "apb:uart3",
|
||||
.init_name = "apb:uart3",
|
||||
.platform_data = &ep93xx_uart_data,
|
||||
},
|
||||
.res = {
|
||||
|
|
|
@ -37,7 +37,7 @@ static struct amba_pl010_data integrator_uart_data;
|
|||
|
||||
static struct amba_device rtc_device = {
|
||||
.dev = {
|
||||
.bus_id = "mb:15",
|
||||
.init_name = "mb:15",
|
||||
},
|
||||
.res = {
|
||||
.start = INTEGRATOR_RTC_BASE,
|
||||
|
@ -50,7 +50,7 @@ static struct amba_device rtc_device = {
|
|||
|
||||
static struct amba_device uart0_device = {
|
||||
.dev = {
|
||||
.bus_id = "mb:16",
|
||||
.init_name = "mb:16",
|
||||
.platform_data = &integrator_uart_data,
|
||||
},
|
||||
.res = {
|
||||
|
@ -64,7 +64,7 @@ static struct amba_device uart0_device = {
|
|||
|
||||
static struct amba_device uart1_device = {
|
||||
.dev = {
|
||||
.bus_id = "mb:17",
|
||||
.init_name = "mb:17",
|
||||
.platform_data = &integrator_uart_data,
|
||||
},
|
||||
.res = {
|
||||
|
@ -78,7 +78,7 @@ static struct amba_device uart1_device = {
|
|||
|
||||
static struct amba_device kmi0_device = {
|
||||
.dev = {
|
||||
.bus_id = "mb:18",
|
||||
.init_name = "mb:18",
|
||||
},
|
||||
.res = {
|
||||
.start = KMI0_BASE,
|
||||
|
@ -91,7 +91,7 @@ static struct amba_device kmi0_device = {
|
|||
|
||||
static struct amba_device kmi1_device = {
|
||||
.dev = {
|
||||
.bus_id = "mb:19",
|
||||
.init_name = "mb:19",
|
||||
},
|
||||
.res = {
|
||||
.start = KMI1_BASE,
|
||||
|
|
|
@ -407,7 +407,7 @@ static struct mmc_platform_data mmc_data = {
|
|||
|
||||
static struct amba_device mmc_device = {
|
||||
.dev = {
|
||||
.bus_id = "mb:1c",
|
||||
.init_name = "mb:1c",
|
||||
.platform_data = &mmc_data,
|
||||
},
|
||||
.res = {
|
||||
|
@ -421,7 +421,7 @@ static struct amba_device mmc_device = {
|
|||
|
||||
static struct amba_device aaci_device = {
|
||||
.dev = {
|
||||
.bus_id = "mb:1d",
|
||||
.init_name = "mb:1d",
|
||||
},
|
||||
.res = {
|
||||
.start = INTCP_PA_AACI_BASE,
|
||||
|
@ -532,7 +532,7 @@ static struct clcd_board clcd_data = {
|
|||
|
||||
static struct amba_device clcd_device = {
|
||||
.dev = {
|
||||
.bus_id = "mb:c0",
|
||||
.init_name = "mb:c0",
|
||||
.coherent_dma_mask = ~0,
|
||||
.platform_data = &clcd_data,
|
||||
},
|
||||
|
|
|
@ -207,7 +207,7 @@ static struct clcd_board clcd_platform_data = {
|
|||
static struct amba_device name##_device = { \
|
||||
.dev = { \
|
||||
.coherent_dma_mask = ~0, \
|
||||
.bus_id = busid, \
|
||||
.init_name = busid, \
|
||||
.platform_data = plat, \
|
||||
}, \
|
||||
.res = { \
|
||||
|
|
|
@ -91,7 +91,7 @@ void clk_put(struct clk *clk)
|
|||
|
||||
static struct amba_device fb_device = {
|
||||
.dev = {
|
||||
.bus_id = "fb",
|
||||
.init_name = "fb",
|
||||
.coherent_dma_mask = ~0,
|
||||
},
|
||||
.res = {
|
||||
|
|
|
@ -31,7 +31,7 @@
|
|||
static struct amba_device name##_device = { \
|
||||
.dev = { \
|
||||
.coherent_dma_mask = ~0, \
|
||||
.bus_id = busid, \
|
||||
.init_name = busid, \
|
||||
.platform_data = plat, \
|
||||
}, \
|
||||
.res = { \
|
||||
|
|
|
@ -34,7 +34,7 @@ extern unsigned int mmc_status(struct device *dev);
|
|||
static struct amba_device name##_device = { \
|
||||
.dev = { \
|
||||
.coherent_dma_mask = ~0, \
|
||||
.bus_id = busid, \
|
||||
.init_name = busid, \
|
||||
.platform_data = plat, \
|
||||
}, \
|
||||
.res = { \
|
||||
|
|
|
@ -59,7 +59,7 @@
|
|||
|
||||
#define virt_to_lbus(x) ((x) - PAGE_OFFSET + OMAP1510_LB_OFFSET)
|
||||
#define lbus_to_virt(x) ((x) - OMAP1510_LB_OFFSET + PAGE_OFFSET)
|
||||
#define is_lbus_device(dev) (cpu_is_omap15xx() && dev && (strncmp(dev->bus_id, "ohci", 4) == 0))
|
||||
#define is_lbus_device(dev) (cpu_is_omap15xx() && dev && (strncmp(dev_name(dev), "ohci", 4) == 0))
|
||||
|
||||
#define __arch_page_to_dma(dev, page) ({is_lbus_device(dev) ? \
|
||||
(dma_addr_t)virt_to_lbus(page_address(page)) : \
|
||||
|
|
|
@ -198,7 +198,7 @@ dump_clock(struct clk *parent, struct clkinf *r)
|
|||
unsigned i;
|
||||
|
||||
/* skip clocks coupled to devices that aren't registered */
|
||||
if (parent->dev && !parent->dev->bus_id[0] && !parent->users)
|
||||
if (parent->dev && !dev_name(parent->dev) && !parent->users)
|
||||
return;
|
||||
|
||||
/* <nest spaces> name <pad to end> */
|
||||
|
@ -214,7 +214,7 @@ dump_clock(struct clk *parent, struct clkinf *r)
|
|||
parent->users ? "on" : "off", /* NOTE: not-paranoid!! */
|
||||
clk_get_rate(parent));
|
||||
if (parent->dev)
|
||||
seq_printf(r->s, ", for %s", parent->dev->bus_id);
|
||||
seq_printf(r->s, ", for %s", dev_name(parent->dev));
|
||||
seq_printf(r->s, "\n");
|
||||
|
||||
/* cost of this scan is small, but not linear... */
|
||||
|
|
|
@ -24,12 +24,12 @@
|
|||
#error "Please contact <greg@kroah.com> for details on how to fix it properly."
|
||||
|
||||
static struct device iop_spu_device[2] = {
|
||||
{ .bus_id = "iop-spu0", },
|
||||
{ .bus_id = "iop-spu1", },
|
||||
{ .init_name = "iop-spu0", },
|
||||
{ .init_name = "iop-spu1", },
|
||||
};
|
||||
|
||||
static struct device iop_mpu_device = {
|
||||
.bus_id = "iop-mpu",
|
||||
.init_name = "iop-mpu",
|
||||
};
|
||||
|
||||
static int wait_mpu_idle(void)
|
||||
|
|
|
@ -39,7 +39,7 @@ int iommu_detected __read_mostly;
|
|||
be probably a smaller DMA mask, but this is bug-to-bug compatible
|
||||
to i386. */
|
||||
struct device fallback_dev = {
|
||||
.bus_id = "fallback device",
|
||||
.init_name = "fallback device",
|
||||
.coherent_dma_mask = DMA_32BIT_MASK,
|
||||
.dma_mask = &fallback_dev.coherent_dma_mask,
|
||||
};
|
||||
|
|
|
@ -206,8 +206,7 @@ cx_device_register(nasid_t nasid, int part_num, int mfg_num,
|
|||
cx_dev->dev.parent = NULL;
|
||||
cx_dev->dev.bus = &tiocx_bus_type;
|
||||
cx_dev->dev.release = tiocx_bus_release;
|
||||
snprintf(cx_dev->dev.bus_id, BUS_ID_SIZE, "%d",
|
||||
cx_dev->cx_id.nasid);
|
||||
dev_set_name(&cx_dev->dev, "%d", cx_dev->cx_id.nasid);
|
||||
device_register(&cx_dev->dev);
|
||||
get_device(&cx_dev->dev);
|
||||
|
||||
|
|
|
@ -1454,7 +1454,7 @@ static int __init vpe_module_init(void)
|
|||
device_initialize(&vpe_device);
|
||||
vpe_device.class = &vpe_class,
|
||||
vpe_device.parent = NULL,
|
||||
strlcpy(vpe_device.bus_id, "vpe1", BUS_ID_SIZE);
|
||||
dev_set_name(&vpe_device, "vpe1");
|
||||
vpe_device.devt = MKDEV(major, minor);
|
||||
err = device_add(&vpe_device);
|
||||
if (err) {
|
||||
|
|
|
@ -1,15 +0,0 @@
|
|||
/*
|
||||
* include/asm-s390/ccwdev.h
|
||||
*
|
||||
* Copyright (C) 2002,2005 IBM Deutschland Entwicklung GmbH, IBM Corporation
|
||||
* Author(s): Cornelia Huck <cornelia.huck@de.ibm.com>
|
||||
* Carsten Otte <cotte@de.ibm.com>
|
||||
*
|
||||
* Interface for s390 root device
|
||||
*/
|
||||
|
||||
#ifndef _S390_RDEV_H_
|
||||
#define _S390_RDEV_H_
|
||||
extern struct device *s390_root_dev_register(const char *);
|
||||
extern void s390_root_dev_unregister(struct device *);
|
||||
#endif /* _S390_RDEV_H_ */
|
|
@ -42,7 +42,7 @@ struct bsg_device {
|
|||
int done_cmds;
|
||||
wait_queue_head_t wq_done;
|
||||
wait_queue_head_t wq_free;
|
||||
char name[BUS_ID_SIZE];
|
||||
char name[20];
|
||||
int max_queue;
|
||||
unsigned long flags;
|
||||
};
|
||||
|
@ -781,7 +781,7 @@ static struct bsg_device *bsg_add_device(struct inode *inode,
|
|||
mutex_lock(&bsg_mutex);
|
||||
hlist_add_head(&bd->dev_list, bsg_dev_idx_hash(iminor(inode)));
|
||||
|
||||
strncpy(bd->name, rq->bsg_dev.class_dev->bus_id, sizeof(bd->name) - 1);
|
||||
strncpy(bd->name, dev_name(rq->bsg_dev.class_dev), sizeof(bd->name) - 1);
|
||||
dprintk("bound to <%s>, max queue %d\n",
|
||||
format_dev_t(buf, inode->i_rdev), bd->max_queue);
|
||||
|
||||
|
@ -992,7 +992,7 @@ int bsg_register_queue(struct request_queue *q, struct device *parent,
|
|||
if (name)
|
||||
devname = name;
|
||||
else
|
||||
devname = parent->bus_id;
|
||||
devname = dev_name(parent);
|
||||
|
||||
/*
|
||||
* we need a proper transport to send commands, not a stacked device
|
||||
|
|
|
@ -1084,7 +1084,7 @@ dev_t blk_lookup_devt(const char *name, int partno)
|
|||
struct gendisk *disk = dev_to_disk(dev);
|
||||
struct hd_struct *part;
|
||||
|
||||
if (strcmp(dev->bus_id, name))
|
||||
if (strcmp(dev_name(dev), name))
|
||||
continue;
|
||||
|
||||
part = disk_get_part(disk, partno);
|
||||
|
|
|
@ -3369,7 +3369,7 @@ static void ata_scsi_remove_dev(struct ata_device *dev)
|
|||
|
||||
if (sdev) {
|
||||
ata_dev_printk(dev, KERN_INFO, "detaching (SCSI %s)\n",
|
||||
sdev->sdev_gendev.bus_id);
|
||||
dev_name(&sdev->sdev_gendev));
|
||||
|
||||
scsi_remove_device(sdev);
|
||||
scsi_device_put(sdev);
|
||||
|
|
|
@ -167,7 +167,7 @@ attribute_container_add_device(struct device *dev,
|
|||
ic->classdev.parent = get_device(dev);
|
||||
ic->classdev.class = cont->class;
|
||||
cont->class->dev_release = attribute_container_release;
|
||||
strcpy(ic->classdev.bus_id, dev->bus_id);
|
||||
dev_set_name(&ic->classdev, dev_name(dev));
|
||||
if (fn)
|
||||
fn(cont, dev, &ic->classdev);
|
||||
else
|
||||
|
|
|
@ -63,6 +63,32 @@ struct class_private {
|
|||
#define to_class(obj) \
|
||||
container_of(obj, struct class_private, class_subsys.kobj)
|
||||
|
||||
/**
|
||||
* struct device_private - structure to hold the private to the driver core portions of the device structure.
|
||||
*
|
||||
* @klist_children - klist containing all children of this device
|
||||
* @knode_parent - node in sibling list
|
||||
* @knode_driver - node in driver list
|
||||
* @knode_bus - node in bus list
|
||||
* @device - pointer back to the struct class that this structure is
|
||||
* associated with.
|
||||
*
|
||||
* Nothing outside of the driver core should ever touch these fields.
|
||||
*/
|
||||
struct device_private {
|
||||
struct klist klist_children;
|
||||
struct klist_node knode_parent;
|
||||
struct klist_node knode_driver;
|
||||
struct klist_node knode_bus;
|
||||
struct device *device;
|
||||
};
|
||||
#define to_device_private_parent(obj) \
|
||||
container_of(obj, struct device_private, knode_parent)
|
||||
#define to_device_private_driver(obj) \
|
||||
container_of(obj, struct device_private, knode_driver)
|
||||
#define to_device_private_bus(obj) \
|
||||
container_of(obj, struct device_private, knode_bus)
|
||||
|
||||
/* initialisation functions */
|
||||
extern int devices_init(void);
|
||||
extern int buses_init(void);
|
||||
|
|
|
@ -253,7 +253,14 @@ static ssize_t store_drivers_probe(struct bus_type *bus,
|
|||
static struct device *next_device(struct klist_iter *i)
|
||||
{
|
||||
struct klist_node *n = klist_next(i);
|
||||
return n ? container_of(n, struct device, knode_bus) : NULL;
|
||||
struct device *dev = NULL;
|
||||
struct device_private *dev_prv;
|
||||
|
||||
if (n) {
|
||||
dev_prv = to_device_private_bus(n);
|
||||
dev = dev_prv->device;
|
||||
}
|
||||
return dev;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -286,7 +293,7 @@ int bus_for_each_dev(struct bus_type *bus, struct device *start,
|
|||
return -EINVAL;
|
||||
|
||||
klist_iter_init_node(&bus->p->klist_devices, &i,
|
||||
(start ? &start->knode_bus : NULL));
|
||||
(start ? &start->p->knode_bus : NULL));
|
||||
while ((dev = next_device(&i)) && !error)
|
||||
error = fn(dev, data);
|
||||
klist_iter_exit(&i);
|
||||
|
@ -320,7 +327,7 @@ struct device *bus_find_device(struct bus_type *bus,
|
|||
return NULL;
|
||||
|
||||
klist_iter_init_node(&bus->p->klist_devices, &i,
|
||||
(start ? &start->knode_bus : NULL));
|
||||
(start ? &start->p->knode_bus : NULL));
|
||||
while ((dev = next_device(&i)))
|
||||
if (match(dev, data) && get_device(dev))
|
||||
break;
|
||||
|
@ -333,7 +340,7 @@ static int match_name(struct device *dev, void *data)
|
|||
{
|
||||
const char *name = data;
|
||||
|
||||
return sysfs_streq(name, dev->bus_id);
|
||||
return sysfs_streq(name, dev_name(dev));
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -461,12 +468,12 @@ int bus_add_device(struct device *dev)
|
|||
int error = 0;
|
||||
|
||||
if (bus) {
|
||||
pr_debug("bus: '%s': add device %s\n", bus->name, dev->bus_id);
|
||||
pr_debug("bus: '%s': add device %s\n", bus->name, dev_name(dev));
|
||||
error = device_add_attrs(bus, dev);
|
||||
if (error)
|
||||
goto out_put;
|
||||
error = sysfs_create_link(&bus->p->devices_kset->kobj,
|
||||
&dev->kobj, dev->bus_id);
|
||||
&dev->kobj, dev_name(dev));
|
||||
if (error)
|
||||
goto out_id;
|
||||
error = sysfs_create_link(&dev->kobj,
|
||||
|
@ -482,7 +489,7 @@ int bus_add_device(struct device *dev)
|
|||
out_deprecated:
|
||||
sysfs_remove_link(&dev->kobj, "subsystem");
|
||||
out_subsys:
|
||||
sysfs_remove_link(&bus->p->devices_kset->kobj, dev->bus_id);
|
||||
sysfs_remove_link(&bus->p->devices_kset->kobj, dev_name(dev));
|
||||
out_id:
|
||||
device_remove_attrs(bus, dev);
|
||||
out_put:
|
||||
|
@ -507,7 +514,8 @@ void bus_attach_device(struct device *dev)
|
|||
ret = device_attach(dev);
|
||||
WARN_ON(ret < 0);
|
||||
if (ret >= 0)
|
||||
klist_add_tail(&dev->knode_bus, &bus->p->klist_devices);
|
||||
klist_add_tail(&dev->p->knode_bus,
|
||||
&bus->p->klist_devices);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -526,13 +534,13 @@ void bus_remove_device(struct device *dev)
|
|||
sysfs_remove_link(&dev->kobj, "subsystem");
|
||||
remove_deprecated_bus_links(dev);
|
||||
sysfs_remove_link(&dev->bus->p->devices_kset->kobj,
|
||||
dev->bus_id);
|
||||
dev_name(dev));
|
||||
device_remove_attrs(dev->bus, dev);
|
||||
if (klist_node_attached(&dev->knode_bus))
|
||||
klist_del(&dev->knode_bus);
|
||||
if (klist_node_attached(&dev->p->knode_bus))
|
||||
klist_del(&dev->p->knode_bus);
|
||||
|
||||
pr_debug("bus: '%s': remove device %s\n",
|
||||
dev->bus->name, dev->bus_id);
|
||||
dev->bus->name, dev_name(dev));
|
||||
device_release_driver(dev);
|
||||
bus_put(dev->bus);
|
||||
}
|
||||
|
@ -831,14 +839,16 @@ static void bus_remove_attrs(struct bus_type *bus)
|
|||
|
||||
static void klist_devices_get(struct klist_node *n)
|
||||
{
|
||||
struct device *dev = container_of(n, struct device, knode_bus);
|
||||
struct device_private *dev_prv = to_device_private_bus(n);
|
||||
struct device *dev = dev_prv->device;
|
||||
|
||||
get_device(dev);
|
||||
}
|
||||
|
||||
static void klist_devices_put(struct klist_node *n)
|
||||
{
|
||||
struct device *dev = container_of(n, struct device, knode_bus);
|
||||
struct device_private *dev_prv = to_device_private_bus(n);
|
||||
struct device *dev = dev_prv->device;
|
||||
|
||||
put_device(dev);
|
||||
}
|
||||
|
@ -993,18 +1003,20 @@ static void device_insertion_sort_klist(struct device *a, struct list_head *list
|
|||
{
|
||||
struct list_head *pos;
|
||||
struct klist_node *n;
|
||||
struct device_private *dev_prv;
|
||||
struct device *b;
|
||||
|
||||
list_for_each(pos, list) {
|
||||
n = container_of(pos, struct klist_node, n_node);
|
||||
b = container_of(n, struct device, knode_bus);
|
||||
dev_prv = to_device_private_bus(n);
|
||||
b = dev_prv->device;
|
||||
if (compare(a, b) <= 0) {
|
||||
list_move_tail(&a->knode_bus.n_node,
|
||||
&b->knode_bus.n_node);
|
||||
list_move_tail(&a->p->knode_bus.n_node,
|
||||
&b->p->knode_bus.n_node);
|
||||
return;
|
||||
}
|
||||
}
|
||||
list_move_tail(&a->knode_bus.n_node, list);
|
||||
list_move_tail(&a->p->knode_bus.n_node, list);
|
||||
}
|
||||
|
||||
void bus_sort_breadthfirst(struct bus_type *bus,
|
||||
|
@ -1014,6 +1026,7 @@ void bus_sort_breadthfirst(struct bus_type *bus,
|
|||
LIST_HEAD(sorted_devices);
|
||||
struct list_head *pos, *tmp;
|
||||
struct klist_node *n;
|
||||
struct device_private *dev_prv;
|
||||
struct device *dev;
|
||||
struct klist *device_klist;
|
||||
|
||||
|
@ -1022,7 +1035,8 @@ void bus_sort_breadthfirst(struct bus_type *bus,
|
|||
spin_lock(&device_klist->k_lock);
|
||||
list_for_each_safe(pos, tmp, &device_klist->k_list) {
|
||||
n = container_of(pos, struct klist_node, n_node);
|
||||
dev = container_of(n, struct device, knode_bus);
|
||||
dev_prv = to_device_private_bus(n);
|
||||
dev = dev_prv->device;
|
||||
device_insertion_sort_klist(dev, &sorted_devices, compare);
|
||||
}
|
||||
list_splice(&sorted_devices, &device_klist->k_list);
|
||||
|
|
|
@ -109,6 +109,7 @@ static struct sysfs_ops dev_sysfs_ops = {
|
|||
static void device_release(struct kobject *kobj)
|
||||
{
|
||||
struct device *dev = to_dev(kobj);
|
||||
struct device_private *p = dev->p;
|
||||
|
||||
if (dev->release)
|
||||
dev->release(dev);
|
||||
|
@ -119,7 +120,8 @@ static void device_release(struct kobject *kobj)
|
|||
else
|
||||
WARN(1, KERN_ERR "Device '%s' does not have a release() "
|
||||
"function, it is broken and must be fixed.\n",
|
||||
dev->bus_id);
|
||||
dev_name(dev));
|
||||
kfree(p);
|
||||
}
|
||||
|
||||
static struct kobj_type device_ktype = {
|
||||
|
@ -209,7 +211,7 @@ static int dev_uevent(struct kset *kset, struct kobject *kobj,
|
|||
retval = dev->bus->uevent(dev, env);
|
||||
if (retval)
|
||||
pr_debug("device: '%s': %s: bus uevent() returned %d\n",
|
||||
dev->bus_id, __func__, retval);
|
||||
dev_name(dev), __func__, retval);
|
||||
}
|
||||
|
||||
/* have the class specific function add its stuff */
|
||||
|
@ -217,7 +219,7 @@ static int dev_uevent(struct kset *kset, struct kobject *kobj,
|
|||
retval = dev->class->dev_uevent(dev, env);
|
||||
if (retval)
|
||||
pr_debug("device: '%s': %s: class uevent() "
|
||||
"returned %d\n", dev->bus_id,
|
||||
"returned %d\n", dev_name(dev),
|
||||
__func__, retval);
|
||||
}
|
||||
|
||||
|
@ -226,7 +228,7 @@ static int dev_uevent(struct kset *kset, struct kobject *kobj,
|
|||
retval = dev->type->uevent(dev, env);
|
||||
if (retval)
|
||||
pr_debug("device: '%s': %s: dev_type uevent() "
|
||||
"returned %d\n", dev->bus_id,
|
||||
"returned %d\n", dev_name(dev),
|
||||
__func__, retval);
|
||||
}
|
||||
|
||||
|
@ -507,14 +509,16 @@ EXPORT_SYMBOL_GPL(device_schedule_callback_owner);
|
|||
|
||||
static void klist_children_get(struct klist_node *n)
|
||||
{
|
||||
struct device *dev = container_of(n, struct device, knode_parent);
|
||||
struct device_private *p = to_device_private_parent(n);
|
||||
struct device *dev = p->device;
|
||||
|
||||
get_device(dev);
|
||||
}
|
||||
|
||||
static void klist_children_put(struct klist_node *n)
|
||||
{
|
||||
struct device *dev = container_of(n, struct device, knode_parent);
|
||||
struct device_private *p = to_device_private_parent(n);
|
||||
struct device *dev = p->device;
|
||||
|
||||
put_device(dev);
|
||||
}
|
||||
|
@ -536,9 +540,15 @@ static void klist_children_put(struct klist_node *n)
|
|||
*/
|
||||
void device_initialize(struct device *dev)
|
||||
{
|
||||
dev->p = kzalloc(sizeof(*dev->p), GFP_KERNEL);
|
||||
if (!dev->p) {
|
||||
WARN_ON(1);
|
||||
return;
|
||||
}
|
||||
dev->p->device = dev;
|
||||
dev->kobj.kset = devices_kset;
|
||||
kobject_init(&dev->kobj, &device_ktype);
|
||||
klist_init(&dev->klist_children, klist_children_get,
|
||||
klist_init(&dev->p->klist_children, klist_children_get,
|
||||
klist_children_put);
|
||||
INIT_LIST_HEAD(&dev->dma_pools);
|
||||
init_MUTEX(&dev->sem);
|
||||
|
@ -672,7 +682,7 @@ static int device_add_class_symlinks(struct device *dev)
|
|||
if (dev->kobj.parent != &dev->class->p->class_subsys.kobj &&
|
||||
device_is_not_partition(dev)) {
|
||||
error = sysfs_create_link(&dev->class->p->class_subsys.kobj,
|
||||
&dev->kobj, dev->bus_id);
|
||||
&dev->kobj, dev_name(dev));
|
||||
if (error)
|
||||
goto out_subsys;
|
||||
}
|
||||
|
@ -712,11 +722,11 @@ out_busid:
|
|||
if (dev->kobj.parent != &dev->class->p->class_subsys.kobj &&
|
||||
device_is_not_partition(dev))
|
||||
sysfs_remove_link(&dev->class->p->class_subsys.kobj,
|
||||
dev->bus_id);
|
||||
dev_name(dev));
|
||||
#else
|
||||
/* link in the class directory pointing to the device */
|
||||
error = sysfs_create_link(&dev->class->p->class_subsys.kobj,
|
||||
&dev->kobj, dev->bus_id);
|
||||
&dev->kobj, dev_name(dev));
|
||||
if (error)
|
||||
goto out_subsys;
|
||||
|
||||
|
@ -729,7 +739,7 @@ out_busid:
|
|||
return 0;
|
||||
|
||||
out_busid:
|
||||
sysfs_remove_link(&dev->class->p->class_subsys.kobj, dev->bus_id);
|
||||
sysfs_remove_link(&dev->class->p->class_subsys.kobj, dev_name(dev));
|
||||
#endif
|
||||
|
||||
out_subsys:
|
||||
|
@ -758,12 +768,12 @@ static void device_remove_class_symlinks(struct device *dev)
|
|||
if (dev->kobj.parent != &dev->class->p->class_subsys.kobj &&
|
||||
device_is_not_partition(dev))
|
||||
sysfs_remove_link(&dev->class->p->class_subsys.kobj,
|
||||
dev->bus_id);
|
||||
dev_name(dev));
|
||||
#else
|
||||
if (dev->parent && device_is_not_partition(dev))
|
||||
sysfs_remove_link(&dev->kobj, "device");
|
||||
|
||||
sysfs_remove_link(&dev->class->p->class_subsys.kobj, dev->bus_id);
|
||||
sysfs_remove_link(&dev->class->p->class_subsys.kobj, dev_name(dev));
|
||||
#endif
|
||||
|
||||
sysfs_remove_link(&dev->kobj, "subsystem");
|
||||
|
@ -866,7 +876,7 @@ int device_add(struct device *dev)
|
|||
if (!strlen(dev->bus_id))
|
||||
goto done;
|
||||
|
||||
pr_debug("device: '%s': %s\n", dev->bus_id, __func__);
|
||||
pr_debug("device: '%s': %s\n", dev_name(dev), __func__);
|
||||
|
||||
parent = get_device(dev->parent);
|
||||
setup_parent(dev, parent);
|
||||
|
@ -876,7 +886,7 @@ int device_add(struct device *dev)
|
|||
set_dev_node(dev, dev_to_node(parent));
|
||||
|
||||
/* first, register with generic layer. */
|
||||
error = kobject_add(&dev->kobj, dev->kobj.parent, "%s", dev->bus_id);
|
||||
error = kobject_add(&dev->kobj, dev->kobj.parent, "%s", dev_name(dev));
|
||||
if (error)
|
||||
goto Error;
|
||||
|
||||
|
@ -884,11 +894,6 @@ int device_add(struct device *dev)
|
|||
if (platform_notify)
|
||||
platform_notify(dev);
|
||||
|
||||
/* notify clients of device entry (new way) */
|
||||
if (dev->bus)
|
||||
blocking_notifier_call_chain(&dev->bus->p->bus_notifier,
|
||||
BUS_NOTIFY_ADD_DEVICE, dev);
|
||||
|
||||
error = device_create_file(dev, &uevent_attr);
|
||||
if (error)
|
||||
goto attrError;
|
||||
|
@ -916,10 +921,19 @@ int device_add(struct device *dev)
|
|||
if (error)
|
||||
goto DPMError;
|
||||
device_pm_add(dev);
|
||||
|
||||
/* Notify clients of device addition. This call must come
|
||||
* after dpm_sysf_add() and before kobject_uevent().
|
||||
*/
|
||||
if (dev->bus)
|
||||
blocking_notifier_call_chain(&dev->bus->p->bus_notifier,
|
||||
BUS_NOTIFY_ADD_DEVICE, dev);
|
||||
|
||||
kobject_uevent(&dev->kobj, KOBJ_ADD);
|
||||
bus_attach_device(dev);
|
||||
if (parent)
|
||||
klist_add_tail(&dev->knode_parent, &parent->klist_children);
|
||||
klist_add_tail(&dev->p->knode_parent,
|
||||
&parent->p->klist_children);
|
||||
|
||||
if (dev->class) {
|
||||
mutex_lock(&dev->class->p->class_mutex);
|
||||
|
@ -940,9 +954,6 @@ done:
|
|||
DPMError:
|
||||
bus_remove_device(dev);
|
||||
BusError:
|
||||
if (dev->bus)
|
||||
blocking_notifier_call_chain(&dev->bus->p->bus_notifier,
|
||||
BUS_NOTIFY_DEL_DEVICE, dev);
|
||||
device_remove_attrs(dev);
|
||||
AttrsError:
|
||||
device_remove_class_symlinks(dev);
|
||||
|
@ -1027,10 +1038,16 @@ void device_del(struct device *dev)
|
|||
struct device *parent = dev->parent;
|
||||
struct class_interface *class_intf;
|
||||
|
||||
/* Notify clients of device removal. This call must come
|
||||
* before dpm_sysfs_remove().
|
||||
*/
|
||||
if (dev->bus)
|
||||
blocking_notifier_call_chain(&dev->bus->p->bus_notifier,
|
||||
BUS_NOTIFY_DEL_DEVICE, dev);
|
||||
device_pm_remove(dev);
|
||||
dpm_sysfs_remove(dev);
|
||||
if (parent)
|
||||
klist_del(&dev->knode_parent);
|
||||
klist_del(&dev->p->knode_parent);
|
||||
if (MAJOR(dev->devt)) {
|
||||
device_remove_sys_dev_entry(dev);
|
||||
device_remove_file(dev, &devt_attr);
|
||||
|
@ -1064,9 +1081,6 @@ void device_del(struct device *dev)
|
|||
*/
|
||||
if (platform_notify_remove)
|
||||
platform_notify_remove(dev);
|
||||
if (dev->bus)
|
||||
blocking_notifier_call_chain(&dev->bus->p->bus_notifier,
|
||||
BUS_NOTIFY_DEL_DEVICE, dev);
|
||||
kobject_uevent(&dev->kobj, KOBJ_REMOVE);
|
||||
cleanup_device_parent(dev);
|
||||
kobject_del(&dev->kobj);
|
||||
|
@ -1086,7 +1100,7 @@ void device_del(struct device *dev)
|
|||
*/
|
||||
void device_unregister(struct device *dev)
|
||||
{
|
||||
pr_debug("device: '%s': %s\n", dev->bus_id, __func__);
|
||||
pr_debug("device: '%s': %s\n", dev_name(dev), __func__);
|
||||
device_del(dev);
|
||||
put_device(dev);
|
||||
}
|
||||
|
@ -1094,7 +1108,14 @@ void device_unregister(struct device *dev)
|
|||
static struct device *next_device(struct klist_iter *i)
|
||||
{
|
||||
struct klist_node *n = klist_next(i);
|
||||
return n ? container_of(n, struct device, knode_parent) : NULL;
|
||||
struct device *dev = NULL;
|
||||
struct device_private *p;
|
||||
|
||||
if (n) {
|
||||
p = to_device_private_parent(n);
|
||||
dev = p->device;
|
||||
}
|
||||
return dev;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -1116,7 +1137,7 @@ int device_for_each_child(struct device *parent, void *data,
|
|||
struct device *child;
|
||||
int error = 0;
|
||||
|
||||
klist_iter_init(&parent->klist_children, &i);
|
||||
klist_iter_init(&parent->p->klist_children, &i);
|
||||
while ((child = next_device(&i)) && !error)
|
||||
error = fn(child, data);
|
||||
klist_iter_exit(&i);
|
||||
|
@ -1147,7 +1168,7 @@ struct device *device_find_child(struct device *parent, void *data,
|
|||
if (!parent)
|
||||
return NULL;
|
||||
|
||||
klist_iter_init(&parent->klist_children, &i);
|
||||
klist_iter_init(&parent->p->klist_children, &i);
|
||||
while ((child = next_device(&i)))
|
||||
if (match(child, data) && get_device(child))
|
||||
break;
|
||||
|
@ -1196,10 +1217,101 @@ EXPORT_SYMBOL_GPL(put_device);
|
|||
EXPORT_SYMBOL_GPL(device_create_file);
|
||||
EXPORT_SYMBOL_GPL(device_remove_file);
|
||||
|
||||
struct root_device
|
||||
{
|
||||
struct device dev;
|
||||
struct module *owner;
|
||||
};
|
||||
|
||||
#define to_root_device(dev) container_of(dev, struct root_device, dev)
|
||||
|
||||
static void root_device_release(struct device *dev)
|
||||
{
|
||||
kfree(to_root_device(dev));
|
||||
}
|
||||
|
||||
/**
|
||||
* __root_device_register - allocate and register a root device
|
||||
* @name: root device name
|
||||
* @owner: owner module of the root device, usually THIS_MODULE
|
||||
*
|
||||
* This function allocates a root device and registers it
|
||||
* using device_register(). In order to free the returned
|
||||
* device, use root_device_unregister().
|
||||
*
|
||||
* Root devices are dummy devices which allow other devices
|
||||
* to be grouped under /sys/devices. Use this function to
|
||||
* allocate a root device and then use it as the parent of
|
||||
* any device which should appear under /sys/devices/{name}
|
||||
*
|
||||
* The /sys/devices/{name} directory will also contain a
|
||||
* 'module' symlink which points to the @owner directory
|
||||
* in sysfs.
|
||||
*
|
||||
* Note: You probably want to use root_device_register().
|
||||
*/
|
||||
struct device *__root_device_register(const char *name, struct module *owner)
|
||||
{
|
||||
struct root_device *root;
|
||||
int err = -ENOMEM;
|
||||
|
||||
root = kzalloc(sizeof(struct root_device), GFP_KERNEL);
|
||||
if (!root)
|
||||
return ERR_PTR(err);
|
||||
|
||||
err = dev_set_name(&root->dev, name);
|
||||
if (err) {
|
||||
kfree(root);
|
||||
return ERR_PTR(err);
|
||||
}
|
||||
|
||||
root->dev.release = root_device_release;
|
||||
|
||||
err = device_register(&root->dev);
|
||||
if (err) {
|
||||
put_device(&root->dev);
|
||||
return ERR_PTR(err);
|
||||
}
|
||||
|
||||
#ifdef CONFIG_MODULE /* gotta find a "cleaner" way to do this */
|
||||
if (owner) {
|
||||
struct module_kobject *mk = &owner->mkobj;
|
||||
|
||||
err = sysfs_create_link(&root->dev.kobj, &mk->kobj, "module");
|
||||
if (err) {
|
||||
device_unregister(&root->dev);
|
||||
return ERR_PTR(err);
|
||||
}
|
||||
root->owner = owner;
|
||||
}
|
||||
#endif
|
||||
|
||||
return &root->dev;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(__root_device_register);
|
||||
|
||||
/**
|
||||
* root_device_unregister - unregister and free a root device
|
||||
* @root: device going away.
|
||||
*
|
||||
* This function unregisters and cleans up a device that was created by
|
||||
* root_device_register().
|
||||
*/
|
||||
void root_device_unregister(struct device *dev)
|
||||
{
|
||||
struct root_device *root = to_root_device(dev);
|
||||
|
||||
if (root->owner)
|
||||
sysfs_remove_link(&root->dev.kobj, "module");
|
||||
|
||||
device_unregister(dev);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(root_device_unregister);
|
||||
|
||||
|
||||
static void device_create_release(struct device *dev)
|
||||
{
|
||||
pr_debug("device: '%s': %s\n", dev->bus_id, __func__);
|
||||
pr_debug("device: '%s': %s\n", dev_name(dev), __func__);
|
||||
kfree(dev);
|
||||
}
|
||||
|
||||
|
@ -1344,7 +1456,7 @@ int device_rename(struct device *dev, char *new_name)
|
|||
if (!dev)
|
||||
return -EINVAL;
|
||||
|
||||
pr_debug("device: '%s': %s: renaming to '%s'\n", dev->bus_id,
|
||||
pr_debug("device: '%s': %s: renaming to '%s'\n", dev_name(dev),
|
||||
__func__, new_name);
|
||||
|
||||
#ifdef CONFIG_SYSFS_DEPRECATED
|
||||
|
@ -1381,7 +1493,7 @@ int device_rename(struct device *dev, char *new_name)
|
|||
#else
|
||||
if (dev->class) {
|
||||
error = sysfs_create_link_nowarn(&dev->class->p->class_subsys.kobj,
|
||||
&dev->kobj, dev->bus_id);
|
||||
&dev->kobj, dev_name(dev));
|
||||
if (error)
|
||||
goto out;
|
||||
sysfs_remove_link(&dev->class->p->class_subsys.kobj,
|
||||
|
@ -1459,8 +1571,8 @@ int device_move(struct device *dev, struct device *new_parent)
|
|||
new_parent = get_device(new_parent);
|
||||
new_parent_kobj = get_device_parent(dev, new_parent);
|
||||
|
||||
pr_debug("device: '%s': %s: moving to '%s'\n", dev->bus_id,
|
||||
__func__, new_parent ? new_parent->bus_id : "<NULL>");
|
||||
pr_debug("device: '%s': %s: moving to '%s'\n", dev_name(dev),
|
||||
__func__, new_parent ? dev_name(new_parent) : "<NULL>");
|
||||
error = kobject_move(&dev->kobj, new_parent_kobj);
|
||||
if (error) {
|
||||
cleanup_glue_dir(dev, new_parent_kobj);
|
||||
|
@ -1470,9 +1582,10 @@ int device_move(struct device *dev, struct device *new_parent)
|
|||
old_parent = dev->parent;
|
||||
dev->parent = new_parent;
|
||||
if (old_parent)
|
||||
klist_remove(&dev->knode_parent);
|
||||
klist_remove(&dev->p->knode_parent);
|
||||
if (new_parent) {
|
||||
klist_add_tail(&dev->knode_parent, &new_parent->klist_children);
|
||||
klist_add_tail(&dev->p->knode_parent,
|
||||
&new_parent->p->klist_children);
|
||||
set_dev_node(dev, dev_to_node(new_parent));
|
||||
}
|
||||
|
||||
|
@ -1484,11 +1597,11 @@ int device_move(struct device *dev, struct device *new_parent)
|
|||
device_move_class_links(dev, new_parent, old_parent);
|
||||
if (!kobject_move(&dev->kobj, &old_parent->kobj)) {
|
||||
if (new_parent)
|
||||
klist_remove(&dev->knode_parent);
|
||||
klist_remove(&dev->p->knode_parent);
|
||||
dev->parent = old_parent;
|
||||
if (old_parent) {
|
||||
klist_add_tail(&dev->knode_parent,
|
||||
&old_parent->klist_children);
|
||||
klist_add_tail(&dev->p->knode_parent,
|
||||
&old_parent->p->klist_children);
|
||||
set_dev_node(dev, dev_to_node(old_parent));
|
||||
}
|
||||
}
|
||||
|
|
|
@ -28,20 +28,20 @@
|
|||
|
||||
static void driver_bound(struct device *dev)
|
||||
{
|
||||
if (klist_node_attached(&dev->knode_driver)) {
|
||||
if (klist_node_attached(&dev->p->knode_driver)) {
|
||||
printk(KERN_WARNING "%s: device %s already bound\n",
|
||||
__func__, kobject_name(&dev->kobj));
|
||||
return;
|
||||
}
|
||||
|
||||
pr_debug("driver: '%s': %s: bound to device '%s'\n", dev->bus_id,
|
||||
pr_debug("driver: '%s': %s: bound to device '%s'\n", dev_name(dev),
|
||||
__func__, dev->driver->name);
|
||||
|
||||
if (dev->bus)
|
||||
blocking_notifier_call_chain(&dev->bus->p->bus_notifier,
|
||||
BUS_NOTIFY_BOUND_DRIVER, dev);
|
||||
|
||||
klist_add_tail(&dev->knode_driver, &dev->driver->p->klist_devices);
|
||||
klist_add_tail(&dev->p->knode_driver, &dev->driver->p->klist_devices);
|
||||
}
|
||||
|
||||
static int driver_sysfs_add(struct device *dev)
|
||||
|
@ -104,13 +104,13 @@ static int really_probe(struct device *dev, struct device_driver *drv)
|
|||
|
||||
atomic_inc(&probe_count);
|
||||
pr_debug("bus: '%s': %s: probing driver %s with device %s\n",
|
||||
drv->bus->name, __func__, drv->name, dev->bus_id);
|
||||
drv->bus->name, __func__, drv->name, dev_name(dev));
|
||||
WARN_ON(!list_empty(&dev->devres_head));
|
||||
|
||||
dev->driver = drv;
|
||||
if (driver_sysfs_add(dev)) {
|
||||
printk(KERN_ERR "%s: driver_sysfs_add(%s) failed\n",
|
||||
__func__, dev->bus_id);
|
||||
__func__, dev_name(dev));
|
||||
goto probe_failed;
|
||||
}
|
||||
|
||||
|
@ -127,7 +127,7 @@ static int really_probe(struct device *dev, struct device_driver *drv)
|
|||
driver_bound(dev);
|
||||
ret = 1;
|
||||
pr_debug("bus: '%s': %s: bound device %s to driver %s\n",
|
||||
drv->bus->name, __func__, dev->bus_id, drv->name);
|
||||
drv->bus->name, __func__, dev_name(dev), drv->name);
|
||||
goto done;
|
||||
|
||||
probe_failed:
|
||||
|
@ -139,7 +139,7 @@ probe_failed:
|
|||
/* driver matched but the probe failed */
|
||||
printk(KERN_WARNING
|
||||
"%s: probe of %s failed with error %d\n",
|
||||
drv->name, dev->bus_id, ret);
|
||||
drv->name, dev_name(dev), ret);
|
||||
}
|
||||
/*
|
||||
* Ignore errors returned by ->probe so that the next driver can try
|
||||
|
@ -194,7 +194,7 @@ int driver_probe_device(struct device_driver *drv, struct device *dev)
|
|||
goto done;
|
||||
|
||||
pr_debug("bus: '%s': %s: matched device %s with driver %s\n",
|
||||
drv->bus->name, __func__, dev->bus_id, drv->name);
|
||||
drv->bus->name, __func__, dev_name(dev), drv->name);
|
||||
|
||||
ret = really_probe(dev, drv);
|
||||
|
||||
|
@ -298,7 +298,6 @@ static void __device_release_driver(struct device *dev)
|
|||
drv = dev->driver;
|
||||
if (drv) {
|
||||
driver_sysfs_remove(dev);
|
||||
sysfs_remove_link(&dev->kobj, "driver");
|
||||
|
||||
if (dev->bus)
|
||||
blocking_notifier_call_chain(&dev->bus->p->bus_notifier,
|
||||
|
@ -311,7 +310,7 @@ static void __device_release_driver(struct device *dev)
|
|||
drv->remove(dev);
|
||||
devres_release_all(dev);
|
||||
dev->driver = NULL;
|
||||
klist_remove(&dev->knode_driver);
|
||||
klist_remove(&dev->p->knode_driver);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -341,6 +340,7 @@ EXPORT_SYMBOL_GPL(device_release_driver);
|
|||
*/
|
||||
void driver_detach(struct device_driver *drv)
|
||||
{
|
||||
struct device_private *dev_prv;
|
||||
struct device *dev;
|
||||
|
||||
for (;;) {
|
||||
|
@ -349,8 +349,10 @@ void driver_detach(struct device_driver *drv)
|
|||
spin_unlock(&drv->p->klist_devices.k_lock);
|
||||
break;
|
||||
}
|
||||
dev = list_entry(drv->p->klist_devices.k_list.prev,
|
||||
struct device, knode_driver.n_node);
|
||||
dev_prv = list_entry(drv->p->klist_devices.k_list.prev,
|
||||
struct device_private,
|
||||
knode_driver.n_node);
|
||||
dev = dev_prv->device;
|
||||
get_device(dev);
|
||||
spin_unlock(&drv->p->klist_devices.k_lock);
|
||||
|
||||
|
|
|
@ -19,7 +19,14 @@
|
|||
static struct device *next_device(struct klist_iter *i)
|
||||
{
|
||||
struct klist_node *n = klist_next(i);
|
||||
return n ? container_of(n, struct device, knode_driver) : NULL;
|
||||
struct device *dev = NULL;
|
||||
struct device_private *dev_prv;
|
||||
|
||||
if (n) {
|
||||
dev_prv = to_device_private_driver(n);
|
||||
dev = dev_prv->device;
|
||||
}
|
||||
return dev;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -42,7 +49,7 @@ int driver_for_each_device(struct device_driver *drv, struct device *start,
|
|||
return -EINVAL;
|
||||
|
||||
klist_iter_init_node(&drv->p->klist_devices, &i,
|
||||
start ? &start->knode_driver : NULL);
|
||||
start ? &start->p->knode_driver : NULL);
|
||||
while ((dev = next_device(&i)) && !error)
|
||||
error = fn(dev, data);
|
||||
klist_iter_exit(&i);
|
||||
|
@ -76,7 +83,7 @@ struct device *driver_find_device(struct device_driver *drv,
|
|||
return NULL;
|
||||
|
||||
klist_iter_init_node(&drv->p->klist_devices, &i,
|
||||
(start ? &start->knode_driver : NULL));
|
||||
(start ? &start->p->knode_driver : NULL));
|
||||
while ((dev = next_device(&i)))
|
||||
if (match(dev, data) && get_device(dev))
|
||||
break;
|
||||
|
|
|
@ -291,12 +291,6 @@ firmware_class_timeout(u_long data)
|
|||
fw_load_abort(fw_priv);
|
||||
}
|
||||
|
||||
static inline void fw_setup_device_id(struct device *f_dev, struct device *dev)
|
||||
{
|
||||
/* XXX warning we should watch out for name collisions */
|
||||
strlcpy(f_dev->bus_id, dev->bus_id, BUS_ID_SIZE);
|
||||
}
|
||||
|
||||
static int fw_register_device(struct device **dev_p, const char *fw_name,
|
||||
struct device *device)
|
||||
{
|
||||
|
@ -321,7 +315,7 @@ static int fw_register_device(struct device **dev_p, const char *fw_name,
|
|||
fw_priv->timeout.data = (u_long) fw_priv;
|
||||
init_timer(&fw_priv->timeout);
|
||||
|
||||
fw_setup_device_id(f_dev, device);
|
||||
dev_set_name(f_dev, dev_name(device));
|
||||
f_dev->parent = device;
|
||||
f_dev->class = &firmware_class;
|
||||
dev_set_drvdata(f_dev, fw_priv);
|
||||
|
|
|
@ -11,7 +11,7 @@
|
|||
#include <linux/isa.h>
|
||||
|
||||
static struct device isa_bus = {
|
||||
.bus_id = "isa"
|
||||
.init_name = "isa"
|
||||
};
|
||||
|
||||
struct isa_dev {
|
||||
|
@ -135,9 +135,8 @@ int isa_register_driver(struct isa_driver *isa_driver, unsigned int ndev)
|
|||
isa_dev->dev.parent = &isa_bus;
|
||||
isa_dev->dev.bus = &isa_bus_type;
|
||||
|
||||
snprintf(isa_dev->dev.bus_id, BUS_ID_SIZE, "%s.%u",
|
||||
isa_driver->driver.name, id);
|
||||
|
||||
dev_set_name(&isa_dev->dev, "%s.%u",
|
||||
isa_driver->driver.name, id);
|
||||
isa_dev->dev.platform_data = isa_driver;
|
||||
isa_dev->dev.release = isa_dev_release;
|
||||
isa_dev->id = id;
|
||||
|
|
|
@ -24,7 +24,7 @@
|
|||
driver))
|
||||
|
||||
struct device platform_bus = {
|
||||
.bus_id = "platform",
|
||||
.init_name = "platform",
|
||||
};
|
||||
EXPORT_SYMBOL_GPL(platform_bus);
|
||||
|
||||
|
@ -242,16 +242,15 @@ int platform_device_add(struct platform_device *pdev)
|
|||
pdev->dev.bus = &platform_bus_type;
|
||||
|
||||
if (pdev->id != -1)
|
||||
snprintf(pdev->dev.bus_id, BUS_ID_SIZE, "%s.%d", pdev->name,
|
||||
pdev->id);
|
||||
dev_set_name(&pdev->dev, "%s.%d", pdev->name, pdev->id);
|
||||
else
|
||||
strlcpy(pdev->dev.bus_id, pdev->name, BUS_ID_SIZE);
|
||||
dev_set_name(&pdev->dev, pdev->name);
|
||||
|
||||
for (i = 0; i < pdev->num_resources; i++) {
|
||||
struct resource *p, *r = &pdev->resource[i];
|
||||
|
||||
if (r->name == NULL)
|
||||
r->name = pdev->dev.bus_id;
|
||||
r->name = dev_name(&pdev->dev);
|
||||
|
||||
p = r->parent;
|
||||
if (!p) {
|
||||
|
@ -264,14 +263,14 @@ int platform_device_add(struct platform_device *pdev)
|
|||
if (p && insert_resource(p, r)) {
|
||||
printk(KERN_ERR
|
||||
"%s: failed to claim resource %d\n",
|
||||
pdev->dev.bus_id, i);
|
||||
dev_name(&pdev->dev), i);
|
||||
ret = -EBUSY;
|
||||
goto failed;
|
||||
}
|
||||
}
|
||||
|
||||
pr_debug("Registering platform device '%s'. Parent at %s\n",
|
||||
pdev->dev.bus_id, pdev->dev.parent->bus_id);
|
||||
dev_name(&pdev->dev), dev_name(pdev->dev.parent));
|
||||
|
||||
ret = device_add(&pdev->dev);
|
||||
if (ret == 0)
|
||||
|
@ -503,8 +502,6 @@ int platform_driver_register(struct platform_driver *drv)
|
|||
drv->driver.suspend = platform_drv_suspend;
|
||||
if (drv->resume)
|
||||
drv->driver.resume = platform_drv_resume;
|
||||
if (drv->pm)
|
||||
drv->driver.pm = &drv->pm->base;
|
||||
return driver_register(&drv->driver);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(platform_driver_register);
|
||||
|
@ -609,7 +606,7 @@ static int platform_match(struct device *dev, struct device_driver *drv)
|
|||
struct platform_device *pdev;
|
||||
|
||||
pdev = container_of(dev, struct platform_device, dev);
|
||||
return (strncmp(pdev->name, drv->name, BUS_ID_SIZE) == 0);
|
||||
return (strcmp(pdev->name, drv->name) == 0);
|
||||
}
|
||||
|
||||
#ifdef CONFIG_PM_SLEEP
|
||||
|
@ -686,7 +683,10 @@ static int platform_pm_suspend(struct device *dev)
|
|||
struct device_driver *drv = dev->driver;
|
||||
int ret = 0;
|
||||
|
||||
if (drv && drv->pm) {
|
||||
if (!drv)
|
||||
return 0;
|
||||
|
||||
if (drv->pm) {
|
||||
if (drv->pm->suspend)
|
||||
ret = drv->pm->suspend(dev);
|
||||
} else {
|
||||
|
@ -698,16 +698,15 @@ static int platform_pm_suspend(struct device *dev)
|
|||
|
||||
static int platform_pm_suspend_noirq(struct device *dev)
|
||||
{
|
||||
struct platform_driver *pdrv;
|
||||
struct device_driver *drv = dev->driver;
|
||||
int ret = 0;
|
||||
|
||||
if (!dev->driver)
|
||||
if (!drv)
|
||||
return 0;
|
||||
|
||||
pdrv = to_platform_driver(dev->driver);
|
||||
if (pdrv->pm) {
|
||||
if (pdrv->pm->suspend_noirq)
|
||||
ret = pdrv->pm->suspend_noirq(dev);
|
||||
if (drv->pm) {
|
||||
if (drv->pm->suspend_noirq)
|
||||
ret = drv->pm->suspend_noirq(dev);
|
||||
} else {
|
||||
ret = platform_legacy_suspend_late(dev, PMSG_SUSPEND);
|
||||
}
|
||||
|
@ -720,7 +719,10 @@ static int platform_pm_resume(struct device *dev)
|
|||
struct device_driver *drv = dev->driver;
|
||||
int ret = 0;
|
||||
|
||||
if (drv && drv->pm) {
|
||||
if (!drv)
|
||||
return 0;
|
||||
|
||||
if (drv->pm) {
|
||||
if (drv->pm->resume)
|
||||
ret = drv->pm->resume(dev);
|
||||
} else {
|
||||
|
@ -732,16 +734,15 @@ static int platform_pm_resume(struct device *dev)
|
|||
|
||||
static int platform_pm_resume_noirq(struct device *dev)
|
||||
{
|
||||
struct platform_driver *pdrv;
|
||||
struct device_driver *drv = dev->driver;
|
||||
int ret = 0;
|
||||
|
||||
if (!dev->driver)
|
||||
if (!drv)
|
||||
return 0;
|
||||
|
||||
pdrv = to_platform_driver(dev->driver);
|
||||
if (pdrv->pm) {
|
||||
if (pdrv->pm->resume_noirq)
|
||||
ret = pdrv->pm->resume_noirq(dev);
|
||||
if (drv->pm) {
|
||||
if (drv->pm->resume_noirq)
|
||||
ret = drv->pm->resume_noirq(dev);
|
||||
} else {
|
||||
ret = platform_legacy_resume_early(dev);
|
||||
}
|
||||
|
@ -780,16 +781,15 @@ static int platform_pm_freeze(struct device *dev)
|
|||
|
||||
static int platform_pm_freeze_noirq(struct device *dev)
|
||||
{
|
||||
struct platform_driver *pdrv;
|
||||
struct device_driver *drv = dev->driver;
|
||||
int ret = 0;
|
||||
|
||||
if (!dev->driver)
|
||||
if (!drv)
|
||||
return 0;
|
||||
|
||||
pdrv = to_platform_driver(dev->driver);
|
||||
if (pdrv->pm) {
|
||||
if (pdrv->pm->freeze_noirq)
|
||||
ret = pdrv->pm->freeze_noirq(dev);
|
||||
if (drv->pm) {
|
||||
if (drv->pm->freeze_noirq)
|
||||
ret = drv->pm->freeze_noirq(dev);
|
||||
} else {
|
||||
ret = platform_legacy_suspend_late(dev, PMSG_FREEZE);
|
||||
}
|
||||
|
@ -802,7 +802,10 @@ static int platform_pm_thaw(struct device *dev)
|
|||
struct device_driver *drv = dev->driver;
|
||||
int ret = 0;
|
||||
|
||||
if (drv && drv->pm) {
|
||||
if (!drv)
|
||||
return 0;
|
||||
|
||||
if (drv->pm) {
|
||||
if (drv->pm->thaw)
|
||||
ret = drv->pm->thaw(dev);
|
||||
} else {
|
||||
|
@ -814,16 +817,15 @@ static int platform_pm_thaw(struct device *dev)
|
|||
|
||||
static int platform_pm_thaw_noirq(struct device *dev)
|
||||
{
|
||||
struct platform_driver *pdrv;
|
||||
struct device_driver *drv = dev->driver;
|
||||
int ret = 0;
|
||||
|
||||
if (!dev->driver)
|
||||
if (!drv)
|
||||
return 0;
|
||||
|
||||
pdrv = to_platform_driver(dev->driver);
|
||||
if (pdrv->pm) {
|
||||
if (pdrv->pm->thaw_noirq)
|
||||
ret = pdrv->pm->thaw_noirq(dev);
|
||||
if (drv->pm) {
|
||||
if (drv->pm->thaw_noirq)
|
||||
ret = drv->pm->thaw_noirq(dev);
|
||||
} else {
|
||||
ret = platform_legacy_resume_early(dev);
|
||||
}
|
||||
|
@ -836,7 +838,10 @@ static int platform_pm_poweroff(struct device *dev)
|
|||
struct device_driver *drv = dev->driver;
|
||||
int ret = 0;
|
||||
|
||||
if (drv && drv->pm) {
|
||||
if (!drv)
|
||||
return 0;
|
||||
|
||||
if (drv->pm) {
|
||||
if (drv->pm->poweroff)
|
||||
ret = drv->pm->poweroff(dev);
|
||||
} else {
|
||||
|
@ -848,16 +853,15 @@ static int platform_pm_poweroff(struct device *dev)
|
|||
|
||||
static int platform_pm_poweroff_noirq(struct device *dev)
|
||||
{
|
||||
struct platform_driver *pdrv;
|
||||
struct device_driver *drv = dev->driver;
|
||||
int ret = 0;
|
||||
|
||||
if (!dev->driver)
|
||||
if (!drv)
|
||||
return 0;
|
||||
|
||||
pdrv = to_platform_driver(dev->driver);
|
||||
if (pdrv->pm) {
|
||||
if (pdrv->pm->poweroff_noirq)
|
||||
ret = pdrv->pm->poweroff_noirq(dev);
|
||||
if (drv->pm) {
|
||||
if (drv->pm->poweroff_noirq)
|
||||
ret = drv->pm->poweroff_noirq(dev);
|
||||
} else {
|
||||
ret = platform_legacy_suspend_late(dev, PMSG_HIBERNATE);
|
||||
}
|
||||
|
@ -870,7 +874,10 @@ static int platform_pm_restore(struct device *dev)
|
|||
struct device_driver *drv = dev->driver;
|
||||
int ret = 0;
|
||||
|
||||
if (drv && drv->pm) {
|
||||
if (!drv)
|
||||
return 0;
|
||||
|
||||
if (drv->pm) {
|
||||
if (drv->pm->restore)
|
||||
ret = drv->pm->restore(dev);
|
||||
} else {
|
||||
|
@ -882,16 +889,15 @@ static int platform_pm_restore(struct device *dev)
|
|||
|
||||
static int platform_pm_restore_noirq(struct device *dev)
|
||||
{
|
||||
struct platform_driver *pdrv;
|
||||
struct device_driver *drv = dev->driver;
|
||||
int ret = 0;
|
||||
|
||||
if (!dev->driver)
|
||||
if (!drv)
|
||||
return 0;
|
||||
|
||||
pdrv = to_platform_driver(dev->driver);
|
||||
if (pdrv->pm) {
|
||||
if (pdrv->pm->restore_noirq)
|
||||
ret = pdrv->pm->restore_noirq(dev);
|
||||
if (drv->pm) {
|
||||
if (drv->pm->restore_noirq)
|
||||
ret = drv->pm->restore_noirq(dev);
|
||||
} else {
|
||||
ret = platform_legacy_resume_early(dev);
|
||||
}
|
||||
|
@ -912,17 +918,15 @@ static int platform_pm_restore_noirq(struct device *dev)
|
|||
|
||||
#endif /* !CONFIG_HIBERNATION */
|
||||
|
||||
static struct pm_ext_ops platform_pm_ops = {
|
||||
.base = {
|
||||
.prepare = platform_pm_prepare,
|
||||
.complete = platform_pm_complete,
|
||||
.suspend = platform_pm_suspend,
|
||||
.resume = platform_pm_resume,
|
||||
.freeze = platform_pm_freeze,
|
||||
.thaw = platform_pm_thaw,
|
||||
.poweroff = platform_pm_poweroff,
|
||||
.restore = platform_pm_restore,
|
||||
},
|
||||
static struct dev_pm_ops platform_dev_pm_ops = {
|
||||
.prepare = platform_pm_prepare,
|
||||
.complete = platform_pm_complete,
|
||||
.suspend = platform_pm_suspend,
|
||||
.resume = platform_pm_resume,
|
||||
.freeze = platform_pm_freeze,
|
||||
.thaw = platform_pm_thaw,
|
||||
.poweroff = platform_pm_poweroff,
|
||||
.restore = platform_pm_restore,
|
||||
.suspend_noirq = platform_pm_suspend_noirq,
|
||||
.resume_noirq = platform_pm_resume_noirq,
|
||||
.freeze_noirq = platform_pm_freeze_noirq,
|
||||
|
@ -931,7 +935,7 @@ static struct pm_ext_ops platform_pm_ops = {
|
|||
.restore_noirq = platform_pm_restore_noirq,
|
||||
};
|
||||
|
||||
#define PLATFORM_PM_OPS_PTR &platform_pm_ops
|
||||
#define PLATFORM_PM_OPS_PTR (&platform_dev_pm_ops)
|
||||
|
||||
#else /* !CONFIG_PM_SLEEP */
|
||||
|
||||
|
|
|
@ -76,7 +76,7 @@ void device_pm_add(struct device *dev)
|
|||
if (dev->parent) {
|
||||
if (dev->parent->power.status >= DPM_SUSPENDING)
|
||||
dev_warn(dev, "parent %s should not be sleeping\n",
|
||||
dev->parent->bus_id);
|
||||
dev_name(dev->parent));
|
||||
} else if (transition_started) {
|
||||
/*
|
||||
* We refuse to register parentless devices while a PM
|
||||
|
@ -112,7 +112,8 @@ void device_pm_remove(struct device *dev)
|
|||
* @ops: PM operations to choose from.
|
||||
* @state: PM transition of the system being carried out.
|
||||
*/
|
||||
static int pm_op(struct device *dev, struct pm_ops *ops, pm_message_t state)
|
||||
static int pm_op(struct device *dev, struct dev_pm_ops *ops,
|
||||
pm_message_t state)
|
||||
{
|
||||
int error = 0;
|
||||
|
||||
|
@ -174,7 +175,7 @@ static int pm_op(struct device *dev, struct pm_ops *ops, pm_message_t state)
|
|||
* The operation is executed with interrupts disabled by the only remaining
|
||||
* functional CPU in the system.
|
||||
*/
|
||||
static int pm_noirq_op(struct device *dev, struct pm_ext_ops *ops,
|
||||
static int pm_noirq_op(struct device *dev, struct dev_pm_ops *ops,
|
||||
pm_message_t state)
|
||||
{
|
||||
int error = 0;
|
||||
|
@ -354,7 +355,7 @@ static int resume_device(struct device *dev, pm_message_t state)
|
|||
if (dev->bus) {
|
||||
if (dev->bus->pm) {
|
||||
pm_dev_dbg(dev, state, "");
|
||||
error = pm_op(dev, &dev->bus->pm->base, state);
|
||||
error = pm_op(dev, dev->bus->pm, state);
|
||||
} else if (dev->bus->resume) {
|
||||
pm_dev_dbg(dev, state, "legacy ");
|
||||
error = dev->bus->resume(dev);
|
||||
|
@ -451,9 +452,9 @@ static void complete_device(struct device *dev, pm_message_t state)
|
|||
dev->type->pm->complete(dev);
|
||||
}
|
||||
|
||||
if (dev->bus && dev->bus->pm && dev->bus->pm->base.complete) {
|
||||
if (dev->bus && dev->bus->pm && dev->bus->pm->complete) {
|
||||
pm_dev_dbg(dev, state, "completing ");
|
||||
dev->bus->pm->base.complete(dev);
|
||||
dev->bus->pm->complete(dev);
|
||||
}
|
||||
|
||||
up(&dev->sem);
|
||||
|
@ -624,7 +625,7 @@ static int suspend_device(struct device *dev, pm_message_t state)
|
|||
if (dev->bus) {
|
||||
if (dev->bus->pm) {
|
||||
pm_dev_dbg(dev, state, "");
|
||||
error = pm_op(dev, &dev->bus->pm->base, state);
|
||||
error = pm_op(dev, dev->bus->pm, state);
|
||||
} else if (dev->bus->suspend) {
|
||||
pm_dev_dbg(dev, state, "legacy ");
|
||||
error = dev->bus->suspend(dev, state);
|
||||
|
@ -685,10 +686,10 @@ static int prepare_device(struct device *dev, pm_message_t state)
|
|||
|
||||
down(&dev->sem);
|
||||
|
||||
if (dev->bus && dev->bus->pm && dev->bus->pm->base.prepare) {
|
||||
if (dev->bus && dev->bus->pm && dev->bus->pm->prepare) {
|
||||
pm_dev_dbg(dev, state, "preparing ");
|
||||
error = dev->bus->pm->base.prepare(dev);
|
||||
suspend_report_result(dev->bus->pm->base.prepare, error);
|
||||
error = dev->bus->pm->prepare(dev);
|
||||
suspend_report_result(dev->bus->pm->prepare, error);
|
||||
if (error)
|
||||
goto End;
|
||||
}
|
||||
|
|
|
@ -140,7 +140,7 @@ static unsigned int hash_string(unsigned int seed, const char *data, unsigned in
|
|||
|
||||
void set_trace_device(struct device *dev)
|
||||
{
|
||||
dev_hash_value = hash_string(DEVSEED, dev->bus_id, DEVHASH);
|
||||
dev_hash_value = hash_string(DEVSEED, dev_name(dev), DEVHASH);
|
||||
}
|
||||
EXPORT_SYMBOL(set_trace_device);
|
||||
|
||||
|
@ -192,7 +192,7 @@ static int show_dev_hash(unsigned int value)
|
|||
|
||||
while (entry != &dpm_list) {
|
||||
struct device * dev = to_device(entry);
|
||||
unsigned int hash = hash_string(DEVSEED, dev->bus_id, DEVHASH);
|
||||
unsigned int hash = hash_string(DEVSEED, dev_name(dev), DEVHASH);
|
||||
if (hash == value) {
|
||||
dev_info(dev, "hash matches\n");
|
||||
match++;
|
||||
|
|
|
@ -663,7 +663,7 @@ static int __init mwave_init(void)
|
|||
#if 0
|
||||
/* sysfs */
|
||||
memset(&mwave_device, 0, sizeof (struct device));
|
||||
snprintf(mwave_device.bus_id, BUS_ID_SIZE, "mwave");
|
||||
dev_set_name(&mwave_device, "mwave");
|
||||
|
||||
if (device_register(&mwave_device))
|
||||
goto cleanup_error;
|
||||
|
|
|
@ -223,7 +223,7 @@ static int __init dmi_id_init(void)
|
|||
}
|
||||
|
||||
dmi_dev->class = &dmi_class;
|
||||
strcpy(dmi_dev->bus_id, "id");
|
||||
dev_set_name(dmi_dev, "id");
|
||||
dmi_dev->groups = sys_dmi_attribute_groups;
|
||||
|
||||
ret = device_register(dmi_dev);
|
||||
|
|
|
@ -1213,7 +1213,7 @@ static int gpiolib_show(struct seq_file *s, void *unused)
|
|||
if (dev)
|
||||
seq_printf(s, ", %s/%s",
|
||||
dev->bus ? dev->bus->name : "no-bus",
|
||||
dev->bus_id);
|
||||
dev_name(dev));
|
||||
if (chip->label)
|
||||
seq_printf(s, ", %s", chip->label);
|
||||
if (chip->can_sleep)
|
||||
|
|
|
@ -488,7 +488,7 @@ int drm_sysfs_device_add(struct drm_minor *minor)
|
|||
else
|
||||
minor_str = "card%d";
|
||||
|
||||
snprintf(minor->kdev.bus_id, BUS_ID_SIZE, minor_str, minor->index);
|
||||
dev_set_name(&minor->kdev, minor_str, minor->index);
|
||||
|
||||
err = device_register(&minor->kdev);
|
||||
if (err) {
|
||||
|
|
|
@ -76,7 +76,7 @@ void hwmon_device_unregister(struct device *dev)
|
|||
{
|
||||
int id;
|
||||
|
||||
if (likely(sscanf(dev->bus_id, HWMON_ID_FORMAT, &id) == 1)) {
|
||||
if (likely(sscanf(dev_name(dev), HWMON_ID_FORMAT, &id) == 1)) {
|
||||
device_unregister(dev);
|
||||
spin_lock(&idr_lock);
|
||||
idr_remove(&hwmon_idr, id);
|
||||
|
|
|
@ -190,7 +190,7 @@ lm75_probe(struct i2c_client *client, const struct i2c_device_id *id)
|
|||
}
|
||||
|
||||
dev_info(&client->dev, "%s: sensor '%s'\n",
|
||||
data->hwmon_dev->bus_id, client->name);
|
||||
dev_name(data->hwmon_dev), client->name);
|
||||
|
||||
return 0;
|
||||
|
||||
|
|
|
@ -177,7 +177,7 @@ static int __init i7300_idle_ioat_selftest(u8 *ctl,
|
|||
}
|
||||
|
||||
static struct device dummy_dma_dev = {
|
||||
.bus_id = "fallback device",
|
||||
.init_name = "fallback device",
|
||||
.coherent_dma_mask = DMA_64BIT_MASK,
|
||||
.dma_mask = &dummy_dma_dev.coherent_dma_mask,
|
||||
};
|
||||
|
|
|
@ -778,7 +778,7 @@ int ib_device_register_sysfs(struct ib_device *device)
|
|||
class_dev->class = &ib_class;
|
||||
class_dev->driver_data = device;
|
||||
class_dev->parent = device->dma_device;
|
||||
strlcpy(class_dev->bus_id, device->name, BUS_ID_SIZE);
|
||||
dev_set_name(class_dev, device->name);
|
||||
|
||||
INIT_LIST_HEAD(&device->port_list);
|
||||
|
||||
|
|
|
@ -1266,8 +1266,7 @@ static void ib_ucm_add_one(struct ib_device *device)
|
|||
ucm_dev->dev.parent = device->dma_device;
|
||||
ucm_dev->dev.devt = ucm_dev->cdev.dev;
|
||||
ucm_dev->dev.release = ib_ucm_release_dev;
|
||||
snprintf(ucm_dev->dev.bus_id, BUS_ID_SIZE, "ucm%d",
|
||||
ucm_dev->devnum);
|
||||
dev_set_name(&ucm_dev->dev, "ucm%d", ucm_dev->devnum);
|
||||
if (device_register(&ucm_dev->dev))
|
||||
goto err_cdev;
|
||||
|
||||
|
|
|
@ -1949,8 +1949,7 @@ static struct srp_host *srp_add_port(struct srp_device *device, u8 port)
|
|||
|
||||
host->dev.class = &srp_class;
|
||||
host->dev.parent = device->dev->dma_device;
|
||||
snprintf(host->dev.bus_id, BUS_ID_SIZE, "srp-%s-%d",
|
||||
device->dev->name, port);
|
||||
dev_set_name(&host->dev, "srp-%s-%d", device->dev->name, port);
|
||||
|
||||
if (device_register(&host->dev))
|
||||
goto free_host;
|
||||
|
|
|
@ -91,7 +91,7 @@ int mISDN_dsp_element_register(struct mISDN_dsp_element *elem)
|
|||
|
||||
entry->dev.class = elements_class;
|
||||
dev_set_drvdata(&entry->dev, elem);
|
||||
snprintf(entry->dev.bus_id, BUS_ID_SIZE, elem->name);
|
||||
dev_set_name(&entry->dev, elem->name);
|
||||
ret = device_register(&entry->dev);
|
||||
if (ret) {
|
||||
printk(KERN_ERR "%s: failed to register %s\n",
|
||||
|
|
|
@ -321,10 +321,7 @@ static struct virtio_config_ops lguest_config_ops = {
|
|||
|
||||
/* The root device for the lguest virtio devices. This makes them appear as
|
||||
* /sys/devices/lguest/0,1,2 not /sys/devices/0,1,2. */
|
||||
static struct device lguest_root = {
|
||||
.parent = NULL,
|
||||
.bus_id = "lguest",
|
||||
};
|
||||
static struct device *lguest_root;
|
||||
|
||||
/*D:120 This is the core of the lguest bus: actually adding a new device.
|
||||
* It's a separate function because it's neater that way, and because an
|
||||
|
@ -351,7 +348,7 @@ static void add_lguest_device(struct lguest_device_desc *d,
|
|||
}
|
||||
|
||||
/* This devices' parent is the lguest/ dir. */
|
||||
ldev->vdev.dev.parent = &lguest_root;
|
||||
ldev->vdev.dev.parent = lguest_root;
|
||||
/* We have a unique device index thanks to the dev_index counter. */
|
||||
ldev->vdev.id.device = d->type;
|
||||
/* We have a simple set of routines for querying the device's
|
||||
|
@ -407,7 +404,8 @@ static int __init lguest_devices_init(void)
|
|||
if (strcmp(pv_info.name, "lguest") != 0)
|
||||
return 0;
|
||||
|
||||
if (device_register(&lguest_root) != 0)
|
||||
lguest_root = root_device_register("lguest");
|
||||
if (IS_ERR(lguest_root))
|
||||
panic("Could not register lguest root");
|
||||
|
||||
/* Devices are in a single page above top of "normal" mem */
|
||||
|
|
|
@ -33,7 +33,7 @@
|
|||
|
||||
#undef DEBUG
|
||||
|
||||
#define MAX_NODE_NAME_SIZE (BUS_ID_SIZE - 12)
|
||||
#define MAX_NODE_NAME_SIZE (20 - 12)
|
||||
|
||||
static struct macio_chip *macio_on_hold;
|
||||
|
||||
|
@ -240,7 +240,7 @@ static void macio_create_fixup_irq(struct macio_dev *dev, int index,
|
|||
if (irq != NO_IRQ) {
|
||||
dev->interrupt[index].start = irq;
|
||||
dev->interrupt[index].flags = IORESOURCE_IRQ;
|
||||
dev->interrupt[index].name = dev->ofdev.dev.bus_id;
|
||||
dev->interrupt[index].name = dev_name(&dev->ofdev.dev);
|
||||
}
|
||||
if (dev->n_interrupts <= index)
|
||||
dev->n_interrupts = index + 1;
|
||||
|
@ -303,7 +303,7 @@ static void macio_setup_interrupts(struct macio_dev *dev)
|
|||
break;
|
||||
res->start = irq;
|
||||
res->flags = IORESOURCE_IRQ;
|
||||
res->name = dev->ofdev.dev.bus_id;
|
||||
res->name = dev_name(&dev->ofdev.dev);
|
||||
if (macio_resource_quirks(np, res, i - 1)) {
|
||||
memset(res, 0, sizeof(struct resource));
|
||||
continue;
|
||||
|
@ -325,7 +325,7 @@ static void macio_setup_resources(struct macio_dev *dev,
|
|||
if (index >= MACIO_DEV_COUNT_RESOURCES)
|
||||
break;
|
||||
*res = r;
|
||||
res->name = dev->ofdev.dev.bus_id;
|
||||
res->name = dev_name(&dev->ofdev.dev);
|
||||
|
||||
if (macio_resource_quirks(np, res, index)) {
|
||||
memset(res, 0, sizeof(struct resource));
|
||||
|
@ -338,7 +338,7 @@ static void macio_setup_resources(struct macio_dev *dev,
|
|||
if (insert_resource(parent_res, res)) {
|
||||
printk(KERN_WARNING "Can't request resource "
|
||||
"%d for MacIO device %s\n",
|
||||
index, dev->ofdev.dev.bus_id);
|
||||
index, dev_name(&dev->ofdev.dev));
|
||||
}
|
||||
}
|
||||
dev->n_resources = index;
|
||||
|
@ -385,8 +385,8 @@ static struct macio_dev * macio_add_one_device(struct macio_chip *chip,
|
|||
|
||||
/* MacIO itself has a different reg, we use it's PCI base */
|
||||
if (np == chip->of_node) {
|
||||
sprintf(dev->ofdev.dev.bus_id, "%1d.%08x:%.*s",
|
||||
chip->lbus.index,
|
||||
dev_set_name(&dev->ofdev.dev, "%1d.%08x:%.*s",
|
||||
chip->lbus.index,
|
||||
#ifdef CONFIG_PCI
|
||||
(unsigned int)pci_resource_start(chip->lbus.pdev, 0),
|
||||
#else
|
||||
|
@ -395,9 +395,9 @@ static struct macio_dev * macio_add_one_device(struct macio_chip *chip,
|
|||
MAX_NODE_NAME_SIZE, np->name);
|
||||
} else {
|
||||
reg = of_get_property(np, "reg", NULL);
|
||||
sprintf(dev->ofdev.dev.bus_id, "%1d.%08x:%.*s",
|
||||
chip->lbus.index,
|
||||
reg ? *reg : 0, MAX_NODE_NAME_SIZE, np->name);
|
||||
dev_set_name(&dev->ofdev.dev, "%1d.%08x:%.*s",
|
||||
chip->lbus.index,
|
||||
reg ? *reg : 0, MAX_NODE_NAME_SIZE, np->name);
|
||||
}
|
||||
|
||||
/* Setup interrupts & resources */
|
||||
|
@ -408,7 +408,7 @@ static struct macio_dev * macio_add_one_device(struct macio_chip *chip,
|
|||
/* Register with core */
|
||||
if (of_device_register(&dev->ofdev) != 0) {
|
||||
printk(KERN_DEBUG"macio: device registration error for %s!\n",
|
||||
dev->ofdev.dev.bus_id);
|
||||
dev_name(&dev->ofdev.dev));
|
||||
kfree(dev);
|
||||
return NULL;
|
||||
}
|
||||
|
@ -558,7 +558,7 @@ err_out:
|
|||
resource_no,
|
||||
macio_resource_len(dev, resource_no),
|
||||
macio_resource_start(dev, resource_no),
|
||||
dev->ofdev.dev.bus_id);
|
||||
dev_name(&dev->ofdev.dev));
|
||||
return -EBUSY;
|
||||
}
|
||||
|
||||
|
|
|
@ -385,8 +385,7 @@ static struct memstick_dev *memstick_alloc_card(struct memstick_host *host)
|
|||
|
||||
if (card) {
|
||||
card->host = host;
|
||||
snprintf(card->dev.bus_id, sizeof(card->dev.bus_id),
|
||||
"%s", host->dev.bus_id);
|
||||
dev_set_name(&card->dev, "%s", dev_name(&host->dev));
|
||||
card->dev.parent = &host->dev;
|
||||
card->dev.bus = &memstick_bus_type;
|
||||
card->dev.release = memstick_free_card;
|
||||
|
@ -519,7 +518,7 @@ int memstick_add_host(struct memstick_host *host)
|
|||
if (rc)
|
||||
return rc;
|
||||
|
||||
snprintf(host->dev.bus_id, BUS_ID_SIZE, "memstick%u", host->id);
|
||||
dev_set_name(&host->dev, "memstick%u", host->id);
|
||||
|
||||
rc = device_add(&host->dev);
|
||||
if (rc) {
|
||||
|
|
|
@ -887,14 +887,14 @@ try_again:
|
|||
if (rc) {
|
||||
printk(KERN_WARNING
|
||||
"%s: could not switch to 4-bit mode, error %d\n",
|
||||
card->dev.bus_id, rc);
|
||||
dev_name(&card->dev), rc);
|
||||
return 0;
|
||||
}
|
||||
|
||||
msb->system = MEMSTICK_SYS_PAR4;
|
||||
host->set_param(host, MEMSTICK_INTERFACE, MEMSTICK_PAR4);
|
||||
printk(KERN_INFO "%s: switching to 4-bit parallel mode\n",
|
||||
card->dev.bus_id);
|
||||
dev_name(&card->dev));
|
||||
|
||||
if (msb->caps & MEMSTICK_CAP_PAR8) {
|
||||
rc = mspro_block_set_interface(card, MEMSTICK_SYS_PAR8);
|
||||
|
@ -905,11 +905,11 @@ try_again:
|
|||
MEMSTICK_PAR8);
|
||||
printk(KERN_INFO
|
||||
"%s: switching to 8-bit parallel mode\n",
|
||||
card->dev.bus_id);
|
||||
dev_name(&card->dev));
|
||||
} else
|
||||
printk(KERN_WARNING
|
||||
"%s: could not switch to 8-bit mode, error %d\n",
|
||||
card->dev.bus_id, rc);
|
||||
dev_name(&card->dev), rc);
|
||||
}
|
||||
|
||||
card->next_request = h_mspro_block_req_init;
|
||||
|
@ -922,7 +922,7 @@ try_again:
|
|||
if (rc) {
|
||||
printk(KERN_WARNING
|
||||
"%s: interface error, trying to fall back to serial\n",
|
||||
card->dev.bus_id);
|
||||
dev_name(&card->dev));
|
||||
msb->system = MEMSTICK_SYS_SERIAL;
|
||||
host->set_param(host, MEMSTICK_POWER, MEMSTICK_POWER_OFF);
|
||||
msleep(10);
|
||||
|
@ -992,14 +992,14 @@ static int mspro_block_read_attributes(struct memstick_dev *card)
|
|||
|
||||
if (be16_to_cpu(attr->signature) != MSPRO_BLOCK_SIGNATURE) {
|
||||
printk(KERN_ERR "%s: unrecognized device signature %x\n",
|
||||
card->dev.bus_id, be16_to_cpu(attr->signature));
|
||||
dev_name(&card->dev), be16_to_cpu(attr->signature));
|
||||
rc = -ENODEV;
|
||||
goto out_free_attr;
|
||||
}
|
||||
|
||||
if (attr->count > MSPRO_BLOCK_MAX_ATTRIBUTES) {
|
||||
printk(KERN_WARNING "%s: way too many attribute entries\n",
|
||||
card->dev.bus_id);
|
||||
dev_name(&card->dev));
|
||||
attr_count = MSPRO_BLOCK_MAX_ATTRIBUTES;
|
||||
} else
|
||||
attr_count = attr->count;
|
||||
|
|
|
@ -546,7 +546,7 @@ static void tifm_ms_abort(unsigned long data)
|
|||
printk(KERN_ERR
|
||||
"%s : card failed to respond for a long period of time "
|
||||
"(%x, %x)\n",
|
||||
host->dev->dev.bus_id, host->req ? host->req->tpc : 0,
|
||||
dev_name(&host->dev->dev), host->req ? host->req->tpc : 0,
|
||||
host->cmd_flags);
|
||||
|
||||
tifm_eject(host->dev);
|
||||
|
@ -561,7 +561,7 @@ static int tifm_ms_probe(struct tifm_dev *sock)
|
|||
if (!(TIFM_SOCK_STATE_OCCUPIED
|
||||
& readl(sock->addr + SOCK_PRESENT_STATE))) {
|
||||
printk(KERN_WARNING "%s : card gone, unexpectedly\n",
|
||||
sock->dev.bus_id);
|
||||
dev_name(&sock->dev));
|
||||
return rc;
|
||||
}
|
||||
|
||||
|
|
|
@ -132,7 +132,7 @@ static void i2o_device_release(struct device *dev)
|
|||
{
|
||||
struct i2o_device *i2o_dev = to_i2o_device(dev);
|
||||
|
||||
pr_debug("i2o: device %s released\n", dev->bus_id);
|
||||
pr_debug("i2o: device %s released\n", dev_name(dev));
|
||||
|
||||
kfree(i2o_dev);
|
||||
}
|
||||
|
@ -227,8 +227,8 @@ static int i2o_device_add(struct i2o_controller *c, i2o_lct_entry *entry)
|
|||
|
||||
i2o_dev->lct_data = *entry;
|
||||
|
||||
snprintf(i2o_dev->device.bus_id, BUS_ID_SIZE, "%d:%03x", c->unit,
|
||||
i2o_dev->lct_data.tid);
|
||||
dev_set_name(&i2o_dev->device, "%d:%03x", c->unit,
|
||||
i2o_dev->lct_data.tid);
|
||||
|
||||
i2o_dev->iop = c;
|
||||
i2o_dev->device.parent = &c->device;
|
||||
|
@ -279,7 +279,7 @@ static int i2o_device_add(struct i2o_controller *c, i2o_lct_entry *entry)
|
|||
|
||||
i2o_driver_notify_device_add_all(i2o_dev);
|
||||
|
||||
pr_debug("i2o: device %s added\n", i2o_dev->device.bus_id);
|
||||
pr_debug("i2o: device %s added\n", dev_name(&i2o_dev->device));
|
||||
|
||||
return 0;
|
||||
|
||||
|
|
|
@ -1300,7 +1300,7 @@ static int i2o_seq_show_dev_name(struct seq_file *seq, void *v)
|
|||
{
|
||||
struct i2o_device *d = (struct i2o_device *)seq->private;
|
||||
|
||||
seq_printf(seq, "%s\n", d->device.bus_id);
|
||||
seq_printf(seq, "%s\n", dev_name(&d->device));
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -1072,7 +1072,7 @@ struct i2o_controller *i2o_iop_alloc(void)
|
|||
|
||||
c->device.release = &i2o_iop_release;
|
||||
|
||||
snprintf(c->device.bus_id, BUS_ID_SIZE, "iop%d", c->unit);
|
||||
dev_set_name(&c->device, "iop%d", c->unit);
|
||||
|
||||
#if BITS_PER_LONG == 64
|
||||
spin_lock_init(&c->context_list_lock);
|
||||
|
|
|
@ -29,7 +29,7 @@ static struct device_driver gru_driver = {
|
|||
};
|
||||
|
||||
static struct device gru_device = {
|
||||
.bus_id = {0},
|
||||
.init_name = "",
|
||||
.driver = &gru_driver,
|
||||
};
|
||||
|
||||
|
|
|
@ -25,7 +25,7 @@ struct device_driver xp_dbg_name = {
|
|||
};
|
||||
|
||||
struct device xp_dbg_subname = {
|
||||
.bus_id = {0}, /* set to "" */
|
||||
.init_name = "", /* set to "" */
|
||||
.driver = &xp_dbg_name
|
||||
};
|
||||
|
||||
|
|
|
@ -59,12 +59,12 @@ struct device_driver xpc_dbg_name = {
|
|||
};
|
||||
|
||||
struct device xpc_part_dbg_subname = {
|
||||
.bus_id = {0}, /* set to "part" at xpc_init() time */
|
||||
.init_name = "", /* set to "part" at xpc_init() time */
|
||||
.driver = &xpc_dbg_name
|
||||
};
|
||||
|
||||
struct device xpc_chan_dbg_subname = {
|
||||
.bus_id = {0}, /* set to "chan" at xpc_init() time */
|
||||
.init_name = "", /* set to "chan" at xpc_init() time */
|
||||
.driver = &xpc_dbg_name
|
||||
};
|
||||
|
||||
|
@ -1258,8 +1258,8 @@ xpc_init(void)
|
|||
int ret;
|
||||
struct task_struct *kthread;
|
||||
|
||||
snprintf(xpc_part->bus_id, BUS_ID_SIZE, "part");
|
||||
snprintf(xpc_chan->bus_id, BUS_ID_SIZE, "chan");
|
||||
dev_set_name(xpc_part, "part");
|
||||
dev_set_name(xpc_chan, "chan");
|
||||
|
||||
if (is_shub()) {
|
||||
/*
|
||||
|
|
|
@ -138,7 +138,7 @@ struct device_driver xpnet_dbg_name = {
|
|||
};
|
||||
|
||||
struct device xpnet_dbg_subname = {
|
||||
.bus_id = {0}, /* set to "" */
|
||||
.init_name = "", /* set to "" */
|
||||
.driver = &xpnet_dbg_name
|
||||
};
|
||||
|
||||
|
|
|
@ -164,7 +164,7 @@ static void tifm_7xx1_switch_media(struct work_struct *work)
|
|||
if (sock) {
|
||||
printk(KERN_INFO
|
||||
"%s : demand removing card from socket %u:%u\n",
|
||||
fm->dev.bus_id, fm->id, cnt);
|
||||
dev_name(&fm->dev), fm->id, cnt);
|
||||
fm->sockets[cnt] = NULL;
|
||||
sock_addr = sock->addr;
|
||||
spin_unlock_irqrestore(&fm->lock, flags);
|
||||
|
|
|
@ -203,7 +203,7 @@ int tifm_add_adapter(struct tifm_adapter *fm)
|
|||
if (rc)
|
||||
return rc;
|
||||
|
||||
snprintf(fm->dev.bus_id, BUS_ID_SIZE, "tifm%u", fm->id);
|
||||
dev_set_name(&fm->dev, "tifm%u", fm->id);
|
||||
rc = device_add(&fm->dev);
|
||||
if (rc) {
|
||||
spin_lock(&tifm_adapter_lock);
|
||||
|
@ -266,9 +266,8 @@ struct tifm_dev *tifm_alloc_device(struct tifm_adapter *fm, unsigned int id,
|
|||
sock->dev.dma_mask = fm->dev.parent->dma_mask;
|
||||
sock->dev.release = tifm_free_device;
|
||||
|
||||
snprintf(sock->dev.bus_id, BUS_ID_SIZE,
|
||||
"tifm_%s%u:%u", tifm_media_type_name(type, 2),
|
||||
fm->id, id);
|
||||
dev_set_name(&sock->dev, "tifm_%s%u:%u",
|
||||
tifm_media_type_name(type, 2), fm->id, id);
|
||||
printk(KERN_INFO DRIVER_NAME
|
||||
": %s card detected in socket %u:%u\n",
|
||||
tifm_media_type_name(type, 0), fm->id, id);
|
||||
|
|
|
@ -170,7 +170,7 @@ static int wait_till_ready(struct m25p *flash)
|
|||
static int erase_chip(struct m25p *flash)
|
||||
{
|
||||
DEBUG(MTD_DEBUG_LEVEL3, "%s: %s %dKiB\n",
|
||||
flash->spi->dev.bus_id, __func__,
|
||||
dev_name(&flash->spi->dev), __func__,
|
||||
flash->mtd.size / 1024);
|
||||
|
||||
/* Wait until finished previous write command. */
|
||||
|
@ -197,7 +197,7 @@ static int erase_chip(struct m25p *flash)
|
|||
static int erase_sector(struct m25p *flash, u32 offset)
|
||||
{
|
||||
DEBUG(MTD_DEBUG_LEVEL3, "%s: %s %dKiB at 0x%08x\n",
|
||||
flash->spi->dev.bus_id, __func__,
|
||||
dev_name(&flash->spi->dev), __func__,
|
||||
flash->mtd.erasesize / 1024, offset);
|
||||
|
||||
/* Wait until finished previous write command. */
|
||||
|
@ -234,7 +234,7 @@ static int m25p80_erase(struct mtd_info *mtd, struct erase_info *instr)
|
|||
u32 addr,len;
|
||||
|
||||
DEBUG(MTD_DEBUG_LEVEL2, "%s: %s %s 0x%08x, len %d\n",
|
||||
flash->spi->dev.bus_id, __func__, "at",
|
||||
dev_name(&flash->spi->dev), __func__, "at",
|
||||
(u32)instr->addr, instr->len);
|
||||
|
||||
/* sanity checks */
|
||||
|
@ -295,7 +295,7 @@ static int m25p80_read(struct mtd_info *mtd, loff_t from, size_t len,
|
|||
struct spi_message m;
|
||||
|
||||
DEBUG(MTD_DEBUG_LEVEL2, "%s: %s %s 0x%08x, len %zd\n",
|
||||
flash->spi->dev.bus_id, __func__, "from",
|
||||
dev_name(&flash->spi->dev), __func__, "from",
|
||||
(u32)from, len);
|
||||
|
||||
/* sanity checks */
|
||||
|
@ -367,7 +367,7 @@ static int m25p80_write(struct mtd_info *mtd, loff_t to, size_t len,
|
|||
struct spi_message m;
|
||||
|
||||
DEBUG(MTD_DEBUG_LEVEL2, "%s: %s %s 0x%08x, len %zd\n",
|
||||
flash->spi->dev.bus_id, __func__, "to",
|
||||
dev_name(&flash->spi->dev), __func__, "to",
|
||||
(u32)to, len);
|
||||
|
||||
if (retlen)
|
||||
|
@ -563,7 +563,7 @@ static struct flash_info *__devinit jedec_probe(struct spi_device *spi)
|
|||
tmp = spi_write_then_read(spi, &code, 1, id, 5);
|
||||
if (tmp < 0) {
|
||||
DEBUG(MTD_DEBUG_LEVEL0, "%s: error %d reading JEDEC ID\n",
|
||||
spi->dev.bus_id, tmp);
|
||||
dev_name(&spi->dev), tmp);
|
||||
return NULL;
|
||||
}
|
||||
jedec = id[0];
|
||||
|
@ -617,7 +617,7 @@ static int __devinit m25p_probe(struct spi_device *spi)
|
|||
/* unrecognized chip? */
|
||||
if (i == ARRAY_SIZE(m25p_data)) {
|
||||
DEBUG(MTD_DEBUG_LEVEL0, "%s: unrecognized id %s\n",
|
||||
spi->dev.bus_id, data->type);
|
||||
dev_name(&spi->dev), data->type);
|
||||
info = NULL;
|
||||
|
||||
/* recognized; is that chip really what's there? */
|
||||
|
@ -658,7 +658,7 @@ static int __devinit m25p_probe(struct spi_device *spi)
|
|||
if (data && data->name)
|
||||
flash->mtd.name = data->name;
|
||||
else
|
||||
flash->mtd.name = spi->dev.bus_id;
|
||||
flash->mtd.name = dev_name(&spi->dev);
|
||||
|
||||
flash->mtd.type = MTD_NORFLASH;
|
||||
flash->mtd.writesize = 1;
|
||||
|
|
|
@ -128,7 +128,7 @@ static int dataflash_waitready(struct spi_device *spi)
|
|||
status = dataflash_status(spi);
|
||||
if (status < 0) {
|
||||
DEBUG(MTD_DEBUG_LEVEL1, "%s: status %d?\n",
|
||||
spi->dev.bus_id, status);
|
||||
dev_name(&spi->dev), status);
|
||||
status = 0;
|
||||
}
|
||||
|
||||
|
@ -154,7 +154,7 @@ static int dataflash_erase(struct mtd_info *mtd, struct erase_info *instr)
|
|||
uint8_t *command;
|
||||
|
||||
DEBUG(MTD_DEBUG_LEVEL2, "%s: erase addr=0x%x len 0x%x\n",
|
||||
spi->dev.bus_id,
|
||||
dev_name(&spi->dev),
|
||||
instr->addr, instr->len);
|
||||
|
||||
/* Sanity checks */
|
||||
|
@ -197,7 +197,7 @@ static int dataflash_erase(struct mtd_info *mtd, struct erase_info *instr)
|
|||
|
||||
if (status < 0) {
|
||||
printk(KERN_ERR "%s: erase %x, err %d\n",
|
||||
spi->dev.bus_id, pageaddr, status);
|
||||
dev_name(&spi->dev), pageaddr, status);
|
||||
/* REVISIT: can retry instr->retries times; or
|
||||
* giveup and instr->fail_addr = instr->addr;
|
||||
*/
|
||||
|
@ -239,7 +239,7 @@ static int dataflash_read(struct mtd_info *mtd, loff_t from, size_t len,
|
|||
int status;
|
||||
|
||||
DEBUG(MTD_DEBUG_LEVEL2, "%s: read 0x%x..0x%x\n",
|
||||
priv->spi->dev.bus_id, (unsigned)from, (unsigned)(from + len));
|
||||
dev_name(&priv->spi->dev), (unsigned)from, (unsigned)(from + len));
|
||||
|
||||
*retlen = 0;
|
||||
|
||||
|
@ -288,7 +288,7 @@ static int dataflash_read(struct mtd_info *mtd, loff_t from, size_t len,
|
|||
status = 0;
|
||||
} else
|
||||
DEBUG(MTD_DEBUG_LEVEL1, "%s: read %x..%x --> %d\n",
|
||||
priv->spi->dev.bus_id,
|
||||
dev_name(&priv->spi->dev),
|
||||
(unsigned)from, (unsigned)(from + len),
|
||||
status);
|
||||
return status;
|
||||
|
@ -315,7 +315,7 @@ static int dataflash_write(struct mtd_info *mtd, loff_t to, size_t len,
|
|||
uint8_t *command;
|
||||
|
||||
DEBUG(MTD_DEBUG_LEVEL2, "%s: write 0x%x..0x%x\n",
|
||||
spi->dev.bus_id, (unsigned)to, (unsigned)(to + len));
|
||||
dev_name(&spi->dev), (unsigned)to, (unsigned)(to + len));
|
||||
|
||||
*retlen = 0;
|
||||
|
||||
|
@ -374,7 +374,7 @@ static int dataflash_write(struct mtd_info *mtd, loff_t to, size_t len,
|
|||
status = spi_sync(spi, &msg);
|
||||
if (status < 0)
|
||||
DEBUG(MTD_DEBUG_LEVEL1, "%s: xfer %u -> %d \n",
|
||||
spi->dev.bus_id, addr, status);
|
||||
dev_name(&spi->dev), addr, status);
|
||||
|
||||
(void) dataflash_waitready(priv->spi);
|
||||
}
|
||||
|
@ -396,7 +396,7 @@ static int dataflash_write(struct mtd_info *mtd, loff_t to, size_t len,
|
|||
spi_transfer_del(x + 1);
|
||||
if (status < 0)
|
||||
DEBUG(MTD_DEBUG_LEVEL1, "%s: pgm %u/%u -> %d \n",
|
||||
spi->dev.bus_id, addr, writelen, status);
|
||||
dev_name(&spi->dev), addr, writelen, status);
|
||||
|
||||
(void) dataflash_waitready(priv->spi);
|
||||
|
||||
|
@ -416,14 +416,14 @@ static int dataflash_write(struct mtd_info *mtd, loff_t to, size_t len,
|
|||
status = spi_sync(spi, &msg);
|
||||
if (status < 0)
|
||||
DEBUG(MTD_DEBUG_LEVEL1, "%s: compare %u -> %d \n",
|
||||
spi->dev.bus_id, addr, status);
|
||||
dev_name(&spi->dev), addr, status);
|
||||
|
||||
status = dataflash_waitready(priv->spi);
|
||||
|
||||
/* Check result of the compare operation */
|
||||
if (status & (1 << 6)) {
|
||||
printk(KERN_ERR "%s: compare page %u, err %d\n",
|
||||
spi->dev.bus_id, pageaddr, status);
|
||||
dev_name(&spi->dev), pageaddr, status);
|
||||
remaining = 0;
|
||||
status = -EIO;
|
||||
break;
|
||||
|
@ -779,7 +779,7 @@ static struct flash_info *__devinit jedec_probe(struct spi_device *spi)
|
|||
tmp = spi_write_then_read(spi, &code, 1, id, 3);
|
||||
if (tmp < 0) {
|
||||
DEBUG(MTD_DEBUG_LEVEL0, "%s: error %d reading JEDEC ID\n",
|
||||
spi->dev.bus_id, tmp);
|
||||
dev_name(&spi->dev), tmp);
|
||||
return ERR_PTR(tmp);
|
||||
}
|
||||
if (id[0] != 0x1f)
|
||||
|
@ -869,7 +869,7 @@ static int __devinit dataflash_probe(struct spi_device *spi)
|
|||
status = dataflash_status(spi);
|
||||
if (status <= 0 || status == 0xff) {
|
||||
DEBUG(MTD_DEBUG_LEVEL1, "%s: status error %d\n",
|
||||
spi->dev.bus_id, status);
|
||||
dev_name(&spi->dev), status);
|
||||
if (status == 0 || status == 0xff)
|
||||
status = -ENODEV;
|
||||
return status;
|
||||
|
@ -905,13 +905,13 @@ static int __devinit dataflash_probe(struct spi_device *spi)
|
|||
/* obsolete AT45DB1282 not (yet?) supported */
|
||||
default:
|
||||
DEBUG(MTD_DEBUG_LEVEL1, "%s: unsupported device (%x)\n",
|
||||
spi->dev.bus_id, status & 0x3c);
|
||||
dev_name(&spi->dev), status & 0x3c);
|
||||
status = -ENODEV;
|
||||
}
|
||||
|
||||
if (status < 0)
|
||||
DEBUG(MTD_DEBUG_LEVEL1, "%s: add_dataflash --> %d\n",
|
||||
spi->dev.bus_id, status);
|
||||
dev_name(&spi->dev), status);
|
||||
|
||||
return status;
|
||||
}
|
||||
|
@ -921,7 +921,7 @@ static int __devexit dataflash_remove(struct spi_device *spi)
|
|||
struct dataflash *flash = dev_get_drvdata(&spi->dev);
|
||||
int status;
|
||||
|
||||
DEBUG(MTD_DEBUG_LEVEL1, "%s: remove\n", spi->dev.bus_id);
|
||||
DEBUG(MTD_DEBUG_LEVEL1, "%s: remove\n", dev_name(&spi->dev));
|
||||
|
||||
if (mtd_has_partitions() && flash->partitioned)
|
||||
status = del_mtd_partitions(&flash->mtd);
|
||||
|
|
|
@ -105,7 +105,7 @@ static int armflash_probe(struct platform_device *dev)
|
|||
info->map.bankwidth = plat->width;
|
||||
info->map.phys = res->start;
|
||||
info->map.virt = base;
|
||||
info->map.name = dev->dev.bus_id;
|
||||
info->map.name = dev_name(&dev->dev);
|
||||
info->map.set_vpp = armflash_set_vpp;
|
||||
|
||||
simple_map_init(&info->map);
|
||||
|
|
|
@ -188,7 +188,7 @@ static int ixp2000_flash_probe(struct platform_device *dev)
|
|||
*/
|
||||
info->map.map_priv_2 = (unsigned long) ixp_data->bank_setup;
|
||||
|
||||
info->map.name = dev->dev.bus_id;
|
||||
info->map.name = dev_name(&dev->dev);
|
||||
info->map.read = ixp2000_flash_read8;
|
||||
info->map.write = ixp2000_flash_write8;
|
||||
info->map.copy_from = ixp2000_flash_copy_from;
|
||||
|
@ -196,7 +196,7 @@ static int ixp2000_flash_probe(struct platform_device *dev)
|
|||
|
||||
info->res = request_mem_region(dev->resource->start,
|
||||
dev->resource->end - dev->resource->start + 1,
|
||||
dev->dev.bus_id);
|
||||
dev_name(&dev->dev));
|
||||
if (!info->res) {
|
||||
dev_err(&dev->dev, "Could not reserve memory region\n");
|
||||
err = -ENOMEM;
|
||||
|
|
|
@ -218,7 +218,7 @@ static int ixp4xx_flash_probe(struct platform_device *dev)
|
|||
* handle that.
|
||||
*/
|
||||
info->map.bankwidth = 2;
|
||||
info->map.name = dev->dev.bus_id;
|
||||
info->map.name = dev_name(&dev->dev);
|
||||
info->map.read = ixp4xx_read16,
|
||||
info->map.write = ixp4xx_probe_write16,
|
||||
info->map.copy_from = ixp4xx_copy_from,
|
||||
|
|
|
@ -101,7 +101,7 @@ static int __init omapflash_probe(struct platform_device *pdev)
|
|||
err = -ENOMEM;
|
||||
goto out_release_mem_region;
|
||||
}
|
||||
info->map.name = pdev->dev.bus_id;
|
||||
info->map.name = dev_name(&pdev->dev);
|
||||
info->map.phys = res->start;
|
||||
info->map.size = size;
|
||||
info->map.bankwidth = pdata->width;
|
||||
|
|
|
@ -108,13 +108,13 @@ static int physmap_flash_probe(struct platform_device *dev)
|
|||
if (!devm_request_mem_region(&dev->dev,
|
||||
dev->resource[i].start,
|
||||
dev->resource[i].end - dev->resource[i].start + 1,
|
||||
dev->dev.bus_id)) {
|
||||
dev_name(&dev->dev))) {
|
||||
dev_err(&dev->dev, "Could not reserve memory region\n");
|
||||
err = -ENOMEM;
|
||||
goto err_out;
|
||||
}
|
||||
|
||||
info->map[i].name = dev->dev.bus_id;
|
||||
info->map[i].name = dev_name(&dev->dev);
|
||||
info->map[i].phys = dev->resource[i].start;
|
||||
info->map[i].size = dev->resource[i].end - dev->resource[i].start + 1;
|
||||
info->map[i].bankwidth = physmap_data->width;
|
||||
|
@ -150,7 +150,7 @@ static int physmap_flash_probe(struct platform_device *dev)
|
|||
* We detected multiple devices. Concatenate them together.
|
||||
*/
|
||||
#ifdef CONFIG_MTD_CONCAT
|
||||
info->cmtd = mtd_concat_create(info->mtd, devices_found, dev->dev.bus_id);
|
||||
info->cmtd = mtd_concat_create(info->mtd, devices_found, dev_name(&dev->dev));
|
||||
if (info->cmtd == NULL)
|
||||
err = -ENXIO;
|
||||
#else
|
||||
|
|
|
@ -183,7 +183,7 @@ static int __devinit of_flash_probe(struct of_device *dev,
|
|||
|
||||
err = -EBUSY;
|
||||
info->res = request_mem_region(res.start, res.end - res.start + 1,
|
||||
dev->dev.bus_id);
|
||||
dev_name(&dev->dev));
|
||||
if (!info->res)
|
||||
goto err_out;
|
||||
|
||||
|
@ -194,7 +194,7 @@ static int __devinit of_flash_probe(struct of_device *dev,
|
|||
goto err_out;
|
||||
}
|
||||
|
||||
info->map.name = dev->dev.bus_id;
|
||||
info->map.name = dev_name(&dev->dev);
|
||||
info->map.phys = res.start;
|
||||
info->map.size = res.end - res.start + 1;
|
||||
info->map.bankwidth = *width;
|
||||
|
|
|
@ -691,7 +691,7 @@ static int concat_block_markbad(struct mtd_info *mtd, loff_t ofs)
|
|||
*/
|
||||
struct mtd_info *mtd_concat_create(struct mtd_info *subdev[], /* subdevices to concatenate */
|
||||
int num_devs, /* number of subdevices */
|
||||
char *name)
|
||||
const char *name)
|
||||
{ /* name for the new device */
|
||||
int i;
|
||||
size_t size;
|
||||
|
|
|
@ -222,7 +222,7 @@ static int __devinit fun_probe(struct of_device *ofdev,
|
|||
|
||||
fun->rnb_gpio = of_get_gpio(ofdev->node, 0);
|
||||
if (fun->rnb_gpio >= 0) {
|
||||
ret = gpio_request(fun->rnb_gpio, ofdev->dev.bus_id);
|
||||
ret = gpio_request(fun->rnb_gpio, dev_name(&ofdev->dev));
|
||||
if (ret) {
|
||||
dev_err(&ofdev->dev, "can't request RNB gpio\n");
|
||||
goto err2;
|
||||
|
|
|
@ -54,7 +54,7 @@ static int __init plat_nand_probe(struct platform_device *pdev)
|
|||
data->chip.priv = &data;
|
||||
data->mtd.priv = &data->chip;
|
||||
data->mtd.owner = THIS_MODULE;
|
||||
data->mtd.name = pdev->dev.bus_id;
|
||||
data->mtd.name = dev_name(&pdev->dev);
|
||||
|
||||
data->chip.IO_ADDR_R = data->io_base;
|
||||
data->chip.IO_ADDR_W = data->io_base;
|
||||
|
|
|
@ -433,7 +433,7 @@ static int tmio_probe(struct platform_device *dev)
|
|||
nand_chip->chip_delay = 15;
|
||||
|
||||
retval = request_irq(irq, &tmio_irq,
|
||||
IRQF_DISABLED, dev->dev.bus_id, tmio);
|
||||
IRQF_DISABLED, dev_name(&dev->dev), tmio);
|
||||
if (retval) {
|
||||
dev_err(&dev->dev, "request_irq error %d\n", retval);
|
||||
goto err_irq;
|
||||
|
|
|
@ -63,7 +63,7 @@ static int __devinit generic_onenand_probe(struct device *dev)
|
|||
info->onenand.mmcontrol = pdata->mmcontrol;
|
||||
info->onenand.irq = platform_get_irq(pdev, 0);
|
||||
|
||||
info->mtd.name = pdev->dev.bus_id;
|
||||
info->mtd.name = dev_name(&pdev->dev);
|
||||
info->mtd.priv = &info->onenand;
|
||||
info->mtd.owner = THIS_MODULE;
|
||||
|
||||
|
|
|
@ -668,7 +668,7 @@ static int __devinit omap2_onenand_probe(struct platform_device *pdev)
|
|||
c->onenand.base);
|
||||
|
||||
c->pdev = pdev;
|
||||
c->mtd.name = pdev->dev.bus_id;
|
||||
c->mtd.name = dev_name(&pdev->dev);
|
||||
c->mtd.priv = &c->onenand;
|
||||
c->mtd.owner = THIS_MODULE;
|
||||
|
||||
|
|
|
@ -280,7 +280,7 @@ static int ubi_sysfs_init(struct ubi_device *ubi)
|
|||
ubi->dev.release = dev_release;
|
||||
ubi->dev.devt = ubi->cdev.dev;
|
||||
ubi->dev.class = ubi_class;
|
||||
sprintf(&ubi->dev.bus_id[0], UBI_NAME_STR"%d", ubi->ubi_num);
|
||||
dev_set_name(&ubi->dev, UBI_NAME_STR"%d", ubi->ubi_num);
|
||||
err = device_register(&ubi->dev);
|
||||
if (err)
|
||||
return err;
|
||||
|
|
|
@ -329,7 +329,7 @@ int ubi_create_volume(struct ubi_device *ubi, struct ubi_mkvol_req *req)
|
|||
vol->dev.devt = dev;
|
||||
vol->dev.class = ubi_class;
|
||||
|
||||
sprintf(&vol->dev.bus_id[0], "%s_%d", ubi->ubi_name, vol->vol_id);
|
||||
dev_set_name(&vol->dev, "%s_%d", ubi->ubi_name, vol->vol_id);
|
||||
err = device_register(&vol->dev);
|
||||
if (err) {
|
||||
ubi_err("cannot register device");
|
||||
|
@ -678,7 +678,7 @@ int ubi_add_volume(struct ubi_device *ubi, struct ubi_volume *vol)
|
|||
vol->dev.parent = &ubi->dev;
|
||||
vol->dev.devt = dev;
|
||||
vol->dev.class = ubi_class;
|
||||
sprintf(&vol->dev.bus_id[0], "%s_%d", ubi->ubi_name, vol->vol_id);
|
||||
dev_set_name(&vol->dev, "%s_%d", ubi->ubi_name, vol->vol_id);
|
||||
err = device_register(&vol->dev);
|
||||
if (err)
|
||||
goto out_gluebi;
|
||||
|
|
|
@ -300,6 +300,14 @@ static void pci_device_shutdown(struct device *dev)
|
|||
|
||||
#ifdef CONFIG_PM_SLEEP
|
||||
|
||||
static bool pci_has_legacy_pm_support(struct pci_dev *pci_dev)
|
||||
{
|
||||
struct pci_driver *drv = pci_dev->driver;
|
||||
|
||||
return drv && (drv->suspend || drv->suspend_late || drv->resume
|
||||
|| drv->resume_early);
|
||||
}
|
||||
|
||||
/*
|
||||
* Default "suspend" method for devices that have no driver provided suspend,
|
||||
* or not even a driver at all.
|
||||
|
@ -317,14 +325,22 @@ static void pci_default_pm_suspend(struct pci_dev *pci_dev)
|
|||
|
||||
/*
|
||||
* Default "resume" method for devices that have no driver provided resume,
|
||||
* or not even a driver at all.
|
||||
* or not even a driver at all (first part).
|
||||
*/
|
||||
static int pci_default_pm_resume(struct pci_dev *pci_dev)
|
||||
static void pci_default_pm_resume_early(struct pci_dev *pci_dev)
|
||||
{
|
||||
int retval = 0;
|
||||
|
||||
/* restore the PCI config space */
|
||||
pci_restore_state(pci_dev);
|
||||
}
|
||||
|
||||
/*
|
||||
* Default "resume" method for devices that have no driver provided resume,
|
||||
* or not even a driver at all (second part).
|
||||
*/
|
||||
static int pci_default_pm_resume_late(struct pci_dev *pci_dev)
|
||||
{
|
||||
int retval;
|
||||
|
||||
/* if the device was enabled before suspend, reenable */
|
||||
retval = pci_reenable_device(pci_dev);
|
||||
/*
|
||||
|
@ -371,10 +387,12 @@ static int pci_legacy_resume(struct device *dev)
|
|||
struct pci_dev * pci_dev = to_pci_dev(dev);
|
||||
struct pci_driver * drv = pci_dev->driver;
|
||||
|
||||
if (drv && drv->resume)
|
||||
if (drv && drv->resume) {
|
||||
error = drv->resume(pci_dev);
|
||||
else
|
||||
error = pci_default_pm_resume(pci_dev);
|
||||
} else {
|
||||
pci_default_pm_resume_early(pci_dev);
|
||||
error = pci_default_pm_resume_late(pci_dev);
|
||||
}
|
||||
return error;
|
||||
}
|
||||
|
||||
|
@ -420,10 +438,8 @@ static int pci_pm_suspend(struct device *dev)
|
|||
if (drv->pm->suspend) {
|
||||
error = drv->pm->suspend(dev);
|
||||
suspend_report_result(drv->pm->suspend, error);
|
||||
} else {
|
||||
pci_default_pm_suspend(pci_dev);
|
||||
}
|
||||
} else {
|
||||
} else if (pci_has_legacy_pm_support(pci_dev)) {
|
||||
error = pci_legacy_suspend(dev, PMSG_SUSPEND);
|
||||
}
|
||||
pci_fixup_device(pci_fixup_suspend, pci_dev);
|
||||
|
@ -434,7 +450,7 @@ static int pci_pm_suspend(struct device *dev)
|
|||
static int pci_pm_suspend_noirq(struct device *dev)
|
||||
{
|
||||
struct pci_dev *pci_dev = to_pci_dev(dev);
|
||||
struct pci_driver *drv = pci_dev->driver;
|
||||
struct device_driver *drv = dev->driver;
|
||||
int error = 0;
|
||||
|
||||
if (drv && drv->pm) {
|
||||
|
@ -442,8 +458,10 @@ static int pci_pm_suspend_noirq(struct device *dev)
|
|||
error = drv->pm->suspend_noirq(dev);
|
||||
suspend_report_result(drv->pm->suspend_noirq, error);
|
||||
}
|
||||
} else {
|
||||
} else if (pci_has_legacy_pm_support(pci_dev)) {
|
||||
error = pci_legacy_suspend_late(dev, PMSG_SUSPEND);
|
||||
} else {
|
||||
pci_default_pm_suspend(pci_dev);
|
||||
}
|
||||
|
||||
return error;
|
||||
|
@ -453,15 +471,17 @@ static int pci_pm_resume(struct device *dev)
|
|||
{
|
||||
struct pci_dev *pci_dev = to_pci_dev(dev);
|
||||
struct device_driver *drv = dev->driver;
|
||||
int error;
|
||||
int error = 0;
|
||||
|
||||
pci_fixup_device(pci_fixup_resume, pci_dev);
|
||||
|
||||
if (drv && drv->pm) {
|
||||
error = drv->pm->resume ? drv->pm->resume(dev) :
|
||||
pci_default_pm_resume(pci_dev);
|
||||
} else {
|
||||
if (drv->pm->resume)
|
||||
error = drv->pm->resume(dev);
|
||||
} else if (pci_has_legacy_pm_support(pci_dev)) {
|
||||
error = pci_legacy_resume(dev);
|
||||
} else {
|
||||
error = pci_default_pm_resume_late(pci_dev);
|
||||
}
|
||||
|
||||
return error;
|
||||
|
@ -470,16 +490,18 @@ static int pci_pm_resume(struct device *dev)
|
|||
static int pci_pm_resume_noirq(struct device *dev)
|
||||
{
|
||||
struct pci_dev *pci_dev = to_pci_dev(dev);
|
||||
struct pci_driver *drv = pci_dev->driver;
|
||||
struct device_driver *drv = dev->driver;
|
||||
int error = 0;
|
||||
|
||||
pci_fixup_device(pci_fixup_resume_early, pci_dev);
|
||||
pci_fixup_device(pci_fixup_resume_early, to_pci_dev(dev));
|
||||
|
||||
if (drv && drv->pm) {
|
||||
if (drv->pm->resume_noirq)
|
||||
error = drv->pm->resume_noirq(dev);
|
||||
} else {
|
||||
} else if (pci_has_legacy_pm_support(pci_dev)) {
|
||||
error = pci_legacy_resume_early(dev);
|
||||
} else {
|
||||
pci_default_pm_resume_early(pci_dev);
|
||||
}
|
||||
|
||||
return error;
|
||||
|
@ -506,10 +528,8 @@ static int pci_pm_freeze(struct device *dev)
|
|||
if (drv->pm->freeze) {
|
||||
error = drv->pm->freeze(dev);
|
||||
suspend_report_result(drv->pm->freeze, error);
|
||||
} else {
|
||||
pci_default_pm_suspend(pci_dev);
|
||||
}
|
||||
} else {
|
||||
} else if (pci_has_legacy_pm_support(pci_dev)) {
|
||||
error = pci_legacy_suspend(dev, PMSG_FREEZE);
|
||||
pci_fixup_device(pci_fixup_suspend, pci_dev);
|
||||
}
|
||||
|
@ -520,7 +540,7 @@ static int pci_pm_freeze(struct device *dev)
|
|||
static int pci_pm_freeze_noirq(struct device *dev)
|
||||
{
|
||||
struct pci_dev *pci_dev = to_pci_dev(dev);
|
||||
struct pci_driver *drv = pci_dev->driver;
|
||||
struct device_driver *drv = dev->driver;
|
||||
int error = 0;
|
||||
|
||||
if (drv && drv->pm) {
|
||||
|
@ -528,8 +548,10 @@ static int pci_pm_freeze_noirq(struct device *dev)
|
|||
error = drv->pm->freeze_noirq(dev);
|
||||
suspend_report_result(drv->pm->freeze_noirq, error);
|
||||
}
|
||||
} else {
|
||||
} else if (pci_has_legacy_pm_support(pci_dev)) {
|
||||
error = pci_legacy_suspend_late(dev, PMSG_FREEZE);
|
||||
} else {
|
||||
pci_default_pm_suspend(pci_dev);
|
||||
}
|
||||
|
||||
return error;
|
||||
|
@ -537,14 +559,15 @@ static int pci_pm_freeze_noirq(struct device *dev)
|
|||
|
||||
static int pci_pm_thaw(struct device *dev)
|
||||
{
|
||||
struct pci_dev *pci_dev = to_pci_dev(dev);
|
||||
struct device_driver *drv = dev->driver;
|
||||
int error = 0;
|
||||
|
||||
if (drv && drv->pm) {
|
||||
if (drv->pm->thaw)
|
||||
error = drv->pm->thaw(dev);
|
||||
} else {
|
||||
pci_fixup_device(pci_fixup_resume, to_pci_dev(dev));
|
||||
} else if (pci_has_legacy_pm_support(pci_dev)) {
|
||||
pci_fixup_device(pci_fixup_resume, pci_dev);
|
||||
error = pci_legacy_resume(dev);
|
||||
}
|
||||
|
||||
|
@ -554,14 +577,14 @@ static int pci_pm_thaw(struct device *dev)
|
|||
static int pci_pm_thaw_noirq(struct device *dev)
|
||||
{
|
||||
struct pci_dev *pci_dev = to_pci_dev(dev);
|
||||
struct pci_driver *drv = pci_dev->driver;
|
||||
struct device_driver *drv = dev->driver;
|
||||
int error = 0;
|
||||
|
||||
if (drv && drv->pm) {
|
||||
if (drv->pm->thaw_noirq)
|
||||
error = drv->pm->thaw_noirq(dev);
|
||||
} else {
|
||||
pci_fixup_device(pci_fixup_resume_early, pci_dev);
|
||||
} else if (pci_has_legacy_pm_support(pci_dev)) {
|
||||
pci_fixup_device(pci_fixup_resume_early, to_pci_dev(dev));
|
||||
error = pci_legacy_resume_early(dev);
|
||||
}
|
||||
|
||||
|
@ -570,17 +593,18 @@ static int pci_pm_thaw_noirq(struct device *dev)
|
|||
|
||||
static int pci_pm_poweroff(struct device *dev)
|
||||
{
|
||||
struct pci_dev *pci_dev = to_pci_dev(dev);
|
||||
struct device_driver *drv = dev->driver;
|
||||
int error = 0;
|
||||
|
||||
pci_fixup_device(pci_fixup_suspend, to_pci_dev(dev));
|
||||
pci_fixup_device(pci_fixup_suspend, pci_dev);
|
||||
|
||||
if (drv && drv->pm) {
|
||||
if (drv->pm->poweroff) {
|
||||
error = drv->pm->poweroff(dev);
|
||||
suspend_report_result(drv->pm->poweroff, error);
|
||||
}
|
||||
} else {
|
||||
} else if (pci_has_legacy_pm_support(pci_dev)) {
|
||||
error = pci_legacy_suspend(dev, PMSG_HIBERNATE);
|
||||
}
|
||||
|
||||
|
@ -589,8 +613,7 @@ static int pci_pm_poweroff(struct device *dev)
|
|||
|
||||
static int pci_pm_poweroff_noirq(struct device *dev)
|
||||
{
|
||||
struct pci_dev *pci_dev = to_pci_dev(dev);
|
||||
struct pci_driver *drv = pci_dev->driver;
|
||||
struct device_driver *drv = dev->driver;
|
||||
int error = 0;
|
||||
|
||||
if (drv && drv->pm) {
|
||||
|
@ -598,7 +621,7 @@ static int pci_pm_poweroff_noirq(struct device *dev)
|
|||
error = drv->pm->poweroff_noirq(dev);
|
||||
suspend_report_result(drv->pm->poweroff_noirq, error);
|
||||
}
|
||||
} else {
|
||||
} else if (pci_has_legacy_pm_support(to_pci_dev(dev))) {
|
||||
error = pci_legacy_suspend_late(dev, PMSG_HIBERNATE);
|
||||
}
|
||||
|
||||
|
@ -609,13 +632,15 @@ static int pci_pm_restore(struct device *dev)
|
|||
{
|
||||
struct pci_dev *pci_dev = to_pci_dev(dev);
|
||||
struct device_driver *drv = dev->driver;
|
||||
int error;
|
||||
int error = 0;
|
||||
|
||||
if (drv && drv->pm) {
|
||||
error = drv->pm->restore ? drv->pm->restore(dev) :
|
||||
pci_default_pm_resume(pci_dev);
|
||||
} else {
|
||||
if (drv->pm->restore)
|
||||
error = drv->pm->restore(dev);
|
||||
} else if (pci_has_legacy_pm_support(pci_dev)) {
|
||||
error = pci_legacy_resume(dev);
|
||||
} else {
|
||||
error = pci_default_pm_resume_late(pci_dev);
|
||||
}
|
||||
pci_fixup_device(pci_fixup_resume, pci_dev);
|
||||
|
||||
|
@ -625,7 +650,7 @@ static int pci_pm_restore(struct device *dev)
|
|||
static int pci_pm_restore_noirq(struct device *dev)
|
||||
{
|
||||
struct pci_dev *pci_dev = to_pci_dev(dev);
|
||||
struct pci_driver *drv = pci_dev->driver;
|
||||
struct device_driver *drv = dev->driver;
|
||||
int error = 0;
|
||||
|
||||
pci_fixup_device(pci_fixup_resume, pci_dev);
|
||||
|
@ -633,8 +658,10 @@ static int pci_pm_restore_noirq(struct device *dev)
|
|||
if (drv && drv->pm) {
|
||||
if (drv->pm->restore_noirq)
|
||||
error = drv->pm->restore_noirq(dev);
|
||||
} else {
|
||||
} else if (pci_has_legacy_pm_support(pci_dev)) {
|
||||
error = pci_legacy_resume_early(dev);
|
||||
} else {
|
||||
pci_default_pm_resume_early(pci_dev);
|
||||
}
|
||||
pci_fixup_device(pci_fixup_resume_early, pci_dev);
|
||||
|
||||
|
@ -654,17 +681,15 @@ static int pci_pm_restore_noirq(struct device *dev)
|
|||
|
||||
#endif /* !CONFIG_HIBERNATION */
|
||||
|
||||
struct pm_ext_ops pci_pm_ops = {
|
||||
.base = {
|
||||
.prepare = pci_pm_prepare,
|
||||
.complete = pci_pm_complete,
|
||||
.suspend = pci_pm_suspend,
|
||||
.resume = pci_pm_resume,
|
||||
.freeze = pci_pm_freeze,
|
||||
.thaw = pci_pm_thaw,
|
||||
.poweroff = pci_pm_poweroff,
|
||||
.restore = pci_pm_restore,
|
||||
},
|
||||
struct dev_pm_ops pci_dev_pm_ops = {
|
||||
.prepare = pci_pm_prepare,
|
||||
.complete = pci_pm_complete,
|
||||
.suspend = pci_pm_suspend,
|
||||
.resume = pci_pm_resume,
|
||||
.freeze = pci_pm_freeze,
|
||||
.thaw = pci_pm_thaw,
|
||||
.poweroff = pci_pm_poweroff,
|
||||
.restore = pci_pm_restore,
|
||||
.suspend_noirq = pci_pm_suspend_noirq,
|
||||
.resume_noirq = pci_pm_resume_noirq,
|
||||
.freeze_noirq = pci_pm_freeze_noirq,
|
||||
|
@ -673,7 +698,7 @@ struct pm_ext_ops pci_pm_ops = {
|
|||
.restore_noirq = pci_pm_restore_noirq,
|
||||
};
|
||||
|
||||
#define PCI_PM_OPS_PTR &pci_pm_ops
|
||||
#define PCI_PM_OPS_PTR (&pci_dev_pm_ops)
|
||||
|
||||
#else /* !CONFIG_PM_SLEEP */
|
||||
|
||||
|
@ -703,9 +728,6 @@ int __pci_register_driver(struct pci_driver *drv, struct module *owner,
|
|||
drv->driver.owner = owner;
|
||||
drv->driver.mod_name = mod_name;
|
||||
|
||||
if (drv->pm)
|
||||
drv->driver.pm = &drv->pm->base;
|
||||
|
||||
spin_lock_init(&drv->dynids.lock);
|
||||
INIT_LIST_HEAD(&drv->dynids.list);
|
||||
|
||||
|
|
|
@ -165,8 +165,7 @@ struct pnp_card *pnp_alloc_card(struct pnp_protocol *protocol, int id, char *pnp
|
|||
card->number = id;
|
||||
|
||||
card->dev.parent = &card->protocol->dev;
|
||||
sprintf(card->dev.bus_id, "%02x:%02x", card->protocol->number,
|
||||
card->number);
|
||||
dev_set_name(&card->dev, "%02x:%02x", card->protocol->number, card->number);
|
||||
|
||||
card->dev.coherent_dma_mask = DMA_24BIT_MASK;
|
||||
card->dev.dma_mask = &card->dev.coherent_dma_mask;
|
||||
|
@ -295,8 +294,8 @@ int pnp_add_card_device(struct pnp_card *card, struct pnp_dev *dev)
|
|||
{
|
||||
dev->dev.parent = &card->dev;
|
||||
dev->card_link = NULL;
|
||||
snprintf(dev->dev.bus_id, BUS_ID_SIZE, "%02x:%02x.%02x",
|
||||
dev->protocol->number, card->number, dev->number);
|
||||
dev_set_name(&dev->dev, "%02x:%02x.%02x",
|
||||
dev->protocol->number, card->number, dev->number);
|
||||
spin_lock(&pnp_lock);
|
||||
dev->card = card;
|
||||
list_add_tail(&dev->card_list, &card->devices);
|
||||
|
|
|
@ -70,7 +70,7 @@ int pnp_register_protocol(struct pnp_protocol *protocol)
|
|||
spin_unlock(&pnp_lock);
|
||||
|
||||
protocol->number = nodenum;
|
||||
sprintf(protocol->dev.bus_id, "pnp%d", nodenum);
|
||||
dev_set_name(&protocol->dev, "pnp%d", nodenum);
|
||||
return device_register(&protocol->dev);
|
||||
}
|
||||
|
||||
|
@ -145,8 +145,7 @@ struct pnp_dev *pnp_alloc_dev(struct pnp_protocol *protocol, int id, char *pnpid
|
|||
dev->dev.coherent_dma_mask = dev->dma_mask;
|
||||
dev->dev.release = &pnp_release_device;
|
||||
|
||||
sprintf(dev->dev.bus_id, "%02x:%02x", dev->protocol->number,
|
||||
dev->number);
|
||||
dev_set_name(&dev->dev, "%02x:%02x", dev->protocol->number, dev->number);
|
||||
|
||||
dev_id = pnp_add_id(dev, pnpid);
|
||||
if (!dev_id) {
|
||||
|
|
|
@ -26,7 +26,7 @@ static void reserve_range(struct pnp_dev *dev, resource_size_t start,
|
|||
resource_size_t end, int port)
|
||||
{
|
||||
char *regionid;
|
||||
const char *pnpid = dev->dev.bus_id;
|
||||
const char *pnpid = dev_name(&dev->dev);
|
||||
struct resource *res;
|
||||
|
||||
regionid = kmalloc(16, GFP_KERNEL);
|
||||
|
|
|
@ -354,7 +354,7 @@ static int ds2760_battery_probe(struct platform_device *pdev)
|
|||
pdata = pdev->dev.platform_data;
|
||||
di->dev = &pdev->dev;
|
||||
di->w1_dev = pdev->dev.parent;
|
||||
di->bat.name = pdev->dev.bus_id;
|
||||
di->bat.name = dev_name(&pdev->dev);
|
||||
di->bat.type = POWER_SUPPLY_TYPE_BATTERY;
|
||||
di->bat.properties = ds2760_battery_props;
|
||||
di->bat.num_properties = ARRAY_SIZE(ds2760_battery_props);
|
||||
|
@ -371,7 +371,7 @@ static int ds2760_battery_probe(struct platform_device *pdev)
|
|||
}
|
||||
|
||||
INIT_DELAYED_WORK(&di->monitor_work, ds2760_battery_work);
|
||||
di->monitor_wqueue = create_singlethread_workqueue(pdev->dev.bus_id);
|
||||
di->monitor_wqueue = create_singlethread_workqueue(dev_name(&pdev->dev));
|
||||
if (!di->monitor_wqueue) {
|
||||
retval = -ESRCH;
|
||||
goto workqueue_failed;
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
|
||||
CFLAGS_sysinfo.o += -Iinclude/math-emu -Iarch/s390/math-emu -w
|
||||
|
||||
obj-y += s390mach.o sysinfo.o s390_rdev.o
|
||||
obj-y += s390mach.o sysinfo.o
|
||||
obj-y += cio/ block/ char/ crypto/ net/ scsi/ kvm/
|
||||
|
||||
drivers-y += drivers/s390/built-in.o
|
||||
|
|
|
@ -18,7 +18,6 @@
|
|||
#include <asm/io.h>
|
||||
#include <linux/completion.h>
|
||||
#include <linux/interrupt.h>
|
||||
#include <asm/s390_rdev.h>
|
||||
|
||||
#define DCSSBLK_NAME "dcssblk"
|
||||
#define DCSSBLK_MINORS_PER_DISK 1
|
||||
|
@ -946,7 +945,7 @@ dcssblk_check_params(void)
|
|||
static void __exit
|
||||
dcssblk_exit(void)
|
||||
{
|
||||
s390_root_dev_unregister(dcssblk_root_dev);
|
||||
root_device_unregister(dcssblk_root_dev);
|
||||
unregister_blkdev(dcssblk_major, DCSSBLK_NAME);
|
||||
}
|
||||
|
||||
|
@ -955,22 +954,22 @@ dcssblk_init(void)
|
|||
{
|
||||
int rc;
|
||||
|
||||
dcssblk_root_dev = s390_root_dev_register("dcssblk");
|
||||
dcssblk_root_dev = root_device_register("dcssblk");
|
||||
if (IS_ERR(dcssblk_root_dev))
|
||||
return PTR_ERR(dcssblk_root_dev);
|
||||
rc = device_create_file(dcssblk_root_dev, &dev_attr_add);
|
||||
if (rc) {
|
||||
s390_root_dev_unregister(dcssblk_root_dev);
|
||||
root_device_unregister(dcssblk_root_dev);
|
||||
return rc;
|
||||
}
|
||||
rc = device_create_file(dcssblk_root_dev, &dev_attr_remove);
|
||||
if (rc) {
|
||||
s390_root_dev_unregister(dcssblk_root_dev);
|
||||
root_device_unregister(dcssblk_root_dev);
|
||||
return rc;
|
||||
}
|
||||
rc = register_blkdev(0, DCSSBLK_NAME);
|
||||
if (rc < 0) {
|
||||
s390_root_dev_unregister(dcssblk_root_dev);
|
||||
root_device_unregister(dcssblk_root_dev);
|
||||
return rc;
|
||||
}
|
||||
dcssblk_major = rc;
|
||||
|
|
|
@ -36,7 +36,6 @@
|
|||
#include <linux/notifier.h>
|
||||
#include <linux/kthread.h>
|
||||
#include <linux/mutex.h>
|
||||
#include <asm/s390_rdev.h>
|
||||
#include <asm/reset.h>
|
||||
#include <asm/airq.h>
|
||||
#include <asm/atomic.h>
|
||||
|
@ -1522,7 +1521,7 @@ int __init ap_module_init(void)
|
|||
}
|
||||
|
||||
/* Create /sys/devices/ap. */
|
||||
ap_root_device = s390_root_dev_register("ap");
|
||||
ap_root_device = root_device_register("ap");
|
||||
rc = IS_ERR(ap_root_device) ? PTR_ERR(ap_root_device) : 0;
|
||||
if (rc)
|
||||
goto out_bus;
|
||||
|
@ -1565,7 +1564,7 @@ out_work:
|
|||
hrtimer_cancel(&ap_poll_timer);
|
||||
destroy_workqueue(ap_work_queue);
|
||||
out_root:
|
||||
s390_root_dev_unregister(ap_root_device);
|
||||
root_device_unregister(ap_root_device);
|
||||
out_bus:
|
||||
while (i--)
|
||||
bus_remove_file(&ap_bus_type, ap_bus_attrs[i]);
|
||||
|
@ -1600,7 +1599,7 @@ void ap_module_exit(void)
|
|||
hrtimer_cancel(&ap_poll_timer);
|
||||
destroy_workqueue(ap_work_queue);
|
||||
tasklet_kill(&ap_tasklet);
|
||||
s390_root_dev_unregister(ap_root_device);
|
||||
root_device_unregister(ap_root_device);
|
||||
while ((dev = bus_find_device(&ap_bus_type, NULL, NULL,
|
||||
__ap_match_all)))
|
||||
{
|
||||
|
|
|
@ -24,7 +24,6 @@
|
|||
#include <asm/kvm_virtio.h>
|
||||
#include <asm/setup.h>
|
||||
#include <asm/s390_ext.h>
|
||||
#include <asm/s390_rdev.h>
|
||||
|
||||
#define VIRTIO_SUBCODE_64 0x0D00
|
||||
|
||||
|
@ -335,7 +334,7 @@ static int __init kvm_devices_init(void)
|
|||
if (!MACHINE_IS_KVM)
|
||||
return -ENODEV;
|
||||
|
||||
kvm_root = s390_root_dev_register("kvm_s390");
|
||||
kvm_root = root_device_register("kvm_s390");
|
||||
if (IS_ERR(kvm_root)) {
|
||||
rc = PTR_ERR(kvm_root);
|
||||
printk(KERN_ERR "Could not register kvm_s390 root device");
|
||||
|
@ -344,7 +343,7 @@ static int __init kvm_devices_init(void)
|
|||
|
||||
rc = vmem_add_mapping(real_memory_size, PAGE_SIZE);
|
||||
if (rc) {
|
||||
s390_root_dev_unregister(kvm_root);
|
||||
root_device_unregister(kvm_root);
|
||||
return rc;
|
||||
}
|
||||
|
||||
|
|
|
@ -25,7 +25,6 @@
|
|||
#include <linux/module.h>
|
||||
#include <linux/err.h>
|
||||
|
||||
#include <asm/s390_rdev.h>
|
||||
#include <asm/ccwdev.h>
|
||||
#include <asm/ccwgroup.h>
|
||||
|
||||
|
@ -120,12 +119,12 @@ cu3088_init (void)
|
|||
{
|
||||
int rc;
|
||||
|
||||
cu3088_root_dev = s390_root_dev_register("cu3088");
|
||||
cu3088_root_dev = root_device_register("cu3088");
|
||||
if (IS_ERR(cu3088_root_dev))
|
||||
return PTR_ERR(cu3088_root_dev);
|
||||
rc = ccw_driver_register(&cu3088_driver);
|
||||
if (rc)
|
||||
s390_root_dev_unregister(cu3088_root_dev);
|
||||
root_device_unregister(cu3088_root_dev);
|
||||
|
||||
return rc;
|
||||
}
|
||||
|
@ -134,7 +133,7 @@ static void __exit
|
|||
cu3088_exit (void)
|
||||
{
|
||||
ccw_driver_unregister(&cu3088_driver);
|
||||
s390_root_dev_unregister(cu3088_root_dev);
|
||||
root_device_unregister(cu3088_root_dev);
|
||||
}
|
||||
|
||||
MODULE_DEVICE_TABLE(ccw,cu3088_ids);
|
||||
|
|
|
@ -24,7 +24,6 @@
|
|||
|
||||
#include <asm/ebcdic.h>
|
||||
#include <asm/io.h>
|
||||
#include <asm/s390_rdev.h>
|
||||
|
||||
#include "qeth_core.h"
|
||||
#include "qeth_core_offl.h"
|
||||
|
@ -4525,7 +4524,7 @@ static int __init qeth_core_init(void)
|
|||
&driver_attr_group);
|
||||
if (rc)
|
||||
goto driver_err;
|
||||
qeth_core_root_dev = s390_root_dev_register("qeth");
|
||||
qeth_core_root_dev = root_device_register("qeth");
|
||||
rc = IS_ERR(qeth_core_root_dev) ? PTR_ERR(qeth_core_root_dev) : 0;
|
||||
if (rc)
|
||||
goto register_err;
|
||||
|
@ -4539,7 +4538,7 @@ static int __init qeth_core_init(void)
|
|||
|
||||
return 0;
|
||||
slab_err:
|
||||
s390_root_dev_unregister(qeth_core_root_dev);
|
||||
root_device_unregister(qeth_core_root_dev);
|
||||
register_err:
|
||||
driver_remove_file(&qeth_core_ccwgroup_driver.driver,
|
||||
&driver_attr_group);
|
||||
|
@ -4557,7 +4556,7 @@ out_err:
|
|||
|
||||
static void __exit qeth_core_exit(void)
|
||||
{
|
||||
s390_root_dev_unregister(qeth_core_root_dev);
|
||||
root_device_unregister(qeth_core_root_dev);
|
||||
driver_remove_file(&qeth_core_ccwgroup_driver.driver,
|
||||
&driver_attr_group);
|
||||
ccwgroup_driver_unregister(&qeth_core_ccwgroup_driver);
|
||||
|
|
|
@ -20,8 +20,6 @@
|
|||
#include <linux/mii.h>
|
||||
#include <linux/ip.h>
|
||||
|
||||
#include <asm/s390_rdev.h>
|
||||
|
||||
#include "qeth_core.h"
|
||||
#include "qeth_core_offl.h"
|
||||
|
||||
|
|
|
@ -26,8 +26,6 @@
|
|||
#include <net/ip.h>
|
||||
#include <net/arp.h>
|
||||
|
||||
#include <asm/s390_rdev.h>
|
||||
|
||||
#include "qeth_l3.h"
|
||||
#include "qeth_core_offl.h"
|
||||
|
||||
|
|
|
@ -1,51 +0,0 @@
|
|||
/*
|
||||
* drivers/s390/s390_rdev.c
|
||||
* s390 root device
|
||||
*
|
||||
* Copyright (C) 2002, 2005 IBM Deutschland Entwicklung GmbH,
|
||||
* IBM Corporation
|
||||
* Author(s): Cornelia Huck (cornelia.huck@de.ibm.com)
|
||||
* Carsten Otte (cotte@de.ibm.com)
|
||||
*/
|
||||
|
||||
#include <linux/slab.h>
|
||||
#include <linux/err.h>
|
||||
#include <linux/device.h>
|
||||
#include <asm/s390_rdev.h>
|
||||
|
||||
static void
|
||||
s390_root_dev_release(struct device *dev)
|
||||
{
|
||||
kfree(dev);
|
||||
}
|
||||
|
||||
struct device *
|
||||
s390_root_dev_register(const char *name)
|
||||
{
|
||||
struct device *dev;
|
||||
int ret;
|
||||
|
||||
if (!strlen(name))
|
||||
return ERR_PTR(-EINVAL);
|
||||
dev = kzalloc(sizeof(struct device), GFP_KERNEL);
|
||||
if (!dev)
|
||||
return ERR_PTR(-ENOMEM);
|
||||
dev_set_name(dev, name);
|
||||
dev->release = s390_root_dev_release;
|
||||
ret = device_register(dev);
|
||||
if (ret) {
|
||||
kfree(dev);
|
||||
return ERR_PTR(ret);
|
||||
}
|
||||
return dev;
|
||||
}
|
||||
|
||||
void
|
||||
s390_root_dev_unregister(struct device *dev)
|
||||
{
|
||||
if (dev)
|
||||
device_unregister(dev);
|
||||
}
|
||||
|
||||
EXPORT_SYMBOL(s390_root_dev_register);
|
||||
EXPORT_SYMBOL(s390_root_dev_unregister);
|
|
@ -2030,7 +2030,7 @@ int uart_suspend_port(struct uart_driver *drv, struct uart_port *port)
|
|||
if (!tries)
|
||||
printk(KERN_ERR "%s%s%s%d: Unable to drain "
|
||||
"transmitter\n",
|
||||
port->dev ? port->dev->bus_id : "",
|
||||
port->dev ? dev_name(port->dev) : "",
|
||||
port->dev ? ": " : "",
|
||||
drv->dev_name,
|
||||
drv->tty_driver->name_base + port->line);
|
||||
|
@ -2156,7 +2156,7 @@ uart_report_port(struct uart_driver *drv, struct uart_port *port)
|
|||
}
|
||||
|
||||
printk(KERN_INFO "%s%s%s%d at %s (irq = %d) is a %s\n",
|
||||
port->dev ? port->dev->bus_id : "",
|
||||
port->dev ? dev_name(port->dev) : "",
|
||||
port->dev ? ": " : "",
|
||||
drv->dev_name,
|
||||
drv->tty_driver->name_base + port->line,
|
||||
|
|
|
@ -47,7 +47,7 @@ modalias_show(struct device *dev, struct device_attribute *a, char *buf)
|
|||
{
|
||||
const struct spi_device *spi = to_spi_device(dev);
|
||||
|
||||
return snprintf(buf, BUS_ID_SIZE + 1, "%s\n", spi->modalias);
|
||||
return sprintf(buf, "%s\n", spi->modalias);
|
||||
}
|
||||
|
||||
static struct device_attribute spi_dev_attrs[] = {
|
||||
|
@ -63,7 +63,7 @@ static int spi_match_device(struct device *dev, struct device_driver *drv)
|
|||
{
|
||||
const struct spi_device *spi = to_spi_device(dev);
|
||||
|
||||
return strncmp(spi->modalias, drv->name, BUS_ID_SIZE) == 0;
|
||||
return strcmp(spi->modalias, drv->name) == 0;
|
||||
}
|
||||
|
||||
static int spi_uevent(struct device *dev, struct kobj_uevent_env *env)
|
||||
|
@ -243,8 +243,7 @@ int spi_add_device(struct spi_device *spi)
|
|||
}
|
||||
|
||||
/* Set the bus ID string */
|
||||
snprintf(spi->dev.bus_id, sizeof spi->dev.bus_id,
|
||||
"%s.%u", spi->master->dev.bus_id,
|
||||
dev_set_name(&spi->dev, "%s.%u", dev_name(&spi->master->dev),
|
||||
spi->chip_select);
|
||||
|
||||
|
||||
|
@ -254,7 +253,7 @@ int spi_add_device(struct spi_device *spi)
|
|||
*/
|
||||
mutex_lock(&spi_add_lock);
|
||||
|
||||
if (bus_find_device_by_name(&spi_bus_type, NULL, spi->dev.bus_id)
|
||||
if (bus_find_device_by_name(&spi_bus_type, NULL, dev_name(&spi->dev))
|
||||
!= NULL) {
|
||||
dev_err(dev, "chipselect %d already in use\n",
|
||||
spi->chip_select);
|
||||
|
@ -269,7 +268,7 @@ int spi_add_device(struct spi_device *spi)
|
|||
status = spi->master->setup(spi);
|
||||
if (status < 0) {
|
||||
dev_err(dev, "can't %s %s, status %d\n",
|
||||
"setup", spi->dev.bus_id, status);
|
||||
"setup", dev_name(&spi->dev), status);
|
||||
goto done;
|
||||
}
|
||||
|
||||
|
@ -277,9 +276,9 @@ int spi_add_device(struct spi_device *spi)
|
|||
status = device_add(&spi->dev);
|
||||
if (status < 0)
|
||||
dev_err(dev, "can't %s %s, status %d\n",
|
||||
"add", spi->dev.bus_id, status);
|
||||
"add", dev_name(&spi->dev), status);
|
||||
else
|
||||
dev_dbg(dev, "registered child %s\n", spi->dev.bus_id);
|
||||
dev_dbg(dev, "registered child %s\n", dev_name(&spi->dev));
|
||||
|
||||
done:
|
||||
mutex_unlock(&spi_add_lock);
|
||||
|
@ -504,12 +503,11 @@ int spi_register_master(struct spi_master *master)
|
|||
/* register the device, then userspace will see it.
|
||||
* registration fails if the bus ID is in use.
|
||||
*/
|
||||
snprintf(master->dev.bus_id, sizeof master->dev.bus_id,
|
||||
"spi%u", master->bus_num);
|
||||
dev_set_name(&master->dev, "spi%u", master->bus_num);
|
||||
status = device_add(&master->dev);
|
||||
if (status < 0)
|
||||
goto done;
|
||||
dev_dbg(dev, "registered master %s%s\n", master->dev.bus_id,
|
||||
dev_dbg(dev, "registered master %s%s\n", dev_name(&master->dev),
|
||||
dynamic ? " (dynamic)" : "");
|
||||
|
||||
/* populate children from any spi device tables */
|
||||
|
|
|
@ -475,7 +475,7 @@ int spi_bitbang_start(struct spi_bitbang *bitbang)
|
|||
/* this task is the only thing to touch the SPI bits */
|
||||
bitbang->busy = 0;
|
||||
bitbang->workqueue = create_singlethread_workqueue(
|
||||
bitbang->master->dev.parent->bus_id);
|
||||
dev_name(bitbang->master->dev.parent));
|
||||
if (bitbang->workqueue == NULL) {
|
||||
status = -EBUSY;
|
||||
goto err1;
|
||||
|
|
|
@ -287,7 +287,7 @@ static void butterfly_attach(struct parport *p)
|
|||
pp->dataflash = spi_new_device(pp->bitbang.master, &pp->info[0]);
|
||||
if (pp->dataflash)
|
||||
pr_debug("%s: dataflash at %s\n", p->name,
|
||||
pp->dataflash->dev.bus_id);
|
||||
dev_name(&pp->dataflash->dev));
|
||||
|
||||
// dev_info(_what?_, ...)
|
||||
pr_info("%s: AVR Butterfly\n", p->name);
|
||||
|
|
|
@ -287,7 +287,7 @@ static void spi_lm70llp_attach(struct parport *p)
|
|||
pp->spidev_lm70 = spi_new_device(pp->bitbang.master, &pp->info);
|
||||
if (pp->spidev_lm70)
|
||||
dev_dbg(&pp->spidev_lm70->dev, "spidev_lm70 at %s\n",
|
||||
pp->spidev_lm70->dev.bus_id);
|
||||
dev_name(&pp->spidev_lm70->dev));
|
||||
else {
|
||||
printk(KERN_WARNING "%s: spi_new_device failed\n", DRVNAME);
|
||||
status = -ENODEV;
|
||||
|
|
|
@ -579,7 +579,7 @@ static void thermal_release(struct device *dev)
|
|||
struct thermal_zone_device *tz;
|
||||
struct thermal_cooling_device *cdev;
|
||||
|
||||
if (!strncmp(dev->bus_id, "thermal_zone", sizeof "thermal_zone" - 1)) {
|
||||
if (!strncmp(dev_name(dev), "thermal_zone", sizeof "thermal_zone" - 1)) {
|
||||
tz = to_thermal_zone(dev);
|
||||
kfree(tz);
|
||||
} else {
|
||||
|
@ -630,7 +630,7 @@ struct thermal_cooling_device *thermal_cooling_device_register(char *type,
|
|||
cdev->ops = ops;
|
||||
cdev->device.class = &thermal_class;
|
||||
cdev->devdata = devdata;
|
||||
sprintf(cdev->device.bus_id, "cooling_device%d", cdev->id);
|
||||
dev_set_name(&cdev->device, "cooling_device%d", cdev->id);
|
||||
result = device_register(&cdev->device);
|
||||
if (result) {
|
||||
release_idr(&thermal_cdev_idr, &thermal_idr_lock, cdev->id);
|
||||
|
@ -769,7 +769,7 @@ struct thermal_zone_device *thermal_zone_device_register(char *type,
|
|||
tz->device.class = &thermal_class;
|
||||
tz->devdata = devdata;
|
||||
tz->trips = trips;
|
||||
sprintf(tz->device.bus_id, "thermal_zone%d", tz->id);
|
||||
dev_set_name(&tz->device, "thermal_zone%d", tz->id);
|
||||
result = device_register(&tz->device);
|
||||
if (result) {
|
||||
release_idr(&thermal_tz_idr, &thermal_idr_lock, tz->id);
|
||||
|
|
|
@ -35,6 +35,7 @@ struct uio_device {
|
|||
int vma_count;
|
||||
struct uio_info *info;
|
||||
struct kobject *map_dir;
|
||||
struct kobject *portio_dir;
|
||||
};
|
||||
|
||||
static int uio_major;
|
||||
|
@ -75,17 +76,17 @@ static ssize_t map_offset_show(struct uio_mem *mem, char *buf)
|
|||
return sprintf(buf, "0x%lx\n", mem->addr & ~PAGE_MASK);
|
||||
}
|
||||
|
||||
struct uio_sysfs_entry {
|
||||
struct map_sysfs_entry {
|
||||
struct attribute attr;
|
||||
ssize_t (*show)(struct uio_mem *, char *);
|
||||
ssize_t (*store)(struct uio_mem *, const char *, size_t);
|
||||
};
|
||||
|
||||
static struct uio_sysfs_entry addr_attribute =
|
||||
static struct map_sysfs_entry addr_attribute =
|
||||
__ATTR(addr, S_IRUGO, map_addr_show, NULL);
|
||||
static struct uio_sysfs_entry size_attribute =
|
||||
static struct map_sysfs_entry size_attribute =
|
||||
__ATTR(size, S_IRUGO, map_size_show, NULL);
|
||||
static struct uio_sysfs_entry offset_attribute =
|
||||
static struct map_sysfs_entry offset_attribute =
|
||||
__ATTR(offset, S_IRUGO, map_offset_show, NULL);
|
||||
|
||||
static struct attribute *attrs[] = {
|
||||
|
@ -106,9 +107,9 @@ static ssize_t map_type_show(struct kobject *kobj, struct attribute *attr,
|
|||
{
|
||||
struct uio_map *map = to_map(kobj);
|
||||
struct uio_mem *mem = map->mem;
|
||||
struct uio_sysfs_entry *entry;
|
||||
struct map_sysfs_entry *entry;
|
||||
|
||||
entry = container_of(attr, struct uio_sysfs_entry, attr);
|
||||
entry = container_of(attr, struct map_sysfs_entry, attr);
|
||||
|
||||
if (!entry->show)
|
||||
return -EIO;
|
||||
|
@ -116,16 +117,93 @@ static ssize_t map_type_show(struct kobject *kobj, struct attribute *attr,
|
|||
return entry->show(mem, buf);
|
||||
}
|
||||
|
||||
static struct sysfs_ops uio_sysfs_ops = {
|
||||
static struct sysfs_ops map_sysfs_ops = {
|
||||
.show = map_type_show,
|
||||
};
|
||||
|
||||
static struct kobj_type map_attr_type = {
|
||||
.release = map_release,
|
||||
.sysfs_ops = &uio_sysfs_ops,
|
||||
.sysfs_ops = &map_sysfs_ops,
|
||||
.default_attrs = attrs,
|
||||
};
|
||||
|
||||
struct uio_portio {
|
||||
struct kobject kobj;
|
||||
struct uio_port *port;
|
||||
};
|
||||
#define to_portio(portio) container_of(portio, struct uio_portio, kobj)
|
||||
|
||||
static ssize_t portio_start_show(struct uio_port *port, char *buf)
|
||||
{
|
||||
return sprintf(buf, "0x%lx\n", port->start);
|
||||
}
|
||||
|
||||
static ssize_t portio_size_show(struct uio_port *port, char *buf)
|
||||
{
|
||||
return sprintf(buf, "0x%lx\n", port->size);
|
||||
}
|
||||
|
||||
static ssize_t portio_porttype_show(struct uio_port *port, char *buf)
|
||||
{
|
||||
const char *porttypes[] = {"none", "x86", "gpio", "other"};
|
||||
|
||||
if ((port->porttype < 0) || (port->porttype > UIO_PORT_OTHER))
|
||||
return -EINVAL;
|
||||
|
||||
return sprintf(buf, "port_%s\n", porttypes[port->porttype]);
|
||||
}
|
||||
|
||||
struct portio_sysfs_entry {
|
||||
struct attribute attr;
|
||||
ssize_t (*show)(struct uio_port *, char *);
|
||||
ssize_t (*store)(struct uio_port *, const char *, size_t);
|
||||
};
|
||||
|
||||
static struct portio_sysfs_entry portio_start_attribute =
|
||||
__ATTR(start, S_IRUGO, portio_start_show, NULL);
|
||||
static struct portio_sysfs_entry portio_size_attribute =
|
||||
__ATTR(size, S_IRUGO, portio_size_show, NULL);
|
||||
static struct portio_sysfs_entry portio_porttype_attribute =
|
||||
__ATTR(porttype, S_IRUGO, portio_porttype_show, NULL);
|
||||
|
||||
static struct attribute *portio_attrs[] = {
|
||||
&portio_start_attribute.attr,
|
||||
&portio_size_attribute.attr,
|
||||
&portio_porttype_attribute.attr,
|
||||
NULL,
|
||||
};
|
||||
|
||||
static void portio_release(struct kobject *kobj)
|
||||
{
|
||||
struct uio_portio *portio = to_portio(kobj);
|
||||
kfree(portio);
|
||||
}
|
||||
|
||||
static ssize_t portio_type_show(struct kobject *kobj, struct attribute *attr,
|
||||
char *buf)
|
||||
{
|
||||
struct uio_portio *portio = to_portio(kobj);
|
||||
struct uio_port *port = portio->port;
|
||||
struct portio_sysfs_entry *entry;
|
||||
|
||||
entry = container_of(attr, struct portio_sysfs_entry, attr);
|
||||
|
||||
if (!entry->show)
|
||||
return -EIO;
|
||||
|
||||
return entry->show(port, buf);
|
||||
}
|
||||
|
||||
static struct sysfs_ops portio_sysfs_ops = {
|
||||
.show = portio_type_show,
|
||||
};
|
||||
|
||||
static struct kobj_type portio_attr_type = {
|
||||
.release = portio_release,
|
||||
.sysfs_ops = &portio_sysfs_ops,
|
||||
.default_attrs = portio_attrs,
|
||||
};
|
||||
|
||||
static ssize_t show_name(struct device *dev,
|
||||
struct device_attribute *attr, char *buf)
|
||||
{
|
||||
|
@ -177,10 +255,13 @@ static struct attribute_group uio_attr_grp = {
|
|||
static int uio_dev_add_attributes(struct uio_device *idev)
|
||||
{
|
||||
int ret;
|
||||
int mi;
|
||||
int mi, pi;
|
||||
int map_found = 0;
|
||||
int portio_found = 0;
|
||||
struct uio_mem *mem;
|
||||
struct uio_map *map;
|
||||
struct uio_port *port;
|
||||
struct uio_portio *portio;
|
||||
|
||||
ret = sysfs_create_group(&idev->dev->kobj, &uio_attr_grp);
|
||||
if (ret)
|
||||
|
@ -195,25 +276,58 @@ static int uio_dev_add_attributes(struct uio_device *idev)
|
|||
idev->map_dir = kobject_create_and_add("maps",
|
||||
&idev->dev->kobj);
|
||||
if (!idev->map_dir)
|
||||
goto err;
|
||||
goto err_map;
|
||||
}
|
||||
map = kzalloc(sizeof(*map), GFP_KERNEL);
|
||||
if (!map)
|
||||
goto err;
|
||||
goto err_map;
|
||||
kobject_init(&map->kobj, &map_attr_type);
|
||||
map->mem = mem;
|
||||
mem->map = map;
|
||||
ret = kobject_add(&map->kobj, idev->map_dir, "map%d", mi);
|
||||
if (ret)
|
||||
goto err;
|
||||
goto err_map;
|
||||
ret = kobject_uevent(&map->kobj, KOBJ_ADD);
|
||||
if (ret)
|
||||
goto err;
|
||||
goto err_map;
|
||||
}
|
||||
|
||||
for (pi = 0; pi < MAX_UIO_PORT_REGIONS; pi++) {
|
||||
port = &idev->info->port[pi];
|
||||
if (port->size == 0)
|
||||
break;
|
||||
if (!portio_found) {
|
||||
portio_found = 1;
|
||||
idev->portio_dir = kobject_create_and_add("portio",
|
||||
&idev->dev->kobj);
|
||||
if (!idev->portio_dir)
|
||||
goto err_portio;
|
||||
}
|
||||
portio = kzalloc(sizeof(*portio), GFP_KERNEL);
|
||||
if (!portio)
|
||||
goto err_portio;
|
||||
kobject_init(&portio->kobj, &portio_attr_type);
|
||||
portio->port = port;
|
||||
port->portio = portio;
|
||||
ret = kobject_add(&portio->kobj, idev->portio_dir,
|
||||
"port%d", pi);
|
||||
if (ret)
|
||||
goto err_portio;
|
||||
ret = kobject_uevent(&portio->kobj, KOBJ_ADD);
|
||||
if (ret)
|
||||
goto err_portio;
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
||||
err:
|
||||
err_portio:
|
||||
for (pi--; pi >= 0; pi--) {
|
||||
port = &idev->info->port[pi];
|
||||
portio = port->portio;
|
||||
kobject_put(&portio->kobj);
|
||||
}
|
||||
kobject_put(idev->portio_dir);
|
||||
err_map:
|
||||
for (mi--; mi>=0; mi--) {
|
||||
mem = &idev->info->mem[mi];
|
||||
map = mem->map;
|
||||
|
@ -228,15 +342,26 @@ err_group:
|
|||
|
||||
static void uio_dev_del_attributes(struct uio_device *idev)
|
||||
{
|
||||
int mi;
|
||||
int i;
|
||||
struct uio_mem *mem;
|
||||
for (mi = 0; mi < MAX_UIO_MAPS; mi++) {
|
||||
mem = &idev->info->mem[mi];
|
||||
struct uio_port *port;
|
||||
|
||||
for (i = 0; i < MAX_UIO_MAPS; i++) {
|
||||
mem = &idev->info->mem[i];
|
||||
if (mem->size == 0)
|
||||
break;
|
||||
kobject_put(&mem->map->kobj);
|
||||
}
|
||||
kobject_put(idev->map_dir);
|
||||
|
||||
for (i = 0; i < MAX_UIO_PORT_REGIONS; i++) {
|
||||
port = &idev->info->port[i];
|
||||
if (port->size == 0)
|
||||
break;
|
||||
kobject_put(&port->portio->kobj);
|
||||
}
|
||||
kobject_put(idev->portio_dir);
|
||||
|
||||
sysfs_remove_group(&idev->dev->kobj, &uio_attr_grp);
|
||||
}
|
||||
|
||||
|
|
|
@ -57,8 +57,7 @@ static int __devinit hilscher_pci_probe(struct pci_dev *dev,
|
|||
info->mem[0].addr = pci_resource_start(dev, 0);
|
||||
if (!info->mem[0].addr)
|
||||
goto out_release;
|
||||
info->mem[0].internal_addr = ioremap(pci_resource_start(dev, 0),
|
||||
pci_resource_len(dev, 0));
|
||||
info->mem[0].internal_addr = pci_ioremap_bar(dev, 0);
|
||||
if (!info->mem[0].internal_addr)
|
||||
goto out_release;
|
||||
|
||||
|
|
|
@ -81,7 +81,8 @@ static int uio_pdrv_genirq_probe(struct platform_device *pdev)
|
|||
goto bad0;
|
||||
}
|
||||
|
||||
if (uioinfo->handler || uioinfo->irqcontrol || uioinfo->irq_flags) {
|
||||
if (uioinfo->handler || uioinfo->irqcontrol ||
|
||||
uioinfo->irq_flags & IRQF_SHARED) {
|
||||
dev_err(&pdev->dev, "interrupt configuration error\n");
|
||||
goto bad0;
|
||||
}
|
||||
|
@ -132,7 +133,7 @@ static int uio_pdrv_genirq_probe(struct platform_device *pdev)
|
|||
* Interrupt sharing is not supported.
|
||||
*/
|
||||
|
||||
uioinfo->irq_flags = IRQF_DISABLED;
|
||||
uioinfo->irq_flags |= IRQF_DISABLED;
|
||||
uioinfo->handler = uio_pdrv_genirq_handler;
|
||||
uioinfo->irqcontrol = uio_pdrv_genirq_irqcontrol;
|
||||
uioinfo->priv = priv;
|
||||
|
|
|
@ -286,7 +286,7 @@ static int usb_dev_restore(struct device *dev)
|
|||
return usb_resume(dev);
|
||||
}
|
||||
|
||||
static struct pm_ops usb_device_pm_ops = {
|
||||
static struct dev_pm_ops usb_device_pm_ops = {
|
||||
.prepare = usb_dev_prepare,
|
||||
.complete = usb_dev_complete,
|
||||
.suspend = usb_dev_suspend,
|
||||
|
@ -301,7 +301,7 @@ static struct pm_ops usb_device_pm_ops = {
|
|||
|
||||
#define ksuspend_usb_init() 0
|
||||
#define ksuspend_usb_cleanup() do {} while (0)
|
||||
#define usb_device_pm_ops (*(struct pm_ops *)0)
|
||||
#define usb_device_pm_ops (*(struct dev_pm_ops *)0)
|
||||
|
||||
#endif /* CONFIG_PM */
|
||||
|
||||
|
|
|
@ -1474,7 +1474,7 @@ static struct at91_udc controller = {
|
|||
.ep0 = &controller.ep[0].ep,
|
||||
.name = driver_name,
|
||||
.dev = {
|
||||
.bus_id = "gadget",
|
||||
.init_name = "gadget",
|
||||
.release = nop_release,
|
||||
}
|
||||
},
|
||||
|
|
|
@ -1034,7 +1034,7 @@ static struct usba_udc the_udc = {
|
|||
.is_dualspeed = 1,
|
||||
.name = "atmel_usba_udc",
|
||||
.dev = {
|
||||
.bus_id = "gadget",
|
||||
.init_name = "gadget",
|
||||
.release = nop_release,
|
||||
},
|
||||
},
|
||||
|
|
|
@ -2545,7 +2545,7 @@ static int __devinit qe_udc_probe(struct of_device *ofdev,
|
|||
|
||||
device_initialize(&udc_controller->gadget.dev);
|
||||
|
||||
strcpy(udc_controller->gadget.dev.bus_id, "gadget");
|
||||
dev_set_name(&udc_controller->gadget.dev, "gadget");
|
||||
|
||||
udc_controller->gadget.dev.release = qe_udc_release;
|
||||
udc_controller->gadget.dev.parent = &ofdev->dev;
|
||||
|
|
Некоторые файлы не были показаны из-за слишком большого количества измененных файлов Показать больше
Загрузка…
Ссылка в новой задаче