Commit a875f3b9 authored by Russell King's avatar Russell King

[ARM] SA11x0 PCMCIA 4

Convert all SA11x0 drivers to register with the Linux driver model,
so they work with the pcmcia layer in 2.5.63.
parent 0960a1f6
......@@ -192,61 +192,55 @@ struct sa1100_pcmcia_socket {
/*
* Declaration for all machine specific init/exit functions.
*/
extern int pcmcia_adsbitsy_init(void);
extern void pcmcia_adsbitsy_exit(void);
extern int pcmcia_adsbitsy_init(struct device *);
extern void pcmcia_adsbitsy_exit(struct device *);
extern int pcmcia_assabet_init(void);
extern void pcmcia_assabet_exit(void);
extern int pcmcia_assabet_init(struct device *);
extern void pcmcia_assabet_exit(struct device *);
extern int pcmcia_badge4_init(void);
extern void pcmcia_badge4_exit(void);
extern int pcmcia_badge4_init(struct device *);
extern void pcmcia_badge4_exit(struct device *);
extern int pcmcia_cerf_init(void);
extern void pcmcia_cerf_exit(void);
extern int pcmcia_cerf_init(struct device *);
extern void pcmcia_cerf_exit(struct device *);
extern int pcmcia_flexanet_init(void);
extern void pcmcia_flexanet_exit(void);
extern int pcmcia_flexanet_init(struct device *);
extern void pcmcia_flexanet_exit(struct device *);
extern int pcmcia_freebird_init(void);
extern void pcmcia_freebird_exit(void);
extern int pcmcia_freebird_init(struct device *);
extern void pcmcia_freebird_exit(struct device *);
extern int pcmcia_gcplus_init(void);
extern void pcmcia_gcplus_exit(void);
extern int pcmcia_gcplus_init(struct device *);
extern void pcmcia_gcplus_exit(struct device *);
extern int pcmcia_graphicsmaster_init(void);
extern void pcmcia_graphicsmaster_exit(void);
extern int pcmcia_graphicsmaster_init(struct device *);
extern void pcmcia_graphicsmaster_exit(struct device *);
extern int pcmcia_jornada720_init(void);
extern void pcmcia_jornada720_exit(void);
extern int pcmcia_pangolin_init(struct device *);
extern void pcmcia_pangolin_exit(struct device *);
extern int pcmcia_neponset_init(void);
extern void pcmcia_neponset_exit(void);
extern int pcmcia_pfs168_init(struct device *);
extern void pcmcia_pfs168_exit(struct device *);
extern int pcmcia_pangolin_init(void);
extern void pcmcia_pangolin_exit(void);
extern int pcmcia_shannon_init(struct device *);
extern void pcmcia_shannon_exit(struct device *);
extern int pcmcia_pfs168_init(void);
extern void pcmcia_pfs168_exit(void);
extern int pcmcia_simpad_init(struct device *);
extern void pcmcia_simpad_exit(struct device *);
extern int pcmcia_shannon_init(void);
extern void pcmcia_shannon_exit(void);
extern int pcmcia_stork_init(struct device *);
extern void pcmcia_stork_exit(struct device *);
extern int pcmcia_simpad_init(void);
extern void pcmcia_simpad_exit(void);
extern int pcmcia_system3_init(struct device *);
extern void pcmcia_system3_exit(struct device *);
extern int pcmcia_stork_init(void);
extern void pcmcia_stork_exit(void);
extern int pcmcia_trizeps_init(struct device *);
extern void pcmcia_trizeps_exit(struct device *);
extern int pcmcia_system3_init(void);
extern void pcmcia_system3_exit(void);
extern int pcmcia_xp860_init(struct device *);
extern void pcmcia_xp860_exit(struct device *);
extern int pcmcia_trizeps_init(void);
extern void pcmcia_trizeps_exit(void);
extern int pcmcia_xp860_init(void);
extern void pcmcia_xp860_exit(void);
extern int pcmcia_yopy_init(void);
extern void pcmcia_yopy_exit(void);
extern int pcmcia_yopy_init(struct device *);
extern void pcmcia_yopy_exit(struct device *);
#endif /* !defined(_PCMCIA_SA1100_H) */
......@@ -9,8 +9,10 @@
* 7/5/01 Woojung Huh <whuh@applieddata.net>
*
*/
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/sched.h>
#include <linux/device.h>
#include <linux/init.h>
#include <asm/hardware.h>
......@@ -84,6 +86,7 @@ adsbitsy_pcmcia_configure_socket(int sock, const struct pcmcia_configure *conf)
}
static struct pcmcia_low_level adsbitsy_pcmcia_ops = {
.owner = THIS_MODULE,
.init = adsbitsy_pcmcia_init,
.shutdown = sa1111_pcmcia_shutdown,
.socket_state = sa1111_pcmcia_socket_state,
......@@ -94,15 +97,15 @@ static struct pcmcia_low_level adsbitsy_pcmcia_ops = {
.socket_suspend = sa1111_pcmcia_socket_suspend,
};
int __init pcmcia_adsbitsy_init(void)
int __init pcmcia_adsbitsy_init(struct device *dev)
{
int ret = -ENODEV;
if (machine_is_adsbitsy())
ret = sa1100_register_pcmcia(&adsbitsy_pcmcia_ops);
ret = sa1100_register_pcmcia(&adsbitsy_pcmcia_ops, dev);
return ret;
}
void __exit pcmcia_adsbitsy_exit(void)
void __exit pcmcia_adsbitsy_exit(struct device *dev)
{
sa1100_unregister_pcmcia(&adsbitsy_pcmcia_ops);
sa1100_unregister_pcmcia(&adsbitsy_pcmcia_ops, dev);
}
......@@ -5,9 +5,11 @@
*
*/
#include <linux/config.h>
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/errno.h>
#include <linux/interrupt.h>
#include <linux/device.h>
#include <linux/init.h>
#include <asm/hardware.h>
......@@ -189,6 +191,7 @@ static int assabet_pcmcia_socket_suspend(int sock)
}
static struct pcmcia_low_level assabet_pcmcia_ops = {
.owner = THIS_MODULE,
.init = assabet_pcmcia_init,
.shutdown = assabet_pcmcia_shutdown,
.socket_state = assabet_pcmcia_socket_state,
......@@ -199,13 +202,13 @@ static struct pcmcia_low_level assabet_pcmcia_ops = {
.socket_suspend = assabet_pcmcia_socket_suspend,
};
int __init pcmcia_assabet_init(void)
int __init pcmcia_assabet_init(struct device *dev)
{
int ret = -ENODEV;
if (machine_is_assabet()) {
if (!machine_has_neponset())
ret = sa1100_register_pcmcia(&assabet_pcmcia_ops);
ret = sa1100_register_pcmcia(&assabet_pcmcia_ops, dev);
#ifndef CONFIG_ASSABET_NEPONSET
else
printk(KERN_ERR "Card Services disabled: missing "
......@@ -215,8 +218,8 @@ int __init pcmcia_assabet_init(void)
return ret;
}
void __exit pcmcia_assabet_exit(void)
void __exit pcmcia_assabet_exit(struct device *dev)
{
sa1100_unregister_pcmcia(&assabet_pcmcia_ops);
sa1100_unregister_pcmcia(&assabet_pcmcia_ops, dev);
}
......@@ -12,6 +12,7 @@
* published by the Free Software Foundation.
*
*/
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/sched.h>
#include <linux/device.h>
......@@ -148,6 +149,7 @@ badge4_pcmcia_configure_socket(int sock, const struct pcmcia_configure *conf)
}
static struct pcmcia_low_level badge4_pcmcia_ops = {
.owner = THIS_MODULE,
.init = badge4_pcmcia_init,
.shutdown = badge4_pcmcia_shutdown,
.socket_state = sa1111_pcmcia_socket_state,
......@@ -158,19 +160,19 @@ static struct pcmcia_low_level badge4_pcmcia_ops = {
.socket_suspend = sa1111_pcmcia_socket_suspend,
};
int pcmcia_badge4_init(void)
int pcmcia_badge4_init(struct device *dev)
{
int ret = -ENODEV;
if (machine_is_badge4())
ret = sa1100_register_pcmcia(&badge4_pcmcia_ops);
ret = sa1100_register_pcmcia(&badge4_pcmcia_ops, dev);
return ret;
}
void __devexit pcmcia_badge4_exit(void)
void __devexit pcmcia_badge4_exit(struct device *dev)
{
sa1100_unregister_pcmcia(&badge4_pcmcia_ops);
sa1100_unregister_pcmcia(&badge4_pcmcia_ops, dev);
}
static int __init pcmv_setup(char *s)
......
......@@ -6,8 +6,10 @@
*
*/
#include <linux/config.h>
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/sched.h>
#include <linux/device.h>
#include <linux/init.h>
#include <asm/hardware.h>
......@@ -156,6 +158,7 @@ static int cerf_pcmcia_socket_suspend(int sock)
}
static struct pcmcia_low_level cerf_pcmcia_ops = {
.owner = THIS_MODULE,
.init = cerf_pcmcia_init,
.shutdown = cerf_pcmcia_shutdown,
.socket_state = cerf_pcmcia_socket_state,
......@@ -166,17 +169,17 @@ static struct pcmcia_low_level cerf_pcmcia_ops = {
.socket_suspend = cerf_pcmcia_socket_suspend,
};
int __init pcmcia_cerf_init(void)
int __init pcmcia_cerf_init(struct device *dev)
{
int ret = -ENODEV;
if (machine_is_cerf())
ret = sa1100_register_pcmcia(&cerf_pcmcia_ops);
ret = sa1100_register_pcmcia(&cerf_pcmcia_ops, dev);
return ret;
}
void __exit pcmcia_cerf_exit(void)
void __exit pcmcia_cerf_exit(struct device *dev)
{
sa1100_unregister_pcmcia(&cerf_pcmcia_ops);
sa1100_unregister_pcmcia(&cerf_pcmcia_ops, dev);
}
......@@ -5,9 +5,10 @@
* by Jordi Colomer, 09/05/2001
*
*/
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/sched.h>
#include <linux/device.h>
#include <linux/init.h>
#include <asm/hardware.h>
......@@ -217,6 +218,7 @@ static int flexanet_pcmcia_socket_suspend(int sock)
*
*/
static struct pcmcia_low_level flexanet_pcmcia_ops = {
.owner = THIS_MODULE,
.init = flexanet_pcmcia_init,
.shutdown = flexanet_pcmcia_shutdown,
.socket_state = flexanet_pcmcia_socket_state,
......@@ -227,18 +229,18 @@ static struct pcmcia_low_level flexanet_pcmcia_ops = {
.socket_suspend = flexanet_pcmcia_socket_suspend,
};
int __init pcmcia_flexanet_init(void)
int __init pcmcia_flexanet_init(struct device *dev)
{
int ret = -ENODEV;
if (machine_is_flexanet())
ret = sa1100_register_pcmcia(&flexanet_pcmcia_ops);
ret = sa1100_register_pcmcia(&flexanet_pcmcia_ops, dev);
return ret;
}
void __exit pcmcia_flexanet_exit(void)
void __exit pcmcia_flexanet_exit(struct device *dev)
{
sa1100_unregister_pcmcia(&flexanet_pcmcia_ops);
sa1100_unregister_pcmcia(&flexanet_pcmcia_ops, dev);
}
......@@ -4,8 +4,10 @@
* Created by Eric Peng <ericpeng@coventive.com>
*
*/
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/sched.h>
#include <linux/device.h>
#include <linux/init.h>
#include <asm/hardware.h>
......@@ -165,6 +167,7 @@ static int freebird_pcmcia_socket_suspend(int sock)
}
static struct pcmcia_low_level freebird_pcmcia_ops = {
.owner = THIS_MODULE,
.init = freebird_pcmcia_init,
.shutdown = freebird_pcmcia_shutdown,
.socket_state = freebird_pcmcia_socket_state,
......@@ -175,17 +178,17 @@ static struct pcmcia_low_level freebird_pcmcia_ops = {
.socket_suspend = freebird_pcmcia_socket_suspend,
};
int __init pcmcia_freebird_init(void)
int __init pcmcia_freebird_init(struct device *dev)
{
int ret = -ENODEV;
if (machine_is_freebird())
ret = sa1100_register_pcmcia(&freebird_pcmcia_ops);
ret = sa1100_register_pcmcia(&freebird_pcmcia_ops, dev);
return ret;
}
void __exit pcmcia_freebird_exit(void)
void __exit pcmcia_freebird_exit(struct device *dev)
{
sa1100_unregister_pcmcia(&freebird_pcmcia_ops);
sa1100_unregister_pcmcia(&freebird_pcmcia_ops, dev);
}
......@@ -377,12 +377,16 @@ sa1100_pcmcia_register_callback(unsigned int sock,
{
struct sa1100_pcmcia_socket *skt = PCMCIA_SOCKET(sock);
if (handler && !try_module_get(skt->ops->owner))
return -ENODEV;
if (handler == NULL) {
skt->handler = NULL;
} else {
skt->handler_info = info;
skt->handler = handler;
}
if (!handler)
module_put(skt->ops->owner);
return 0;
}
......@@ -918,11 +922,10 @@ static struct notifier_block sa1100_pcmcia_notifier_block = {
*
* Register an SA1100 PCMCIA low level driver with the SA1100 core.
*/
int sa1100_register_pcmcia(struct pcmcia_low_level *ops)
int sa1100_register_pcmcia(struct pcmcia_low_level *ops, struct device *dev)
{
struct pcmcia_init pcmcia_init;
struct pcmcia_state state[SA1100_PCMCIA_MAX_SOCK];
struct pcmcia_state_array state_array;
struct pcmcia_socket_class_data *cls;
unsigned int i, cpu_clock;
int ret;
......@@ -990,15 +993,18 @@ int sa1100_register_pcmcia(struct pcmcia_low_level *ops)
sa1100_pcmcia_set_mecr(skt, cpu_clock);
}
/* Only advertise as many sockets as we can detect */
ret = register_ss_entry(sa1100_pcmcia_socket_count,
&sa1100_pcmcia_operations);
if (ret < 0) {
printk(KERN_ERR "Unable to register sockets\n");
cls = kmalloc(sizeof(struct pcmcia_socket_class_data), GFP_KERNEL);
if (!cls) {
ret = -ENOMEM;
goto out_err;
}
memset(cls, 0, sizeof(struct pcmcia_socket_class_data));
cls->ops = &sa1100_pcmcia_operations;
cls->nsock = sa1100_pcmcia_socket_count;
dev->class_data = cls;
/*
* Start the event poll timer. It will reschedule by itself afterwards.
*/
......@@ -1027,7 +1033,7 @@ EXPORT_SYMBOL(sa1100_register_pcmcia);
*
* Unregister a previously registered pcmcia driver
*/
void sa1100_unregister_pcmcia(struct pcmcia_low_level *ops)
void sa1100_unregister_pcmcia(struct pcmcia_low_level *ops, struct device *dev)
{
int i;
......@@ -1043,8 +1049,6 @@ void sa1100_unregister_pcmcia(struct pcmcia_low_level *ops)
del_timer_sync(&poll_timer);
unregister_ss_entry(&sa1100_pcmcia_operations);
for (i = 0; i < sa1100_pcmcia_socket_count; i++) {
struct sa1100_pcmcia_socket *skt = PCMCIA_SOCKET(i);
......@@ -1058,10 +1062,71 @@ void sa1100_unregister_pcmcia(struct pcmcia_low_level *ops)
flush_scheduled_work();
kfree(dev->class_data);
dev->class_data = NULL;
pcmcia_low_level = NULL;
}
EXPORT_SYMBOL(sa1100_unregister_pcmcia);
static struct device_driver sa1100_pcmcia_driver = {
.name = "sa11x0-pcmcia",
.bus = &platform_bus_type,
.devclass = &pcmcia_socket_class,
};
static struct platform_device sa1100_pcmcia_device = {
.name = "sa11x0-pcmcia",
.id = 0,
.dev = {
.name = "Intel Corporation SA11x0 [PCMCIA]",
},
};
struct ll_fns {
int (*init)(struct device *dev);
void (*exit)(struct device *dev);
};
static struct ll_fns sa1100_ll_fns[] = {
#ifdef CONFIG_SA1100_ASSABET
{ .init = pcmcia_assabet_init, .exit = pcmcia_assabet_exit, },
#endif
#ifdef CONFIG_SA1100_CERF
{ .init = pcmcia_cerf_init, .exit = pcmcia_cerf_exit, },
#endif
#ifdef CONFIG_SA1100_FLEXANET
{ .init = pcmcia_flexanet_init, .exit = pcmcia_flexanet_exit, },
#endif
#ifdef CONFIG_SA1100_FREEBIRD
{ .init = pcmcia_freebird_init, .exit = pcmcia_freebird_exit, },
#endif
#ifdef CONFIG_SA1100_GRAPHICSCLIENT
{ .init = pcmcia_gcplus_init, .exit = pcmcia_gcplus_exit, },
#endif
#ifdef CONFIG_SA1100_H3600
{ .init = pcmcia_h3600_init, .exit = pcmcia_h3600_exit, },
#endif
#ifdef CONFIG_SA1100_PANGOLIN
{ .init = pcmcia_pangolin_init, .exit = pcmcia_pangolin_exit, },
#endif
#ifdef CONFIG_SA1100_SHANNON
{ .init = pcmcia_shannon_init, .exit = pcmcia_shannon_exit, },
#endif
#ifdef CONFIG_SA1100_SIMPAD
{ .init = pcmcia_simpad_init, .exit = pcmcia_simpad_exit, },
#endif
#ifdef CONFIG_SA1100_STORK
{ .init = pcmcia_stork_init, .exit = pcmcia_stork_exit, },
#endif
#ifdef CONFIG_SA1100_TRIZEPS
{ .init = pcmcia_trizeps_init, .exit = pcmcia_trizeps_exit, },
#endif
#ifdef CONFIG_SA1100_YOPY
{ .init = pcmcia_yopy_init, .exit = pcmcia_yopy_exit, },
#endif
};
/* sa1100_pcmcia_init()
* ^^^^^^^^^^^^^^^^^^^^
*
......@@ -1086,61 +1151,34 @@ static int __init sa1100_pcmcia_init(void)
return -EINVAL;
}
for (i = 0; i < SA1100_PCMCIA_MAX_SOCK; i++) {
struct sa1100_pcmcia_socket *skt = PCMCIA_SOCKET(i);
skt->speed_io = SA1100_PCMCIA_IO_ACCESS;
skt->speed_attr = SA1100_PCMCIA_5V_MEM_ACCESS;
skt->speed_mem = SA1100_PCMCIA_5V_MEM_ACCESS;
}
#ifdef CONFIG_CPU_FREQ
ret = cpufreq_register_notifier(&sa1100_pcmcia_notifier_block,
CPUFREQ_TRANSITION_NOTIFIER);
if (ret < 0) {
printk(KERN_ERR "Unable to register CPU frequency change "
"notifier (%d)\n", ret);
driver_unregister(&sa1100_pcmcia_driver);
return ret;
}
#endif
#ifdef CONFIG_SA1100_ASSABET
pcmcia_assabet_init();
#endif
#ifdef CONFIG_SA1100_CERF
pcmcia_cerf_init();
#endif
#ifdef CONFIG_SA1100_FLEXANET
pcmcia_flexanet_init();
#endif
#ifdef CONFIG_SA1100_FREEBIRD
pcmcia_freebird_init();
#endif
#ifdef CONFIG_SA1100_GRAPHICSCLIENT
pcmcia_gcplus_init();
#endif
#ifdef CONFIG_SA1100_H3600
pcmcia_h3600_init();
#endif
#ifdef CONFIG_SA1100_PANGOLIN
pcmcia_pangolin_init();
#endif
#ifdef CONFIG_SA1100_SHANNON
pcmcia_shannon_init();
#endif
#ifdef CONFIG_SA1100_SIMPAD
pcmcia_simpad_init();
#endif
#ifdef CONFIG_SA1100_STORK
pcmcia_stork_init();
#endif
#ifdef CONFIG_SA1100_TRIZEPS
pcmcia_trizeps_init();
#endif
#ifdef CONFIG_SA1100_YOPY
pcmcia_yopy_init();
#endif
driver_register(&sa1100_pcmcia_driver);
/*
* Initialise any "on-board" PCMCIA sockets.
*/
for (i = 0; i < ARRAY_SIZE(sa1100_ll_fns); i++) {
ret = sa1100_ll_fns[i].init(&sa1100_pcmcia_device.dev);
if (ret == 0)
break;
}
if (ret == 0)
platform_device_register(&sa1100_pcmcia_device);
/*
* Don't fail if we don't find any on-board sockets.
*/
return 0;
}
......@@ -1151,48 +1189,14 @@ static int __init sa1100_pcmcia_init(void)
*/
static void __exit sa1100_pcmcia_exit(void)
{
#ifdef CONFIG_SA1100_ASSABET
pcmcia_assabet_exit();
#endif
#ifdef CONFIG_SA1100_CERF
pcmcia_cerf_exit();
#endif
#ifdef CONFIG_SA1100_FLEXANET
pcmcia_flexanet_exit();
#endif
#ifdef CONFIG_SA1100_FREEBIRD
pcmcia_freebird_exit();
#endif
#ifdef CONFIG_SA1100_GRAPHICSCLIENT
pcmcia_gcplus_exit();
#endif
#ifdef CONFIG_SA1100_H3600
pcmcia_h3600_exit();
#endif
#ifdef CONFIG_SA1100_PANGOLIN
pcmcia_pangolin_exit();
#endif
#ifdef CONFIG_SA1100_SHANNON
pcmcia_shannon_exit();
#endif
#ifdef CONFIG_SA1100_SIMPAD
pcmcia_simpad_exit();
#endif
#ifdef CONFIG_SA1100_STORK
pcmcia_stork_exit();
#endif
#ifdef CONFIG_SA1100_YOPY
pcmcia_yopy_exit();
#endif
platform_device_unregister(&sa1100_pcmcia_device);
if (pcmcia_low_level) {
printk(KERN_ERR "PCMCIA: low level driver still registered\n");
sa1100_unregister_pcmcia(pcmcia_low_level);
}
#ifdef CONFIG_CPU_FREQ
cpufreq_unregister_notifier(&sa1100_pcmcia_notifier_block, CPUFREQ_TRANSITION_NOTIFIER);
#endif
driver_unregister(&sa1100_pcmcia_driver);
}
MODULE_AUTHOR("John Dorsey <john+@cs.cmu.edu>");
......
......@@ -46,6 +46,8 @@ struct pcmcia_irq_info {
};
struct pcmcia_low_level {
struct module *owner;
int (*init)(struct pcmcia_init *);
int (*shutdown)(void);
void (*socket_state)(int sock, struct pcmcia_state *);
......@@ -71,7 +73,7 @@ struct pcmcia_low_level {
unsigned int cpu_speed, unsigned int cmd_time);
};
extern int sa1100_register_pcmcia(struct pcmcia_low_level *);
extern void sa1100_unregister_pcmcia(struct pcmcia_low_level *);
extern int sa1100_register_pcmcia(struct pcmcia_low_level *, struct device *);
extern void sa1100_unregister_pcmcia(struct pcmcia_low_level *, struct device *);
#endif
......@@ -11,9 +11,11 @@
* Fix
*
*/
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/sched.h>
#include <linux/delay.h>
#include <linux/device.h>
#include <linux/init.h>
#include <asm/hardware.h>
......@@ -56,6 +58,8 @@ static int gcplus_pcmcia_init(struct pcmcia_init *init)
return res;
}
init->socket_irq[0] = S0_STS_IRQ;
return 1; // 1 PCMCIA Slot
}
......@@ -71,45 +75,27 @@ static int gcplus_pcmcia_shutdown(void)
return 0;
}
static int gcplus_pcmcia_socket_state(struct pcmcia_state_array
*state_array){
unsigned long levels;
if(state_array->size<1) return -1;
memset(state_array->state, 0,
(state_array->size)*sizeof(struct pcmcia_state));
levels=*PCMCIA_Status;
state_array->state[0].detect=(levels & ADS_CS_ST_A_CD)?1:0;
state_array->state[0].ready=(levels & ADS_CS_ST_A_READY)?1:0;
state_array->state[0].bvd1= 0;
state_array->state[0].bvd2= 0;
state_array->state[0].wrprot=0;
state_array->state[0].vs_3v=0;
state_array->state[0].vs_Xv=0;
return 1;
}
static int gcplus_pcmcia_get_irq_info(struct pcmcia_irq_info *info)
static void gcplus_pcmcia_socket_state(int sock, struct pcmcia_state *state_array)
{
if (info->sock > 1)
return -1;
if (info->sock == 0)
info->irq = S0_STS_IRQ;
return 0;
unsigned long levels = *PCMCIA_Status;
if (sock == 0) {
state->detect=(levels & ADS_CS_ST_A_CD)?1:0;
state->ready=(levels & ADS_CS_ST_A_READY)?1:0;
state->bvd1= 0;
state->bvd2= 0;
state->wrprot=0;
state->vs_3v=0;
state->vs_Xv=0;
}
}
static int gcplus_pcmcia_configure_socket(const struct pcmcia_configure
static int gcplus_pcmcia_configure_socket(int sock, const struct pcmcia_configure
*configure)
{
unsigned long flags;
if(configure->sock>1) return -1;
if(sock>1) return -1;
local_irq_save(flags);
......@@ -160,28 +146,28 @@ static int gcplus_pcmcia_socket_suspend(int sock)
}
static struct pcmcia_low_level gcplus_pcmcia_ops = {
.owner = THIS_MODULE,
.init = gcplus_pcmcia_init,
.shutdown = gcplus_pcmcia_shutdown,
.socket_state = gcplus_pcmcia_socket_state,
.get_irq_info = gcplus_pcmcia_get_irq_info,
.configure_socket = gcplus_pcmcia_configure_socket,
.socket_init = gcplus_pcmcia_socket_init,
.socket_suspend = gcplus_pcmcia_socket_suspend,
};
int __init pcmcia_gcplus_init(void)
int __init pcmcia_gcplus_init(struct device *dev)
{
int ret = -ENODEV;
if (machine_is_gcplus())
ret = sa1100_register_pcmcia(&gcplus_pcmcia_ops);
ret = sa1100_register_pcmcia(&gcplus_pcmcia_ops, dev);
return ret;
}
void __exit pcmcia_gcplus_exit(void)
void __exit pcmcia_gcplus_exit(struct device *dev)
{
sa1100_unregister_pcmcia(&gcplus_pcmcia_ops);
sa1100_unregister_pcmcia(&gcplus_pcmcia_ops, dev);
}
......@@ -8,8 +8,10 @@
* 7/5/01 Woojung Huh <whuh@applieddata.net>
*
*/
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/sched.h>
#include <linux/device.h>
#include <linux/init.h>
#include <asm/hardware.h>
......@@ -35,12 +37,12 @@ static int graphicsmaster_pcmcia_init(struct pcmcia_init *init)
}
static int
graphicsmaster_pcmcia_configure_socket(const struct pcmcia_configure *conf)
graphicsmaster_pcmcia_configure_socket(int sock, const struct pcmcia_configure *conf)
{
unsigned int pa_dwr_mask, pa_dwr_set;
int ret;
switch (conf->sock) {
switch (sock) {
case 0:
pa_dwr_mask = GPIO_GPIO0 | GPIO_GPIO1;
......@@ -69,7 +71,7 @@ graphicsmaster_pcmcia_configure_socket(const struct pcmcia_configure *conf)
return -1;
}
ret = sa1111_pcmcia_configure_socket(conf);
ret = sa1111_pcmcia_configure_socket(sock, conf);
if (ret == 0) {
unsigned long flags;
......@@ -82,28 +84,28 @@ graphicsmaster_pcmcia_configure_socket(const struct pcmcia_configure *conf)
}
static struct pcmcia_low_level graphicsmaster_pcmcia_ops = {
.owner = THIS_MODULE,
.init = graphicsmaster_pcmcia_init,
.shutdown = sa1111_pcmcia_shutdown,
.socket_state = sa1111_pcmcia_socket_state,
.get_irq_info = sa1111_pcmcia_get_irq_info,
.configure_socket = graphicsmaster_pcmcia_configure_socket,
.socket_init = sa1111_pcmcia_socket_init,
.socket_suspend = sa1111_pcmcia_socket_suspend,
};
int __init pcmcia_graphicsmaster_init(void)
int __init pcmcia_graphicsmaster_init(struct device *dev)
{
int ret = -ENODEV;
if (machine_is_graphicsmaster())
ret = sa1100_register_pcmcia(&graphicsmaster_pcmcia_ops);
ret = sa1100_register_pcmcia(&graphicsmaster_pcmcia_ops, dev);
return ret;
}
void __exit pcmcia_graphicsmaster_exit(void)
void __exit pcmcia_graphicsmaster_exit(struct device *dev)
{
sa1100_unregister_pcmcia(&graphicsmaster_pcmcia_ops);
sa1100_unregister_pcmcia(&graphicsmaster_pcmcia_ops, dev);
}
......@@ -4,8 +4,10 @@
* PCMCIA implementation routines for H3600
*
*/
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/sched.h>
#include <linux/device.h>
#include <linux/init.h>
#include <asm/hardware.h>
......@@ -186,6 +188,7 @@ static int h3600_pcmcia_socket_suspend(int sock)
}
struct pcmcia_low_level h3600_pcmcia_ops = {
.owner = THIS_MODULE,
.init = h3600_pcmcia_init,
.shutdown = h3600_pcmcia_shutdown,
.socket_state = h3600_pcmcia_socket_state,
......@@ -196,17 +199,17 @@ struct pcmcia_low_level h3600_pcmcia_ops = {
.socket_suspend = h3600_pcmcia_socket_suspend,
};
int __init pcmcia_h3600_init(void)
int __init pcmcia_h3600_init(struct device *dev)
{
int ret = -ENODEV;
if (machine_is_h3600())
ret = sa1100_register_pcmcia(&h3600_pcmcia_ops);
ret = sa1100_register_pcmcia(&h3600_pcmcia_ops, dev);
return ret;
}
void __exit pcmcia_h3600_exit(void)
void __exit pcmcia_h3600_exit(struct device *dev)
{
sa1100_unregister_pcmcia(&h3600_pcmcia_ops);
sa1100_unregister_pcmcia(&h3600_pcmcia_ops, dev);
}
......@@ -4,6 +4,7 @@
* Jornada720 PCMCIA specific routines
*
*/
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/sched.h>
#include <linux/device.h>
......@@ -90,7 +91,7 @@ printk("%s(): config socket %d vcc %d vpp %d\n", __FUNCTION__,
return -1;
}
ret = sa1111_pcmcia_configure_socket(conf);
ret = sa1111_pcmcia_configure_socket(sock, conf);
if (ret == 0) {
unsigned long flags;
......@@ -103,6 +104,7 @@ printk("%s(): config socket %d vcc %d vpp %d\n", __FUNCTION__,
}
static struct pcmcia_low_level jornada720_pcmcia_ops = {
.owner = THIS_MODULE,
.init = jornada720_pcmcia_init,
.shutdown = sa1111_pcmcia_shutdown,
.socket_state = sa1111_pcmcia_socket_state,
......@@ -113,17 +115,17 @@ static struct pcmcia_low_level jornada720_pcmcia_ops = {
.socket_suspend = sa1111_pcmcia_socket_suspend,
};
int __init pcmcia_jornada720_init(void)
int __init pcmcia_jornada720_init(struct device *dev)
{
int ret = -ENODEV;
if (machine_is_jornada720())
ret = sa1100_register_pcmcia(&jornada720_pcmcia_ops);
ret = sa1100_register_pcmcia(&jornada720_pcmcia_ops, dev);
return ret;
}
void __devexit pcmcia_jornada720_exit(void)
void __devexit pcmcia_jornada720_exit(struct device *dev)
{
sa1100_unregister_pcmcia(&jornada720_pcmcia_ops);
sa1100_unregister_pcmcia(&jornada720_pcmcia_ops, dev);
}
......@@ -3,6 +3,7 @@
*
* Neponset PCMCIA specific routines
*/
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/sched.h>
#include <linux/device.h>
......@@ -127,6 +128,7 @@ neponset_pcmcia_configure_socket(int sock, const struct pcmcia_configure *conf)
}
static struct pcmcia_low_level neponset_pcmcia_ops = {
.owner = THIS_MODULE,
.init = neponset_pcmcia_init,
.shutdown = sa1111_pcmcia_shutdown,
.socket_state = sa1111_pcmcia_socket_state,
......@@ -137,17 +139,17 @@ static struct pcmcia_low_level neponset_pcmcia_ops = {
.socket_suspend = sa1111_pcmcia_socket_suspend,
};
int __init pcmcia_neponset_init(void)
int __init pcmcia_neponset_init(struct device *dev)
{
int ret = -ENODEV;
if (machine_is_assabet())
ret = sa1100_register_pcmcia(&neponset_pcmcia_ops);
ret = sa1100_register_pcmcia(&neponset_pcmcia_ops, dev);
return ret;
}
void __devexit pcmcia_neponset_exit(void)
void __devexit pcmcia_neponset_exit(struct device *dev)
{
sa1100_unregister_pcmcia(&neponset_pcmcia_ops);
sa1100_unregister_pcmcia(&neponset_pcmcia_ops, dev);
}
......@@ -5,8 +5,10 @@
*
*/
#include <linux/config.h>
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/sched.h>
#include <linux/device.h>
#include <linux/init.h>
#include <asm/hardware.h>
......@@ -151,6 +153,7 @@ static int pangolin_pcmcia_socket_suspend(int sock)
}
static struct pcmcia_low_level pangolin_pcmcia_ops = {
.owner = THIS_MODULE,
.init = pangolin_pcmcia_init,
.shutdown = pangolin_pcmcia_shutdown,
.socket_state = pangolin_pcmcia_socket_state,
......@@ -161,18 +164,18 @@ static struct pcmcia_low_level pangolin_pcmcia_ops = {
socket_suspend, pangolin_pcmcia_socket_suspend,
};
int __init pcmcia_pangolin_init(void)
int __init pcmcia_pangolin_init(struct device *dev)
{
int ret = -ENODEV;
if (machine_is_pangolin())
ret = sa1100_register_pcmcia(&pangolin_pcmcia_ops);
ret = sa1100_register_pcmcia(&pangolin_pcmcia_ops, dev);
return ret;
}
void __exit pcmcia_pangolin_exit(void)
void __exit pcmcia_pangolin_exit(struct device *dev)
{
sa1100_unregister_pcmcia(&pangolin_pcmcia_ops);
sa1100_unregister_pcmcia(&pangolin_pcmcia_ops, dev);
}
......@@ -5,9 +5,11 @@
* PFS168 PCMCIA specific routines
*
*/
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/sched.h>
#include <linux/delay.h>
#include <linux/device.h>
#include <linux/init.h>
#include <asm/hardware.h>
......@@ -119,6 +121,7 @@ pfs168_pcmcia_configure_socket(int sock, const struct pcmcia_configure *conf)
}
static struct pcmcia_low_level pfs168_pcmcia_ops = {
.owner = THIS_MODULE,
.init = pfs168_pcmcia_init,
.shutdown = sa1111_pcmcia_shutdown,
.socket_state = sa1111_pcmcia_socket_state,
......@@ -129,17 +132,17 @@ static struct pcmcia_low_level pfs168_pcmcia_ops = {
.socket_suspend = sa1111_pcmcia_socket_suspend,
};
int __init pcmcia_pfs168_init(void)
int __init pcmcia_pfs168_init(struct device *dev)
{
int ret = -ENODEV;
if (machine_is_pfs168())
ret = sa1100_register_pcmcia(&pfs168_pcmcia_ops);
ret = sa1100_register_pcmcia(&pfs168_pcmcia_ops, dev);
return ret;
}
void __exit pcmcia_pfs168_exit(void)
void __exit pcmcia_pfs168_exit(struct device *dev)
{
sa1100_unregister_pcmcia(&pfs168_pcmcia_ops);
sa1100_unregister_pcmcia(&pfs168_pcmcia_ops, dev);
}
......@@ -4,8 +4,10 @@
* PCMCIA implementation routines for Shannon
*
*/
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/sched.h>
#include <linux/device.h>
#include <linux/init.h>
#include <asm/hardware.h>
......@@ -150,6 +152,7 @@ static int shannon_pcmcia_socket_suspend(int sock)
}
static struct pcmcia_low_level shannon_pcmcia_ops = {
.owner = THIS_MODULE,
.init = shannon_pcmcia_init,
.shutdown = shannon_pcmcia_shutdown,
.socket_state = shannon_pcmcia_socket_state,
......@@ -160,17 +163,17 @@ static struct pcmcia_low_level shannon_pcmcia_ops = {
.socket_suspend = shannon_pcmcia_socket_suspend,
};
int __init pcmcia_shannon_init(void)
int __init pcmcia_shannon_init(struct device *dev)
{
int ret = -ENODEV;
if (machine_is_shannon())
ret = sa1100_register_pcmcia(&shannon_pcmcia_ops);
ret = sa1100_register_pcmcia(&shannon_pcmcia_ops, dev);
return ret;
}
void __exit pcmcia_shannon_exit(void)
void __exit pcmcia_shannon_exit(struct device *dev)
{
sa1100_unregister_pcmcia(&shannon_pcmcia_ops);
sa1100_unregister_pcmcia(&shannon_pcmcia_ops, dev);
}
......@@ -4,8 +4,10 @@
* PCMCIA implementation routines for simpad
*
*/
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/sched.h>
#include <linux/device.h>
#include <linux/init.h>
#include <asm/hardware.h>
......@@ -146,6 +148,7 @@ static int simpad_pcmcia_socket_suspend(int sock)
}
static struct pcmcia_low_level simpad_pcmcia_ops = {
.owner = THIS_MODULE,
.init = simpad_pcmcia_init,
.shutdown = simpad_pcmcia_shutdown,
.socket_state = simpad_pcmcia_socket_state,
......@@ -156,17 +159,17 @@ static struct pcmcia_low_level simpad_pcmcia_ops = {
.socket_suspend = simpad_pcmcia_socket_suspend,
};
int __init pcmcia_simpad_init(void)
int __init pcmcia_simpad_init(struct device *dev)
{
int ret = -ENODEV;
if (machine_is_simpad())
ret = sa1100_register_pcmcia(&simpad_pcmcia_ops);
ret = sa1100_register_pcmcia(&simpad_pcmcia_ops, dev);
return ret;
}
void __exit pcmcia_simpad_exit(void)
void __exit pcmcia_simpad_exit(struct device *dev)
{
sa1100_unregister_pcmcia(&simpad_pcmcia_ops);
sa1100_unregister_pcmcia(&simpad_pcmcia_ops, dev);
}
......@@ -22,6 +22,7 @@
#include <linux/init.h>
#include <linux/kernel.h>
#include <linux/sched.h>
#include <linux/device.h>
#include <linux/i2c.h>
#include <asm/hardware.h>
......@@ -226,6 +227,7 @@ static int stork_pcmcia_socket_suspend(int sock)
}
static struct pcmcia_low_level stork_pcmcia_ops = {
.owner = THIS_MODULE,
.init = stork_pcmcia_init,
.shutdown = stork_pcmcia_shutdown,
.socket_state = stork_pcmcia_socket_state,
......@@ -236,18 +238,18 @@ static struct pcmcia_low_level stork_pcmcia_ops = {
.socket_suspend = stork_pcmcia_socket_suspend,
};
int __init pcmcia_stork_init(void)
int __init pcmcia_stork_init(struct device *dev)
{
int ret = -ENODEV;
if (machine_is_stork())
ret = sa1100_register_pcmcia(&stork_pcmcia_ops);
ret = sa1100_register_pcmcia(&stork_pcmcia_ops, dev);
return ret;
}
void __exit pcmcia_stork_exit(void)
void __exit pcmcia_stork_exit(struct device *dev)
{
sa1100_unregister_pcmcia(&stork_pcmcia_ops);
sa1100_unregister_pcmcia(&stork_pcmcia_ops, dev);
}
......@@ -25,9 +25,11 @@
*
*
*/
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/sched.h>
#include <linux/init.h>
#include <linux/device.h>
#include <linux/ioport.h>
#include <asm/hardware.h>
......@@ -99,8 +101,9 @@ static void system3_pcmcia_socket_state(int sock, struct pcmcia_state *state)
}
struct pcmcia_low_level system3_pcmcia_ops = {
.init = system3_pcmcia_init,
.shutdown = system3_pcmcia_shutdown,
.owner = THIS_MODULE,
.init = system3_pcmcia_init,
.shutdown = system3_pcmcia_shutdown,
.socket_state = system3_pcmcia_socket_state,
.get_irq_info = sa1111_pcmcia_get_irq_info,
.configure_socket = system3_pcmcia_configure_socket,
......@@ -109,17 +112,17 @@ struct pcmcia_low_level system3_pcmcia_ops = {
.socket_suspend = sa1111_pcmcia_socket_suspend,
};
int __init pcmcia_system3_init(void)
int __init pcmcia_system3_init(struct device *dev)
{
int ret = -ENODEV;
if (machine_is_pt_system3())
ret = sa1100_register_pcmcia(&system3_pcmcia_ops);
ret = sa1100_register_pcmcia(&system3_pcmcia_ops, dev);
return ret;
}
void __exit pcmcia_system3_exit(void)
void __exit pcmcia_system3_exit(struct device *dev)
{
sa1100_unregister_pcmcia(&system3_pcmcia_ops);
sa1100_unregister_pcmcia(&system3_pcmcia_ops, dev);
}
......@@ -9,8 +9,10 @@
* Guennadi Liakhovetski <gl@dsa-ac.de>
*
*/
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/sched.h>
#include <linux/device.h>
#include <linux/init.h>
#include <asm/hardware.h>
......@@ -186,6 +188,7 @@ static int trizeps_pcmcia_socket_suspend(int sock)
*
******************************************************/
struct pcmcia_low_level trizeps_pcmcia_ops = {
.owner = THIS_MODULE,
.init = trizeps_pcmcia_init,
.shutdown = trizeps_pcmcia_shutdown,
.socket_state = trizeps_pcmcia_socket_state,
......@@ -195,15 +198,15 @@ struct pcmcia_low_level trizeps_pcmcia_ops = {
.socket_suspend = trizeps_pcmcia_socket_suspend,
};
int __init pcmcia_trizeps_init(void)
int __init pcmcia_trizeps_init(struct device *dev)
{
if (machine_is_trizeps()) {
return sa1100_register_pcmcia(&trizeps_pcmcia_ops);
return sa1100_register_pcmcia(&trizeps_pcmcia_ops, dev);
}
return -ENODEV;
}
void __exit pcmcia_trizeps_exit(void)
void __exit pcmcia_trizeps_exit(struct device *dev)
{
sa1100_unregister_pcmcia(&trizeps_pcmcia_ops);
sa1100_unregister_pcmcia(&trizeps_pcmcia_ops, dev);
}
......@@ -4,9 +4,11 @@
* XP860 PCMCIA specific routines
*
*/
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/delay.h>
#include <linux/sched.h>
#include <linux/device.h>
#include <linux/init.h>
#include <asm/hardware.h>
......@@ -132,6 +134,7 @@ xp860_pcmcia_configure_socket(int sock, const struct pcmcia_configure *conf)
}
static struct pcmcia_low_level xp860_pcmcia_ops = {
.owner = THIS_MODULE,
.init = xp860_pcmcia_init,
.shutdown = sa1111_pcmcia_shutdown,
.socket_state = sa1111_pcmcia_socket_state,
......@@ -142,18 +145,18 @@ static struct pcmcia_low_level xp860_pcmcia_ops = {
.socket_suspend = sa1111_pcmcia_socket_suspend,
};
int __init pcmcia_xp860_init(void)
int __init pcmcia_xp860_init(struct device *dev)
{
int ret = -ENODEV;
if (machine_is_xp860())
ret = sa1100_register_pcmcia(&xp860_pcmcia_ops);
ret = sa1100_register_pcmcia(&xp860_pcmcia_ops, dev);
return ret;
}
void __exit pcmcia_xp860_exit(void)
void __exit pcmcia_xp860_exit(struct device *dev)
{
sa1100_unregister_pcmcia(&xp860_pcmcia_ops);
sa1100_unregister_pcmcia(&xp860_pcmcia_ops, dev);
}
......@@ -4,8 +4,10 @@
* PCMCIA implementation routines for Yopy
*
*/
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/sched.h>
#include <linux/device.h>
#include <linux/init.h>
#include <asm/hardware.h>
......@@ -153,6 +155,7 @@ static int yopy_pcmcia_socket_suspend(int sock)
}
static struct pcmcia_low_level yopy_pcmcia_ops = {
.owner = THIS_MODULE,
.init = yopy_pcmcia_init,
.shutdown = yopy_pcmcia_shutdown,
.socket_state = yopy_pcmcia_socket_state,
......@@ -163,18 +166,18 @@ static struct pcmcia_low_level yopy_pcmcia_ops = {
.socket_suspend = yopy_pcmcia_socket_suspend,
};
int __init pcmcia_yopy_init(void)
int __init pcmcia_yopy_init(struct device *dev)
{
int ret = -ENODEV;
if (machine_is_yopy())
ret = sa1100_register_pcmcia(&yopy_pcmcia_ops);
ret = sa1100_register_pcmcia(&yopy_pcmcia_ops, dev);
return ret;
}
void __exit pcmcia_yopy_exit(void)
void __exit pcmcia_yopy_exit(struct device *dev)
{
sa1100_unregister_pcmcia(&yopy_pcmcia_ops);
sa1100_unregister_pcmcia(&yopy_pcmcia_ops, dev);
}
......@@ -12,6 +12,9 @@
#include <linux/interrupt.h>
#include <linux/init.h>
#include <linux/proc_fs.h>
#include <pcmcia/ss.h>
#include <asm/hardware.h>
#include <asm/hardware/sa1111.h>
#include <asm/irq.h>
......@@ -206,28 +209,28 @@ static int pcmcia_probe(struct device *dev)
sa1111_writel(PCCR_S0_FLT | PCCR_S1_FLT, base + SA1111_PCCR);
#ifdef CONFIG_SA1100_ADSBITSY
pcmcia_adsbitsy_init();
pcmcia_adsbitsy_init(dev);
#endif
#ifdef CONFIG_SA1100_BADGE4
pcmcia_badge4_init();
pcmcia_badge4_init(dev);
#endif
#ifdef CONFIG_SA1100_GRAPHICSMASTER
pcmcia_graphicsmaster_init();
pcmcia_graphicsmaster_init(dev);
#endif
#ifdef CONFIG_SA1100_JORNADA720
pcmcia_jornada720_init();
pcmcia_jornada720_init(dev);
#endif
#ifdef CONFIG_ASSABET_NEPONSET
pcmcia_neponset_init();
pcmcia_neponset_init(dev);
#endif
#ifdef CONFIG_SA1100_PFS168
pcmcia_pfs_init();
pcmcia_pfs_init(dev);
#endif
#ifdef CONFIG_SA1100_PT_SYSTEM3
pcmcia_system3_init();
pcmcia_system3_init(dev);
#endif
#ifdef CONFIG_SA1100_XP860
pcmcia_xp860_init();
pcmcia_xp860_init(dev);
#endif
return 0;
}
......@@ -237,28 +240,28 @@ static int __devexit pcmcia_remove(struct device *dev)
struct sa1111_dev *sadev = SA1111_DEV(dev);
#ifdef CONFIG_SA1100_ADSBITSY
pcmcia_adsbitsy_exit();
pcmcia_adsbitsy_exit(dev);
#endif
#ifdef CONFIG_SA1100_BADGE4
pcmcia_badge4_exit();
pcmcia_badge4_exit(dev);
#endif
#ifdef CONFIG_SA1100_GRAPHICSMASTER
pcmcia_graphicsmaster_exit();
pcmcia_graphicsmaster_exit(dev);
#endif
#ifdef CONFIG_SA1100_JORNADA720
pcmcia_jornada720_exit();
pcmcia_jornada720_exit(dev);
#endif
#ifdef CONFIG_ASSABET_NEPONSET
pcmcia_neponset_exit();
pcmcia_neponset_exit(dev);
#endif
#ifdef CONFIG_SA1100_PFS168
pcmcia_pfs_exit();
pcmcia_pfs_exit(dev);
#endif
#ifdef CONFIG_SA1100_PT_SYSTEM3
pcmcia_system3_exit();
pcmcia_system3_exit(dev);
#endif
#ifdef CONFIG_SA1100_XP860
pcmcia_xp860_exit();
pcmcia_xp860_exit(dev);
#endif
release_mem_region(sadev->res.start, 512);
......@@ -281,6 +284,7 @@ static struct sa1111_driver pcmcia_driver = {
.drv = {
.name = "sa1111-pcmcia",
.bus = &sa1111_bus_type,
.devclass = &pcmcia_socket_class,
.probe = pcmcia_probe,
.remove = __devexit_p(pcmcia_remove),
.suspend = pcmcia_suspend,
......
......@@ -5,3 +5,11 @@ extern int sa1111_pcmcia_get_irq_info(struct pcmcia_irq_info *);
extern int sa1111_pcmcia_configure_socket(int sock, const struct pcmcia_configure *);
extern int sa1111_pcmcia_socket_init(int);
extern int sa1111_pcmcia_socket_suspend(int);
extern int pcmcia_jornada720_init(struct device *);
extern void pcmcia_jornada720_exit(struct device *);
extern int pcmcia_neponset_init(struct device *);
extern void pcmcia_neponset_exit(struct device *);
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment