diff options
| -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) |
