[PATCH] pcmcia: remove export of pcmcia_release_configuration
Handle the _modifying_ operation sm91c92_cs requires in pcmcia_modify_configuration, so that the only remaining users of pcmcia_release_configuration() are within the pcmcia core module. Signed-off-by: Dominik Brodowski <linux@dominikbrodowski.net>
This commit is contained in:
parent
8661bb5b4a
commit
4bbed52314
|
@ -353,8 +353,7 @@ static void pcmciamtd_release(dev_link_t *link)
|
|||
}
|
||||
pcmcia_release_window(link->win);
|
||||
}
|
||||
pcmcia_release_configuration(link->handle);
|
||||
link->state &= ~DEV_CONFIG;
|
||||
pcmcia_disable_device(link->handle);
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -874,11 +874,8 @@ static int smc91c92_suspend(struct pcmcia_device *p_dev)
|
|||
dev_link_t *link = dev_to_instance(p_dev);
|
||||
struct net_device *dev = link->priv;
|
||||
|
||||
if (link->state & DEV_CONFIG) {
|
||||
if (link->open)
|
||||
netif_device_detach(dev);
|
||||
pcmcia_release_configuration(link->handle);
|
||||
}
|
||||
if ((link->state & DEV_CONFIG) && (link->open))
|
||||
netif_device_detach(dev);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -894,7 +891,6 @@ static int smc91c92_resume(struct pcmcia_device *p_dev)
|
|||
if ((smc->manfid == MANFID_MEGAHERTZ) &&
|
||||
(smc->cardid == PRODID_MEGAHERTZ_EM3288))
|
||||
mhz_3288_power(link);
|
||||
pcmcia_request_configuration(link->handle, &link->conf);
|
||||
if (smc->manfid == MANFID_MOTOROLA)
|
||||
mot_config(link);
|
||||
if ((smc->manfid == MANFID_OSITECH) &&
|
||||
|
@ -963,18 +959,15 @@ static int check_sig(dev_link_t *link)
|
|||
}
|
||||
|
||||
if (width) {
|
||||
printk(KERN_INFO "smc91c92_cs: using 8-bit IO window.\n");
|
||||
/* call pcmcia_release_configuration() in _suspend */
|
||||
smc91c92_suspend(link->handle);
|
||||
modconf_t mod = {
|
||||
.Attributes = CONF_IO_CHANGE_WIDTH,
|
||||
};
|
||||
printk(KERN_INFO "smc91c92_cs: using 8-bit IO window.\n");
|
||||
|
||||
link->io.Attributes1 = IO_DATA_PATH_WIDTH_8;
|
||||
link->handle->socket->io[0].res->flags &= ~IO_DATA_PATH_WIDTH;
|
||||
link->handle->socket->io[0].res->flags |= IO_DATA_PATH_WIDTH_8;
|
||||
|
||||
/* call pcmcia_request_configuration() in _resume, it handles the
|
||||
* flag update */
|
||||
smc91c92_resume(link->handle);
|
||||
return check_sig(link);
|
||||
smc91c92_suspend(link->handle);
|
||||
pcmcia_modify_configuration(link->handle, &mod);
|
||||
smc91c92_resume(link->handle);
|
||||
return check_sig(link);
|
||||
}
|
||||
return -ENODEV;
|
||||
}
|
||||
|
|
|
@ -8,6 +8,8 @@ extern void pcmcia_put_dev(struct pcmcia_device *p_dev);
|
|||
|
||||
struct pcmcia_device * pcmcia_device_add(struct pcmcia_socket *s, unsigned int function);
|
||||
|
||||
extern int pcmcia_release_configuration(struct pcmcia_device *p_dev);
|
||||
|
||||
#ifdef CONFIG_PCMCIA_IOCTL
|
||||
extern void __init pcmcia_setup_ioctl(void);
|
||||
extern void __exit pcmcia_cleanup_ioctl(void);
|
||||
|
|
|
@ -442,6 +442,28 @@ int pcmcia_modify_configuration(struct pcmcia_device *p_dev,
|
|||
(mod->Attributes & CONF_VPP2_CHANGE_VALID))
|
||||
return CS_BAD_VPP;
|
||||
|
||||
if (mod->Attributes & CONF_IO_CHANGE_WIDTH) {
|
||||
pccard_io_map io_off = { 0, 0, 0, 0, 1 };
|
||||
pccard_io_map io_on;
|
||||
int i;
|
||||
|
||||
io_on.speed = io_speed;
|
||||
for (i = 0; i < MAX_IO_WIN; i++) {
|
||||
if (!s->io[i].res)
|
||||
continue;
|
||||
io_off.map = i;
|
||||
io_on.map = i;
|
||||
|
||||
io_on.flags = MAP_ACTIVE | IO_DATA_PATH_WIDTH_8;
|
||||
io_on.start = s->io[i].res->start;
|
||||
io_on.stop = s->io[i].res->end;
|
||||
|
||||
s->ops->set_io_map(s, &io_off);
|
||||
mdelay(40);
|
||||
s->ops->set_io_map(s, &io_on);
|
||||
}
|
||||
}
|
||||
|
||||
return CS_SUCCESS;
|
||||
} /* modify_configuration */
|
||||
EXPORT_SYMBOL(pcmcia_modify_configuration);
|
||||
|
@ -479,7 +501,6 @@ int pcmcia_release_configuration(struct pcmcia_device *p_dev)
|
|||
|
||||
return CS_SUCCESS;
|
||||
} /* pcmcia_release_configuration */
|
||||
EXPORT_SYMBOL(pcmcia_release_configuration);
|
||||
|
||||
|
||||
/** pcmcia_release_io
|
||||
|
|
|
@ -116,10 +116,11 @@ typedef struct modconf_t {
|
|||
} modconf_t;
|
||||
|
||||
/* Attributes for ModifyConfiguration */
|
||||
#define CONF_IRQ_CHANGE_VALID 0x100
|
||||
#define CONF_VCC_CHANGE_VALID 0x200
|
||||
#define CONF_VPP1_CHANGE_VALID 0x400
|
||||
#define CONF_VPP2_CHANGE_VALID 0x800
|
||||
#define CONF_IRQ_CHANGE_VALID 0x0100
|
||||
#define CONF_VCC_CHANGE_VALID 0x0200
|
||||
#define CONF_VPP1_CHANGE_VALID 0x0400
|
||||
#define CONF_VPP2_CHANGE_VALID 0x0800
|
||||
#define CONF_IO_CHANGE_WIDTH 0x1000
|
||||
|
||||
/* For RequestConfiguration */
|
||||
typedef struct config_req_t {
|
||||
|
@ -378,7 +379,6 @@ int pcmcia_get_status(struct pcmcia_device *p_dev, cs_status_t *status);
|
|||
int pcmcia_get_mem_page(window_handle_t win, memreq_t *req);
|
||||
int pcmcia_map_mem_page(window_handle_t win, memreq_t *req);
|
||||
int pcmcia_modify_configuration(struct pcmcia_device *p_dev, modconf_t *mod);
|
||||
int pcmcia_release_configuration(struct pcmcia_device *p_dev);
|
||||
int pcmcia_release_window(window_handle_t win);
|
||||
int pcmcia_request_configuration(struct pcmcia_device *p_dev, config_req_t *req);
|
||||
int pcmcia_request_io(struct pcmcia_device *p_dev, io_req_t *req);
|
||||
|
|
Loading…
Reference in New Issue