summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRussell King <rmk@flint.arm.linux.org.uk>2003-07-14 02:47:01 +0100
committerRussell King <rmk@flint.arm.linux.org.uk>2003-07-14 02:47:01 +0100
commit2e2cede4451f3a767c6c0125a9d2322686f87f7f (patch)
tree53b2995db7a789c47fbbd7e686d98ee4096e58d9
parent3139853cca4fd784d5c54a6167abba5ba6ed9e69 (diff)
parent4e9470d653d7d4b3d482fadaecfd2909a1df2043 (diff)
Merge Linus' tree into PCMCIA tree.
-rw-r--r--drivers/pcmcia/bulkmem.c6
-rw-r--r--drivers/pcmcia/cistpl.c4
-rw-r--r--drivers/pcmcia/cs.c98
-rw-r--r--drivers/pcmcia/cs_internal.h2
-rw-r--r--drivers/pcmcia/i82092.c2
-rw-r--r--drivers/pcmcia/i82365.c2
-rw-r--r--drivers/pcmcia/ricoh.h2
-rw-r--r--drivers/pcmcia/rsrc_mgr.c4
-rw-r--r--drivers/pcmcia/sa11xx_core.c2
-rw-r--r--drivers/pcmcia/tcic.c2
-rw-r--r--drivers/pcmcia/ti113x.h29
-rw-r--r--drivers/pcmcia/yenta_socket.c2
-rw-r--r--include/pcmcia/ss.h4
13 files changed, 67 insertions, 92 deletions
diff --git a/drivers/pcmcia/bulkmem.c b/drivers/pcmcia/bulkmem.c
index 2433140a2dbf..4759c521694b 100644
--- a/drivers/pcmcia/bulkmem.c
+++ b/drivers/pcmcia/bulkmem.c
@@ -258,7 +258,7 @@ static int mtd_modify_window(window_handle_t win, mtd_mod_win_t *req)
win->ctl.flags |= MAP_ATTRIB;
win->ctl.speed = req->AccessSpeed;
win->ctl.card_start = req->CardOffset;
- win->sock->ss_entry->set_mem_map(win->sock, &win->ctl);
+ win->sock->ops->set_mem_map(win->sock, &win->ctl);
return CS_SUCCESS;
}
@@ -271,7 +271,7 @@ static int mtd_set_vpp(client_handle_t handle, mtd_vpp_req_t *req)
return CS_BAD_VPP;
s = SOCKET(handle);
s->socket.Vpp = req->Vpp1;
- if (s->ss_entry->set_socket(s, &s->socket))
+ if (s->ops->set_socket(s, &s->socket))
return CS_BAD_VPP;
return CS_SUCCESS;
}
@@ -286,7 +286,7 @@ static int mtd_rdy_mask(client_handle_t handle, mtd_rdy_req_t *req)
s->socket.csc_mask |= SS_READY;
else
s->socket.csc_mask &= ~SS_READY;
- if (s->ss_entry->set_socket(s, &s->socket))
+ if (s->ops->set_socket(s, &s->socket))
return CS_GENERAL_FAILURE;
return CS_SUCCESS;
}
diff --git a/drivers/pcmcia/cistpl.c b/drivers/pcmcia/cistpl.c
index 3dfaa5bb5882..c505a28fcf12 100644
--- a/drivers/pcmcia/cistpl.c
+++ b/drivers/pcmcia/cistpl.c
@@ -86,7 +86,7 @@ void release_cis_mem(struct pcmcia_socket *s)
{
if (s->cis_mem.sys_start != 0) {
s->cis_mem.flags &= ~MAP_ACTIVE;
- s->ss_entry->set_mem_map(s, &s->cis_mem);
+ s->ops->set_mem_map(s, &s->cis_mem);
if (!(s->features & SS_CAP_STATIC_MAP))
release_mem_region(s->cis_mem.sys_start, s->map_size);
iounmap(s->cis_virt);
@@ -118,7 +118,7 @@ set_cis_map(struct pcmcia_socket *s, unsigned int card_offset, unsigned int flag
}
mem->card_start = card_offset;
mem->flags = flags;
- s->ss_entry->set_mem_map(s, mem);
+ s->ops->set_mem_map(s, mem);
if (s->features & SS_CAP_STATIC_MAP) {
if (s->cis_virt)
iounmap(s->cis_virt);
diff --git a/drivers/pcmcia/cs.c b/drivers/pcmcia/cs.c
index 91078d5fff0c..3dd5702c48b7 100644
--- a/drivers/pcmcia/cs.c
+++ b/drivers/pcmcia/cs.c
@@ -225,43 +225,6 @@ static const lookup_t service_table[] = {
};
#define SERVICE_COUNT (sizeof(service_table)/sizeof(lookup_t))
-/*======================================================================
-
- These functions are just shorthand for the actual low-level drivers
-
-======================================================================*/
-
-static int get_socket_status(struct pcmcia_socket *s, int *val)
-{
- return s->ss_entry->get_status(s, val);
-}
-
-static int set_socket(struct pcmcia_socket *s, socket_state_t *state)
-{
- return s->ss_entry->set_socket(s, state);
-}
-
-static int set_io_map(struct pcmcia_socket *s, struct pccard_io_map *io)
-{
- return s->ss_entry->set_io_map(s, io);
-}
-
-static int set_mem_map(struct pcmcia_socket *s, struct pccard_mem_map *mem)
-{
- return s->ss_entry->set_mem_map(s, mem);
-}
-
-static int suspend_socket(struct pcmcia_socket *s)
-{
- s->socket = dead_socket;
- return s->ss_entry->suspend(s);
-}
-
-static int init_socket(struct pcmcia_socket *s)
-{
- s->socket = dead_socket;
- return s->ss_entry->init(s);
-}
/*====================================================================
@@ -338,12 +301,14 @@ static int pcmcia_add_socket(struct class_device *class_dev)
socket->erase_busy.next = socket->erase_busy.prev = &socket->erase_busy;
INIT_LIST_HEAD(&socket->cis_cache);
spin_lock_init(&socket->lock);
+
init_completion(&socket->thread_done);
init_waitqueue_head(&socket->thread_wait);
init_MUTEX(&socket->skt_sem);
spin_lock_init(&socket->thread_lock);
- init_socket(socket);
+ socket->socket = dead_socket;
+ socket->ops->init(socket);
ret = kernel_thread(pccardd, socket, CLONE_KERNEL);
if (ret < 0)
@@ -373,7 +338,7 @@ static void pcmcia_remove_socket(struct class_device *class_dev)
socket->clients = socket->clients->next;
kfree(client);
}
- socket->ss_entry = NULL;
+ socket->ops = NULL;
}
static void pcmcia_release_socket(struct class_device *class_dev)
@@ -388,10 +353,10 @@ static void pcmcia_release_socket(struct class_device *class_dev)
*/
int pcmcia_register_socket(struct pcmcia_socket *socket)
{
- if (!socket || !socket->ss_entry || !socket->dev.dev)
+ if (!socket || !socket->ops || !socket->dev.dev)
return -EINVAL;
- DEBUG(0, "cs: pcmcia_register_socket(0x%p)\n", socket->ss_entry);
+ DEBUG(0, "cs: pcmcia_register_socket(0x%p)\n", socket->ops);
/* try to obtain a socket number [yes, it gets ugly if we
* register more than 2^sizeof(unsigned int) pcmcia
@@ -443,7 +408,7 @@ void pcmcia_unregister_socket(struct pcmcia_socket *socket)
if (!socket)
return;
- DEBUG(0, "cs: pcmcia_unregister_socket(0x%p)\n", socket->ss_entry);
+ DEBUG(0, "cs: pcmcia_unregister_socket(0x%p)\n", socket->ops);
init_completion(&socket->socket_released);
@@ -510,7 +475,8 @@ static void shutdown_socket(struct pcmcia_socket *s)
/* Blank out the socket state */
s->state &= SOCKET_PRESENT|SOCKET_SETUP_PENDING;
- init_socket(s);
+ s->socket = dead_socket;
+ s->ops->init(s);
s->irq.AssignedIRQ = s->irq.Config = 0;
s->lock_count = 0;
destroy_cis_cache(s);
@@ -525,7 +491,7 @@ static void shutdown_socket(struct pcmcia_socket *s)
s->socket.Vpp = 0;
s->socket.Vcc = 0;
s->socket.io_irq = 0;
- set_socket(s, &s->socket);
+ s->ops->set_socket(s, &s->socket);
/* */
#ifdef CONFIG_CARDBUS
cb_free(s);
@@ -619,16 +585,16 @@ static int socket_reset(struct pcmcia_socket *skt)
int status, i;
skt->socket.flags |= SS_OUTPUT_ENA | SS_RESET;
- set_socket(skt, &skt->socket);
+ skt->ops->set_socket(skt, &skt->socket);
udelay((long)reset_time);
skt->socket.flags &= ~SS_RESET;
- set_socket(skt, &skt->socket);
+ skt->ops->set_socket(skt, &skt->socket);
set_current_state(TASK_UNINTERRUPTIBLE);
schedule_timeout(cs_to_timeout(unreset_delay));
for (i = 0; i < unreset_limit; i++) {
- get_socket_status(skt, &status);
+ skt->ops->get_status(skt, &status);
if (!(status & SS_DETECT))
return CS_NO_CARD;
@@ -648,7 +614,7 @@ static int socket_setup(struct pcmcia_socket *skt, int initial_delay)
{
int status, i;
- get_socket_status(skt, &status);
+ skt->ops->get_status(skt, &status);
if (!(status & SS_DETECT))
return CS_NO_CARD;
@@ -656,7 +622,7 @@ static int socket_setup(struct pcmcia_socket *skt, int initial_delay)
schedule_timeout(cs_to_timeout(initial_delay));
for (i = 0; i < 100; i++) {
- get_socket_status(skt, &status);
+ skt->ops->get_status(skt, &status);
if (!(status & SS_DETECT))
return CS_NO_CARD;
@@ -693,7 +659,7 @@ static int socket_setup(struct pcmcia_socket *skt, int initial_delay)
}
skt->state |= SOCKET_PRESENT;
skt->socket.flags = SS_DEBOUNCED;
- set_socket(skt, &skt->socket);
+ skt->ops->set_socket(skt, &skt->socket);
/*
* Wait "vcc_settle" for the supply to stabilise.
@@ -739,7 +705,8 @@ static int socket_suspend(struct pcmcia_socket *skt)
return CS_IN_USE;
send_event(skt, CS_EVENT_PM_SUSPEND, CS_EVENT_PRI_LOW);
- suspend_socket(skt);
+ skt->socket = dead_socket;
+ skt->ops->suspend(skt);
skt->state |= SOCKET_SUSPEND;
return CS_SUCCESS;
@@ -757,7 +724,8 @@ static int socket_resume(struct pcmcia_socket *skt)
if (!(skt->state & SOCKET_SUSPEND))
return CS_IN_USE;
- init_socket(skt);
+ skt->socket = dead_socket;
+ skt->ops->init(skt);
ret = socket_setup(skt, resume_delay);
if (ret == CS_SUCCESS) {
@@ -811,7 +779,7 @@ static void socket_detect_change(struct pcmcia_socket *skt)
schedule_timeout(cs_to_timeout(2));
}
- get_socket_status(skt, &status);
+ skt->ops->get_status(skt, &status);
if ((skt->state & SOCKET_PRESENT) &&
!(status & SS_DETECT))
socket_remove(skt);
@@ -1368,7 +1336,7 @@ int pcmcia_get_status(client_handle_t handle, cs_status_t *status)
if (CHECK_HANDLE(handle))
return CS_BAD_HANDLE;
s = SOCKET(handle);
- get_socket_status(s, &val);
+ s->ops->get_status(s, &val);
status->CardState = status->SocketState = 0;
status->CardState |= (val & SS_DETECT) ? CS_EVENT_CARD_DETECT : 0;
status->CardState |= (val & SS_CARDBUS) ? CS_EVENT_CB_DETECT : 0;
@@ -1447,7 +1415,7 @@ int pcmcia_map_mem_page(window_handle_t win, memreq_t *req)
return CS_BAD_PAGE;
s = win->sock;
win->ctl.card_start = req->CardOffset;
- if (set_mem_map(s, &win->ctl) != 0)
+ if (s->ops->set_mem_map(s, &win->ctl) != 0)
return CS_BAD_OFFSET;
return CS_SUCCESS;
} /* map_mem_page */
@@ -1480,7 +1448,7 @@ int pcmcia_modify_configuration(client_handle_t handle,
c->Attributes &= ~CONF_ENABLE_IRQ;
s->socket.io_irq = 0;
}
- set_socket(s, &s->socket);
+ s->ops->set_socket(s, &s->socket);
}
if (mod->Attributes & CONF_VCC_CHANGE_VALID)
@@ -1492,7 +1460,7 @@ int pcmcia_modify_configuration(client_handle_t handle,
if (mod->Vpp1 != mod->Vpp2)
return CS_BAD_VPP;
c->Vpp1 = c->Vpp2 = s->socket.Vpp = mod->Vpp1;
- if (set_socket(s, &s->socket))
+ if (s->ops->set_socket(s, &s->socket))
return CS_BAD_VPP;
} else if ((mod->Attributes & CONF_VPP1_CHANGE_VALID) ||
(mod->Attributes & CONF_VPP2_CHANGE_VALID))
@@ -1522,7 +1490,7 @@ int pcmcia_modify_window(window_handle_t win, modwin_t *req)
if (req->Attributes & WIN_USE_WAIT)
win->ctl.flags |= MAP_USE_WAIT;
win->ctl.speed = req->AccessSpeed;
- set_mem_map(win->sock, &win->ctl);
+ win->sock->ops->set_mem_map(win->sock, &win->ctl);
return CS_SUCCESS;
} /* modify_window */
@@ -1622,7 +1590,7 @@ int pcmcia_release_configuration(client_handle_t handle)
s->socket.flags = SS_OUTPUT_ENA; /* Is this correct? */
s->socket.Vpp = 0;
s->socket.io_irq = 0;
- set_socket(s, &s->socket);
+ s->ops->set_socket(s, &s->socket);
}
if (c->state & CONFIG_IO_REQ)
for (i = 0; i < MAX_IO_WIN; i++) {
@@ -1632,7 +1600,7 @@ int pcmcia_release_configuration(client_handle_t handle)
if (s->io[i].Config != 0)
continue;
io.map = i;
- set_io_map(s, &io);
+ s->ops->set_io_map(s, &io);
}
c->state &= ~CONFIG_LOCKED;
}
@@ -1733,7 +1701,7 @@ int pcmcia_release_window(window_handle_t win)
/* Shut down memory window */
win->ctl.flags &= ~MAP_ACTIVE;
- set_mem_map(s, &win->ctl);
+ s->ops->set_mem_map(s, &win->ctl);
s->state &= ~SOCKET_WIN_REQ(win->index);
/* Release system memory */
@@ -1780,7 +1748,7 @@ int pcmcia_request_configuration(client_handle_t handle,
if (req->Vpp1 != req->Vpp2)
return CS_BAD_VPP;
s->socket.Vpp = req->Vpp1;
- if (set_socket(s, &s->socket))
+ if (s->ops->set_socket(s, &s->socket))
return CS_BAD_VPP;
c->Vcc = req->Vcc; c->Vpp1 = c->Vpp2 = req->Vpp1;
@@ -1798,7 +1766,7 @@ int pcmcia_request_configuration(client_handle_t handle,
s->socket.io_irq = s->irq.AssignedIRQ;
else
s->socket.io_irq = 0;
- set_socket(s, &s->socket);
+ s->ops->set_socket(s, &s->socket);
s->lock_count++;
/* Set up CIS configuration registers */
@@ -1863,7 +1831,7 @@ int pcmcia_request_configuration(client_handle_t handle,
}
iomap.start = s->io[i].BasePort;
iomap.stop = iomap.start + s->io[i].NumPorts - 1;
- set_io_map(s, &iomap);
+ s->ops->set_io_map(s, &iomap);
s->io[i].Config++;
}
}
@@ -2084,7 +2052,7 @@ int pcmcia_request_window(client_handle_t *handle, win_req_t *req, window_handle
win->ctl.sys_start = win->base;
win->ctl.sys_stop = win->base + win->size-1;
win->ctl.card_start = 0;
- if (set_mem_map(s, &win->ctl) != 0)
+ if (s->ops->set_mem_map(s, &win->ctl) != 0)
return CS_BAD_ARGS;
s->state |= SOCKET_WIN_REQ(w);
diff --git a/drivers/pcmcia/cs_internal.h b/drivers/pcmcia/cs_internal.h
index 55049c5d1825..ae857307a979 100644
--- a/drivers/pcmcia/cs_internal.h
+++ b/drivers/pcmcia/cs_internal.h
@@ -113,7 +113,7 @@ struct cis_cache_entry {
(((h) == NULL) || ((h)->client_magic != CLIENT_MAGIC))
#define CHECK_SOCKET(s) \
- (((s) >= sockets) || (socket_table[s]->ss_entry == NULL))
+ (((s) >= sockets) || (socket_table[s]->ops == NULL))
#define SOCKET(h) (h->Socket)
#define CONFIG(h) (&SOCKET(h)->config[(h)->Function])
diff --git a/drivers/pcmcia/i82092.c b/drivers/pcmcia/i82092.c
index 3da463cb8e59..1a07132f86cc 100644
--- a/drivers/pcmcia/i82092.c
+++ b/drivers/pcmcia/i82092.c
@@ -161,7 +161,7 @@ static int __init i82092aa_pci_probe(struct pci_dev *dev, const struct pci_devic
for (i = 0; i<socket_count; i++) {
sockets[i].socket.dev.dev = &dev->dev;
- sockets[i].socket.ss_entry = &i82092aa_operations;
+ sockets[i].socket.ops = &i82092aa_operations;
ret = pcmcia_register_socket(&sockets[i].socket);
if (ret) {
goto err_out_free_sockets;
diff --git a/drivers/pcmcia/i82365.c b/drivers/pcmcia/i82365.c
index 7814e207f1af..fa6ec7749998 100644
--- a/drivers/pcmcia/i82365.c
+++ b/drivers/pcmcia/i82365.c
@@ -1403,7 +1403,7 @@ static int __init init_i82365(void)
/* register sockets with the pcmcia core */
for (i = 0; i < sockets; i++) {
socket[i].socket.dev.dev = &i82365_device.dev;
- socket[i].socket.ss_entry = &pcic_operations;
+ socket[i].socket.ops = &pcic_operations;
socket[i].socket.owner = THIS_MODULE;
socket[i].number = i;
ret = pcmcia_register_socket(&socket[i].socket);
diff --git a/drivers/pcmcia/ricoh.h b/drivers/pcmcia/ricoh.h
index a36f2f339d42..dcfcbd4328b3 100644
--- a/drivers/pcmcia/ricoh.h
+++ b/drivers/pcmcia/ricoh.h
@@ -161,7 +161,7 @@ static int ricoh_override(struct yenta_socket *socket)
rl_config(socket) |= RL5C4XX_CONFIG_PREFETCH;
}
- socket->socket.ss_entry->init = ricoh_init;
+ socket->socket.ops->init = ricoh_init;
return 0;
}
diff --git a/drivers/pcmcia/rsrc_mgr.c b/drivers/pcmcia/rsrc_mgr.c
index 9dd5e03e92ff..979f1e84217d 100644
--- a/drivers/pcmcia/rsrc_mgr.c
+++ b/drivers/pcmcia/rsrc_mgr.c
@@ -360,7 +360,7 @@ static int checksum(struct pcmcia_socket *s, struct resource *res)
map.sys_start = res->start;
map.sys_stop = res->end;
map.card_start = 0;
- s->ss_entry->set_mem_map(s, &map);
+ s->ops->set_mem_map(s, &map);
/* Don't bother checking every word... */
for (i = 0; i < s->map_size; i += 44) {
@@ -370,7 +370,7 @@ static int checksum(struct pcmcia_socket *s, struct resource *res)
}
map.flags = 0;
- s->ss_entry->set_mem_map(s, &map);
+ s->ops->set_mem_map(s, &map);
iounmap(virt);
}
diff --git a/drivers/pcmcia/sa11xx_core.c b/drivers/pcmcia/sa11xx_core.c
index c4a1239092c2..253938655dd2 100644
--- a/drivers/pcmcia/sa11xx_core.c
+++ b/drivers/pcmcia/sa11xx_core.c
@@ -725,7 +725,7 @@ int sa11xx_drv_pcmcia_probe(struct device *dev, struct pcmcia_low_level *ops, in
struct sa1100_pcmcia_socket *skt = PCMCIA_SOCKET(i);
memset(skt, 0, sizeof(*skt));
- skt->socket.ss_entry = &sa11xx_pcmcia_operations;
+ skt->socket.ops = &sa11xx_pcmcia_operations;
skt->socket.owner = ops->owner;
skt->socket.dev.dev = dev;
diff --git a/drivers/pcmcia/tcic.c b/drivers/pcmcia/tcic.c
index 408d6a501cb4..762da4e3715b 100644
--- a/drivers/pcmcia/tcic.c
+++ b/drivers/pcmcia/tcic.c
@@ -519,7 +519,7 @@ static int __init init_tcic(void)
platform_device_register(&tcic_device);
for (i = 0; i < sockets; i++) {
- socket_table[i].socket.ss_entry = &tcic_operations;
+ socket_table[i].socket.ops = &tcic_operations;
socket_table[i].socket.dev.dev = &tcic_device.dev;
ret = pcmcia_register_socket(&socket_table[i].socket);
if (ret && i)
diff --git a/drivers/pcmcia/ti113x.h b/drivers/pcmcia/ti113x.h
index e92158516f13..2cdb46d4eb3c 100644
--- a/drivers/pcmcia/ti113x.h
+++ b/drivers/pcmcia/ti113x.h
@@ -182,25 +182,30 @@ static int ti_override(struct yenta_socket *socket)
/*
* If ISA interrupts don't work, then fall back to routing card
* interrupts to the PCI interrupt of the socket.
+ *
+ * Tweaking this when we are using serial PCI IRQs causes hangs
+ * --rmk
*/
if (!socket->socket.irq_mask) {
- int irqmux, devctl;
-
- printk (KERN_INFO "ti113x: Routing card interrupts to PCI\n");
+ u8 irqmux, devctl;
devctl = config_readb(socket, TI113X_DEVICE_CONTROL);
- devctl &= ~TI113X_DCR_IMODE_MASK;
+ if (devctl & TI113X_DCR_IMODE_MASK != TI12XX_DCR_IMODE_ALL_SERIAL) {
+ printk (KERN_INFO "ti113x: Routing card interrupts to PCI\n");
+
+ devctl &= ~TI113X_DCR_IMODE_MASK;
- irqmux = config_readl(socket, TI122X_IRQMUX);
- irqmux = (irqmux & ~0x0f) | 0x02; /* route INTA */
- irqmux = (irqmux & ~0xf0) | 0x20; /* route INTB */
+ irqmux = config_readl(socket, TI122X_IRQMUX);
+ irqmux = (irqmux & ~0x0f) | 0x02; /* route INTA */
+ irqmux = (irqmux & ~0xf0) | 0x20; /* route INTB */
- config_writel(socket, TI122X_IRQMUX, irqmux);
- config_writeb(socket, TI113X_DEVICE_CONTROL, devctl);
+ config_writel(socket, TI122X_IRQMUX, irqmux);
+ config_writeb(socket, TI113X_DEVICE_CONTROL, devctl);
+ }
}
#endif
- socket->socket.ss_entry->init = ti_init;
+ socket->socket.ops->init = ti_init;
return 0;
}
@@ -233,7 +238,7 @@ static int ti113x_override(struct yenta_socket *socket)
if (socket->cb_irq)
ti_cardctl(socket) |= TI113X_CCR_PCI_IRQ_ENA | TI113X_CCR_PCI_CSC | TI113X_CCR_PCI_IREQ;
ti_override(socket);
- socket->socket.ss_entry->init = ti113x_init;
+ socket->socket.ops->init = ti113x_init;
return 0;
}
@@ -262,7 +267,7 @@ static int ti1250_override(struct yenta_socket *socket)
if (socket->cb_irq)
ti_diag(socket) |= TI1250_DIAG_PCI_CSC | TI1250_DIAG_PCI_IREQ;
ti113x_override(socket);
- socket->socket.ss_entry->init = ti1250_init;
+ socket->socket.ops->init = ti1250_init;
return 0;
}
diff --git a/drivers/pcmcia/yenta_socket.c b/drivers/pcmcia/yenta_socket.c
index 2b34cc49165b..707cb7297fc5 100644
--- a/drivers/pcmcia/yenta_socket.c
+++ b/drivers/pcmcia/yenta_socket.c
@@ -828,7 +828,7 @@ static int __devinit yenta_probe (struct pci_dev *dev, const struct pci_device_i
memset(socket, 0, sizeof(*socket));
/* prepare pcmcia_socket */
- socket->socket.ss_entry = &yenta_socket_operations;
+ socket->socket.ops = &yenta_socket_operations;
socket->socket.dev.dev = &dev->dev;
socket->socket.driver_data = socket;
socket->socket.owner = THIS_MODULE;
diff --git a/include/pcmcia/ss.h b/include/pcmcia/ss.h
index c0891855a0b1..24cb380be518 100644
--- a/include/pcmcia/ss.h
+++ b/include/pcmcia/ss.h
@@ -170,7 +170,6 @@ struct region_t;
struct pcmcia_socket {
struct module *owner;
spinlock_t lock;
- struct pccard_operations * ss_entry;
socket_state_t socket;
u_int state;
u_short functions;
@@ -207,6 +206,9 @@ struct pcmcia_socket {
u_char pci_irq;
struct pci_dev * cb_dev;
+ /* socket operations */
+ struct pccard_operations * ops;
+
/* state thread */
struct semaphore skt_sem; /* protects socket h/w state */