Skip to content

Commit

Permalink
[PATCH] pcmcia: unify detach, REMOVAL_EVENT handlers into one remove …
Browse files Browse the repository at this point in the history
…callback

Unify the "detach" and REMOVAL_EVENT handlers to one "remove" function.
Old functionality is preserved, for the moment.

Signed-off-by: Dominik Brodowski <[email protected]>
  • Loading branch information
Dominik Brodowski committed Jan 5, 2006
1 parent 8e9e793 commit cc3b486
Show file tree
Hide file tree
Showing 47 changed files with 373 additions and 896 deletions.
3 changes: 3 additions & 0 deletions Documentation/pcmcia/driver-changes.txt
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
This file details changes in 2.6 which affect PCMCIA card driver authors:

* Unify detach and REMOVAL event code (as of 2.6.16)
void (*remove) (struct pcmcia_device *dev);

* Move suspend, resume and reset out of event handler (as of 2.6.16)
int (*suspend) (struct pcmcia_device *dev);
int (*resume) (struct pcmcia_device *dev);
Expand Down
24 changes: 5 additions & 19 deletions drivers/bluetooth/bluecard_cs.c
Original file line number Diff line number Diff line change
Expand Up @@ -92,7 +92,7 @@ static int bluecard_event(event_t event, int priority, event_callback_args_t *ar
static dev_info_t dev_info = "bluecard_cs";

static dev_link_t *bluecard_attach(void);
static void bluecard_detach(dev_link_t *);
static void bluecard_detach(struct pcmcia_device *p_dev);

static dev_link_t *dev_list = NULL;

Expand Down Expand Up @@ -899,19 +899,19 @@ static dev_link_t *bluecard_attach(void)
ret = pcmcia_register_client(&link->handle, &client_reg);
if (ret != CS_SUCCESS) {
cs_error(link->handle, RegisterClient, ret);
bluecard_detach(link);
bluecard_detach(link->handle);
return NULL;
}

return link;
}


static void bluecard_detach(dev_link_t *link)
static void bluecard_detach(struct pcmcia_device *p_dev)
{
dev_link_t *link = dev_to_instance(p_dev);
bluecard_info_t *info = link->priv;
dev_link_t **linkp;
int ret;

/* Locate device structure */
for (linkp = &dev_list; *linkp; linkp = &(*linkp)->next)
Expand All @@ -924,12 +924,6 @@ static void bluecard_detach(dev_link_t *link)
if (link->state & DEV_CONFIG)
bluecard_release(link);

if (link->handle) {
ret = pcmcia_deregister_client(link->handle);
if (ret != CS_SUCCESS)
cs_error(link->handle, DeregisterClient, ret);
}

/* Unlink device structure, free bits */
*linkp = link->next;

Expand Down Expand Up @@ -1070,16 +1064,8 @@ static int bluecard_resume(struct pcmcia_device *dev)
static int bluecard_event(event_t event, int priority, event_callback_args_t *args)
{
dev_link_t *link = args->client_data;
bluecard_info_t *info = link->priv;

switch (event) {
case CS_EVENT_CARD_REMOVAL:
link->state &= ~DEV_PRESENT;
if (link->state & DEV_CONFIG) {
bluecard_close(info);
bluecard_release(link);
}
break;
case CS_EVENT_CARD_INSERTION:
link->state |= DEV_PRESENT | DEV_CONFIG_PENDING;
bluecard_config(link);
Expand All @@ -1104,7 +1090,7 @@ static struct pcmcia_driver bluecard_driver = {
},
.attach = bluecard_attach,
.event = bluecard_event,
.detach = bluecard_detach,
.remove = bluecard_detach,
.id_table = bluecard_ids,
.suspend = bluecard_suspend,
.resume = bluecard_resume,
Expand Down
24 changes: 5 additions & 19 deletions drivers/bluetooth/bt3c_cs.c
Original file line number Diff line number Diff line change
Expand Up @@ -95,7 +95,7 @@ static int bt3c_event(event_t event, int priority, event_callback_args_t *args);
static dev_info_t dev_info = "bt3c_cs";

static dev_link_t *bt3c_attach(void);
static void bt3c_detach(dev_link_t *);
static void bt3c_detach(struct pcmcia_device *p_dev);

static dev_link_t *dev_list = NULL;

Expand Down Expand Up @@ -700,19 +700,19 @@ static dev_link_t *bt3c_attach(void)
ret = pcmcia_register_client(&link->handle, &client_reg);
if (ret != CS_SUCCESS) {
cs_error(link->handle, RegisterClient, ret);
bt3c_detach(link);
bt3c_detach(link->handle);
return NULL;
}

return link;
}


static void bt3c_detach(dev_link_t *link)
static void bt3c_detach(struct pcmcia_device *p_dev)
{
dev_link_t *link = dev_to_instance(p_dev);
bt3c_info_t *info = link->priv;
dev_link_t **linkp;
int ret;

/* Locate device structure */
for (linkp = &dev_list; *linkp; linkp = &(*linkp)->next)
Expand All @@ -725,12 +725,6 @@ static void bt3c_detach(dev_link_t *link)
if (link->state & DEV_CONFIG)
bt3c_release(link);

if (link->handle) {
ret = pcmcia_deregister_client(link->handle);
if (ret != CS_SUCCESS)
cs_error(link->handle, DeregisterClient, ret);
}

/* Unlink device structure, free bits */
*linkp = link->next;

Expand Down Expand Up @@ -916,16 +910,8 @@ static int bt3c_resume(struct pcmcia_device *dev)
static int bt3c_event(event_t event, int priority, event_callback_args_t *args)
{
dev_link_t *link = args->client_data;
bt3c_info_t *info = link->priv;

switch (event) {
case CS_EVENT_CARD_REMOVAL:
link->state &= ~DEV_PRESENT;
if (link->state & DEV_CONFIG) {
bt3c_close(info);
bt3c_release(link);
}
break;
case CS_EVENT_CARD_INSERTION:
link->state |= DEV_PRESENT | DEV_CONFIG_PENDING;
bt3c_config(link);
Expand All @@ -948,7 +934,7 @@ static struct pcmcia_driver bt3c_driver = {
},
.attach = bt3c_attach,
.event = bt3c_event,
.detach = bt3c_detach,
.remove = bt3c_detach,
.id_table = bt3c_ids,
.suspend = bt3c_suspend,
.resume = bt3c_resume,
Expand Down
24 changes: 5 additions & 19 deletions drivers/bluetooth/btuart_cs.c
Original file line number Diff line number Diff line change
Expand Up @@ -91,7 +91,7 @@ static int btuart_event(event_t event, int priority, event_callback_args_t *args
static dev_info_t dev_info = "btuart_cs";

static dev_link_t *btuart_attach(void);
static void btuart_detach(dev_link_t *);
static void btuart_detach(struct pcmcia_device *p_dev);

static dev_link_t *dev_list = NULL;

Expand Down Expand Up @@ -619,19 +619,19 @@ static dev_link_t *btuart_attach(void)
ret = pcmcia_register_client(&link->handle, &client_reg);
if (ret != CS_SUCCESS) {
cs_error(link->handle, RegisterClient, ret);
btuart_detach(link);
btuart_detach(link->handle);
return NULL;
}

return link;
}


static void btuart_detach(dev_link_t *link)
static void btuart_detach(struct pcmcia_device *p_dev)
{
dev_link_t *link = dev_to_instance(p_dev);
btuart_info_t *info = link->priv;
dev_link_t **linkp;
int ret;

/* Locate device structure */
for (linkp = &dev_list; *linkp; linkp = &(*linkp)->next)
Expand All @@ -644,12 +644,6 @@ static void btuart_detach(dev_link_t *link)
if (link->state & DEV_CONFIG)
btuart_release(link);

if (link->handle) {
ret = pcmcia_deregister_client(link->handle);
if (ret != CS_SUCCESS)
cs_error(link->handle, DeregisterClient, ret);
}

/* Unlink device structure, free bits */
*linkp = link->next;

Expand Down Expand Up @@ -837,16 +831,8 @@ static int btuart_resume(struct pcmcia_device *dev)
static int btuart_event(event_t event, int priority, event_callback_args_t *args)
{
dev_link_t *link = args->client_data;
btuart_info_t *info = link->priv;

switch (event) {
case CS_EVENT_CARD_REMOVAL:
link->state &= ~DEV_PRESENT;
if (link->state & DEV_CONFIG) {
btuart_close(info);
btuart_release(link);
}
break;
case CS_EVENT_CARD_INSERTION:
link->state |= DEV_PRESENT | DEV_CONFIG_PENDING;
btuart_config(link);
Expand All @@ -869,7 +855,7 @@ static struct pcmcia_driver btuart_driver = {
},
.attach = btuart_attach,
.event = btuart_event,
.detach = btuart_detach,
.remove = btuart_detach,
.id_table = btuart_ids,
.suspend = btuart_suspend,
.resume = btuart_resume,
Expand Down
24 changes: 5 additions & 19 deletions drivers/bluetooth/dtl1_cs.c
Original file line number Diff line number Diff line change
Expand Up @@ -94,7 +94,7 @@ static int dtl1_event(event_t event, int priority, event_callback_args_t *args);
static dev_info_t dev_info = "dtl1_cs";

static dev_link_t *dtl1_attach(void);
static void dtl1_detach(dev_link_t *);
static void dtl1_detach(struct pcmcia_device *p_dev);

static dev_link_t *dev_list = NULL;

Expand Down Expand Up @@ -598,19 +598,19 @@ static dev_link_t *dtl1_attach(void)
ret = pcmcia_register_client(&link->handle, &client_reg);
if (ret != CS_SUCCESS) {
cs_error(link->handle, RegisterClient, ret);
dtl1_detach(link);
dtl1_detach(link->handle);
return NULL;
}

return link;
}


static void dtl1_detach(dev_link_t *link)
static void dtl1_detach(struct pcmcia_device *p_dev)
{
dev_link_t *link = dev_to_instance(p_dev);
dtl1_info_t *info = link->priv;
dev_link_t **linkp;
int ret;

/* Locate device structure */
for (linkp = &dev_list; *linkp; linkp = &(*linkp)->next)
Expand All @@ -623,12 +623,6 @@ static void dtl1_detach(dev_link_t *link)
if (link->state & DEV_CONFIG)
dtl1_release(link);

if (link->handle) {
ret = pcmcia_deregister_client(link->handle);
if (ret != CS_SUCCESS)
cs_error(link->handle, DeregisterClient, ret);
}

/* Unlink device structure, free bits */
*linkp = link->next;

Expand Down Expand Up @@ -788,16 +782,8 @@ static int dtl1_resume(struct pcmcia_device *dev)
static int dtl1_event(event_t event, int priority, event_callback_args_t *args)
{
dev_link_t *link = args->client_data;
dtl1_info_t *info = link->priv;

switch (event) {
case CS_EVENT_CARD_REMOVAL:
link->state &= ~DEV_PRESENT;
if (link->state & DEV_CONFIG) {
dtl1_close(info);
dtl1_release(link);
}
break;
case CS_EVENT_CARD_INSERTION:
link->state |= DEV_PRESENT | DEV_CONFIG_PENDING;
dtl1_config(link);
Expand All @@ -821,7 +807,7 @@ static struct pcmcia_driver dtl1_driver = {
},
.attach = dtl1_attach,
.event = dtl1_event,
.detach = dtl1_detach,
.remove = dtl1_detach,
.id_table = dtl1_ids,
.suspend = dtl1_suspend,
.resume = dtl1_resume,
Expand Down
55 changes: 17 additions & 38 deletions drivers/char/pcmcia/cm4000_cs.c
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,7 @@ static char *version = "cm4000_cs.c v2.4.0gm5 - All bugs added by Harald Welte";
#define T_100MSEC msecs_to_jiffies(100)
#define T_500MSEC msecs_to_jiffies(500)

static void cm4000_detach(dev_link_t *link);
static void cm4000_detach(struct pcmcia_device *p_dev);
static void cm4000_release(dev_link_t *link);

static int major; /* major number we get from the kernel */
Expand Down Expand Up @@ -1888,11 +1888,6 @@ static int cm4000_event(event_t event, int priority,
link->state |= DEV_PRESENT | DEV_CONFIG_PENDING;
cm4000_config(link, devno);
break;
case CS_EVENT_CARD_REMOVAL:
DEBUGP(5, dev, "CS_EVENT_CARD_REMOVAL\n");
link->state &= ~DEV_PRESENT;
stop_monitor(dev);
break;
default:
DEBUGP(5, dev, "unknown event %.2x\n", event);
break;
Expand Down Expand Up @@ -1978,7 +1973,7 @@ static dev_link_t *cm4000_attach(void)
i = pcmcia_register_client(&link->handle, &client_reg);
if (i) {
cs_error(link->handle, RegisterClient, i);
cm4000_detach(link);
cm4000_detach(link->handle);
return NULL;
}

Expand All @@ -1990,39 +1985,28 @@ static dev_link_t *cm4000_attach(void)
return link;
}

static void cm4000_detach_by_devno(int devno, dev_link_t * link)
static void cm4000_detach(struct pcmcia_device *p_dev)
{
dev_link_t *link = dev_to_instance(p_dev);
struct cm4000_dev *dev = link->priv;
int devno;

DEBUGP(3, dev, "-> detach_by_devno(devno=%d)\n", devno);
/* find device */
for (devno = 0; devno < CM4000_MAX_DEV; devno++)
if (dev_table[devno] == link)
break;
if (devno == CM4000_MAX_DEV)
return;

if (link->state & DEV_CONFIG) {
DEBUGP(5, dev, "device still configured (try to release it)\n");
cm4000_release(link);
}
link->state &= ~DEV_PRESENT;
stop_monitor(dev);

if (link->handle) {
pcmcia_deregister_client(link->handle);
}
if (link->state & DEV_CONFIG)
cm4000_release(link);

dev_table[devno] = NULL;
kfree(dev);
return;
}

static void cm4000_detach(dev_link_t * link)
{
int i;
kfree(dev);

/* find device */
for (i = 0; i < CM4000_MAX_DEV; i++)
if (dev_table[i] == link)
break;

if (i == CM4000_MAX_DEV)
return;

cm4000_detach_by_devno(i, link);
return;
}

Expand All @@ -2048,7 +2032,7 @@ static struct pcmcia_driver cm4000_driver = {
.name = "cm4000_cs",
},
.attach = cm4000_attach,
.detach = cm4000_detach,
.remove = cm4000_detach,
.suspend = cm4000_suspend,
.resume = cm4000_resume,
.event = cm4000_event,
Expand All @@ -2071,13 +2055,8 @@ static int __init cmm_init(void)

static void __exit cmm_exit(void)
{
int i;

printk(KERN_INFO MODULE_NAME ": unloading\n");
pcmcia_unregister_driver(&cm4000_driver);
for (i = 0; i < CM4000_MAX_DEV; i++)
if (dev_table[i])
cm4000_detach_by_devno(i, dev_table[i]);
unregister_chrdev(major, DEVICE_NAME);
};

Expand Down
Loading

0 comments on commit cc3b486

Please sign in to comment.