Commit 36b963a6 authored by Linus Torvalds's avatar Linus Torvalds

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

into ppc970.osdl.org:/home/torvalds/v2.6/linux
parents 8522703f 912eb572
...@@ -236,7 +236,7 @@ config SHARP_LOCOMO ...@@ -236,7 +236,7 @@ config SHARP_LOCOMO
config SHARP_SCOOP config SHARP_SCOOP
bool bool
depends on PXA_SHARPSL depends on PXA_SHARPSL || SA1100_COLLIE
default y default y
config FORCE_MAX_ZONEORDER config FORCE_MAX_ZONEORDER
......
...@@ -406,7 +406,7 @@ err_str: ...@@ -406,7 +406,7 @@ err_str:
* calculate the offset. * calculate the offset.
* *
* Returns: * Returns:
* r3, r6 corrupted * r3, r4, r6 corrupted
* r5 = proc_info pointer in physical address space * r5 = proc_info pointer in physical address space
* r9 = cpuid * r9 = cpuid
*/ */
...@@ -418,9 +418,9 @@ __lookup_processor_type: ...@@ -418,9 +418,9 @@ __lookup_processor_type:
add r5, r5, r3 @ convert virt addresses to add r5, r5, r3 @ convert virt addresses to
add r6, r6, r3 @ physical address space add r6, r6, r3 @ physical address space
mrc p15, 0, r9, c0, c0 @ get processor id mrc p15, 0, r9, c0, c0 @ get processor id
1: ldmia r5, {r3, r10} @ value, mask 1: ldmia r5, {r3, r4} @ value, mask
and r10, r10, r9 @ mask wanted bits and r4, r4, r9 @ mask wanted bits
teq r3, r10 teq r3, r4
beq 2f beq 2f
add r5, r5, #PROC_INFO_SZ @ sizeof(proc_info_list) add r5, r5, #PROC_INFO_SZ @ sizeof(proc_info_list)
cmp r5, r6 cmp r5, r6
...@@ -428,6 +428,15 @@ __lookup_processor_type: ...@@ -428,6 +428,15 @@ __lookup_processor_type:
mov r5, #0 @ unknown processor mov r5, #0 @ unknown processor
2: mov pc, lr 2: mov pc, lr
/*
* This provides a C-API version of the above function.
*/
ENTRY(lookup_processor_type)
stmfd sp!, {r4 - r6, r9, lr}
bl __lookup_processor_type
mov r0, r5
ldmfd sp!, {r4 - r6, r9, pc}
/* /*
* Look in include/asm-arm/procinfo.h and arch/arm/kernel/arch.[ch] for * Look in include/asm-arm/procinfo.h and arch/arm/kernel/arch.[ch] for
* more information about the __proc_info and __arch_info structures. * more information about the __proc_info and __arch_info structures.
...@@ -464,3 +473,13 @@ __lookup_machine_type: ...@@ -464,3 +473,13 @@ __lookup_machine_type:
blt 1b blt 1b
mov r5, #0 @ unknown machine mov r5, #0 @ unknown machine
2: mov pc, lr 2: mov pc, lr
/*
* This provides a C-API version of the above function.
*/
ENTRY(lookup_machine_type)
stmfd sp!, {r4 - r6, lr}
mov r1, r0
bl __lookup_machine_type
mov r0, r5
ldmfd sp!, {r4 - r6, pc}
...@@ -221,12 +221,12 @@ static const char *proc_arch[] = { ...@@ -221,12 +221,12 @@ static const char *proc_arch[] = {
#define CACHE_M(y) ((y) & (1 << 2)) #define CACHE_M(y) ((y) & (1 << 2))
#define CACHE_LINE(y) ((y) & 3) #define CACHE_LINE(y) ((y) & 3)
static inline void dump_cache(const char *prefix, unsigned int cache) static inline void dump_cache(const char *prefix, int cpu, unsigned int cache)
{ {
unsigned int mult = 2 + (CACHE_M(cache) ? 1 : 0); unsigned int mult = 2 + (CACHE_M(cache) ? 1 : 0);
printk("%s: %d bytes, associativity %d, %d byte lines, %d sets\n", printk("CPU%u: %s: %d bytes, associativity %d, %d byte lines, %d sets\n",
prefix, cpu, prefix,
mult << (8 + CACHE_SIZE(cache)), mult << (8 + CACHE_SIZE(cache)),
(mult << CACHE_ASSOC(cache)) >> 1, (mult << CACHE_ASSOC(cache)) >> 1,
8 << CACHE_LINE(cache), 8 << CACHE_LINE(cache),
...@@ -234,18 +234,18 @@ static inline void dump_cache(const char *prefix, unsigned int cache) ...@@ -234,18 +234,18 @@ static inline void dump_cache(const char *prefix, unsigned int cache)
CACHE_LINE(cache))); CACHE_LINE(cache)));
} }
static void __init dump_cpu_info(void) static void __init dump_cpu_info(int cpu)
{ {
unsigned int info = read_cpuid(CPUID_CACHETYPE); unsigned int info = read_cpuid(CPUID_CACHETYPE);
if (info != processor_id) { if (info != processor_id) {
printk("CPU: D %s %s cache\n", cache_is_vivt() ? "VIVT" : "VIPT", printk("CPU%u: D %s %s cache\n", cpu, cache_is_vivt() ? "VIVT" : "VIPT",
cache_types[CACHE_TYPE(info)]); cache_types[CACHE_TYPE(info)]);
if (CACHE_S(info)) { if (CACHE_S(info)) {
dump_cache("CPU: I cache", CACHE_ISIZE(info)); dump_cache("I cache", cpu, CACHE_ISIZE(info));
dump_cache("CPU: D cache", CACHE_DSIZE(info)); dump_cache("D cache", cpu, CACHE_DSIZE(info));
} else { } else {
dump_cache("CPU: cache", CACHE_ISIZE(info)); dump_cache("cache", cpu, CACHE_ISIZE(info));
} }
} }
} }
...@@ -267,9 +267,15 @@ int cpu_architecture(void) ...@@ -267,9 +267,15 @@ int cpu_architecture(void)
return cpu_arch; return cpu_arch;
} }
/*
* These functions re-use the assembly code in head.S, which
* already provide the required functionality.
*/
extern struct proc_info_list *lookup_processor_type(void);
extern struct machine_desc *lookup_machine_type(unsigned int);
static void __init setup_processor(void) static void __init setup_processor(void)
{ {
extern struct proc_info_list __proc_info_begin, __proc_info_end;
struct proc_info_list *list; struct proc_info_list *list;
/* /*
...@@ -277,15 +283,8 @@ static void __init setup_processor(void) ...@@ -277,15 +283,8 @@ static void __init setup_processor(void)
* types. The linker builds this table for us from the * types. The linker builds this table for us from the
* entries in arch/arm/mm/proc-*.S * entries in arch/arm/mm/proc-*.S
*/ */
for (list = &__proc_info_begin; list < &__proc_info_end ; list++) list = lookup_processor_type();
if ((processor_id & list->cpu_mask) == list->cpu_val) if (!list) {
break;
/*
* If processor type is unrecognised, then we
* can do nothing...
*/
if (list >= &__proc_info_end) {
printk("CPU configuration botched (ID %08x), unable " printk("CPU configuration botched (ID %08x), unable "
"to continue.\n", processor_id); "to continue.\n", processor_id);
while (1); while (1);
...@@ -310,7 +309,7 @@ static void __init setup_processor(void) ...@@ -310,7 +309,7 @@ static void __init setup_processor(void)
cpu_name, processor_id, (int)processor_id & 15, cpu_name, processor_id, (int)processor_id & 15,
proc_arch[cpu_architecture()]); proc_arch[cpu_architecture()]);
dump_cpu_info(); dump_cpu_info(smp_processor_id());
sprintf(system_utsname.machine, "%s%c", list->arch_name, ENDIANNESS); sprintf(system_utsname.machine, "%s%c", list->arch_name, ENDIANNESS);
sprintf(elf_platform, "%s%c", list->elf_name, ENDIANNESS); sprintf(elf_platform, "%s%c", list->elf_name, ENDIANNESS);
...@@ -321,22 +320,14 @@ static void __init setup_processor(void) ...@@ -321,22 +320,14 @@ static void __init setup_processor(void)
static struct machine_desc * __init setup_machine(unsigned int nr) static struct machine_desc * __init setup_machine(unsigned int nr)
{ {
extern struct machine_desc __arch_info_begin, __arch_info_end;
struct machine_desc *list; struct machine_desc *list;
/* /*
* locate architecture in the list of supported architectures. * locate machine in the list of supported machines.
*/
for (list = &__arch_info_begin; list < &__arch_info_end; list++)
if (list->nr == nr)
break;
/*
* If the architecture type is not recognised, then we
* can co nothing...
*/ */
if (list >= &__arch_info_end) { list = lookup_machine_type(nr);
printk("Architecture configuration botched (nr %d), unable " if (!list) {
printk("Machine configuration botched (nr %d), unable "
"to continue.\n", nr); "to continue.\n", nr);
while (1); while (1);
} }
......
...@@ -314,67 +314,57 @@ static void ipi_cpu_stop(unsigned int cpu) ...@@ -314,67 +314,57 @@ static void ipi_cpu_stop(unsigned int cpu)
* *
* Bit 0 - Inter-processor function call * Bit 0 - Inter-processor function call
*/ */
void do_IPI(unsigned int ipimask, struct pt_regs *regs) void do_IPI(struct pt_regs *regs)
{ {
unsigned int cpu = smp_processor_id(); unsigned int cpu = smp_processor_id();
struct ipi_data *ipi = &per_cpu(ipi_data, cpu); struct ipi_data *ipi = &per_cpu(ipi_data, cpu);
ipi->ipi_count++; ipi->ipi_count++;
if (ipimask & (1 << 0)) { for (;;) {
for (;;) { unsigned long msgs;
unsigned long msgs;
spin_lock(&ipi->lock); spin_lock(&ipi->lock);
msgs = ipi->bits; msgs = ipi->bits;
ipi->bits = 0; ipi->bits = 0;
spin_unlock(&ipi->lock); spin_unlock(&ipi->lock);
if (!msgs)
break;
if (!msgs) do {
unsigned nextmsg;
nextmsg = msgs & -msgs;
msgs &= ~nextmsg;
nextmsg = ffz(~nextmsg);
switch (nextmsg) {
case IPI_TIMER:
ipi_timer(regs);
break; break;
do { case IPI_RESCHEDULE:
unsigned nextmsg; /*
* nothing more to do - eveything is
nextmsg = msgs & -msgs; * done on the interrupt return path
msgs &= ~nextmsg; */
nextmsg = ffz(~nextmsg); break;
switch (nextmsg) { case IPI_CALL_FUNC:
case IPI_TIMER: ipi_call_function(cpu);
ipi_timer(regs); break;
break;
case IPI_RESCHEDULE:
/*
* nothing more to do - eveything is
* done on the interrupt return path
*/
break;
case IPI_CALL_FUNC:
ipi_call_function(cpu);
break;
case IPI_CPU_STOP:
ipi_cpu_stop(cpu);
break;
default:
printk(KERN_CRIT "CPU%u: Unknown IPI message 0x%x\n",
cpu, nextmsg);
break;
}
} while (msgs);
}
ipimask &= ~0x01;
}
if (ipimask) { case IPI_CPU_STOP:
printk(KERN_CRIT "CPU %d: Unknown IPI signal %x!\n", ipi_cpu_stop(cpu);
cpu, ipimask); break;
BUG();
default:
printk(KERN_CRIT "CPU%u: Unknown IPI message 0x%x\n",
cpu, nextmsg);
break;
}
} while (msgs);
} }
} }
......
...@@ -23,6 +23,7 @@ ...@@ -23,6 +23,7 @@
* 10-Jan-2005 BJD Removed include of s3c2410.h * 10-Jan-2005 BJD Removed include of s3c2410.h
* 14-Jan-2005 BJD Added clock init * 14-Jan-2005 BJD Added clock init
* 15-Jan-2005 BJD Add serial port device definition * 15-Jan-2005 BJD Add serial port device definition
* 20-Jan-2005 BJD Use UPF_IOREMAP for ports
*/ */
#include <linux/kernel.h> #include <linux/kernel.h>
...@@ -78,10 +79,6 @@ static struct map_desc vr1000_iodesc[] __initdata = { ...@@ -78,10 +79,6 @@ static struct map_desc vr1000_iodesc[] __initdata = {
{ S3C2410_VA_ISA_BYTE, PA_CS2(BAST_PA_ISAIO), SZ_16M, MT_DEVICE }, { S3C2410_VA_ISA_BYTE, PA_CS2(BAST_PA_ISAIO), SZ_16M, MT_DEVICE },
{ S3C2410_VA_ISA_WORD, PA_CS3(BAST_PA_ISAIO), SZ_16M, MT_DEVICE }, { S3C2410_VA_ISA_WORD, PA_CS3(BAST_PA_ISAIO), SZ_16M, MT_DEVICE },
/* serial ports */
{ VR1000_VA_SERIAL, VR1000_PA_SERIAL, SZ_1M, MT_DEVICE },
/* we could possibly compress the next set down into a set of smaller tables /* we could possibly compress the next set down into a set of smaller tables
* pagetables, but that would mean using an L2 section, and it still means * pagetables, but that would mean using an L2 section, and it still means
* we cannot actually feed the same register to an LDR due to 16K spacing * we cannot actually feed the same register to an LDR due to 16K spacing
...@@ -183,42 +180,37 @@ static struct s3c2410_uartcfg vr1000_uartcfgs[] = { ...@@ -183,42 +180,37 @@ static struct s3c2410_uartcfg vr1000_uartcfgs[] = {
#define VR1000_BAUDBASE (3692307) #define VR1000_BAUDBASE (3692307)
#define VR1000_SERIAL_MEMBASE(x) ((void __iomem *)VR1000_VA_SERIAL + 0x80 + ((x) << 5))
#define VR1000_SERIAL_MAPBASE(x) (VR1000_PA_SERIAL + 0x80 + ((x) << 5)) #define VR1000_SERIAL_MAPBASE(x) (VR1000_PA_SERIAL + 0x80 + ((x) << 5))
static struct plat_serial8250_port serial_platform_data[] = { static struct plat_serial8250_port serial_platform_data[] = {
[0] = { [0] = {
.membase = VR1000_SERIAL_MEMBASE(0),
.mapbase = VR1000_SERIAL_MAPBASE(0), .mapbase = VR1000_SERIAL_MAPBASE(0),
.irq = IRQ_VR1000_SERIAL + 0, .irq = IRQ_VR1000_SERIAL + 0,
.flags = UPF_BOOT_AUTOCONF, .flags = UPF_BOOT_AUTOCONF | UPF_IOREMAP,
.iotype = UPIO_MEM, .iotype = UPIO_MEM,
.regshift = 0, .regshift = 0,
.uartclk = VR1000_BAUDBASE, .uartclk = VR1000_BAUDBASE,
}, },
[1] = { [1] = {
.membase = VR1000_SERIAL_MEMBASE(1),
.mapbase = VR1000_SERIAL_MAPBASE(1), .mapbase = VR1000_SERIAL_MAPBASE(1),
.irq = IRQ_VR1000_SERIAL + 1, .irq = IRQ_VR1000_SERIAL + 1,
.flags = UPF_BOOT_AUTOCONF, .flags = UPF_BOOT_AUTOCONF | UPF_IOREMAP,
.iotype = UPIO_MEM, .iotype = UPIO_MEM,
.regshift = 0, .regshift = 0,
.uartclk = VR1000_BAUDBASE, .uartclk = VR1000_BAUDBASE,
}, },
[2] = { [2] = {
.membase = VR1000_SERIAL_MEMBASE(2),
.mapbase = VR1000_SERIAL_MAPBASE(2), .mapbase = VR1000_SERIAL_MAPBASE(2),
.irq = IRQ_VR1000_SERIAL + 2, .irq = IRQ_VR1000_SERIAL + 2,
.flags = UPF_BOOT_AUTOCONF, .flags = UPF_BOOT_AUTOCONF | UPF_IOREMAP,
.iotype = UPIO_MEM, .iotype = UPIO_MEM,
.regshift = 0, .regshift = 0,
.uartclk = VR1000_BAUDBASE, .uartclk = VR1000_BAUDBASE,
}, },
[3] = { [3] = {
.membase = VR1000_SERIAL_MEMBASE(3),
.mapbase = VR1000_SERIAL_MAPBASE(3), .mapbase = VR1000_SERIAL_MAPBASE(3),
.irq = IRQ_VR1000_SERIAL + 3, .irq = IRQ_VR1000_SERIAL + 3,
.flags = UPF_BOOT_AUTOCONF, .flags = UPF_BOOT_AUTOCONF | UPF_IOREMAP,
.iotype = UPIO_MEM, .iotype = UPIO_MEM,
.regshift = 0, .regshift = 0,
.uartclk = VR1000_BAUDBASE, .uartclk = VR1000_BAUDBASE,
......
...@@ -37,36 +37,34 @@ ...@@ -37,36 +37,34 @@
#include <asm/mach/map.h> #include <asm/mach/map.h>
#include <asm/mach/serial_sa1100.h> #include <asm/mach/serial_sa1100.h>
#include <asm/hardware/scoop.h>
#include <asm/hardware/locomo.h> #include <asm/hardware/locomo.h>
#include "generic.h" #include "generic.h"
static void __init scoop_init(void) static struct resource collie_scoop_resources[] = {
{ [0] = {
.start = 0x40800000,
.end = 0x40800fff,
.flags = IORESOURCE_MEM,
},
};
#define COLLIE_SCP_INIT_DATA(adr,dat) (((adr)<<16)|(dat)) static struct scoop_config collie_scoop_setup = {
#define COLLIE_SCP_INIT_DATA_END ((unsigned long)-1) .io_dir = COLLIE_SCOOP_IO_DIR,
static const unsigned long scp_init[] = { .io_out = COLLIE_SCOOP_IO_OUT,
COLLIE_SCP_INIT_DATA(COLLIE_SCP_MCR, 0x0140), // 00 };
COLLIE_SCP_INIT_DATA(COLLIE_SCP_MCR, 0x0100),
COLLIE_SCP_INIT_DATA(COLLIE_SCP_CDR, 0x0000), // 04 static struct platform_device colliescoop_device = {
COLLIE_SCP_INIT_DATA(COLLIE_SCP_CPR, 0x0000), // 0C .name = "sharp-scoop",
COLLIE_SCP_INIT_DATA(COLLIE_SCP_CCR, 0x0000), // 10 .id = -1,
COLLIE_SCP_INIT_DATA(COLLIE_SCP_IMR, 0x0000), // 18 .dev = {
COLLIE_SCP_INIT_DATA(COLLIE_SCP_IRM, 0x00FF), // 14 .platform_data = &collie_scoop_setup,
COLLIE_SCP_INIT_DATA(COLLIE_SCP_ISR, 0x0000), // 1C },
COLLIE_SCP_INIT_DATA(COLLIE_SCP_IRM, 0x0000), .num_resources = ARRAY_SIZE(collie_scoop_resources),
COLLIE_SCP_INIT_DATA(COLLIE_SCP_GPCR, COLLIE_SCP_IO_DIR), // 20 .resource = collie_scoop_resources,
COLLIE_SCP_INIT_DATA(COLLIE_SCP_GPWR, COLLIE_SCP_IO_OUT), // 24 };
COLLIE_SCP_INIT_DATA_END
};
int i;
for (i = 0; scp_init[i] != COLLIE_SCP_INIT_DATA_END; i++) {
int adr = scp_init[i] >> 16;
COLLIE_SCP_REG(adr) = scp_init[i] & 0xFFFF;
}
}
static struct resource locomo_resources[] = { static struct resource locomo_resources[] = {
[0] = { [0] = {
...@@ -90,6 +88,7 @@ static struct platform_device locomo_device = { ...@@ -90,6 +88,7 @@ static struct platform_device locomo_device = {
static struct platform_device *devices[] __initdata = { static struct platform_device *devices[] __initdata = {
&locomo_device, &locomo_device,
&colliescoop_device,
}; };
static struct mtd_partition collie_partitions[] = { static struct mtd_partition collie_partitions[] = {
...@@ -111,11 +110,11 @@ static struct mtd_partition collie_partitions[] = { ...@@ -111,11 +110,11 @@ static struct mtd_partition collie_partitions[] = {
static void collie_set_vpp(int vpp) static void collie_set_vpp(int vpp)
{ {
COLLIE_SCP_REG_GPCR |= COLLIE_SCP_VPEN; write_scoop_reg(SCOOP_GPCR, read_scoop_reg(SCOOP_GPCR) | COLLIE_SCP_VPEN);
if (vpp) { if (vpp) {
COLLIE_SCP_REG_GPWR |= COLLIE_SCP_VPEN; write_scoop_reg(SCOOP_GPWR, read_scoop_reg(SCOOP_GPWR) | COLLIE_SCP_VPEN);
} else { } else {
COLLIE_SCP_REG_GPWR &= ~COLLIE_SCP_VPEN; write_scoop_reg(SCOOP_GPWR, read_scoop_reg(SCOOP_GPWR) & ~COLLIE_SCP_VPEN);
} }
} }
...@@ -160,8 +159,6 @@ static void __init collie_init(void) ...@@ -160,8 +159,6 @@ static void __init collie_init(void)
GPDR |= GPIO_32_768kHz; GPDR |= GPIO_32_768kHz;
TUCR = TUCR_32_768kHz; TUCR = TUCR_32_768kHz;
scoop_init();
ret = platform_add_devices(devices, ARRAY_SIZE(devices)); ret = platform_add_devices(devices, ARRAY_SIZE(devices));
if (ret) { if (ret) {
printk(KERN_WARNING "collie: Unable to register LoCoMo device\n"); printk(KERN_WARNING "collie: Unable to register LoCoMo device\n");
...@@ -175,7 +172,6 @@ static struct map_desc collie_io_desc[] __initdata = { ...@@ -175,7 +172,6 @@ static struct map_desc collie_io_desc[] __initdata = {
/* virtual physical length type */ /* virtual physical length type */
{0xe8000000, 0x00000000, 0x02000000, MT_DEVICE}, /* 32M main flash (cs0) */ {0xe8000000, 0x00000000, 0x02000000, MT_DEVICE}, /* 32M main flash (cs0) */
{0xea000000, 0x08000000, 0x02000000, MT_DEVICE}, /* 32M boot flash (cs1) */ {0xea000000, 0x08000000, 0x02000000, MT_DEVICE}, /* 32M boot flash (cs1) */
{0xf0000000, 0x40000000, 0x01000000, MT_DEVICE}, /* 16M LOCOMO & SCOOP (cs4) */
}; };
static void __init collie_map_io(void) static void __init collie_map_io(void)
......
...@@ -15,57 +15,20 @@ ...@@ -15,57 +15,20 @@
#include <linux/config.h> #include <linux/config.h>
#define CF_BUF_CTRL_BASE 0xF0800000 #define COLLIE_SCP_CHARGE_ON SCOOP_GPCR_PA11
#define COLLIE_SCP_REG(adr) (*(volatile unsigned short*)(CF_BUF_CTRL_BASE+(adr))) #define COLLIE_SCP_DIAG_BOOT1 SCOOP_GPCR_PA12
#define COLLIE_SCP_MCR 0x00 #define COLLIE_SCP_DIAG_BOOT2 SCOOP_GPCR_PA13
#define COLLIE_SCP_CDR 0x04 #define COLLIE_SCP_MUTE_L SCOOP_GPCR_PA14
#define COLLIE_SCP_CSR 0x08 #define COLLIE_SCP_MUTE_R SCOOP_GPCR_PA15
#define COLLIE_SCP_CPR 0x0C #define COLLIE_SCP_5VON SCOOP_GPCR_PA16
#define COLLIE_SCP_CCR 0x10 #define COLLIE_SCP_AMP_ON SCOOP_GPCR_PA17
#define COLLIE_SCP_IRR 0x14 #define COLLIE_SCP_VPEN SCOOP_GPCR_PA18
#define COLLIE_SCP_IRM 0x14 #define COLLIE_SCP_LB_VOL_CHG SCOOP_GPCR_PA19
#define COLLIE_SCP_IMR 0x18
#define COLLIE_SCP_ISR 0x1C #define COLLIE_SCOOP_IO_DIR ( COLLIE_SCP_CHARGE_ON | COLLIE_SCP_MUTE_L | COLLIE_SCP_MUTE_R | \
#define COLLIE_SCP_GPCR 0x20
#define COLLIE_SCP_GPWR 0x24
#define COLLIE_SCP_GPRR 0x28
#define COLLIE_SCP_REG_MCR COLLIE_SCP_REG(COLLIE_SCP_MCR)
#define COLLIE_SCP_REG_CDR COLLIE_SCP_REG(COLLIE_SCP_CDR)
#define COLLIE_SCP_REG_CSR COLLIE_SCP_REG(COLLIE_SCP_CSR)
#define COLLIE_SCP_REG_CPR COLLIE_SCP_REG(COLLIE_SCP_CPR)
#define COLLIE_SCP_REG_CCR COLLIE_SCP_REG(COLLIE_SCP_CCR)
#define COLLIE_SCP_REG_IRR COLLIE_SCP_REG(COLLIE_SCP_IRR)
#define COLLIE_SCP_REG_IRM COLLIE_SCP_REG(COLLIE_SCP_IRM)
#define COLLIE_SCP_REG_IMR COLLIE_SCP_REG(COLLIE_SCP_IMR)
#define COLLIE_SCP_REG_ISR COLLIE_SCP_REG(COLLIE_SCP_ISR)
#define COLLIE_SCP_REG_GPCR COLLIE_SCP_REG(COLLIE_SCP_GPCR)
#define COLLIE_SCP_REG_GPWR COLLIE_SCP_REG(COLLIE_SCP_GPWR)
#define COLLIE_SCP_REG_GPRR COLLIE_SCP_REG(COLLIE_SCP_GPRR)
#define COLLIE_SCP_GPCR_PA19 ( 1 << 9 )
#define COLLIE_SCP_GPCR_PA18 ( 1 << 8 )
#define COLLIE_SCP_GPCR_PA17 ( 1 << 7 )
#define COLLIE_SCP_GPCR_PA16 ( 1 << 6 )
#define COLLIE_SCP_GPCR_PA15 ( 1 << 5 )
#define COLLIE_SCP_GPCR_PA14 ( 1 << 4 )
#define COLLIE_SCP_GPCR_PA13 ( 1 << 3 )
#define COLLIE_SCP_GPCR_PA12 ( 1 << 2 )
#define COLLIE_SCP_GPCR_PA11 ( 1 << 1 )
#define COLLIE_SCP_CHARGE_ON COLLIE_SCP_GPCR_PA11
#define COLLIE_SCP_DIAG_BOOT1 COLLIE_SCP_GPCR_PA12
#define COLLIE_SCP_DIAG_BOOT2 COLLIE_SCP_GPCR_PA13
#define COLLIE_SCP_MUTE_L COLLIE_SCP_GPCR_PA14
#define COLLIE_SCP_MUTE_R COLLIE_SCP_GPCR_PA15
#define COLLIE_SCP_5VON COLLIE_SCP_GPCR_PA16
#define COLLIE_SCP_AMP_ON COLLIE_SCP_GPCR_PA17
#define COLLIE_SCP_VPEN COLLIE_SCP_GPCR_PA18
#define COLLIE_SCP_LB_VOL_CHG COLLIE_SCP_GPCR_PA19
#define COLLIE_SCP_IO_DIR ( COLLIE_SCP_CHARGE_ON | COLLIE_SCP_MUTE_L | COLLIE_SCP_MUTE_R | \
COLLIE_SCP_5VON | COLLIE_SCP_AMP_ON | COLLIE_SCP_VPEN | \ COLLIE_SCP_5VON | COLLIE_SCP_AMP_ON | COLLIE_SCP_VPEN | \
COLLIE_SCP_LB_VOL_CHG ) COLLIE_SCP_LB_VOL_CHG )
#define COLLIE_SCP_IO_OUT ( COLLIE_SCP_MUTE_L | COLLIE_SCP_MUTE_R | COLLIE_SCP_VPEN | \ #define COLLIE_SCOOP_IO_OUT ( COLLIE_SCP_MUTE_L | COLLIE_SCP_MUTE_R | COLLIE_SCP_VPEN | \
COLLIE_SCP_CHARGE_ON ) COLLIE_SCP_CHARGE_ON )
/* GPIOs for which the generic definition doesn't say much */ /* GPIOs for which the generic definition doesn't say much */
......
...@@ -210,8 +210,8 @@ extern void _change_bit_le(int nr, volatile unsigned long * p); ...@@ -210,8 +210,8 @@ extern void _change_bit_le(int nr, volatile unsigned long * p);
extern int _test_and_set_bit_le(int nr, volatile unsigned long * p); extern int _test_and_set_bit_le(int nr, volatile unsigned long * p);
extern int _test_and_clear_bit_le(int nr, volatile unsigned long * p); extern int _test_and_clear_bit_le(int nr, volatile unsigned long * p);
extern int _test_and_change_bit_le(int nr, volatile unsigned long * p); extern int _test_and_change_bit_le(int nr, volatile unsigned long * p);
extern int _find_first_zero_bit_le(void * p, unsigned size); extern int _find_first_zero_bit_le(const void * p, unsigned size);
extern int _find_next_zero_bit_le(void * p, int size, int offset); extern int _find_next_zero_bit_le(const void * p, int size, int offset);
extern int _find_first_bit_le(const unsigned long *p, unsigned size); extern int _find_first_bit_le(const unsigned long *p, unsigned size);
extern int _find_next_bit_le(const unsigned long *p, int size, int offset); extern int _find_next_bit_le(const unsigned long *p, int size, int offset);
......
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