From: Pavel Machek This adds support for pcmcia slot on sharp zaurus sl-5500. pxa2xx_sharpsl.c thus becomes quite miss-named, but I guess that is not worth fixing? Signed-off-by: Pavel Machek Cc: Russell King Signed-off-by: Andrew Morton --- drivers/pcmcia/Makefile | 1 + drivers/pcmcia/pxa2xx_sharpsl.c | 31 ++++++++++++++++++++++++++++++- drivers/pcmcia/sa1100_generic.c | 7 +++++++ 3 files changed, 38 insertions(+), 1 deletion(-) diff -puN drivers/pcmcia/Makefile~support-pcmcia-slot-on-sharp-sl-5500 drivers/pcmcia/Makefile --- 25/drivers/pcmcia/Makefile~support-pcmcia-slot-on-sharp-sl-5500 Tue Oct 18 15:21:13 2005 +++ 25-akpm/drivers/pcmcia/Makefile Tue Oct 18 15:21:13 2005 @@ -58,6 +58,7 @@ sa1111_cs-$(CONFIG_SA1100_JORNADA720) + sa1100_cs-y += sa1100_generic.o sa1100_cs-$(CONFIG_SA1100_ASSABET) += sa1100_assabet.o sa1100_cs-$(CONFIG_SA1100_CERF) += sa1100_cerf.o +sa1100_cs-$(CONFIG_SA1100_COLLIE) += pxa2xx_sharpsl.o sa1100_cs-$(CONFIG_SA1100_H3600) += sa1100_h3600.o sa1100_cs-$(CONFIG_SA1100_SHANNON) += sa1100_shannon.o sa1100_cs-$(CONFIG_SA1100_SIMPAD) += sa1100_simpad.o diff -puN drivers/pcmcia/pxa2xx_sharpsl.c~support-pcmcia-slot-on-sharp-sl-5500 drivers/pcmcia/pxa2xx_sharpsl.c --- 25/drivers/pcmcia/pxa2xx_sharpsl.c~support-pcmcia-slot-on-sharp-sl-5500 Tue Oct 18 15:21:13 2005 +++ 25-akpm/drivers/pcmcia/pxa2xx_sharpsl.c Tue Oct 18 15:21:13 2005 @@ -18,10 +18,15 @@ #include #include +#include #include #include #include -#include +#ifdef CONFIG_SA1100_COLLIE +#include +#else +#include +#endif #include "soc_common.h" @@ -38,6 +43,7 @@ static int sharpsl_pcmcia_hw_init(struct { int ret; +#ifndef CONFIG_SA1100_COLLIE /* * Setup default state of GPIO outputs * before we enable them as outputs. @@ -60,6 +66,7 @@ static int sharpsl_pcmcia_hw_init(struct pxa_gpio_mode(GPIO55_nPREG_MD); pxa_gpio_mode(GPIO56_nPWAIT_MD); pxa_gpio_mode(GPIO57_nIOIS16_MD); +#endif /* Register interrupts */ if (scoop_devs[skt->nr].cd_irq >= 0) { @@ -213,12 +220,20 @@ static void sharpsl_pcmcia_socket_init(s write_scoop_reg(scoop_devs[skt->nr].dev, SCOOP_IMR, 0x00C0); write_scoop_reg(scoop_devs[skt->nr].dev, SCOOP_MCR, 0x0101); scoop_devs[skt->nr].keep_vs = NO_KEEP_VS; + + if (machine_is_collie()) + /* We need to disable SS_OUTPUT_ENA here. */ + write_scoop_reg(scoop_devs[skt->nr].dev, SCOOP_CPR, read_scoop_reg(scoop_devs[skt->nr].dev, SCOOP_CPR) & ~0x0080); } static void sharpsl_pcmcia_socket_suspend(struct soc_pcmcia_socket *skt) { /* CF_BUS_OFF */ sharpsl_pcmcia_init_reset(&scoop_devs[skt->nr]); + + if (machine_is_collie()) + /* We need to disable SS_OUTPUT_ENA here. */ + write_scoop_reg(scoop_devs[skt->nr].dev, SCOOP_CPR, read_scoop_reg(scoop_devs[skt->nr].dev, SCOOP_CPR) & ~0x0080); } static struct pcmcia_low_level sharpsl_pcmcia_ops = { @@ -235,6 +250,19 @@ static struct pcmcia_low_level sharpsl_p static struct platform_device *sharpsl_pcmcia_device; +#ifdef CONFIG_SA1100_COLLIE +int __init pcmcia_collie_init(struct device *dev) +{ + int ret = -ENODEV; + + if (machine_is_collie()) + ret = sa11xx_drv_pcmcia_probe(dev, &sharpsl_pcmcia_ops, 0, 1); + + return ret; +} + +#else + static int __init sharpsl_pcmcia_init(void) { int ret; @@ -269,6 +297,7 @@ static void __exit sharpsl_pcmcia_exit(v fs_initcall(sharpsl_pcmcia_init); module_exit(sharpsl_pcmcia_exit); +#endif MODULE_DESCRIPTION("Sharp SL Series PCMCIA Support"); MODULE_LICENSE("GPL"); diff -puN drivers/pcmcia/sa1100_generic.c~support-pcmcia-slot-on-sharp-sl-5500 drivers/pcmcia/sa1100_generic.c --- 25/drivers/pcmcia/sa1100_generic.c~support-pcmcia-slot-on-sharp-sl-5500 Tue Oct 18 15:21:13 2005 +++ 25-akpm/drivers/pcmcia/sa1100_generic.c Tue Oct 18 15:21:13 2005 @@ -38,8 +38,12 @@ #include #include +#include + #include "sa1100_generic.h" +int __init pcmcia_collie_init(struct device *dev); + static int (*sa11x0_pcmcia_hw_init[])(struct device *dev) = { #ifdef CONFIG_SA1100_ASSABET pcmcia_assabet_init, @@ -56,6 +60,9 @@ static int (*sa11x0_pcmcia_hw_init[])(st #ifdef CONFIG_SA1100_SIMPAD pcmcia_simpad_init, #endif +#ifdef CONFIG_SA1100_COLLIE + pcmcia_collie_init, +#endif }; static int sa11x0_drv_pcmcia_probe(struct device *dev) _