Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 77bb86a1 authored by Pavel Machek's avatar Pavel Machek Committed by Russell King
Browse files

[ARM] Support pcmcia slot on sharp sl-5500



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: default avatarPavel Machek <pavel@suse.cz>
Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
Signed-off-by: default avatarRussell King <rmk+kernel@arm.linux.org.uk>
parent 17532989
Loading
Loading
Loading
Loading
+1 −0
Original line number Original line Diff line number Diff line
@@ -59,6 +59,7 @@ sa1111_cs-$(CONFIG_SA1100_JORNADA720) += sa1100_jornada720.o
sa1100_cs-y					+= sa1100_generic.o
sa1100_cs-y					+= sa1100_generic.o
sa1100_cs-$(CONFIG_SA1100_ASSABET)		+= sa1100_assabet.o
sa1100_cs-$(CONFIG_SA1100_ASSABET)		+= sa1100_assabet.o
sa1100_cs-$(CONFIG_SA1100_CERF)			+= sa1100_cerf.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_H3600)		+= sa1100_h3600.o
sa1100_cs-$(CONFIG_SA1100_SHANNON)		+= sa1100_shannon.o
sa1100_cs-$(CONFIG_SA1100_SHANNON)		+= sa1100_shannon.o
sa1100_cs-$(CONFIG_SA1100_SIMPAD)		+= sa1100_simpad.o
sa1100_cs-$(CONFIG_SA1100_SIMPAD)		+= sa1100_simpad.o
+30 −1
Original line number Original line Diff line number Diff line
@@ -18,10 +18,15 @@
#include <linux/interrupt.h>
#include <linux/interrupt.h>
#include <linux/device.h>
#include <linux/device.h>


#include <asm/mach-types.h>
#include <asm/hardware.h>
#include <asm/hardware.h>
#include <asm/irq.h>
#include <asm/irq.h>
#include <asm/hardware/scoop.h>
#include <asm/hardware/scoop.h>
#include <asm/arch/pxa-regs.h>
#ifdef CONFIG_SA1100_COLLIE
#include <asm/arch-sa1100/collie.h>
#else
#include <asm/arch-pxa/pxa-regs.h>
#endif


#include "soc_common.h"
#include "soc_common.h"


@@ -38,6 +43,7 @@ static int sharpsl_pcmcia_hw_init(struct soc_pcmcia_socket *skt)
{
{
	int ret;
	int ret;


#ifndef CONFIG_SA1100_COLLIE
	/*
	/*
	 * Setup default state of GPIO outputs
	 * Setup default state of GPIO outputs
	 * before we enable them as outputs.
	 * before we enable them as outputs.
@@ -60,6 +66,7 @@ static int sharpsl_pcmcia_hw_init(struct soc_pcmcia_socket *skt)
	pxa_gpio_mode(GPIO55_nPREG_MD);
	pxa_gpio_mode(GPIO55_nPREG_MD);
	pxa_gpio_mode(GPIO56_nPWAIT_MD);
	pxa_gpio_mode(GPIO56_nPWAIT_MD);
	pxa_gpio_mode(GPIO57_nIOIS16_MD);
	pxa_gpio_mode(GPIO57_nIOIS16_MD);
#endif


	/* Register interrupts */
	/* Register interrupts */
	if (scoop_devs[skt->nr].cd_irq >= 0) {
	if (scoop_devs[skt->nr].cd_irq >= 0) {
@@ -213,12 +220,20 @@ static void sharpsl_pcmcia_socket_init(struct soc_pcmcia_socket *skt)
	write_scoop_reg(scoop_devs[skt->nr].dev, SCOOP_IMR, 0x00C0);
	write_scoop_reg(scoop_devs[skt->nr].dev, SCOOP_IMR, 0x00C0);
	write_scoop_reg(scoop_devs[skt->nr].dev, SCOOP_MCR, 0x0101);
	write_scoop_reg(scoop_devs[skt->nr].dev, SCOOP_MCR, 0x0101);
	scoop_devs[skt->nr].keep_vs = NO_KEEP_VS;
	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)
static void sharpsl_pcmcia_socket_suspend(struct soc_pcmcia_socket *skt)
{
{
	/* CF_BUS_OFF */
	/* CF_BUS_OFF */
	sharpsl_pcmcia_init_reset(&scoop_devs[skt->nr]);
	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 = {
static struct pcmcia_low_level sharpsl_pcmcia_ops = {
@@ -235,6 +250,19 @@ static struct pcmcia_low_level sharpsl_pcmcia_ops = {


static struct platform_device *sharpsl_pcmcia_device;
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)
static int __init sharpsl_pcmcia_init(void)
{
{
	int ret;
	int ret;
@@ -269,6 +297,7 @@ static void __exit sharpsl_pcmcia_exit(void)


fs_initcall(sharpsl_pcmcia_init);
fs_initcall(sharpsl_pcmcia_init);
module_exit(sharpsl_pcmcia_exit);
module_exit(sharpsl_pcmcia_exit);
#endif


MODULE_DESCRIPTION("Sharp SL Series PCMCIA Support");
MODULE_DESCRIPTION("Sharp SL Series PCMCIA Support");
MODULE_LICENSE("GPL");
MODULE_LICENSE("GPL");
+7 −0
Original line number Original line Diff line number Diff line
@@ -38,8 +38,12 @@
#include <pcmcia/cs.h>
#include <pcmcia/cs.h>
#include <pcmcia/ss.h>
#include <pcmcia/ss.h>


#include <asm/hardware/scoop.h>

#include "sa1100_generic.h"
#include "sa1100_generic.h"


int __init pcmcia_collie_init(struct device *dev);

static int (*sa11x0_pcmcia_hw_init[])(struct device *dev) = {
static int (*sa11x0_pcmcia_hw_init[])(struct device *dev) = {
#ifdef CONFIG_SA1100_ASSABET
#ifdef CONFIG_SA1100_ASSABET
	pcmcia_assabet_init,
	pcmcia_assabet_init,
@@ -56,6 +60,9 @@ static int (*sa11x0_pcmcia_hw_init[])(struct device *dev) = {
#ifdef CONFIG_SA1100_SIMPAD
#ifdef CONFIG_SA1100_SIMPAD
	pcmcia_simpad_init,
	pcmcia_simpad_init,
#endif
#endif
#ifdef CONFIG_SA1100_COLLIE
       pcmcia_collie_init,
#endif
};
};


static int sa11x0_drv_pcmcia_probe(struct device *dev)
static int sa11x0_drv_pcmcia_probe(struct device *dev)