aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/bluetooth/bt3c_cs.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/bluetooth/bt3c_cs.c')
-rw-r--r--drivers/bluetooth/bt3c_cs.c51
1 files changed, 24 insertions, 27 deletions
diff --git a/drivers/bluetooth/bt3c_cs.c b/drivers/bluetooth/bt3c_cs.c
index 9192a754ebc0..7ea8fa350d26 100644
--- a/drivers/bluetooth/bt3c_cs.c
+++ b/drivers/bluetooth/bt3c_cs.c
@@ -88,8 +88,8 @@ typedef struct bt3c_info_t {
88} bt3c_info_t; 88} bt3c_info_t;
89 89
90 90
91static void bt3c_config(dev_link_t *link); 91static void bt3c_config(struct pcmcia_device *link);
92static void bt3c_release(dev_link_t *link); 92static void bt3c_release(struct pcmcia_device *link);
93 93
94static void bt3c_detach(struct pcmcia_device *p_dev); 94static void bt3c_detach(struct pcmcia_device *p_dev);
95 95
@@ -645,17 +645,16 @@ static int bt3c_close(bt3c_info_t *info)
645 return 0; 645 return 0;
646} 646}
647 647
648static int bt3c_attach(struct pcmcia_device *p_dev) 648static int bt3c_attach(struct pcmcia_device *link)
649{ 649{
650 bt3c_info_t *info; 650 bt3c_info_t *info;
651 dev_link_t *link = dev_to_instance(p_dev);
652 651
653 /* Create new info device */ 652 /* Create new info device */
654 info = kzalloc(sizeof(*info), GFP_KERNEL); 653 info = kzalloc(sizeof(*info), GFP_KERNEL);
655 if (!info) 654 if (!info)
656 return -ENOMEM; 655 return -ENOMEM;
657 656
658 info->p_dev = p_dev; 657 info->p_dev = link;
659 link->priv = info; 658 link->priv = info;
660 659
661 link->io.Attributes1 = IO_DATA_PATH_WIDTH_8; 660 link->io.Attributes1 = IO_DATA_PATH_WIDTH_8;
@@ -676,9 +675,8 @@ static int bt3c_attach(struct pcmcia_device *p_dev)
676} 675}
677 676
678 677
679static void bt3c_detach(struct pcmcia_device *p_dev) 678static void bt3c_detach(struct pcmcia_device *link)
680{ 679{
681 dev_link_t *link = dev_to_instance(p_dev);
682 bt3c_info_t *info = link->priv; 680 bt3c_info_t *info = link->priv;
683 681
684 if (link->state & DEV_CONFIG) 682 if (link->state & DEV_CONFIG)
@@ -687,7 +685,7 @@ static void bt3c_detach(struct pcmcia_device *p_dev)
687 kfree(info); 685 kfree(info);
688} 686}
689 687
690static int get_tuple(client_handle_t handle, tuple_t *tuple, cisparse_t *parse) 688static int get_tuple(struct pcmcia_device *handle, tuple_t *tuple, cisparse_t *parse)
691{ 689{
692 int i; 690 int i;
693 691
@@ -698,24 +696,23 @@ static int get_tuple(client_handle_t handle, tuple_t *tuple, cisparse_t *parse)
698 return pcmcia_parse_tuple(handle, tuple, parse); 696 return pcmcia_parse_tuple(handle, tuple, parse);
699} 697}
700 698
701static int first_tuple(client_handle_t handle, tuple_t *tuple, cisparse_t *parse) 699static int first_tuple(struct pcmcia_device *handle, tuple_t *tuple, cisparse_t *parse)
702{ 700{
703 if (pcmcia_get_first_tuple(handle, tuple) != CS_SUCCESS) 701 if (pcmcia_get_first_tuple(handle, tuple) != CS_SUCCESS)
704 return CS_NO_MORE_ITEMS; 702 return CS_NO_MORE_ITEMS;
705 return get_tuple(handle, tuple, parse); 703 return get_tuple(handle, tuple, parse);
706} 704}
707 705
708static int next_tuple(client_handle_t handle, tuple_t *tuple, cisparse_t *parse) 706static int next_tuple(struct pcmcia_device *handle, tuple_t *tuple, cisparse_t *parse)
709{ 707{
710 if (pcmcia_get_next_tuple(handle, tuple) != CS_SUCCESS) 708 if (pcmcia_get_next_tuple(handle, tuple) != CS_SUCCESS)
711 return CS_NO_MORE_ITEMS; 709 return CS_NO_MORE_ITEMS;
712 return get_tuple(handle, tuple, parse); 710 return get_tuple(handle, tuple, parse);
713} 711}
714 712
715static void bt3c_config(dev_link_t *link) 713static void bt3c_config(struct pcmcia_device *link)
716{ 714{
717 static kio_addr_t base[5] = { 0x3f8, 0x2f8, 0x3e8, 0x2e8, 0x0 }; 715 static kio_addr_t base[5] = { 0x3f8, 0x2f8, 0x3e8, 0x2e8, 0x0 };
718 client_handle_t handle = link->handle;
719 bt3c_info_t *info = link->priv; 716 bt3c_info_t *info = link->priv;
720 tuple_t tuple; 717 tuple_t tuple;
721 u_short buf[256]; 718 u_short buf[256];
@@ -730,7 +727,7 @@ static void bt3c_config(dev_link_t *link)
730 727
731 /* Get configuration register information */ 728 /* Get configuration register information */
732 tuple.DesiredTuple = CISTPL_CONFIG; 729 tuple.DesiredTuple = CISTPL_CONFIG;
733 last_ret = first_tuple(handle, &tuple, &parse); 730 last_ret = first_tuple(link, &tuple, &parse);
734 if (last_ret != CS_SUCCESS) { 731 if (last_ret != CS_SUCCESS) {
735 last_fn = ParseTuple; 732 last_fn = ParseTuple;
736 goto cs_failed; 733 goto cs_failed;
@@ -749,7 +746,7 @@ static void bt3c_config(dev_link_t *link)
749 tuple.DesiredTuple = CISTPL_CFTABLE_ENTRY; 746 tuple.DesiredTuple = CISTPL_CFTABLE_ENTRY;
750 /* Two tries: without IO aliases, then with aliases */ 747 /* Two tries: without IO aliases, then with aliases */
751 for (try = 0; try < 2; try++) { 748 for (try = 0; try < 2; try++) {
752 i = first_tuple(handle, &tuple, &parse); 749 i = first_tuple(link, &tuple, &parse);
753 while (i != CS_NO_MORE_ITEMS) { 750 while (i != CS_NO_MORE_ITEMS) {
754 if (i != CS_SUCCESS) 751 if (i != CS_SUCCESS)
755 goto next_entry; 752 goto next_entry;
@@ -759,49 +756,49 @@ static void bt3c_config(dev_link_t *link)
759 link->conf.ConfigIndex = cf->index; 756 link->conf.ConfigIndex = cf->index;
760 link->io.BasePort1 = cf->io.win[0].base; 757 link->io.BasePort1 = cf->io.win[0].base;
761 link->io.IOAddrLines = (try == 0) ? 16 : cf->io.flags & CISTPL_IO_LINES_MASK; 758 link->io.IOAddrLines = (try == 0) ? 16 : cf->io.flags & CISTPL_IO_LINES_MASK;
762 i = pcmcia_request_io(link->handle, &link->io); 759 i = pcmcia_request_io(link, &link->io);
763 if (i == CS_SUCCESS) 760 if (i == CS_SUCCESS)
764 goto found_port; 761 goto found_port;
765 } 762 }
766next_entry: 763next_entry:
767 i = next_tuple(handle, &tuple, &parse); 764 i = next_tuple(link, &tuple, &parse);
768 } 765 }
769 } 766 }
770 767
771 /* Second pass: try to find an entry that isn't picky about 768 /* Second pass: try to find an entry that isn't picky about
772 its base address, then try to grab any standard serial port 769 its base address, then try to grab any standard serial port
773 address, and finally try to get any free port. */ 770 address, and finally try to get any free port. */
774 i = first_tuple(handle, &tuple, &parse); 771 i = first_tuple(link, &tuple, &parse);
775 while (i != CS_NO_MORE_ITEMS) { 772 while (i != CS_NO_MORE_ITEMS) {
776 if ((i == CS_SUCCESS) && (cf->io.nwin > 0) && ((cf->io.flags & CISTPL_IO_LINES_MASK) <= 3)) { 773 if ((i == CS_SUCCESS) && (cf->io.nwin > 0) && ((cf->io.flags & CISTPL_IO_LINES_MASK) <= 3)) {
777 link->conf.ConfigIndex = cf->index; 774 link->conf.ConfigIndex = cf->index;
778 for (j = 0; j < 5; j++) { 775 for (j = 0; j < 5; j++) {
779 link->io.BasePort1 = base[j]; 776 link->io.BasePort1 = base[j];
780 link->io.IOAddrLines = base[j] ? 16 : 3; 777 link->io.IOAddrLines = base[j] ? 16 : 3;
781 i = pcmcia_request_io(link->handle, &link->io); 778 i = pcmcia_request_io(link, &link->io);
782 if (i == CS_SUCCESS) 779 if (i == CS_SUCCESS)
783 goto found_port; 780 goto found_port;
784 } 781 }
785 } 782 }
786 i = next_tuple(handle, &tuple, &parse); 783 i = next_tuple(link, &tuple, &parse);
787 } 784 }
788 785
789found_port: 786found_port:
790 if (i != CS_SUCCESS) { 787 if (i != CS_SUCCESS) {
791 BT_ERR("No usable port range found"); 788 BT_ERR("No usable port range found");
792 cs_error(link->handle, RequestIO, i); 789 cs_error(link, RequestIO, i);
793 goto failed; 790 goto failed;
794 } 791 }
795 792
796 i = pcmcia_request_irq(link->handle, &link->irq); 793 i = pcmcia_request_irq(link, &link->irq);
797 if (i != CS_SUCCESS) { 794 if (i != CS_SUCCESS) {
798 cs_error(link->handle, RequestIRQ, i); 795 cs_error(link, RequestIRQ, i);
799 link->irq.AssignedIRQ = 0; 796 link->irq.AssignedIRQ = 0;
800 } 797 }
801 798
802 i = pcmcia_request_configuration(link->handle, &link->conf); 799 i = pcmcia_request_configuration(link, &link->conf);
803 if (i != CS_SUCCESS) { 800 if (i != CS_SUCCESS) {
804 cs_error(link->handle, RequestConfiguration, i); 801 cs_error(link, RequestConfiguration, i);
805 goto failed; 802 goto failed;
806 } 803 }
807 804
@@ -815,21 +812,21 @@ found_port:
815 return; 812 return;
816 813
817cs_failed: 814cs_failed:
818 cs_error(link->handle, last_fn, last_ret); 815 cs_error(link, last_fn, last_ret);
819 816
820failed: 817failed:
821 bt3c_release(link); 818 bt3c_release(link);
822} 819}
823 820
824 821
825static void bt3c_release(dev_link_t *link) 822static void bt3c_release(struct pcmcia_device *link)
826{ 823{
827 bt3c_info_t *info = link->priv; 824 bt3c_info_t *info = link->priv;
828 825
829 if (link->state & DEV_PRESENT) 826 if (link->state & DEV_PRESENT)
830 bt3c_close(info); 827 bt3c_close(info);
831 828
832 pcmcia_disable_device(link->handle); 829 pcmcia_disable_device(link);
833} 830}
834 831
835 832