[PATCH] yenta: do power-up only after socket is configured
authorDaniel Ritz <daniel.ritz-ml@swissonline.ch>
Mon, 6 Mar 2006 16:37:04 +0000 (17:37 +0100)
committerDominik Brodowski <linux@dominikbrodowski.net>
Fri, 30 Jun 2006 20:09:09 +0000 (22:09 +0200)
Power-up the card only after the socket is configured. power-down in
the old place. The point is not to power-up the card before the interrupt
routing is set up correctly.

Signed-off-by: Daniel Ritz <daniel.ritz@gmx.ch>
Signed-off-by: Dominik Brodowski <linux@dominikbrodowski.net>
drivers/pcmcia/yenta_socket.c

index 4145eb83b9b6d708d57a07da1a0633829d3773f8..006749dc8d75236ecebe22c793d3ad0f41c12bb0 100644 (file)
@@ -287,7 +287,10 @@ static int yenta_set_socket(struct pcmcia_socket *sock, socket_state_t *state)
        struct yenta_socket *socket = container_of(sock, struct yenta_socket, socket);
        u16 bridge;
 
-       yenta_set_power(socket, state);
+       /* if powering down: do it immediately */
+       if (state->Vcc == 0)
+               yenta_set_power(socket, state);
+
        socket->io_irq = state->io_irq;
        bridge = config_readw(socket, CB_BRIDGE_CONTROL) & ~(CB_BRIDGE_CRST | CB_BRIDGE_INTR);
        if (cb_readl(socket, CB_SOCKET_STATE) & CB_CBCARD) {
@@ -339,6 +342,10 @@ static int yenta_set_socket(struct pcmcia_socket *sock, socket_state_t *state)
        /* Socket event mask: get card insert/remove events.. */
        cb_writel(socket, CB_SOCKET_EVENT, -1);
        cb_writel(socket, CB_SOCKET_MASK, CB_CDMASK);
+
+       /* if powering up: do it as the last step when the socket is configured */
+       if (state->Vcc != 0)
+               yenta_set_power(socket, state);
        return 0;
 }