summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@ppc970.osdl.org>2004-12-12 22:18:00 -0800
committerLinus Torvalds <torvalds@ppc970.osdl.org>2004-12-12 22:18:00 -0800
commit37658b57a1f476cca74ca579332b7ba84bc689b7 (patch)
treecf5252e6f3b67cb0f05ee2caa44d41b5f0ddba07
parentaad1aaf4e494e87acb8bc3975db16783ef484b1c (diff)
parentab1d490aaecf346fd9bd07bd46b127811fff63a4 (diff)
Merge bk://bk.arm.linux.org.uk/linux-2.6-rmk
into ppc970.osdl.org:/home/torvalds/v2.6/linux
-rw-r--r--arch/arm/Kconfig31
-rw-r--r--arch/arm/mach-ixp4xx/common-pci.c4
-rw-r--r--arch/arm/mach-s3c2410/pm.c4
-rw-r--r--arch/arm/mach-sa1100/assabet.c43
-rw-r--r--arch/arm/mach-sa1100/generic.c35
-rw-r--r--arch/arm/mach-sa1100/generic.h3
-rw-r--r--arch/arm/mach-sa1100/h3600.c26
-rw-r--r--drivers/net/irda/sa1100_ir.c129
-rw-r--r--include/asm-arm/arch-ixp4xx/io.h6
-rw-r--r--include/asm-arm/arch-pxa/pxa-regs.h2
-rw-r--r--include/asm-arm/mach/irda.h20
11 files changed, 182 insertions, 121 deletions
diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig
index 5a128caa8156..da2c65c9baf3 100644
--- a/arch/arm/Kconfig
+++ b/arch/arm/Kconfig
@@ -322,26 +322,35 @@ config FIQ
# Compressed boot loader in ROM. Yes, we really want to ask about
# TEXT and BSS so we preserve their values in the config files.
-config ZBOOT_ROM
- bool "Compressed boot loader in ROM/flash"
- help
- Say Y here if you intend to execute your compressed kernel image (zImage)
- directly from ROM or flash. If unsure, say N.
-
config ZBOOT_ROM_TEXT
hex "Compressed ROM boot loader base address"
default "0"
help
- The base address for zImage. Unless you have special requirements, you
- should not change this value.
+ The physical address at which the ROM-able zImage is to be
+ placed in the target. Platforms which normally make use of
+ ROM-able zImage formats normally set this to a suitable
+ value in their defconfig file.
+
+ If ZBOOT_ROM is not enabled, this has no effect.
config ZBOOT_ROM_BSS
hex "Compressed ROM boot loader BSS address"
default "0"
help
- The base address of 64KiB of read/write memory, which must be available
- while the decompressor is running. Unless you have special requirements,
- you should not change this value.
+ The base address of 64KiB of read/write memory in the target
+ for the ROM-able zImage, which must be available while the
+ decompressor is running. Platforms which normally make use of
+ ROM-able zImage formats normally set this to a suitable
+ value in their defconfig file.
+
+ If ZBOOT_ROM is not enabled, this has no effect.
+
+config ZBOOT_ROM
+ bool "Compressed boot loader in ROM/flash"
+ depends on ZBOOT_ROM_TEXT != ZBOOT_ROM_BSS
+ help
+ Say Y here if you intend to execute your compressed kernel image
+ (zImage) directly from ROM or flash. If unsure, say N.
config XIP_KERNEL
bool "Kernel Execute-In-Place from ROM"
diff --git a/arch/arm/mach-ixp4xx/common-pci.c b/arch/arm/mach-ixp4xx/common-pci.c
index 2c7067f27e38..69486bde92de 100644
--- a/arch/arm/mach-ixp4xx/common-pci.c
+++ b/arch/arm/mach-ixp4xx/common-pci.c
@@ -238,7 +238,7 @@ static u32 byte_lane_enable_bits(u32 n, int size)
return 0xffffffff;
}
-static int ixp4xx_pci_read_config(struct pci_bus *bus, u16 devfn, int where, int size, u32 *value)
+static int ixp4xx_pci_read_config(struct pci_bus *bus, unsigned int devfn, int where, int size, u32 *value)
{
u32 n, byte_enables, addr, data;
u8 bus_num = bus->number;
@@ -261,7 +261,7 @@ static int ixp4xx_pci_read_config(struct pci_bus *bus, u16 devfn, int where, int
return PCIBIOS_SUCCESSFUL;
}
-static int ixp4xx_pci_write_config(struct pci_bus *bus, u16 devfn, int where, int size, u32 value)
+static int ixp4xx_pci_write_config(struct pci_bus *bus, unsigned int devfn, int where, int size, u32 value)
{
u32 n, byte_enables, addr, data;
u8 bus_num = bus->number;
diff --git a/arch/arm/mach-s3c2410/pm.c b/arch/arm/mach-s3c2410/pm.c
index 5ae6d7ff18c9..ea7c25a50c73 100644
--- a/arch/arm/mach-s3c2410/pm.c
+++ b/arch/arm/mach-s3c2410/pm.c
@@ -187,6 +187,8 @@ static void s3c2410_pm_debug_init(void)
#define DBG(fmt...) printk(KERN_DEBUG fmt)
#define s3c2410_pm_debug_init() do { } while(0)
+
+static struct sleep_save uart_save[] = {};
#endif
#if defined(CONFIG_S3C2410_PM_CHECK) && CONFIG_S3C2410_PM_CHECK_CHUNKSIZE != 0
@@ -378,8 +380,6 @@ static void s3c2410_pm_check_restore(void)
#else
-static struct sleep_save uart_save[] = {};
-
#define s3c2410_pm_check_prepare() do { } while(0)
#define s3c2410_pm_check_restore() do { } while(0)
#define s3c2410_pm_check_store() do { } while(0)
diff --git a/arch/arm/mach-sa1100/assabet.c b/arch/arm/mach-sa1100/assabet.c
index df955410e5cc..a3003b867555 100644
--- a/arch/arm/mach-sa1100/assabet.c
+++ b/arch/arm/mach-sa1100/assabet.c
@@ -31,6 +31,7 @@
#include <asm/mach/arch.h>
#include <asm/mach/flash.h>
+#include <asm/mach/irda.h>
#include <asm/mach/map.h>
#include <asm/mach/serial_sa1100.h>
#include <asm/arch/assabet.h>
@@ -94,6 +95,11 @@ static void assabet_lcd_power(int on)
ASSABET_BCR_clear(ASSABET_BCR_LCD_ON);
}
+
+/*
+ * Assabet flash support code.
+ */
+
#ifdef ASSABET_REV_4
/*
* Phase 4 Assabet has two 28F160B3 flash parts in bank 0:
@@ -156,6 +162,42 @@ static struct resource assabet_flash_resources[] = {
}
};
+
+/*
+ * Assabet IrDA support code.
+ */
+
+static int assabet_irda_set_power(struct device *dev, unsigned int state)
+{
+ static unsigned int bcr_state[4] = {
+ ASSABET_BCR_IRDA_MD0,
+ ASSABET_BCR_IRDA_MD1|ASSABET_BCR_IRDA_MD0,
+ ASSABET_BCR_IRDA_MD1,
+ 0
+ };
+
+ if (state < 4) {
+ state = bcr_state[state];
+ ASSABET_BCR_clear(state ^ (ASSABET_BCR_IRDA_MD1|
+ ASSABET_BCR_IRDA_MD0));
+ ASSABET_BCR_set(state);
+ }
+ return 0;
+}
+
+static void assabet_irda_set_speed(struct device *dev, unsigned int speed)
+{
+ if (speed < 4000000)
+ ASSABET_BCR_clear(ASSABET_BCR_IRDA_FSEL);
+ else
+ ASSABET_BCR_set(ASSABET_BCR_IRDA_FSEL);
+}
+
+static struct irda_platform_data assabet_irda_data = {
+ .set_power = assabet_irda_set_power,
+ .set_speed = assabet_irda_set_speed,
+};
+
static void __init assabet_init(void)
{
/*
@@ -203,6 +245,7 @@ static void __init assabet_init(void)
sa11x0_set_flash_data(&assabet_flash_data, assabet_flash_resources,
ARRAY_SIZE(assabet_flash_resources));
+ sa11x0_set_irda_data(&assabet_irda_data);
}
/*
diff --git a/arch/arm/mach-sa1100/generic.c b/arch/arm/mach-sa1100/generic.c
index 2d1aa9391d00..95ae217be1bc 100644
--- a/arch/arm/mach-sa1100/generic.c
+++ b/arch/arm/mach-sa1100/generic.c
@@ -283,6 +283,38 @@ void sa11x0_set_flash_data(struct flash_platform_data *flash,
sa11x0mtd_device.num_resources = nr;
}
+static struct resource sa11x0ir_resources[] = {
+ {
+ .start = __PREG(Ser2UTCR0),
+ .end = __PREG(Ser2UTCR0) + 0x24 - 1,
+ .flags = IORESOURCE_MEM,
+ }, {
+ .start = __PREG(Ser2HSCR0),
+ .end = __PREG(Ser2HSCR0) + 0x1c - 1,
+ .flags = IORESOURCE_MEM,
+ }, {
+ .start = __PREG(Ser2HSCR2),
+ .end = __PREG(Ser2HSCR2) + 0x04 - 1,
+ .flags = IORESOURCE_MEM,
+ }, {
+ .start = IRQ_Ser2ICP,
+ .end = IRQ_Ser2ICP,
+ .flags = IORESOURCE_IRQ,
+ }
+};
+
+static struct platform_device sa11x0ir_device = {
+ .name = "sa11x0-ir",
+ .id = -1,
+ .num_resources = ARRAY_SIZE(sa11x0ir_resources),
+ .resource = sa11x0ir_resources,
+};
+
+void sa11x0_set_irda_data(struct irda_platform_data *irda)
+{
+ sa11x0ir_device.dev.platform_data = irda;
+}
+
static struct platform_device *sa11x0_devices[] __initdata = {
&sa11x0udc_device,
&sa11x0uart1_device,
@@ -298,6 +330,9 @@ static int __init sa1100_init(void)
{
pm_power_off = sa1100_power_off;
+ if (sa11x0ir_device.dev.platform_data)
+ platform_device_register(&sa11x0ir_device);
+
return platform_add_devices(sa11x0_devices, ARRAY_SIZE(sa11x0_devices));
}
diff --git a/arch/arm/mach-sa1100/generic.h b/arch/arm/mach-sa1100/generic.h
index a72ad2de9aeb..bfe41da9923e 100644
--- a/arch/arm/mach-sa1100/generic.h
+++ b/arch/arm/mach-sa1100/generic.h
@@ -33,3 +33,6 @@ struct resource;
extern void sa11x0_set_flash_data(struct flash_platform_data *flash,
struct resource *res, int nr);
+
+struct irda_platform_data;
+void sa11x0_set_irda_data(struct irda_platform_data *irda);
diff --git a/arch/arm/mach-sa1100/h3600.c b/arch/arm/mach-sa1100/h3600.c
index 5a0933c6d2ac..9788d3aefa73 100644
--- a/arch/arm/mach-sa1100/h3600.c
+++ b/arch/arm/mach-sa1100/h3600.c
@@ -38,6 +38,7 @@
#include <asm/mach/irq.h>
#include <asm/mach/arch.h>
#include <asm/mach/flash.h>
+#include <asm/mach/irda.h>
#include <asm/mach/map.h>
#include <asm/mach/serial_sa1100.h>
@@ -119,9 +120,34 @@ static struct resource h3xxx_flash_resource = {
.flags = IORESOURCE_MEM,
};
+/*
+ * This turns the IRDA power on or off on the Compaq H3600
+ */
+static int h3600_irda_set_power(struct device *dev, unsigned int state)
+{
+ assign_h3600_egpio( IPAQ_EGPIO_IR_ON, state );
+
+ return 0;
+}
+
+static void h3600_irda_set_speed(struct device *dev, int speed)
+{
+ if (speed < 4000000) {
+ clr_h3600_egpio(IPAQ_EGPIO_IR_FSEL);
+ } else {
+ set_h3600_egpio(IPAQ_EGPIO_IR_FSEL);
+ }
+}
+
+static struct irda_platform_data h3600_irda_data = {
+ .set_power = h3600_irda_set_power,
+ .set_speed = h3600_irda_set_speed,
+};
+
static void h3xxx_mach_init(void)
{
sa11x0_set_flash_data(&h3xxx_flash_data, &h3xxx_flash_resource, 1);
+ sa11x0_set_irda_data(&h3600_irda_data);
}
/*
diff --git a/drivers/net/irda/sa1100_ir.c b/drivers/net/irda/sa1100_ir.c
index c4b7b2a27e7c..89f5096cab74 100644
--- a/drivers/net/irda/sa1100_ir.c
+++ b/drivers/net/irda/sa1100_ir.c
@@ -39,19 +39,7 @@
#include <asm/irq.h>
#include <asm/dma.h>
#include <asm/hardware.h>
-#include <asm/mach-types.h>
-
-#include <asm/arch/assabet.h>
-#include <asm/arch/h3600.h>
-#include <asm/arch/yopy.h>
-
-#ifndef GPIO_IRDA_FIR
-#define GPIO_IRDA_FIR (0)
-#endif
-
-#ifndef GPIO_IRDA_POWER
-#define GPIO_IRDA_POWER (0)
-#endif
+#include <asm/mach/irda.h>
static int power_level = 3;
static int tx_lpm;
@@ -75,6 +63,7 @@ struct sa1100_irda {
struct net_device_stats stats;
struct device *dev;
+ struct irda_platform_data *pdata;
struct irlap_cb *irlap;
struct qos_info qos;
@@ -170,12 +159,8 @@ static int sa1100_irda_set_speed(struct sa1100_irda *si, int speed)
Ser2UTSR0 = UTSR0_REB | UTSR0_RBB | UTSR0_RID;
Ser2UTCR3 = UTCR3_RIE | UTCR3_RXE | UTCR3_TXE;
- if (machine_is_assabet())
- ASSABET_BCR_clear(ASSABET_BCR_IRDA_FSEL);
- if (machine_is_h3xxx())
- clr_h3600_egpio(IPAQ_EGPIO_IR_FSEL);
- if (machine_is_yopy())
- PPSR &= ~GPIO_IRDA_FIR;
+ if (si->pdata->set_speed)
+ si->pdata->set_speed(si->dev, speed);
si->speed = speed;
@@ -194,12 +179,8 @@ static int sa1100_irda_set_speed(struct sa1100_irda *si, int speed)
si->speed = speed;
- if (machine_is_assabet())
- ASSABET_BCR_set(ASSABET_BCR_IRDA_FSEL);
- if (machine_is_h3xxx())
- set_h3600_egpio(IPAQ_EGPIO_IR_FSEL);
- if (machine_is_yopy())
- PPSR |= GPIO_IRDA_FIR;
+ if (si->pdata->set_speed)
+ si->pdata->set_speed(si->dev, speed);
sa1100_irda_rx_alloc(si);
sa1100_irda_rx_dma_start(si);
@@ -216,51 +197,6 @@ static int sa1100_irda_set_speed(struct sa1100_irda *si, int speed)
}
/*
- * This sets the IRDA power level on the Assabet.
- */
-static inline int
-sa1100_irda_set_power_assabet(struct sa1100_irda *si, unsigned int state)
-{
- static unsigned int bcr_state[4] = {
- ASSABET_BCR_IRDA_MD0,
- ASSABET_BCR_IRDA_MD1|ASSABET_BCR_IRDA_MD0,
- ASSABET_BCR_IRDA_MD1,
- 0
- };
-
- if (state < 4) {
- state = bcr_state[state];
- ASSABET_BCR_clear(state ^ (ASSABET_BCR_IRDA_MD1|
- ASSABET_BCR_IRDA_MD0));
- ASSABET_BCR_set(state);
- }
- return 0;
-}
-
-/*
- * This turns the IRDA power on or off on the Compaq H3600
- */
-static inline int
-sa1100_irda_set_power_h3600(struct sa1100_irda *si, unsigned int state)
-{
- assign_h3600_egpio( IPAQ_EGPIO_IR_ON, state );
- return 0;
-}
-
-/*
- * This turns the IRDA power on or off on the Yopy
- */
-static inline int
-sa1100_irda_set_power_yopy(struct sa1100_irda *si, unsigned int state)
-{
- if (state)
- PPSR &= ~GPIO_IRDA_POWER;
- else
- PPSR |= GPIO_IRDA_POWER;
- return 0;
-}
-
-/*
* Control the power state of the IrDA transmitter.
* State:
* 0 - off
@@ -274,14 +210,8 @@ static int
__sa1100_irda_set_power(struct sa1100_irda *si, unsigned int state)
{
int ret = 0;
-
- if (machine_is_assabet())
- ret = sa1100_irda_set_power_assabet(si, state);
- if (machine_is_h3xxx())
- ret = sa1100_irda_set_power_h3600(si, state);
- if (machine_is_yopy())
- ret = sa1100_irda_set_power_yopy(si, state);
-
+ if (si->pdata->set_power)
+ ret = si->pdata->set_power(si->dev, state);
return ret;
}
@@ -304,11 +234,8 @@ static int sa1100_irda_startup(struct sa1100_irda *si)
/*
* Ensure that the ports for this device are setup correctly.
*/
- if (machine_is_yopy()) {
- PPDR |= GPIO_IRDA_POWER | GPIO_IRDA_FIR;
- PPSR |= GPIO_IRDA_POWER | GPIO_IRDA_FIR;
- PSDR |= GPIO_IRDA_POWER | GPIO_IRDA_FIR;
- }
+ if (si->pdata->startup)
+ si->pdata->startup(si->dev);
/*
* Configure PPC for IRDA - we want to drive TXD2 low.
@@ -333,10 +260,15 @@ static int sa1100_irda_startup(struct sa1100_irda *si)
Ser2UTSR0 = UTSR0_REB | UTSR0_RBB | UTSR0_RID;
ret = sa1100_irda_set_speed(si, si->speed = 9600);
- if (ret)
- return ret;
+ if (ret) {
+ Ser2UTCR3 = 0;
+ Ser2HSCR0 = 0;
- return 0;
+ if (si->pdata->shutdown)
+ si->pdata->shutdown(si->dev);
+ }
+
+ return ret;
}
static void sa1100_irda_shutdown(struct sa1100_irda *si)
@@ -350,6 +282,9 @@ static void sa1100_irda_shutdown(struct sa1100_irda *si)
/* Disable the port. */
Ser2UTCR3 = 0;
Ser2HSCR0 = 0;
+
+ if (si->pdata->shutdown)
+ si->pdata->shutdown(si->dev);
}
#ifdef CONFIG_PM
@@ -959,6 +894,9 @@ static int sa1100_irda_probe(struct device *_dev)
unsigned int baudrate_mask;
int err;
+ if (!pdev->dev.platform_data)
+ return -EINVAL;
+
err = request_mem_region(__PREG(Ser2UTCR0), 0x24, "IrDA") ? 0 : -EBUSY;
if (err)
goto err_mem_1;
@@ -975,6 +913,7 @@ static int sa1100_irda_probe(struct device *_dev)
si = dev->priv;
si->dev = &pdev->dev;
+ si->pdata = pdev->dev.platform_data;
/*
* Initialise the HP-SIR buffers
@@ -1028,7 +967,7 @@ static int sa1100_irda_probe(struct device *_dev)
err = register_netdev(dev);
if (err == 0)
- dev_set_drvdata(&pdev->dev, si);
+ dev_set_drvdata(&pdev->dev, dev);
if (err) {
err_mem_5:
@@ -1074,15 +1013,8 @@ static struct device_driver sa1100ir_driver = {
.resume = sa1100_irda_resume,
};
-static struct platform_device sa1100ir_device = {
- .name = "sa11x0-ir",
- .id = 0,
-};
-
static int __init sa1100_irda_init(void)
{
- int ret;
-
/*
* Limit power level a sensible range.
*/
@@ -1091,19 +1023,12 @@ static int __init sa1100_irda_init(void)
if (power_level > 3)
power_level = 3;
- ret = driver_register(&sa1100ir_driver);
- if (ret == 0) {
- ret = platform_device_register(&sa1100ir_device);
- if (ret)
- driver_unregister(&sa1100ir_driver);
- }
- return ret;
+ return driver_register(&sa1100ir_driver);
}
static void __exit sa1100_irda_exit(void)
{
driver_unregister(&sa1100ir_driver);
- platform_device_unregister(&sa1100ir_device);
}
module_init(sa1100_irda_init);
diff --git a/include/asm-arm/arch-ixp4xx/io.h b/include/asm-arm/arch-ixp4xx/io.h
index ea9f8333d26d..c27b9d3079a7 100644
--- a/include/asm-arm/arch-ixp4xx/io.h
+++ b/include/asm-arm/arch-ixp4xx/io.h
@@ -292,7 +292,7 @@ __ixp4xx_outb(u8 value, u32 addr)
}
static inline void
-__ixp4xx_outsb(u32 io_addr, u8 *vaddr, u32 count)
+__ixp4xx_outsb(u32 io_addr, const u8 *vaddr, u32 count)
{
while (count--)
outb(*vaddr++, io_addr);
@@ -309,7 +309,7 @@ __ixp4xx_outw(u16 value, u32 addr)
}
static inline void
-__ixp4xx_outsw(u32 io_addr, u16 *vaddr, u32 count)
+__ixp4xx_outsw(u32 io_addr, const u16 *vaddr, u32 count)
{
while (count--)
outw(cpu_to_le16(*vaddr++), io_addr);
@@ -322,7 +322,7 @@ __ixp4xx_outl(u32 value, u32 addr)
}
static inline void
-__ixp4xx_outsl(u32 io_addr, u32 *vaddr, u32 count)
+__ixp4xx_outsl(u32 io_addr, const u32 *vaddr, u32 count)
{
while (count--)
outl(*vaddr++, io_addr);
diff --git a/include/asm-arm/arch-pxa/pxa-regs.h b/include/asm-arm/arch-pxa/pxa-regs.h
index 1f36b66be63c..c43cafe17e19 100644
--- a/include/asm-arm/arch-pxa/pxa-regs.h
+++ b/include/asm-arm/arch-pxa/pxa-regs.h
@@ -1494,7 +1494,7 @@
#define PVCR_CommandDelay (0xf80)
#define PCFR_PI2C_EN (0x1 << 6)
-#define PSSR_OTGPH (1 << 7) /* OTG Peripheral control Hold */
+#define PSSR_OTGPH (1 << 6) /* OTG Peripheral control Hold */
#define PSSR_RDH (1 << 5) /* Read Disable Hold */
#define PSSR_PH (1 << 4) /* Peripheral Control Hold */
#define PSSR_VFS (1 << 2) /* VDD Fault Status */
diff --git a/include/asm-arm/mach/irda.h b/include/asm-arm/mach/irda.h
new file mode 100644
index 000000000000..58984d9c0b0b
--- /dev/null
+++ b/include/asm-arm/mach/irda.h
@@ -0,0 +1,20 @@
+/*
+ * linux/include/asm-arm/mach/irda.h
+ *
+ * Copyright (C) 2004 Russell King.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ */
+#ifndef __ASM_ARM_MACH_IRDA_H
+#define __ASM_ARM_MACH_IRDA_H
+
+struct irda_platform_data {
+ int (*startup)(struct device *);
+ void (*shutdown)(struct device *);
+ int (*set_power)(struct device *, unsigned int state);
+ void (*set_speed)(struct device *, unsigned int speed);
+};
+
+#endif