diff options
Diffstat (limited to 'drivers/pcmcia/pcmcia_resource.c')
| -rw-r--r-- | drivers/pcmcia/pcmcia_resource.c | 18 |
1 files changed, 11 insertions, 7 deletions
diff --git a/drivers/pcmcia/pcmcia_resource.c b/drivers/pcmcia/pcmcia_resource.c index 45063b4e5b78..3131bb0a0095 100644 --- a/drivers/pcmcia/pcmcia_resource.c +++ b/drivers/pcmcia/pcmcia_resource.c | |||
| @@ -88,7 +88,6 @@ static int alloc_io_space(struct pcmcia_socket *s, u_int attr, ioaddr_t *base, | |||
| 88 | } | 88 | } |
| 89 | if ((s->features & SS_CAP_STATIC_MAP) && s->io_offset) { | 89 | if ((s->features & SS_CAP_STATIC_MAP) && s->io_offset) { |
| 90 | *base = s->io_offset | (*base & 0x0fff); | 90 | *base = s->io_offset | (*base & 0x0fff); |
| 91 | s->io[0].res->flags = (s->io[0].res->flags & ~IORESOURCE_BITS) | (attr & IORESOURCE_BITS); | ||
| 92 | return 0; | 91 | return 0; |
| 93 | } | 92 | } |
| 94 | /* Check for an already-allocated window that must conflict with | 93 | /* Check for an already-allocated window that must conflict with |
| @@ -209,7 +208,6 @@ int pccard_get_configuration_info(struct pcmcia_socket *s, | |||
| 209 | if (!(s->state & SOCKET_PRESENT)) | 208 | if (!(s->state & SOCKET_PRESENT)) |
| 210 | return CS_NO_CARD; | 209 | return CS_NO_CARD; |
| 211 | 210 | ||
| 212 | config->Function = p_dev->func; | ||
| 213 | 211 | ||
| 214 | #ifdef CONFIG_CARDBUS | 212 | #ifdef CONFIG_CARDBUS |
| 215 | if (s->state & SOCKET_CARDBUS) { | 213 | if (s->state & SOCKET_CARDBUS) { |
| @@ -223,14 +221,22 @@ int pccard_get_configuration_info(struct pcmcia_socket *s, | |||
| 223 | config->AssignedIRQ = s->irq.AssignedIRQ; | 221 | config->AssignedIRQ = s->irq.AssignedIRQ; |
| 224 | if (config->AssignedIRQ) | 222 | if (config->AssignedIRQ) |
| 225 | config->Attributes |= CONF_ENABLE_IRQ; | 223 | config->Attributes |= CONF_ENABLE_IRQ; |
| 226 | config->BasePort1 = s->io[0].res->start; | 224 | if (s->io[0].res) { |
| 227 | config->NumPorts1 = s->io[0].res->end - config->BasePort1 + 1; | 225 | config->BasePort1 = s->io[0].res->start; |
| 226 | config->NumPorts1 = s->io[0].res->end - config->BasePort1 + 1; | ||
| 227 | } | ||
| 228 | } | 228 | } |
| 229 | return CS_SUCCESS; | 229 | return CS_SUCCESS; |
| 230 | } | 230 | } |
| 231 | #endif | 231 | #endif |
| 232 | 232 | ||
| 233 | c = (p_dev) ? p_dev->function_config : NULL; | 233 | if (p_dev) { |
| 234 | c = p_dev->function_config; | ||
| 235 | config->Function = p_dev->func; | ||
| 236 | } else { | ||
| 237 | c = NULL; | ||
| 238 | config->Function = 0; | ||
| 239 | } | ||
| 234 | 240 | ||
| 235 | if ((c == NULL) || !(c->state & CONFIG_LOCKED)) { | 241 | if ((c == NULL) || !(c->state & CONFIG_LOCKED)) { |
| 236 | config->Attributes = 0; | 242 | config->Attributes = 0; |
| @@ -947,7 +953,5 @@ void pcmcia_disable_device(struct pcmcia_device *p_dev) { | |||
| 947 | pcmcia_release_irq(p_dev, &p_dev->irq); | 953 | pcmcia_release_irq(p_dev, &p_dev->irq); |
| 948 | if (&p_dev->win) | 954 | if (&p_dev->win) |
| 949 | pcmcia_release_window(p_dev->win); | 955 | pcmcia_release_window(p_dev->win); |
| 950 | |||
| 951 | p_dev->dev_node = NULL; | ||
| 952 | } | 956 | } |
| 953 | EXPORT_SYMBOL(pcmcia_disable_device); | 957 | EXPORT_SYMBOL(pcmcia_disable_device); |
