Commit 77882f74 authored by Linus Torvalds's avatar Linus Torvalds

Merge bk://bk.arm.linux.org.uk/linux-2.6-pcmcia

into ppc970.osdl.org:/home/torvalds/v2.6/linux
parents 220cf2d8 62bab380
...@@ -115,11 +115,14 @@ static int pxa2xx_pcmcia_set_mcatt( int sock, int speed, int clock ) ...@@ -115,11 +115,14 @@ static int pxa2xx_pcmcia_set_mcatt( int sock, int speed, int clock )
static int pxa2xx_pcmcia_set_mcxx(struct soc_pcmcia_socket *skt, unsigned int lclk) static int pxa2xx_pcmcia_set_mcxx(struct soc_pcmcia_socket *skt, unsigned int lclk)
{ {
struct soc_pcmcia_timing timing;
int sock = skt->nr; int sock = skt->nr;
pxa2xx_pcmcia_set_mcmem( sock, SOC_PCMCIA_5V_MEM_ACCESS, lclk ); soc_common_pcmcia_get_timing(skt, &timing);
pxa2xx_pcmcia_set_mcatt( sock, SOC_PCMCIA_ATTR_MEM_ACCESS, lclk );
pxa2xx_pcmcia_set_mcio( sock, SOC_PCMCIA_IO_ACCESS, lclk ); pxa2xx_pcmcia_set_mcmem(sock, timing.mem, lclk);
pxa2xx_pcmcia_set_mcatt(sock, timing.attr, lclk);
pxa2xx_pcmcia_set_mcio(sock, timing.io, lclk);
return 0; return 0;
} }
...@@ -237,12 +240,7 @@ static void pxa2xx_pcmcia_update_mcxx(unsigned int clock) ...@@ -237,12 +240,7 @@ static void pxa2xx_pcmcia_update_mcxx(unsigned int clock)
down(&soc_sockets_lock); down(&soc_sockets_lock);
list_for_each_entry(skt, &soc_sockets, node) { list_for_each_entry(skt, &soc_sockets, node) {
pxa2xx_pcmcia_set_mcio(skt->nr, calc_speed(skt->spd_io, pxa2xx_pcmcia_set_mcxx(skt, clock);
MAX_IO_WIN, SOC_PCMCIA_IO_ACCESS), clock);
pxa2xx_pcmcia_set_mcmem(skt->nr, calc_speed(skt->spd_io,
MAX_IO_WIN, SOC_PCMCIA_3V_MEM_ACCESS), clock );
pxa2xx_pcmcia_set_mcatt(skt->nr, calc_speed(skt->spd_io,
MAX_IO_WIN, SOC_PCMCIA_3V_MEM_ACCESS), clock );
} }
up(&soc_sockets_lock); up(&soc_sockets_lock);
} }
......
...@@ -69,21 +69,6 @@ sa1100_pcmcia_default_mecr_timing(struct soc_pcmcia_socket *skt, ...@@ -69,21 +69,6 @@ sa1100_pcmcia_default_mecr_timing(struct soc_pcmcia_socket *skt,
return sa1100_pcmcia_mecr_bs(cmd_time, cpu_speed); return sa1100_pcmcia_mecr_bs(cmd_time, cpu_speed);
} }
static unsigned short
calc_speed(unsigned short *spds, int num, unsigned short dflt)
{
unsigned short speed = 0;
int i;
for (i = 0; i < num; i++)
if (speed < spds[i])
speed = spds[i];
if (speed == 0)
speed = dflt;
return speed;
}
/* sa1100_pcmcia_set_mecr() /* sa1100_pcmcia_set_mecr()
* ^^^^^^^^^^^^^^^^^^^^^^^^ * ^^^^^^^^^^^^^^^^^^^^^^^^
* *
...@@ -95,19 +80,16 @@ calc_speed(unsigned short *spds, int num, unsigned short dflt) ...@@ -95,19 +80,16 @@ calc_speed(unsigned short *spds, int num, unsigned short dflt)
static int static int
sa1100_pcmcia_set_mecr(struct soc_pcmcia_socket *skt, unsigned int cpu_clock) sa1100_pcmcia_set_mecr(struct soc_pcmcia_socket *skt, unsigned int cpu_clock)
{ {
struct soc_pcmcia_timing timing;
u32 mecr, old_mecr; u32 mecr, old_mecr;
unsigned long flags; unsigned long flags;
unsigned short speed;
unsigned int bs_io, bs_mem, bs_attr; unsigned int bs_io, bs_mem, bs_attr;
speed = calc_speed(skt->spd_io, MAX_IO_WIN, SOC_PCMCIA_IO_ACCESS); soc_common_pcmcia_get_timing(skt, &timing);
bs_io = skt->ops->get_timing(skt, cpu_clock, speed);
speed = calc_speed(skt->spd_mem, MAX_WIN, SOC_PCMCIA_3V_MEM_ACCESS);
bs_mem = skt->ops->get_timing(skt, cpu_clock, speed);
speed = calc_speed(skt->spd_attr, MAX_WIN, SOC_PCMCIA_3V_MEM_ACCESS); bs_io = skt->ops->get_timing(skt, cpu_clock, timing.io);
bs_attr = skt->ops->get_timing(skt, cpu_clock, speed); bs_mem = skt->ops->get_timing(skt, cpu_clock, timing.mem);
bs_attr = skt->ops->get_timing(skt, cpu_clock, timing.attr);
local_irq_save(flags); local_irq_save(flags);
...@@ -138,20 +120,20 @@ sa1100_pcmcia_set_timing(struct soc_pcmcia_socket *skt) ...@@ -138,20 +120,20 @@ sa1100_pcmcia_set_timing(struct soc_pcmcia_socket *skt)
static int static int
sa1100_pcmcia_show_timing(struct soc_pcmcia_socket *skt, char *buf) sa1100_pcmcia_show_timing(struct soc_pcmcia_socket *skt, char *buf)
{ {
struct soc_pcmcia_timing timing;
unsigned int clock = cpufreq_get(0); unsigned int clock = cpufreq_get(0);
unsigned long mecr = MECR; unsigned long mecr = MECR;
char *p = buf; char *p = buf;
p+=sprintf(p, "I/O : %u (%u)\n", soc_common_pcmcia_get_timing(skt, &timing);
calc_speed(skt->spd_io, MAX_IO_WIN, SOC_PCMCIA_IO_ACCESS),
p+=sprintf(p, "I/O : %u (%u)\n", timing.io,
sa1100_pcmcia_cmd_time(clock, MECR_BSIO_GET(mecr, skt->nr))); sa1100_pcmcia_cmd_time(clock, MECR_BSIO_GET(mecr, skt->nr)));
p+=sprintf(p, "attribute: %u (%u)\n", p+=sprintf(p, "attribute: %u (%u)\n", timing.attr,
calc_speed(skt->spd_attr, MAX_WIN, SOC_PCMCIA_3V_MEM_ACCESS),
sa1100_pcmcia_cmd_time(clock, MECR_BSA_GET(mecr, skt->nr))); sa1100_pcmcia_cmd_time(clock, MECR_BSA_GET(mecr, skt->nr)));
p+=sprintf(p, "common : %u (%u)\n", p+=sprintf(p, "common : %u (%u)\n", timing.mem,
calc_speed(skt->spd_mem, MAX_WIN, SOC_PCMCIA_3V_MEM_ACCESS),
sa1100_pcmcia_cmd_time(clock, MECR_BSM_GET(mecr, skt->nr))); sa1100_pcmcia_cmd_time(clock, MECR_BSM_GET(mecr, skt->nr)));
return p - buf; return p - buf;
......
...@@ -68,6 +68,29 @@ void soc_pcmcia_debug(struct soc_pcmcia_socket *skt, const char *func, ...@@ -68,6 +68,29 @@ void soc_pcmcia_debug(struct soc_pcmcia_socket *skt, const char *func,
#define to_soc_pcmcia_socket(x) container_of(x, struct soc_pcmcia_socket, socket) #define to_soc_pcmcia_socket(x) container_of(x, struct soc_pcmcia_socket, socket)
static unsigned short
calc_speed(unsigned short *spds, int num, unsigned short dflt)
{
unsigned short speed = 0;
int i;
for (i = 0; i < num; i++)
if (speed < spds[i])
speed = spds[i];
if (speed == 0)
speed = dflt;
return speed;
}
void soc_common_pcmcia_get_timing(struct soc_pcmcia_socket *skt, struct soc_pcmcia_timing *timing)
{
timing->io = calc_speed(skt->spd_io, MAX_IO_WIN, SOC_PCMCIA_IO_ACCESS);
timing->mem = calc_speed(skt->spd_mem, MAX_WIN, SOC_PCMCIA_3V_MEM_ACCESS);
timing->attr = calc_speed(skt->spd_attr, MAX_WIN, SOC_PCMCIA_3V_MEM_ACCESS);
}
EXPORT_SYMBOL(soc_common_pcmcia_get_timing);
static unsigned int soc_common_pcmcia_skt_state(struct soc_pcmcia_socket *skt) static unsigned int soc_common_pcmcia_skt_state(struct soc_pcmcia_socket *skt)
{ {
struct pcmcia_state state; struct pcmcia_state state;
......
...@@ -112,10 +112,17 @@ struct pcmcia_irqs { ...@@ -112,10 +112,17 @@ struct pcmcia_irqs {
const char *str; const char *str;
}; };
struct soc_pcmcia_timing {
unsigned short io;
unsigned short mem;
unsigned short attr;
};
extern int soc_pcmcia_request_irqs(struct soc_pcmcia_socket *skt, struct pcmcia_irqs *irqs, int nr); extern int soc_pcmcia_request_irqs(struct soc_pcmcia_socket *skt, struct pcmcia_irqs *irqs, int nr);
extern void soc_pcmcia_free_irqs(struct soc_pcmcia_socket *skt, struct pcmcia_irqs *irqs, int nr); extern void soc_pcmcia_free_irqs(struct soc_pcmcia_socket *skt, struct pcmcia_irqs *irqs, int nr);
extern void soc_pcmcia_disable_irqs(struct soc_pcmcia_socket *skt, struct pcmcia_irqs *irqs, int nr); extern void soc_pcmcia_disable_irqs(struct soc_pcmcia_socket *skt, struct pcmcia_irqs *irqs, int nr);
extern void soc_pcmcia_enable_irqs(struct soc_pcmcia_socket *skt, struct pcmcia_irqs *irqs, int nr); extern void soc_pcmcia_enable_irqs(struct soc_pcmcia_socket *skt, struct pcmcia_irqs *irqs, int nr);
extern void soc_common_pcmcia_get_timing(struct soc_pcmcia_socket *, struct soc_pcmcia_timing *);
extern struct list_head soc_pcmcia_sockets; extern struct list_head soc_pcmcia_sockets;
......
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