mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-28 18:51:56 -04:00
Merge git://git.kernel.org/pub/scm/linux/kernel/git/brodo/pcmcia-2.6
* git://git.kernel.org/pub/scm/linux/kernel/git/brodo/pcmcia-2.6:
pcmcia: avoid buffer overflow in pcmcia_setup_isa_irq
pcmcia: do not request windows if you don't need to
pcmcia: insert PCMCIA device resources into resource tree
pcmcia: export resource information to sysfs
pcmcia: use struct resource for PCMCIA devices, part 2
pcmcia: remove memreq_t
pcmcia: move local definitions out of include/pcmcia/cs.h
pcmcia: do not use io_req_t when calling pcmcia_request_io()
pcmcia: do not use io_req_t after call to pcmcia_request_io()
pcmcia: use struct resource for PCMCIA devices
pcmcia: clean up cs.h
pcmcia: use pcmica_{read,write}_config_byte
pcmcia: remove cs_types.h
pcmcia: remove unused flag, simplify headers
pcmcia: remove obsolete CS_EVENT_ definitions
pcmcia: split up central event handler
pcmcia: simplify event callback
pcmcia: remove obsolete ioctl
Conflicts in:
- drivers/staging/comedi/drivers/*
- drivers/staging/wlags49_h2/wl_cs.c
due to dev_info_t and whitespace changes
This commit is contained in:
commit
1685e633b3
97 changed files with 1197 additions and 3195 deletions
|
|
@ -20,7 +20,6 @@
|
|||
#include <asm/io.h>
|
||||
#include <asm/system.h>
|
||||
|
||||
#include <pcmcia/cs_types.h>
|
||||
#include <pcmcia/cs.h>
|
||||
#include <pcmcia/cistpl.h>
|
||||
#include <pcmcia/ciscode.h>
|
||||
|
|
@ -76,9 +75,8 @@ static int avmcs_probe(struct pcmcia_device *p_dev)
|
|||
{
|
||||
|
||||
/* The io structure describes IO port mapping */
|
||||
p_dev->io.NumPorts1 = 16;
|
||||
p_dev->io.Attributes1 = IO_DATA_PATH_WIDTH_8;
|
||||
p_dev->io.NumPorts2 = 0;
|
||||
p_dev->resource[0]->end = 16;
|
||||
p_dev->resource[0]->flags |= IO_DATA_PATH_WIDTH_8;
|
||||
|
||||
/* General socket configuration */
|
||||
p_dev->conf.Attributes = CONF_ENABLE_IRQ;
|
||||
|
|
@ -120,13 +118,9 @@ static int avmcs_configcheck(struct pcmcia_device *p_dev,
|
|||
if (cf->io.nwin <= 0)
|
||||
return -ENODEV;
|
||||
|
||||
p_dev->io.BasePort1 = cf->io.win[0].base;
|
||||
p_dev->io.NumPorts1 = cf->io.win[0].len;
|
||||
p_dev->io.NumPorts2 = 0;
|
||||
printk(KERN_INFO "avm_cs: testing i/o %#x-%#x\n",
|
||||
p_dev->io.BasePort1,
|
||||
p_dev->io.BasePort1+p_dev->io.NumPorts1-1);
|
||||
return pcmcia_request_io(p_dev, &p_dev->io);
|
||||
p_dev->resource[0]->start = cf->io.win[0].base;
|
||||
p_dev->resource[0]->end = cf->io.win[0].len;
|
||||
return pcmcia_request_io(p_dev);
|
||||
}
|
||||
|
||||
static int avmcs_config(struct pcmcia_device *link)
|
||||
|
|
@ -192,9 +186,10 @@ static int avmcs_config(struct pcmcia_device *link)
|
|||
default:
|
||||
case AVM_CARDTYPE_B1: addcard = b1pcmcia_addcard_b1; break;
|
||||
}
|
||||
if ((i = (*addcard)(link->io.BasePort1, link->irq)) < 0) {
|
||||
dev_err(&link->dev, "avm_cs: failed to add AVM-Controller at i/o %#x, irq %d\n",
|
||||
link->io.BasePort1, link->irq);
|
||||
if ((i = (*addcard)(link->resource[0]->start, link->irq)) < 0) {
|
||||
dev_err(&link->dev,
|
||||
"avm_cs: failed to add AVM-Controller at i/o %#x, irq %d\n",
|
||||
(unsigned int) link->resource[0]->start, link->irq);
|
||||
avmcs_release(link);
|
||||
return -ENODEV;
|
||||
}
|
||||
|
|
@ -212,7 +207,7 @@ static int avmcs_config(struct pcmcia_device *link)
|
|||
|
||||
static void avmcs_release(struct pcmcia_device *link)
|
||||
{
|
||||
b1pcmcia_delcard(link->io.BasePort1, link->irq);
|
||||
b1pcmcia_delcard(link->resource[0]->start, link->irq);
|
||||
pcmcia_disable_device(link);
|
||||
} /* avmcs_release */
|
||||
|
||||
|
|
|
|||
|
|
@ -20,7 +20,6 @@
|
|||
#include <asm/io.h>
|
||||
#include <asm/system.h>
|
||||
|
||||
#include <pcmcia/cs_types.h>
|
||||
#include <pcmcia/cs.h>
|
||||
#include <pcmcia/cistpl.h>
|
||||
#include <pcmcia/ds.h>
|
||||
|
|
@ -79,11 +78,10 @@ static int __devinit avma1cs_probe(struct pcmcia_device *p_dev)
|
|||
dev_dbg(&p_dev->dev, "avma1cs_attach()\n");
|
||||
|
||||
/* The io structure describes IO port mapping */
|
||||
p_dev->io.NumPorts1 = 16;
|
||||
p_dev->io.Attributes1 = IO_DATA_PATH_WIDTH_8;
|
||||
p_dev->io.NumPorts2 = 16;
|
||||
p_dev->io.Attributes2 = IO_DATA_PATH_WIDTH_16;
|
||||
p_dev->io.IOAddrLines = 5;
|
||||
p_dev->resource[0]->end = 16;
|
||||
p_dev->resource[0]->flags |= IO_DATA_PATH_WIDTH_8;
|
||||
p_dev->resource[1]->end = 16;
|
||||
p_dev->resource[1]->flags |= IO_DATA_PATH_WIDTH_16;
|
||||
|
||||
/* General socket configuration */
|
||||
p_dev->conf.Attributes = CONF_ENABLE_IRQ;
|
||||
|
|
@ -127,13 +125,10 @@ static int avma1cs_configcheck(struct pcmcia_device *p_dev,
|
|||
if (cf->io.nwin <= 0)
|
||||
return -ENODEV;
|
||||
|
||||
p_dev->io.BasePort1 = cf->io.win[0].base;
|
||||
p_dev->io.NumPorts1 = cf->io.win[0].len;
|
||||
p_dev->io.NumPorts2 = 0;
|
||||
printk(KERN_INFO "avma1_cs: testing i/o %#x-%#x\n",
|
||||
p_dev->io.BasePort1,
|
||||
p_dev->io.BasePort1+p_dev->io.NumPorts1-1);
|
||||
return pcmcia_request_io(p_dev, &p_dev->io);
|
||||
p_dev->resource[0]->start = cf->io.win[0].base;
|
||||
p_dev->resource[0]->end = cf->io.win[0].len;
|
||||
p_dev->io_lines = 5;
|
||||
return pcmcia_request_io(p_dev);
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -181,16 +176,18 @@ static int __devinit avma1cs_config(struct pcmcia_device *link)
|
|||
}
|
||||
|
||||
printk(KERN_NOTICE "avma1_cs: checking at i/o %#x, irq %d\n",
|
||||
link->io.BasePort1, link->irq);
|
||||
(unsigned int) link->resource[0]->start, link->irq);
|
||||
|
||||
icard.para[0] = link->irq;
|
||||
icard.para[1] = link->io.BasePort1;
|
||||
icard.para[1] = link->resource[0]->start;
|
||||
icard.protocol = isdnprot;
|
||||
icard.typ = ISDN_CTYPE_A1_PCMCIA;
|
||||
|
||||
i = hisax_init_pcmcia(link, &busy, &icard);
|
||||
if (i < 0) {
|
||||
printk(KERN_ERR "avma1_cs: failed to initialize AVM A1 PCMCIA %d at i/o %#x\n", i, link->io.BasePort1);
|
||||
printk(KERN_ERR "avma1_cs: failed to initialize AVM A1 "
|
||||
"PCMCIA %d at i/o %#x\n", i,
|
||||
(unsigned int) link->resource[0]->start);
|
||||
avma1cs_release(link);
|
||||
return -ENODEV;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -46,7 +46,6 @@
|
|||
#include <asm/io.h>
|
||||
#include <asm/system.h>
|
||||
|
||||
#include <pcmcia/cs_types.h>
|
||||
#include <pcmcia/cs.h>
|
||||
#include <pcmcia/cistpl.h>
|
||||
#include <pcmcia/cisreg.h>
|
||||
|
|
@ -127,9 +126,8 @@ static int __devinit elsa_cs_probe(struct pcmcia_device *link)
|
|||
and attributes of IO windows) are fixed by the nature of the
|
||||
device, and can be hard-wired here.
|
||||
*/
|
||||
link->io.NumPorts1 = 8;
|
||||
link->io.Attributes1 = IO_DATA_PATH_WIDTH_AUTO;
|
||||
link->io.IOAddrLines = 3;
|
||||
link->resource[0]->end = 8;
|
||||
link->resource[0]->flags |= IO_DATA_PATH_WIDTH_AUTO;
|
||||
|
||||
link->conf.Attributes = CONF_ENABLE_IRQ;
|
||||
link->conf.IntType = INT_MEMORY_AND_IO;
|
||||
|
|
@ -174,16 +172,18 @@ static int elsa_cs_configcheck(struct pcmcia_device *p_dev,
|
|||
{
|
||||
int j;
|
||||
|
||||
p_dev->io_lines = 3;
|
||||
|
||||
if ((cf->io.nwin > 0) && cf->io.win[0].base) {
|
||||
printk(KERN_INFO "(elsa_cs: looks like the 96 model)\n");
|
||||
p_dev->io.BasePort1 = cf->io.win[0].base;
|
||||
if (!pcmcia_request_io(p_dev, &p_dev->io))
|
||||
p_dev->resource[0]->start = cf->io.win[0].base;
|
||||
if (!pcmcia_request_io(p_dev))
|
||||
return 0;
|
||||
} else {
|
||||
printk(KERN_INFO "(elsa_cs: looks like the 97 model)\n");
|
||||
for (j = 0x2f0; j > 0x100; j -= 0x10) {
|
||||
p_dev->io.BasePort1 = j;
|
||||
if (!pcmcia_request_io(p_dev, &p_dev->io))
|
||||
p_dev->resource[0]->start = j;
|
||||
if (!pcmcia_request_io(p_dev))
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
|
@ -215,23 +215,21 @@ static int __devinit elsa_cs_config(struct pcmcia_device *link)
|
|||
link->conf.ConfigIndex);
|
||||
if (link->conf.Attributes & CONF_ENABLE_IRQ)
|
||||
printk(", irq %d", link->irq);
|
||||
if (link->io.NumPorts1)
|
||||
printk(", io 0x%04x-0x%04x", link->io.BasePort1,
|
||||
link->io.BasePort1+link->io.NumPorts1-1);
|
||||
if (link->io.NumPorts2)
|
||||
printk(" & 0x%04x-0x%04x", link->io.BasePort2,
|
||||
link->io.BasePort2+link->io.NumPorts2-1);
|
||||
if (link->resource[0])
|
||||
printk(" & %pR", link->resource[0]);
|
||||
if (link->resource[1])
|
||||
printk(" & %pR", link->resource[1]);
|
||||
printk("\n");
|
||||
|
||||
icard.para[0] = link->irq;
|
||||
icard.para[1] = link->io.BasePort1;
|
||||
icard.para[1] = link->resource[0]->start;
|
||||
icard.protocol = protocol;
|
||||
icard.typ = ISDN_CTYPE_ELSA_PCMCIA;
|
||||
|
||||
i = hisax_init_pcmcia(link, &(((local_info_t*)link->priv)->busy), &icard);
|
||||
if (i < 0) {
|
||||
printk(KERN_ERR "elsa_cs: failed to initialize Elsa PCMCIA %d at i/o %#x\n",
|
||||
i, link->io.BasePort1);
|
||||
printk(KERN_ERR "elsa_cs: failed to initialize Elsa "
|
||||
"PCMCIA %d with %pR\n", i, link->resource[0]);
|
||||
elsa_cs_release(link);
|
||||
} else
|
||||
((local_info_t*)link->priv)->cardnr = i;
|
||||
|
|
|
|||
|
|
@ -46,7 +46,6 @@
|
|||
#include <asm/io.h>
|
||||
#include <asm/system.h>
|
||||
|
||||
#include <pcmcia/cs_types.h>
|
||||
#include <pcmcia/cs.h>
|
||||
#include <pcmcia/cistpl.h>
|
||||
#include <pcmcia/cisreg.h>
|
||||
|
|
@ -130,9 +129,8 @@ static int __devinit sedlbauer_probe(struct pcmcia_device *link)
|
|||
/* from old sedl_cs
|
||||
*/
|
||||
/* The io structure describes IO port mapping */
|
||||
link->io.NumPorts1 = 8;
|
||||
link->io.Attributes1 = IO_DATA_PATH_WIDTH_8;
|
||||
link->io.IOAddrLines = 3;
|
||||
link->resource[0]->end = 8;
|
||||
link->resource[0]->flags |= IO_DATA_PATH_WIDTH_8;
|
||||
|
||||
link->conf.Attributes = 0;
|
||||
link->conf.IntType = INT_MEMORY_AND_IO;
|
||||
|
|
@ -173,8 +171,6 @@ static int sedlbauer_config_check(struct pcmcia_device *p_dev,
|
|||
unsigned int vcc,
|
||||
void *priv_data)
|
||||
{
|
||||
win_req_t *req = priv_data;
|
||||
|
||||
if (cfg->index == 0)
|
||||
return -ENODEV;
|
||||
|
||||
|
|
@ -202,52 +198,25 @@ static int sedlbauer_config_check(struct pcmcia_device *p_dev,
|
|||
p_dev->conf.Attributes |= CONF_ENABLE_IRQ;
|
||||
|
||||
/* IO window settings */
|
||||
p_dev->io.NumPorts1 = p_dev->io.NumPorts2 = 0;
|
||||
p_dev->resource[0]->end = p_dev->resource[1]->end = 0;
|
||||
if ((cfg->io.nwin > 0) || (dflt->io.nwin > 0)) {
|
||||
cistpl_io_t *io = (cfg->io.nwin) ? &cfg->io : &dflt->io;
|
||||
p_dev->io.Attributes1 = IO_DATA_PATH_WIDTH_AUTO;
|
||||
if (!(io->flags & CISTPL_IO_8BIT))
|
||||
p_dev->io.Attributes1 = IO_DATA_PATH_WIDTH_16;
|
||||
if (!(io->flags & CISTPL_IO_16BIT))
|
||||
p_dev->io.Attributes1 = IO_DATA_PATH_WIDTH_8;
|
||||
p_dev->io.BasePort1 = io->win[0].base;
|
||||
p_dev->io.NumPorts1 = io->win[0].len;
|
||||
p_dev->resource[0]->start = io->win[0].base;
|
||||
p_dev->resource[0]->end = io->win[0].len;
|
||||
p_dev->resource[0]->flags &= ~IO_DATA_PATH_WIDTH;
|
||||
p_dev->resource[0]->flags |=
|
||||
pcmcia_io_cfg_data_width(io->flags);
|
||||
if (io->nwin > 1) {
|
||||
p_dev->io.Attributes2 = p_dev->io.Attributes1;
|
||||
p_dev->io.BasePort2 = io->win[1].base;
|
||||
p_dev->io.NumPorts2 = io->win[1].len;
|
||||
p_dev->resource[1]->flags = p_dev->resource[0]->flags;
|
||||
p_dev->resource[1]->start = io->win[1].base;
|
||||
p_dev->resource[1]->end = io->win[1].len;
|
||||
}
|
||||
/* This reserves IO space but doesn't actually enable it */
|
||||
if (pcmcia_request_io(p_dev, &p_dev->io) != 0)
|
||||
p_dev->io_lines = 3;
|
||||
if (pcmcia_request_io(p_dev) != 0)
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
/*
|
||||
Now set up a common memory window, if needed. There is room
|
||||
in the struct pcmcia_device structure for one memory window handle,
|
||||
but if the base addresses need to be saved, or if multiple
|
||||
windows are needed, the info should go in the private data
|
||||
structure for this device.
|
||||
|
||||
Note that the memory window base is a physical address, and
|
||||
needs to be mapped to virtual space with ioremap() before it
|
||||
is used.
|
||||
*/
|
||||
if ((cfg->mem.nwin > 0) || (dflt->mem.nwin > 0)) {
|
||||
cistpl_mem_t *mem = (cfg->mem.nwin) ? &cfg->mem : &dflt->mem;
|
||||
memreq_t map;
|
||||
req->Attributes = WIN_DATA_WIDTH_16|WIN_MEMORY_TYPE_CM;
|
||||
req->Attributes |= WIN_ENABLE;
|
||||
req->Base = mem->win[0].host_addr;
|
||||
req->Size = mem->win[0].len;
|
||||
req->AccessSpeed = 0;
|
||||
if (pcmcia_request_window(p_dev, req, &p_dev->win) != 0)
|
||||
return -ENODEV;
|
||||
map.Page = 0;
|
||||
map.CardOffset = mem->win[0].card_addr;
|
||||
if (pcmcia_map_mem_page(p_dev, p_dev->win, &map) != 0)
|
||||
return -ENODEV;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
@ -255,16 +224,11 @@ static int sedlbauer_config_check(struct pcmcia_device *p_dev,
|
|||
|
||||
static int __devinit sedlbauer_config(struct pcmcia_device *link)
|
||||
{
|
||||
win_req_t *req;
|
||||
int ret;
|
||||
IsdnCard_t icard;
|
||||
|
||||
dev_dbg(&link->dev, "sedlbauer_config(0x%p)\n", link);
|
||||
|
||||
req = kzalloc(sizeof(win_req_t), GFP_KERNEL);
|
||||
if (!req)
|
||||
return -ENOMEM;
|
||||
|
||||
/*
|
||||
In this loop, we scan the CIS for configuration table entries,
|
||||
each of which describes a valid card configuration, including
|
||||
|
|
@ -277,7 +241,7 @@ static int __devinit sedlbauer_config(struct pcmcia_device *link)
|
|||
these things without consulting the CIS, and most client drivers
|
||||
will only use the CIS to fill in implementation-defined details.
|
||||
*/
|
||||
ret = pcmcia_loop_config(link, sedlbauer_config_check, req);
|
||||
ret = pcmcia_loop_config(link, sedlbauer_config_check, NULL);
|
||||
if (ret)
|
||||
goto failed;
|
||||
|
||||
|
|
@ -297,27 +261,22 @@ static int __devinit sedlbauer_config(struct pcmcia_device *link)
|
|||
printk(", Vpp %d.%d", link->conf.Vpp/10, link->conf.Vpp%10);
|
||||
if (link->conf.Attributes & CONF_ENABLE_IRQ)
|
||||
printk(", irq %d", link->irq);
|
||||
if (link->io.NumPorts1)
|
||||
printk(", io 0x%04x-0x%04x", link->io.BasePort1,
|
||||
link->io.BasePort1+link->io.NumPorts1-1);
|
||||
if (link->io.NumPorts2)
|
||||
printk(" & 0x%04x-0x%04x", link->io.BasePort2,
|
||||
link->io.BasePort2+link->io.NumPorts2-1);
|
||||
if (link->win)
|
||||
printk(", mem 0x%06lx-0x%06lx", req->Base,
|
||||
req->Base+req->Size-1);
|
||||
if (link->resource[0])
|
||||
printk(" & %pR", link->resource[0]);
|
||||
if (link->resource[1])
|
||||
printk(" & %pR", link->resource[1]);
|
||||
printk("\n");
|
||||
|
||||
icard.para[0] = link->irq;
|
||||
icard.para[1] = link->io.BasePort1;
|
||||
icard.para[1] = link->resource[0]->start;
|
||||
icard.protocol = protocol;
|
||||
icard.typ = ISDN_CTYPE_SEDLBAUER_PCMCIA;
|
||||
|
||||
ret = hisax_init_pcmcia(link,
|
||||
&(((local_info_t *)link->priv)->stop), &icard);
|
||||
if (ret < 0) {
|
||||
printk(KERN_ERR "sedlbauer_cs: failed to initialize SEDLBAUER PCMCIA %d at i/o %#x\n",
|
||||
ret, link->io.BasePort1);
|
||||
printk(KERN_ERR "sedlbauer_cs: failed to initialize SEDLBAUER PCMCIA %d with %pR\n",
|
||||
ret, link->resource[0]);
|
||||
sedlbauer_release(link);
|
||||
return -ENODEV;
|
||||
} else
|
||||
|
|
|
|||
|
|
@ -27,7 +27,6 @@
|
|||
#include <asm/io.h>
|
||||
#include <asm/system.h>
|
||||
|
||||
#include <pcmcia/cs_types.h>
|
||||
#include <pcmcia/cs.h>
|
||||
#include <pcmcia/cistpl.h>
|
||||
#include <pcmcia/cisreg.h>
|
||||
|
|
@ -107,9 +106,8 @@ static int __devinit teles_probe(struct pcmcia_device *link)
|
|||
and attributes of IO windows) are fixed by the nature of the
|
||||
device, and can be hard-wired here.
|
||||
*/
|
||||
link->io.NumPorts1 = 96;
|
||||
link->io.Attributes1 = IO_DATA_PATH_WIDTH_AUTO;
|
||||
link->io.IOAddrLines = 5;
|
||||
link->resource[0]->end = 96;
|
||||
link->resource[0]->flags |= IO_DATA_PATH_WIDTH_AUTO;
|
||||
|
||||
link->conf.Attributes = CONF_ENABLE_IRQ;
|
||||
link->conf.IntType = INT_MEMORY_AND_IO;
|
||||
|
|
@ -154,16 +152,18 @@ static int teles_cs_configcheck(struct pcmcia_device *p_dev,
|
|||
{
|
||||
int j;
|
||||
|
||||
p_dev->io_lines = 5;
|
||||
|
||||
if ((cf->io.nwin > 0) && cf->io.win[0].base) {
|
||||
printk(KERN_INFO "(teles_cs: looks like the 96 model)\n");
|
||||
p_dev->io.BasePort1 = cf->io.win[0].base;
|
||||
if (!pcmcia_request_io(p_dev, &p_dev->io))
|
||||
p_dev->resource[0]->start = cf->io.win[0].base;
|
||||
if (!pcmcia_request_io(p_dev))
|
||||
return 0;
|
||||
} else {
|
||||
printk(KERN_INFO "(teles_cs: looks like the 97 model)\n");
|
||||
for (j = 0x2f0; j > 0x100; j -= 0x10) {
|
||||
p_dev->io.BasePort1 = j;
|
||||
if (!pcmcia_request_io(p_dev, &p_dev->io))
|
||||
p_dev->resource[0]->start = j;
|
||||
if (!pcmcia_request_io(p_dev))
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
|
@ -195,23 +195,21 @@ static int __devinit teles_cs_config(struct pcmcia_device *link)
|
|||
link->conf.ConfigIndex);
|
||||
if (link->conf.Attributes & CONF_ENABLE_IRQ)
|
||||
printk(", irq %d", link->irq);
|
||||
if (link->io.NumPorts1)
|
||||
printk(", io 0x%04x-0x%04x", link->io.BasePort1,
|
||||
link->io.BasePort1+link->io.NumPorts1-1);
|
||||
if (link->io.NumPorts2)
|
||||
printk(" & 0x%04x-0x%04x", link->io.BasePort2,
|
||||
link->io.BasePort2+link->io.NumPorts2-1);
|
||||
if (link->resource[0])
|
||||
printk(" & %pR", link->resource[0]);
|
||||
if (link->resource[1])
|
||||
printk(" & %pR", link->resource[1]);
|
||||
printk("\n");
|
||||
|
||||
icard.para[0] = link->irq;
|
||||
icard.para[1] = link->io.BasePort1;
|
||||
icard.para[1] = link->resource[0]->start;
|
||||
icard.protocol = protocol;
|
||||
icard.typ = ISDN_CTYPE_TELESPCMCIA;
|
||||
|
||||
i = hisax_init_pcmcia(link, &(((local_info_t*)link->priv)->busy), &icard);
|
||||
if (i < 0) {
|
||||
printk(KERN_ERR "teles_cs: failed to initialize Teles PCMCIA %d at i/o %#x\n",
|
||||
i, link->io.BasePort1);
|
||||
i, (unsigned int) link->resource[0]->start);
|
||||
teles_cs_release(link);
|
||||
return -ENODEV;
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue