diff options
Diffstat (limited to 'drivers/pnp')
-rw-r--r-- | drivers/pnp/isapnp/core.c | 66 |
1 files changed, 29 insertions, 37 deletions
diff --git a/drivers/pnp/isapnp/core.c b/drivers/pnp/isapnp/core.c index f08399497e4c..a3f1566ccea5 100644 --- a/drivers/pnp/isapnp/core.c +++ b/drivers/pnp/isapnp/core.c | |||
@@ -929,62 +929,54 @@ EXPORT_SYMBOL(isapnp_cfg_begin); | |||
929 | EXPORT_SYMBOL(isapnp_cfg_end); | 929 | EXPORT_SYMBOL(isapnp_cfg_end); |
930 | EXPORT_SYMBOL(isapnp_write_byte); | 930 | EXPORT_SYMBOL(isapnp_write_byte); |
931 | 931 | ||
932 | static int isapnp_read_resources(struct pnp_dev *dev) | 932 | static int isapnp_get_resources(struct pnp_dev *dev) |
933 | { | 933 | { |
934 | struct pnp_resource *pnp_res; | 934 | struct pnp_resource *pnp_res; |
935 | int tmp, ret; | 935 | int i, ret; |
936 | 936 | ||
937 | dev_dbg(&dev->dev, "get resources\n"); | ||
938 | pnp_init_resources(dev); | ||
939 | isapnp_cfg_begin(dev->card->number, dev->number); | ||
937 | dev->active = isapnp_read_byte(ISAPNP_CFG_ACTIVATE); | 940 | dev->active = isapnp_read_byte(ISAPNP_CFG_ACTIVATE); |
938 | if (dev->active) { | 941 | if (!dev->active) |
939 | for (tmp = 0; tmp < ISAPNP_MAX_PORT; tmp++) { | 942 | goto __end; |
940 | ret = isapnp_read_word(ISAPNP_CFG_PORT + (tmp << 1)); | 943 | |
941 | if (!ret) | 944 | for (i = 0; i < ISAPNP_MAX_PORT; i++) { |
942 | continue; | 945 | ret = isapnp_read_word(ISAPNP_CFG_PORT + (i << 1)); |
946 | if (ret) { | ||
943 | pnp_res = pnp_add_io_resource(dev, ret, ret, 0); | 947 | pnp_res = pnp_add_io_resource(dev, ret, ret, 0); |
944 | if (pnp_res) | 948 | if (pnp_res) |
945 | pnp_res->index = tmp; | 949 | pnp_res->index = i; |
946 | } | 950 | } |
947 | for (tmp = 0; tmp < ISAPNP_MAX_MEM; tmp++) { | 951 | } |
948 | ret = | 952 | for (i = 0; i < ISAPNP_MAX_MEM; i++) { |
949 | isapnp_read_word(ISAPNP_CFG_MEM + (tmp << 3)) << 8; | 953 | ret = isapnp_read_word(ISAPNP_CFG_MEM + (i << 3)) << 8; |
950 | if (!ret) | 954 | if (ret) { |
951 | continue; | ||
952 | pnp_res = pnp_add_mem_resource(dev, ret, ret, 0); | 955 | pnp_res = pnp_add_mem_resource(dev, ret, ret, 0); |
953 | if (pnp_res) | 956 | if (pnp_res) |
954 | pnp_res->index = tmp; | 957 | pnp_res->index = i; |
955 | } | 958 | } |
956 | for (tmp = 0; tmp < ISAPNP_MAX_IRQ; tmp++) { | 959 | } |
957 | ret = | 960 | for (i = 0; i < ISAPNP_MAX_IRQ; i++) { |
958 | (isapnp_read_word(ISAPNP_CFG_IRQ + (tmp << 1)) >> | 961 | ret = isapnp_read_word(ISAPNP_CFG_IRQ + (i << 1)) >> 8; |
959 | 8); | 962 | if (ret) { |
960 | if (!ret) | ||
961 | continue; | ||
962 | pnp_res = pnp_add_irq_resource(dev, ret, 0); | 963 | pnp_res = pnp_add_irq_resource(dev, ret, 0); |
963 | if (pnp_res) | 964 | if (pnp_res) |
964 | pnp_res->index = tmp; | 965 | pnp_res->index = i; |
965 | } | 966 | } |
966 | for (tmp = 0; tmp < ISAPNP_MAX_DMA; tmp++) { | 967 | } |
967 | ret = isapnp_read_byte(ISAPNP_CFG_DMA + tmp); | 968 | for (i = 0; i < ISAPNP_MAX_DMA; i++) { |
968 | if (ret == 4) | 969 | ret = isapnp_read_byte(ISAPNP_CFG_DMA + i); |
969 | continue; | 970 | if (ret != 4) { |
970 | pnp_res = pnp_add_dma_resource(dev, ret, 0); | 971 | pnp_res = pnp_add_dma_resource(dev, ret, 0); |
971 | if (pnp_res) | 972 | if (pnp_res) |
972 | pnp_res->index = tmp; | 973 | pnp_res->index = i; |
973 | } | 974 | } |
974 | } | 975 | } |
975 | return 0; | ||
976 | } | ||
977 | 976 | ||
978 | static int isapnp_get_resources(struct pnp_dev *dev) | 977 | __end: |
979 | { | ||
980 | int ret; | ||
981 | |||
982 | dev_dbg(&dev->dev, "get resources\n"); | ||
983 | pnp_init_resources(dev); | ||
984 | isapnp_cfg_begin(dev->card->number, dev->number); | ||
985 | ret = isapnp_read_resources(dev); | ||
986 | isapnp_cfg_end(); | 978 | isapnp_cfg_end(); |
987 | return ret; | 979 | return 0; |
988 | } | 980 | } |
989 | 981 | ||
990 | static int isapnp_set_resources(struct pnp_dev *dev) | 982 | static int isapnp_set_resources(struct pnp_dev *dev) |