]> err.no Git - linux-2.6/blobdiff - drivers/bluetooth/bluecard_cs.c
Merge branch 'upstream-linus' of master.kernel.org:/pub/scm/linux/kernel/git/jgarzik...
[linux-2.6] / drivers / bluetooth / bluecard_cs.c
index e557f2359ccc8029b1e5a6bf35d387477903ea1f..cbc07250b8984f1c95f07539da45f89d6a914a57 100644 (file)
@@ -20,7 +20,6 @@
  *
  */
 
-#include <linux/config.h>
 #include <linux/module.h>
 
 #include <linux/kernel.h>
@@ -85,7 +84,7 @@ typedef struct bluecard_info_t {
 } bluecard_info_t;
 
 
-static void bluecard_config(struct pcmcia_device *link);
+static int bluecard_config(struct pcmcia_device *link);
 static void bluecard_release(struct pcmcia_device *link);
 
 static void bluecard_detach(struct pcmcia_device *p_dev);
@@ -244,7 +243,7 @@ static void bluecard_write_wakeup(bluecard_info_t *info)
 
                clear_bit(XMIT_WAKEUP, &(info->tx_state));
 
-               if (!(info->p_dev->state & DEV_PRESENT))
+               if (!pcmcia_dev_present(info->p_dev))
                        return;
 
                if (test_bit(XMIT_BUFFER_NUMBER, &(info->tx_state))) {
@@ -283,7 +282,7 @@ static void bluecard_write_wakeup(bluecard_info_t *info)
                clear_bit(ready_bit, &(info->tx_state));
 
                if (bt_cb(skb)->pkt_type & 0x80) {
-                       DECLARE_WAIT_QUEUE_HEAD(wq);
+                       DECLARE_WAIT_QUEUE_HEAD_ONSTACK(wq);
                        DEFINE_WAIT(wait);
 
                        unsigned char baud_reg;
@@ -498,7 +497,7 @@ static void bluecard_receive(bluecard_info_t *info, unsigned int offset)
 }
 
 
-static irqreturn_t bluecard_interrupt(int irq, void *dev_inst, struct pt_regs *regs)
+static irqreturn_t bluecard_interrupt(int irq, void *dev_inst)
 {
        bluecard_info_t *info = dev_inst;
        unsigned int iobase;
@@ -740,6 +739,7 @@ static int bluecard_open(bluecard_info_t *info)
 
        hdev->type = HCI_PCCARD;
        hdev->driver_data = info;
+       SET_HCIDEV_DEV(hdev, &info->p_dev->dev);
 
        hdev->open     = bluecard_hci_open;
        hdev->close    = bluecard_hci_close;
@@ -856,7 +856,7 @@ static int bluecard_close(bluecard_info_t *info)
        return 0;
 }
 
-static int bluecard_attach(struct pcmcia_device *link)
+static int bluecard_probe(struct pcmcia_device *link)
 {
        bluecard_info_t *info;
 
@@ -879,10 +879,7 @@ static int bluecard_attach(struct pcmcia_device *link)
        link->conf.Attributes = CONF_ENABLE_IRQ;
        link->conf.IntType = INT_MEMORY_AND_IO;
 
-       link->state |= DEV_PRESENT | DEV_CONFIG_PENDING;
-       bluecard_config(link);
-
-       return 0;
+       return bluecard_config(link);
 }
 
 
@@ -890,9 +887,7 @@ static void bluecard_detach(struct pcmcia_device *link)
 {
        bluecard_info_t *info = link->priv;
 
-       if (link->state & DEV_CONFIG)
-               bluecard_release(link);
-
+       bluecard_release(link);
        kfree(info);
 }
 
@@ -912,7 +907,7 @@ static int first_tuple(struct pcmcia_device *handle, tuple_t *tuple, cisparse_t
        return pcmcia_parse_tuple(handle, tuple, parse);
 }
 
-static void bluecard_config(struct pcmcia_device *link)
+static int bluecard_config(struct pcmcia_device *link)
 {
        bluecard_info_t *info = link->priv;
        tuple_t tuple;
@@ -935,9 +930,6 @@ static void bluecard_config(struct pcmcia_device *link)
        link->conf.ConfigBase = parse.config.base;
        link->conf.Present = parse.config.rmask[0];
 
-       /* Configure card */
-       link->state |= DEV_CONFIG;
-
        link->conf.ConfigIndex = 0x20;
        link->io.NumPorts1 = 64;
        link->io.IOAddrLines = 6;
@@ -971,15 +963,15 @@ static void bluecard_config(struct pcmcia_device *link)
 
        strcpy(info->node.dev_name, info->hdev->name);
        link->dev_node = &info->node;
-       link->state &= ~DEV_CONFIG_PENDING;
 
-       return;
+       return 0;
 
 cs_failed:
        cs_error(link, last_fn, last_ret);
 
 failed:
        bluecard_release(link);
+       return -ENODEV;
 }
 
 
@@ -987,8 +979,7 @@ static void bluecard_release(struct pcmcia_device *link)
 {
        bluecard_info_t *info = link->priv;
 
-       if (link->state & DEV_PRESENT)
-               bluecard_close(info);
+       bluecard_close(info);
 
        del_timer(&(info->timer));
 
@@ -1008,7 +999,7 @@ static struct pcmcia_driver bluecard_driver = {
        .drv            = {
                .name   = "bluecard_cs",
        },
-       .probe          = bluecard_attach,
+       .probe          = bluecard_probe,
        .remove         = bluecard_detach,
        .id_table       = bluecard_ids,
 };