Skip to content

Commit

Permalink
[PATCH] pcmcia: add pcmcia_disable_device
Browse files Browse the repository at this point in the history
pcmcia_disable_device(struct pcmcia_device *p_dev) performs the necessary
cleanups upon device or driver removal: it calls the appropriate
pcmcia_release_* functions, and can replace (most) of the current drivers'
_release() functions.

Signed-off-by: Dominik Brodowski <linux@dominikbrodowski.net>
  • Loading branch information
Dominik Brodowski committed Mar 31, 2006
1 parent 1de9ced commit 5f2a71f
Show file tree
Hide file tree
Showing 43 changed files with 155 additions and 403 deletions.
6 changes: 6 additions & 0 deletions Documentation/pcmcia/driver-changes.txt
Original file line number Diff line number Diff line change
@@ -1,5 +1,11 @@
This file details changes in 2.6 which affect PCMCIA card driver authors:

* New release helper (as of 2.6.17)
Instead of calling pcmcia_release_{configuration,io,irq,win}, all that's
necessary now is calling pcmcia_disable_device. As there is no valid
reason left to call pcmcia_release_io and pcmcia_release_irq, they will
be removed soon.

* Unify detach and REMOVAL event code, as well as attach and INSERTION
code (as of 2.6.16)
void (*remove) (struct pcmcia_device *dev);
Expand Down
8 changes: 1 addition & 7 deletions drivers/bluetooth/bluecard_cs.c
Original file line number Diff line number Diff line change
Expand Up @@ -1002,13 +1002,7 @@ static void bluecard_release(dev_link_t *link)

del_timer(&(info->timer));

link->dev = NULL;

pcmcia_release_configuration(link->handle);
pcmcia_release_io(link->handle, &link->io);
pcmcia_release_irq(link->handle, &link->irq);

link->state &= ~DEV_CONFIG;
pcmcia_disable_device(link->handle);
}

static int bluecard_suspend(struct pcmcia_device *dev)
Expand Down
8 changes: 1 addition & 7 deletions drivers/bluetooth/bt3c_cs.c
Original file line number Diff line number Diff line change
Expand Up @@ -839,13 +839,7 @@ static void bt3c_release(dev_link_t *link)
if (link->state & DEV_PRESENT)
bt3c_close(info);

link->dev = NULL;

pcmcia_release_configuration(link->handle);
pcmcia_release_io(link->handle, &link->io);
pcmcia_release_irq(link->handle, &link->irq);

link->state &= ~DEV_CONFIG;
pcmcia_disable_device(link->handle);
}

static int bt3c_suspend(struct pcmcia_device *dev)
Expand Down
8 changes: 1 addition & 7 deletions drivers/bluetooth/btuart_cs.c
Original file line number Diff line number Diff line change
Expand Up @@ -768,13 +768,7 @@ static void btuart_release(dev_link_t *link)
if (link->state & DEV_PRESENT)
btuart_close(info);

link->dev = NULL;

pcmcia_release_configuration(link->handle);
pcmcia_release_io(link->handle, &link->io);
pcmcia_release_irq(link->handle, &link->irq);

link->state &= ~DEV_CONFIG;
pcmcia_disable_device(link->handle);
}

static int btuart_suspend(struct pcmcia_device *dev)
Expand Down
8 changes: 1 addition & 7 deletions drivers/bluetooth/dtl1_cs.c
Original file line number Diff line number Diff line change
Expand Up @@ -720,13 +720,7 @@ static void dtl1_release(dev_link_t *link)
if (link->state & DEV_PRESENT)
dtl1_close(info);

link->dev = NULL;

pcmcia_release_configuration(link->handle);
pcmcia_release_io(link->handle, &link->io);
pcmcia_release_irq(link->handle, &link->irq);

link->state &= ~DEV_CONFIG;
pcmcia_disable_device(link->handle);
}

static int dtl1_suspend(struct pcmcia_device *dev)
Expand Down
3 changes: 1 addition & 2 deletions drivers/char/pcmcia/cm4000_cs.c
Original file line number Diff line number Diff line change
Expand Up @@ -1899,8 +1899,7 @@ static int cm4000_resume(struct pcmcia_device *p_dev)
static void cm4000_release(dev_link_t *link)
{
cmm_cm4000_release(link->priv); /* delay release until device closed */
pcmcia_release_configuration(link->handle);
pcmcia_release_io(link->handle, &link->io);
pcmcia_disable_device(link->handle);
}

static int cm4000_attach(struct pcmcia_device *p_dev)
Expand Down
3 changes: 1 addition & 2 deletions drivers/char/pcmcia/cm4040_cs.c
Original file line number Diff line number Diff line change
Expand Up @@ -654,8 +654,7 @@ static int reader_resume(struct pcmcia_device *p_dev)
static void reader_release(dev_link_t *link)
{
cm4040_reader_release(link->priv);
pcmcia_release_configuration(link->handle);
pcmcia_release_io(link->handle, &link->io);
pcmcia_disable_device(link->handle);
}

static int reader_attach(struct pcmcia_device *p_dev)
Expand Down
10 changes: 1 addition & 9 deletions drivers/char/pcmcia/synclink_cs.c
Original file line number Diff line number Diff line change
Expand Up @@ -710,15 +710,7 @@ static void mgslpc_release(u_long arg)
if (debug_level >= DEBUG_LEVEL_INFO)
printk("mgslpc_release(0x%p)\n", link);

/* Unlink the device chain */
link->dev = NULL;
link->state &= ~DEV_CONFIG;

pcmcia_release_configuration(link->handle);
if (link->io.NumPorts1)
pcmcia_release_io(link->handle, &link->io);
if (link->irq.AssignedIRQ)
pcmcia_release_irq(link->handle, &link->irq);
pcmcia_disable_device(link->handle);
}

static void mgslpc_detach(struct pcmcia_device *p_dev)
Expand Down
8 changes: 1 addition & 7 deletions drivers/ide/legacy/ide-cs.c
Original file line number Diff line number Diff line change
Expand Up @@ -369,14 +369,8 @@ void ide_release(dev_link_t *link)
ide_unregister(info->hd);
}
info->ndev = 0;
link->dev = NULL;

pcmcia_release_configuration(link->handle);
pcmcia_release_io(link->handle, &link->io);
pcmcia_release_irq(link->handle, &link->irq);

link->state &= ~DEV_CONFIG;

pcmcia_disable_device(link->handle);
} /* ide_release */

static int ide_suspend(struct pcmcia_device *dev)
Expand Down
12 changes: 2 additions & 10 deletions drivers/isdn/hardware/avm/avm_cs.c
Original file line number Diff line number Diff line change
Expand Up @@ -367,16 +367,8 @@ static void avmcs_config(dev_link_t *link)

static void avmcs_release(dev_link_t *link)
{
b1pcmcia_delcard(link->io.BasePort1, link->irq.AssignedIRQ);

/* Unlink the device chain */
link->dev = NULL;

/* Don't bother checking to see if these succeed or not */
pcmcia_release_configuration(link->handle);
pcmcia_release_io(link->handle, &link->io);
pcmcia_release_irq(link->handle, &link->irq);
link->state &= ~DEV_CONFIG;
b1pcmcia_delcard(link->io.BasePort1, link->irq.AssignedIRQ);
pcmcia_disable_device(link->handle);
} /* avmcs_release */

static int avmcs_suspend(struct pcmcia_device *dev)
Expand Down
17 changes: 5 additions & 12 deletions drivers/isdn/hisax/avma1_cs.c
Original file line number Diff line number Diff line change
Expand Up @@ -373,21 +373,14 @@ static void avma1cs_config(dev_link_t *link)

static void avma1cs_release(dev_link_t *link)
{
local_info_t *local = link->priv;
local_info_t *local = link->priv;

DEBUG(0, "avma1cs_release(0x%p)\n", link);
DEBUG(0, "avma1cs_release(0x%p)\n", link);

/* no unregister function with hisax */
HiSax_closecard(local->node.minor);
/* now unregister function with hisax */
HiSax_closecard(local->node.minor);

/* Unlink the device chain */
link->dev = NULL;

/* Don't bother checking to see if these succeed or not */
pcmcia_release_configuration(link->handle);
pcmcia_release_io(link->handle, &link->io);
pcmcia_release_irq(link->handle, &link->irq);
link->state &= ~DEV_CONFIG;
pcmcia_disable_device(link->handle);
} /* avma1cs_release */

static int avma1cs_suspend(struct pcmcia_device *dev)
Expand Down
12 changes: 2 additions & 10 deletions drivers/isdn/hisax/elsa_cs.c
Original file line number Diff line number Diff line change
Expand Up @@ -380,16 +380,8 @@ static void elsa_cs_release(dev_link_t *link)
HiSax_closecard(local->cardnr);
}
}
/* Unlink the device chain */
link->dev = NULL;

/* Don't bother checking to see if these succeed or not */
if (link->win)
pcmcia_release_window(link->win);
pcmcia_release_configuration(link->handle);
pcmcia_release_io(link->handle, &link->io);
pcmcia_release_irq(link->handle, &link->irq);
link->state &= ~DEV_CONFIG;

pcmcia_disable_device(link->handle);
} /* elsa_cs_release */

static int elsa_suspend(struct pcmcia_device *p_dev)
Expand Down
17 changes: 1 addition & 16 deletions drivers/isdn/hisax/sedlbauer_cs.c
Original file line number Diff line number Diff line change
Expand Up @@ -467,23 +467,8 @@ static void sedlbauer_release(dev_link_t *link)
HiSax_closecard(local->cardnr);
}
}
/* Unlink the device chain */
link->dev = NULL;

/*
In a normal driver, additional code may be needed to release
other kernel data structures associated with this device.
*/

/* Don't bother checking to see if these succeed or not */
if (link->win)
pcmcia_release_window(link->win);
pcmcia_release_configuration(link->handle);
if (link->io.NumPorts1)
pcmcia_release_io(link->handle, &link->io);
if (link->irq.AssignedIRQ)
pcmcia_release_irq(link->handle, &link->irq);
link->state &= ~DEV_CONFIG;
pcmcia_disable_device(link->handle);
} /* sedlbauer_release */

static int sedlbauer_suspend(struct pcmcia_device *p_dev)
Expand Down
12 changes: 2 additions & 10 deletions drivers/isdn/hisax/teles_cs.c
Original file line number Diff line number Diff line change
Expand Up @@ -371,16 +371,8 @@ static void teles_cs_release(dev_link_t *link)
HiSax_closecard(local->cardnr);
}
}
/* Unlink the device chain */
link->dev = NULL;

/* Don't bother checking to see if these succeed or not */
if (link->win)
pcmcia_release_window(link->win);
pcmcia_release_configuration(link->handle);
pcmcia_release_io(link->handle, &link->io);
pcmcia_release_irq(link->handle, &link->irq);
link->state &= ~DEV_CONFIG;

pcmcia_disable_device(link->handle);
} /* teles_cs_release */

static int teles_suspend(struct pcmcia_device *p_dev)
Expand Down
8 changes: 1 addition & 7 deletions drivers/net/pcmcia/3c574_cs.c
Original file line number Diff line number Diff line change
Expand Up @@ -511,13 +511,7 @@ static void tc574_config(dev_link_t *link)

static void tc574_release(dev_link_t *link)
{
DEBUG(0, "3c574_release(0x%p)\n", link);

pcmcia_release_configuration(link->handle);
pcmcia_release_io(link->handle, &link->io);
pcmcia_release_irq(link->handle, &link->irq);

link->state &= ~DEV_CONFIG;
pcmcia_disable_device(link->handle);
}

static int tc574_suspend(struct pcmcia_device *p_dev)
Expand Down
8 changes: 1 addition & 7 deletions drivers/net/pcmcia/3c589_cs.c
Original file line number Diff line number Diff line change
Expand Up @@ -386,13 +386,7 @@ static void tc589_config(dev_link_t *link)

static void tc589_release(dev_link_t *link)
{
DEBUG(0, "3c589_release(0x%p)\n", link);

pcmcia_release_configuration(link->handle);
pcmcia_release_io(link->handle, &link->io);
pcmcia_release_irq(link->handle, &link->irq);

link->state &= ~DEV_CONFIG;
pcmcia_disable_device(link->handle);
}

static int tc589_suspend(struct pcmcia_device *p_dev)
Expand Down
8 changes: 1 addition & 7 deletions drivers/net/pcmcia/axnet_cs.c
Original file line number Diff line number Diff line change
Expand Up @@ -456,13 +456,7 @@ static void axnet_config(dev_link_t *link)

static void axnet_release(dev_link_t *link)
{
DEBUG(0, "axnet_release(0x%p)\n", link);

pcmcia_release_configuration(link->handle);
pcmcia_release_io(link->handle, &link->io);
pcmcia_release_irq(link->handle, &link->irq);

link->state &= ~DEV_CONFIG;
pcmcia_disable_device(link->handle);
}

static int axnet_suspend(struct pcmcia_device *p_dev)
Expand Down
12 changes: 2 additions & 10 deletions drivers/net/pcmcia/com20020_cs.c
Original file line number Diff line number Diff line change
Expand Up @@ -377,16 +377,8 @@ static void com20020_config(dev_link_t *link)

static void com20020_release(dev_link_t *link)
{

DEBUG(1,"release...\n");

DEBUG(0, "com20020_release(0x%p)\n", link);

pcmcia_release_configuration(link->handle);
pcmcia_release_io(link->handle, &link->io);
pcmcia_release_irq(link->handle, &link->irq);

link->state &= ~(DEV_CONFIG | DEV_RELEASE_PENDING);
DEBUG(0, "com20020_release(0x%p)\n", link);
pcmcia_disable_device(link->handle);
}

static int com20020_suspend(struct pcmcia_device *p_dev)
Expand Down
12 changes: 2 additions & 10 deletions drivers/net/pcmcia/fmvj18x_cs.c
Original file line number Diff line number Diff line change
Expand Up @@ -674,16 +674,8 @@ static int fmvj18x_setup_mfc(dev_link_t *link)

static void fmvj18x_release(dev_link_t *link)
{

DEBUG(0, "fmvj18x_release(0x%p)\n", link);

/* Don't bother checking to see if these succeed or not */
pcmcia_release_window(link->win);
pcmcia_release_configuration(link->handle);
pcmcia_release_io(link->handle, &link->io);
pcmcia_release_irq(link->handle, &link->irq);

link->state &= ~DEV_CONFIG;
DEBUG(0, "fmvj18x_release(0x%p)\n", link);
pcmcia_disable_device(link->handle);
}

static int fmvj18x_suspend(struct pcmcia_device *p_dev)
Expand Down
23 changes: 9 additions & 14 deletions drivers/net/pcmcia/ibmtr_cs.c
Original file line number Diff line number Diff line change
Expand Up @@ -348,22 +348,17 @@ static void ibmtr_config(dev_link_t *link)

static void ibmtr_release(dev_link_t *link)
{
ibmtr_dev_t *info = link->priv;
struct net_device *dev = info->dev;

DEBUG(0, "ibmtr_release(0x%p)\n", link);
ibmtr_dev_t *info = link->priv;
struct net_device *dev = info->dev;

pcmcia_release_configuration(link->handle);
pcmcia_release_io(link->handle, &link->io);
pcmcia_release_irq(link->handle, &link->irq);
if (link->win) {
struct tok_info *ti = netdev_priv(dev);
iounmap(ti->mmio);
pcmcia_release_window(link->win);
pcmcia_release_window(info->sram_win_handle);
}
DEBUG(0, "ibmtr_release(0x%p)\n", link);

link->state &= ~DEV_CONFIG;
if (link->win) {
struct tok_info *ti = netdev_priv(dev);
iounmap(ti->mmio);
pcmcia_release_window(info->sram_win_handle);
}
pcmcia_disable_device(link->handle);
}

static int ibmtr_suspend(struct pcmcia_device *p_dev)
Expand Down
10 changes: 2 additions & 8 deletions drivers/net/pcmcia/nmclan_cs.c
Original file line number Diff line number Diff line change
Expand Up @@ -765,14 +765,8 @@ nmclan_release
---------------------------------------------------------------------------- */
static void nmclan_release(dev_link_t *link)
{

DEBUG(0, "nmclan_release(0x%p)\n", link);

pcmcia_release_configuration(link->handle);
pcmcia_release_io(link->handle, &link->io);
pcmcia_release_irq(link->handle, &link->irq);

link->state &= ~DEV_CONFIG;
DEBUG(0, "nmclan_release(0x%p)\n", link);
pcmcia_disable_device(link->handle);
}

static int nmclan_suspend(struct pcmcia_device *p_dev)
Expand Down
15 changes: 5 additions & 10 deletions drivers/net/pcmcia/pcnet_cs.c
Original file line number Diff line number Diff line change
Expand Up @@ -732,19 +732,14 @@ static void pcnet_config(dev_link_t *link)

static void pcnet_release(dev_link_t *link)
{
pcnet_dev_t *info = PRIV(link->priv);
pcnet_dev_t *info = PRIV(link->priv);

DEBUG(0, "pcnet_release(0x%p)\n", link);
DEBUG(0, "pcnet_release(0x%p)\n", link);

if (info->flags & USE_SHMEM) {
iounmap(info->base);
pcmcia_release_window(link->win);
}
pcmcia_release_configuration(link->handle);
pcmcia_release_io(link->handle, &link->io);
pcmcia_release_irq(link->handle, &link->irq);
if (info->flags & USE_SHMEM)
iounmap(info->base);

link->state &= ~DEV_CONFIG;
pcmcia_disable_device(link->handle);
}

/*======================================================================
Expand Down
Loading

0 comments on commit 5f2a71f

Please sign in to comment.