Merge branch 'urgent' of git://git.kernel.org/pub/scm/linux/kernel/git/brodo/pcmcia-2.6

* 'urgent' of git://git.kernel.org/pub/scm/linux/kernel/git/brodo/pcmcia-2.6:
pcmcia: use dev_pm_ops for class pcmcia_socket_class
power: support _noirq actions on device types and classes
pcmcia: allow for four multifunction subdevices (again)
pcmcia: do not use ioports < 0x100 on x86
pd6729: Coding Style fixes

+149 -315
+31
drivers/base/power/main.c
··· 439 if (dev->bus && dev->bus->pm) { 440 pm_dev_dbg(dev, state, "EARLY "); 441 error = pm_noirq_op(dev, dev->bus->pm, state); 442 } 443 444 TRACE_RESUME(error); 445 return error; 446 } ··· 750 { 751 int error = 0; 752 753 if (dev->bus && dev->bus->pm) { 754 pm_dev_dbg(dev, state, "LATE "); 755 error = pm_noirq_op(dev, dev->bus->pm, state); 756 } 757 return error; 758 } 759
··· 439 if (dev->bus && dev->bus->pm) { 440 pm_dev_dbg(dev, state, "EARLY "); 441 error = pm_noirq_op(dev, dev->bus->pm, state); 442 + if (error) 443 + goto End; 444 } 445 446 + if (dev->type && dev->type->pm) { 447 + pm_dev_dbg(dev, state, "EARLY type "); 448 + error = pm_noirq_op(dev, dev->type->pm, state); 449 + if (error) 450 + goto End; 451 + } 452 + 453 + if (dev->class && dev->class->pm) { 454 + pm_dev_dbg(dev, state, "EARLY class "); 455 + error = pm_noirq_op(dev, dev->class->pm, state); 456 + } 457 + 458 + End: 459 TRACE_RESUME(error); 460 return error; 461 } ··· 735 { 736 int error = 0; 737 738 + if (dev->class && dev->class->pm) { 739 + pm_dev_dbg(dev, state, "LATE class "); 740 + error = pm_noirq_op(dev, dev->class->pm, state); 741 + if (error) 742 + goto End; 743 + } 744 + 745 + if (dev->type && dev->type->pm) { 746 + pm_dev_dbg(dev, state, "LATE type "); 747 + error = pm_noirq_op(dev, dev->type->pm, state); 748 + if (error) 749 + goto End; 750 + } 751 + 752 if (dev->bus && dev->bus->pm) { 753 pm_dev_dbg(dev, state, "LATE "); 754 error = pm_noirq_op(dev, dev->bus->pm, state); 755 } 756 + 757 + End: 758 return error; 759 } 760
-2
drivers/pcmcia/at91_cf.c
··· 361 struct at91_cf_socket *cf = platform_get_drvdata(pdev); 362 struct at91_cf_data *board = cf->board; 363 364 - pcmcia_socket_dev_suspend(&pdev->dev); 365 if (device_may_wakeup(&pdev->dev)) { 366 enable_irq_wake(board->det_pin); 367 if (board->irq_pin) ··· 380 disable_irq_wake(board->irq_pin); 381 } 382 383 - pcmcia_socket_dev_resume(&pdev->dev); 384 return 0; 385 } 386
··· 361 struct at91_cf_socket *cf = platform_get_drvdata(pdev); 362 struct at91_cf_data *board = cf->board; 363 364 if (device_may_wakeup(&pdev->dev)) { 365 enable_irq_wake(board->det_pin); 366 if (board->irq_pin) ··· 381 disable_irq_wake(board->irq_pin); 382 } 383 384 return 0; 385 } 386
-13
drivers/pcmcia/au1000_generic.c
··· 510 return ret; 511 } 512 513 - static int au1x00_drv_pcmcia_suspend(struct platform_device *dev, 514 - pm_message_t state) 515 - { 516 - return pcmcia_socket_dev_suspend(&dev->dev); 517 - } 518 - 519 - static int au1x00_drv_pcmcia_resume(struct platform_device *dev) 520 - { 521 - return pcmcia_socket_dev_resume(&dev->dev); 522 - } 523 - 524 static struct platform_driver au1x00_pcmcia_driver = { 525 .driver = { 526 .name = "au1x00-pcmcia", ··· 517 }, 518 .probe = au1x00_drv_pcmcia_probe, 519 .remove = au1x00_drv_pcmcia_remove, 520 - .suspend = au1x00_drv_pcmcia_suspend, 521 - .resume = au1x00_drv_pcmcia_resume, 522 }; 523 524
··· 510 return ret; 511 } 512 513 static struct platform_driver au1x00_pcmcia_driver = { 514 .driver = { 515 .name = "au1x00-pcmcia", ··· 528 }, 529 .probe = au1x00_drv_pcmcia_probe, 530 .remove = au1x00_drv_pcmcia_remove, 531 }; 532 533
-12
drivers/pcmcia/bfin_cf_pcmcia.c
··· 300 return 0; 301 } 302 303 - static int bfin_cf_suspend(struct platform_device *pdev, pm_message_t mesg) 304 - { 305 - return pcmcia_socket_dev_suspend(&pdev->dev); 306 - } 307 - 308 - static int bfin_cf_resume(struct platform_device *pdev) 309 - { 310 - return pcmcia_socket_dev_resume(&pdev->dev); 311 - } 312 - 313 static struct platform_driver bfin_cf_driver = { 314 .driver = { 315 .name = (char *)driver_name, ··· 307 }, 308 .probe = bfin_cf_probe, 309 .remove = __devexit_p(bfin_cf_remove), 310 - .suspend = bfin_cf_suspend, 311 - .resume = bfin_cf_resume, 312 }; 313 314 static int __init bfin_cf_init(void)
··· 300 return 0; 301 } 302 303 static struct platform_driver bfin_cf_driver = { 304 .driver = { 305 .name = (char *)driver_name, ··· 317 }, 318 .probe = bfin_cf_probe, 319 .remove = __devexit_p(bfin_cf_remove), 320 }; 321 322 static int __init bfin_cf_init(void)
+63 -61
drivers/pcmcia/cs.c
··· 76 EXPORT_SYMBOL(pcmcia_socket_list_rwsem); 77 78 79 - /* 80 - * Low-level PCMCIA socket drivers need to register with the PCCard 81 - * core using pcmcia_register_socket. 82 - * 83 - * socket drivers are expected to use the following callbacks in their 84 - * .drv struct: 85 - * - pcmcia_socket_dev_suspend 86 - * - pcmcia_socket_dev_resume 87 - * These functions check for the appropriate struct pcmcia_soket arrays, 88 - * and pass them to the low-level functions pcmcia_{suspend,resume}_socket 89 - */ 90 - static int socket_early_resume(struct pcmcia_socket *skt); 91 - static int socket_late_resume(struct pcmcia_socket *skt); 92 - static int socket_resume(struct pcmcia_socket *skt); 93 - static int socket_suspend(struct pcmcia_socket *skt); 94 - 95 - static void pcmcia_socket_dev_run(struct device *dev, 96 - int (*cb)(struct pcmcia_socket *)) 97 - { 98 - struct pcmcia_socket *socket; 99 - 100 - down_read(&pcmcia_socket_list_rwsem); 101 - list_for_each_entry(socket, &pcmcia_socket_list, socket_list) { 102 - if (socket->dev.parent != dev) 103 - continue; 104 - mutex_lock(&socket->skt_mutex); 105 - cb(socket); 106 - mutex_unlock(&socket->skt_mutex); 107 - } 108 - up_read(&pcmcia_socket_list_rwsem); 109 - } 110 - 111 - int pcmcia_socket_dev_suspend(struct device *dev) 112 - { 113 - pcmcia_socket_dev_run(dev, socket_suspend); 114 - return 0; 115 - } 116 - EXPORT_SYMBOL(pcmcia_socket_dev_suspend); 117 - 118 - void pcmcia_socket_dev_early_resume(struct device *dev) 119 - { 120 - pcmcia_socket_dev_run(dev, socket_early_resume); 121 - } 122 - EXPORT_SYMBOL(pcmcia_socket_dev_early_resume); 123 - 124 - void pcmcia_socket_dev_late_resume(struct device *dev) 125 - { 126 - pcmcia_socket_dev_run(dev, socket_late_resume); 127 - } 128 - EXPORT_SYMBOL(pcmcia_socket_dev_late_resume); 129 - 130 - int pcmcia_socket_dev_resume(struct device *dev) 131 - { 132 - pcmcia_socket_dev_run(dev, socket_resume); 133 - return 0; 134 - } 135 - EXPORT_SYMBOL(pcmcia_socket_dev_resume); 136 - 137 - 138 struct pcmcia_socket *pcmcia_get_socket(struct pcmcia_socket *skt) 139 { 140 struct device *dev = get_device(&skt->dev); ··· 519 520 static int socket_late_resume(struct pcmcia_socket *skt) 521 { 522 mutex_lock(&skt->ops_mutex); 523 skt->state &= ~SOCKET_SUSPEND; 524 mutex_unlock(&skt->ops_mutex); 525 526 - if (!(skt->state & SOCKET_PRESENT)) 527 - return socket_insert(skt); 528 529 if (skt->resume_status) { 530 socket_shutdown(skt); ··· 866 } 867 868 869 struct class pcmcia_socket_class = { 870 .name = "pcmcia_socket", 871 .dev_uevent = pcmcia_socket_uevent, 872 .dev_release = pcmcia_release_socket, 873 .class_release = pcmcia_release_socket_class, 874 }; 875 EXPORT_SYMBOL(pcmcia_socket_class); 876
··· 76 EXPORT_SYMBOL(pcmcia_socket_list_rwsem); 77 78 79 struct pcmcia_socket *pcmcia_get_socket(struct pcmcia_socket *skt) 80 { 81 struct device *dev = get_device(&skt->dev); ··· 578 579 static int socket_late_resume(struct pcmcia_socket *skt) 580 { 581 + int ret; 582 + 583 mutex_lock(&skt->ops_mutex); 584 skt->state &= ~SOCKET_SUSPEND; 585 mutex_unlock(&skt->ops_mutex); 586 587 + if (!(skt->state & SOCKET_PRESENT)) { 588 + ret = socket_insert(skt); 589 + if (ret == -ENODEV) 590 + ret = 0; 591 + return ret; 592 + } 593 594 if (skt->resume_status) { 595 socket_shutdown(skt); ··· 919 } 920 921 922 + #ifdef CONFIG_PM 923 + 924 + static int __pcmcia_pm_op(struct device *dev, 925 + int (*callback) (struct pcmcia_socket *skt)) 926 + { 927 + struct pcmcia_socket *s = container_of(dev, struct pcmcia_socket, dev); 928 + int ret; 929 + 930 + mutex_lock(&s->skt_mutex); 931 + ret = callback(s); 932 + mutex_unlock(&s->skt_mutex); 933 + 934 + return ret; 935 + } 936 + 937 + static int pcmcia_socket_dev_suspend_noirq(struct device *dev) 938 + { 939 + return __pcmcia_pm_op(dev, socket_suspend); 940 + } 941 + 942 + static int pcmcia_socket_dev_resume_noirq(struct device *dev) 943 + { 944 + return __pcmcia_pm_op(dev, socket_early_resume); 945 + } 946 + 947 + static int pcmcia_socket_dev_resume(struct device *dev) 948 + { 949 + return __pcmcia_pm_op(dev, socket_late_resume); 950 + } 951 + 952 + static const struct dev_pm_ops pcmcia_socket_pm_ops = { 953 + /* dev_resume may be called with IRQs enabled */ 954 + SET_SYSTEM_SLEEP_PM_OPS(NULL, 955 + pcmcia_socket_dev_resume) 956 + 957 + /* late suspend must be called with IRQs disabled */ 958 + .suspend_noirq = pcmcia_socket_dev_suspend_noirq, 959 + .freeze_noirq = pcmcia_socket_dev_suspend_noirq, 960 + .poweroff_noirq = pcmcia_socket_dev_suspend_noirq, 961 + 962 + /* early resume must be called with IRQs disabled */ 963 + .resume_noirq = pcmcia_socket_dev_resume_noirq, 964 + .thaw_noirq = pcmcia_socket_dev_resume_noirq, 965 + .restore_noirq = pcmcia_socket_dev_resume_noirq, 966 + }; 967 + 968 + #define PCMCIA_SOCKET_CLASS_PM_OPS (&pcmcia_socket_pm_ops) 969 + 970 + #else /* CONFIG_PM */ 971 + 972 + #define PCMCIA_SOCKET_CLASS_PM_OPS NULL 973 + 974 + #endif /* CONFIG_PM */ 975 + 976 struct class pcmcia_socket_class = { 977 .name = "pcmcia_socket", 978 .dev_uevent = pcmcia_socket_uevent, 979 .dev_release = pcmcia_release_socket, 980 .class_release = pcmcia_release_socket_class, 981 + .pm = PCMCIA_SOCKET_CLASS_PM_OPS, 982 }; 983 EXPORT_SYMBOL(pcmcia_socket_class); 984
-27
drivers/pcmcia/db1xxx_ss.c
··· 558 return 0; 559 } 560 561 - #ifdef CONFIG_PM 562 - static int db1x_pcmcia_suspend(struct device *dev) 563 - { 564 - return pcmcia_socket_dev_suspend(dev); 565 - } 566 - 567 - static int db1x_pcmcia_resume(struct device *dev) 568 - { 569 - return pcmcia_socket_dev_resume(dev); 570 - } 571 - 572 - static struct dev_pm_ops db1x_pcmcia_pmops = { 573 - .resume = db1x_pcmcia_resume, 574 - .suspend = db1x_pcmcia_suspend, 575 - .thaw = db1x_pcmcia_resume, 576 - .freeze = db1x_pcmcia_suspend, 577 - }; 578 - 579 - #define DB1XXX_SS_PMOPS &db1x_pcmcia_pmops 580 - 581 - #else 582 - 583 - #define DB1XXX_SS_PMOPS NULL 584 - 585 - #endif 586 - 587 static struct platform_driver db1x_pcmcia_socket_driver = { 588 .driver = { 589 .name = "db1xxx_pcmcia", 590 .owner = THIS_MODULE, 591 - .pm = DB1XXX_SS_PMOPS 592 }, 593 .probe = db1x_pcmcia_socket_probe, 594 .remove = __devexit_p(db1x_pcmcia_socket_remove),
··· 558 return 0; 559 } 560 561 static struct platform_driver db1x_pcmcia_socket_driver = { 562 .driver = { 563 .name = "db1xxx_pcmcia", 564 .owner = THIS_MODULE, 565 }, 566 .probe = db1x_pcmcia_socket_probe, 567 .remove = __devexit_p(db1x_pcmcia_socket_remove),
+6 -2
drivers/pcmcia/ds.c
··· 509 p_dev->device_no = (s->device_count++); 510 mutex_unlock(&s->ops_mutex); 511 512 - /* max of 2 devices per card */ 513 - if (p_dev->device_no >= 2) 514 goto err_free; 515 516 p_dev->socket = s;
··· 509 p_dev->device_no = (s->device_count++); 510 mutex_unlock(&s->ops_mutex); 511 512 + /* max of 2 PFC devices */ 513 + if ((p_dev->device_no >= 2) && (function == 0)) 514 + goto err_free; 515 + 516 + /* max of 4 devices overall */ 517 + if (p_dev->device_no >= 4) 518 goto err_free; 519 520 p_dev->socket = s;
-16
drivers/pcmcia/i82092.c
··· 39 }; 40 MODULE_DEVICE_TABLE(pci, i82092aa_pci_ids); 41 42 - #ifdef CONFIG_PM 43 - static int i82092aa_socket_suspend (struct pci_dev *dev, pm_message_t state) 44 - { 45 - return pcmcia_socket_dev_suspend(&dev->dev); 46 - } 47 - 48 - static int i82092aa_socket_resume (struct pci_dev *dev) 49 - { 50 - return pcmcia_socket_dev_resume(&dev->dev); 51 - } 52 - #endif 53 - 54 static struct pci_driver i82092aa_pci_driver = { 55 .name = "i82092aa", 56 .id_table = i82092aa_pci_ids, 57 .probe = i82092aa_pci_probe, 58 .remove = __devexit_p(i82092aa_pci_remove), 59 - #ifdef CONFIG_PM 60 - .suspend = i82092aa_socket_suspend, 61 - .resume = i82092aa_socket_resume, 62 - #endif 63 }; 64 65
··· 39 }; 40 MODULE_DEVICE_TABLE(pci, i82092aa_pci_ids); 41 42 static struct pci_driver i82092aa_pci_driver = { 43 .name = "i82092aa", 44 .id_table = i82092aa_pci_ids, 45 .probe = i82092aa_pci_probe, 46 .remove = __devexit_p(i82092aa_pci_remove), 47 }; 48 49
-11
drivers/pcmcia/i82365.c
··· 1223 return 0; 1224 } 1225 1226 - static int i82365_drv_pcmcia_suspend(struct platform_device *dev, 1227 - pm_message_t state) 1228 - { 1229 - return pcmcia_socket_dev_suspend(&dev->dev); 1230 - } 1231 1232 - static int i82365_drv_pcmcia_resume(struct platform_device *dev) 1233 - { 1234 - return pcmcia_socket_dev_resume(&dev->dev); 1235 - } 1236 static struct pccard_operations pcic_operations = { 1237 .init = pcic_init, 1238 .get_status = pcic_get_status, ··· 1239 .name = "i82365", 1240 .owner = THIS_MODULE, 1241 }, 1242 - .suspend = i82365_drv_pcmcia_suspend, 1243 - .resume = i82365_drv_pcmcia_resume, 1244 }; 1245 1246 static struct platform_device *i82365_device;
··· 1223 return 0; 1224 } 1225 1226 1227 static struct pccard_operations pcic_operations = { 1228 .init = pcic_init, 1229 .get_status = pcic_get_status, ··· 1248 .name = "i82365", 1249 .owner = THIS_MODULE, 1250 }, 1251 }; 1252 1253 static struct platform_device *i82365_device;
-11
drivers/pcmcia/m32r_cfc.c
··· 685 .set_mem_map = pcc_set_mem_map, 686 }; 687 688 - static int cfc_drv_pcmcia_suspend(struct platform_device *dev, 689 - pm_message_t state) 690 - { 691 - return pcmcia_socket_dev_suspend(&dev->dev); 692 - } 693 694 - static int cfc_drv_pcmcia_resume(struct platform_device *dev) 695 - { 696 - return pcmcia_socket_dev_resume(&dev->dev); 697 - } 698 /*====================================================================*/ 699 700 static struct platform_driver pcc_driver = { ··· 693 .name = "cfc", 694 .owner = THIS_MODULE, 695 }, 696 - .suspend = cfc_drv_pcmcia_suspend, 697 - .resume = cfc_drv_pcmcia_resume, 698 }; 699 700 static struct platform_device pcc_device = {
··· 685 .set_mem_map = pcc_set_mem_map, 686 }; 687 688 689 /*====================================================================*/ 690 691 static struct platform_driver pcc_driver = { ··· 702 .name = "cfc", 703 .owner = THIS_MODULE, 704 }, 705 }; 706 707 static struct platform_device pcc_device = {
-12
drivers/pcmcia/m32r_pcc.c
··· 663 .set_mem_map = pcc_set_mem_map, 664 }; 665 666 - static int pcc_drv_pcmcia_suspend(struct platform_device *dev, 667 - pm_message_t state) 668 - { 669 - return pcmcia_socket_dev_suspend(&dev->dev); 670 - } 671 - 672 - static int pcc_drv_pcmcia_resume(struct platform_device *dev) 673 - { 674 - return pcmcia_socket_dev_resume(&dev->dev); 675 - } 676 /*====================================================================*/ 677 678 static struct platform_driver pcc_driver = { ··· 670 .name = "pcc", 671 .owner = THIS_MODULE, 672 }, 673 - .suspend = pcc_drv_pcmcia_suspend, 674 - .resume = pcc_drv_pcmcia_resume, 675 }; 676 677 static struct platform_device pcc_device = {
··· 663 .set_mem_map = pcc_set_mem_map, 664 }; 665 666 /*====================================================================*/ 667 668 static struct platform_driver pcc_driver = { ··· 680 .name = "pcc", 681 .owner = THIS_MODULE, 682 }, 683 }; 684 685 static struct platform_device pcc_device = {
-17
drivers/pcmcia/m8xx_pcmcia.c
··· 1288 return 0; 1289 } 1290 1291 - #ifdef CONFIG_PM 1292 - static int m8xx_suspend(struct platform_device *pdev, pm_message_t state) 1293 - { 1294 - return pcmcia_socket_dev_suspend(&pdev->dev); 1295 - } 1296 - 1297 - static int m8xx_resume(struct platform_device *pdev) 1298 - { 1299 - return pcmcia_socket_dev_resume(&pdev->dev); 1300 - } 1301 - #else 1302 - #define m8xx_suspend NULL 1303 - #define m8xx_resume NULL 1304 - #endif 1305 - 1306 static const struct of_device_id m8xx_pcmcia_match[] = { 1307 { 1308 .type = "pcmcia", ··· 1303 .match_table = m8xx_pcmcia_match, 1304 .probe = m8xx_probe, 1305 .remove = m8xx_remove, 1306 - .suspend = m8xx_suspend, 1307 - .resume = m8xx_resume, 1308 }; 1309 1310 static int __init m8xx_init(void)
··· 1288 return 0; 1289 } 1290 1291 static const struct of_device_id m8xx_pcmcia_match[] = { 1292 { 1293 .type = "pcmcia", ··· 1318 .match_table = m8xx_pcmcia_match, 1319 .probe = m8xx_probe, 1320 .remove = m8xx_remove, 1321 }; 1322 1323 static int __init m8xx_init(void)
-12
drivers/pcmcia/omap_cf.c
··· 330 return 0; 331 } 332 333 - static int omap_cf_suspend(struct platform_device *pdev, pm_message_t mesg) 334 - { 335 - return pcmcia_socket_dev_suspend(&pdev->dev); 336 - } 337 - 338 - static int omap_cf_resume(struct platform_device *pdev) 339 - { 340 - return pcmcia_socket_dev_resume(&pdev->dev); 341 - } 342 - 343 static struct platform_driver omap_cf_driver = { 344 .driver = { 345 .name = (char *) driver_name, 346 .owner = THIS_MODULE, 347 }, 348 .remove = __exit_p(omap_cf_remove), 349 - .suspend = omap_cf_suspend, 350 - .resume = omap_cf_resume, 351 }; 352 353 static int __init omap_cf_init(void)
··· 330 return 0; 331 } 332 333 static struct platform_driver omap_cf_driver = { 334 .driver = { 335 .name = (char *) driver_name, 336 .owner = THIS_MODULE, 337 }, 338 .remove = __exit_p(omap_cf_remove), 339 }; 340 341 static int __init omap_cf_init(void)
+39 -41
drivers/pcmcia/pd6729.c
··· 14 #include <linux/workqueue.h> 15 #include <linux/interrupt.h> 16 #include <linux/device.h> 17 18 #include <pcmcia/cs_types.h> 19 #include <pcmcia/ss.h> 20 #include <pcmcia/cs.h> 21 22 #include <asm/system.h> 23 - #include <asm/io.h> 24 25 #include "pd6729.h" 26 #include "i82365.h" ··· 222 ? SS_READY : 0; 223 } 224 225 - if (events) { 226 pcmcia_parse_events(&socket[i].socket, events); 227 - } 228 active |= events; 229 } 230 ··· 256 status = indirect_read(socket, I365_STATUS); 257 *value = 0; 258 259 - if ((status & I365_CS_DETECT) == I365_CS_DETECT) { 260 *value |= SS_DETECT; 261 - } 262 263 /* 264 * IO cards have a different meaning of bits 0,1 ··· 307 socket->card_irq = state->io_irq; 308 309 reg = 0; 310 - /* The reset bit has "inverse" logic */ 311 if (!(state->flags & SS_RESET)) 312 reg |= I365_PC_RESET; 313 if (state->flags & SS_IOCARD) ··· 379 indirect_write(socket, I365_POWER, reg); 380 381 if (irq_mode == 1) { 382 - /* all interrupts are to be done as PCI interrupts */ 383 data = PD67_EC1_INV_MGMT_IRQ | PD67_EC1_INV_CARD_IRQ; 384 } else 385 data = 0; ··· 390 /* Enable specific interrupt events */ 391 392 reg = 0x00; 393 - if (state->csc_mask & SS_DETECT) { 394 reg |= I365_CSC_DETECT; 395 - } 396 if (state->flags & SS_IOCARD) { 397 if (state->csc_mask & SS_STSCHG) 398 reg |= I365_CSC_STSCHG; ··· 449 450 ioctl = indirect_read(socket, I365_IOCTL) & ~I365_IOCTL_MASK(map); 451 452 - if (io->flags & MAP_0WS) ioctl |= I365_IOCTL_0WS(map); 453 - if (io->flags & MAP_16BIT) ioctl |= I365_IOCTL_16BIT(map); 454 - if (io->flags & MAP_AUTOSZ) ioctl |= I365_IOCTL_IOCS16(map); 455 456 indirect_write(socket, I365_IOCTL, ioctl); 457 ··· 499 500 /* write the stop address */ 501 502 - i= (mem->res->end >> 12) & 0x0fff; 503 switch (to_cycles(mem->speed)) { 504 case 0: 505 break; ··· 565 566 /* the pccard structure and its functions */ 567 static struct pccard_operations pd6729_operations = { 568 - .init = pd6729_init, 569 .get_status = pd6729_get_status, 570 .set_socket = pd6729_set_socket, 571 .set_io_map = pd6729_set_io_map, ··· 580 581 static int pd6729_check_irq(int irq) 582 { 583 - if (request_irq(irq, pd6729_test, IRQF_PROBE_SHARED, "x", pd6729_test) 584 - != 0) return -1; 585 free_irq(irq, pd6729_test); 586 return 0; 587 } ··· 598 599 if (irq_mode == 1) { 600 printk(KERN_INFO "pd6729: PCI card interrupts, " 601 - "PCI status changes\n"); 602 return 0; 603 } 604 ··· 614 if (mask & (1<<i)) 615 printk("%s%d", ((mask & ((1<<i)-1)) ? "," : ""), i); 616 617 - if (mask == 0) printk("none!"); 618 - 619 - printk(" polling status changes.\n"); 620 621 return mask; 622 } ··· 632 633 socket = kzalloc(sizeof(struct pd6729_socket) * MAX_SOCKETS, 634 GFP_KERNEL); 635 - if (!socket) 636 return -ENOMEM; 637 638 - if ((ret = pci_enable_device(dev))) 639 goto err_out_free_mem; 640 641 if (!pci_resource_start(dev, 0)) { 642 dev_warn(&dev->dev, "refusing to load the driver as the " ··· 652 dev_info(&dev->dev, "Cirrus PD6729 PCI to PCMCIA Bridge at 0x%llx " 653 "on irq %d\n", 654 (unsigned long long)pci_resource_start(dev, 0), dev->irq); 655 - /* 656 * Since we have no memory BARs some firmware may not 657 * have had PCI_COMMAND_MEMORY enabled, yet the device needs it. 658 */ ··· 698 pci_set_drvdata(dev, socket); 699 if (irq_mode == 1) { 700 /* Register the interrupt handler */ 701 - if ((ret = request_irq(dev->irq, pd6729_interrupt, IRQF_SHARED, 702 - "pd6729", socket))) { 703 dev_err(&dev->dev, "Failed to register irq %d\n", 704 dev->irq); 705 goto err_out_free_res; ··· 764 kfree(socket); 765 } 766 767 - #ifdef CONFIG_PM 768 - static int pd6729_socket_suspend(struct pci_dev *dev, pm_message_t state) 769 - { 770 - return pcmcia_socket_dev_suspend(&dev->dev); 771 - } 772 - 773 - static int pd6729_socket_resume(struct pci_dev *dev) 774 - { 775 - return pcmcia_socket_dev_resume(&dev->dev); 776 - } 777 - #endif 778 - 779 static struct pci_device_id pd6729_pci_ids[] = { 780 { 781 .vendor = PCI_VENDOR_ID_CIRRUS, ··· 780 .id_table = pd6729_pci_ids, 781 .probe = pd6729_pci_probe, 782 .remove = __devexit_p(pd6729_pci_remove), 783 - #ifdef CONFIG_PM 784 - .suspend = pd6729_socket_suspend, 785 - .resume = pd6729_socket_resume, 786 - #endif 787 }; 788 789 static int pd6729_module_init(void)
··· 14 #include <linux/workqueue.h> 15 #include <linux/interrupt.h> 16 #include <linux/device.h> 17 + #include <linux/io.h> 18 19 #include <pcmcia/cs_types.h> 20 #include <pcmcia/ss.h> 21 #include <pcmcia/cs.h> 22 23 #include <asm/system.h> 24 25 #include "pd6729.h" 26 #include "i82365.h" ··· 222 ? SS_READY : 0; 223 } 224 225 + if (events) 226 pcmcia_parse_events(&socket[i].socket, events); 227 + 228 active |= events; 229 } 230 ··· 256 status = indirect_read(socket, I365_STATUS); 257 *value = 0; 258 259 + if ((status & I365_CS_DETECT) == I365_CS_DETECT) 260 *value |= SS_DETECT; 261 262 /* 263 * IO cards have a different meaning of bits 0,1 ··· 308 socket->card_irq = state->io_irq; 309 310 reg = 0; 311 + /* The reset bit has "inverse" logic */ 312 if (!(state->flags & SS_RESET)) 313 reg |= I365_PC_RESET; 314 if (state->flags & SS_IOCARD) ··· 380 indirect_write(socket, I365_POWER, reg); 381 382 if (irq_mode == 1) { 383 + /* all interrupts are to be done as PCI interrupts */ 384 data = PD67_EC1_INV_MGMT_IRQ | PD67_EC1_INV_CARD_IRQ; 385 } else 386 data = 0; ··· 391 /* Enable specific interrupt events */ 392 393 reg = 0x00; 394 + if (state->csc_mask & SS_DETECT) 395 reg |= I365_CSC_DETECT; 396 + 397 if (state->flags & SS_IOCARD) { 398 if (state->csc_mask & SS_STSCHG) 399 reg |= I365_CSC_STSCHG; ··· 450 451 ioctl = indirect_read(socket, I365_IOCTL) & ~I365_IOCTL_MASK(map); 452 453 + if (io->flags & MAP_0WS) 454 + ioctl |= I365_IOCTL_0WS(map); 455 + if (io->flags & MAP_16BIT) 456 + ioctl |= I365_IOCTL_16BIT(map); 457 + if (io->flags & MAP_AUTOSZ) 458 + ioctl |= I365_IOCTL_IOCS16(map); 459 460 indirect_write(socket, I365_IOCTL, ioctl); 461 ··· 497 498 /* write the stop address */ 499 500 + i = (mem->res->end >> 12) & 0x0fff; 501 switch (to_cycles(mem->speed)) { 502 case 0: 503 break; ··· 563 564 /* the pccard structure and its functions */ 565 static struct pccard_operations pd6729_operations = { 566 + .init = pd6729_init, 567 .get_status = pd6729_get_status, 568 .set_socket = pd6729_set_socket, 569 .set_io_map = pd6729_set_io_map, ··· 578 579 static int pd6729_check_irq(int irq) 580 { 581 + int ret; 582 + 583 + ret = request_irq(irq, pd6729_test, IRQF_PROBE_SHARED, "x", 584 + pd6729_test); 585 + if (ret) 586 + return -1; 587 + 588 free_irq(irq, pd6729_test); 589 return 0; 590 } ··· 591 592 if (irq_mode == 1) { 593 printk(KERN_INFO "pd6729: PCI card interrupts, " 594 + "PCI status changes\n"); 595 return 0; 596 } 597 ··· 607 if (mask & (1<<i)) 608 printk("%s%d", ((mask & ((1<<i)-1)) ? "," : ""), i); 609 610 + if (mask == 0) 611 + printk("none!"); 612 + else 613 + printk(" polling status changes.\n"); 614 615 return mask; 616 } ··· 624 625 socket = kzalloc(sizeof(struct pd6729_socket) * MAX_SOCKETS, 626 GFP_KERNEL); 627 + if (!socket) { 628 + dev_warn(&dev->dev, "failed to kzalloc socket.\n"); 629 return -ENOMEM; 630 + } 631 632 + ret = pci_enable_device(dev); 633 + if (ret) { 634 + dev_warn(&dev->dev, "failed to enable pci_device.\n"); 635 goto err_out_free_mem; 636 + } 637 638 if (!pci_resource_start(dev, 0)) { 639 dev_warn(&dev->dev, "refusing to load the driver as the " ··· 639 dev_info(&dev->dev, "Cirrus PD6729 PCI to PCMCIA Bridge at 0x%llx " 640 "on irq %d\n", 641 (unsigned long long)pci_resource_start(dev, 0), dev->irq); 642 + /* 643 * Since we have no memory BARs some firmware may not 644 * have had PCI_COMMAND_MEMORY enabled, yet the device needs it. 645 */ ··· 685 pci_set_drvdata(dev, socket); 686 if (irq_mode == 1) { 687 /* Register the interrupt handler */ 688 + ret = request_irq(dev->irq, pd6729_interrupt, IRQF_SHARED, 689 + "pd6729", socket); 690 + if (ret) { 691 dev_err(&dev->dev, "Failed to register irq %d\n", 692 dev->irq); 693 goto err_out_free_res; ··· 750 kfree(socket); 751 } 752 753 static struct pci_device_id pd6729_pci_ids[] = { 754 { 755 .vendor = PCI_VENDOR_ID_CIRRUS, ··· 778 .id_table = pd6729_pci_ids, 779 .probe = pd6729_pci_probe, 780 .remove = __devexit_p(pd6729_pci_remove), 781 }; 782 783 static int pd6729_module_init(void)
+1 -7
drivers/pcmcia/pxa2xx_base.c
··· 325 return 0; 326 } 327 328 - static int pxa2xx_drv_pcmcia_suspend(struct device *dev) 329 - { 330 - return pcmcia_socket_dev_suspend(dev); 331 - } 332 - 333 static int pxa2xx_drv_pcmcia_resume(struct device *dev) 334 { 335 pxa2xx_configure_sockets(dev); 336 - return pcmcia_socket_dev_resume(dev); 337 } 338 339 static const struct dev_pm_ops pxa2xx_drv_pcmcia_pm_ops = { 340 - .suspend = pxa2xx_drv_pcmcia_suspend, 341 .resume = pxa2xx_drv_pcmcia_resume, 342 }; 343
··· 325 return 0; 326 } 327 328 static int pxa2xx_drv_pcmcia_resume(struct device *dev) 329 { 330 pxa2xx_configure_sockets(dev); 331 + return 0; 332 } 333 334 static const struct dev_pm_ops pxa2xx_drv_pcmcia_pm_ops = { 335 .resume = pxa2xx_drv_pcmcia_resume, 336 }; 337
+7
drivers/pcmcia/rsrc_nonstatic.c
··· 810 unsigned long size = end - start + 1; 811 int ret = 0; 812 813 if (end < start) 814 return -EINVAL; 815
··· 810 unsigned long size = end - start + 1; 811 int ret = 0; 812 813 + #if defined(CONFIG_X86) 814 + /* on x86, avoid anything < 0x100 for it is often used for 815 + * legacy platform devices */ 816 + if (start < 0x100) 817 + start = 0x100; 818 + #endif 819 + 820 if (end < start) 821 return -EINVAL; 822
-13
drivers/pcmcia/sa1100_generic.c
··· 95 return 0; 96 } 97 98 - static int sa11x0_drv_pcmcia_suspend(struct platform_device *dev, 99 - pm_message_t state) 100 - { 101 - return pcmcia_socket_dev_suspend(&dev->dev); 102 - } 103 - 104 - static int sa11x0_drv_pcmcia_resume(struct platform_device *dev) 105 - { 106 - return pcmcia_socket_dev_resume(&dev->dev); 107 - } 108 - 109 static struct platform_driver sa11x0_pcmcia_driver = { 110 .driver = { 111 .name = "sa11x0-pcmcia", ··· 102 }, 103 .probe = sa11x0_drv_pcmcia_probe, 104 .remove = sa11x0_drv_pcmcia_remove, 105 - .suspend = sa11x0_drv_pcmcia_suspend, 106 - .resume = sa11x0_drv_pcmcia_resume, 107 }; 108 109 /* sa11x0_pcmcia_init()
··· 95 return 0; 96 } 97 98 static struct platform_driver sa11x0_pcmcia_driver = { 99 .driver = { 100 .name = "sa11x0-pcmcia", ··· 113 }, 114 .probe = sa11x0_drv_pcmcia_probe, 115 .remove = sa11x0_drv_pcmcia_remove, 116 }; 117 118 /* sa11x0_pcmcia_init()
-12
drivers/pcmcia/sa1111_generic.c
··· 213 return 0; 214 } 215 216 - static int pcmcia_suspend(struct sa1111_dev *dev, pm_message_t state) 217 - { 218 - return pcmcia_socket_dev_suspend(&dev->dev); 219 - } 220 - 221 - static int pcmcia_resume(struct sa1111_dev *dev) 222 - { 223 - return pcmcia_socket_dev_resume(&dev->dev); 224 - } 225 - 226 static struct sa1111_driver pcmcia_driver = { 227 .drv = { 228 .name = "sa1111-pcmcia", ··· 220 .devid = SA1111_DEVID_PCMCIA, 221 .probe = pcmcia_probe, 222 .remove = __devexit_p(pcmcia_remove), 223 - .suspend = pcmcia_suspend, 224 - .resume = pcmcia_resume, 225 }; 226 227 static int __init sa1111_drv_pcmcia_init(void)
··· 213 return 0; 214 } 215 216 static struct sa1111_driver pcmcia_driver = { 217 .drv = { 218 .name = "sa1111-pcmcia", ··· 230 .devid = SA1111_DEVID_PCMCIA, 231 .probe = pcmcia_probe, 232 .remove = __devexit_p(pcmcia_remove), 233 }; 234 235 static int __init sa1111_drv_pcmcia_init(void)
-12
drivers/pcmcia/tcic.c
··· 348 return id; 349 } 350 351 - static int tcic_drv_pcmcia_suspend(struct platform_device *dev, 352 - pm_message_t state) 353 - { 354 - return pcmcia_socket_dev_suspend(&dev->dev); 355 - } 356 - 357 - static int tcic_drv_pcmcia_resume(struct platform_device *dev) 358 - { 359 - return pcmcia_socket_dev_resume(&dev->dev); 360 - } 361 /*====================================================================*/ 362 363 static struct platform_driver tcic_driver = { ··· 355 .name = "tcic-pcmcia", 356 .owner = THIS_MODULE, 357 }, 358 - .suspend = tcic_drv_pcmcia_suspend, 359 - .resume = tcic_drv_pcmcia_resume, 360 }; 361 362 static struct platform_device tcic_device = {
··· 348 return id; 349 } 350 351 /*====================================================================*/ 352 353 static struct platform_driver tcic_driver = { ··· 365 .name = "tcic-pcmcia", 366 .owner = THIS_MODULE, 367 }, 368 }; 369 370 static struct platform_device tcic_device = {
-13
drivers/pcmcia/vrc4171_card.c
··· 705 706 __setup("vrc4171_card=", vrc4171_card_setup); 707 708 - static int vrc4171_card_suspend(struct platform_device *dev, 709 - pm_message_t state) 710 - { 711 - return pcmcia_socket_dev_suspend(&dev->dev); 712 - } 713 - 714 - static int vrc4171_card_resume(struct platform_device *dev) 715 - { 716 - return pcmcia_socket_dev_resume(&dev->dev); 717 - } 718 - 719 static struct platform_driver vrc4171_card_driver = { 720 .driver = { 721 .name = vrc4171_card_name, 722 .owner = THIS_MODULE, 723 }, 724 - .suspend = vrc4171_card_suspend, 725 - .resume = vrc4171_card_resume, 726 }; 727 728 static int __devinit vrc4171_card_init(void)
··· 705 706 __setup("vrc4171_card=", vrc4171_card_setup); 707 708 static struct platform_driver vrc4171_card_driver = { 709 .driver = { 710 .name = vrc4171_card_name, 711 .owner = THIS_MODULE, 712 }, 713 }; 714 715 static int __devinit vrc4171_card_init(void)
+2 -15
drivers/pcmcia/yenta_socket.c
··· 1290 { 1291 struct pci_dev *pdev = to_pci_dev(dev); 1292 struct yenta_socket *socket = pci_get_drvdata(pdev); 1293 - int ret; 1294 - 1295 - ret = pcmcia_socket_dev_suspend(dev); 1296 1297 if (!socket) 1298 - return ret; 1299 1300 if (socket->type && socket->type->save_state) 1301 socket->type->save_state(socket); ··· 1309 */ 1310 /* pci_set_power_state(dev, 3); */ 1311 1312 - return ret; 1313 } 1314 1315 static int yenta_dev_resume_noirq(struct device *dev) ··· 1333 if (socket->type && socket->type->restore_state) 1334 socket->type->restore_state(socket); 1335 1336 - pcmcia_socket_dev_early_resume(dev); 1337 - return 0; 1338 - } 1339 - 1340 - static int yenta_dev_resume(struct device *dev) 1341 - { 1342 - pcmcia_socket_dev_late_resume(dev); 1343 return 0; 1344 } 1345 1346 static const struct dev_pm_ops yenta_pm_ops = { 1347 .suspend_noirq = yenta_dev_suspend_noirq, 1348 .resume_noirq = yenta_dev_resume_noirq, 1349 - .resume = yenta_dev_resume, 1350 .freeze_noirq = yenta_dev_suspend_noirq, 1351 .thaw_noirq = yenta_dev_resume_noirq, 1352 - .thaw = yenta_dev_resume, 1353 .poweroff_noirq = yenta_dev_suspend_noirq, 1354 .restore_noirq = yenta_dev_resume_noirq, 1355 - .restore = yenta_dev_resume, 1356 }; 1357 1358 #define YENTA_PM_OPS (&yenta_pm_ops)
··· 1290 { 1291 struct pci_dev *pdev = to_pci_dev(dev); 1292 struct yenta_socket *socket = pci_get_drvdata(pdev); 1293 1294 if (!socket) 1295 + return 0; 1296 1297 if (socket->type && socket->type->save_state) 1298 socket->type->save_state(socket); ··· 1312 */ 1313 /* pci_set_power_state(dev, 3); */ 1314 1315 + return 0; 1316 } 1317 1318 static int yenta_dev_resume_noirq(struct device *dev) ··· 1336 if (socket->type && socket->type->restore_state) 1337 socket->type->restore_state(socket); 1338 1339 return 0; 1340 } 1341 1342 static const struct dev_pm_ops yenta_pm_ops = { 1343 .suspend_noirq = yenta_dev_suspend_noirq, 1344 .resume_noirq = yenta_dev_resume_noirq, 1345 .freeze_noirq = yenta_dev_suspend_noirq, 1346 .thaw_noirq = yenta_dev_resume_noirq, 1347 .poweroff_noirq = yenta_dev_suspend_noirq, 1348 .restore_noirq = yenta_dev_resume_noirq, 1349 }; 1350 1351 #define YENTA_PM_OPS (&yenta_pm_ops)
-6
include/pcmcia/ss.h
··· 277 #endif 278 279 280 - /* socket drivers are expected to use these callbacks in their .drv struct */ 281 - extern int pcmcia_socket_dev_suspend(struct device *dev); 282 - extern void pcmcia_socket_dev_early_resume(struct device *dev); 283 - extern void pcmcia_socket_dev_late_resume(struct device *dev); 284 - extern int pcmcia_socket_dev_resume(struct device *dev); 285 - 286 /* socket drivers use this callback in their IRQ handler */ 287 extern void pcmcia_parse_events(struct pcmcia_socket *socket, 288 unsigned int events);
··· 277 #endif 278 279 280 /* socket drivers use this callback in their IRQ handler */ 281 extern void pcmcia_parse_events(struct pcmcia_socket *socket, 282 unsigned int events);