aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/char/pcmcia
diff options
context:
space:
mode:
authorDominik Brodowski <linux@dominikbrodowski.net>2010-07-24 11:23:51 -0400
committerDominik Brodowski <linux@dominikbrodowski.net>2010-08-03 03:04:11 -0400
commit90abdc3b973229bae98dd96649d9f7106cc177a4 (patch)
tree5c1a7a131b65560dd73b5103118d8c7631bd76a4 /drivers/char/pcmcia
parent9a017a910346afd88ec2e065989903bf211a7d37 (diff)
pcmcia: do not use io_req_t when calling pcmcia_request_io()
Instead of io_req_t, drivers are now requested to fill out struct pcmcia_device *p_dev->resource[0,1] for up to two ioport ranges. After a call to pcmcia_request_io(), the ports found there are reserved, after calling pcmcia_request_configuration(), they may be used. CC: netdev@vger.kernel.org CC: linux-wireless@vger.kernel.org CC: linux-ide@vger.kernel.org CC: linux-usb@vger.kernel.org CC: laforge@gnumonks.org CC: linux-mtd@lists.infradead.org CC: alsa-devel@alsa-project.org CC: linux-serial@vger.kernel.org CC: Michael Buesch <mb@bu3sch.de> Acked-by: Marcel Holtmann <marcel@holtmann.org> (for drivers/bluetooth/) Signed-off-by: Dominik Brodowski <linux@dominikbrodowski.net>
Diffstat (limited to 'drivers/char/pcmcia')
-rw-r--r--drivers/char/pcmcia/cm4000_cs.c17
-rw-r--r--drivers/char/pcmcia/cm4040_cs.c20
-rw-r--r--drivers/char/pcmcia/ipwireless/main.c10
-rw-r--r--drivers/char/pcmcia/synclink_cs.c21
4 files changed, 26 insertions, 42 deletions
diff --git a/drivers/char/pcmcia/cm4000_cs.c b/drivers/char/pcmcia/cm4000_cs.c
index 18484edc1259..ec73d9f6d9ed 100644
--- a/drivers/char/pcmcia/cm4000_cs.c
+++ b/drivers/char/pcmcia/cm4000_cs.c
@@ -1751,17 +1751,12 @@ static int cm4000_config_check(struct pcmcia_device *p_dev,
1751 if (!cfg->io.nwin) 1751 if (!cfg->io.nwin)
1752 return -ENODEV; 1752 return -ENODEV;
1753 1753
1754 /* Get the IOaddr */ 1754 p_dev->resource[0]->start = cfg->io.win[0].base;
1755 p_dev->io.BasePort1 = cfg->io.win[0].base; 1755 p_dev->resource[0]->end = cfg->io.win[0].len;
1756 p_dev->io.NumPorts1 = cfg->io.win[0].len; 1756 p_dev->resource[0]->flags |= pcmcia_io_cfg_data_width(cfg->io.flags);
1757 p_dev->io.Attributes1 = IO_DATA_PATH_WIDTH_AUTO; 1757 p_dev->io_lines = cfg->io.flags & CISTPL_IO_LINES_MASK;
1758 if (!(cfg->io.flags & CISTPL_IO_8BIT)) 1758
1759 p_dev->io.Attributes1 = IO_DATA_PATH_WIDTH_16; 1759 return pcmcia_request_io(p_dev);
1760 if (!(cfg->io.flags & CISTPL_IO_16BIT))
1761 p_dev->io.Attributes1 = IO_DATA_PATH_WIDTH_8;
1762 p_dev->io.IOAddrLines = cfg->io.flags & CISTPL_IO_LINES_MASK;
1763
1764 return pcmcia_request_io(p_dev, &p_dev->io);
1765} 1760}
1766 1761
1767static int cm4000_config(struct pcmcia_device * link, int devno) 1762static int cm4000_config(struct pcmcia_device * link, int devno)
diff --git a/drivers/char/pcmcia/cm4040_cs.c b/drivers/char/pcmcia/cm4040_cs.c
index a6bbf199dde9..815cde1d0570 100644
--- a/drivers/char/pcmcia/cm4040_cs.c
+++ b/drivers/char/pcmcia/cm4040_cs.c
@@ -527,16 +527,12 @@ static int cm4040_config_check(struct pcmcia_device *p_dev,
527 return -ENODEV; 527 return -ENODEV;
528 528
529 /* Get the IOaddr */ 529 /* Get the IOaddr */
530 p_dev->io.BasePort1 = cfg->io.win[0].base; 530 p_dev->resource[0]->start = cfg->io.win[0].base;
531 p_dev->io.NumPorts1 = cfg->io.win[0].len; 531 p_dev->resource[0]->end = cfg->io.win[0].len;
532 p_dev->io.Attributes1 = IO_DATA_PATH_WIDTH_AUTO; 532 p_dev->resource[0]->flags |= pcmcia_io_cfg_data_width(cfg->io.flags);
533 if (!(cfg->io.flags & CISTPL_IO_8BIT)) 533 p_dev->io_lines = cfg->io.flags & CISTPL_IO_LINES_MASK;
534 p_dev->io.Attributes1 = IO_DATA_PATH_WIDTH_16; 534 rc = pcmcia_request_io(p_dev);
535 if (!(cfg->io.flags & CISTPL_IO_16BIT)) 535
536 p_dev->io.Attributes1 = IO_DATA_PATH_WIDTH_8;
537 p_dev->io.IOAddrLines = cfg->io.flags & CISTPL_IO_LINES_MASK;
538
539 rc = pcmcia_request_io(p_dev, &p_dev->io);
540 dev_printk(KERN_INFO, &p_dev->dev, 536 dev_printk(KERN_INFO, &p_dev->dev,
541 "pcmcia_request_io returned 0x%x\n", rc); 537 "pcmcia_request_io returned 0x%x\n", rc);
542 return rc; 538 return rc;
@@ -548,10 +544,6 @@ static int reader_config(struct pcmcia_device *link, int devno)
548 struct reader_dev *dev; 544 struct reader_dev *dev;
549 int fail_rc; 545 int fail_rc;
550 546
551 link->io.BasePort2 = 0;
552 link->io.NumPorts2 = 0;
553 link->io.Attributes2 = 0;
554
555 if (pcmcia_loop_config(link, cm4040_config_check, NULL)) 547 if (pcmcia_loop_config(link, cm4040_config_check, NULL))
556 goto cs_release; 548 goto cs_release;
557 549
diff --git a/drivers/char/pcmcia/ipwireless/main.c b/drivers/char/pcmcia/ipwireless/main.c
index 9467994d556f..5f87b9f7b6d2 100644
--- a/drivers/char/pcmcia/ipwireless/main.c
+++ b/drivers/char/pcmcia/ipwireless/main.c
@@ -88,15 +88,15 @@ static int ipwireless_probe(struct pcmcia_device *p_dev,
88 memreq_t memreq_common_memory; 88 memreq_t memreq_common_memory;
89 int ret; 89 int ret;
90 90
91 p_dev->io.Attributes1 = IO_DATA_PATH_WIDTH_AUTO; 91 p_dev->resource[0]->flags |= IO_DATA_PATH_WIDTH_AUTO;
92 p_dev->io.BasePort1 = cfg->io.win[0].base; 92 p_dev->resource[0]->start = cfg->io.win[0].base;
93 p_dev->io.NumPorts1 = cfg->io.win[0].len; 93 p_dev->resource[0]->end = cfg->io.win[0].len;
94 p_dev->io.IOAddrLines = 16;
95 94
96 /* 0x40 causes it to generate level mode interrupts. */ 95 /* 0x40 causes it to generate level mode interrupts. */
97 /* 0x04 enables IREQ pin. */ 96 /* 0x04 enables IREQ pin. */
98 p_dev->conf.ConfigIndex = cfg->index | 0x44; 97 p_dev->conf.ConfigIndex = cfg->index | 0x44;
99 ret = pcmcia_request_io(p_dev, &p_dev->io); 98 p_dev->io_lines = 16;
99 ret = pcmcia_request_io(p_dev);
100 if (ret) 100 if (ret)
101 return ret; 101 return ret;
102 102
diff --git a/drivers/char/pcmcia/synclink_cs.c b/drivers/char/pcmcia/synclink_cs.c
index 8ded9b02b9b9..9ecd6bef5d3b 100644
--- a/drivers/char/pcmcia/synclink_cs.c
+++ b/drivers/char/pcmcia/synclink_cs.c
@@ -571,18 +571,15 @@ static int mgslpc_ioprobe(struct pcmcia_device *p_dev,
571 unsigned int vcc, 571 unsigned int vcc,
572 void *priv_data) 572 void *priv_data)
573{ 573{
574 if (cfg->io.nwin > 0) { 574 if (!cfg->io.nwin)
575 p_dev->io.Attributes1 = IO_DATA_PATH_WIDTH_AUTO; 575 return -ENODEV;
576 if (!(cfg->io.flags & CISTPL_IO_8BIT)) 576
577 p_dev->io.Attributes1 = IO_DATA_PATH_WIDTH_16; 577 p_dev->resource[0]->start = cfg->io.win[0].base;
578 if (!(cfg->io.flags & CISTPL_IO_16BIT)) 578 p_dev->resource[0]->end = cfg->io.win[0].len;
579 p_dev->io.Attributes1 = IO_DATA_PATH_WIDTH_8; 579 p_dev->resource[0]->flags |= pcmcia_io_cfg_data_width(cfg->io.flags);
580 p_dev->io.IOAddrLines = cfg->io.flags & CISTPL_IO_LINES_MASK; 580 p_dev->io_lines = cfg->io.flags & CISTPL_IO_LINES_MASK;
581 p_dev->io.BasePort1 = cfg->io.win[0].base; 581
582 p_dev->io.NumPorts1 = cfg->io.win[0].len; 582 return pcmcia_request_io(p_dev);
583 return pcmcia_request_io(p_dev, &p_dev->io);
584 }
585 return -ENODEV;
586} 583}
587 584
588static int mgslpc_config(struct pcmcia_device *link) 585static int mgslpc_config(struct pcmcia_device *link)