From: marek.vasut@gmail.com (Marek Vasut)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH 4/4] pxa2xx/pcmcia: Prepare for pxa320
Date: Fri, 18 Jun 2010 07:48:55 +0200 [thread overview]
Message-ID: <1276840135-5982-4-git-send-email-marek.vasut@gmail.com> (raw)
In-Reply-To: <1276840135-5982-1-git-send-email-marek.vasut@gmail.com>
PXA320 also supports PCMCIA/CF interface. This patch generalizes register access
in pxa2xx_pcmcia so the pxa320 is now supported as well.
Signed-off-by: Marek Vasut <marek.vasut@gmail.com>
---
drivers/pcmcia/pxa2xx_base.c | 40 +++++++++++++++++++++++++++++++++++++---
1 files changed, 37 insertions(+), 3 deletions(-)
diff --git a/drivers/pcmcia/pxa2xx_base.c b/drivers/pcmcia/pxa2xx_base.c
index f370476..3d63d2f 100644
--- a/drivers/pcmcia/pxa2xx_base.c
+++ b/drivers/pcmcia/pxa2xx_base.c
@@ -85,6 +85,12 @@
#define MCXX_ASST_SHIFT (7)
#define MCXX_HOLD_SHIFT (14)
+#define PXA2XX_SMC_BASE (0x48000000)
+#define PXA3XX_SMC_BASE (0x4a000000)
+#define MCMEM_OFFSET (0x28)
+#define MCATT_OFFSET (0x30)
+#define MCIO_OFFSET (0x38)
+
static inline u_int pxa2xx_mcxx_hold(u_int pcmcia_cycle_ns,
u_int mem_clk_10khz)
{
@@ -115,39 +121,62 @@ static inline u_int pxa2xx_pcmcia_cmd_time(u_int mem_clk_10khz,
return (300000 * (pcmcia_mcxx_asst + 1) / mem_clk_10khz);
}
+static inline void pxa2xx_pcmcia_set_reg( uint32_t reg, uint32_t sock,
+ uint32_t val )
+{
+ if (cpu_is_pxa2xx())
+ reg = PXA2XX_SMC_BASE | (reg + (sock << 4));
+ if (cpu_is_pxa320())
+ reg |= PXA3XX_SMC_BASE;
+
+ __REG2(reg, val);
+}
+
static int pxa2xx_pcmcia_set_mcmem( int sock, int speed, int clock )
{
- MCMEM(sock) = ((pxa2xx_mcxx_setup(speed, clock)
+ uint32_t val;
+
+ val = ((pxa2xx_mcxx_setup(speed, clock)
& MCXX_SETUP_MASK) << MCXX_SETUP_SHIFT)
| ((pxa2xx_mcxx_asst(speed, clock)
& MCXX_ASST_MASK) << MCXX_ASST_SHIFT)
| ((pxa2xx_mcxx_hold(speed, clock)
& MCXX_HOLD_MASK) << MCXX_HOLD_SHIFT);
+ pxa2xx_pcmcia_set_reg(MCMEM_OFFSET, sock, val);
+
return 0;
}
static int pxa2xx_pcmcia_set_mcio( int sock, int speed, int clock )
{
- MCIO(sock) = ((pxa2xx_mcxx_setup(speed, clock)
+ uint32_t val;
+
+ val = ((pxa2xx_mcxx_setup(speed, clock)
& MCXX_SETUP_MASK) << MCXX_SETUP_SHIFT)
| ((pxa2xx_mcxx_asst(speed, clock)
& MCXX_ASST_MASK) << MCXX_ASST_SHIFT)
| ((pxa2xx_mcxx_hold(speed, clock)
& MCXX_HOLD_MASK) << MCXX_HOLD_SHIFT);
+ pxa2xx_pcmcia_set_reg(MCIO_OFFSET, sock, val);
+
return 0;
}
static int pxa2xx_pcmcia_set_mcatt( int sock, int speed, int clock )
{
- MCATT(sock) = ((pxa2xx_mcxx_setup(speed, clock)
+ uint32_t val;
+
+ val = ((pxa2xx_mcxx_setup(speed, clock)
& MCXX_SETUP_MASK) << MCXX_SETUP_SHIFT)
| ((pxa2xx_mcxx_asst(speed, clock)
& MCXX_ASST_MASK) << MCXX_ASST_SHIFT)
| ((pxa2xx_mcxx_hold(speed, clock)
& MCXX_HOLD_MASK) << MCXX_HOLD_SHIFT);
+ pxa2xx_pcmcia_set_reg(MCATT_OFFSET, sock, val);
+
return 0;
}
@@ -276,6 +305,11 @@ static int pxa2xx_drv_pcmcia_probe(struct platform_device *dev)
if (!ops)
return -ENODEV;
+ if (cpu_is_pxa320() && ops->nr > 1) {
+ dev_err(&dev->dev, "pxa320 supports only one pcmcia slot");
+ return -EINVAL;
+ }
+
pxa2xx_drv_pcmcia_ops(ops);
sinfo = kzalloc(SKT_DEV_INFO_SIZE(ops->nr), GFP_KERNEL);
--
1.7.1
next prev parent reply other threads:[~2010-06-18 5:48 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-06-18 5:48 [PATCH 1/4] pxa2xx/cpufreq: Simplify CPU frequency change asm Marek Vasut
2010-06-18 5:48 ` [PATCH 2/4] pxa2xx/cpufreq: Simplify DRI recomputation routine Marek Vasut
2010-06-22 18:33 ` Robert Jarzmik
2010-06-18 5:48 ` [PATCH 3/4] pxa2xx/cpufreq: Fix PCMCIA frequency scaling Marek Vasut
2010-06-23 17:49 ` Robert Jarzmik
2010-06-24 18:51 ` Marek Vasut
2010-06-24 19:12 ` Russell King - ARM Linux
2010-06-24 19:33 ` Marek Vasut
2010-06-24 19:46 ` Nicolas Pitre
2010-06-28 4:48 ` Eric Miao
2010-06-18 5:48 ` Marek Vasut [this message]
2010-06-23 19:00 ` [PATCH 1/4] pxa2xx/cpufreq: Simplify CPU frequency change asm Robert Jarzmik
2010-06-24 3:17 ` Marek Vasut
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1276840135-5982-4-git-send-email-marek.vasut@gmail.com \
--to=marek.vasut@gmail.com \
--cc=linux-arm-kernel@lists.infradead.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.