Patch from Russell King Cardbus uses socket->cb_config to detect when the cardbus card has been initialised. Since cb_config will eventually die, we need a solution - introduce the SOCKET_CARDBUS_CONFIG flag, which is set once we have initialised the cardbus socket. 25-akpm/drivers/pcmcia/cs.c | 6 ++++-- 25-akpm/drivers/pcmcia/cs_internal.h | 1 + 2 files changed, 5 insertions(+), 2 deletions(-) diff -puN drivers/pcmcia/cs.c~pcmcia-3-add-SOCKET_CARDBUS_CONFIG drivers/pcmcia/cs.c --- 25/drivers/pcmcia/cs.c~pcmcia-3-add-SOCKET_CARDBUS_CONFIG Wed Mar 12 13:34:45 2003 +++ 25-akpm/drivers/pcmcia/cs.c Wed Mar 12 13:34:45 2003 @@ -621,8 +621,10 @@ static void unreset_socket(socket_info_t send_event(s, CS_EVENT_PM_RESUME, CS_EVENT_PRI_LOW); } else if (s->state & SOCKET_SETUP_PENDING) { #ifdef CONFIG_CARDBUS - if (s->state & SOCKET_CARDBUS) + if (s->state & SOCKET_CARDBUS) { cb_alloc(s); + s->state |= SOCKET_CARDBUS_CONFIG; + } #endif send_event(s, CS_EVENT_CARD_INSERTION, CS_EVENT_PRI_LOW); s->state &= ~SOCKET_SETUP_PENDING; @@ -1072,7 +1074,7 @@ int pcmcia_get_configuration_info(client config->Vcc = s->socket.Vcc; config->Vpp1 = config->Vpp2 = s->socket.Vpp; config->Option = s->cap.cb_dev->subordinate->number; - if (s->cb_config) { + if (s->state & SOCKET_CARDBUS_CONFIG) { config->Attributes = CONF_VALID_CLIENT; config->IntType = INT_CARDBUS; config->AssignedIRQ = s->irq.AssignedIRQ; diff -puN drivers/pcmcia/cs_internal.h~pcmcia-3-add-SOCKET_CARDBUS_CONFIG drivers/pcmcia/cs_internal.h --- 25/drivers/pcmcia/cs_internal.h~pcmcia-3-add-SOCKET_CARDBUS_CONFIG Wed Mar 12 13:34:45 2003 +++ 25-akpm/drivers/pcmcia/cs_internal.h Wed Mar 12 13:34:45 2003 @@ -176,6 +176,7 @@ typedef struct socket_info_t { #define SOCKET_IO_REQ(i) (0x1000<<(i)) #define SOCKET_REGION_INFO 0x4000 #define SOCKET_CARDBUS 0x8000 +#define SOCKET_CARDBUS_CONFIG 0x10000 #define CHECK_HANDLE(h) \ (((h) == NULL) || ((h)->client_magic != CLIENT_MAGIC)) _