diff options
author | Daniel Ritz <daniel.ritz@gmx.ch> | 2005-06-23 03:10:12 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@ppc970.osdl.org> | 2005-06-23 12:45:31 -0400 |
commit | fa912bcb06d5dc9525d8912a145db2bf4b7668c5 (patch) | |
tree | 5c62d9a1ef416c83d3e149ca94c4e646eb29daf2 /drivers/pcmcia/cs.c | |
parent | 7007cab53176dc906e67b4efa62f20ff1432805a (diff) |
[PATCH] yenta TI: turn off interrupts during card power-on #2
- make boot-up card recognition more reliable (ie. redo interrogation
always if there is no valid 'card inserted' state) (and yes, i saw it
happening on an o2micro controller that both CB_CBARD and CB_16BITCARD
bits were set at the same time)
- also redo interrogation before probing the ISA interrupts. it's safer
to do the probing with the socket in a clean state.
- make card insert detect more reliable. yenta_get_status() now returns
SS_PENDING as long as the card is not completley inserted and one of the
voltage bits is set. also !CB_CBARD doesn't mean CB_16BITCARD. there is
CB_NOTACARD as well, so make an explicit check for CB_16BITCARD.
- for TI bridges: disable IRQs during power-on. in all-serial and tied
interrupt mode the interrupts are always disabled for single-slot
controllers. for two-slot contollers the disabling is only done when the
other slot is empty. to force disabling there is a new module parameter
now: pwr_irqs_off=Y (which is a regression for working setups. that's
why it's an option, only use when required)
- modparm to disable ISA interrupt probing (isa_probe, defaults to on)
- remove unneeded code/cleanups (ie. merge yenta_events() into
yenta_interrupts())
Signed-off-by: Daniel Ritz <daniel.ritz@gmx.ch>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'drivers/pcmcia/cs.c')
-rw-r--r-- | drivers/pcmcia/cs.c | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/drivers/pcmcia/cs.c b/drivers/pcmcia/cs.c index 03fc885db1c5..d136b3c8fac9 100644 --- a/drivers/pcmcia/cs.c +++ b/drivers/pcmcia/cs.c | |||
@@ -508,6 +508,10 @@ static int socket_setup(struct pcmcia_socket *skt, int initial_delay) | |||
508 | cs_err(skt, "unsupported voltage key.\n"); | 508 | cs_err(skt, "unsupported voltage key.\n"); |
509 | return CS_BAD_TYPE; | 509 | return CS_BAD_TYPE; |
510 | } | 510 | } |
511 | |||
512 | if (skt->power_hook) | ||
513 | skt->power_hook(skt, HOOK_POWER_PRE); | ||
514 | |||
511 | skt->socket.flags = 0; | 515 | skt->socket.flags = 0; |
512 | skt->ops->set_socket(skt, &skt->socket); | 516 | skt->ops->set_socket(skt, &skt->socket); |
513 | 517 | ||
@@ -522,7 +526,12 @@ static int socket_setup(struct pcmcia_socket *skt, int initial_delay) | |||
522 | return CS_BAD_TYPE; | 526 | return CS_BAD_TYPE; |
523 | } | 527 | } |
524 | 528 | ||
525 | return socket_reset(skt); | 529 | status = socket_reset(skt); |
530 | |||
531 | if (skt->power_hook) | ||
532 | skt->power_hook(skt, HOOK_POWER_POST); | ||
533 | |||
534 | return status; | ||
526 | } | 535 | } |
527 | 536 | ||
528 | /* | 537 | /* |