diff options
Diffstat (limited to 'drivers/pcmcia/pcmcia_resource.c')
| -rw-r--r-- | drivers/pcmcia/pcmcia_resource.c | 33 |
1 files changed, 16 insertions, 17 deletions
diff --git a/drivers/pcmcia/pcmcia_resource.c b/drivers/pcmcia/pcmcia_resource.c index a1fb0dc1a71f..28de5e6e164c 100644 --- a/drivers/pcmcia/pcmcia_resource.c +++ b/drivers/pcmcia/pcmcia_resource.c | |||
| @@ -26,7 +26,6 @@ | |||
| 26 | #include <asm/irq.h> | 26 | #include <asm/irq.h> |
| 27 | 27 | ||
| 28 | #include <pcmcia/ss.h> | 28 | #include <pcmcia/ss.h> |
| 29 | #include <pcmcia/cs.h> | ||
| 30 | #include <pcmcia/cistpl.h> | 29 | #include <pcmcia/cistpl.h> |
| 31 | #include <pcmcia/cisreg.h> | 30 | #include <pcmcia/cisreg.h> |
| 32 | #include <pcmcia/ds.h> | 31 | #include <pcmcia/ds.h> |
| @@ -230,7 +229,7 @@ EXPORT_SYMBOL(pcmcia_map_mem_page); | |||
| 230 | * pcmcia_fixup_iowidth() - reduce io width to 8bit | 229 | * pcmcia_fixup_iowidth() - reduce io width to 8bit |
| 231 | * | 230 | * |
| 232 | * pcmcia_fixup_iowidth() allows a PCMCIA device driver to reduce the | 231 | * pcmcia_fixup_iowidth() allows a PCMCIA device driver to reduce the |
| 233 | * IO width to 8bit after having called pcmcia_request_configuration() | 232 | * IO width to 8bit after having called pcmcia_enable_device() |
| 234 | * previously. | 233 | * previously. |
| 235 | */ | 234 | */ |
| 236 | int pcmcia_fixup_iowidth(struct pcmcia_device *p_dev) | 235 | int pcmcia_fixup_iowidth(struct pcmcia_device *p_dev) |
| @@ -278,7 +277,7 @@ EXPORT_SYMBOL(pcmcia_fixup_iowidth); | |||
| 278 | * pcmcia_fixup_vpp() - set Vpp to a new voltage level | 277 | * pcmcia_fixup_vpp() - set Vpp to a new voltage level |
| 279 | * | 278 | * |
| 280 | * pcmcia_fixup_vpp() allows a PCMCIA device driver to set Vpp to | 279 | * pcmcia_fixup_vpp() allows a PCMCIA device driver to set Vpp to |
| 281 | * a new voltage level between calls to pcmcia_request_configuration() | 280 | * a new voltage level between calls to pcmcia_enable_device() |
| 282 | * and pcmcia_disable_device(). | 281 | * and pcmcia_disable_device(). |
| 283 | */ | 282 | */ |
| 284 | int pcmcia_fixup_vpp(struct pcmcia_device *p_dev, unsigned char new_vpp) | 283 | int pcmcia_fixup_vpp(struct pcmcia_device *p_dev, unsigned char new_vpp) |
| @@ -432,18 +431,21 @@ int pcmcia_release_window(struct pcmcia_device *p_dev, struct resource *res) | |||
| 432 | } /* pcmcia_release_window */ | 431 | } /* pcmcia_release_window */ |
| 433 | EXPORT_SYMBOL(pcmcia_release_window); | 432 | EXPORT_SYMBOL(pcmcia_release_window); |
| 434 | 433 | ||
| 435 | 434 | /** | |
| 436 | int pcmcia_request_configuration(struct pcmcia_device *p_dev, | 435 | * pcmcia_enable_device() - set up and activate a PCMCIA device |
| 437 | config_req_t *req) | 436 | * |
| 437 | */ | ||
| 438 | int pcmcia_enable_device(struct pcmcia_device *p_dev) | ||
| 438 | { | 439 | { |
| 439 | int i; | 440 | int i; |
| 440 | u_int base; | 441 | unsigned int base; |
| 441 | struct pcmcia_socket *s = p_dev->socket; | 442 | struct pcmcia_socket *s = p_dev->socket; |
| 442 | config_t *c; | 443 | config_t *c; |
| 443 | pccard_io_map iomap; | 444 | pccard_io_map iomap; |
| 444 | unsigned char status = 0; | 445 | unsigned char status = 0; |
| 445 | unsigned char ext_status = 0; | 446 | unsigned char ext_status = 0; |
| 446 | unsigned char option = 0; | 447 | unsigned char option = 0; |
| 448 | unsigned int flags = p_dev->config_flags; | ||
| 447 | 449 | ||
| 448 | if (!(s->state & SOCKET_PRESENT)) | 450 | if (!(s->state & SOCKET_PRESENT)) |
| 449 | return -ENODEV; | 451 | return -ENODEV; |
| @@ -466,23 +468,20 @@ int pcmcia_request_configuration(struct pcmcia_device *p_dev, | |||
| 466 | } | 468 | } |
| 467 | 469 | ||
| 468 | /* Pick memory or I/O card, DMA mode, interrupt */ | 470 | /* Pick memory or I/O card, DMA mode, interrupt */ |
| 469 | c->Attributes = req->Attributes; | ||
| 470 | if (p_dev->_io) | 471 | if (p_dev->_io) |
| 471 | s->socket.flags |= SS_IOCARD; | 472 | s->socket.flags |= SS_IOCARD; |
| 472 | if (req->Attributes & CONF_ENABLE_DMA) | 473 | if (flags & CONF_ENABLE_SPKR) { |
| 473 | s->socket.flags |= SS_DMA_MODE; | ||
| 474 | if (req->Attributes & CONF_ENABLE_SPKR) { | ||
| 475 | s->socket.flags |= SS_SPKR_ENA; | 474 | s->socket.flags |= SS_SPKR_ENA; |
| 476 | status = CCSR_AUDIO_ENA; | 475 | status = CCSR_AUDIO_ENA; |
| 477 | if (!(p_dev->config_regs & PRESENT_STATUS)) | 476 | if (!(p_dev->config_regs & PRESENT_STATUS)) |
| 478 | dev_warn(&p_dev->dev, "speaker requested, but " | 477 | dev_warn(&p_dev->dev, "speaker requested, but " |
| 479 | "PRESENT_STATUS not set!\n"); | 478 | "PRESENT_STATUS not set!\n"); |
| 480 | } | 479 | } |
| 481 | if (req->Attributes & CONF_ENABLE_IRQ) | 480 | if (flags & CONF_ENABLE_IRQ) |
| 482 | s->socket.io_irq = s->pcmcia_irq; | 481 | s->socket.io_irq = s->pcmcia_irq; |
| 483 | else | 482 | else |
| 484 | s->socket.io_irq = 0; | 483 | s->socket.io_irq = 0; |
| 485 | if (req->Attributes & CONF_ENABLE_ESR) { | 484 | if (flags & CONF_ENABLE_ESR) { |
| 486 | p_dev->config_regs |= PRESENT_EXT_STATUS; | 485 | p_dev->config_regs |= PRESENT_EXT_STATUS; |
| 487 | ext_status = ESR_REQ_ATTN_ENA; | 486 | ext_status = ESR_REQ_ATTN_ENA; |
| 488 | } | 487 | } |
| @@ -510,8 +509,8 @@ int pcmcia_request_configuration(struct pcmcia_device *p_dev, | |||
| 510 | if (p_dev->config_regs & PRESENT_IOBASE_0) | 509 | if (p_dev->config_regs & PRESENT_IOBASE_0) |
| 511 | option |= COR_ADDR_DECODE; | 510 | option |= COR_ADDR_DECODE; |
| 512 | } | 511 | } |
| 513 | if ((req->Attributes & CONF_ENABLE_IRQ) && | 512 | if ((flags & CONF_ENABLE_IRQ) && |
| 514 | !(req->Attributes & CONF_ENABLE_PULSE_IRQ)) | 513 | !(flags & CONF_ENABLE_PULSE_IRQ)) |
| 515 | option |= COR_LEVEL_REQ; | 514 | option |= COR_LEVEL_REQ; |
| 516 | pcmcia_write_cis_mem(s, 1, (base + CISREG_COR)>>1, 1, &option); | 515 | pcmcia_write_cis_mem(s, 1, (base + CISREG_COR)>>1, 1, &option); |
| 517 | mdelay(40); | 516 | mdelay(40); |
| @@ -560,8 +559,8 @@ int pcmcia_request_configuration(struct pcmcia_device *p_dev, | |||
| 560 | p_dev->_locked = 1; | 559 | p_dev->_locked = 1; |
| 561 | mutex_unlock(&s->ops_mutex); | 560 | mutex_unlock(&s->ops_mutex); |
| 562 | return 0; | 561 | return 0; |
| 563 | } /* pcmcia_request_configuration */ | 562 | } /* pcmcia_enable_device */ |
| 564 | EXPORT_SYMBOL(pcmcia_request_configuration); | 563 | EXPORT_SYMBOL(pcmcia_enable_device); |
| 565 | 564 | ||
| 566 | 565 | ||
| 567 | /** | 566 | /** |
