Loading Documentation/pcmcia/driver-changes.txt +11 −0 Original line number Original line Diff line number Diff line This file details changes in 2.6 which affect PCMCIA card driver authors: This file details changes in 2.6 which affect PCMCIA card driver authors: * Unify detach and REMOVAL event code, as well as attach and INSERTION code (as of 2.6.16) void (*remove) (struct pcmcia_device *dev); int (*probe) (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); should be initialized in struct pcmcia_driver, and handle (SUSPEND == RESET_PHYSICAL) and (RESUME == CARD_RESET) events * event handler initialization in struct pcmcia_driver (as of 2.6.13) * event handler initialization in struct pcmcia_driver (as of 2.6.13) The event handler is notified of all events, and must be initialized The event handler is notified of all events, and must be initialized as the event() callback in the driver's struct pcmcia_driver. as the event() callback in the driver's struct pcmcia_driver. Loading drivers/base/power/runtime.c +1 −0 Original line number Original line Diff line number Diff line Loading @@ -62,6 +62,7 @@ int dpm_runtime_suspend(struct device * dev, pm_message_t state) up(&dpm_sem); up(&dpm_sem); return error; return error; } } EXPORT_SYMBOL(dpm_runtime_suspend); #if 0 #if 0 Loading drivers/bluetooth/bluecard_cs.c +30 −79 Original line number Original line Diff line number Diff line Loading @@ -87,14 +87,8 @@ typedef struct bluecard_info_t { static void bluecard_config(dev_link_t *link); static void bluecard_config(dev_link_t *link); static void bluecard_release(dev_link_t *link); static void bluecard_release(dev_link_t *link); static int bluecard_event(event_t event, int priority, event_callback_args_t *args); static dev_info_t dev_info = "bluecard_cs"; static void bluecard_detach(struct pcmcia_device *p_dev); static dev_link_t *bluecard_attach(void); static void bluecard_detach(dev_link_t *); static dev_link_t *dev_list = NULL; /* Default baud rate: 57600, 115200, 230400 or 460800 */ /* Default baud rate: 57600, 115200, 230400 or 460800 */ Loading Loading @@ -862,17 +856,15 @@ static int bluecard_close(bluecard_info_t *info) return 0; return 0; } } static dev_link_t *bluecard_attach(void) static int bluecard_attach(struct pcmcia_device *p_dev) { { bluecard_info_t *info; bluecard_info_t *info; client_reg_t client_reg; dev_link_t *link; dev_link_t *link; int ret; /* Create new info device */ /* Create new info device */ info = kzalloc(sizeof(*info), GFP_KERNEL); info = kzalloc(sizeof(*info), GFP_KERNEL); if (!info) if (!info) return NULL; return -ENOMEM; link = &info->link; link = &info->link; link->priv = info; link->priv = info; Loading @@ -889,50 +881,24 @@ static dev_link_t *bluecard_attach(void) link->conf.Vcc = 50; link->conf.Vcc = 50; link->conf.IntType = INT_MEMORY_AND_IO; link->conf.IntType = INT_MEMORY_AND_IO; /* Register with Card Services */ link->handle = p_dev; link->next = dev_list; p_dev->instance = link; dev_list = link; client_reg.dev_info = &dev_info; client_reg.Version = 0x0210; client_reg.event_callback_args.client_data = link; ret = pcmcia_register_client(&link->handle, &client_reg); link->state |= DEV_PRESENT | DEV_CONFIG_PENDING; if (ret != CS_SUCCESS) { bluecard_config(link); cs_error(link->handle, RegisterClient, ret); bluecard_detach(link); return NULL; } return link; return 0; } } 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; bluecard_info_t *info = link->priv; dev_link_t **linkp; int ret; /* Locate device structure */ for (linkp = &dev_list; *linkp; linkp = &(*linkp)->next) if (*linkp == link) break; if (*linkp == NULL) return; if (link->state & DEV_CONFIG) if (link->state & DEV_CONFIG) bluecard_release(link); 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; kfree(info); kfree(info); } } Loading Loading @@ -1045,39 +1011,24 @@ static void bluecard_release(dev_link_t *link) link->state &= ~DEV_CONFIG; link->state &= ~DEV_CONFIG; } } static int bluecard_suspend(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; dev_link_t *link = dev_to_instance(dev); 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); break; case CS_EVENT_PM_SUSPEND: link->state |= DEV_SUSPEND; link->state |= DEV_SUSPEND; /* Fall through... */ case CS_EVENT_RESET_PHYSICAL: if (link->state & DEV_CONFIG) if (link->state & DEV_CONFIG) pcmcia_release_configuration(link->handle); pcmcia_release_configuration(link->handle); break; case CS_EVENT_PM_RESUME: return 0; } static int bluecard_resume(struct pcmcia_device *dev) { dev_link_t *link = dev_to_instance(dev); link->state &= ~DEV_SUSPEND; link->state &= ~DEV_SUSPEND; /* Fall through... */ case CS_EVENT_CARD_RESET: if (DEV_OK(link)) if (DEV_OK(link)) pcmcia_request_configuration(link->handle, &link->conf); pcmcia_request_configuration(link->handle, &link->conf); break; } return 0; return 0; } } Loading @@ -1095,10 +1046,11 @@ static struct pcmcia_driver bluecard_driver = { .drv = { .drv = { .name = "bluecard_cs", .name = "bluecard_cs", }, }, .attach = bluecard_attach, .probe = bluecard_attach, .event = bluecard_event, .remove = bluecard_detach, .detach = bluecard_detach, .id_table = bluecard_ids, .id_table = bluecard_ids, .suspend = bluecard_suspend, .resume = bluecard_resume, }; }; static int __init init_bluecard_cs(void) static int __init init_bluecard_cs(void) Loading @@ -1110,7 +1062,6 @@ static int __init init_bluecard_cs(void) static void __exit exit_bluecard_cs(void) static void __exit exit_bluecard_cs(void) { { pcmcia_unregister_driver(&bluecard_driver); pcmcia_unregister_driver(&bluecard_driver); BUG_ON(dev_list != NULL); } } module_init(init_bluecard_cs); module_init(init_bluecard_cs); Loading drivers/bluetooth/bt3c_cs.c +31 −79 Original line number Original line Diff line number Diff line Loading @@ -90,14 +90,8 @@ typedef struct bt3c_info_t { static void bt3c_config(dev_link_t *link); static void bt3c_config(dev_link_t *link); static void bt3c_release(dev_link_t *link); static void bt3c_release(dev_link_t *link); static int bt3c_event(event_t event, int priority, event_callback_args_t *args); static dev_info_t dev_info = "bt3c_cs"; static void bt3c_detach(struct pcmcia_device *p_dev); static dev_link_t *bt3c_attach(void); static void bt3c_detach(dev_link_t *); static dev_link_t *dev_list = NULL; /* Transmit states */ /* Transmit states */ Loading Loading @@ -663,17 +657,15 @@ static int bt3c_close(bt3c_info_t *info) return 0; return 0; } } static dev_link_t *bt3c_attach(void) static int bt3c_attach(struct pcmcia_device *p_dev) { { bt3c_info_t *info; bt3c_info_t *info; client_reg_t client_reg; dev_link_t *link; dev_link_t *link; int ret; /* Create new info device */ /* Create new info device */ info = kzalloc(sizeof(*info), GFP_KERNEL); info = kzalloc(sizeof(*info), GFP_KERNEL); if (!info) if (!info) return NULL; return -ENOMEM; link = &info->link; link = &info->link; link->priv = info; link->priv = info; Loading @@ -690,50 +682,24 @@ static dev_link_t *bt3c_attach(void) link->conf.Vcc = 50; link->conf.Vcc = 50; link->conf.IntType = INT_MEMORY_AND_IO; link->conf.IntType = INT_MEMORY_AND_IO; /* Register with Card Services */ link->handle = p_dev; link->next = dev_list; p_dev->instance = link; dev_list = link; client_reg.dev_info = &dev_info; client_reg.Version = 0x0210; client_reg.event_callback_args.client_data = link; ret = pcmcia_register_client(&link->handle, &client_reg); link->state |= DEV_PRESENT | DEV_CONFIG_PENDING; if (ret != CS_SUCCESS) { bt3c_config(link); cs_error(link->handle, RegisterClient, ret); bt3c_detach(link); return NULL; } return link; return 0; } } 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; bt3c_info_t *info = link->priv; dev_link_t **linkp; int ret; /* Locate device structure */ for (linkp = &dev_list; *linkp; linkp = &(*linkp)->next) if (*linkp == link) break; if (*linkp == NULL) return; if (link->state & DEV_CONFIG) if (link->state & DEV_CONFIG) bt3c_release(link); 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; kfree(info); kfree(info); } } Loading Loading @@ -891,43 +857,29 @@ static void bt3c_release(dev_link_t *link) link->state &= ~DEV_CONFIG; link->state &= ~DEV_CONFIG; } } static int bt3c_suspend(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; dev_link_t *link = dev_to_instance(dev); 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); break; case CS_EVENT_PM_SUSPEND: link->state |= DEV_SUSPEND; link->state |= DEV_SUSPEND; /* Fall through... */ case CS_EVENT_RESET_PHYSICAL: if (link->state & DEV_CONFIG) if (link->state & DEV_CONFIG) pcmcia_release_configuration(link->handle); pcmcia_release_configuration(link->handle); break; case CS_EVENT_PM_RESUME: return 0; } static int bt3c_resume(struct pcmcia_device *dev) { dev_link_t *link = dev_to_instance(dev); link->state &= ~DEV_SUSPEND; link->state &= ~DEV_SUSPEND; /* Fall through... */ case CS_EVENT_CARD_RESET: if (DEV_OK(link)) if (DEV_OK(link)) pcmcia_request_configuration(link->handle, &link->conf); pcmcia_request_configuration(link->handle, &link->conf); break; } return 0; return 0; } } static struct pcmcia_device_id bt3c_ids[] = { static struct pcmcia_device_id bt3c_ids[] = { PCMCIA_DEVICE_PROD_ID13("3COM", "Bluetooth PC Card", 0xefce0a31, 0xd4ce9b02), PCMCIA_DEVICE_PROD_ID13("3COM", "Bluetooth PC Card", 0xefce0a31, 0xd4ce9b02), PCMCIA_DEVICE_NULL PCMCIA_DEVICE_NULL Loading @@ -939,10 +891,11 @@ static struct pcmcia_driver bt3c_driver = { .drv = { .drv = { .name = "bt3c_cs", .name = "bt3c_cs", }, }, .attach = bt3c_attach, .probe = bt3c_attach, .event = bt3c_event, .remove = bt3c_detach, .detach = bt3c_detach, .id_table = bt3c_ids, .id_table = bt3c_ids, .suspend = bt3c_suspend, .resume = bt3c_resume, }; }; static int __init init_bt3c_cs(void) static int __init init_bt3c_cs(void) Loading @@ -954,7 +907,6 @@ static int __init init_bt3c_cs(void) static void __exit exit_bt3c_cs(void) static void __exit exit_bt3c_cs(void) { { pcmcia_unregister_driver(&bt3c_driver); pcmcia_unregister_driver(&bt3c_driver); BUG_ON(dev_list != NULL); } } module_init(init_bt3c_cs); module_init(init_bt3c_cs); Loading drivers/bluetooth/btuart_cs.c +31 −79 Original line number Original line Diff line number Diff line Loading @@ -86,14 +86,8 @@ typedef struct btuart_info_t { static void btuart_config(dev_link_t *link); static void btuart_config(dev_link_t *link); static void btuart_release(dev_link_t *link); static void btuart_release(dev_link_t *link); static int btuart_event(event_t event, int priority, event_callback_args_t *args); static dev_info_t dev_info = "btuart_cs"; static void btuart_detach(struct pcmcia_device *p_dev); static dev_link_t *btuart_attach(void); static void btuart_detach(dev_link_t *); static dev_link_t *dev_list = NULL; /* Maximum baud rate */ /* Maximum baud rate */ Loading Loading @@ -582,17 +576,15 @@ static int btuart_close(btuart_info_t *info) return 0; return 0; } } static dev_link_t *btuart_attach(void) static int btuart_attach(struct pcmcia_device *p_dev) { { btuart_info_t *info; btuart_info_t *info; client_reg_t client_reg; dev_link_t *link; dev_link_t *link; int ret; /* Create new info device */ /* Create new info device */ info = kzalloc(sizeof(*info), GFP_KERNEL); info = kzalloc(sizeof(*info), GFP_KERNEL); if (!info) if (!info) return NULL; return -ENOMEM; link = &info->link; link = &info->link; link->priv = info; link->priv = info; Loading @@ -609,50 +601,24 @@ static dev_link_t *btuart_attach(void) link->conf.Vcc = 50; link->conf.Vcc = 50; link->conf.IntType = INT_MEMORY_AND_IO; link->conf.IntType = INT_MEMORY_AND_IO; /* Register with Card Services */ link->handle = p_dev; link->next = dev_list; p_dev->instance = link; dev_list = link; client_reg.dev_info = &dev_info; client_reg.Version = 0x0210; client_reg.event_callback_args.client_data = link; ret = pcmcia_register_client(&link->handle, &client_reg); link->state |= DEV_PRESENT | DEV_CONFIG_PENDING; if (ret != CS_SUCCESS) { btuart_config(link); cs_error(link->handle, RegisterClient, ret); btuart_detach(link); return NULL; } return link; return 0; } } 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; btuart_info_t *info = link->priv; dev_link_t **linkp; int ret; /* Locate device structure */ for (linkp = &dev_list; *linkp; linkp = &(*linkp)->next) if (*linkp == link) break; if (*linkp == NULL) return; if (link->state & DEV_CONFIG) if (link->state & DEV_CONFIG) btuart_release(link); 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; kfree(info); kfree(info); } } Loading Loading @@ -811,43 +777,29 @@ static void btuart_release(dev_link_t *link) link->state &= ~DEV_CONFIG; link->state &= ~DEV_CONFIG; } } static int btuart_suspend(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; dev_link_t *link = dev_to_instance(dev); 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); break; case CS_EVENT_PM_SUSPEND: link->state |= DEV_SUSPEND; link->state |= DEV_SUSPEND; /* Fall through... */ case CS_EVENT_RESET_PHYSICAL: if (link->state & DEV_CONFIG) if (link->state & DEV_CONFIG) pcmcia_release_configuration(link->handle); pcmcia_release_configuration(link->handle); break; case CS_EVENT_PM_RESUME: return 0; } static int btuart_resume(struct pcmcia_device *dev) { dev_link_t *link = dev_to_instance(dev); link->state &= ~DEV_SUSPEND; link->state &= ~DEV_SUSPEND; /* Fall through... */ case CS_EVENT_CARD_RESET: if (DEV_OK(link)) if (DEV_OK(link)) pcmcia_request_configuration(link->handle, &link->conf); pcmcia_request_configuration(link->handle, &link->conf); break; } return 0; return 0; } } static struct pcmcia_device_id btuart_ids[] = { static struct pcmcia_device_id btuart_ids[] = { /* don't use this driver. Use serial_cs + hci_uart instead */ /* don't use this driver. Use serial_cs + hci_uart instead */ PCMCIA_DEVICE_NULL PCMCIA_DEVICE_NULL Loading @@ -859,10 +811,11 @@ static struct pcmcia_driver btuart_driver = { .drv = { .drv = { .name = "btuart_cs", .name = "btuart_cs", }, }, .attach = btuart_attach, .probe = btuart_attach, .event = btuart_event, .remove = btuart_detach, .detach = btuart_detach, .id_table = btuart_ids, .id_table = btuart_ids, .suspend = btuart_suspend, .resume = btuart_resume, }; }; static int __init init_btuart_cs(void) static int __init init_btuart_cs(void) Loading @@ -874,7 +827,6 @@ static int __init init_btuart_cs(void) static void __exit exit_btuart_cs(void) static void __exit exit_btuart_cs(void) { { pcmcia_unregister_driver(&btuart_driver); pcmcia_unregister_driver(&btuart_driver); BUG_ON(dev_list != NULL); } } module_init(init_btuart_cs); module_init(init_btuart_cs); Loading Loading
Documentation/pcmcia/driver-changes.txt +11 −0 Original line number Original line Diff line number Diff line This file details changes in 2.6 which affect PCMCIA card driver authors: This file details changes in 2.6 which affect PCMCIA card driver authors: * Unify detach and REMOVAL event code, as well as attach and INSERTION code (as of 2.6.16) void (*remove) (struct pcmcia_device *dev); int (*probe) (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); should be initialized in struct pcmcia_driver, and handle (SUSPEND == RESET_PHYSICAL) and (RESUME == CARD_RESET) events * event handler initialization in struct pcmcia_driver (as of 2.6.13) * event handler initialization in struct pcmcia_driver (as of 2.6.13) The event handler is notified of all events, and must be initialized The event handler is notified of all events, and must be initialized as the event() callback in the driver's struct pcmcia_driver. as the event() callback in the driver's struct pcmcia_driver. Loading
drivers/base/power/runtime.c +1 −0 Original line number Original line Diff line number Diff line Loading @@ -62,6 +62,7 @@ int dpm_runtime_suspend(struct device * dev, pm_message_t state) up(&dpm_sem); up(&dpm_sem); return error; return error; } } EXPORT_SYMBOL(dpm_runtime_suspend); #if 0 #if 0 Loading
drivers/bluetooth/bluecard_cs.c +30 −79 Original line number Original line Diff line number Diff line Loading @@ -87,14 +87,8 @@ typedef struct bluecard_info_t { static void bluecard_config(dev_link_t *link); static void bluecard_config(dev_link_t *link); static void bluecard_release(dev_link_t *link); static void bluecard_release(dev_link_t *link); static int bluecard_event(event_t event, int priority, event_callback_args_t *args); static dev_info_t dev_info = "bluecard_cs"; static void bluecard_detach(struct pcmcia_device *p_dev); static dev_link_t *bluecard_attach(void); static void bluecard_detach(dev_link_t *); static dev_link_t *dev_list = NULL; /* Default baud rate: 57600, 115200, 230400 or 460800 */ /* Default baud rate: 57600, 115200, 230400 or 460800 */ Loading Loading @@ -862,17 +856,15 @@ static int bluecard_close(bluecard_info_t *info) return 0; return 0; } } static dev_link_t *bluecard_attach(void) static int bluecard_attach(struct pcmcia_device *p_dev) { { bluecard_info_t *info; bluecard_info_t *info; client_reg_t client_reg; dev_link_t *link; dev_link_t *link; int ret; /* Create new info device */ /* Create new info device */ info = kzalloc(sizeof(*info), GFP_KERNEL); info = kzalloc(sizeof(*info), GFP_KERNEL); if (!info) if (!info) return NULL; return -ENOMEM; link = &info->link; link = &info->link; link->priv = info; link->priv = info; Loading @@ -889,50 +881,24 @@ static dev_link_t *bluecard_attach(void) link->conf.Vcc = 50; link->conf.Vcc = 50; link->conf.IntType = INT_MEMORY_AND_IO; link->conf.IntType = INT_MEMORY_AND_IO; /* Register with Card Services */ link->handle = p_dev; link->next = dev_list; p_dev->instance = link; dev_list = link; client_reg.dev_info = &dev_info; client_reg.Version = 0x0210; client_reg.event_callback_args.client_data = link; ret = pcmcia_register_client(&link->handle, &client_reg); link->state |= DEV_PRESENT | DEV_CONFIG_PENDING; if (ret != CS_SUCCESS) { bluecard_config(link); cs_error(link->handle, RegisterClient, ret); bluecard_detach(link); return NULL; } return link; return 0; } } 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; bluecard_info_t *info = link->priv; dev_link_t **linkp; int ret; /* Locate device structure */ for (linkp = &dev_list; *linkp; linkp = &(*linkp)->next) if (*linkp == link) break; if (*linkp == NULL) return; if (link->state & DEV_CONFIG) if (link->state & DEV_CONFIG) bluecard_release(link); 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; kfree(info); kfree(info); } } Loading Loading @@ -1045,39 +1011,24 @@ static void bluecard_release(dev_link_t *link) link->state &= ~DEV_CONFIG; link->state &= ~DEV_CONFIG; } } static int bluecard_suspend(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; dev_link_t *link = dev_to_instance(dev); 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); break; case CS_EVENT_PM_SUSPEND: link->state |= DEV_SUSPEND; link->state |= DEV_SUSPEND; /* Fall through... */ case CS_EVENT_RESET_PHYSICAL: if (link->state & DEV_CONFIG) if (link->state & DEV_CONFIG) pcmcia_release_configuration(link->handle); pcmcia_release_configuration(link->handle); break; case CS_EVENT_PM_RESUME: return 0; } static int bluecard_resume(struct pcmcia_device *dev) { dev_link_t *link = dev_to_instance(dev); link->state &= ~DEV_SUSPEND; link->state &= ~DEV_SUSPEND; /* Fall through... */ case CS_EVENT_CARD_RESET: if (DEV_OK(link)) if (DEV_OK(link)) pcmcia_request_configuration(link->handle, &link->conf); pcmcia_request_configuration(link->handle, &link->conf); break; } return 0; return 0; } } Loading @@ -1095,10 +1046,11 @@ static struct pcmcia_driver bluecard_driver = { .drv = { .drv = { .name = "bluecard_cs", .name = "bluecard_cs", }, }, .attach = bluecard_attach, .probe = bluecard_attach, .event = bluecard_event, .remove = bluecard_detach, .detach = bluecard_detach, .id_table = bluecard_ids, .id_table = bluecard_ids, .suspend = bluecard_suspend, .resume = bluecard_resume, }; }; static int __init init_bluecard_cs(void) static int __init init_bluecard_cs(void) Loading @@ -1110,7 +1062,6 @@ static int __init init_bluecard_cs(void) static void __exit exit_bluecard_cs(void) static void __exit exit_bluecard_cs(void) { { pcmcia_unregister_driver(&bluecard_driver); pcmcia_unregister_driver(&bluecard_driver); BUG_ON(dev_list != NULL); } } module_init(init_bluecard_cs); module_init(init_bluecard_cs); Loading
drivers/bluetooth/bt3c_cs.c +31 −79 Original line number Original line Diff line number Diff line Loading @@ -90,14 +90,8 @@ typedef struct bt3c_info_t { static void bt3c_config(dev_link_t *link); static void bt3c_config(dev_link_t *link); static void bt3c_release(dev_link_t *link); static void bt3c_release(dev_link_t *link); static int bt3c_event(event_t event, int priority, event_callback_args_t *args); static dev_info_t dev_info = "bt3c_cs"; static void bt3c_detach(struct pcmcia_device *p_dev); static dev_link_t *bt3c_attach(void); static void bt3c_detach(dev_link_t *); static dev_link_t *dev_list = NULL; /* Transmit states */ /* Transmit states */ Loading Loading @@ -663,17 +657,15 @@ static int bt3c_close(bt3c_info_t *info) return 0; return 0; } } static dev_link_t *bt3c_attach(void) static int bt3c_attach(struct pcmcia_device *p_dev) { { bt3c_info_t *info; bt3c_info_t *info; client_reg_t client_reg; dev_link_t *link; dev_link_t *link; int ret; /* Create new info device */ /* Create new info device */ info = kzalloc(sizeof(*info), GFP_KERNEL); info = kzalloc(sizeof(*info), GFP_KERNEL); if (!info) if (!info) return NULL; return -ENOMEM; link = &info->link; link = &info->link; link->priv = info; link->priv = info; Loading @@ -690,50 +682,24 @@ static dev_link_t *bt3c_attach(void) link->conf.Vcc = 50; link->conf.Vcc = 50; link->conf.IntType = INT_MEMORY_AND_IO; link->conf.IntType = INT_MEMORY_AND_IO; /* Register with Card Services */ link->handle = p_dev; link->next = dev_list; p_dev->instance = link; dev_list = link; client_reg.dev_info = &dev_info; client_reg.Version = 0x0210; client_reg.event_callback_args.client_data = link; ret = pcmcia_register_client(&link->handle, &client_reg); link->state |= DEV_PRESENT | DEV_CONFIG_PENDING; if (ret != CS_SUCCESS) { bt3c_config(link); cs_error(link->handle, RegisterClient, ret); bt3c_detach(link); return NULL; } return link; return 0; } } 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; bt3c_info_t *info = link->priv; dev_link_t **linkp; int ret; /* Locate device structure */ for (linkp = &dev_list; *linkp; linkp = &(*linkp)->next) if (*linkp == link) break; if (*linkp == NULL) return; if (link->state & DEV_CONFIG) if (link->state & DEV_CONFIG) bt3c_release(link); 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; kfree(info); kfree(info); } } Loading Loading @@ -891,43 +857,29 @@ static void bt3c_release(dev_link_t *link) link->state &= ~DEV_CONFIG; link->state &= ~DEV_CONFIG; } } static int bt3c_suspend(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; dev_link_t *link = dev_to_instance(dev); 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); break; case CS_EVENT_PM_SUSPEND: link->state |= DEV_SUSPEND; link->state |= DEV_SUSPEND; /* Fall through... */ case CS_EVENT_RESET_PHYSICAL: if (link->state & DEV_CONFIG) if (link->state & DEV_CONFIG) pcmcia_release_configuration(link->handle); pcmcia_release_configuration(link->handle); break; case CS_EVENT_PM_RESUME: return 0; } static int bt3c_resume(struct pcmcia_device *dev) { dev_link_t *link = dev_to_instance(dev); link->state &= ~DEV_SUSPEND; link->state &= ~DEV_SUSPEND; /* Fall through... */ case CS_EVENT_CARD_RESET: if (DEV_OK(link)) if (DEV_OK(link)) pcmcia_request_configuration(link->handle, &link->conf); pcmcia_request_configuration(link->handle, &link->conf); break; } return 0; return 0; } } static struct pcmcia_device_id bt3c_ids[] = { static struct pcmcia_device_id bt3c_ids[] = { PCMCIA_DEVICE_PROD_ID13("3COM", "Bluetooth PC Card", 0xefce0a31, 0xd4ce9b02), PCMCIA_DEVICE_PROD_ID13("3COM", "Bluetooth PC Card", 0xefce0a31, 0xd4ce9b02), PCMCIA_DEVICE_NULL PCMCIA_DEVICE_NULL Loading @@ -939,10 +891,11 @@ static struct pcmcia_driver bt3c_driver = { .drv = { .drv = { .name = "bt3c_cs", .name = "bt3c_cs", }, }, .attach = bt3c_attach, .probe = bt3c_attach, .event = bt3c_event, .remove = bt3c_detach, .detach = bt3c_detach, .id_table = bt3c_ids, .id_table = bt3c_ids, .suspend = bt3c_suspend, .resume = bt3c_resume, }; }; static int __init init_bt3c_cs(void) static int __init init_bt3c_cs(void) Loading @@ -954,7 +907,6 @@ static int __init init_bt3c_cs(void) static void __exit exit_bt3c_cs(void) static void __exit exit_bt3c_cs(void) { { pcmcia_unregister_driver(&bt3c_driver); pcmcia_unregister_driver(&bt3c_driver); BUG_ON(dev_list != NULL); } } module_init(init_bt3c_cs); module_init(init_bt3c_cs); Loading
drivers/bluetooth/btuart_cs.c +31 −79 Original line number Original line Diff line number Diff line Loading @@ -86,14 +86,8 @@ typedef struct btuart_info_t { static void btuart_config(dev_link_t *link); static void btuart_config(dev_link_t *link); static void btuart_release(dev_link_t *link); static void btuart_release(dev_link_t *link); static int btuart_event(event_t event, int priority, event_callback_args_t *args); static dev_info_t dev_info = "btuart_cs"; static void btuart_detach(struct pcmcia_device *p_dev); static dev_link_t *btuart_attach(void); static void btuart_detach(dev_link_t *); static dev_link_t *dev_list = NULL; /* Maximum baud rate */ /* Maximum baud rate */ Loading Loading @@ -582,17 +576,15 @@ static int btuart_close(btuart_info_t *info) return 0; return 0; } } static dev_link_t *btuart_attach(void) static int btuart_attach(struct pcmcia_device *p_dev) { { btuart_info_t *info; btuart_info_t *info; client_reg_t client_reg; dev_link_t *link; dev_link_t *link; int ret; /* Create new info device */ /* Create new info device */ info = kzalloc(sizeof(*info), GFP_KERNEL); info = kzalloc(sizeof(*info), GFP_KERNEL); if (!info) if (!info) return NULL; return -ENOMEM; link = &info->link; link = &info->link; link->priv = info; link->priv = info; Loading @@ -609,50 +601,24 @@ static dev_link_t *btuart_attach(void) link->conf.Vcc = 50; link->conf.Vcc = 50; link->conf.IntType = INT_MEMORY_AND_IO; link->conf.IntType = INT_MEMORY_AND_IO; /* Register with Card Services */ link->handle = p_dev; link->next = dev_list; p_dev->instance = link; dev_list = link; client_reg.dev_info = &dev_info; client_reg.Version = 0x0210; client_reg.event_callback_args.client_data = link; ret = pcmcia_register_client(&link->handle, &client_reg); link->state |= DEV_PRESENT | DEV_CONFIG_PENDING; if (ret != CS_SUCCESS) { btuart_config(link); cs_error(link->handle, RegisterClient, ret); btuart_detach(link); return NULL; } return link; return 0; } } 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; btuart_info_t *info = link->priv; dev_link_t **linkp; int ret; /* Locate device structure */ for (linkp = &dev_list; *linkp; linkp = &(*linkp)->next) if (*linkp == link) break; if (*linkp == NULL) return; if (link->state & DEV_CONFIG) if (link->state & DEV_CONFIG) btuart_release(link); 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; kfree(info); kfree(info); } } Loading Loading @@ -811,43 +777,29 @@ static void btuart_release(dev_link_t *link) link->state &= ~DEV_CONFIG; link->state &= ~DEV_CONFIG; } } static int btuart_suspend(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; dev_link_t *link = dev_to_instance(dev); 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); break; case CS_EVENT_PM_SUSPEND: link->state |= DEV_SUSPEND; link->state |= DEV_SUSPEND; /* Fall through... */ case CS_EVENT_RESET_PHYSICAL: if (link->state & DEV_CONFIG) if (link->state & DEV_CONFIG) pcmcia_release_configuration(link->handle); pcmcia_release_configuration(link->handle); break; case CS_EVENT_PM_RESUME: return 0; } static int btuart_resume(struct pcmcia_device *dev) { dev_link_t *link = dev_to_instance(dev); link->state &= ~DEV_SUSPEND; link->state &= ~DEV_SUSPEND; /* Fall through... */ case CS_EVENT_CARD_RESET: if (DEV_OK(link)) if (DEV_OK(link)) pcmcia_request_configuration(link->handle, &link->conf); pcmcia_request_configuration(link->handle, &link->conf); break; } return 0; return 0; } } static struct pcmcia_device_id btuart_ids[] = { static struct pcmcia_device_id btuart_ids[] = { /* don't use this driver. Use serial_cs + hci_uart instead */ /* don't use this driver. Use serial_cs + hci_uart instead */ PCMCIA_DEVICE_NULL PCMCIA_DEVICE_NULL Loading @@ -859,10 +811,11 @@ static struct pcmcia_driver btuart_driver = { .drv = { .drv = { .name = "btuart_cs", .name = "btuart_cs", }, }, .attach = btuart_attach, .probe = btuart_attach, .event = btuart_event, .remove = btuart_detach, .detach = btuart_detach, .id_table = btuart_ids, .id_table = btuart_ids, .suspend = btuart_suspend, .resume = btuart_resume, }; }; static int __init init_btuart_cs(void) static int __init init_btuart_cs(void) Loading @@ -874,7 +827,6 @@ static int __init init_btuart_cs(void) static void __exit exit_btuart_cs(void) static void __exit exit_btuart_cs(void) { { pcmcia_unregister_driver(&btuart_driver); pcmcia_unregister_driver(&btuart_driver); BUG_ON(dev_list != NULL); } } module_init(init_btuart_cs); module_init(init_btuart_cs); Loading