diff options
author | Glenn Elliott <gelliott@cs.unc.edu> | 2012-03-04 19:47:13 -0500 |
---|---|---|
committer | Glenn Elliott <gelliott@cs.unc.edu> | 2012-03-04 19:47:13 -0500 |
commit | c71c03bda1e86c9d5198c5d83f712e695c4f2a1e (patch) | |
tree | ecb166cb3e2b7e2adb3b5e292245fefd23381ac8 /drivers/bluetooth/bt3c_cs.c | |
parent | ea53c912f8a86a8567697115b6a0d8152beee5c8 (diff) | |
parent | 6a00f206debf8a5c8899055726ad127dbeeed098 (diff) |
Merge branch 'mpi-master' into wip-k-fmlpwip-k-fmlp
Conflicts:
litmus/sched_cedf.c
Diffstat (limited to 'drivers/bluetooth/bt3c_cs.c')
-rw-r--r-- | drivers/bluetooth/bt3c_cs.c | 66 |
1 files changed, 29 insertions, 37 deletions
diff --git a/drivers/bluetooth/bt3c_cs.c b/drivers/bluetooth/bt3c_cs.c index 7ab8f29d5e0d..4fc01949d399 100644 --- a/drivers/bluetooth/bt3c_cs.c +++ b/drivers/bluetooth/bt3c_cs.c | |||
@@ -45,7 +45,6 @@ | |||
45 | #include <linux/device.h> | 45 | #include <linux/device.h> |
46 | #include <linux/firmware.h> | 46 | #include <linux/firmware.h> |
47 | 47 | ||
48 | #include <pcmcia/cs.h> | ||
49 | #include <pcmcia/cistpl.h> | 48 | #include <pcmcia/cistpl.h> |
50 | #include <pcmcia/ciscode.h> | 49 | #include <pcmcia/ciscode.h> |
51 | #include <pcmcia/ds.h> | 50 | #include <pcmcia/ds.h> |
@@ -657,11 +656,8 @@ static int bt3c_probe(struct pcmcia_device *link) | |||
657 | info->p_dev = link; | 656 | info->p_dev = link; |
658 | link->priv = info; | 657 | link->priv = info; |
659 | 658 | ||
660 | link->resource[0]->flags |= IO_DATA_PATH_WIDTH_8; | 659 | link->config_flags |= CONF_ENABLE_IRQ | CONF_AUTO_SET_VPP | |
661 | link->resource[0]->end = 8; | 660 | CONF_AUTO_SET_IO; |
662 | |||
663 | link->conf.Attributes = CONF_ENABLE_IRQ; | ||
664 | link->conf.IntType = INT_MEMORY_AND_IO; | ||
665 | 661 | ||
666 | return bt3c_config(link); | 662 | return bt3c_config(link); |
667 | } | 663 | } |
@@ -675,43 +671,41 @@ static void bt3c_detach(struct pcmcia_device *link) | |||
675 | kfree(info); | 671 | kfree(info); |
676 | } | 672 | } |
677 | 673 | ||
678 | static int bt3c_check_config(struct pcmcia_device *p_dev, | 674 | static int bt3c_check_config(struct pcmcia_device *p_dev, void *priv_data) |
679 | cistpl_cftable_entry_t *cf, | ||
680 | cistpl_cftable_entry_t *dflt, | ||
681 | unsigned int vcc, | ||
682 | void *priv_data) | ||
683 | { | 675 | { |
684 | unsigned long try = (unsigned long) priv_data; | 676 | int *try = priv_data; |
685 | 677 | ||
686 | p_dev->io_lines = (try == 0) ? 16 : cf->io.flags & CISTPL_IO_LINES_MASK; | 678 | if (try == 0) |
679 | p_dev->io_lines = 16; | ||
687 | 680 | ||
688 | if (cf->vpp1.present & (1 << CISTPL_POWER_VNOM)) | 681 | if ((p_dev->resource[0]->end != 8) || (p_dev->resource[0]->start == 0)) |
689 | p_dev->conf.Vpp = cf->vpp1.param[CISTPL_POWER_VNOM] / 10000; | 682 | return -EINVAL; |
690 | if ((cf->io.nwin > 0) && (cf->io.win[0].len == 8) && | 683 | |
691 | (cf->io.win[0].base != 0)) { | 684 | p_dev->resource[0]->end = 8; |
692 | p_dev->resource[0]->start = cf->io.win[0].base; | 685 | p_dev->resource[0]->flags &= ~IO_DATA_PATH_WIDTH; |
693 | if (!pcmcia_request_io(p_dev)) | 686 | p_dev->resource[0]->flags |= IO_DATA_PATH_WIDTH_8; |
694 | return 0; | 687 | |
695 | } | 688 | return pcmcia_request_io(p_dev); |
696 | return -ENODEV; | ||
697 | } | 689 | } |
698 | 690 | ||
699 | static int bt3c_check_config_notpicky(struct pcmcia_device *p_dev, | 691 | static int bt3c_check_config_notpicky(struct pcmcia_device *p_dev, |
700 | cistpl_cftable_entry_t *cf, | ||
701 | cistpl_cftable_entry_t *dflt, | ||
702 | unsigned int vcc, | ||
703 | void *priv_data) | 692 | void *priv_data) |
704 | { | 693 | { |
705 | static unsigned int base[5] = { 0x3f8, 0x2f8, 0x3e8, 0x2e8, 0x0 }; | 694 | static unsigned int base[5] = { 0x3f8, 0x2f8, 0x3e8, 0x2e8, 0x0 }; |
706 | int j; | 695 | int j; |
707 | 696 | ||
708 | if ((cf->io.nwin > 0) && ((cf->io.flags & CISTPL_IO_LINES_MASK) <= 3)) { | 697 | if (p_dev->io_lines > 3) |
709 | for (j = 0; j < 5; j++) { | 698 | return -ENODEV; |
710 | p_dev->resource[0]->start = base[j]; | 699 | |
711 | p_dev->io_lines = base[j] ? 16 : 3; | 700 | p_dev->resource[0]->flags &= ~IO_DATA_PATH_WIDTH; |
712 | if (!pcmcia_request_io(p_dev)) | 701 | p_dev->resource[0]->flags |= IO_DATA_PATH_WIDTH_8; |
713 | return 0; | 702 | p_dev->resource[0]->end = 8; |
714 | } | 703 | |
704 | for (j = 0; j < 5; j++) { | ||
705 | p_dev->resource[0]->start = base[j]; | ||
706 | p_dev->io_lines = base[j] ? 16 : 3; | ||
707 | if (!pcmcia_request_io(p_dev)) | ||
708 | return 0; | ||
715 | } | 709 | } |
716 | return -ENODEV; | 710 | return -ENODEV; |
717 | } | 711 | } |
@@ -742,7 +736,7 @@ found_port: | |||
742 | if (i != 0) | 736 | if (i != 0) |
743 | goto failed; | 737 | goto failed; |
744 | 738 | ||
745 | i = pcmcia_request_configuration(link, &link->conf); | 739 | i = pcmcia_enable_device(link); |
746 | if (i != 0) | 740 | if (i != 0) |
747 | goto failed; | 741 | goto failed; |
748 | 742 | ||
@@ -767,7 +761,7 @@ static void bt3c_release(struct pcmcia_device *link) | |||
767 | } | 761 | } |
768 | 762 | ||
769 | 763 | ||
770 | static struct pcmcia_device_id bt3c_ids[] = { | 764 | static const struct pcmcia_device_id bt3c_ids[] = { |
771 | PCMCIA_DEVICE_PROD_ID13("3COM", "Bluetooth PC Card", 0xefce0a31, 0xd4ce9b02), | 765 | PCMCIA_DEVICE_PROD_ID13("3COM", "Bluetooth PC Card", 0xefce0a31, 0xd4ce9b02), |
772 | PCMCIA_DEVICE_NULL | 766 | PCMCIA_DEVICE_NULL |
773 | }; | 767 | }; |
@@ -775,9 +769,7 @@ MODULE_DEVICE_TABLE(pcmcia, bt3c_ids); | |||
775 | 769 | ||
776 | static struct pcmcia_driver bt3c_driver = { | 770 | static struct pcmcia_driver bt3c_driver = { |
777 | .owner = THIS_MODULE, | 771 | .owner = THIS_MODULE, |
778 | .drv = { | 772 | .name = "bt3c_cs", |
779 | .name = "bt3c_cs", | ||
780 | }, | ||
781 | .probe = bt3c_probe, | 773 | .probe = bt3c_probe, |
782 | .remove = bt3c_detach, | 774 | .remove = bt3c_detach, |
783 | .id_table = bt3c_ids, | 775 | .id_table = bt3c_ids, |