diff options
172 files changed, 1906 insertions, 1791 deletions
diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig index 4b15f5f1e254..16a5d522b2f2 100644 --- a/arch/arm/Kconfig +++ b/arch/arm/Kconfig | |||
| @@ -154,6 +154,7 @@ config ARCH_RPC | |||
| 154 | select FIQ | 154 | select FIQ |
| 155 | select TIMER_ACORN | 155 | select TIMER_ACORN |
| 156 | select ARCH_MAY_HAVE_PC_FDC | 156 | select ARCH_MAY_HAVE_PC_FDC |
| 157 | select ISA_DMA_API | ||
| 157 | help | 158 | help |
| 158 | On the Acorn Risc-PC, Linux can support the internal IDE disk and | 159 | On the Acorn Risc-PC, Linux can support the internal IDE disk and |
| 159 | CD-ROM interface, serial and parallel port, and the floppy drive. | 160 | CD-ROM interface, serial and parallel port, and the floppy drive. |
| @@ -206,6 +207,7 @@ config ARCH_IMX | |||
| 206 | 207 | ||
| 207 | config ARCH_H720X | 208 | config ARCH_H720X |
| 208 | bool "Hynix-HMS720x-based" | 209 | bool "Hynix-HMS720x-based" |
| 210 | select ISA_DMA_API | ||
| 209 | help | 211 | help |
| 210 | This enables support for systems based on the Hynix HMS720x | 212 | This enables support for systems based on the Hynix HMS720x |
| 211 | 213 | ||
| @@ -290,12 +292,14 @@ config ISA | |||
| 290 | (MCA) or VESA. ISA is an older system, now being displaced by PCI; | 292 | (MCA) or VESA. ISA is an older system, now being displaced by PCI; |
| 291 | newer boards don't support it. If you have ISA, say Y, otherwise N. | 293 | newer boards don't support it. If you have ISA, say Y, otherwise N. |
| 292 | 294 | ||
| 295 | # Select ISA DMA controller support | ||
| 293 | config ISA_DMA | 296 | config ISA_DMA |
| 294 | bool | 297 | bool |
| 298 | select ISA_DMA_API | ||
| 295 | 299 | ||
| 300 | # Select ISA DMA interface | ||
| 296 | config ISA_DMA_API | 301 | config ISA_DMA_API |
| 297 | bool | 302 | bool |
| 298 | default y | ||
| 299 | 303 | ||
| 300 | config PCI | 304 | config PCI |
| 301 | bool "PCI support" if ARCH_INTEGRATOR_AP || ARCH_VERSATILE_PB | 305 | bool "PCI support" if ARCH_INTEGRATOR_AP || ARCH_VERSATILE_PB |
| @@ -656,7 +660,6 @@ source "kernel/power/Kconfig" | |||
| 656 | 660 | ||
| 657 | config APM | 661 | config APM |
| 658 | tristate "Advanced Power Management Emulation" | 662 | tristate "Advanced Power Management Emulation" |
| 659 | depends on PM_LEGACY | ||
| 660 | ---help--- | 663 | ---help--- |
| 661 | APM is a BIOS specification for saving power using several different | 664 | APM is a BIOS specification for saving power using several different |
| 662 | techniques. This is mostly useful for battery powered laptops with | 665 | techniques. This is mostly useful for battery powered laptops with |
diff --git a/arch/arm/Makefile b/arch/arm/Makefile index 81bd2193fe6d..afaf3a1e903c 100644 --- a/arch/arm/Makefile +++ b/arch/arm/Makefile | |||
| @@ -8,7 +8,7 @@ | |||
| 8 | # Copyright (C) 1995-2001 by Russell King | 8 | # Copyright (C) 1995-2001 by Russell King |
| 9 | 9 | ||
| 10 | LDFLAGS_vmlinux :=-p --no-undefined -X | 10 | LDFLAGS_vmlinux :=-p --no-undefined -X |
| 11 | CPPFLAGS_vmlinux.lds = -DKERNEL_RAM_ADDR=$(TEXTADDR) | 11 | CPPFLAGS_vmlinux.lds = -DTEXT_OFFSET=$(TEXT_OFFSET) |
| 12 | OBJCOPYFLAGS :=-O binary -R .note -R .comment -S | 12 | OBJCOPYFLAGS :=-O binary -R .note -R .comment -S |
| 13 | GZFLAGS :=-9 | 13 | GZFLAGS :=-9 |
| 14 | #CFLAGS +=-pipe | 14 | #CFLAGS +=-pipe |
| @@ -65,7 +65,7 @@ CHECKFLAGS += -D__arm__ | |||
| 65 | 65 | ||
| 66 | #Default value | 66 | #Default value |
| 67 | head-y := arch/arm/kernel/head.o arch/arm/kernel/init_task.o | 67 | head-y := arch/arm/kernel/head.o arch/arm/kernel/init_task.o |
| 68 | textaddr-y := 0xC0008000 | 68 | textofs-y := 0x00008000 |
| 69 | 69 | ||
| 70 | machine-$(CONFIG_ARCH_RPC) := rpc | 70 | machine-$(CONFIG_ARCH_RPC) := rpc |
| 71 | machine-$(CONFIG_ARCH_EBSA110) := ebsa110 | 71 | machine-$(CONFIG_ARCH_EBSA110) := ebsa110 |
| @@ -73,22 +73,20 @@ textaddr-y := 0xC0008000 | |||
| 73 | incdir-$(CONFIG_ARCH_CLPS7500) := cl7500 | 73 | incdir-$(CONFIG_ARCH_CLPS7500) := cl7500 |
| 74 | machine-$(CONFIG_FOOTBRIDGE) := footbridge | 74 | machine-$(CONFIG_FOOTBRIDGE) := footbridge |
| 75 | incdir-$(CONFIG_FOOTBRIDGE) := ebsa285 | 75 | incdir-$(CONFIG_FOOTBRIDGE) := ebsa285 |
| 76 | textaddr-$(CONFIG_ARCH_CO285) := 0x60008000 | ||
| 77 | machine-$(CONFIG_ARCH_CO285) := footbridge | 76 | machine-$(CONFIG_ARCH_CO285) := footbridge |
| 78 | incdir-$(CONFIG_ARCH_CO285) := ebsa285 | 77 | incdir-$(CONFIG_ARCH_CO285) := ebsa285 |
| 79 | machine-$(CONFIG_ARCH_SHARK) := shark | 78 | machine-$(CONFIG_ARCH_SHARK) := shark |
| 80 | machine-$(CONFIG_ARCH_SA1100) := sa1100 | 79 | machine-$(CONFIG_ARCH_SA1100) := sa1100 |
| 81 | ifeq ($(CONFIG_ARCH_SA1100),y) | 80 | ifeq ($(CONFIG_ARCH_SA1100),y) |
| 82 | # SA1111 DMA bug: we don't want the kernel to live in precious DMA-able memory | 81 | # SA1111 DMA bug: we don't want the kernel to live in precious DMA-able memory |
| 83 | textaddr-$(CONFIG_SA1111) := 0xc0208000 | 82 | textofs-$(CONFIG_SA1111) := 0x00208000 |
| 84 | endif | 83 | endif |
| 85 | machine-$(CONFIG_ARCH_PXA) := pxa | 84 | machine-$(CONFIG_ARCH_PXA) := pxa |
| 86 | machine-$(CONFIG_ARCH_L7200) := l7200 | 85 | machine-$(CONFIG_ARCH_L7200) := l7200 |
| 87 | machine-$(CONFIG_ARCH_INTEGRATOR) := integrator | 86 | machine-$(CONFIG_ARCH_INTEGRATOR) := integrator |
| 88 | machine-$(CONFIG_ARCH_CAMELOT) := epxa10db | 87 | machine-$(CONFIG_ARCH_CAMELOT) := epxa10db |
| 89 | textaddr-$(CONFIG_ARCH_CLPS711X) := 0xc0028000 | 88 | textofs-$(CONFIG_ARCH_CLPS711X) := 0x00028000 |
| 90 | machine-$(CONFIG_ARCH_CLPS711X) := clps711x | 89 | machine-$(CONFIG_ARCH_CLPS711X) := clps711x |
| 91 | textaddr-$(CONFIG_ARCH_FORTUNET) := 0xc0008000 | ||
| 92 | machine-$(CONFIG_ARCH_IOP3XX) := iop3xx | 90 | machine-$(CONFIG_ARCH_IOP3XX) := iop3xx |
| 93 | machine-$(CONFIG_ARCH_IXP4XX) := ixp4xx | 91 | machine-$(CONFIG_ARCH_IXP4XX) := ixp4xx |
| 94 | machine-$(CONFIG_ARCH_IXP2000) := ixp2000 | 92 | machine-$(CONFIG_ARCH_IXP2000) := ixp2000 |
| @@ -110,7 +108,8 @@ CFLAGS_3c589_cs.o :=-DISA_SIXTEEN_BIT_PERIPHERAL | |||
| 110 | export CFLAGS_3c589_cs.o | 108 | export CFLAGS_3c589_cs.o |
| 111 | endif | 109 | endif |
| 112 | 110 | ||
| 113 | TEXTADDR := $(textaddr-y) | 111 | # The byte offset of the kernel image in RAM from the start of RAM. |
| 112 | TEXT_OFFSET := $(textofs-y) | ||
| 114 | 113 | ||
| 115 | ifeq ($(incdir-y),) | 114 | ifeq ($(incdir-y),) |
| 116 | incdir-y := $(machine-y) | 115 | incdir-y := $(machine-y) |
| @@ -123,7 +122,7 @@ else | |||
| 123 | MACHINE := | 122 | MACHINE := |
| 124 | endif | 123 | endif |
| 125 | 124 | ||
| 126 | export TEXTADDR GZFLAGS | 125 | export TEXT_OFFSET GZFLAGS |
| 127 | 126 | ||
| 128 | # Do we have FASTFPE? | 127 | # Do we have FASTFPE? |
| 129 | FASTFPE :=arch/arm/fastfpe | 128 | FASTFPE :=arch/arm/fastfpe |
diff --git a/arch/arm/boot/Makefile b/arch/arm/boot/Makefile index 937a353bc37c..a174d63395ea 100644 --- a/arch/arm/boot/Makefile +++ b/arch/arm/boot/Makefile | |||
| @@ -15,7 +15,7 @@ include $(srctree)/$(MACHINE)/Makefile.boot | |||
| 15 | endif | 15 | endif |
| 16 | 16 | ||
| 17 | # Note: the following conditions must always be true: | 17 | # Note: the following conditions must always be true: |
| 18 | # ZRELADDR == virt_to_phys(TEXTADDR) | 18 | # ZRELADDR == virt_to_phys(PAGE_OFFSET + TEXT_OFFSET) |
| 19 | # PARAMS_PHYS must be within 4MB of ZRELADDR | 19 | # PARAMS_PHYS must be within 4MB of ZRELADDR |
| 20 | # INITRD_PHYS must be in RAM | 20 | # INITRD_PHYS must be in RAM |
| 21 | ZRELADDR := $(zreladdr-y) | 21 | ZRELADDR := $(zreladdr-y) |
diff --git a/arch/arm/common/Kconfig b/arch/arm/common/Kconfig index 666ba393575b..d7509c7a3c5e 100644 --- a/arch/arm/common/Kconfig +++ b/arch/arm/common/Kconfig | |||
| @@ -23,5 +23,8 @@ config SHARP_LOCOMO | |||
| 23 | config SHARP_PARAM | 23 | config SHARP_PARAM |
| 24 | bool | 24 | bool |
| 25 | 25 | ||
| 26 | config SHARPSL_PM | ||
| 27 | bool | ||
| 28 | |||
| 26 | config SHARP_SCOOP | 29 | config SHARP_SCOOP |
| 27 | bool | 30 | bool |
diff --git a/arch/arm/common/Makefile b/arch/arm/common/Makefile index a87886564b19..ec8d17c96906 100644 --- a/arch/arm/common/Makefile +++ b/arch/arm/common/Makefile | |||
| @@ -3,7 +3,6 @@ | |||
| 3 | # | 3 | # |
| 4 | 4 | ||
| 5 | obj-y += rtctime.o | 5 | obj-y += rtctime.o |
| 6 | obj-$(CONFIG_ARM_AMBA) += amba.o | ||
| 7 | obj-$(CONFIG_ARM_GIC) += gic.o | 6 | obj-$(CONFIG_ARM_GIC) += gic.o |
| 8 | obj-$(CONFIG_ICST525) += icst525.o | 7 | obj-$(CONFIG_ICST525) += icst525.o |
| 9 | obj-$(CONFIG_ICST307) += icst307.o | 8 | obj-$(CONFIG_ICST307) += icst307.o |
| @@ -13,4 +12,5 @@ obj-$(CONFIG_DMABOUNCE) += dmabounce.o | |||
| 13 | obj-$(CONFIG_TIMER_ACORN) += time-acorn.o | 12 | obj-$(CONFIG_TIMER_ACORN) += time-acorn.o |
| 14 | obj-$(CONFIG_SHARP_LOCOMO) += locomo.o | 13 | obj-$(CONFIG_SHARP_LOCOMO) += locomo.o |
| 15 | obj-$(CONFIG_SHARP_PARAM) += sharpsl_param.o | 14 | obj-$(CONFIG_SHARP_PARAM) += sharpsl_param.o |
| 15 | obj-$(CONFIG_SHARPSL_PM) += sharpsl_pm.o | ||
| 16 | obj-$(CONFIG_SHARP_SCOOP) += scoop.o | 16 | obj-$(CONFIG_SHARP_SCOOP) += scoop.o |
diff --git a/arch/arm/common/scoop.c b/arch/arm/common/scoop.c index 0c3cbd9a388b..b6de43e73699 100644 --- a/arch/arm/common/scoop.c +++ b/arch/arm/common/scoop.c | |||
| @@ -33,7 +33,6 @@ void reset_scoop(struct device *dev) | |||
| 33 | 33 | ||
| 34 | SCOOP_REG(sdev->base,SCOOP_MCR) = 0x0100; // 00 | 34 | SCOOP_REG(sdev->base,SCOOP_MCR) = 0x0100; // 00 |
| 35 | SCOOP_REG(sdev->base,SCOOP_CDR) = 0x0000; // 04 | 35 | SCOOP_REG(sdev->base,SCOOP_CDR) = 0x0000; // 04 |
| 36 | SCOOP_REG(sdev->base,SCOOP_CPR) = 0x0000; // 0C | ||
| 37 | SCOOP_REG(sdev->base,SCOOP_CCR) = 0x0000; // 10 | 36 | SCOOP_REG(sdev->base,SCOOP_CCR) = 0x0000; // 10 |
| 38 | SCOOP_REG(sdev->base,SCOOP_IMR) = 0x0000; // 18 | 37 | SCOOP_REG(sdev->base,SCOOP_IMR) = 0x0000; // 18 |
| 39 | SCOOP_REG(sdev->base,SCOOP_IRM) = 0x00FF; // 14 | 38 | SCOOP_REG(sdev->base,SCOOP_IRM) = 0x00FF; // 14 |
| @@ -154,6 +153,7 @@ int __init scoop_probe(struct platform_device *pdev) | |||
| 154 | 153 | ||
| 155 | SCOOP_REG(devptr->base, SCOOP_MCR) = 0x0140; | 154 | SCOOP_REG(devptr->base, SCOOP_MCR) = 0x0140; |
| 156 | reset_scoop(&pdev->dev); | 155 | reset_scoop(&pdev->dev); |
| 156 | SCOOP_REG(devptr->base, SCOOP_CPR) = 0x0000; | ||
| 157 | SCOOP_REG(devptr->base, SCOOP_GPCR) = inf->io_dir & 0xffff; | 157 | SCOOP_REG(devptr->base, SCOOP_GPCR) = inf->io_dir & 0xffff; |
| 158 | SCOOP_REG(devptr->base, SCOOP_GPWR) = inf->io_out & 0xffff; | 158 | SCOOP_REG(devptr->base, SCOOP_GPWR) = inf->io_out & 0xffff; |
| 159 | 159 | ||
diff --git a/arch/arm/common/sharpsl_pm.c b/arch/arm/common/sharpsl_pm.c new file mode 100644 index 000000000000..978d32e82d39 --- /dev/null +++ b/arch/arm/common/sharpsl_pm.c | |||
| @@ -0,0 +1,839 @@ | |||
| 1 | /* | ||
| 2 | * Battery and Power Management code for the Sharp SL-C7xx and SL-Cxx00 | ||
| 3 | * series of PDAs | ||
| 4 | * | ||
| 5 | * Copyright (c) 2004-2005 Richard Purdie | ||
| 6 | * | ||
| 7 | * Based on code written by Sharp for 2.4 kernels | ||
| 8 | * | ||
| 9 | * This program is free software; you can redistribute it and/or modify | ||
| 10 | * it under the terms of the GNU General Public License version 2 as | ||
| 11 | * published by the Free Software Foundation. | ||
| 12 | * | ||
| 13 | */ | ||
| 14 | |||
| 15 | #undef DEBUG | ||
| 16 | |||
| 17 | #include <linux/module.h> | ||
| 18 | #include <linux/timer.h> | ||
| 19 | #include <linux/init.h> | ||
| 20 | #include <linux/kernel.h> | ||
| 21 | #include <linux/apm_bios.h> | ||
| 22 | #include <linux/delay.h> | ||
| 23 | #include <linux/interrupt.h> | ||
| 24 | #include <linux/platform_device.h> | ||
| 25 | |||
| 26 | #include <asm/hardware.h> | ||
| 27 | #include <asm/mach-types.h> | ||
| 28 | #include <asm/irq.h> | ||
| 29 | #include <asm/apm.h> | ||
| 30 | #include <asm/arch/pm.h> | ||
| 31 | #include <asm/arch/pxa-regs.h> | ||
| 32 | #include <asm/arch/sharpsl.h> | ||
| 33 | #include <asm/hardware/sharpsl_pm.h> | ||
| 34 | |||
| 35 | /* | ||
| 36 | * Constants | ||
| 37 | */ | ||
| 38 | #define SHARPSL_CHARGE_ON_TIME_INTERVAL (msecs_to_jiffies(1*60*1000)) /* 1 min */ | ||
| 39 | #define SHARPSL_CHARGE_FINISH_TIME (msecs_to_jiffies(10*60*1000)) /* 10 min */ | ||
| 40 | #define SHARPSL_BATCHK_TIME (msecs_to_jiffies(15*1000)) /* 15 sec */ | ||
| 41 | #define SHARPSL_BATCHK_TIME_SUSPEND (60*10) /* 10 min */ | ||
| 42 | #define SHARPSL_WAIT_CO_TIME 15 /* 15 sec */ | ||
| 43 | #define SHARPSL_WAIT_DISCHARGE_ON 100 /* 100 msec */ | ||
| 44 | #define SHARPSL_CHECK_BATTERY_WAIT_TIME_TEMP 10 /* 10 msec */ | ||
| 45 | #define SHARPSL_CHECK_BATTERY_WAIT_TIME_VOLT 10 /* 10 msec */ | ||
| 46 | #define SHARPSL_CHECK_BATTERY_WAIT_TIME_ACIN 10 /* 10 msec */ | ||
| 47 | #define SHARPSL_CHARGE_WAIT_TIME 15 /* 15 msec */ | ||
| 48 | #define SHARPSL_CHARGE_CO_CHECK_TIME 5 /* 5 msec */ | ||
| 49 | #define SHARPSL_CHARGE_RETRY_CNT 1 /* eqv. 10 min */ | ||
| 50 | |||
| 51 | #define SHARPSL_CHARGE_ON_VOLT 0x99 /* 2.9V */ | ||
| 52 | #define SHARPSL_CHARGE_ON_TEMP 0xe0 /* 2.9V */ | ||
| 53 | #define SHARPSL_CHARGE_ON_ACIN_HIGH 0x9b /* 6V */ | ||
| 54 | #define SHARPSL_CHARGE_ON_ACIN_LOW 0x34 /* 2V */ | ||
| 55 | #define SHARPSL_FATAL_ACIN_VOLT 182 /* 3.45V */ | ||
| 56 | #define SHARPSL_FATAL_NOACIN_VOLT 170 /* 3.40V */ | ||
| 57 | |||
| 58 | /* | ||
| 59 | * Prototypes | ||
| 60 | */ | ||
| 61 | static int sharpsl_off_charge_battery(void); | ||
| 62 | static int sharpsl_check_battery_temp(void); | ||
| 63 | static int sharpsl_check_battery_voltage(void); | ||
| 64 | static int sharpsl_ac_check(void); | ||
| 65 | static int sharpsl_fatal_check(void); | ||
| 66 | static int sharpsl_average_value(int ad); | ||
| 67 | static void sharpsl_average_clear(void); | ||
| 68 | static void sharpsl_charge_toggle(void *private_); | ||
| 69 | static void sharpsl_battery_thread(void *private_); | ||
| 70 | |||
| 71 | |||
| 72 | /* | ||
| 73 | * Variables | ||
| 74 | */ | ||
| 75 | struct sharpsl_pm_status sharpsl_pm; | ||
| 76 | DECLARE_WORK(toggle_charger, sharpsl_charge_toggle, NULL); | ||
| 77 | DECLARE_WORK(sharpsl_bat, sharpsl_battery_thread, NULL); | ||
| 78 | |||
| 79 | |||
| 80 | static int get_percentage(int voltage) | ||
| 81 | { | ||
| 82 | int i = sharpsl_pm.machinfo->bat_levels - 1; | ||
| 83 | struct battery_thresh *thresh; | ||
| 84 | |||
| 85 | if (sharpsl_pm.charge_mode == CHRG_ON) | ||
| 86 | thresh=sharpsl_pm.machinfo->bat_levels_acin; | ||
| 87 | else | ||
| 88 | thresh=sharpsl_pm.machinfo->bat_levels_noac; | ||
| 89 | |||
| 90 | while (i > 0 && (voltage > thresh[i].voltage)) | ||
| 91 | i--; | ||
| 92 | |||
| 93 | return thresh[i].percentage; | ||
| 94 | } | ||
| 95 | |||
| 96 | static int get_apm_status(int voltage) | ||
| 97 | { | ||
| 98 | int low_thresh, high_thresh; | ||
| 99 | |||
| 100 | if (sharpsl_pm.charge_mode == CHRG_ON) { | ||
| 101 | high_thresh = sharpsl_pm.machinfo->status_high_acin; | ||
| 102 | low_thresh = sharpsl_pm.machinfo->status_low_acin; | ||
| 103 | } else { | ||
| 104 | high_thresh = sharpsl_pm.machinfo->status_high_noac; | ||
| 105 | low_thresh = sharpsl_pm.machinfo->status_low_noac; | ||
| 106 | } | ||
| 107 | |||
| 108 | if (voltage >= high_thresh) | ||
| 109 | return APM_BATTERY_STATUS_HIGH; | ||
| 110 | if (voltage >= low_thresh) | ||
| 111 | return APM_BATTERY_STATUS_LOW; | ||
| 112 | return APM_BATTERY_STATUS_CRITICAL; | ||
| 113 | } | ||
| 114 | |||
| 115 | void sharpsl_battery_kick(void) | ||
| 116 | { | ||
| 117 | schedule_delayed_work(&sharpsl_bat, msecs_to_jiffies(125)); | ||
| 118 | } | ||
| 119 | EXPORT_SYMBOL(sharpsl_battery_kick); | ||
| 120 | |||
| 121 | |||
| 122 | static void sharpsl_battery_thread(void *private_) | ||
| 123 | { | ||
| 124 | int voltage, percent, apm_status, i = 0; | ||
| 125 | |||
| 126 | if (!sharpsl_pm.machinfo) | ||
| 127 | return; | ||
| 128 | |||
| 129 | sharpsl_pm.battstat.ac_status = (sharpsl_pm.machinfo->read_devdata(SHARPSL_STATUS_ACIN) ? APM_AC_ONLINE : APM_AC_OFFLINE); | ||
| 130 | |||
| 131 | /* Corgi cannot confirm when battery fully charged so periodically kick! */ | ||
| 132 | if (machine_is_corgi() && (sharpsl_pm.charge_mode == CHRG_ON) | ||
| 133 | && time_after(jiffies, sharpsl_pm.charge_start_time + SHARPSL_CHARGE_ON_TIME_INTERVAL)) | ||
| 134 | schedule_work(&toggle_charger); | ||
| 135 | |||
| 136 | while(1) { | ||
| 137 | voltage = sharpsl_pm.machinfo->read_devdata(SHARPSL_BATT_VOLT); | ||
| 138 | |||
| 139 | if (voltage > 0) break; | ||
| 140 | if (i++ > 5) { | ||
| 141 | voltage = sharpsl_pm.machinfo->bat_levels_noac[0].voltage; | ||
| 142 | dev_warn(sharpsl_pm.dev, "Warning: Cannot read main battery!\n"); | ||
| 143 | break; | ||
| 144 | } | ||
| 145 | } | ||
| 146 | |||
| 147 | voltage = sharpsl_average_value(voltage); | ||
| 148 | apm_status = get_apm_status(voltage); | ||
| 149 | percent = get_percentage(voltage); | ||
| 150 | |||
| 151 | /* At low battery voltages, the voltage has a tendency to start | ||
| 152 | creeping back up so we try to avoid this here */ | ||
| 153 | if ((sharpsl_pm.battstat.ac_status == APM_AC_ONLINE) || (apm_status == APM_BATTERY_STATUS_HIGH) || percent <= sharpsl_pm.battstat.mainbat_percent) { | ||
| 154 | sharpsl_pm.battstat.mainbat_voltage = voltage; | ||
| 155 | sharpsl_pm.battstat.mainbat_status = apm_status; | ||
| 156 | sharpsl_pm.battstat.mainbat_percent = percent; | ||
| 157 | } | ||
| 158 | |||
| 159 | dev_dbg(sharpsl_pm.dev, "Battery: voltage: %d, status: %d, percentage: %d, time: %d\n", voltage, | ||
| 160 | sharpsl_pm.battstat.mainbat_status, sharpsl_pm.battstat.mainbat_percent, jiffies); | ||
| 161 | |||
| 162 | /* If battery is low. limit backlight intensity to save power. */ | ||
| 163 | if ((sharpsl_pm.battstat.ac_status != APM_AC_ONLINE) | ||
| 164 | && ((sharpsl_pm.battstat.mainbat_status == APM_BATTERY_STATUS_LOW) || | ||
| 165 | (sharpsl_pm.battstat.mainbat_status == APM_BATTERY_STATUS_CRITICAL))) { | ||
| 166 | if (!(sharpsl_pm.flags & SHARPSL_BL_LIMIT)) { | ||
| 167 | corgibl_limit_intensity(1); | ||
| 168 | sharpsl_pm.flags |= SHARPSL_BL_LIMIT; | ||
| 169 | } | ||
| 170 | } else if (sharpsl_pm.flags & SHARPSL_BL_LIMIT) { | ||
| 171 | corgibl_limit_intensity(0); | ||
| 172 | sharpsl_pm.flags &= ~SHARPSL_BL_LIMIT; | ||
| 173 | } | ||
| 174 | |||
| 175 | /* Suspend if critical battery level */ | ||
| 176 | if ((sharpsl_pm.battstat.ac_status != APM_AC_ONLINE) | ||
| 177 | && (sharpsl_pm.battstat.mainbat_status == APM_BATTERY_STATUS_CRITICAL) | ||
| 178 | && !(sharpsl_pm.flags & SHARPSL_APM_QUEUED)) { | ||
| 179 | sharpsl_pm.flags |= SHARPSL_APM_QUEUED; | ||
| 180 | dev_err(sharpsl_pm.dev, "Fatal Off\n"); | ||
| 181 | apm_queue_event(APM_CRITICAL_SUSPEND); | ||
| 182 | } | ||
| 183 | |||
| 184 | schedule_delayed_work(&sharpsl_bat, SHARPSL_BATCHK_TIME); | ||
| 185 | } | ||
| 186 | |||
| 187 | void sharpsl_pm_led(int val) | ||
| 188 | { | ||
| 189 | if (val == SHARPSL_LED_ERROR) { | ||
| 190 | dev_err(sharpsl_pm.dev, "Charging Error!\n"); | ||
| 191 | } else if (val == SHARPSL_LED_ON) { | ||
| 192 | dev_dbg(sharpsl_pm.dev, "Charge LED On\n"); | ||
| 193 | |||
| 194 | } else { | ||
| 195 | dev_dbg(sharpsl_pm.dev, "Charge LED Off\n"); | ||
| 196 | |||
| 197 | } | ||
| 198 | } | ||
| 199 | |||
| 200 | static void sharpsl_charge_on(void) | ||
| 201 | { | ||
| 202 | dev_dbg(sharpsl_pm.dev, "Turning Charger On\n"); | ||
| 203 | |||
| 204 | sharpsl_pm.full_count = 0; | ||
| 205 | sharpsl_pm.charge_mode = CHRG_ON; | ||
| 206 | schedule_delayed_work(&toggle_charger, msecs_to_jiffies(250)); | ||
| 207 | schedule_delayed_work(&sharpsl_bat, msecs_to_jiffies(500)); | ||
| 208 | } | ||
| 209 | |||
| 210 | static void sharpsl_charge_off(void) | ||
| 211 | { | ||
| 212 | dev_dbg(sharpsl_pm.dev, "Turning Charger Off\n"); | ||
| 213 | |||
| 214 | sharpsl_pm.machinfo->charge(0); | ||
| 215 | sharpsl_pm_led(SHARPSL_LED_OFF); | ||
| 216 | sharpsl_pm.charge_mode = CHRG_OFF; | ||
| 217 | |||
| 218 | schedule_work(&sharpsl_bat); | ||
| 219 | } | ||
| 220 | |||
| 221 | static void sharpsl_charge_error(void) | ||
| 222 | { | ||
| 223 | sharpsl_pm_led(SHARPSL_LED_ERROR); | ||
| 224 | sharpsl_pm.machinfo->charge(0); | ||
| 225 | sharpsl_pm.charge_mode = CHRG_ERROR; | ||
| 226 | } | ||
| 227 | |||
| 228 | static void sharpsl_charge_toggle(void *private_) | ||
| 229 | { | ||
| 230 | dev_dbg(sharpsl_pm.dev, "Toogling Charger at time: %lx\n", jiffies); | ||
| 231 | |||
| 232 | if (!sharpsl_pm.machinfo->read_devdata(SHARPSL_STATUS_ACIN)) { | ||
| 233 | sharpsl_charge_off(); | ||
| 234 | return; | ||
| 235 | } else if ((sharpsl_check_battery_temp() < 0) || (sharpsl_ac_check() < 0)) { | ||
| 236 | sharpsl_charge_error(); | ||
| 237 | return; | ||
| 238 | } | ||
| 239 | |||
| 240 | sharpsl_pm_led(SHARPSL_LED_ON); | ||
| 241 | sharpsl_pm.machinfo->charge(0); | ||
| 242 | mdelay(SHARPSL_CHARGE_WAIT_TIME); | ||
| 243 | sharpsl_pm.machinfo->charge(1); | ||
| 244 | |||
| 245 | sharpsl_pm.charge_start_time = jiffies; | ||
| 246 | } | ||
| 247 | |||
| 248 | static void sharpsl_ac_timer(unsigned long data) | ||
| 249 | { | ||
| 250 | int acin = sharpsl_pm.machinfo->read_devdata(SHARPSL_STATUS_ACIN); | ||
| 251 | |||
| 252 | dev_dbg(sharpsl_pm.dev, "AC Status: %d\n",acin); | ||
| 253 | |||
| 254 | sharpsl_average_clear(); | ||
| 255 | if (acin && (sharpsl_pm.charge_mode != CHRG_ON)) | ||
| 256 | sharpsl_charge_on(); | ||
| 257 | else if (sharpsl_pm.charge_mode == CHRG_ON) | ||
| 258 | sharpsl_charge_off(); | ||
| 259 | |||
| 260 | schedule_work(&sharpsl_bat); | ||
| 261 | } | ||
| 262 | |||
| 263 | |||
| 264 | irqreturn_t sharpsl_ac_isr(int irq, void *dev_id, struct pt_regs *fp) | ||
| 265 | { | ||
| 266 | /* Delay the event slightly to debounce */ | ||
| 267 | /* Must be a smaller delay than the chrg_full_isr below */ | ||
| 268 | mod_timer(&sharpsl_pm.ac_timer, jiffies + msecs_to_jiffies(250)); | ||
| 269 | |||
| 270 | return IRQ_HANDLED; | ||
| 271 | } | ||
| 272 | |||
| 273 | static void sharpsl_chrg_full_timer(unsigned long data) | ||
| 274 | { | ||
| 275 | dev_dbg(sharpsl_pm.dev, "Charge Full at time: %lx\n", jiffies); | ||
| 276 | |||
| 277 | sharpsl_pm.full_count++; | ||
| 278 | |||
| 279 | if (!sharpsl_pm.machinfo->read_devdata(SHARPSL_STATUS_ACIN)) { | ||
| 280 | dev_dbg(sharpsl_pm.dev, "Charge Full: AC removed - stop charging!\n"); | ||
| 281 | if (sharpsl_pm.charge_mode == CHRG_ON) | ||
| 282 | sharpsl_charge_off(); | ||
| 283 | } else if (sharpsl_pm.full_count < 2) { | ||
| 284 | dev_dbg(sharpsl_pm.dev, "Charge Full: Count too low\n"); | ||
| 285 | schedule_work(&toggle_charger); | ||
| 286 | } else if (time_after(jiffies, sharpsl_pm.charge_start_time + SHARPSL_CHARGE_FINISH_TIME)) { | ||
| 287 | dev_dbg(sharpsl_pm.dev, "Charge Full: Interrupt generated too slowly - retry.\n"); | ||
| 288 | schedule_work(&toggle_charger); | ||
| 289 | } else { | ||
| 290 | sharpsl_charge_off(); | ||
| 291 | sharpsl_pm.charge_mode = CHRG_DONE; | ||
| 292 | dev_dbg(sharpsl_pm.dev, "Charge Full: Charging Finished\n"); | ||
| 293 | } | ||
| 294 | } | ||
| 295 | |||
| 296 | /* Charging Finished Interrupt (Not present on Corgi) */ | ||
| 297 | /* Can trigger at the same time as an AC staus change so | ||
| 298 | delay until after that has been processed */ | ||
| 299 | irqreturn_t sharpsl_chrg_full_isr(int irq, void *dev_id, struct pt_regs *fp) | ||
| 300 | { | ||
| 301 | if (sharpsl_pm.flags & SHARPSL_SUSPENDED) | ||
| 302 | return IRQ_HANDLED; | ||
| 303 | |||
| 304 | /* delay until after any ac interrupt */ | ||
| 305 | mod_timer(&sharpsl_pm.chrg_full_timer, jiffies + msecs_to_jiffies(500)); | ||
| 306 | |||
| 307 | return IRQ_HANDLED; | ||
| 308 | } | ||
| 309 | |||
| 310 | irqreturn_t sharpsl_fatal_isr(int irq, void *dev_id, struct pt_regs *fp) | ||
| 311 | { | ||
| 312 | int is_fatal = 0; | ||
| 313 | |||
| 314 | if (!sharpsl_pm.machinfo->read_devdata(SHARPSL_STATUS_LOCK)) { | ||
| 315 | dev_err(sharpsl_pm.dev, "Battery now Unlocked! Suspending.\n"); | ||
| 316 | is_fatal = 1; | ||
| 317 | } | ||
| 318 | |||
| 319 | if (!sharpsl_pm.machinfo->read_devdata(SHARPSL_STATUS_FATAL)) { | ||
| 320 | dev_err(sharpsl_pm.dev, "Fatal Batt Error! Suspending.\n"); | ||
| 321 | is_fatal = 1; | ||
| 322 | } | ||
| 323 | |||
| 324 | if (!(sharpsl_pm.flags & SHARPSL_APM_QUEUED) && is_fatal) { | ||
| 325 | sharpsl_pm.flags |= SHARPSL_APM_QUEUED; | ||
| 326 | apm_queue_event(APM_CRITICAL_SUSPEND); | ||
| 327 | } | ||
| 328 | |||
| 329 | return IRQ_HANDLED; | ||
| 330 | } | ||
| 331 | |||
| 332 | /* | ||
| 333 | * Maintain an average of the last 10 readings | ||
| 334 | */ | ||
| 335 | #define SHARPSL_CNV_VALUE_NUM 10 | ||
| 336 | static int sharpsl_ad_index; | ||
| 337 | |||
| 338 | static void sharpsl_average_clear(void) | ||
| 339 | { | ||
| 340 | sharpsl_ad_index = 0; | ||
| 341 | } | ||
| 342 | |||
| 343 | static int sharpsl_average_value(int ad) | ||
| 344 | { | ||
| 345 | int i, ad_val = 0; | ||
| 346 | static int sharpsl_ad[SHARPSL_CNV_VALUE_NUM+1]; | ||
| 347 | |||
| 348 | if (sharpsl_pm.battstat.mainbat_status != APM_BATTERY_STATUS_HIGH) { | ||
| 349 | sharpsl_ad_index = 0; | ||
| 350 | return ad; | ||
| 351 | } | ||
| 352 | |||
| 353 | sharpsl_ad[sharpsl_ad_index] = ad; | ||
| 354 | sharpsl_ad_index++; | ||
| 355 | if (sharpsl_ad_index >= SHARPSL_CNV_VALUE_NUM) { | ||
| 356 | for (i=0; i < (SHARPSL_CNV_VALUE_NUM-1); i++) | ||
| 357 | sharpsl_ad[i] = sharpsl_ad[i+1]; | ||
| 358 | sharpsl_ad_index = SHARPSL_CNV_VALUE_NUM - 1; | ||
| 359 | } | ||
| 360 | for (i=0; i < sharpsl_ad_index; i++) | ||
| 361 | ad_val += sharpsl_ad[i]; | ||
| 362 | |||
| 363 | return (ad_val / sharpsl_ad_index); | ||
| 364 | } | ||
| 365 | |||
| 366 | /* | ||
| 367 | * Take an array of 5 integers, remove the maximum and minimum values | ||
| 368 | * and return the average. | ||
| 369 | */ | ||
| 370 | static int get_select_val(int *val) | ||
| 371 | { | ||
| 372 | int i, j, k, temp, sum = 0; | ||
| 373 | |||
| 374 | /* Find MAX val */ | ||
| 375 | temp = val[0]; | ||
| 376 | j=0; | ||
| 377 | for (i=1; i<5; i++) { | ||
| 378 | if (temp < val[i]) { | ||
| 379 | temp = val[i]; | ||
| 380 | j = i; | ||
| 381 | } | ||
| 382 | } | ||
| 383 | |||
| 384 | /* Find MIN val */ | ||
| 385 | temp = val[4]; | ||
| 386 | k=4; | ||
| 387 | for (i=3; i>=0; i--) { | ||
| 388 | if (temp > val[i]) { | ||
| 389 | temp = val[i]; | ||
| 390 | k = i; | ||
| 391 | } | ||
| 392 | } | ||
| 393 | |||
| 394 | for (i=0; i<5; i++) | ||
| 395 | if (i != j && i != k ) | ||
| 396 | sum += val[i]; | ||
| 397 | |||
| 398 | dev_dbg(sharpsl_pm.dev, "Average: %d from values: %d, %d, %d, %d, %d\n", sum/3, val[0], val[1], val[2], val[3], val[4]); | ||
| 399 | |||
| 400 | return (sum/3); | ||
| 401 | } | ||
| 402 | |||
| 403 | static int sharpsl_check_battery_temp(void) | ||
| 404 | { | ||
| 405 | int val, i, buff[5]; | ||
| 406 | |||
| 407 | /* Check battery temperature */ | ||
| 408 | for (i=0; i<5; i++) { | ||
| 409 | mdelay(SHARPSL_CHECK_BATTERY_WAIT_TIME_TEMP); | ||
| 410 | sharpsl_pm.machinfo->measure_temp(1); | ||
| 411 | mdelay(SHARPSL_CHECK_BATTERY_WAIT_TIME_TEMP); | ||
| 412 | buff[i] = sharpsl_pm.machinfo->read_devdata(SHARPSL_BATT_TEMP); | ||
| 413 | sharpsl_pm.machinfo->measure_temp(0); | ||
| 414 | } | ||
| 415 | |||
| 416 | val = get_select_val(buff); | ||
| 417 | |||
| 418 | dev_dbg(sharpsl_pm.dev, "Temperature: %d\n", val); | ||
| 419 | if (val > SHARPSL_CHARGE_ON_TEMP) | ||
| 420 | return -1; | ||
| 421 | |||
| 422 | return 0; | ||
| 423 | } | ||
| 424 | |||
| 425 | static int sharpsl_check_battery_voltage(void) | ||
| 426 | { | ||
| 427 | int val, i, buff[5]; | ||
| 428 | |||
| 429 | /* disable charge, enable discharge */ | ||
| 430 | sharpsl_pm.machinfo->charge(0); | ||
| 431 | sharpsl_pm.machinfo->discharge(1); | ||
| 432 | mdelay(SHARPSL_WAIT_DISCHARGE_ON); | ||
| 433 | |||
| 434 | if (sharpsl_pm.machinfo->discharge1) | ||
| 435 | sharpsl_pm.machinfo->discharge1(1); | ||
| 436 | |||
| 437 | /* Check battery voltage */ | ||
| 438 | for (i=0; i<5; i++) { | ||
| 439 | buff[i] = sharpsl_pm.machinfo->read_devdata(SHARPSL_BATT_VOLT); | ||
| 440 | mdelay(SHARPSL_CHECK_BATTERY_WAIT_TIME_VOLT); | ||
| 441 | } | ||
| 442 | |||
| 443 | if (sharpsl_pm.machinfo->discharge1) | ||
| 444 | sharpsl_pm.machinfo->discharge1(0); | ||
| 445 | |||
| 446 | sharpsl_pm.machinfo->discharge(0); | ||
| 447 | |||
| 448 | val = get_select_val(buff); | ||
| 449 | dev_dbg(sharpsl_pm.dev, "Battery Voltage: %d\n", val); | ||
| 450 | |||
| 451 | if (val < SHARPSL_CHARGE_ON_VOLT) | ||
| 452 | return -1; | ||
| 453 | |||
| 454 | return 0; | ||
| 455 | } | ||
| 456 | |||
| 457 | static int sharpsl_ac_check(void) | ||
| 458 | { | ||
| 459 | int temp, i, buff[5]; | ||
| 460 | |||
| 461 | for (i=0; i<5; i++) { | ||
| 462 | buff[i] = sharpsl_pm.machinfo->read_devdata(SHARPSL_ACIN_VOLT); | ||
| 463 | mdelay(SHARPSL_CHECK_BATTERY_WAIT_TIME_ACIN); | ||
| 464 | } | ||
| 465 | |||
| 466 | temp = get_select_val(buff); | ||
| 467 | dev_dbg(sharpsl_pm.dev, "AC Voltage: %d\n",temp); | ||
| 468 | |||
| 469 | if ((temp > SHARPSL_CHARGE_ON_ACIN_HIGH) || (temp < SHARPSL_CHARGE_ON_ACIN_LOW)) { | ||
| 470 | dev_err(sharpsl_pm.dev, "Error: AC check failed.\n"); | ||
| 471 | return -1; | ||
| 472 | } | ||
| 473 | |||
| 474 | return 0; | ||
| 475 | } | ||
| 476 | |||
| 477 | #ifdef CONFIG_PM | ||
| 478 | static int sharpsl_pm_suspend(struct platform_device *pdev, pm_message_t state) | ||
| 479 | { | ||
| 480 | sharpsl_pm.flags |= SHARPSL_SUSPENDED; | ||
| 481 | flush_scheduled_work(); | ||
| 482 | |||
| 483 | if (sharpsl_pm.charge_mode == CHRG_ON) | ||
| 484 | sharpsl_pm.flags |= SHARPSL_DO_OFFLINE_CHRG; | ||
| 485 | else | ||
| 486 | sharpsl_pm.flags &= ~SHARPSL_DO_OFFLINE_CHRG; | ||
| 487 | |||
| 488 | return 0; | ||
| 489 | } | ||
| 490 | |||
| 491 | static int sharpsl_pm_resume(struct platform_device *pdev) | ||
| 492 | { | ||
| 493 | /* Clear the reset source indicators as they break the bootloader upon reboot */ | ||
| 494 | RCSR = 0x0f; | ||
| 495 | sharpsl_average_clear(); | ||
| 496 | sharpsl_pm.flags &= ~SHARPSL_APM_QUEUED; | ||
| 497 | sharpsl_pm.flags &= ~SHARPSL_SUSPENDED; | ||
| 498 | |||
| 499 | return 0; | ||
| 500 | } | ||
| 501 | |||
| 502 | static void corgi_goto_sleep(unsigned long alarm_time, unsigned int alarm_enable, suspend_state_t state) | ||
| 503 | { | ||
| 504 | dev_dbg(sharpsl_pm.dev, "Time is: %08x\n",RCNR); | ||
| 505 | |||
| 506 | dev_dbg(sharpsl_pm.dev, "Offline Charge Activate = %d\n",sharpsl_pm.flags & SHARPSL_DO_OFFLINE_CHRG); | ||
| 507 | /* not charging and AC-IN! */ | ||
| 508 | |||
| 509 | if ((sharpsl_pm.flags & SHARPSL_DO_OFFLINE_CHRG) && (sharpsl_pm.machinfo->read_devdata(SHARPSL_STATUS_ACIN))) { | ||
| 510 | dev_dbg(sharpsl_pm.dev, "Activating Offline Charger...\n"); | ||
| 511 | sharpsl_pm.charge_mode = CHRG_OFF; | ||
| 512 | sharpsl_pm.flags &= ~SHARPSL_DO_OFFLINE_CHRG; | ||
| 513 | sharpsl_off_charge_battery(); | ||
| 514 | } | ||
| 515 | |||
| 516 | sharpsl_pm.machinfo->presuspend(); | ||
| 517 | |||
| 518 | PEDR = 0xffffffff; /* clear it */ | ||
| 519 | |||
| 520 | sharpsl_pm.flags &= ~SHARPSL_ALARM_ACTIVE; | ||
| 521 | if ((sharpsl_pm.charge_mode == CHRG_ON) && ((alarm_enable && ((alarm_time - RCNR) > (SHARPSL_BATCHK_TIME_SUSPEND + 30))) || !alarm_enable)) { | ||
| 522 | RTSR &= RTSR_ALE; | ||
| 523 | RTAR = RCNR + SHARPSL_BATCHK_TIME_SUSPEND; | ||
| 524 | dev_dbg(sharpsl_pm.dev, "Charging alarm at: %08x\n",RTAR); | ||
| 525 | sharpsl_pm.flags |= SHARPSL_ALARM_ACTIVE; | ||
| 526 | } else if (alarm_enable) { | ||
| 527 | RTSR &= RTSR_ALE; | ||
| 528 | RTAR = alarm_time; | ||
| 529 | dev_dbg(sharpsl_pm.dev, "User alarm at: %08x\n",RTAR); | ||
| 530 | } else { | ||
| 531 | dev_dbg(sharpsl_pm.dev, "No alarms set.\n"); | ||
| 532 | } | ||
| 533 | |||
| 534 | pxa_pm_enter(state); | ||
| 535 | |||
| 536 | sharpsl_pm.machinfo->postsuspend(); | ||
| 537 | |||
| 538 | dev_dbg(sharpsl_pm.dev, "Corgi woken up from suspend: %08x\n",PEDR); | ||
| 539 | } | ||
| 540 | |||
| 541 | static int corgi_enter_suspend(unsigned long alarm_time, unsigned int alarm_enable, suspend_state_t state) | ||
| 542 | { | ||
| 543 | if (!sharpsl_pm.machinfo->should_wakeup(!(sharpsl_pm.flags & SHARPSL_ALARM_ACTIVE) && alarm_enable) ) | ||
| 544 | { | ||
| 545 | if (!(sharpsl_pm.flags & SHARPSL_ALARM_ACTIVE)) { | ||
| 546 | dev_dbg(sharpsl_pm.dev, "No user triggered wakeup events and not charging. Strange. Suspend.\n"); | ||
| 547 | corgi_goto_sleep(alarm_time, alarm_enable, state); | ||
| 548 | return 1; | ||
| 549 | } | ||
| 550 | if(sharpsl_off_charge_battery()) { | ||
| 551 | dev_dbg(sharpsl_pm.dev, "Charging. Suspend...\n"); | ||
| 552 | corgi_goto_sleep(alarm_time, alarm_enable, state); | ||
| 553 | return 1; | ||
| 554 | } | ||
| 555 | dev_dbg(sharpsl_pm.dev, "User triggered wakeup in offline charger.\n"); | ||
| 556 | } | ||
| 557 | |||
| 558 | if ((!sharpsl_pm.machinfo->read_devdata(SHARPSL_STATUS_LOCK)) || (sharpsl_fatal_check() < 0) ) | ||
| 559 | { | ||
| 560 | dev_err(sharpsl_pm.dev, "Fatal condition. Suspend.\n"); | ||
| 561 | corgi_goto_sleep(alarm_time, alarm_enable, state); | ||
| 562 | return 1; | ||
| 563 | } | ||
| 564 | |||
| 565 | return 0; | ||
| 566 | } | ||
| 567 | |||
| 568 | static int corgi_pxa_pm_enter(suspend_state_t state) | ||
| 569 | { | ||
| 570 | unsigned long alarm_time = RTAR; | ||
| 571 | unsigned int alarm_status = ((RTSR & RTSR_ALE) != 0); | ||
| 572 | |||
| 573 | dev_dbg(sharpsl_pm.dev, "SharpSL suspending for first time.\n"); | ||
| 574 | |||
| 575 | corgi_goto_sleep(alarm_time, alarm_status, state); | ||
| 576 | |||
| 577 | while (corgi_enter_suspend(alarm_time,alarm_status,state)) | ||
| 578 | {} | ||
| 579 | |||
| 580 | dev_dbg(sharpsl_pm.dev, "SharpSL resuming...\n"); | ||
| 581 | |||
| 582 | return 0; | ||
| 583 | } | ||
| 584 | #endif | ||
| 585 | |||
| 586 | |||
| 587 | /* | ||
| 588 | * Check for fatal battery errors | ||
| 589 | * Fatal returns -1 | ||
| 590 | */ | ||
| 591 | static int sharpsl_fatal_check(void) | ||
| 592 | { | ||
| 593 | int buff[5], temp, i, acin; | ||
| 594 | |||
| 595 | dev_dbg(sharpsl_pm.dev, "sharpsl_fatal_check entered\n"); | ||
| 596 | |||
| 597 | /* Check AC-Adapter */ | ||
| 598 | acin = sharpsl_pm.machinfo->read_devdata(SHARPSL_STATUS_ACIN); | ||
| 599 | |||
| 600 | if (acin && (sharpsl_pm.charge_mode == CHRG_ON)) { | ||
| 601 | sharpsl_pm.machinfo->charge(0); | ||
| 602 | udelay(100); | ||
| 603 | sharpsl_pm.machinfo->discharge(1); /* enable discharge */ | ||
| 604 | mdelay(SHARPSL_WAIT_DISCHARGE_ON); | ||
| 605 | } | ||
| 606 | |||
| 607 | if (sharpsl_pm.machinfo->discharge1) | ||
| 608 | sharpsl_pm.machinfo->discharge1(1); | ||
| 609 | |||
| 610 | /* Check battery : check inserting battery ? */ | ||
| 611 | for (i=0; i<5; i++) { | ||
| 612 | buff[i] = sharpsl_pm.machinfo->read_devdata(SHARPSL_BATT_VOLT); | ||
| 613 | mdelay(SHARPSL_CHECK_BATTERY_WAIT_TIME_VOLT); | ||
| 614 | } | ||
| 615 | |||
| 616 | if (sharpsl_pm.machinfo->discharge1) | ||
| 617 | sharpsl_pm.machinfo->discharge1(0); | ||
| 618 | |||
| 619 | if (acin && (sharpsl_pm.charge_mode == CHRG_ON)) { | ||
| 620 | udelay(100); | ||
| 621 | sharpsl_pm.machinfo->charge(1); | ||
| 622 | sharpsl_pm.machinfo->discharge(0); | ||
| 623 | } | ||
| 624 | |||
| 625 | temp = get_select_val(buff); | ||
| 626 | dev_dbg(sharpsl_pm.dev, "sharpsl_fatal_check: acin: %d, discharge voltage: %d, no discharge: %d\n", acin, temp, sharpsl_pm.machinfo->read_devdata(SHARPSL_BATT_VOLT)); | ||
| 627 | |||
| 628 | if ((acin && (temp < SHARPSL_FATAL_ACIN_VOLT)) || | ||
| 629 | (!acin && (temp < SHARPSL_FATAL_NOACIN_VOLT))) | ||
| 630 | return -1; | ||
| 631 | return 0; | ||
| 632 | } | ||
| 633 | |||
| 634 | static int sharpsl_off_charge_error(void) | ||
| 635 | { | ||
| 636 | dev_err(sharpsl_pm.dev, "Offline Charger: Error occured.\n"); | ||
| 637 | sharpsl_pm.machinfo->charge(0); | ||
| 638 | sharpsl_pm_led(SHARPSL_LED_ERROR); | ||
| 639 | sharpsl_pm.charge_mode = CHRG_ERROR; | ||
| 640 | return 1; | ||
| 641 | } | ||
| 642 | |||
| 643 | /* | ||
| 644 | * Charging Control while suspended | ||
| 645 | * Return 1 - go straight to sleep | ||
| 646 | * Return 0 - sleep or wakeup depending on other factors | ||
| 647 | */ | ||
| 648 | static int sharpsl_off_charge_battery(void) | ||
| 649 | { | ||
| 650 | int time; | ||
| 651 | |||
| 652 | dev_dbg(sharpsl_pm.dev, "Charge Mode: %d\n", sharpsl_pm.charge_mode); | ||
| 653 | |||
| 654 | if (sharpsl_pm.charge_mode == CHRG_OFF) { | ||
| 655 | dev_dbg(sharpsl_pm.dev, "Offline Charger: Step 1\n"); | ||
| 656 | |||
| 657 | /* AC Check */ | ||
| 658 | if ((sharpsl_ac_check() < 0) || (sharpsl_check_battery_temp() < 0)) | ||
| 659 | return sharpsl_off_charge_error(); | ||
| 660 | |||
| 661 | /* Start Charging */ | ||
| 662 | sharpsl_pm_led(SHARPSL_LED_ON); | ||
| 663 | sharpsl_pm.machinfo->charge(0); | ||
| 664 | mdelay(SHARPSL_CHARGE_WAIT_TIME); | ||
| 665 | sharpsl_pm.machinfo->charge(1); | ||
| 666 | |||
| 667 | sharpsl_pm.charge_mode = CHRG_ON; | ||
| 668 | sharpsl_pm.full_count = 0; | ||
| 669 | |||
| 670 | return 1; | ||
| 671 | } else if (sharpsl_pm.charge_mode != CHRG_ON) { | ||
| 672 | return 1; | ||
| 673 | } | ||
| 674 | |||
| 675 | if (sharpsl_pm.full_count == 0) { | ||
| 676 | int time; | ||
| 677 | |||
| 678 | dev_dbg(sharpsl_pm.dev, "Offline Charger: Step 2\n"); | ||
| 679 | |||
| 680 | if ((sharpsl_check_battery_temp() < 0) || (sharpsl_check_battery_voltage() < 0)) | ||
| 681 | return sharpsl_off_charge_error(); | ||
| 682 | |||
| 683 | sharpsl_pm.machinfo->charge(0); | ||
| 684 | mdelay(SHARPSL_CHARGE_WAIT_TIME); | ||
| 685 | sharpsl_pm.machinfo->charge(1); | ||
| 686 | sharpsl_pm.charge_mode = CHRG_ON; | ||
| 687 | |||
| 688 | mdelay(SHARPSL_CHARGE_CO_CHECK_TIME); | ||
| 689 | |||
| 690 | time = RCNR; | ||
| 691 | while(1) { | ||
| 692 | /* Check if any wakeup event had occured */ | ||
| 693 | if (sharpsl_pm.machinfo->charger_wakeup() != 0) | ||
| 694 | return 0; | ||
| 695 | /* Check for timeout */ | ||
| 696 | if ((RCNR - time) > SHARPSL_WAIT_CO_TIME) | ||
| 697 | return 1; | ||
| 698 | if (sharpsl_pm.machinfo->read_devdata(SHARPSL_STATUS_CHRGFULL)) { | ||
| 699 | dev_dbg(sharpsl_pm.dev, "Offline Charger: Charge full occured. Retrying to check\n"); | ||
| 700 | sharpsl_pm.full_count++; | ||
| 701 | sharpsl_pm.machinfo->charge(0); | ||
| 702 | mdelay(SHARPSL_CHARGE_WAIT_TIME); | ||
| 703 | sharpsl_pm.machinfo->charge(1); | ||
| 704 | return 1; | ||
| 705 | } | ||
| 706 | } | ||
| 707 | } | ||
| 708 | |||
| 709 | dev_dbg(sharpsl_pm.dev, "Offline Charger: Step 3\n"); | ||
| 710 | |||
| 711 | mdelay(SHARPSL_CHARGE_CO_CHECK_TIME); | ||
| 712 | |||
| 713 | time = RCNR; | ||
| 714 | while(1) { | ||
| 715 | /* Check if any wakeup event had occured */ | ||
| 716 | if (sharpsl_pm.machinfo->charger_wakeup() != 0) | ||
| 717 | return 0; | ||
| 718 | /* Check for timeout */ | ||
| 719 | if ((RCNR-time) > SHARPSL_WAIT_CO_TIME) { | ||
| 720 | if (sharpsl_pm.full_count > SHARPSL_CHARGE_RETRY_CNT) { | ||
| 721 | dev_dbg(sharpsl_pm.dev, "Offline Charger: Not charged sufficiently. Retrying.\n"); | ||
| 722 | sharpsl_pm.full_count = 0; | ||
| 723 | } | ||
| 724 | sharpsl_pm.full_count++; | ||
| 725 | return 1; | ||
| 726 | } | ||
| 727 | if (sharpsl_pm.machinfo->read_devdata(SHARPSL_STATUS_CHRGFULL)) { | ||
| 728 | dev_dbg(sharpsl_pm.dev, "Offline Charger: Charging complete.\n"); | ||
| 729 | sharpsl_pm_led(SHARPSL_LED_OFF); | ||
| 730 | sharpsl_pm.machinfo->charge(0); | ||
| 731 | sharpsl_pm.charge_mode = CHRG_DONE; | ||
| 732 | return 1; | ||
| 733 | } | ||
| 734 | } | ||
| 735 | } | ||
| 736 | |||
| 737 | |||
| 738 | static ssize_t battery_percentage_show(struct device *dev, struct device_attribute *attr, char *buf) | ||
| 739 | { | ||
| 740 | return sprintf(buf, "%d\n",sharpsl_pm.battstat.mainbat_percent); | ||
| 741 | } | ||
| 742 | |||
| 743 | static ssize_t battery_voltage_show(struct device *dev, struct device_attribute *attr, char *buf) | ||
| 744 | { | ||
| 745 | return sprintf(buf, "%d\n",sharpsl_pm.battstat.mainbat_voltage); | ||
| 746 | } | ||
| 747 | |||
| 748 | static DEVICE_ATTR(battery_percentage, 0444, battery_percentage_show, NULL); | ||
| 749 | static DEVICE_ATTR(battery_voltage, 0444, battery_voltage_show, NULL); | ||
| 750 | |||
| 751 | extern void (*apm_get_power_status)(struct apm_power_info *); | ||
| 752 | |||
| 753 | static void sharpsl_apm_get_power_status(struct apm_power_info *info) | ||
| 754 | { | ||
| 755 | info->ac_line_status = sharpsl_pm.battstat.ac_status; | ||
| 756 | |||
| 757 | if (sharpsl_pm.charge_mode == CHRG_ON) | ||
| 758 | info->battery_status = APM_BATTERY_STATUS_CHARGING; | ||
| 759 | else | ||
| 760 | info->battery_status = sharpsl_pm.battstat.mainbat_status; | ||
| 761 | |||
| 762 | info->battery_flag = (1 << info->battery_status); | ||
| 763 | info->battery_life = sharpsl_pm.battstat.mainbat_percent; | ||
| 764 | } | ||
| 765 | |||
| 766 | static struct pm_ops sharpsl_pm_ops = { | ||
| 767 | .pm_disk_mode = PM_DISK_FIRMWARE, | ||
| 768 | .prepare = pxa_pm_prepare, | ||
| 769 | .enter = corgi_pxa_pm_enter, | ||
| 770 | .finish = pxa_pm_finish, | ||
| 771 | }; | ||
| 772 | |||
| 773 | static int __init sharpsl_pm_probe(struct platform_device *pdev) | ||
| 774 | { | ||
| 775 | if (!pdev->dev.platform_data) | ||
| 776 | return -EINVAL; | ||
| 777 | |||
| 778 | sharpsl_pm.dev = &pdev->dev; | ||
| 779 | sharpsl_pm.machinfo = pdev->dev.platform_data; | ||
| 780 | sharpsl_pm.charge_mode = CHRG_OFF; | ||
| 781 | sharpsl_pm.flags = 0; | ||
| 782 | |||
| 783 | init_timer(&sharpsl_pm.ac_timer); | ||
| 784 | sharpsl_pm.ac_timer.function = sharpsl_ac_timer; | ||
| 785 | |||
| 786 | init_timer(&sharpsl_pm.chrg_full_timer); | ||
| 787 | sharpsl_pm.chrg_full_timer.function = sharpsl_chrg_full_timer; | ||
| 788 | |||
| 789 | sharpsl_pm.machinfo->init(); | ||
| 790 | |||
| 791 | device_create_file(&pdev->dev, &dev_attr_battery_percentage); | ||
| 792 | device_create_file(&pdev->dev, &dev_attr_battery_voltage); | ||
| 793 | |||
| 794 | apm_get_power_status = sharpsl_apm_get_power_status; | ||
| 795 | |||
| 796 | pm_set_ops(&sharpsl_pm_ops); | ||
| 797 | |||
| 798 | mod_timer(&sharpsl_pm.ac_timer, jiffies + msecs_to_jiffies(250)); | ||
| 799 | |||
| 800 | return 0; | ||
| 801 | } | ||
| 802 | |||
| 803 | static int sharpsl_pm_remove(struct platform_device *pdev) | ||
| 804 | { | ||
| 805 | pm_set_ops(NULL); | ||
| 806 | |||
| 807 | device_remove_file(&pdev->dev, &dev_attr_battery_percentage); | ||
| 808 | device_remove_file(&pdev->dev, &dev_attr_battery_voltage); | ||
| 809 | |||
| 810 | sharpsl_pm.machinfo->exit(); | ||
| 811 | |||
| 812 | del_timer_sync(&sharpsl_pm.chrg_full_timer); | ||
| 813 | del_timer_sync(&sharpsl_pm.ac_timer); | ||
| 814 | |||
| 815 | return 0; | ||
| 816 | } | ||
| 817 | |||
| 818 | static struct platform_driver sharpsl_pm_driver = { | ||
| 819 | .probe = sharpsl_pm_probe, | ||
| 820 | .remove = sharpsl_pm_remove, | ||
| 821 | .suspend = sharpsl_pm_suspend, | ||
| 822 | .resume = sharpsl_pm_resume, | ||
| 823 | .driver = { | ||
| 824 | .name = "sharpsl-pm", | ||
| 825 | }, | ||
| 826 | }; | ||
| 827 | |||
| 828 | static int __devinit sharpsl_pm_init(void) | ||
| 829 | { | ||
| 830 | return platform_driver_register(&sharpsl_pm_driver); | ||
| 831 | } | ||
| 832 | |||
| 833 | static void sharpsl_pm_exit(void) | ||
| 834 | { | ||
| 835 | platform_driver_unregister(&sharpsl_pm_driver); | ||
| 836 | } | ||
| 837 | |||
| 838 | late_initcall(sharpsl_pm_init); | ||
| 839 | module_exit(sharpsl_pm_exit); | ||
diff --git a/arch/arm/configs/ixp4xx_defconfig b/arch/arm/configs/ixp4xx_defconfig index f74c926beb42..613afab62720 100644 --- a/arch/arm/configs/ixp4xx_defconfig +++ b/arch/arm/configs/ixp4xx_defconfig | |||
| @@ -1,7 +1,7 @@ | |||
| 1 | # | 1 | # |
| 2 | # Automatically generated make config: don't edit | 2 | # Automatically generated make config: don't edit |
| 3 | # Linux kernel version: 2.6.14-rc1-git5 | 3 | # Linux kernel version: 2.6.15 |
| 4 | # Tue Sep 20 17:26:28 2005 | 4 | # Tue Jan 3 03:20:40 2006 |
| 5 | # | 5 | # |
| 6 | CONFIG_ARM=y | 6 | CONFIG_ARM=y |
| 7 | CONFIG_MMU=y | 7 | CONFIG_MMU=y |
| @@ -33,6 +33,7 @@ CONFIG_SYSCTL=y | |||
| 33 | CONFIG_KOBJECT_UEVENT=y | 33 | CONFIG_KOBJECT_UEVENT=y |
| 34 | # CONFIG_IKCONFIG is not set | 34 | # CONFIG_IKCONFIG is not set |
| 35 | CONFIG_INITRAMFS_SOURCE="" | 35 | CONFIG_INITRAMFS_SOURCE="" |
| 36 | CONFIG_CC_OPTIMIZE_FOR_SIZE=y | ||
| 36 | CONFIG_EMBEDDED=y | 37 | CONFIG_EMBEDDED=y |
| 37 | CONFIG_KALLSYMS=y | 38 | CONFIG_KALLSYMS=y |
| 38 | # CONFIG_KALLSYMS_ALL is not set | 39 | # CONFIG_KALLSYMS_ALL is not set |
| @@ -42,7 +43,6 @@ CONFIG_BUG=y | |||
| 42 | CONFIG_BASE_FULL=y | 43 | CONFIG_BASE_FULL=y |
| 43 | CONFIG_FUTEX=y | 44 | CONFIG_FUTEX=y |
| 44 | CONFIG_EPOLL=y | 45 | CONFIG_EPOLL=y |
| 45 | CONFIG_CC_OPTIMIZE_FOR_SIZE=y | ||
| 46 | CONFIG_SHMEM=y | 46 | CONFIG_SHMEM=y |
| 47 | CONFIG_CC_ALIGN_FUNCTIONS=0 | 47 | CONFIG_CC_ALIGN_FUNCTIONS=0 |
| 48 | CONFIG_CC_ALIGN_LABELS=0 | 48 | CONFIG_CC_ALIGN_LABELS=0 |
| @@ -62,6 +62,23 @@ CONFIG_MODVERSIONS=y | |||
| 62 | CONFIG_KMOD=y | 62 | CONFIG_KMOD=y |
| 63 | 63 | ||
| 64 | # | 64 | # |
| 65 | # Block layer | ||
| 66 | # | ||
| 67 | |||
| 68 | # | ||
| 69 | # IO Schedulers | ||
| 70 | # | ||
| 71 | CONFIG_IOSCHED_NOOP=y | ||
| 72 | CONFIG_IOSCHED_AS=y | ||
| 73 | CONFIG_IOSCHED_DEADLINE=y | ||
| 74 | CONFIG_IOSCHED_CFQ=y | ||
| 75 | CONFIG_DEFAULT_AS=y | ||
| 76 | # CONFIG_DEFAULT_DEADLINE is not set | ||
| 77 | # CONFIG_DEFAULT_CFQ is not set | ||
| 78 | # CONFIG_DEFAULT_NOOP is not set | ||
| 79 | CONFIG_DEFAULT_IOSCHED="anticipatory" | ||
| 80 | |||
| 81 | # | ||
| 65 | # System Type | 82 | # System Type |
| 66 | # | 83 | # |
| 67 | # CONFIG_ARCH_CLPS7500 is not set | 84 | # CONFIG_ARCH_CLPS7500 is not set |
| @@ -83,6 +100,7 @@ CONFIG_ARCH_IXP4XX=y | |||
| 83 | # CONFIG_ARCH_LH7A40X is not set | 100 | # CONFIG_ARCH_LH7A40X is not set |
| 84 | # CONFIG_ARCH_OMAP is not set | 101 | # CONFIG_ARCH_OMAP is not set |
| 85 | # CONFIG_ARCH_VERSATILE is not set | 102 | # CONFIG_ARCH_VERSATILE is not set |
| 103 | # CONFIG_ARCH_REALVIEW is not set | ||
| 86 | # CONFIG_ARCH_IMX is not set | 104 | # CONFIG_ARCH_IMX is not set |
| 87 | # CONFIG_ARCH_H720X is not set | 105 | # CONFIG_ARCH_H720X is not set |
| 88 | # CONFIG_ARCH_AAEC2000 is not set | 106 | # CONFIG_ARCH_AAEC2000 is not set |
| @@ -102,6 +120,7 @@ CONFIG_MACH_IXDPG425=y | |||
| 102 | CONFIG_MACH_IXDP465=y | 120 | CONFIG_MACH_IXDP465=y |
| 103 | CONFIG_ARCH_IXCDP1100=y | 121 | CONFIG_ARCH_IXCDP1100=y |
| 104 | CONFIG_ARCH_PRPMC1100=y | 122 | CONFIG_ARCH_PRPMC1100=y |
| 123 | CONFIG_MACH_NAS100D=y | ||
| 105 | CONFIG_ARCH_IXDP4XX=y | 124 | CONFIG_ARCH_IXDP4XX=y |
| 106 | CONFIG_CPU_IXP46X=y | 125 | CONFIG_CPU_IXP46X=y |
| 107 | # CONFIG_MACH_GTWX5715 is not set | 126 | # CONFIG_MACH_GTWX5715 is not set |
| @@ -155,6 +174,7 @@ CONFIG_FLATMEM_MANUAL=y | |||
| 155 | CONFIG_FLATMEM=y | 174 | CONFIG_FLATMEM=y |
| 156 | CONFIG_FLAT_NODE_MEM_MAP=y | 175 | CONFIG_FLAT_NODE_MEM_MAP=y |
| 157 | # CONFIG_SPARSEMEM_STATIC is not set | 176 | # CONFIG_SPARSEMEM_STATIC is not set |
| 177 | CONFIG_SPLIT_PTLOCK_CPUS=4096 | ||
| 158 | CONFIG_ALIGNMENT_TRAP=y | 178 | CONFIG_ALIGNMENT_TRAP=y |
| 159 | 179 | ||
| 160 | # | 180 | # |
| @@ -173,6 +193,7 @@ CONFIG_CMDLINE="console=ttyS0,115200 ip=bootp root=/dev/nfs" | |||
| 173 | # At least one emulation must be selected | 193 | # At least one emulation must be selected |
| 174 | # | 194 | # |
| 175 | CONFIG_FPE_NWFPE=y | 195 | CONFIG_FPE_NWFPE=y |
| 196 | # CONFIG_FPE_NWFPE_XP is not set | ||
| 176 | # CONFIG_FPE_FASTFPE is not set | 197 | # CONFIG_FPE_FASTFPE is not set |
| 177 | 198 | ||
| 178 | # | 199 | # |
| @@ -187,6 +208,8 @@ CONFIG_BINFMT_ELF=y | |||
| 187 | # Power management options | 208 | # Power management options |
| 188 | # | 209 | # |
| 189 | CONFIG_PM=y | 210 | CONFIG_PM=y |
| 211 | CONFIG_PM_LEGACY=y | ||
| 212 | # CONFIG_PM_DEBUG is not set | ||
| 190 | CONFIG_APM=y | 213 | CONFIG_APM=y |
| 191 | 214 | ||
| 192 | # | 215 | # |
| @@ -271,6 +294,10 @@ CONFIG_IP_VS_SH=m | |||
| 271 | CONFIG_NETFILTER=y | 294 | CONFIG_NETFILTER=y |
| 272 | # CONFIG_NETFILTER_DEBUG is not set | 295 | # CONFIG_NETFILTER_DEBUG is not set |
| 273 | CONFIG_BRIDGE_NETFILTER=y | 296 | CONFIG_BRIDGE_NETFILTER=y |
| 297 | |||
| 298 | # | ||
| 299 | # Core Netfilter Configuration | ||
| 300 | # | ||
| 274 | # CONFIG_NETFILTER_NETLINK is not set | 301 | # CONFIG_NETFILTER_NETLINK is not set |
| 275 | 302 | ||
| 276 | # | 303 | # |
| @@ -286,6 +313,7 @@ CONFIG_IP_NF_IRC=m | |||
| 286 | # CONFIG_IP_NF_NETBIOS_NS is not set | 313 | # CONFIG_IP_NF_NETBIOS_NS is not set |
| 287 | # CONFIG_IP_NF_TFTP is not set | 314 | # CONFIG_IP_NF_TFTP is not set |
| 288 | # CONFIG_IP_NF_AMANDA is not set | 315 | # CONFIG_IP_NF_AMANDA is not set |
| 316 | # CONFIG_IP_NF_PPTP is not set | ||
| 289 | CONFIG_IP_NF_QUEUE=m | 317 | CONFIG_IP_NF_QUEUE=m |
| 290 | CONFIG_IP_NF_IPTABLES=m | 318 | CONFIG_IP_NF_IPTABLES=m |
| 291 | CONFIG_IP_NF_MATCH_LIMIT=m | 319 | CONFIG_IP_NF_MATCH_LIMIT=m |
| @@ -319,6 +347,7 @@ CONFIG_IP_NF_TARGET_REJECT=m | |||
| 319 | CONFIG_IP_NF_TARGET_LOG=m | 347 | CONFIG_IP_NF_TARGET_LOG=m |
| 320 | CONFIG_IP_NF_TARGET_ULOG=m | 348 | CONFIG_IP_NF_TARGET_ULOG=m |
| 321 | CONFIG_IP_NF_TARGET_TCPMSS=m | 349 | CONFIG_IP_NF_TARGET_TCPMSS=m |
| 350 | # CONFIG_IP_NF_TARGET_NFQUEUE is not set | ||
| 322 | CONFIG_IP_NF_NAT=m | 351 | CONFIG_IP_NF_NAT=m |
| 323 | CONFIG_IP_NF_NAT_NEEDED=y | 352 | CONFIG_IP_NF_NAT_NEEDED=y |
| 324 | CONFIG_IP_NF_TARGET_MASQUERADE=m | 353 | CONFIG_IP_NF_TARGET_MASQUERADE=m |
| @@ -380,10 +409,18 @@ CONFIG_ECONET=m | |||
| 380 | CONFIG_ECONET_AUNUDP=y | 409 | CONFIG_ECONET_AUNUDP=y |
| 381 | CONFIG_ECONET_NATIVE=y | 410 | CONFIG_ECONET_NATIVE=y |
| 382 | CONFIG_WAN_ROUTER=m | 411 | CONFIG_WAN_ROUTER=m |
| 412 | |||
| 413 | # | ||
| 414 | # QoS and/or fair queueing | ||
| 415 | # | ||
| 383 | CONFIG_NET_SCHED=y | 416 | CONFIG_NET_SCHED=y |
| 384 | CONFIG_NET_SCH_CLK_JIFFIES=y | 417 | CONFIG_NET_SCH_CLK_JIFFIES=y |
| 385 | # CONFIG_NET_SCH_CLK_GETTIMEOFDAY is not set | 418 | # CONFIG_NET_SCH_CLK_GETTIMEOFDAY is not set |
| 386 | # CONFIG_NET_SCH_CLK_CPU is not set | 419 | # CONFIG_NET_SCH_CLK_CPU is not set |
| 420 | |||
| 421 | # | ||
| 422 | # Queueing/Scheduling | ||
| 423 | # | ||
| 387 | CONFIG_NET_SCH_CBQ=m | 424 | CONFIG_NET_SCH_CBQ=m |
| 388 | CONFIG_NET_SCH_HTB=m | 425 | CONFIG_NET_SCH_HTB=m |
| 389 | # CONFIG_NET_SCH_HFSC is not set | 426 | # CONFIG_NET_SCH_HFSC is not set |
| @@ -397,8 +434,10 @@ CONFIG_NET_SCH_GRED=m | |||
| 397 | CONFIG_NET_SCH_DSMARK=m | 434 | CONFIG_NET_SCH_DSMARK=m |
| 398 | # CONFIG_NET_SCH_NETEM is not set | 435 | # CONFIG_NET_SCH_NETEM is not set |
| 399 | CONFIG_NET_SCH_INGRESS=m | 436 | CONFIG_NET_SCH_INGRESS=m |
| 400 | CONFIG_NET_QOS=y | 437 | |
| 401 | CONFIG_NET_ESTIMATOR=y | 438 | # |
| 439 | # Classification | ||
| 440 | # | ||
| 402 | CONFIG_NET_CLS=y | 441 | CONFIG_NET_CLS=y |
| 403 | # CONFIG_NET_CLS_BASIC is not set | 442 | # CONFIG_NET_CLS_BASIC is not set |
| 404 | CONFIG_NET_CLS_TCINDEX=m | 443 | CONFIG_NET_CLS_TCINDEX=m |
| @@ -407,13 +446,14 @@ CONFIG_NET_CLS_ROUTE=y | |||
| 407 | CONFIG_NET_CLS_FW=m | 446 | CONFIG_NET_CLS_FW=m |
| 408 | CONFIG_NET_CLS_U32=m | 447 | CONFIG_NET_CLS_U32=m |
| 409 | # CONFIG_CLS_U32_PERF is not set | 448 | # CONFIG_CLS_U32_PERF is not set |
| 410 | # CONFIG_NET_CLS_IND is not set | ||
| 411 | # CONFIG_CLS_U32_MARK is not set | 449 | # CONFIG_CLS_U32_MARK is not set |
| 412 | CONFIG_NET_CLS_RSVP=m | 450 | CONFIG_NET_CLS_RSVP=m |
| 413 | CONFIG_NET_CLS_RSVP6=m | 451 | CONFIG_NET_CLS_RSVP6=m |
| 414 | # CONFIG_NET_EMATCH is not set | 452 | # CONFIG_NET_EMATCH is not set |
| 415 | # CONFIG_NET_CLS_ACT is not set | 453 | # CONFIG_NET_CLS_ACT is not set |
| 416 | CONFIG_NET_CLS_POLICE=y | 454 | CONFIG_NET_CLS_POLICE=y |
| 455 | # CONFIG_NET_CLS_IND is not set | ||
| 456 | CONFIG_NET_ESTIMATOR=y | ||
| 417 | 457 | ||
| 418 | # | 458 | # |
| 419 | # Network testing | 459 | # Network testing |
| @@ -437,6 +477,11 @@ CONFIG_PREVENT_FIRMWARE_BUILD=y | |||
| 437 | # CONFIG_DEBUG_DRIVER is not set | 477 | # CONFIG_DEBUG_DRIVER is not set |
| 438 | 478 | ||
| 439 | # | 479 | # |
| 480 | # Connector - unified userspace <-> kernelspace linker | ||
| 481 | # | ||
| 482 | # CONFIG_CONNECTOR is not set | ||
| 483 | |||
| 484 | # | ||
| 440 | # Memory Technology Devices (MTD) | 485 | # Memory Technology Devices (MTD) |
| 441 | # | 486 | # |
| 442 | CONFIG_MTD=y | 487 | CONFIG_MTD=y |
| @@ -458,6 +503,7 @@ CONFIG_MTD_BLOCK=y | |||
| 458 | # CONFIG_FTL is not set | 503 | # CONFIG_FTL is not set |
| 459 | # CONFIG_NFTL is not set | 504 | # CONFIG_NFTL is not set |
| 460 | # CONFIG_INFTL is not set | 505 | # CONFIG_INFTL is not set |
| 506 | # CONFIG_RFD_FTL is not set | ||
| 461 | 507 | ||
| 462 | # | 508 | # |
| 463 | # RAM/ROM/Flash chip drivers | 509 | # RAM/ROM/Flash chip drivers |
| @@ -492,7 +538,6 @@ CONFIG_MTD_COMPLEX_MAPPINGS=y | |||
| 492 | # CONFIG_MTD_PHYSMAP is not set | 538 | # CONFIG_MTD_PHYSMAP is not set |
| 493 | # CONFIG_MTD_ARM_INTEGRATOR is not set | 539 | # CONFIG_MTD_ARM_INTEGRATOR is not set |
| 494 | CONFIG_MTD_IXP4XX=y | 540 | CONFIG_MTD_IXP4XX=y |
| 495 | # CONFIG_MTD_EDB7312 is not set | ||
| 496 | # CONFIG_MTD_PCI is not set | 541 | # CONFIG_MTD_PCI is not set |
| 497 | # CONFIG_MTD_PLATRAM is not set | 542 | # CONFIG_MTD_PLATRAM is not set |
| 498 | 543 | ||
| @@ -523,6 +568,11 @@ CONFIG_MTD_NAND_IDS=m | |||
| 523 | # CONFIG_MTD_NAND_NANDSIM is not set | 568 | # CONFIG_MTD_NAND_NANDSIM is not set |
| 524 | 569 | ||
| 525 | # | 570 | # |
| 571 | # OneNAND Flash Device Drivers | ||
| 572 | # | ||
| 573 | # CONFIG_MTD_ONENAND is not set | ||
| 574 | |||
| 575 | # | ||
| 526 | # Parallel port support | 576 | # Parallel port support |
| 527 | # | 577 | # |
| 528 | # CONFIG_PARPORT is not set | 578 | # CONFIG_PARPORT is not set |
| @@ -548,14 +598,6 @@ CONFIG_BLK_DEV_RAM_COUNT=16 | |||
| 548 | CONFIG_BLK_DEV_RAM_SIZE=8192 | 598 | CONFIG_BLK_DEV_RAM_SIZE=8192 |
| 549 | CONFIG_BLK_DEV_INITRD=y | 599 | CONFIG_BLK_DEV_INITRD=y |
| 550 | # CONFIG_CDROM_PKTCDVD is not set | 600 | # CONFIG_CDROM_PKTCDVD is not set |
| 551 | |||
| 552 | # | ||
| 553 | # IO Schedulers | ||
| 554 | # | ||
| 555 | CONFIG_IOSCHED_NOOP=y | ||
| 556 | CONFIG_IOSCHED_AS=y | ||
| 557 | CONFIG_IOSCHED_DEADLINE=y | ||
| 558 | CONFIG_IOSCHED_CFQ=y | ||
| 559 | # CONFIG_ATA_OVER_ETH is not set | 601 | # CONFIG_ATA_OVER_ETH is not set |
| 560 | 602 | ||
| 561 | # | 603 | # |
| @@ -668,6 +710,7 @@ CONFIG_NET_ETHERNET=y | |||
| 668 | CONFIG_MII=y | 710 | CONFIG_MII=y |
| 669 | # CONFIG_HAPPYMEAL is not set | 711 | # CONFIG_HAPPYMEAL is not set |
| 670 | # CONFIG_SUNGEM is not set | 712 | # CONFIG_SUNGEM is not set |
| 713 | # CONFIG_CASSINI is not set | ||
| 671 | # CONFIG_NET_VENDOR_3COM is not set | 714 | # CONFIG_NET_VENDOR_3COM is not set |
| 672 | # CONFIG_SMC91X is not set | 715 | # CONFIG_SMC91X is not set |
| 673 | # CONFIG_DM9000 is not set | 716 | # CONFIG_DM9000 is not set |
| @@ -739,6 +782,7 @@ CONFIG_NET_RADIO=y | |||
| 739 | # | 782 | # |
| 740 | # Wireless 802.11b ISA/PCI cards support | 783 | # Wireless 802.11b ISA/PCI cards support |
| 741 | # | 784 | # |
| 785 | # CONFIG_AIRO is not set | ||
| 742 | CONFIG_HERMES=y | 786 | CONFIG_HERMES=y |
| 743 | # CONFIG_PLX_HERMES is not set | 787 | # CONFIG_PLX_HERMES is not set |
| 744 | # CONFIG_TMD_HERMES is not set | 788 | # CONFIG_TMD_HERMES is not set |
| @@ -782,6 +826,7 @@ CONFIG_WAN_ROUTER_DRIVERS=y | |||
| 782 | # | 826 | # |
| 783 | # ATM drivers | 827 | # ATM drivers |
| 784 | # | 828 | # |
| 829 | # CONFIG_ATM_DUMMY is not set | ||
| 785 | CONFIG_ATM_TCP=m | 830 | CONFIG_ATM_TCP=m |
| 786 | # CONFIG_ATM_LANAI is not set | 831 | # CONFIG_ATM_LANAI is not set |
| 787 | # CONFIG_ATM_ENI is not set | 832 | # CONFIG_ATM_ENI is not set |
| @@ -902,6 +947,7 @@ CONFIG_IXP4XX_WATCHDOG=y | |||
| 902 | # TPM devices | 947 | # TPM devices |
| 903 | # | 948 | # |
| 904 | # CONFIG_TCG_TPM is not set | 949 | # CONFIG_TCG_TPM is not set |
| 950 | # CONFIG_TELCLOCK is not set | ||
| 905 | 951 | ||
| 906 | # | 952 | # |
| 907 | # I2C support | 953 | # I2C support |
| @@ -954,6 +1000,7 @@ CONFIG_SENSORS_EEPROM=y | |||
| 954 | # CONFIG_SENSORS_PCF8591 is not set | 1000 | # CONFIG_SENSORS_PCF8591 is not set |
| 955 | # CONFIG_SENSORS_RTC8564 is not set | 1001 | # CONFIG_SENSORS_RTC8564 is not set |
| 956 | # CONFIG_SENSORS_MAX6875 is not set | 1002 | # CONFIG_SENSORS_MAX6875 is not set |
| 1003 | # CONFIG_RTC_X1205_I2C is not set | ||
| 957 | # CONFIG_I2C_DEBUG_CORE is not set | 1004 | # CONFIG_I2C_DEBUG_CORE is not set |
| 958 | # CONFIG_I2C_DEBUG_ALGO is not set | 1005 | # CONFIG_I2C_DEBUG_ALGO is not set |
| 959 | # CONFIG_I2C_DEBUG_BUS is not set | 1006 | # CONFIG_I2C_DEBUG_BUS is not set |
| @@ -1036,6 +1083,10 @@ CONFIG_USB_ARCH_HAS_OHCI=y | |||
| 1036 | # CONFIG_USB is not set | 1083 | # CONFIG_USB is not set |
| 1037 | 1084 | ||
| 1038 | # | 1085 | # |
| 1086 | # NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' | ||
| 1087 | # | ||
| 1088 | |||
| 1089 | # | ||
| 1039 | # USB Gadget Support | 1090 | # USB Gadget Support |
| 1040 | # | 1091 | # |
| 1041 | # CONFIG_USB_GADGET is not set | 1092 | # CONFIG_USB_GADGET is not set |
| @@ -1110,6 +1161,7 @@ CONFIG_RAMFS=y | |||
| 1110 | CONFIG_JFFS2_FS=y | 1161 | CONFIG_JFFS2_FS=y |
| 1111 | CONFIG_JFFS2_FS_DEBUG=0 | 1162 | CONFIG_JFFS2_FS_DEBUG=0 |
| 1112 | CONFIG_JFFS2_FS_WRITEBUFFER=y | 1163 | CONFIG_JFFS2_FS_WRITEBUFFER=y |
| 1164 | # CONFIG_JFFS2_SUMMARY is not set | ||
| 1113 | # CONFIG_JFFS2_COMPRESSION_OPTIONS is not set | 1165 | # CONFIG_JFFS2_COMPRESSION_OPTIONS is not set |
| 1114 | CONFIG_JFFS2_ZLIB=y | 1166 | CONFIG_JFFS2_ZLIB=y |
| 1115 | CONFIG_JFFS2_RTIME=y | 1167 | CONFIG_JFFS2_RTIME=y |
| @@ -1190,7 +1242,9 @@ CONFIG_DETECT_SOFTLOCKUP=y | |||
| 1190 | CONFIG_DEBUG_BUGVERBOSE=y | 1242 | CONFIG_DEBUG_BUGVERBOSE=y |
| 1191 | # CONFIG_DEBUG_INFO is not set | 1243 | # CONFIG_DEBUG_INFO is not set |
| 1192 | # CONFIG_DEBUG_FS is not set | 1244 | # CONFIG_DEBUG_FS is not set |
| 1245 | # CONFIG_DEBUG_VM is not set | ||
| 1193 | CONFIG_FRAME_POINTER=y | 1246 | CONFIG_FRAME_POINTER=y |
| 1247 | # CONFIG_RCU_TORTURE_TEST is not set | ||
| 1194 | # CONFIG_DEBUG_USER is not set | 1248 | # CONFIG_DEBUG_USER is not set |
| 1195 | # CONFIG_DEBUG_WAITQ is not set | 1249 | # CONFIG_DEBUG_WAITQ is not set |
| 1196 | CONFIG_DEBUG_ERRORS=y | 1250 | CONFIG_DEBUG_ERRORS=y |
diff --git a/arch/arm/kernel/Makefile b/arch/arm/kernel/Makefile index c11169b5ed9a..de94b0f3ee2a 100644 --- a/arch/arm/kernel/Makefile +++ b/arch/arm/kernel/Makefile | |||
| @@ -2,15 +2,16 @@ | |||
| 2 | # Makefile for the linux kernel. | 2 | # Makefile for the linux kernel. |
| 3 | # | 3 | # |
| 4 | 4 | ||
| 5 | AFLAGS_head.o := -DKERNEL_RAM_ADDR=$(TEXTADDR) | 5 | AFLAGS_head.o := -DTEXT_OFFSET=$(TEXT_OFFSET) |
| 6 | 6 | ||
| 7 | # Object file lists. | 7 | # Object file lists. |
| 8 | 8 | ||
| 9 | obj-y := compat.o dma.o entry-armv.o entry-common.o irq.o \ | 9 | obj-y := compat.o entry-armv.o entry-common.o irq.o \ |
| 10 | process.o ptrace.o semaphore.o setup.o signal.o sys_arm.o \ | 10 | process.o ptrace.o semaphore.o setup.o signal.o sys_arm.o \ |
| 11 | time.o traps.o | 11 | time.o traps.o |
| 12 | 12 | ||
| 13 | obj-$(CONFIG_APM) += apm.o | 13 | obj-$(CONFIG_APM) += apm.o |
| 14 | obj-$(CONFIG_ISA_DMA_API) += dma.o | ||
| 14 | obj-$(CONFIG_ARCH_ACORN) += ecard.o | 15 | obj-$(CONFIG_ARCH_ACORN) += ecard.o |
| 15 | obj-$(CONFIG_FOOTBRIDGE) += isa.o | 16 | obj-$(CONFIG_FOOTBRIDGE) += isa.o |
| 16 | obj-$(CONFIG_FIQ) += fiq.o | 17 | obj-$(CONFIG_FIQ) += fiq.o |
diff --git a/arch/arm/kernel/apm.c b/arch/arm/kernel/apm.c index a2843be05557..b9df1b782bb1 100644 --- a/arch/arm/kernel/apm.c +++ b/arch/arm/kernel/apm.c | |||
| @@ -20,7 +20,6 @@ | |||
| 20 | #include <linux/apm_bios.h> | 20 | #include <linux/apm_bios.h> |
| 21 | #include <linux/sched.h> | 21 | #include <linux/sched.h> |
| 22 | #include <linux/pm.h> | 22 | #include <linux/pm.h> |
| 23 | #include <linux/pm_legacy.h> | ||
| 24 | #include <linux/device.h> | 23 | #include <linux/device.h> |
| 25 | #include <linux/kernel.h> | 24 | #include <linux/kernel.h> |
| 26 | #include <linux/list.h> | 25 | #include <linux/list.h> |
| @@ -81,6 +80,7 @@ struct apm_user { | |||
| 81 | */ | 80 | */ |
| 82 | static int suspends_pending; | 81 | static int suspends_pending; |
| 83 | static int apm_disabled; | 82 | static int apm_disabled; |
| 83 | static int arm_apm_active; | ||
| 84 | 84 | ||
| 85 | static DECLARE_WAIT_QUEUE_HEAD(apm_waitqueue); | 85 | static DECLARE_WAIT_QUEUE_HEAD(apm_waitqueue); |
| 86 | static DECLARE_WAIT_QUEUE_HEAD(apm_suspend_waitqueue); | 86 | static DECLARE_WAIT_QUEUE_HEAD(apm_suspend_waitqueue); |
| @@ -477,9 +477,9 @@ static int kapmd(void *arg) | |||
| 477 | apm_event_t event; | 477 | apm_event_t event; |
| 478 | 478 | ||
| 479 | wait_event_interruptible(kapmd_wait, | 479 | wait_event_interruptible(kapmd_wait, |
| 480 | !queue_empty(&kapmd_queue) || !pm_active); | 480 | !queue_empty(&kapmd_queue) || !arm_apm_active); |
| 481 | 481 | ||
| 482 | if (!pm_active) | 482 | if (!arm_apm_active) |
| 483 | break; | 483 | break; |
| 484 | 484 | ||
| 485 | spin_lock_irq(&kapmd_queue_lock); | 485 | spin_lock_irq(&kapmd_queue_lock); |
| @@ -522,16 +522,11 @@ static int __init apm_init(void) | |||
| 522 | return -ENODEV; | 522 | return -ENODEV; |
| 523 | } | 523 | } |
| 524 | 524 | ||
| 525 | if (PM_IS_ACTIVE()) { | 525 | arm_apm_active = 1; |
| 526 | printk(KERN_NOTICE "apm: overridden by ACPI.\n"); | ||
| 527 | return -EINVAL; | ||
| 528 | } | ||
| 529 | |||
| 530 | pm_active = 1; | ||
| 531 | 526 | ||
| 532 | ret = kernel_thread(kapmd, NULL, CLONE_KERNEL); | 527 | ret = kernel_thread(kapmd, NULL, CLONE_KERNEL); |
| 533 | if (ret < 0) { | 528 | if (ret < 0) { |
| 534 | pm_active = 0; | 529 | arm_apm_active = 0; |
| 535 | return ret; | 530 | return ret; |
| 536 | } | 531 | } |
| 537 | 532 | ||
| @@ -543,7 +538,7 @@ static int __init apm_init(void) | |||
| 543 | if (ret != 0) { | 538 | if (ret != 0) { |
| 544 | remove_proc_entry("apm", NULL); | 539 | remove_proc_entry("apm", NULL); |
| 545 | 540 | ||
| 546 | pm_active = 0; | 541 | arm_apm_active = 0; |
| 547 | wake_up(&kapmd_wait); | 542 | wake_up(&kapmd_wait); |
| 548 | wait_for_completion(&kapmd_exit); | 543 | wait_for_completion(&kapmd_exit); |
| 549 | } | 544 | } |
| @@ -556,7 +551,7 @@ static void __exit apm_exit(void) | |||
| 556 | misc_deregister(&apm_device); | 551 | misc_deregister(&apm_device); |
| 557 | remove_proc_entry("apm", NULL); | 552 | remove_proc_entry("apm", NULL); |
| 558 | 553 | ||
| 559 | pm_active = 0; | 554 | arm_apm_active = 0; |
| 560 | wake_up(&kapmd_wait); | 555 | wake_up(&kapmd_wait); |
| 561 | wait_for_completion(&kapmd_exit); | 556 | wait_for_completion(&kapmd_exit); |
| 562 | } | 557 | } |
diff --git a/arch/arm/kernel/dma-isa.c b/arch/arm/kernel/dma-isa.c index e9a36304ec3e..03532769a97f 100644 --- a/arch/arm/kernel/dma-isa.c +++ b/arch/arm/kernel/dma-isa.c | |||
| @@ -18,7 +18,7 @@ | |||
| 18 | */ | 18 | */ |
| 19 | #include <linux/ioport.h> | 19 | #include <linux/ioport.h> |
| 20 | #include <linux/init.h> | 20 | #include <linux/init.h> |
| 21 | #include <linux/pci.h> | 21 | #include <linux/dma-mapping.h> |
| 22 | 22 | ||
| 23 | #include <asm/dma.h> | 23 | #include <asm/dma.h> |
| 24 | #include <asm/io.h> | 24 | #include <asm/io.h> |
| @@ -65,37 +65,41 @@ static void isa_enable_dma(dmach_t channel, dma_t *dma) | |||
| 65 | { | 65 | { |
| 66 | if (dma->invalid) { | 66 | if (dma->invalid) { |
| 67 | unsigned long address, length; | 67 | unsigned long address, length; |
| 68 | unsigned int mode, direction; | 68 | unsigned int mode; |
| 69 | enum dma_data_direction direction; | ||
| 69 | 70 | ||
| 70 | mode = channel & 3; | 71 | mode = channel & 3; |
| 71 | switch (dma->dma_mode & DMA_MODE_MASK) { | 72 | switch (dma->dma_mode & DMA_MODE_MASK) { |
| 72 | case DMA_MODE_READ: | 73 | case DMA_MODE_READ: |
| 73 | mode |= ISA_DMA_MODE_READ; | 74 | mode |= ISA_DMA_MODE_READ; |
| 74 | direction = PCI_DMA_FROMDEVICE; | 75 | direction = DMA_FROM_DEVICE; |
| 75 | break; | 76 | break; |
| 76 | 77 | ||
| 77 | case DMA_MODE_WRITE: | 78 | case DMA_MODE_WRITE: |
| 78 | mode |= ISA_DMA_MODE_WRITE; | 79 | mode |= ISA_DMA_MODE_WRITE; |
| 79 | direction = PCI_DMA_TODEVICE; | 80 | direction = DMA_TO_DEVICE; |
| 80 | break; | 81 | break; |
| 81 | 82 | ||
| 82 | case DMA_MODE_CASCADE: | 83 | case DMA_MODE_CASCADE: |
| 83 | mode |= ISA_DMA_MODE_CASCADE; | 84 | mode |= ISA_DMA_MODE_CASCADE; |
| 84 | direction = PCI_DMA_BIDIRECTIONAL; | 85 | direction = DMA_BIDIRECTIONAL; |
| 85 | break; | 86 | break; |
| 86 | 87 | ||
| 87 | default: | 88 | default: |
| 88 | direction = PCI_DMA_NONE; | 89 | direction = DMA_NONE; |
| 89 | break; | 90 | break; |
| 90 | } | 91 | } |
| 91 | 92 | ||
| 92 | if (!dma->using_sg) { | 93 | if (!dma->sg) { |
| 93 | /* | 94 | /* |
| 94 | * Cope with ISA-style drivers which expect cache | 95 | * Cope with ISA-style drivers which expect cache |
| 95 | * coherence. | 96 | * coherence. |
| 96 | */ | 97 | */ |
| 97 | dma->buf.dma_address = pci_map_single(NULL, | 98 | dma->sg = &dma->buf; |
| 98 | dma->buf.__address, dma->buf.length, | 99 | dma->sgcount = 1; |
| 100 | dma->buf.length = dma->count; | ||
| 101 | dma->buf.dma_address = dma_map_single(NULL, | ||
| 102 | dma->addr, dma->count, | ||
| 99 | direction); | 103 | direction); |
| 100 | } | 104 | } |
| 101 | 105 | ||
diff --git a/arch/arm/kernel/dma.c b/arch/arm/kernel/dma.c index 2b7883884234..5a0f4bc5da95 100644 --- a/arch/arm/kernel/dma.c +++ b/arch/arm/kernel/dma.c | |||
| @@ -12,8 +12,6 @@ | |||
| 12 | * DMA facilities. | 12 | * DMA facilities. |
| 13 | */ | 13 | */ |
| 14 | #include <linux/module.h> | 14 | #include <linux/module.h> |
| 15 | #include <linux/slab.h> | ||
| 16 | #include <linux/mman.h> | ||
| 17 | #include <linux/init.h> | 15 | #include <linux/init.h> |
| 18 | #include <linux/spinlock.h> | 16 | #include <linux/spinlock.h> |
| 19 | #include <linux/errno.h> | 17 | #include <linux/errno.h> |
| @@ -23,8 +21,7 @@ | |||
| 23 | #include <asm/mach/dma.h> | 21 | #include <asm/mach/dma.h> |
| 24 | 22 | ||
| 25 | DEFINE_SPINLOCK(dma_spin_lock); | 23 | DEFINE_SPINLOCK(dma_spin_lock); |
| 26 | 24 | EXPORT_SYMBOL(dma_spin_lock); | |
| 27 | #if MAX_DMA_CHANNELS > 0 | ||
| 28 | 25 | ||
| 29 | static dma_t dma_chan[MAX_DMA_CHANNELS]; | 26 | static dma_t dma_chan[MAX_DMA_CHANNELS]; |
| 30 | 27 | ||
| @@ -81,6 +78,7 @@ bad_dma: | |||
| 81 | busy: | 78 | busy: |
| 82 | return -EBUSY; | 79 | return -EBUSY; |
| 83 | } | 80 | } |
| 81 | EXPORT_SYMBOL(request_dma); | ||
| 84 | 82 | ||
| 85 | /* | 83 | /* |
| 86 | * Free DMA channel | 84 | * Free DMA channel |
| @@ -112,6 +110,7 @@ void free_dma(dmach_t channel) | |||
| 112 | bad_dma: | 110 | bad_dma: |
| 113 | printk(KERN_ERR "dma: trying to free DMA%d\n", channel); | 111 | printk(KERN_ERR "dma: trying to free DMA%d\n", channel); |
| 114 | } | 112 | } |
| 113 | EXPORT_SYMBOL(free_dma); | ||
| 115 | 114 | ||
| 116 | /* Set DMA Scatter-Gather list | 115 | /* Set DMA Scatter-Gather list |
| 117 | */ | 116 | */ |
| @@ -125,15 +124,15 @@ void set_dma_sg (dmach_t channel, struct scatterlist *sg, int nr_sg) | |||
| 125 | 124 | ||
| 126 | dma->sg = sg; | 125 | dma->sg = sg; |
| 127 | dma->sgcount = nr_sg; | 126 | dma->sgcount = nr_sg; |
| 128 | dma->using_sg = 1; | ||
| 129 | dma->invalid = 1; | 127 | dma->invalid = 1; |
| 130 | } | 128 | } |
| 129 | EXPORT_SYMBOL(set_dma_sg); | ||
| 131 | 130 | ||
| 132 | /* Set DMA address | 131 | /* Set DMA address |
| 133 | * | 132 | * |
| 134 | * Copy address to the structure, and set the invalid bit | 133 | * Copy address to the structure, and set the invalid bit |
| 135 | */ | 134 | */ |
| 136 | void set_dma_addr (dmach_t channel, unsigned long physaddr) | 135 | void __set_dma_addr (dmach_t channel, void *addr) |
| 137 | { | 136 | { |
| 138 | dma_t *dma = dma_chan + channel; | 137 | dma_t *dma = dma_chan + channel; |
| 139 | 138 | ||
| @@ -141,12 +140,11 @@ void set_dma_addr (dmach_t channel, unsigned long physaddr) | |||
| 141 | printk(KERN_ERR "dma%d: altering DMA address while " | 140 | printk(KERN_ERR "dma%d: altering DMA address while " |
| 142 | "DMA active\n", channel); | 141 | "DMA active\n", channel); |
| 143 | 142 | ||
| 144 | dma->sg = &dma->buf; | 143 | dma->sg = NULL; |
| 145 | dma->sgcount = 1; | 144 | dma->addr = addr; |
| 146 | dma->buf.__address = bus_to_virt(physaddr); | ||
| 147 | dma->using_sg = 0; | ||
| 148 | dma->invalid = 1; | 145 | dma->invalid = 1; |
| 149 | } | 146 | } |
| 147 | EXPORT_SYMBOL(__set_dma_addr); | ||
| 150 | 148 | ||
| 151 | /* Set DMA byte count | 149 | /* Set DMA byte count |
| 152 | * | 150 | * |
| @@ -160,12 +158,11 @@ void set_dma_count (dmach_t channel, unsigned long count) | |||
| 160 | printk(KERN_ERR "dma%d: altering DMA count while " | 158 | printk(KERN_ERR "dma%d: altering DMA count while " |
| 161 | "DMA active\n", channel); | 159 | "DMA active\n", channel); |
| 162 | 160 | ||
| 163 | dma->sg = &dma->buf; | 161 | dma->sg = NULL; |
| 164 | dma->sgcount = 1; | 162 | dma->count = count; |
| 165 | dma->buf.length = count; | ||
| 166 | dma->using_sg = 0; | ||
| 167 | dma->invalid = 1; | 163 | dma->invalid = 1; |
| 168 | } | 164 | } |
| 165 | EXPORT_SYMBOL(set_dma_count); | ||
| 169 | 166 | ||
| 170 | /* Set DMA direction mode | 167 | /* Set DMA direction mode |
| 171 | */ | 168 | */ |
| @@ -180,6 +177,7 @@ void set_dma_mode (dmach_t channel, dmamode_t mode) | |||
| 180 | dma->dma_mode = mode; | 177 | dma->dma_mode = mode; |
| 181 | dma->invalid = 1; | 178 | dma->invalid = 1; |
| 182 | } | 179 | } |
| 180 | EXPORT_SYMBOL(set_dma_mode); | ||
| 183 | 181 | ||
| 184 | /* Enable DMA channel | 182 | /* Enable DMA channel |
| 185 | */ | 183 | */ |
| @@ -200,6 +198,7 @@ free_dma: | |||
| 200 | printk(KERN_ERR "dma%d: trying to enable free DMA\n", channel); | 198 | printk(KERN_ERR "dma%d: trying to enable free DMA\n", channel); |
| 201 | BUG(); | 199 | BUG(); |
| 202 | } | 200 | } |
| 201 | EXPORT_SYMBOL(enable_dma); | ||
| 203 | 202 | ||
| 204 | /* Disable DMA channel | 203 | /* Disable DMA channel |
| 205 | */ | 204 | */ |
| @@ -220,6 +219,7 @@ free_dma: | |||
| 220 | printk(KERN_ERR "dma%d: trying to disable free DMA\n", channel); | 219 | printk(KERN_ERR "dma%d: trying to disable free DMA\n", channel); |
| 221 | BUG(); | 220 | BUG(); |
| 222 | } | 221 | } |
| 222 | EXPORT_SYMBOL(disable_dma); | ||
| 223 | 223 | ||
| 224 | /* | 224 | /* |
| 225 | * Is the specified DMA channel active? | 225 | * Is the specified DMA channel active? |
| @@ -233,6 +233,7 @@ void set_dma_page(dmach_t channel, char pagenr) | |||
| 233 | { | 233 | { |
| 234 | printk(KERN_ERR "dma%d: trying to set_dma_page\n", channel); | 234 | printk(KERN_ERR "dma%d: trying to set_dma_page\n", channel); |
| 235 | } | 235 | } |
| 236 | EXPORT_SYMBOL(set_dma_page); | ||
| 236 | 237 | ||
| 237 | void set_dma_speed(dmach_t channel, int cycle_ns) | 238 | void set_dma_speed(dmach_t channel, int cycle_ns) |
| 238 | { | 239 | { |
| @@ -243,6 +244,7 @@ void set_dma_speed(dmach_t channel, int cycle_ns) | |||
| 243 | ret = dma->d_ops->setspeed(channel, dma, cycle_ns); | 244 | ret = dma->d_ops->setspeed(channel, dma, cycle_ns); |
| 244 | dma->speed = ret; | 245 | dma->speed = ret; |
| 245 | } | 246 | } |
| 247 | EXPORT_SYMBOL(set_dma_speed); | ||
| 246 | 248 | ||
| 247 | int get_dma_residue(dmach_t channel) | 249 | int get_dma_residue(dmach_t channel) |
| 248 | { | 250 | { |
| @@ -254,49 +256,12 @@ int get_dma_residue(dmach_t channel) | |||
| 254 | 256 | ||
| 255 | return ret; | 257 | return ret; |
| 256 | } | 258 | } |
| 259 | EXPORT_SYMBOL(get_dma_residue); | ||
| 257 | 260 | ||
| 258 | void __init init_dma(void) | 261 | static int __init init_dma(void) |
| 259 | { | 262 | { |
| 260 | arch_dma_init(dma_chan); | 263 | arch_dma_init(dma_chan); |
| 261 | } | ||
| 262 | |||
| 263 | #else | ||
| 264 | |||
| 265 | int request_dma(dmach_t channel, const char *device_id) | ||
| 266 | { | ||
| 267 | return -EINVAL; | ||
| 268 | } | ||
| 269 | |||
| 270 | int get_dma_residue(dmach_t channel) | ||
| 271 | { | ||
| 272 | return 0; | 264 | return 0; |
| 273 | } | 265 | } |
| 274 | 266 | ||
| 275 | #define GLOBAL_ALIAS(_a,_b) asm (".set " #_a "," #_b "; .globl " #_a) | 267 | core_initcall(init_dma); |
| 276 | GLOBAL_ALIAS(disable_dma, get_dma_residue); | ||
| 277 | GLOBAL_ALIAS(enable_dma, get_dma_residue); | ||
| 278 | GLOBAL_ALIAS(free_dma, get_dma_residue); | ||
| 279 | GLOBAL_ALIAS(get_dma_list, get_dma_residue); | ||
| 280 | GLOBAL_ALIAS(set_dma_mode, get_dma_residue); | ||
| 281 | GLOBAL_ALIAS(set_dma_page, get_dma_residue); | ||
| 282 | GLOBAL_ALIAS(set_dma_count, get_dma_residue); | ||
| 283 | GLOBAL_ALIAS(set_dma_addr, get_dma_residue); | ||
| 284 | GLOBAL_ALIAS(set_dma_sg, get_dma_residue); | ||
| 285 | GLOBAL_ALIAS(set_dma_speed, get_dma_residue); | ||
| 286 | GLOBAL_ALIAS(init_dma, get_dma_residue); | ||
| 287 | |||
| 288 | #endif | ||
| 289 | |||
| 290 | EXPORT_SYMBOL(request_dma); | ||
| 291 | EXPORT_SYMBOL(free_dma); | ||
| 292 | EXPORT_SYMBOL(enable_dma); | ||
| 293 | EXPORT_SYMBOL(disable_dma); | ||
| 294 | EXPORT_SYMBOL(set_dma_addr); | ||
| 295 | EXPORT_SYMBOL(set_dma_count); | ||
| 296 | EXPORT_SYMBOL(set_dma_mode); | ||
| 297 | EXPORT_SYMBOL(set_dma_page); | ||
| 298 | EXPORT_SYMBOL(get_dma_residue); | ||
| 299 | EXPORT_SYMBOL(set_dma_sg); | ||
| 300 | EXPORT_SYMBOL(set_dma_speed); | ||
| 301 | |||
| 302 | EXPORT_SYMBOL(dma_spin_lock); | ||
diff --git a/arch/arm/kernel/entry-armv.S b/arch/arm/kernel/entry-armv.S index 2a8d27e18fa7..a52baedf6262 100644 --- a/arch/arm/kernel/entry-armv.S +++ b/arch/arm/kernel/entry-armv.S | |||
| @@ -18,8 +18,6 @@ | |||
| 18 | #include <asm/memory.h> | 18 | #include <asm/memory.h> |
| 19 | #include <asm/glue.h> | 19 | #include <asm/glue.h> |
| 20 | #include <asm/vfpmacros.h> | 20 | #include <asm/vfpmacros.h> |
| 21 | #include <asm/hardware.h> /* should be moved into entry-macro.S */ | ||
| 22 | #include <asm/arch/irqs.h> /* should be moved into entry-macro.S */ | ||
| 23 | #include <asm/arch/entry-macro.S> | 21 | #include <asm/arch/entry-macro.S> |
| 24 | 22 | ||
| 25 | #include "entry-header.S" | 23 | #include "entry-header.S" |
diff --git a/arch/arm/kernel/head.S b/arch/arm/kernel/head.S index d7d69fd7039f..1e985f2cd70f 100644 --- a/arch/arm/kernel/head.S +++ b/arch/arm/kernel/head.S | |||
| @@ -33,6 +33,8 @@ | |||
| 33 | #define MACHINFO_PGOFFIO 12 | 33 | #define MACHINFO_PGOFFIO 12 |
| 34 | #define MACHINFO_NAME 16 | 34 | #define MACHINFO_NAME 16 |
| 35 | 35 | ||
| 36 | #define KERNEL_RAM_ADDR (PAGE_OFFSET + TEXT_OFFSET) | ||
| 37 | |||
| 36 | /* | 38 | /* |
| 37 | * swapper_pg_dir is the virtual address of the initial page table. | 39 | * swapper_pg_dir is the virtual address of the initial page table. |
| 38 | * We place the page tables 16K below KERNEL_RAM_ADDR. Therefore, we must | 40 | * We place the page tables 16K below KERNEL_RAM_ADDR. Therefore, we must |
diff --git a/arch/arm/kernel/irq.c b/arch/arm/kernel/irq.c index d7099dbbb879..869c466e6258 100644 --- a/arch/arm/kernel/irq.c +++ b/arch/arm/kernel/irq.c | |||
| @@ -1027,7 +1027,6 @@ void __init init_irq_proc(void) | |||
| 1027 | void __init init_IRQ(void) | 1027 | void __init init_IRQ(void) |
| 1028 | { | 1028 | { |
| 1029 | struct irqdesc *desc; | 1029 | struct irqdesc *desc; |
| 1030 | extern void init_dma(void); | ||
| 1031 | int irq; | 1030 | int irq; |
| 1032 | 1031 | ||
| 1033 | #ifdef CONFIG_SMP | 1032 | #ifdef CONFIG_SMP |
| @@ -1041,7 +1040,6 @@ void __init init_IRQ(void) | |||
| 1041 | } | 1040 | } |
| 1042 | 1041 | ||
| 1043 | init_arch_irq(); | 1042 | init_arch_irq(); |
| 1044 | init_dma(); | ||
| 1045 | } | 1043 | } |
| 1046 | 1044 | ||
| 1047 | static int __init noirqdebug_setup(char *str) | 1045 | static int __init noirqdebug_setup(char *str) |
diff --git a/arch/arm/kernel/process.c b/arch/arm/kernel/process.c index 30494aab829a..54a21bdcba5c 100644 --- a/arch/arm/kernel/process.c +++ b/arch/arm/kernel/process.c | |||
| @@ -28,10 +28,9 @@ | |||
| 28 | #include <linux/init.h> | 28 | #include <linux/init.h> |
| 29 | #include <linux/cpu.h> | 29 | #include <linux/cpu.h> |
| 30 | 30 | ||
| 31 | #include <asm/system.h> | ||
| 32 | #include <asm/io.h> | ||
| 33 | #include <asm/leds.h> | 31 | #include <asm/leds.h> |
| 34 | #include <asm/processor.h> | 32 | #include <asm/processor.h> |
| 33 | #include <asm/system.h> | ||
| 35 | #include <asm/uaccess.h> | 34 | #include <asm/uaccess.h> |
| 36 | #include <asm/mach/time.h> | 35 | #include <asm/mach/time.h> |
| 37 | 36 | ||
diff --git a/arch/arm/kernel/setup.c b/arch/arm/kernel/setup.c index 85774165e9fd..2cab741ad0f8 100644 --- a/arch/arm/kernel/setup.c +++ b/arch/arm/kernel/setup.c | |||
| @@ -26,8 +26,6 @@ | |||
| 26 | 26 | ||
| 27 | #include <asm/cpu.h> | 27 | #include <asm/cpu.h> |
| 28 | #include <asm/elf.h> | 28 | #include <asm/elf.h> |
| 29 | #include <asm/hardware.h> | ||
| 30 | #include <asm/io.h> | ||
| 31 | #include <asm/procinfo.h> | 29 | #include <asm/procinfo.h> |
| 32 | #include <asm/setup.h> | 30 | #include <asm/setup.h> |
| 33 | #include <asm/mach-types.h> | 31 | #include <asm/mach-types.h> |
diff --git a/arch/arm/kernel/time.c b/arch/arm/kernel/time.c index fc4729106a32..d7d932c02866 100644 --- a/arch/arm/kernel/time.c +++ b/arch/arm/kernel/time.c | |||
| @@ -29,9 +29,6 @@ | |||
| 29 | #include <linux/sysdev.h> | 29 | #include <linux/sysdev.h> |
| 30 | #include <linux/timer.h> | 30 | #include <linux/timer.h> |
| 31 | 31 | ||
| 32 | #include <asm/hardware.h> | ||
| 33 | #include <asm/io.h> | ||
| 34 | #include <asm/irq.h> | ||
| 35 | #include <asm/leds.h> | 32 | #include <asm/leds.h> |
| 36 | #include <asm/thread_info.h> | 33 | #include <asm/thread_info.h> |
| 37 | #include <asm/mach/time.h> | 34 | #include <asm/mach/time.h> |
diff --git a/arch/arm/kernel/traps.c b/arch/arm/kernel/traps.c index 45e9ea6cd2a5..c9fe6f5f7ee3 100644 --- a/arch/arm/kernel/traps.c +++ b/arch/arm/kernel/traps.c | |||
| @@ -23,7 +23,6 @@ | |||
| 23 | 23 | ||
| 24 | #include <asm/atomic.h> | 24 | #include <asm/atomic.h> |
| 25 | #include <asm/cacheflush.h> | 25 | #include <asm/cacheflush.h> |
| 26 | #include <asm/io.h> | ||
| 27 | #include <asm/system.h> | 26 | #include <asm/system.h> |
| 28 | #include <asm/uaccess.h> | 27 | #include <asm/uaccess.h> |
| 29 | #include <asm/unistd.h> | 28 | #include <asm/unistd.h> |
diff --git a/arch/arm/kernel/vmlinux.lds.S b/arch/arm/kernel/vmlinux.lds.S index 9a47770114d4..2b254e88595c 100644 --- a/arch/arm/kernel/vmlinux.lds.S +++ b/arch/arm/kernel/vmlinux.lds.S | |||
| @@ -17,15 +17,13 @@ jiffies = jiffies_64; | |||
| 17 | jiffies = jiffies_64 + 4; | 17 | jiffies = jiffies_64 + 4; |
| 18 | #endif | 18 | #endif |
| 19 | 19 | ||
| 20 | SECTIONS | ||
| 21 | { | ||
| 20 | #ifdef CONFIG_XIP_KERNEL | 22 | #ifdef CONFIG_XIP_KERNEL |
| 21 | #define TEXTADDR XIP_VIRT_ADDR(CONFIG_XIP_PHYS_ADDR) | 23 | . = XIP_VIRT_ADDR(CONFIG_XIP_PHYS_ADDR); |
| 22 | #else | 24 | #else |
| 23 | #define TEXTADDR KERNEL_RAM_ADDR | 25 | . = PAGE_OFFSET + TEXT_OFFSET; |
| 24 | #endif | 26 | #endif |
| 25 | |||
| 26 | SECTIONS | ||
| 27 | { | ||
| 28 | . = TEXTADDR; | ||
| 29 | .init : { /* Init code and data */ | 27 | .init : { /* Init code and data */ |
| 30 | _stext = .; | 28 | _stext = .; |
| 31 | _sinittext = .; | 29 | _sinittext = .; |
| @@ -104,7 +102,7 @@ SECTIONS | |||
| 104 | 102 | ||
| 105 | #ifdef CONFIG_XIP_KERNEL | 103 | #ifdef CONFIG_XIP_KERNEL |
| 106 | __data_loc = ALIGN(4); /* location in binary */ | 104 | __data_loc = ALIGN(4); /* location in binary */ |
| 107 | . = KERNEL_RAM_ADDR; | 105 | . = PAGE_OFFSET + TEXT_OFFSET; |
| 108 | #else | 106 | #else |
| 109 | . = ALIGN(THREAD_SIZE); | 107 | . = ALIGN(THREAD_SIZE); |
| 110 | __data_loc = .; | 108 | __data_loc = .; |
diff --git a/arch/arm/mach-aaec2000/clock.c b/arch/arm/mach-aaec2000/clock.c index 0340ddc4824e..1c84c60941e1 100644 --- a/arch/arm/mach-aaec2000/clock.c +++ b/arch/arm/mach-aaec2000/clock.c | |||
| @@ -15,9 +15,9 @@ | |||
| 15 | #include <linux/errno.h> | 15 | #include <linux/errno.h> |
| 16 | #include <linux/err.h> | 16 | #include <linux/err.h> |
| 17 | #include <linux/string.h> | 17 | #include <linux/string.h> |
| 18 | #include <linux/clk.h> | ||
| 18 | 19 | ||
| 19 | #include <asm/semaphore.h> | 20 | #include <asm/semaphore.h> |
| 20 | #include <asm/hardware/clock.h> | ||
| 21 | 21 | ||
| 22 | #include "clock.h" | 22 | #include "clock.h" |
| 23 | 23 | ||
| @@ -58,17 +58,6 @@ void clk_disable(struct clk *clk) | |||
| 58 | } | 58 | } |
| 59 | EXPORT_SYMBOL(clk_disable); | 59 | EXPORT_SYMBOL(clk_disable); |
| 60 | 60 | ||
| 61 | int clk_use(struct clk *clk) | ||
| 62 | { | ||
| 63 | return 0; | ||
| 64 | } | ||
| 65 | EXPORT_SYMBOL(clk_use); | ||
| 66 | |||
| 67 | void clk_unuse(struct clk *clk) | ||
| 68 | { | ||
| 69 | } | ||
| 70 | EXPORT_SYMBOL(clk_unuse); | ||
| 71 | |||
| 72 | unsigned long clk_get_rate(struct clk *clk) | 61 | unsigned long clk_get_rate(struct clk *clk) |
| 73 | { | 62 | { |
| 74 | return clk->rate; | 63 | return clk->rate; |
diff --git a/arch/arm/mach-aaec2000/core.c b/arch/arm/mach-aaec2000/core.c index 4e706d9ad368..dce4815cf53c 100644 --- a/arch/arm/mach-aaec2000/core.c +++ b/arch/arm/mach-aaec2000/core.c | |||
| @@ -20,11 +20,11 @@ | |||
| 20 | #include <linux/interrupt.h> | 20 | #include <linux/interrupt.h> |
| 21 | #include <linux/timex.h> | 21 | #include <linux/timex.h> |
| 22 | #include <linux/signal.h> | 22 | #include <linux/signal.h> |
| 23 | #include <linux/amba/bus.h> | ||
| 23 | 24 | ||
| 24 | #include <asm/hardware.h> | 25 | #include <asm/hardware.h> |
| 25 | #include <asm/irq.h> | 26 | #include <asm/irq.h> |
| 26 | #include <asm/sizes.h> | 27 | #include <asm/sizes.h> |
| 27 | #include <asm/hardware/amba.h> | ||
| 28 | 28 | ||
| 29 | #include <asm/mach/flash.h> | 29 | #include <asm/mach/flash.h> |
| 30 | #include <asm/mach/irq.h> | 30 | #include <asm/mach/irq.h> |
diff --git a/arch/arm/mach-aaec2000/core.h b/arch/arm/mach-aaec2000/core.h index daefc0ea14a1..b6029a95f19c 100644 --- a/arch/arm/mach-aaec2000/core.h +++ b/arch/arm/mach-aaec2000/core.h | |||
| @@ -9,7 +9,7 @@ | |||
| 9 | * | 9 | * |
| 10 | */ | 10 | */ |
| 11 | 11 | ||
| 12 | #include <asm/hardware/amba_clcd.h> | 12 | #include <linux/amba/clcd.h> |
| 13 | 13 | ||
| 14 | struct sys_timer; | 14 | struct sys_timer; |
| 15 | 15 | ||
diff --git a/arch/arm/mach-clps711x/dma.c b/arch/arm/mach-clps711x/dma.c deleted file mode 100644 index af5a4de38eac..000000000000 --- a/arch/arm/mach-clps711x/dma.c +++ /dev/null | |||
| @@ -1,27 +0,0 @@ | |||
| 1 | /* | ||
| 2 | * linux/arch/arm/mach-clps711x/dma.c | ||
| 3 | * | ||
| 4 | * Copyright (C) 2000 Deep Blue Solutions Ltd | ||
| 5 | * | ||
| 6 | * This program is free software; you can redistribute it and/or modify | ||
| 7 | * it under the terms of the GNU General Public License as published by | ||
| 8 | * the Free Software Foundation; either version 2 of the License, or | ||
| 9 | * (at your option) any later version. | ||
| 10 | * | ||
| 11 | * This program is distributed in the hope that it will be useful, | ||
| 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| 14 | * GNU General Public License for more details. | ||
| 15 | * | ||
| 16 | * You should have received a copy of the GNU General Public License | ||
| 17 | * along with this program; if not, write to the Free Software | ||
| 18 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | ||
| 19 | */ | ||
| 20 | #include <linux/init.h> | ||
| 21 | |||
| 22 | #include <asm/dma.h> | ||
| 23 | #include <asm/mach/dma.h> | ||
| 24 | |||
| 25 | void __init arch_dma_init(dma_t *dma) | ||
| 26 | { | ||
| 27 | } | ||
diff --git a/arch/arm/mach-epxa10db/dma.c b/arch/arm/mach-epxa10db/dma.c deleted file mode 100644 index 0151e9f1c066..000000000000 --- a/arch/arm/mach-epxa10db/dma.c +++ /dev/null | |||
| @@ -1,28 +0,0 @@ | |||
| 1 | /* | ||
| 2 | * linux/arch/arm/mach-epxa10db/dma.c | ||
| 3 | * | ||
| 4 | * Copyright (C) 1999 ARM Limited | ||
| 5 | * Copyright (C) 2000 Deep Blue Solutions Ltd | ||
| 6 | * | ||
| 7 | * This program is free software; you can redistribute it and/or modify | ||
| 8 | * it under the terms of the GNU General Public License as published by | ||
| 9 | * the Free Software Foundation; either version 2 of the License, or | ||
| 10 | * (at your option) any later version. | ||
| 11 | * | ||
| 12 | * This program is distributed in the hope that it will be useful, | ||
| 13 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 14 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| 15 | * GNU General Public License for more details. | ||
| 16 | * | ||
| 17 | * You should have received a copy of the GNU General Public License | ||
| 18 | * along with this program; if not, write to the Free Software | ||
| 19 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | ||
| 20 | */ | ||
| 21 | #include <linux/init.h> | ||
| 22 | |||
| 23 | #include <asm/dma.h> | ||
| 24 | #include <asm/mach/dma.h> | ||
| 25 | |||
| 26 | void __init arch_dma_init(dma_t *dma) | ||
| 27 | { | ||
| 28 | } | ||
diff --git a/arch/arm/mach-footbridge/dma.c b/arch/arm/mach-footbridge/dma.c index a6b1396b0951..7a54578b51af 100644 --- a/arch/arm/mach-footbridge/dma.c +++ b/arch/arm/mach-footbridge/dma.c | |||
| @@ -15,6 +15,7 @@ | |||
| 15 | 15 | ||
| 16 | #include <asm/dma.h> | 16 | #include <asm/dma.h> |
| 17 | #include <asm/io.h> | 17 | #include <asm/io.h> |
| 18 | #include <asm/scatterlist.h> | ||
| 18 | 19 | ||
| 19 | #include <asm/mach/dma.h> | 20 | #include <asm/mach/dma.h> |
| 20 | #include <asm/hardware/dec21285.h> | 21 | #include <asm/hardware/dec21285.h> |
diff --git a/arch/arm/mach-imx/mx1ads.c b/arch/arm/mach-imx/mx1ads.c index 708e1b3faa14..c9e0cd8ed016 100644 --- a/arch/arm/mach-imx/mx1ads.c +++ b/arch/arm/mach-imx/mx1ads.c | |||
| @@ -29,27 +29,27 @@ | |||
| 29 | #include "generic.h" | 29 | #include "generic.h" |
| 30 | #include <asm/serial.h> | 30 | #include <asm/serial.h> |
| 31 | 31 | ||
| 32 | static struct resource mx1ads_resources[] = { | 32 | static struct resource cs89x0_resources[] = { |
| 33 | [0] = { | 33 | [0] = { |
| 34 | .start = IMX_CS4_VIRT, | 34 | .start = IMX_CS4_PHYS + 0x300, |
| 35 | .end = IMX_CS4_VIRT + 16, | 35 | .end = IMX_CS4_PHYS + 0x300 + 16, |
| 36 | .flags = IORESOURCE_MEM, | 36 | .flags = IORESOURCE_MEM, |
| 37 | }, | 37 | }, |
| 38 | [1] = { | 38 | [1] = { |
| 39 | .start = 13, | 39 | .start = IRQ_GPIOC(17), |
| 40 | .end = 13, | 40 | .end = IRQ_GPIOC(17), |
| 41 | .flags = IORESOURCE_IRQ, | 41 | .flags = IORESOURCE_IRQ, |
| 42 | }, | 42 | }, |
| 43 | }; | 43 | }; |
| 44 | 44 | ||
| 45 | static struct platform_device mx1ads_device = { | 45 | static struct platform_device cs89x0_device = { |
| 46 | .name = "mx1ads", | 46 | .name = "cirrus-cs89x0", |
| 47 | .num_resources = ARRAY_SIZE(mx1ads_resources), | 47 | .num_resources = ARRAY_SIZE(cs89x0_resources), |
| 48 | .resource = mx1ads_resources, | 48 | .resource = cs89x0_resources, |
| 49 | }; | 49 | }; |
| 50 | 50 | ||
| 51 | static struct platform_device *devices[] __initdata = { | 51 | static struct platform_device *devices[] __initdata = { |
| 52 | &mx1ads_device, | 52 | &cs89x0_device, |
| 53 | }; | 53 | }; |
| 54 | 54 | ||
| 55 | static void __init | 55 | static void __init |
| @@ -61,45 +61,10 @@ mx1ads_init(void) | |||
| 61 | platform_add_devices(devices, ARRAY_SIZE(devices)); | 61 | platform_add_devices(devices, ARRAY_SIZE(devices)); |
| 62 | } | 62 | } |
| 63 | 63 | ||
| 64 | static struct map_desc mx1ads_io_desc[] __initdata = { | ||
| 65 | { | ||
| 66 | .virtual = IMX_CS0_VIRT, | ||
| 67 | .pfn = __phys_to_pfn(IMX_CS0_PHYS), | ||
| 68 | .length = IMX_CS0_SIZE, | ||
| 69 | .type = MT_DEVICE | ||
| 70 | }, { | ||
| 71 | .virtual = IMX_CS1_VIRT, | ||
| 72 | .pfn = __phys_to_pfn(IMX_CS1_PHYS), | ||
| 73 | .length = IMX_CS1_SIZE, | ||
| 74 | .type = MT_DEVICE | ||
| 75 | }, { | ||
| 76 | .virtual = IMX_CS2_VIRT, | ||
| 77 | .pfn = __phys_to_pfn(IMX_CS2_PHYS), | ||
| 78 | .length = IMX_CS2_SIZE, | ||
| 79 | .type = MT_DEVICE | ||
| 80 | }, { | ||
| 81 | .virtual = IMX_CS3_VIRT, | ||
| 82 | .pfn = __phys_to_pfn(IMX_CS3_PHYS), | ||
| 83 | .length = IMX_CS3_SIZE, | ||
| 84 | .type = MT_DEVICE | ||
| 85 | }, { | ||
| 86 | .virtual = IMX_CS4_VIRT, | ||
| 87 | .pfn = __phys_to_pfn(IMX_CS4_PHYS), | ||
| 88 | .length = IMX_CS4_SIZE, | ||
| 89 | .type = MT_DEVICE | ||
| 90 | }, { | ||
| 91 | .virtual = IMX_CS5_VIRT, | ||
| 92 | .pfn = __phys_to_pfn(IMX_CS5_PHYS), | ||
| 93 | .length = IMX_CS5_SIZE, | ||
| 94 | .type = MT_DEVICE | ||
| 95 | } | ||
| 96 | }; | ||
| 97 | |||
| 98 | static void __init | 64 | static void __init |
| 99 | mx1ads_map_io(void) | 65 | mx1ads_map_io(void) |
| 100 | { | 66 | { |
| 101 | imx_map_io(); | 67 | imx_map_io(); |
| 102 | iotable_init(mx1ads_io_desc, ARRAY_SIZE(mx1ads_io_desc)); | ||
| 103 | } | 68 | } |
| 104 | 69 | ||
| 105 | MACHINE_START(MX1ADS, "Motorola MX1ADS") | 70 | MACHINE_START(MX1ADS, "Motorola MX1ADS") |
diff --git a/arch/arm/mach-integrator/clock.c b/arch/arm/mach-integrator/clock.c index 73c360685cad..40684e01e865 100644 --- a/arch/arm/mach-integrator/clock.c +++ b/arch/arm/mach-integrator/clock.c | |||
| @@ -14,9 +14,9 @@ | |||
| 14 | #include <linux/errno.h> | 14 | #include <linux/errno.h> |
| 15 | #include <linux/err.h> | 15 | #include <linux/err.h> |
| 16 | #include <linux/string.h> | 16 | #include <linux/string.h> |
| 17 | #include <linux/clk.h> | ||
| 17 | 18 | ||
| 18 | #include <asm/semaphore.h> | 19 | #include <asm/semaphore.h> |
| 19 | #include <asm/hardware/clock.h> | ||
| 20 | #include <asm/hardware/icst525.h> | 20 | #include <asm/hardware/icst525.h> |
| 21 | 21 | ||
| 22 | #include "clock.h" | 22 | #include "clock.h" |
| @@ -58,17 +58,6 @@ void clk_disable(struct clk *clk) | |||
| 58 | } | 58 | } |
| 59 | EXPORT_SYMBOL(clk_disable); | 59 | EXPORT_SYMBOL(clk_disable); |
| 60 | 60 | ||
| 61 | int clk_use(struct clk *clk) | ||
| 62 | { | ||
| 63 | return 0; | ||
| 64 | } | ||
| 65 | EXPORT_SYMBOL(clk_use); | ||
| 66 | |||
| 67 | void clk_unuse(struct clk *clk) | ||
| 68 | { | ||
| 69 | } | ||
| 70 | EXPORT_SYMBOL(clk_unuse); | ||
| 71 | |||
| 72 | unsigned long clk_get_rate(struct clk *clk) | 61 | unsigned long clk_get_rate(struct clk *clk) |
| 73 | { | 62 | { |
| 74 | return clk->rate; | 63 | return clk->rate; |
diff --git a/arch/arm/mach-integrator/core.c b/arch/arm/mach-integrator/core.c index dacbf504dae2..20071a2767cc 100644 --- a/arch/arm/mach-integrator/core.c +++ b/arch/arm/mach-integrator/core.c | |||
| @@ -15,11 +15,11 @@ | |||
| 15 | #include <linux/interrupt.h> | 15 | #include <linux/interrupt.h> |
| 16 | #include <linux/sched.h> | 16 | #include <linux/sched.h> |
| 17 | #include <linux/smp.h> | 17 | #include <linux/smp.h> |
| 18 | #include <linux/amba/bus.h> | ||
| 18 | 19 | ||
| 19 | #include <asm/hardware.h> | 20 | #include <asm/hardware.h> |
| 20 | #include <asm/irq.h> | 21 | #include <asm/irq.h> |
| 21 | #include <asm/io.h> | 22 | #include <asm/io.h> |
| 22 | #include <asm/hardware/amba.h> | ||
| 23 | #include <asm/hardware/arm_timer.h> | 23 | #include <asm/hardware/arm_timer.h> |
| 24 | #include <asm/arch/cm.h> | 24 | #include <asm/arch/cm.h> |
| 25 | #include <asm/system.h> | 25 | #include <asm/system.h> |
diff --git a/arch/arm/mach-integrator/dma.c b/arch/arm/mach-integrator/dma.c deleted file mode 100644 index aae6f23cd72b..000000000000 --- a/arch/arm/mach-integrator/dma.c +++ /dev/null | |||
| @@ -1,35 +0,0 @@ | |||
| 1 | /* | ||
| 2 | * linux/arch/arm/mach-integrator/dma.c | ||
| 3 | * | ||
| 4 | * Copyright (C) 1999 ARM Limited | ||
| 5 | * Copyright (C) 2000 Deep Blue Solutions Ltd | ||
| 6 | * | ||
| 7 | * This program is free software; you can redistribute it and/or modify | ||
| 8 | * it under the terms of the GNU General Public License as published by | ||
| 9 | * the Free Software Foundation; either version 2 of the License, or | ||
| 10 | * (at your option) any later version. | ||
| 11 | * | ||
| 12 | * This program is distributed in the hope that it will be useful, | ||
| 13 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 14 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| 15 | * GNU General Public License for more details. | ||
| 16 | * | ||
| 17 | * You should have received a copy of the GNU General Public License | ||
| 18 | * along with this program; if not, write to the Free Software | ||
| 19 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | ||
| 20 | */ | ||
| 21 | #include <linux/slab.h> | ||
| 22 | #include <linux/mman.h> | ||
| 23 | #include <linux/init.h> | ||
| 24 | |||
| 25 | #include <asm/page.h> | ||
| 26 | #include <asm/pgtable.h> | ||
| 27 | #include <asm/dma.h> | ||
| 28 | #include <asm/io.h> | ||
| 29 | #include <asm/hardware.h> | ||
| 30 | |||
| 31 | #include <asm/mach/dma.h> | ||
| 32 | |||
| 33 | void __init arch_dma_init(dma_t *dma) | ||
| 34 | { | ||
| 35 | } | ||
diff --git a/arch/arm/mach-integrator/impd1.c b/arch/arm/mach-integrator/impd1.c index a4bafee77a06..a85d471c5bfa 100644 --- a/arch/arm/mach-integrator/impd1.c +++ b/arch/arm/mach-integrator/impd1.c | |||
| @@ -18,11 +18,11 @@ | |||
| 18 | #include <linux/device.h> | 18 | #include <linux/device.h> |
| 19 | #include <linux/errno.h> | 19 | #include <linux/errno.h> |
| 20 | #include <linux/mm.h> | 20 | #include <linux/mm.h> |
| 21 | #include <linux/amba/bus.h> | ||
| 22 | #include <linux/amba/clcd.h> | ||
| 21 | 23 | ||
| 22 | #include <asm/io.h> | 24 | #include <asm/io.h> |
| 23 | #include <asm/hardware/icst525.h> | 25 | #include <asm/hardware/icst525.h> |
| 24 | #include <asm/hardware/amba.h> | ||
| 25 | #include <asm/hardware/amba_clcd.h> | ||
| 26 | #include <asm/arch/lm.h> | 26 | #include <asm/arch/lm.h> |
| 27 | #include <asm/arch/impd1.h> | 27 | #include <asm/arch/impd1.h> |
| 28 | #include <asm/sizes.h> | 28 | #include <asm/sizes.h> |
diff --git a/arch/arm/mach-integrator/integrator_ap.c b/arch/arm/mach-integrator/integrator_ap.c index 4c0f7c65facf..3afedeb56a6e 100644 --- a/arch/arm/mach-integrator/integrator_ap.c +++ b/arch/arm/mach-integrator/integrator_ap.c | |||
| @@ -25,6 +25,8 @@ | |||
| 25 | #include <linux/slab.h> | 25 | #include <linux/slab.h> |
| 26 | #include <linux/string.h> | 26 | #include <linux/string.h> |
| 27 | #include <linux/sysdev.h> | 27 | #include <linux/sysdev.h> |
| 28 | #include <linux/amba/bus.h> | ||
| 29 | #include <linux/amba/kmi.h> | ||
| 28 | 30 | ||
| 29 | #include <asm/hardware.h> | 31 | #include <asm/hardware.h> |
| 30 | #include <asm/io.h> | 32 | #include <asm/io.h> |
| @@ -32,8 +34,6 @@ | |||
| 32 | #include <asm/setup.h> | 34 | #include <asm/setup.h> |
| 33 | #include <asm/param.h> /* HZ */ | 35 | #include <asm/param.h> /* HZ */ |
| 34 | #include <asm/mach-types.h> | 36 | #include <asm/mach-types.h> |
| 35 | #include <asm/hardware/amba.h> | ||
| 36 | #include <asm/hardware/amba_kmi.h> | ||
| 37 | 37 | ||
| 38 | #include <asm/arch/lm.h> | 38 | #include <asm/arch/lm.h> |
| 39 | 39 | ||
diff --git a/arch/arm/mach-integrator/integrator_cp.c b/arch/arm/mach-integrator/integrator_cp.c index 93f7ccb22c27..16cf2482a3e9 100644 --- a/arch/arm/mach-integrator/integrator_cp.c +++ b/arch/arm/mach-integrator/integrator_cp.c | |||
| @@ -16,15 +16,15 @@ | |||
| 16 | #include <linux/slab.h> | 16 | #include <linux/slab.h> |
| 17 | #include <linux/string.h> | 17 | #include <linux/string.h> |
| 18 | #include <linux/sysdev.h> | 18 | #include <linux/sysdev.h> |
| 19 | #include <linux/amba/bus.h> | ||
| 20 | #include <linux/amba/kmi.h> | ||
| 21 | #include <linux/amba/clcd.h> | ||
| 19 | 22 | ||
| 20 | #include <asm/hardware.h> | 23 | #include <asm/hardware.h> |
| 21 | #include <asm/io.h> | 24 | #include <asm/io.h> |
| 22 | #include <asm/irq.h> | 25 | #include <asm/irq.h> |
| 23 | #include <asm/setup.h> | 26 | #include <asm/setup.h> |
| 24 | #include <asm/mach-types.h> | 27 | #include <asm/mach-types.h> |
| 25 | #include <asm/hardware/amba.h> | ||
| 26 | #include <asm/hardware/amba_kmi.h> | ||
| 27 | #include <asm/hardware/amba_clcd.h> | ||
| 28 | #include <asm/hardware/icst525.h> | 28 | #include <asm/hardware/icst525.h> |
| 29 | 29 | ||
| 30 | #include <asm/arch/cm.h> | 30 | #include <asm/arch/cm.h> |
diff --git a/arch/arm/mach-integrator/time.c b/arch/arm/mach-integrator/time.c index 1a844ca139e0..9f46aaef8968 100644 --- a/arch/arm/mach-integrator/time.c +++ b/arch/arm/mach-integrator/time.c | |||
| @@ -14,8 +14,8 @@ | |||
| 14 | #include <linux/interrupt.h> | 14 | #include <linux/interrupt.h> |
| 15 | #include <linux/init.h> | 15 | #include <linux/init.h> |
| 16 | #include <linux/device.h> | 16 | #include <linux/device.h> |
| 17 | #include <linux/amba/bus.h> | ||
| 17 | 18 | ||
| 18 | #include <asm/hardware/amba.h> | ||
| 19 | #include <asm/hardware.h> | 19 | #include <asm/hardware.h> |
| 20 | #include <asm/io.h> | 20 | #include <asm/io.h> |
| 21 | #include <asm/uaccess.h> | 21 | #include <asm/uaccess.h> |
diff --git a/arch/arm/mach-iop3xx/iop331-setup.c b/arch/arm/mach-iop3xx/iop331-setup.c index 53f60614498b..e6ea1cba6a17 100644 --- a/arch/arm/mach-iop3xx/iop331-setup.c +++ b/arch/arm/mach-iop3xx/iop331-setup.c | |||
| @@ -18,7 +18,7 @@ | |||
| 18 | #include <linux/platform_device.h> | 18 | #include <linux/platform_device.h> |
| 19 | #include <linux/serial.h> | 19 | #include <linux/serial.h> |
| 20 | #include <linux/tty.h> | 20 | #include <linux/tty.h> |
| 21 | #include <linux/serial_core.h> | 21 | #include <linux/serial_8250.h> |
| 22 | 22 | ||
| 23 | #include <asm/io.h> | 23 | #include <asm/io.h> |
| 24 | #include <asm/pgtable.h> | 24 | #include <asm/pgtable.h> |
| @@ -50,32 +50,74 @@ static struct map_desc iop331_std_desc[] __initdata = { | |||
| 50 | } | 50 | } |
| 51 | }; | 51 | }; |
| 52 | 52 | ||
| 53 | static struct uart_port iop331_serial_ports[] = { | 53 | static struct resource iop33x_uart0_resources[] = { |
| 54 | { | 54 | [0] = { |
| 55 | .membase = (char*)(IOP331_UART0_VIRT), | 55 | .start = IOP331_UART0_PHYS, |
| 56 | .mapbase = (IOP331_UART0_PHYS), | 56 | .end = IOP331_UART0_PHYS + 0x3f, |
| 57 | .irq = IRQ_IOP331_UART0, | 57 | .flags = IORESOURCE_MEM, |
| 58 | .flags = UPF_SKIP_TEST, | 58 | }, |
| 59 | .iotype = UPIO_MEM, | 59 | [1] = { |
| 60 | .regshift = 2, | 60 | .start = IRQ_IOP331_UART0, |
| 61 | .uartclk = IOP331_UART_XTAL, | 61 | .end = IRQ_IOP331_UART0, |
| 62 | .line = 0, | 62 | .flags = IORESOURCE_IRQ |
| 63 | .type = PORT_XSCALE, | 63 | } |
| 64 | .fifosize = 32 | 64 | }; |
| 65 | } , { | 65 | |
| 66 | .membase = (char*)(IOP331_UART1_VIRT), | 66 | static struct resource iop33x_uart1_resources[] = { |
| 67 | .mapbase = (IOP331_UART1_PHYS), | 67 | [0] = { |
| 68 | .irq = IRQ_IOP331_UART1, | 68 | .start = IOP331_UART1_PHYS, |
| 69 | .flags = UPF_SKIP_TEST, | 69 | .end = IOP331_UART1_PHYS + 0x3f, |
| 70 | .iotype = UPIO_MEM, | 70 | .flags = IORESOURCE_MEM, |
| 71 | .regshift = 2, | 71 | }, |
| 72 | .uartclk = IOP331_UART_XTAL, | 72 | [1] = { |
| 73 | .line = 1, | 73 | .start = IRQ_IOP331_UART1, |
| 74 | .type = PORT_XSCALE, | 74 | .end = IRQ_IOP331_UART1, |
| 75 | .fifosize = 32 | 75 | .flags = IORESOURCE_IRQ |
| 76 | } | 76 | } |
| 77 | }; | 77 | }; |
| 78 | 78 | ||
| 79 | static struct plat_serial8250_port iop33x_uart0_data[] = { | ||
| 80 | { | ||
| 81 | .membase = (char*)(IOP331_UART0_VIRT), | ||
| 82 | .mapbase = (IOP331_UART0_PHYS), | ||
| 83 | .irq = IRQ_IOP331_UART0, | ||
| 84 | .uartclk = IOP331_UART_XTAL, | ||
| 85 | .regshift = 2, | ||
| 86 | .iotype = UPIO_MEM, | ||
| 87 | .flags = UPF_SKIP_TEST, | ||
| 88 | }, | ||
| 89 | { }, | ||
| 90 | }; | ||
| 91 | |||
| 92 | static struct plat_serial8250_port iop33x_uart1_data[] = { | ||
| 93 | { | ||
| 94 | .membase = (char*)(IOP331_UART1_VIRT), | ||
| 95 | .mapbase = (IOP331_UART1_PHYS), | ||
| 96 | .irq = IRQ_IOP331_UART1, | ||
| 97 | .uartclk = IOP331_UART_XTAL, | ||
| 98 | .regshift = 2, | ||
| 99 | .iotype = UPIO_MEM, | ||
| 100 | .flags = UPF_SKIP_TEST, | ||
| 101 | }, | ||
| 102 | { }, | ||
| 103 | }; | ||
| 104 | |||
| 105 | static struct platform_device iop33x_uart0 = { | ||
| 106 | .name = "serial8250", | ||
| 107 | .id = 0, | ||
| 108 | .dev.platform_data = iop33x_uart0_data, | ||
| 109 | .num_resources = 2, | ||
| 110 | .resource = iop33x_uart0_resources, | ||
| 111 | }; | ||
| 112 | |||
| 113 | static struct platform_device iop33x_uart1 = { | ||
| 114 | .name = "serial8250", | ||
| 115 | .id = 1, | ||
| 116 | .dev.platform_data = iop33x_uart1_data, | ||
| 117 | .num_resources = 2, | ||
| 118 | .resource = iop33x_uart1_resources, | ||
| 119 | }; | ||
| 120 | |||
| 79 | static struct resource iop33x_i2c_0_resources[] = { | 121 | static struct resource iop33x_i2c_0_resources[] = { |
| 80 | [0] = { | 122 | [0] = { |
| 81 | .start = 0xfffff680, | 123 | .start = 0xfffff680, |
| @@ -117,6 +159,8 @@ static struct platform_device iop33x_i2c_1_controller = { | |||
| 117 | }; | 159 | }; |
| 118 | 160 | ||
| 119 | static struct platform_device *iop33x_devices[] __initdata = { | 161 | static struct platform_device *iop33x_devices[] __initdata = { |
| 162 | &iop33x_uart0, | ||
| 163 | &iop33x_uart1, | ||
| 120 | &iop33x_i2c_0_controller, | 164 | &iop33x_i2c_0_controller, |
| 121 | &iop33x_i2c_1_controller | 165 | &iop33x_i2c_1_controller |
| 122 | }; | 166 | }; |
| @@ -133,8 +177,6 @@ void __init iop33x_init(void) | |||
| 133 | void __init iop331_map_io(void) | 177 | void __init iop331_map_io(void) |
| 134 | { | 178 | { |
| 135 | iotable_init(iop331_std_desc, ARRAY_SIZE(iop331_std_desc)); | 179 | iotable_init(iop331_std_desc, ARRAY_SIZE(iop331_std_desc)); |
| 136 | early_serial_setup(&iop331_serial_ports[0]); | ||
| 137 | early_serial_setup(&iop331_serial_ports[1]); | ||
| 138 | } | 180 | } |
| 139 | 181 | ||
| 140 | #ifdef CONFIG_ARCH_IOP331 | 182 | #ifdef CONFIG_ARCH_IOP331 |
diff --git a/arch/arm/mach-ixp4xx/Kconfig b/arch/arm/mach-ixp4xx/Kconfig index 385285851cb5..daadc78e271b 100644 --- a/arch/arm/mach-ixp4xx/Kconfig +++ b/arch/arm/mach-ixp4xx/Kconfig | |||
| @@ -71,6 +71,14 @@ config ARCH_PRPMC1100 | |||
| 71 | PrPCM1100 Processor Mezanine Module. For more information on | 71 | PrPCM1100 Processor Mezanine Module. For more information on |
| 72 | this platform, see <file:Documentation/arm/IXP4xx>. | 72 | this platform, see <file:Documentation/arm/IXP4xx>. |
| 73 | 73 | ||
| 74 | config MACH_NAS100D | ||
| 75 | bool | ||
| 76 | prompt "NAS100D" | ||
| 77 | help | ||
| 78 | Say 'Y' here if you want your kernel to support Iomega's | ||
| 79 | NAS 100d device. For more information on this platform, | ||
| 80 | see http://www.nslu2-linux.org/wiki/NAS100d/HomePage | ||
| 81 | |||
| 74 | # | 82 | # |
| 75 | # Avila and IXDP share the same source for now. Will change in future | 83 | # Avila and IXDP share the same source for now. Will change in future |
| 76 | # | 84 | # |
diff --git a/arch/arm/mach-ixp4xx/Makefile b/arch/arm/mach-ixp4xx/Makefile index 7a15629c18d0..0471044fa179 100644 --- a/arch/arm/mach-ixp4xx/Makefile +++ b/arch/arm/mach-ixp4xx/Makefile | |||
| @@ -9,4 +9,5 @@ obj-$(CONFIG_MACH_IXDPG425) += ixdpg425-pci.o coyote-setup.o | |||
| 9 | obj-$(CONFIG_ARCH_ADI_COYOTE) += coyote-pci.o coyote-setup.o | 9 | obj-$(CONFIG_ARCH_ADI_COYOTE) += coyote-pci.o coyote-setup.o |
| 10 | obj-$(CONFIG_MACH_GTWX5715) += gtwx5715-pci.o gtwx5715-setup.o | 10 | obj-$(CONFIG_MACH_GTWX5715) += gtwx5715-pci.o gtwx5715-setup.o |
| 11 | obj-$(CONFIG_MACH_NSLU2) += nslu2-pci.o nslu2-setup.o nslu2-power.o | 11 | obj-$(CONFIG_MACH_NSLU2) += nslu2-pci.o nslu2-setup.o nslu2-power.o |
| 12 | obj-$(CONFIG_MACH_NAS100D) += nas100d-pci.o nas100d-setup.o nas100d-power.o | ||
| 12 | 13 | ||
diff --git a/arch/arm/mach-ixp4xx/common-pci.c b/arch/arm/mach-ixp4xx/common-pci.c index 9795da270e3a..6e3462ed5306 100644 --- a/arch/arm/mach-ixp4xx/common-pci.c +++ b/arch/arm/mach-ixp4xx/common-pci.c | |||
| @@ -341,6 +341,29 @@ int dma_needs_bounce(struct device *dev, dma_addr_t dma_addr, size_t size) | |||
| 341 | return (dev->bus == &pci_bus_type ) && ((dma_addr + size) >= SZ_64M); | 341 | return (dev->bus == &pci_bus_type ) && ((dma_addr + size) >= SZ_64M); |
| 342 | } | 342 | } |
| 343 | 343 | ||
| 344 | /* | ||
| 345 | * Only first 64MB of memory can be accessed via PCI. | ||
| 346 | * We use GFP_DMA to allocate safe buffers to do map/unmap. | ||
| 347 | * This is really ugly and we need a better way of specifying | ||
| 348 | * DMA-capable regions of memory. | ||
| 349 | */ | ||
| 350 | void __init ixp4xx_adjust_zones(int node, unsigned long *zone_size, | ||
| 351 | unsigned long *zhole_size) | ||
| 352 | { | ||
| 353 | unsigned int sz = SZ_64M >> PAGE_SHIFT; | ||
| 354 | |||
| 355 | /* | ||
| 356 | * Only adjust if > 64M on current system | ||
| 357 | */ | ||
| 358 | if (node || (zone_size[0] <= sz)) | ||
| 359 | return; | ||
| 360 | |||
| 361 | zone_size[1] = zone_size[0] - sz; | ||
| 362 | zone_size[0] = sz; | ||
| 363 | zhole_size[1] = zhole_size[0]; | ||
| 364 | zhole_size[0] = 0; | ||
| 365 | } | ||
| 366 | |||
| 344 | void __init ixp4xx_pci_preinit(void) | 367 | void __init ixp4xx_pci_preinit(void) |
| 345 | { | 368 | { |
| 346 | unsigned long processor_id; | 369 | unsigned long processor_id; |
diff --git a/arch/arm/mach-ixp4xx/common.c b/arch/arm/mach-ixp4xx/common.c index f3c687cf0071..6b393691d0e8 100644 --- a/arch/arm/mach-ixp4xx/common.c +++ b/arch/arm/mach-ixp4xx/common.c | |||
| @@ -142,6 +142,8 @@ static int ixp4xx_set_irq_type(unsigned int irq, unsigned int type) | |||
| 142 | *int_reg &= ~(IXP4XX_GPIO_STYLE_CLEAR << | 142 | *int_reg &= ~(IXP4XX_GPIO_STYLE_CLEAR << |
| 143 | (line * IXP4XX_GPIO_STYLE_SIZE)); | 143 | (line * IXP4XX_GPIO_STYLE_SIZE)); |
| 144 | 144 | ||
| 145 | *IXP4XX_GPIO_GPISR = (1 << line); | ||
| 146 | |||
| 145 | /* Set the new style */ | 147 | /* Set the new style */ |
| 146 | *int_reg |= (int_style << (line * IXP4XX_GPIO_STYLE_SIZE)); | 148 | *int_reg |= (int_style << (line * IXP4XX_GPIO_STYLE_SIZE)); |
| 147 | 149 | ||
| @@ -169,7 +171,7 @@ static void ixp4xx_irq_ack(unsigned int irq) | |||
| 169 | int line = (irq < 32) ? irq2gpio[irq] : -1; | 171 | int line = (irq < 32) ? irq2gpio[irq] : -1; |
| 170 | 172 | ||
| 171 | if (line >= 0) | 173 | if (line >= 0) |
| 172 | gpio_line_isr_clear(line); | 174 | *IXP4XX_GPIO_GPISR = (1 << line); |
| 173 | } | 175 | } |
| 174 | 176 | ||
| 175 | /* | 177 | /* |
| @@ -330,11 +332,27 @@ static struct platform_device *ixp46x_devices[] __initdata = { | |||
| 330 | &ixp46x_i2c_controller | 332 | &ixp46x_i2c_controller |
| 331 | }; | 333 | }; |
| 332 | 334 | ||
| 335 | unsigned long ixp4xx_exp_bus_size; | ||
| 336 | |||
| 333 | void __init ixp4xx_sys_init(void) | 337 | void __init ixp4xx_sys_init(void) |
| 334 | { | 338 | { |
| 339 | ixp4xx_exp_bus_size = SZ_16M; | ||
| 340 | |||
| 335 | if (cpu_is_ixp46x()) { | 341 | if (cpu_is_ixp46x()) { |
| 342 | int region; | ||
| 343 | |||
| 336 | platform_add_devices(ixp46x_devices, | 344 | platform_add_devices(ixp46x_devices, |
| 337 | ARRAY_SIZE(ixp46x_devices)); | 345 | ARRAY_SIZE(ixp46x_devices)); |
| 346 | |||
| 347 | for (region = 0; region < 7; region++) { | ||
| 348 | if((*(IXP4XX_EXP_REG(0x4 * region)) & 0x200)) { | ||
| 349 | ixp4xx_exp_bus_size = SZ_32M; | ||
| 350 | break; | ||
| 351 | } | ||
| 352 | } | ||
| 338 | } | 353 | } |
| 354 | |||
| 355 | printk("IXP4xx: Using %uMiB expansion bus window size\n", | ||
| 356 | ixp4xx_exp_bus_size >> 20); | ||
| 339 | } | 357 | } |
| 340 | 358 | ||
diff --git a/arch/arm/mach-ixp4xx/coyote-pci.c b/arch/arm/mach-ixp4xx/coyote-pci.c index 60de8a94cff5..e6b7fcd923fa 100644 --- a/arch/arm/mach-ixp4xx/coyote-pci.c +++ b/arch/arm/mach-ixp4xx/coyote-pci.c | |||
| @@ -33,9 +33,6 @@ void __init coyote_pci_preinit(void) | |||
| 33 | set_irq_type(IRQ_COYOTE_PCI_SLOT0, IRQT_LOW); | 33 | set_irq_type(IRQ_COYOTE_PCI_SLOT0, IRQT_LOW); |
| 34 | set_irq_type(IRQ_COYOTE_PCI_SLOT1, IRQT_LOW); | 34 | set_irq_type(IRQ_COYOTE_PCI_SLOT1, IRQT_LOW); |
| 35 | 35 | ||
| 36 | gpio_line_isr_clear(COYOTE_PCI_SLOT0_PIN); | ||
| 37 | gpio_line_isr_clear(COYOTE_PCI_SLOT1_PIN); | ||
| 38 | |||
| 39 | ixp4xx_pci_preinit(); | 36 | ixp4xx_pci_preinit(); |
| 40 | } | 37 | } |
| 41 | 38 | ||
diff --git a/arch/arm/mach-ixp4xx/coyote-setup.c b/arch/arm/mach-ixp4xx/coyote-setup.c index 050c92768913..679594a73981 100644 --- a/arch/arm/mach-ixp4xx/coyote-setup.c +++ b/arch/arm/mach-ixp4xx/coyote-setup.c | |||
| @@ -14,6 +14,7 @@ | |||
| 14 | #include <linux/serial.h> | 14 | #include <linux/serial.h> |
| 15 | #include <linux/tty.h> | 15 | #include <linux/tty.h> |
| 16 | #include <linux/serial_8250.h> | 16 | #include <linux/serial_8250.h> |
| 17 | #include <linux/slab.h> | ||
| 17 | 18 | ||
| 18 | #include <asm/types.h> | 19 | #include <asm/types.h> |
| 19 | #include <asm/setup.h> | 20 | #include <asm/setup.h> |
| @@ -30,8 +31,6 @@ static struct flash_platform_data coyote_flash_data = { | |||
| 30 | }; | 31 | }; |
| 31 | 32 | ||
| 32 | static struct resource coyote_flash_resource = { | 33 | static struct resource coyote_flash_resource = { |
| 33 | .start = COYOTE_FLASH_BASE, | ||
| 34 | .end = COYOTE_FLASH_BASE + COYOTE_FLASH_SIZE - 1, | ||
| 35 | .flags = IORESOURCE_MEM, | 34 | .flags = IORESOURCE_MEM, |
| 36 | }; | 35 | }; |
| 37 | 36 | ||
| @@ -81,6 +80,11 @@ static struct platform_device *coyote_devices[] __initdata = { | |||
| 81 | 80 | ||
| 82 | static void __init coyote_init(void) | 81 | static void __init coyote_init(void) |
| 83 | { | 82 | { |
| 83 | ixp4xx_sys_init(); | ||
| 84 | |||
| 85 | coyote_flash_resource.start = IXP4XX_EXP_BUS_BASE(0); | ||
| 86 | coyote_flash_resource.end = IXP4XX_EXP_BUS_BASE(0) + SZ_32M - 1; | ||
| 87 | |||
| 84 | *IXP4XX_EXP_CS0 |= IXP4XX_FLASH_WRITABLE; | 88 | *IXP4XX_EXP_CS0 |= IXP4XX_FLASH_WRITABLE; |
| 85 | *IXP4XX_EXP_CS1 = *IXP4XX_EXP_CS0; | 89 | *IXP4XX_EXP_CS1 = *IXP4XX_EXP_CS0; |
| 86 | 90 | ||
| @@ -91,8 +95,6 @@ static void __init coyote_init(void) | |||
| 91 | coyote_uart_data[0].irq = IRQ_IXP4XX_UART1; | 95 | coyote_uart_data[0].irq = IRQ_IXP4XX_UART1; |
| 92 | } | 96 | } |
| 93 | 97 | ||
| 94 | |||
| 95 | ixp4xx_sys_init(); | ||
| 96 | platform_add_devices(coyote_devices, ARRAY_SIZE(coyote_devices)); | 98 | platform_add_devices(coyote_devices, ARRAY_SIZE(coyote_devices)); |
| 97 | } | 99 | } |
| 98 | 100 | ||
diff --git a/arch/arm/mach-ixp4xx/gtwx5715-setup.c b/arch/arm/mach-ixp4xx/gtwx5715-setup.c index 29a6d02fa851..038670489970 100644 --- a/arch/arm/mach-ixp4xx/gtwx5715-setup.c +++ b/arch/arm/mach-ixp4xx/gtwx5715-setup.c | |||
| @@ -27,6 +27,7 @@ | |||
| 27 | #include <linux/serial.h> | 27 | #include <linux/serial.h> |
| 28 | #include <linux/tty.h> | 28 | #include <linux/tty.h> |
| 29 | #include <linux/serial_8250.h> | 29 | #include <linux/serial_8250.h> |
| 30 | #include <linux/slab.h> | ||
| 30 | 31 | ||
| 31 | #include <asm/types.h> | 32 | #include <asm/types.h> |
| 32 | #include <asm/setup.h> | 33 | #include <asm/setup.h> |
| @@ -106,11 +107,9 @@ static struct flash_platform_data gtwx5715_flash_data = { | |||
| 106 | .width = 2, | 107 | .width = 2, |
| 107 | }; | 108 | }; |
| 108 | 109 | ||
| 109 | static struct resource gtwx5715_flash_resource = { | 110 | static struct gtw5715_flash_resource = { |
| 110 | .start = GTWX5715_FLASH_BASE, | ||
| 111 | .end = GTWX5715_FLASH_BASE + GTWX5715_FLASH_SIZE - 1, | ||
| 112 | .flags = IORESOURCE_MEM, | 111 | .flags = IORESOURCE_MEM, |
| 113 | }; | 112 | } |
| 114 | 113 | ||
| 115 | static struct platform_device gtwx5715_flash = { | 114 | static struct platform_device gtwx5715_flash = { |
| 116 | .name = "IXP4XX-Flash", | 115 | .name = "IXP4XX-Flash", |
| @@ -129,6 +128,14 @@ static struct platform_device *gtwx5715_devices[] __initdata = { | |||
| 129 | 128 | ||
| 130 | static void __init gtwx5715_init(void) | 129 | static void __init gtwx5715_init(void) |
| 131 | { | 130 | { |
| 131 | ixp4xx_sys_init(); | ||
| 132 | |||
| 133 | if (!flash_resource) | ||
| 134 | printk(KERN_ERR "Could not allocate flash resource\n"); | ||
| 135 | |||
| 136 | gtwx5715_flash_resource.start = IXP4XX_EXP_BUS_BASE(0); | ||
| 137 | gtwx5715_flash_resource.end = IXP4XX_EXP_BUS_BASE(0) + SZ_8M - 1; | ||
| 138 | |||
| 132 | platform_add_devices(gtwx5715_devices, ARRAY_SIZE(gtwx5715_devices)); | 139 | platform_add_devices(gtwx5715_devices, ARRAY_SIZE(gtwx5715_devices)); |
| 133 | } | 140 | } |
| 134 | 141 | ||
diff --git a/arch/arm/mach-ixp4xx/ixdp425-pci.c b/arch/arm/mach-ixp4xx/ixdp425-pci.c index f9a1d3e7d692..da415d5d7f37 100644 --- a/arch/arm/mach-ixp4xx/ixdp425-pci.c +++ b/arch/arm/mach-ixp4xx/ixdp425-pci.c | |||
| @@ -32,11 +32,6 @@ void __init ixdp425_pci_preinit(void) | |||
| 32 | set_irq_type(IRQ_IXDP425_PCI_INTC, IRQT_LOW); | 32 | set_irq_type(IRQ_IXDP425_PCI_INTC, IRQT_LOW); |
| 33 | set_irq_type(IRQ_IXDP425_PCI_INTD, IRQT_LOW); | 33 | set_irq_type(IRQ_IXDP425_PCI_INTD, IRQT_LOW); |
| 34 | 34 | ||
| 35 | gpio_line_isr_clear(IXDP425_PCI_INTA_PIN); | ||
| 36 | gpio_line_isr_clear(IXDP425_PCI_INTB_PIN); | ||
| 37 | gpio_line_isr_clear(IXDP425_PCI_INTC_PIN); | ||
| 38 | gpio_line_isr_clear(IXDP425_PCI_INTD_PIN); | ||
| 39 | |||
| 40 | ixp4xx_pci_preinit(); | 35 | ixp4xx_pci_preinit(); |
| 41 | } | 36 | } |
| 42 | 37 | ||
diff --git a/arch/arm/mach-ixp4xx/ixdp425-setup.c b/arch/arm/mach-ixp4xx/ixdp425-setup.c index 3a22d84e1047..c2e105c89c95 100644 --- a/arch/arm/mach-ixp4xx/ixdp425-setup.c +++ b/arch/arm/mach-ixp4xx/ixdp425-setup.c | |||
| @@ -14,6 +14,7 @@ | |||
| 14 | #include <linux/serial.h> | 14 | #include <linux/serial.h> |
| 15 | #include <linux/tty.h> | 15 | #include <linux/tty.h> |
| 16 | #include <linux/serial_8250.h> | 16 | #include <linux/serial_8250.h> |
| 17 | #include <linux/slab.h> | ||
| 17 | 18 | ||
| 18 | #include <asm/types.h> | 19 | #include <asm/types.h> |
| 19 | #include <asm/setup.h> | 20 | #include <asm/setup.h> |
| @@ -30,8 +31,6 @@ static struct flash_platform_data ixdp425_flash_data = { | |||
| 30 | }; | 31 | }; |
| 31 | 32 | ||
| 32 | static struct resource ixdp425_flash_resource = { | 33 | static struct resource ixdp425_flash_resource = { |
| 33 | .start = IXDP425_FLASH_BASE, | ||
| 34 | .end = IXDP425_FLASH_BASE + IXDP425_FLASH_SIZE - 1, | ||
| 35 | .flags = IORESOURCE_MEM, | 34 | .flags = IORESOURCE_MEM, |
| 36 | }; | 35 | }; |
| 37 | 36 | ||
| @@ -108,17 +107,13 @@ static struct platform_device *ixdp425_devices[] __initdata = { | |||
| 108 | &ixdp425_uart | 107 | &ixdp425_uart |
| 109 | }; | 108 | }; |
| 110 | 109 | ||
| 111 | |||
| 112 | static void __init ixdp425_init(void) | 110 | static void __init ixdp425_init(void) |
| 113 | { | 111 | { |
| 114 | ixp4xx_sys_init(); | 112 | ixp4xx_sys_init(); |
| 115 | 113 | ||
| 116 | /* | 114 | ixdp425_flash_resource.start = IXP4XX_EXP_BUS_BASE(0); |
| 117 | * IXP465 has 32MB window | 115 | ixdp425_flash_resource.end = |
| 118 | */ | 116 | IXP4XX_EXP_BUS_BASE(0) + ixp4xx_exp_bus_size - 1; |
| 119 | if (machine_is_ixdp465()) { | ||
| 120 | ixdp425_flash_resource.end += IXDP425_FLASH_SIZE; | ||
| 121 | } | ||
| 122 | 117 | ||
| 123 | platform_add_devices(ixdp425_devices, ARRAY_SIZE(ixdp425_devices)); | 118 | platform_add_devices(ixdp425_devices, ARRAY_SIZE(ixdp425_devices)); |
| 124 | } | 119 | } |
diff --git a/arch/arm/mach-ixp4xx/ixdpg425-pci.c b/arch/arm/mach-ixp4xx/ixdpg425-pci.c index fe5e7660de1d..526fb6175bc3 100644 --- a/arch/arm/mach-ixp4xx/ixdpg425-pci.c +++ b/arch/arm/mach-ixp4xx/ixdpg425-pci.c | |||
| @@ -32,9 +32,6 @@ void __init ixdpg425_pci_preinit(void) | |||
| 32 | set_irq_type(IRQ_IXP4XX_GPIO6, IRQT_LOW); | 32 | set_irq_type(IRQ_IXP4XX_GPIO6, IRQT_LOW); |
| 33 | set_irq_type(IRQ_IXP4XX_GPIO7, IRQT_LOW); | 33 | set_irq_type(IRQ_IXP4XX_GPIO7, IRQT_LOW); |
| 34 | 34 | ||
| 35 | gpio_line_isr_clear(6); | ||
| 36 | gpio_line_isr_clear(7); | ||
| 37 | |||
| 38 | ixp4xx_pci_preinit(); | 35 | ixp4xx_pci_preinit(); |
| 39 | } | 36 | } |
| 40 | 37 | ||
diff --git a/arch/arm/mach-ixp4xx/nas100d-pci.c b/arch/arm/mach-ixp4xx/nas100d-pci.c new file mode 100644 index 000000000000..26b7c001ff64 --- /dev/null +++ b/arch/arm/mach-ixp4xx/nas100d-pci.c | |||
| @@ -0,0 +1,71 @@ | |||
| 1 | /* | ||
| 2 | * arch/arm/mach-ixp4xx/nas100d-pci.c | ||
| 3 | * | ||
| 4 | * NAS 100d board-level PCI initialization | ||
| 5 | * | ||
| 6 | * based on ixdp425-pci.c: | ||
| 7 | * Copyright (C) 2002 Intel Corporation. | ||
| 8 | * Copyright (C) 2003-2004 MontaVista Software, Inc. | ||
| 9 | * | ||
| 10 | * Maintainer: http://www.nslu2-linux.org/ | ||
| 11 | * | ||
| 12 | * This program is free software; you can redistribute it and/or modify | ||
| 13 | * it under the terms of the GNU General Public License version 2 as | ||
| 14 | * published by the Free Software Foundation. | ||
| 15 | * | ||
| 16 | */ | ||
| 17 | |||
| 18 | #include <linux/config.h> | ||
| 19 | #include <linux/pci.h> | ||
| 20 | #include <linux/init.h> | ||
| 21 | |||
| 22 | #include <asm/mach/pci.h> | ||
| 23 | #include <asm/mach-types.h> | ||
| 24 | |||
| 25 | void __init nas100d_pci_preinit(void) | ||
| 26 | { | ||
| 27 | set_irq_type(IRQ_NAS100D_PCI_INTA, IRQT_LOW); | ||
| 28 | set_irq_type(IRQ_NAS100D_PCI_INTB, IRQT_LOW); | ||
| 29 | set_irq_type(IRQ_NAS100D_PCI_INTC, IRQT_LOW); | ||
| 30 | set_irq_type(IRQ_NAS100D_PCI_INTD, IRQT_LOW); | ||
| 31 | set_irq_type(IRQ_NAS100D_PCI_INTE, IRQT_LOW); | ||
| 32 | |||
| 33 | ixp4xx_pci_preinit(); | ||
| 34 | } | ||
| 35 | |||
| 36 | static int __init nas100d_map_irq(struct pci_dev *dev, u8 slot, u8 pin) | ||
| 37 | { | ||
| 38 | static int pci_irq_table[NAS100D_PCI_MAX_DEV][NAS100D_PCI_IRQ_LINES] = | ||
| 39 | { | ||
| 40 | { IRQ_NAS100D_PCI_INTA, -1, -1 }, | ||
| 41 | { IRQ_NAS100D_PCI_INTB, -1, -1 }, | ||
| 42 | { IRQ_NAS100D_PCI_INTC, IRQ_NAS100D_PCI_INTD, IRQ_NAS100D_PCI_INTE }, | ||
| 43 | }; | ||
| 44 | |||
| 45 | int irq = -1; | ||
| 46 | |||
| 47 | if (slot >= 1 && slot <= NAS100D_PCI_MAX_DEV && | ||
| 48 | pin >= 1 && pin <= NAS100D_PCI_IRQ_LINES) | ||
| 49 | irq = pci_irq_table[slot-1][pin-1]; | ||
| 50 | |||
| 51 | return irq; | ||
| 52 | } | ||
| 53 | |||
| 54 | struct hw_pci __initdata nas100d_pci = { | ||
| 55 | .nr_controllers = 1, | ||
| 56 | .preinit = nas100d_pci_preinit, | ||
| 57 | .swizzle = pci_std_swizzle, | ||
| 58 | .setup = ixp4xx_setup, | ||
| 59 | .scan = ixp4xx_scan_bus, | ||
| 60 | .map_irq = nas100d_map_irq, | ||
| 61 | }; | ||
| 62 | |||
| 63 | int __init nas100d_pci_init(void) | ||
| 64 | { | ||
| 65 | if (machine_is_nas100d()) | ||
| 66 | pci_common_init(&nas100d_pci); | ||
| 67 | |||
| 68 | return 0; | ||
| 69 | } | ||
| 70 | |||
| 71 | subsys_initcall(nas100d_pci_init); | ||
diff --git a/arch/arm/mach-ixp4xx/nas100d-power.c b/arch/arm/mach-ixp4xx/nas100d-power.c new file mode 100644 index 000000000000..2bec69bfa715 --- /dev/null +++ b/arch/arm/mach-ixp4xx/nas100d-power.c | |||
| @@ -0,0 +1,67 @@ | |||
| 1 | /* | ||
| 2 | * arch/arm/mach-ixp4xx/nas100d-power.c | ||
| 3 | * | ||
| 4 | * NAS 100d Power/Reset driver | ||
| 5 | * | ||
| 6 | * Copyright (C) 2005 Tower Technologies | ||
| 7 | * | ||
| 8 | * based on nas100d-io.c | ||
| 9 | * Copyright (C) 2004 Karen Spearel | ||
| 10 | * | ||
| 11 | * Author: Alessandro Zummo <a.zummo@towertech.it> | ||
| 12 | * Maintainers: http://www.nslu2-linux.org/ | ||
| 13 | * | ||
| 14 | * This program is free software; you can redistribute it and/or modify | ||
| 15 | * it under the terms of the GNU General Public License version 2 as | ||
| 16 | * published by the Free Software Foundation. | ||
| 17 | * | ||
| 18 | */ | ||
| 19 | |||
| 20 | #include <linux/module.h> | ||
| 21 | #include <linux/reboot.h> | ||
| 22 | #include <linux/interrupt.h> | ||
| 23 | |||
| 24 | #include <asm/mach-types.h> | ||
| 25 | |||
| 26 | extern void ctrl_alt_del(void); | ||
| 27 | |||
| 28 | static irqreturn_t nas100d_reset_handler(int irq, void *dev_id, struct pt_regs *regs) | ||
| 29 | { | ||
| 30 | /* Signal init to do the ctrlaltdel action, this will bypass init if | ||
| 31 | * it hasn't started and do a kernel_restart. | ||
| 32 | */ | ||
| 33 | ctrl_alt_del(); | ||
| 34 | |||
| 35 | return IRQ_HANDLED; | ||
| 36 | } | ||
| 37 | |||
| 38 | static int __init nas100d_power_init(void) | ||
| 39 | { | ||
| 40 | if (!(machine_is_nas100d())) | ||
| 41 | return 0; | ||
| 42 | |||
| 43 | set_irq_type(NAS100D_RB_IRQ, IRQT_LOW); | ||
| 44 | |||
| 45 | if (request_irq(NAS100D_RB_IRQ, &nas100d_reset_handler, | ||
| 46 | SA_INTERRUPT, "NAS100D reset button", NULL) < 0) { | ||
| 47 | |||
| 48 | printk(KERN_DEBUG "Reset Button IRQ %d not available\n", | ||
| 49 | NAS100D_RB_IRQ); | ||
| 50 | |||
| 51 | return -EIO; | ||
| 52 | } | ||
| 53 | |||
| 54 | return 0; | ||
| 55 | } | ||
| 56 | |||
| 57 | static void __exit nas100d_power_exit(void) | ||
| 58 | { | ||
| 59 | free_irq(NAS100D_RB_IRQ, NULL); | ||
| 60 | } | ||
| 61 | |||
| 62 | module_init(nas100d_power_init); | ||
| 63 | module_exit(nas100d_power_exit); | ||
| 64 | |||
| 65 | MODULE_AUTHOR("Alessandro Zummo <a.zummo@towertech.it>"); | ||
| 66 | MODULE_DESCRIPTION("NAS100D Power/Reset driver"); | ||
| 67 | MODULE_LICENSE("GPL"); | ||
diff --git a/arch/arm/mach-ixp4xx/nas100d-setup.c b/arch/arm/mach-ixp4xx/nas100d-setup.c new file mode 100644 index 000000000000..49998a8bd4e8 --- /dev/null +++ b/arch/arm/mach-ixp4xx/nas100d-setup.c | |||
| @@ -0,0 +1,135 @@ | |||
| 1 | /* | ||
| 2 | * arch/arm/mach-ixp4xx/nas100d-setup.c | ||
| 3 | * | ||
| 4 | * NAS 100d board-setup | ||
| 5 | * | ||
| 6 | * based ixdp425-setup.c: | ||
| 7 | * Copyright (C) 2003-2004 MontaVista Software, Inc. | ||
| 8 | * | ||
| 9 | * Author: Alessandro Zummo <a.zummo@towertech.it> | ||
| 10 | * Author: Rod Whitby <rod@whitby.id.au> | ||
| 11 | * Maintainers: http://www.nslu2-linux.org/ | ||
| 12 | * | ||
| 13 | */ | ||
| 14 | |||
| 15 | #include <linux/kernel.h> | ||
| 16 | #include <linux/serial.h> | ||
| 17 | #include <linux/serial_8250.h> | ||
| 18 | |||
| 19 | #include <asm/mach-types.h> | ||
| 20 | #include <asm/mach/arch.h> | ||
| 21 | #include <asm/mach/flash.h> | ||
| 22 | |||
| 23 | static struct flash_platform_data nas100d_flash_data = { | ||
| 24 | .map_name = "cfi_probe", | ||
| 25 | .width = 2, | ||
| 26 | }; | ||
| 27 | |||
| 28 | static struct resource nas100d_flash_resource = { | ||
| 29 | .flags = IORESOURCE_MEM, | ||
| 30 | }; | ||
| 31 | |||
| 32 | static struct platform_device nas100d_flash = { | ||
| 33 | .name = "IXP4XX-Flash", | ||
| 34 | .id = 0, | ||
| 35 | .dev.platform_data = &nas100d_flash_data, | ||
| 36 | .num_resources = 1, | ||
| 37 | .resource = &nas100d_flash_resource, | ||
| 38 | }; | ||
| 39 | |||
| 40 | static struct ixp4xx_i2c_pins nas100d_i2c_gpio_pins = { | ||
| 41 | .sda_pin = NAS100D_SDA_PIN, | ||
| 42 | .scl_pin = NAS100D_SCL_PIN, | ||
| 43 | }; | ||
| 44 | |||
| 45 | static struct platform_device nas100d_i2c_controller = { | ||
| 46 | .name = "IXP4XX-I2C", | ||
| 47 | .id = 0, | ||
| 48 | .dev.platform_data = &nas100d_i2c_gpio_pins, | ||
| 49 | .num_resources = 0, | ||
| 50 | }; | ||
| 51 | |||
| 52 | static struct resource nas100d_uart_resources[] = { | ||
| 53 | { | ||
| 54 | .start = IXP4XX_UART1_BASE_PHYS, | ||
| 55 | .end = IXP4XX_UART1_BASE_PHYS + 0x0fff, | ||
| 56 | .flags = IORESOURCE_MEM, | ||
| 57 | }, | ||
| 58 | { | ||
| 59 | .start = IXP4XX_UART2_BASE_PHYS, | ||
| 60 | .end = IXP4XX_UART2_BASE_PHYS + 0x0fff, | ||
| 61 | .flags = IORESOURCE_MEM, | ||
| 62 | } | ||
| 63 | }; | ||
| 64 | |||
| 65 | static struct plat_serial8250_port nas100d_uart_data[] = { | ||
| 66 | { | ||
| 67 | .mapbase = IXP4XX_UART1_BASE_PHYS, | ||
| 68 | .membase = (char *)IXP4XX_UART1_BASE_VIRT + REG_OFFSET, | ||
| 69 | .irq = IRQ_IXP4XX_UART1, | ||
| 70 | .flags = UPF_BOOT_AUTOCONF, | ||
| 71 | .iotype = UPIO_MEM, | ||
| 72 | .regshift = 2, | ||
| 73 | .uartclk = IXP4XX_UART_XTAL, | ||
| 74 | }, | ||
| 75 | { | ||
| 76 | .mapbase = IXP4XX_UART2_BASE_PHYS, | ||
| 77 | .membase = (char *)IXP4XX_UART2_BASE_VIRT + REG_OFFSET, | ||
| 78 | .irq = IRQ_IXP4XX_UART2, | ||
| 79 | .flags = UPF_BOOT_AUTOCONF, | ||
| 80 | .iotype = UPIO_MEM, | ||
| 81 | .regshift = 2, | ||
| 82 | .uartclk = IXP4XX_UART_XTAL, | ||
| 83 | }, | ||
| 84 | { } | ||
| 85 | }; | ||
| 86 | |||
| 87 | static struct platform_device nas100d_uart = { | ||
| 88 | .name = "serial8250", | ||
| 89 | .id = PLAT8250_DEV_PLATFORM, | ||
| 90 | .dev.platform_data = nas100d_uart_data, | ||
| 91 | .num_resources = 2, | ||
| 92 | .resource = nas100d_uart_resources, | ||
| 93 | }; | ||
| 94 | |||
| 95 | static struct platform_device *nas100d_devices[] __initdata = { | ||
| 96 | &nas100d_i2c_controller, | ||
| 97 | &nas100d_flash, | ||
| 98 | &nas100d_uart, | ||
| 99 | }; | ||
| 100 | |||
| 101 | static void nas100d_power_off(void) | ||
| 102 | { | ||
| 103 | /* This causes the box to drop the power and go dead. */ | ||
| 104 | |||
| 105 | /* enable the pwr cntl gpio */ | ||
| 106 | gpio_line_config(NAS100D_PO_GPIO, IXP4XX_GPIO_OUT); | ||
| 107 | |||
| 108 | /* do the deed */ | ||
| 109 | gpio_line_set(NAS100D_PO_GPIO, IXP4XX_GPIO_HIGH); | ||
| 110 | } | ||
| 111 | |||
| 112 | static void __init nas100d_init(void) | ||
| 113 | { | ||
| 114 | ixp4xx_sys_init(); | ||
| 115 | |||
| 116 | nas100d_flash_resource.start = IXP4XX_EXP_BUS_BASE(0); | ||
| 117 | nas100d_flash_resource.end = | ||
| 118 | IXP4XX_EXP_BUS_BASE(0) + ixp4xx_exp_bus_size - 1; | ||
| 119 | |||
| 120 | pm_power_off = nas100d_power_off; | ||
| 121 | |||
| 122 | platform_add_devices(nas100d_devices, ARRAY_SIZE(nas100d_devices)); | ||
| 123 | } | ||
| 124 | |||
| 125 | MACHINE_START(NAS100D, "Iomega NAS 100d") | ||
| 126 | /* Maintainer: www.nslu2-linux.org */ | ||
| 127 | .phys_ram = PHYS_OFFSET, | ||
| 128 | .phys_io = IXP4XX_PERIPHERAL_BASE_PHYS, | ||
| 129 | .io_pg_offst = ((IXP4XX_PERIPHERAL_BASE_VIRT) >> 18) & 0xFFFC, | ||
| 130 | .boot_params = 0x00000100, | ||
| 131 | .map_io = ixp4xx_map_io, | ||
| 132 | .init_irq = ixp4xx_init_irq, | ||
| 133 | .timer = &ixp4xx_timer, | ||
| 134 | .init_machine = nas100d_init, | ||
| 135 | MACHINE_END | ||
diff --git a/arch/arm/mach-ixp4xx/nslu2-pci.c b/arch/arm/mach-ixp4xx/nslu2-pci.c index a575f2e0b2c8..ece860444d5b 100644 --- a/arch/arm/mach-ixp4xx/nslu2-pci.c +++ b/arch/arm/mach-ixp4xx/nslu2-pci.c | |||
| @@ -28,14 +28,6 @@ void __init nslu2_pci_preinit(void) | |||
| 28 | set_irq_type(IRQ_NSLU2_PCI_INTB, IRQT_LOW); | 28 | set_irq_type(IRQ_NSLU2_PCI_INTB, IRQT_LOW); |
| 29 | set_irq_type(IRQ_NSLU2_PCI_INTC, IRQT_LOW); | 29 | set_irq_type(IRQ_NSLU2_PCI_INTC, IRQT_LOW); |
| 30 | 30 | ||
| 31 | gpio_line_isr_clear(NSLU2_PCI_INTA_PIN); | ||
| 32 | gpio_line_isr_clear(NSLU2_PCI_INTB_PIN); | ||
| 33 | gpio_line_isr_clear(NSLU2_PCI_INTC_PIN); | ||
| 34 | |||
| 35 | /* INTD is not configured as GPIO is used | ||
| 36 | * for the power input button. | ||
| 37 | */ | ||
| 38 | |||
| 39 | ixp4xx_pci_preinit(); | 31 | ixp4xx_pci_preinit(); |
| 40 | } | 32 | } |
| 41 | 33 | ||
diff --git a/arch/arm/mach-ixp4xx/nslu2-power.c b/arch/arm/mach-ixp4xx/nslu2-power.c index 18fbc8c0fb30..b0ad9e901f6e 100644 --- a/arch/arm/mach-ixp4xx/nslu2-power.c +++ b/arch/arm/mach-ixp4xx/nslu2-power.c | |||
| @@ -54,9 +54,6 @@ static int __init nslu2_power_init(void) | |||
| 54 | set_irq_type(NSLU2_RB_IRQ, IRQT_LOW); | 54 | set_irq_type(NSLU2_RB_IRQ, IRQT_LOW); |
| 55 | set_irq_type(NSLU2_PB_IRQ, IRQT_HIGH); | 55 | set_irq_type(NSLU2_PB_IRQ, IRQT_HIGH); |
| 56 | 56 | ||
| 57 | gpio_line_isr_clear(NSLU2_RB_GPIO); | ||
| 58 | gpio_line_isr_clear(NSLU2_PB_GPIO); | ||
| 59 | |||
| 60 | if (request_irq(NSLU2_RB_IRQ, &nslu2_reset_handler, | 57 | if (request_irq(NSLU2_RB_IRQ, &nslu2_reset_handler, |
| 61 | SA_INTERRUPT, "NSLU2 reset button", NULL) < 0) { | 58 | SA_INTERRUPT, "NSLU2 reset button", NULL) < 0) { |
| 62 | 59 | ||
diff --git a/arch/arm/mach-omap1/board-palmte.c b/arch/arm/mach-omap1/board-palmte.c index 540b20d78cca..5c975eb5c34b 100644 --- a/arch/arm/mach-omap1/board-palmte.c +++ b/arch/arm/mach-omap1/board-palmte.c | |||
| @@ -19,6 +19,7 @@ | |||
| 19 | #include <linux/init.h> | 19 | #include <linux/init.h> |
| 20 | #include <linux/platform_device.h> | 20 | #include <linux/platform_device.h> |
| 21 | #include <linux/notifier.h> | 21 | #include <linux/notifier.h> |
| 22 | #include <linux/clk.h> | ||
| 22 | 23 | ||
| 23 | #include <asm/hardware.h> | 24 | #include <asm/hardware.h> |
| 24 | #include <asm/mach-types.h> | 25 | #include <asm/mach-types.h> |
| @@ -30,7 +31,6 @@ | |||
| 30 | #include <asm/arch/usb.h> | 31 | #include <asm/arch/usb.h> |
| 31 | #include <asm/arch/board.h> | 32 | #include <asm/arch/board.h> |
| 32 | #include <asm/arch/common.h> | 33 | #include <asm/arch/common.h> |
| 33 | #include <asm/hardware/clock.h> | ||
| 34 | 34 | ||
| 35 | static void __init omap_generic_init_irq(void) | 35 | static void __init omap_generic_init_irq(void) |
| 36 | { | 36 | { |
diff --git a/arch/arm/mach-omap1/clock.c b/arch/arm/mach-omap1/clock.c index 4277eee44ed5..9d862f86bba6 100644 --- a/arch/arm/mach-omap1/clock.c +++ b/arch/arm/mach-omap1/clock.c | |||
| @@ -16,9 +16,9 @@ | |||
| 16 | #include <linux/list.h> | 16 | #include <linux/list.h> |
| 17 | #include <linux/errno.h> | 17 | #include <linux/errno.h> |
| 18 | #include <linux/err.h> | 18 | #include <linux/err.h> |
| 19 | #include <linux/clk.h> | ||
| 19 | 20 | ||
| 20 | #include <asm/io.h> | 21 | #include <asm/io.h> |
| 21 | #include <asm/hardware/clock.h> | ||
| 22 | 22 | ||
| 23 | #include <asm/arch/usb.h> | 23 | #include <asm/arch/usb.h> |
| 24 | #include <asm/arch/clock.h> | 24 | #include <asm/arch/clock.h> |
diff --git a/arch/arm/mach-omap1/serial.c b/arch/arm/mach-omap1/serial.c index 6810cfb84462..fcfb81d13cfe 100644 --- a/arch/arm/mach-omap1/serial.c +++ b/arch/arm/mach-omap1/serial.c | |||
| @@ -17,10 +17,10 @@ | |||
| 17 | #include <linux/tty.h> | 17 | #include <linux/tty.h> |
| 18 | #include <linux/serial_8250.h> | 18 | #include <linux/serial_8250.h> |
| 19 | #include <linux/serial_reg.h> | 19 | #include <linux/serial_reg.h> |
| 20 | #include <linux/clk.h> | ||
| 20 | 21 | ||
| 21 | #include <asm/io.h> | 22 | #include <asm/io.h> |
| 22 | #include <asm/mach-types.h> | 23 | #include <asm/mach-types.h> |
| 23 | #include <asm/hardware/clock.h> | ||
| 24 | 24 | ||
| 25 | #include <asm/arch/board.h> | 25 | #include <asm/arch/board.h> |
| 26 | #include <asm/arch/mux.h> | 26 | #include <asm/arch/mux.h> |
diff --git a/arch/arm/mach-omap2/clock.c b/arch/arm/mach-omap2/clock.c index 85818d9f2635..5407b9549150 100644 --- a/arch/arm/mach-omap2/clock.c +++ b/arch/arm/mach-omap2/clock.c | |||
| @@ -22,10 +22,10 @@ | |||
| 22 | #include <linux/list.h> | 22 | #include <linux/list.h> |
| 23 | #include <linux/errno.h> | 23 | #include <linux/errno.h> |
| 24 | #include <linux/delay.h> | 24 | #include <linux/delay.h> |
| 25 | #include <linux/clk.h> | ||
| 25 | 26 | ||
| 26 | #include <asm/io.h> | 27 | #include <asm/io.h> |
| 27 | 28 | ||
| 28 | #include <asm/hardware/clock.h> | ||
| 29 | #include <asm/arch/clock.h> | 29 | #include <asm/arch/clock.h> |
| 30 | #include <asm/arch/sram.h> | 30 | #include <asm/arch/sram.h> |
| 31 | #include <asm/arch/prcm.h> | 31 | #include <asm/arch/prcm.h> |
diff --git a/arch/arm/mach-omap2/serial.c b/arch/arm/mach-omap2/serial.c index f4df04fe1dd8..e1bd46a96e11 100644 --- a/arch/arm/mach-omap2/serial.c +++ b/arch/arm/mach-omap2/serial.c | |||
| @@ -16,9 +16,9 @@ | |||
| 16 | #include <linux/init.h> | 16 | #include <linux/init.h> |
| 17 | #include <linux/serial_8250.h> | 17 | #include <linux/serial_8250.h> |
| 18 | #include <linux/serial_reg.h> | 18 | #include <linux/serial_reg.h> |
| 19 | #include <linux/clk.h> | ||
| 19 | 20 | ||
| 20 | #include <asm/io.h> | 21 | #include <asm/io.h> |
| 21 | #include <asm/hardware/clock.h> | ||
| 22 | 22 | ||
| 23 | #include <asm/arch/common.h> | 23 | #include <asm/arch/common.h> |
| 24 | #include <asm/arch/board.h> | 24 | #include <asm/arch/board.h> |
diff --git a/arch/arm/mach-omap2/timer-gp.c b/arch/arm/mach-omap2/timer-gp.c index 9ec11443200f..23d36b1c40fe 100644 --- a/arch/arm/mach-omap2/timer-gp.c +++ b/arch/arm/mach-omap2/timer-gp.c | |||
| @@ -21,10 +21,11 @@ | |||
| 21 | #include <linux/time.h> | 21 | #include <linux/time.h> |
| 22 | #include <linux/interrupt.h> | 22 | #include <linux/interrupt.h> |
| 23 | #include <linux/err.h> | 23 | #include <linux/err.h> |
| 24 | #include <linux/clk.h> | ||
| 25 | |||
| 24 | #include <asm/mach/time.h> | 26 | #include <asm/mach/time.h> |
| 25 | #include <asm/delay.h> | 27 | #include <asm/delay.h> |
| 26 | #include <asm/io.h> | 28 | #include <asm/io.h> |
| 27 | #include <asm/hardware/clock.h> | ||
| 28 | 29 | ||
| 29 | #define OMAP2_GP_TIMER1_BASE 0x48028000 | 30 | #define OMAP2_GP_TIMER1_BASE 0x48028000 |
| 30 | #define OMAP2_GP_TIMER2_BASE 0x4802a000 | 31 | #define OMAP2_GP_TIMER2_BASE 0x4802a000 |
diff --git a/arch/arm/mach-pxa/Kconfig b/arch/arm/mach-pxa/Kconfig index 2a58499c0968..c1d77f5b3823 100644 --- a/arch/arm/mach-pxa/Kconfig +++ b/arch/arm/mach-pxa/Kconfig | |||
| @@ -112,12 +112,14 @@ config IWMMXT | |||
| 112 | config PXA_SHARP_C7xx | 112 | config PXA_SHARP_C7xx |
| 113 | bool | 113 | bool |
| 114 | select PXA_SSP | 114 | select PXA_SSP |
| 115 | select SHARPSL_PM | ||
| 115 | help | 116 | help |
| 116 | Enable support for all Sharp C7xx models | 117 | Enable support for all Sharp C7xx models |
| 117 | 118 | ||
| 118 | config PXA_SHARP_Cxx00 | 119 | config PXA_SHARP_Cxx00 |
| 119 | bool | 120 | bool |
| 120 | select PXA_SSP | 121 | select PXA_SSP |
| 122 | select SHARPSL_PM | ||
| 121 | help | 123 | help |
| 122 | Enable common support for Sharp Cxx00 models | 124 | Enable common support for Sharp Cxx00 models |
| 123 | 125 | ||
diff --git a/arch/arm/mach-pxa/corgi_pm.c b/arch/arm/mach-pxa/corgi_pm.c index 599be14754f9..7a1ab73e9e10 100644 --- a/arch/arm/mach-pxa/corgi_pm.c +++ b/arch/arm/mach-pxa/corgi_pm.c | |||
| @@ -33,19 +33,7 @@ static void corgi_charger_init(void) | |||
| 33 | pxa_gpio_mode(CORGI_GPIO_CHRG_ON | GPIO_OUT); | 33 | pxa_gpio_mode(CORGI_GPIO_CHRG_ON | GPIO_OUT); |
| 34 | pxa_gpio_mode(CORGI_GPIO_CHRG_UKN | GPIO_OUT); | 34 | pxa_gpio_mode(CORGI_GPIO_CHRG_UKN | GPIO_OUT); |
| 35 | pxa_gpio_mode(CORGI_GPIO_KEY_INT | GPIO_IN); | 35 | pxa_gpio_mode(CORGI_GPIO_KEY_INT | GPIO_IN); |
| 36 | } | 36 | sharpsl_pm_pxa_init(); |
| 37 | |||
| 38 | static void corgi_charge_led(int val) | ||
| 39 | { | ||
| 40 | if (val == SHARPSL_LED_ERROR) { | ||
| 41 | dev_dbg(sharpsl_pm.dev, "Charge LED Error\n"); | ||
| 42 | } else if (val == SHARPSL_LED_ON) { | ||
| 43 | dev_dbg(sharpsl_pm.dev, "Charge LED On\n"); | ||
| 44 | GPSR0 = GPIO_bit(CORGI_GPIO_LED_ORANGE); | ||
| 45 | } else { | ||
| 46 | dev_dbg(sharpsl_pm.dev, "Charge LED Off\n"); | ||
| 47 | GPCR0 = GPIO_bit(CORGI_GPIO_LED_ORANGE); | ||
| 48 | } | ||
| 49 | } | 37 | } |
| 50 | 38 | ||
| 51 | static void corgi_measure_temp(int on) | 39 | static void corgi_measure_temp(int on) |
| @@ -138,15 +126,15 @@ static int corgi_should_wakeup(unsigned int resume_on_alarm) | |||
| 138 | dev_dbg(sharpsl_pm.dev, "GPLR0 = %x,%x\n", GPLR0, PEDR); | 126 | dev_dbg(sharpsl_pm.dev, "GPLR0 = %x,%x\n", GPLR0, PEDR); |
| 139 | 127 | ||
| 140 | if ((PEDR & GPIO_bit(CORGI_GPIO_AC_IN))) { | 128 | if ((PEDR & GPIO_bit(CORGI_GPIO_AC_IN))) { |
| 141 | if (STATUS_AC_IN()) { | 129 | if (sharpsl_pm.machinfo->read_devdata(SHARPSL_STATUS_ACIN)) { |
| 142 | /* charge on */ | 130 | /* charge on */ |
| 143 | dev_dbg(sharpsl_pm.dev, "ac insert\n"); | 131 | dev_dbg(sharpsl_pm.dev, "ac insert\n"); |
| 144 | sharpsl_pm.flags |= SHARPSL_DO_OFFLINE_CHRG; | 132 | sharpsl_pm.flags |= SHARPSL_DO_OFFLINE_CHRG; |
| 145 | } else { | 133 | } else { |
| 146 | /* charge off */ | 134 | /* charge off */ |
| 147 | dev_dbg(sharpsl_pm.dev, "ac remove\n"); | 135 | dev_dbg(sharpsl_pm.dev, "ac remove\n"); |
| 148 | CHARGE_LED_OFF(); | 136 | sharpsl_pm_led(SHARPSL_LED_OFF); |
| 149 | CHARGE_OFF(); | 137 | sharpsl_pm.machinfo->charge(0); |
| 150 | sharpsl_pm.charge_mode = CHRG_OFF; | 138 | sharpsl_pm.charge_mode = CHRG_OFF; |
| 151 | } | 139 | } |
| 152 | } | 140 | } |
| @@ -172,23 +160,39 @@ static unsigned long corgi_charger_wakeup(void) | |||
| 172 | return ~GPLR0 & ( GPIO_bit(CORGI_GPIO_AC_IN) | GPIO_bit(CORGI_GPIO_KEY_INT) | GPIO_bit(CORGI_GPIO_WAKEUP) ); | 160 | return ~GPLR0 & ( GPIO_bit(CORGI_GPIO_AC_IN) | GPIO_bit(CORGI_GPIO_KEY_INT) | GPIO_bit(CORGI_GPIO_WAKEUP) ); |
| 173 | } | 161 | } |
| 174 | 162 | ||
| 175 | static int corgi_acin_status(void) | 163 | unsigned long corgipm_read_devdata(int type) |
| 176 | { | 164 | { |
| 177 | return ((GPLR(CORGI_GPIO_AC_IN) & GPIO_bit(CORGI_GPIO_AC_IN)) != 0); | 165 | switch(type) { |
| 166 | case SHARPSL_STATUS_ACIN: | ||
| 167 | return ((GPLR(CORGI_GPIO_AC_IN) & GPIO_bit(CORGI_GPIO_AC_IN)) != 0); | ||
| 168 | case SHARPSL_STATUS_LOCK: | ||
| 169 | return READ_GPIO_BIT(sharpsl_pm.machinfo->gpio_batlock); | ||
| 170 | case SHARPSL_STATUS_CHRGFULL: | ||
| 171 | return READ_GPIO_BIT(sharpsl_pm.machinfo->gpio_batfull); | ||
| 172 | case SHARPSL_STATUS_FATAL: | ||
| 173 | return READ_GPIO_BIT(sharpsl_pm.machinfo->gpio_fatal); | ||
| 174 | case SHARPSL_ACIN_VOLT: | ||
| 175 | return sharpsl_pm_pxa_read_max1111(MAX1111_ACIN_VOLT); | ||
| 176 | case SHARPSL_BATT_TEMP: | ||
| 177 | return sharpsl_pm_pxa_read_max1111(MAX1111_BATT_TEMP); | ||
| 178 | case SHARPSL_BATT_VOLT: | ||
| 179 | default: | ||
| 180 | return sharpsl_pm_pxa_read_max1111(MAX1111_BATT_VOLT); | ||
| 181 | } | ||
| 178 | } | 182 | } |
| 179 | 183 | ||
| 180 | static struct sharpsl_charger_machinfo corgi_pm_machinfo = { | 184 | static struct sharpsl_charger_machinfo corgi_pm_machinfo = { |
| 181 | .init = corgi_charger_init, | 185 | .init = corgi_charger_init, |
| 186 | .exit = sharpsl_pm_pxa_remove, | ||
| 182 | .gpio_batlock = CORGI_GPIO_BAT_COVER, | 187 | .gpio_batlock = CORGI_GPIO_BAT_COVER, |
| 183 | .gpio_acin = CORGI_GPIO_AC_IN, | 188 | .gpio_acin = CORGI_GPIO_AC_IN, |
| 184 | .gpio_batfull = CORGI_GPIO_CHRG_FULL, | 189 | .gpio_batfull = CORGI_GPIO_CHRG_FULL, |
| 185 | .status_acin = corgi_acin_status, | ||
| 186 | .discharge = corgi_discharge, | 190 | .discharge = corgi_discharge, |
| 187 | .charge = corgi_charge, | 191 | .charge = corgi_charge, |
| 188 | .chargeled = corgi_charge_led, | ||
| 189 | .measure_temp = corgi_measure_temp, | 192 | .measure_temp = corgi_measure_temp, |
| 190 | .presuspend = corgi_presuspend, | 193 | .presuspend = corgi_presuspend, |
| 191 | .postsuspend = corgi_postsuspend, | 194 | .postsuspend = corgi_postsuspend, |
| 195 | .read_devdata = corgipm_read_devdata, | ||
| 192 | .charger_wakeup = corgi_charger_wakeup, | 196 | .charger_wakeup = corgi_charger_wakeup, |
| 193 | .should_wakeup = corgi_should_wakeup, | 197 | .should_wakeup = corgi_should_wakeup, |
| 194 | .bat_levels = 40, | 198 | .bat_levels = 40, |
diff --git a/arch/arm/mach-pxa/mainstone.c b/arch/arm/mach-pxa/mainstone.c index 277498ae5b6c..8da9d3efe9a0 100644 --- a/arch/arm/mach-pxa/mainstone.c +++ b/arch/arm/mach-pxa/mainstone.c | |||
| @@ -427,6 +427,12 @@ static void __init mainstone_init(void) | |||
| 427 | printk(KERN_NOTICE "Mainstone configured to boot from %s\n", | 427 | printk(KERN_NOTICE "Mainstone configured to boot from %s\n", |
| 428 | mst_flash_data[0].name); | 428 | mst_flash_data[0].name); |
| 429 | 429 | ||
| 430 | /* system bus arbiter setting | ||
| 431 | * - Core_Park | ||
| 432 | * - LCD_wt:DMA_wt:CORE_Wt = 2:3:4 | ||
| 433 | */ | ||
| 434 | ARB_CNTRL = ARB_CORE_PARK | 0x234; | ||
| 435 | |||
| 430 | /* | 436 | /* |
| 431 | * On Mainstone, we route AC97_SYSCLK via GPIO45 to | 437 | * On Mainstone, we route AC97_SYSCLK via GPIO45 to |
| 432 | * the audio daughter card | 438 | * the audio daughter card |
diff --git a/arch/arm/mach-pxa/sharpsl.h b/arch/arm/mach-pxa/sharpsl.h index b0c40a1d6671..da4769caaf72 100644 --- a/arch/arm/mach-pxa/sharpsl.h +++ b/arch/arm/mach-pxa/sharpsl.h | |||
| @@ -1,7 +1,17 @@ | |||
| 1 | /* | 1 | /* |
| 2 | * SharpSL SSP Driver | 2 | * Copyright (c) 2004-2005 Richard Purdie |
| 3 | * | ||
| 4 | * This program is free software; you can redistribute it and/or modify | ||
| 5 | * it under the terms of the GNU General Public License version 2 as | ||
| 6 | * published by the Free Software Foundation. | ||
| 7 | * | ||
| 3 | */ | 8 | */ |
| 4 | 9 | ||
| 10 | #include <asm/hardware/sharpsl_pm.h> | ||
| 11 | |||
| 12 | /* | ||
| 13 | * SharpSL SSP Driver | ||
| 14 | */ | ||
| 5 | struct corgissp_machinfo { | 15 | struct corgissp_machinfo { |
| 6 | int port; | 16 | int port; |
| 7 | int cs_lcdcon; | 17 | int cs_lcdcon; |
| @@ -14,18 +24,18 @@ struct corgissp_machinfo { | |||
| 14 | 24 | ||
| 15 | void corgi_ssp_set_machinfo(struct corgissp_machinfo *machinfo); | 25 | void corgi_ssp_set_machinfo(struct corgissp_machinfo *machinfo); |
| 16 | 26 | ||
| 27 | |||
| 17 | /* | 28 | /* |
| 18 | * SharpSL Backlight | 29 | * SharpSL Backlight |
| 19 | */ | 30 | */ |
| 20 | |||
| 21 | void corgi_bl_set_intensity(int intensity); | 31 | void corgi_bl_set_intensity(int intensity); |
| 22 | void spitz_bl_set_intensity(int intensity); | 32 | void spitz_bl_set_intensity(int intensity); |
| 23 | void akita_bl_set_intensity(int intensity); | 33 | void akita_bl_set_intensity(int intensity); |
| 24 | 34 | ||
| 35 | |||
| 25 | /* | 36 | /* |
| 26 | * SharpSL Touchscreen Driver | 37 | * SharpSL Touchscreen Driver |
| 27 | */ | 38 | */ |
| 28 | |||
| 29 | unsigned long corgi_get_hsync_len(void); | 39 | unsigned long corgi_get_hsync_len(void); |
| 30 | unsigned long spitz_get_hsync_len(void); | 40 | unsigned long spitz_get_hsync_len(void); |
| 31 | void corgi_put_hsync(void); | 41 | void corgi_put_hsync(void); |
| @@ -33,89 +43,22 @@ void spitz_put_hsync(void); | |||
| 33 | void corgi_wait_hsync(void); | 43 | void corgi_wait_hsync(void); |
| 34 | void spitz_wait_hsync(void); | 44 | void spitz_wait_hsync(void); |
| 35 | 45 | ||
| 46 | |||
| 36 | /* | 47 | /* |
| 37 | * SharpSL Battery/PM Driver | 48 | * SharpSL Battery/PM Driver |
| 38 | */ | 49 | */ |
| 39 | 50 | ||
| 40 | struct sharpsl_charger_machinfo { | 51 | #define READ_GPIO_BIT(x) (GPLR(x) & GPIO_bit(x)) |
| 41 | void (*init)(void); | ||
| 42 | int gpio_acin; | ||
| 43 | int gpio_batfull; | ||
| 44 | int gpio_batlock; | ||
| 45 | int gpio_fatal; | ||
| 46 | int (*status_acin)(void); | ||
| 47 | void (*discharge)(int); | ||
| 48 | void (*discharge1)(int); | ||
| 49 | void (*charge)(int); | ||
| 50 | void (*chargeled)(int); | ||
| 51 | void (*measure_temp)(int); | ||
| 52 | void (*presuspend)(void); | ||
| 53 | void (*postsuspend)(void); | ||
| 54 | unsigned long (*charger_wakeup)(void); | ||
| 55 | int (*should_wakeup)(unsigned int resume_on_alarm); | ||
| 56 | int bat_levels; | ||
| 57 | struct battery_thresh *bat_levels_noac; | ||
| 58 | struct battery_thresh *bat_levels_acin; | ||
| 59 | int status_high_acin; | ||
| 60 | int status_low_acin; | ||
| 61 | int status_high_noac; | ||
| 62 | int status_low_noac; | ||
| 63 | }; | ||
| 64 | |||
| 65 | struct battery_thresh { | ||
| 66 | int voltage; | ||
| 67 | int percentage; | ||
| 68 | }; | ||
| 69 | |||
| 70 | struct battery_stat { | ||
| 71 | int ac_status; /* APM AC Present/Not Present */ | ||
| 72 | int mainbat_status; /* APM Main Battery Status */ | ||
| 73 | int mainbat_percent; /* Main Battery Percentage Charge */ | ||
| 74 | int mainbat_voltage; /* Main Battery Voltage */ | ||
| 75 | }; | ||
| 76 | |||
| 77 | struct sharpsl_pm_status { | ||
| 78 | struct device *dev; | ||
| 79 | struct timer_list ac_timer; | ||
| 80 | struct timer_list chrg_full_timer; | ||
| 81 | |||
| 82 | int charge_mode; | ||
| 83 | #define CHRG_ERROR (-1) | ||
| 84 | #define CHRG_OFF (0) | ||
| 85 | #define CHRG_ON (1) | ||
| 86 | #define CHRG_DONE (2) | ||
| 87 | |||
| 88 | unsigned int flags; | ||
| 89 | #define SHARPSL_SUSPENDED (1 << 0) /* Device is Suspended */ | ||
| 90 | #define SHARPSL_ALARM_ACTIVE (1 << 1) /* Alarm is for charging event (not user) */ | ||
| 91 | #define SHARPSL_BL_LIMIT (1 << 2) /* Backlight Intensity Limited */ | ||
| 92 | #define SHARPSL_APM_QUEUED (1 << 3) /* APM Event Queued */ | ||
| 93 | #define SHARPSL_DO_OFFLINE_CHRG (1 << 4) /* Trigger the offline charger */ | ||
| 94 | 52 | ||
| 95 | int full_count; | 53 | /* MAX1111 Channel Definitions */ |
| 96 | unsigned long charge_start_time; | 54 | #define MAX1111_BATT_VOLT 4u |
| 97 | struct sharpsl_charger_machinfo *machinfo; | 55 | #define MAX1111_BATT_TEMP 2u |
| 98 | struct battery_stat battstat; | 56 | #define MAX1111_ACIN_VOLT 6u |
| 99 | }; | ||
| 100 | 57 | ||
| 101 | extern struct sharpsl_pm_status sharpsl_pm; | ||
| 102 | extern struct battery_thresh spitz_battery_levels_acin[]; | 58 | extern struct battery_thresh spitz_battery_levels_acin[]; |
| 103 | extern struct battery_thresh spitz_battery_levels_noac[]; | 59 | extern struct battery_thresh spitz_battery_levels_noac[]; |
| 60 | void sharpsl_pm_pxa_init(void); | ||
| 61 | void sharpsl_pm_pxa_remove(void); | ||
| 62 | int sharpsl_pm_pxa_read_max1111(int channel); | ||
| 104 | 63 | ||
| 105 | #define READ_GPIO_BIT(x) (GPLR(x) & GPIO_bit(x)) | ||
| 106 | |||
| 107 | #define SHARPSL_LED_ERROR 2 | ||
| 108 | #define SHARPSL_LED_ON 1 | ||
| 109 | #define SHARPSL_LED_OFF 0 | ||
| 110 | 64 | ||
| 111 | #define CHARGE_ON() sharpsl_pm.machinfo->charge(1) | ||
| 112 | #define CHARGE_OFF() sharpsl_pm.machinfo->charge(0) | ||
| 113 | #define CHARGE_LED_ON() sharpsl_pm.machinfo->chargeled(SHARPSL_LED_ON) | ||
| 114 | #define CHARGE_LED_OFF() sharpsl_pm.machinfo->chargeled(SHARPSL_LED_OFF) | ||
| 115 | #define CHARGE_LED_ERR() sharpsl_pm.machinfo->chargeled(SHARPSL_LED_ERROR) | ||
| 116 | #define DISCHARGE_ON() sharpsl_pm.machinfo->discharge(1) | ||
| 117 | #define DISCHARGE_OFF() sharpsl_pm.machinfo->discharge(0) | ||
| 118 | #define STATUS_AC_IN() sharpsl_pm.machinfo->status_acin() | ||
| 119 | #define STATUS_BATT_LOCKED() READ_GPIO_BIT(sharpsl_pm.machinfo->gpio_batlock) | ||
| 120 | #define STATUS_CHRG_FULL() READ_GPIO_BIT(sharpsl_pm.machinfo->gpio_batfull) | ||
| 121 | #define STATUS_FATAL() READ_GPIO_BIT(sharpsl_pm.machinfo->gpio_fatal) | ||
diff --git a/arch/arm/mach-pxa/sharpsl_pm.c b/arch/arm/mach-pxa/sharpsl_pm.c index c10be00fb526..6d402b262d8a 100644 --- a/arch/arm/mach-pxa/sharpsl_pm.c +++ b/arch/arm/mach-pxa/sharpsl_pm.c | |||
| @@ -15,48 +15,20 @@ | |||
| 15 | #undef DEBUG | 15 | #undef DEBUG |
| 16 | 16 | ||
| 17 | #include <linux/module.h> | 17 | #include <linux/module.h> |
| 18 | #include <linux/timer.h> | ||
| 19 | #include <linux/init.h> | 18 | #include <linux/init.h> |
| 20 | #include <linux/kernel.h> | 19 | #include <linux/kernel.h> |
| 21 | #include <linux/apm_bios.h> | ||
| 22 | #include <linux/delay.h> | ||
| 23 | #include <linux/interrupt.h> | 20 | #include <linux/interrupt.h> |
| 24 | #include <linux/platform_device.h> | 21 | #include <linux/platform_device.h> |
| 25 | 22 | ||
| 26 | #include <asm/hardware.h> | 23 | #include <asm/hardware.h> |
| 27 | #include <asm/hardware/scoop.h> | ||
| 28 | #include <asm/mach-types.h> | 24 | #include <asm/mach-types.h> |
| 29 | #include <asm/irq.h> | 25 | #include <asm/irq.h> |
| 30 | #include <asm/apm.h> | 26 | #include <asm/apm.h> |
| 31 | |||
| 32 | #include <asm/arch/pm.h> | 27 | #include <asm/arch/pm.h> |
| 33 | #include <asm/arch/pxa-regs.h> | 28 | #include <asm/arch/pxa-regs.h> |
| 34 | #include <asm/arch/sharpsl.h> | 29 | #include <asm/arch/sharpsl.h> |
| 35 | #include "sharpsl.h" | 30 | #include "sharpsl.h" |
| 36 | 31 | ||
| 37 | /* | ||
| 38 | * Constants | ||
| 39 | */ | ||
| 40 | #define SHARPSL_CHARGE_ON_TIME_INTERVAL (msecs_to_jiffies(1*60*1000)) /* 1 min */ | ||
| 41 | #define SHARPSL_CHARGE_FINISH_TIME (msecs_to_jiffies(10*60*1000)) /* 10 min */ | ||
| 42 | #define SHARPSL_BATCHK_TIME (msecs_to_jiffies(15*1000)) /* 15 sec */ | ||
| 43 | #define SHARPSL_BATCHK_TIME_SUSPEND (60*10) /* 10 min */ | ||
| 44 | #define SHARPSL_WAIT_CO_TIME 15 /* 15 sec */ | ||
| 45 | #define SHARPSL_WAIT_DISCHARGE_ON 100 /* 100 msec */ | ||
| 46 | #define SHARPSL_CHECK_BATTERY_WAIT_TIME_TEMP 10 /* 10 msec */ | ||
| 47 | #define SHARPSL_CHECK_BATTERY_WAIT_TIME_VOLT 10 /* 10 msec */ | ||
| 48 | #define SHARPSL_CHECK_BATTERY_WAIT_TIME_ACIN 10 /* 10 msec */ | ||
| 49 | #define SHARPSL_CHARGE_WAIT_TIME 15 /* 15 msec */ | ||
| 50 | #define SHARPSL_CHARGE_CO_CHECK_TIME 5 /* 5 msec */ | ||
| 51 | #define SHARPSL_CHARGE_RETRY_CNT 1 /* eqv. 10 min */ | ||
| 52 | |||
| 53 | #define SHARPSL_CHARGE_ON_VOLT 0x99 /* 2.9V */ | ||
| 54 | #define SHARPSL_CHARGE_ON_TEMP 0xe0 /* 2.9V */ | ||
| 55 | #define SHARPSL_CHARGE_ON_ACIN_HIGH 0x9b /* 6V */ | ||
| 56 | #define SHARPSL_CHARGE_ON_ACIN_LOW 0x34 /* 2V */ | ||
| 57 | #define SHARPSL_FATAL_ACIN_VOLT 182 /* 3.45V */ | ||
| 58 | #define SHARPSL_FATAL_NOACIN_VOLT 170 /* 3.40V */ | ||
| 59 | |||
| 60 | struct battery_thresh spitz_battery_levels_acin[] = { | 32 | struct battery_thresh spitz_battery_levels_acin[] = { |
| 61 | { 213, 100}, | 33 | { 213, 100}, |
| 62 | { 212, 98}, | 34 | { 212, 98}, |
| @@ -151,763 +123,17 @@ struct battery_thresh spitz_battery_levels_noac[] = { | |||
| 151 | #define MAXCTRL_SEL_SH 4 | 123 | #define MAXCTRL_SEL_SH 4 |
| 152 | #define MAXCTRL_STR 1u << 7 | 124 | #define MAXCTRL_STR 1u << 7 |
| 153 | 125 | ||
| 154 | /* MAX1111 Channel Definitions */ | ||
| 155 | #define BATT_AD 4u | ||
| 156 | #define BATT_THM 2u | ||
| 157 | #define JK_VAD 6u | ||
| 158 | |||
| 159 | |||
| 160 | /* | ||
| 161 | * Prototypes | ||
| 162 | */ | ||
| 163 | static int sharpsl_read_main_battery(void); | ||
| 164 | static int sharpsl_off_charge_battery(void); | ||
| 165 | static int sharpsl_check_battery_temp(void); | ||
| 166 | static int sharpsl_check_battery_voltage(void); | ||
| 167 | static int sharpsl_ac_check(void); | ||
| 168 | static int sharpsl_fatal_check(void); | ||
| 169 | static int sharpsl_average_value(int ad); | ||
| 170 | static void sharpsl_average_clear(void); | ||
| 171 | static void sharpsl_charge_toggle(void *private_); | ||
| 172 | static void sharpsl_battery_thread(void *private_); | ||
| 173 | |||
| 174 | |||
| 175 | /* | ||
| 176 | * Variables | ||
| 177 | */ | ||
| 178 | struct sharpsl_pm_status sharpsl_pm; | ||
| 179 | DECLARE_WORK(toggle_charger, sharpsl_charge_toggle, NULL); | ||
| 180 | DECLARE_WORK(sharpsl_bat, sharpsl_battery_thread, NULL); | ||
| 181 | |||
| 182 | |||
| 183 | static int get_percentage(int voltage) | ||
| 184 | { | ||
| 185 | int i = sharpsl_pm.machinfo->bat_levels - 1; | ||
| 186 | struct battery_thresh *thresh; | ||
| 187 | |||
| 188 | if (sharpsl_pm.charge_mode == CHRG_ON) | ||
| 189 | thresh=sharpsl_pm.machinfo->bat_levels_acin; | ||
| 190 | else | ||
| 191 | thresh=sharpsl_pm.machinfo->bat_levels_noac; | ||
| 192 | |||
| 193 | while (i > 0 && (voltage > thresh[i].voltage)) | ||
| 194 | i--; | ||
| 195 | |||
| 196 | return thresh[i].percentage; | ||
| 197 | } | ||
| 198 | |||
| 199 | static int get_apm_status(int voltage) | ||
| 200 | { | ||
| 201 | int low_thresh, high_thresh; | ||
| 202 | |||
| 203 | if (sharpsl_pm.charge_mode == CHRG_ON) { | ||
| 204 | high_thresh = sharpsl_pm.machinfo->status_high_acin; | ||
| 205 | low_thresh = sharpsl_pm.machinfo->status_low_acin; | ||
| 206 | } else { | ||
| 207 | high_thresh = sharpsl_pm.machinfo->status_high_noac; | ||
| 208 | low_thresh = sharpsl_pm.machinfo->status_low_noac; | ||
| 209 | } | ||
| 210 | |||
| 211 | if (voltage >= high_thresh) | ||
| 212 | return APM_BATTERY_STATUS_HIGH; | ||
| 213 | if (voltage >= low_thresh) | ||
| 214 | return APM_BATTERY_STATUS_LOW; | ||
| 215 | return APM_BATTERY_STATUS_CRITICAL; | ||
| 216 | } | ||
| 217 | |||
| 218 | void sharpsl_battery_kick(void) | ||
| 219 | { | ||
| 220 | schedule_delayed_work(&sharpsl_bat, msecs_to_jiffies(125)); | ||
| 221 | } | ||
| 222 | EXPORT_SYMBOL(sharpsl_battery_kick); | ||
| 223 | |||
| 224 | |||
| 225 | static void sharpsl_battery_thread(void *private_) | ||
| 226 | { | ||
| 227 | int voltage, percent, apm_status, i = 0; | ||
| 228 | |||
| 229 | if (!sharpsl_pm.machinfo) | ||
| 230 | return; | ||
| 231 | |||
| 232 | sharpsl_pm.battstat.ac_status = (STATUS_AC_IN() ? APM_AC_ONLINE : APM_AC_OFFLINE); | ||
| 233 | |||
| 234 | /* Corgi cannot confirm when battery fully charged so periodically kick! */ | ||
| 235 | if (machine_is_corgi() && (sharpsl_pm.charge_mode == CHRG_ON) | ||
| 236 | && time_after(jiffies, sharpsl_pm.charge_start_time + SHARPSL_CHARGE_ON_TIME_INTERVAL)) | ||
| 237 | schedule_work(&toggle_charger); | ||
| 238 | |||
| 239 | while(1) { | ||
| 240 | voltage = sharpsl_read_main_battery(); | ||
| 241 | if (voltage > 0) break; | ||
| 242 | if (i++ > 5) { | ||
| 243 | voltage = sharpsl_pm.machinfo->bat_levels_noac[0].voltage; | ||
| 244 | dev_warn(sharpsl_pm.dev, "Warning: Cannot read main battery!\n"); | ||
| 245 | break; | ||
| 246 | } | ||
| 247 | } | ||
| 248 | |||
| 249 | voltage = sharpsl_average_value(voltage); | ||
| 250 | apm_status = get_apm_status(voltage); | ||
| 251 | percent = get_percentage(voltage); | ||
| 252 | |||
| 253 | /* At low battery voltages, the voltage has a tendency to start | ||
| 254 | creeping back up so we try to avoid this here */ | ||
| 255 | if ((sharpsl_pm.battstat.ac_status == APM_AC_ONLINE) || (apm_status == APM_BATTERY_STATUS_HIGH) || percent <= sharpsl_pm.battstat.mainbat_percent) { | ||
| 256 | sharpsl_pm.battstat.mainbat_voltage = voltage; | ||
| 257 | sharpsl_pm.battstat.mainbat_status = apm_status; | ||
| 258 | sharpsl_pm.battstat.mainbat_percent = percent; | ||
| 259 | } | ||
| 260 | |||
| 261 | dev_dbg(sharpsl_pm.dev, "Battery: voltage: %d, status: %d, percentage: %d, time: %d\n", voltage, | ||
| 262 | sharpsl_pm.battstat.mainbat_status, sharpsl_pm.battstat.mainbat_percent, jiffies); | ||
| 263 | |||
| 264 | /* If battery is low. limit backlight intensity to save power. */ | ||
| 265 | if ((sharpsl_pm.battstat.ac_status != APM_AC_ONLINE) | ||
| 266 | && ((sharpsl_pm.battstat.mainbat_status == APM_BATTERY_STATUS_LOW) || | ||
| 267 | (sharpsl_pm.battstat.mainbat_status == APM_BATTERY_STATUS_CRITICAL))) { | ||
| 268 | if (!(sharpsl_pm.flags & SHARPSL_BL_LIMIT)) { | ||
| 269 | corgibl_limit_intensity(1); | ||
| 270 | sharpsl_pm.flags |= SHARPSL_BL_LIMIT; | ||
| 271 | } | ||
| 272 | } else if (sharpsl_pm.flags & SHARPSL_BL_LIMIT) { | ||
| 273 | corgibl_limit_intensity(0); | ||
| 274 | sharpsl_pm.flags &= ~SHARPSL_BL_LIMIT; | ||
| 275 | } | ||
| 276 | |||
| 277 | /* Suspend if critical battery level */ | ||
| 278 | if ((sharpsl_pm.battstat.ac_status != APM_AC_ONLINE) | ||
| 279 | && (sharpsl_pm.battstat.mainbat_status == APM_BATTERY_STATUS_CRITICAL) | ||
| 280 | && !(sharpsl_pm.flags & SHARPSL_APM_QUEUED)) { | ||
| 281 | sharpsl_pm.flags |= SHARPSL_APM_QUEUED; | ||
| 282 | dev_err(sharpsl_pm.dev, "Fatal Off\n"); | ||
| 283 | apm_queue_event(APM_CRITICAL_SUSPEND); | ||
| 284 | } | ||
| 285 | |||
| 286 | schedule_delayed_work(&sharpsl_bat, SHARPSL_BATCHK_TIME); | ||
| 287 | } | ||
| 288 | |||
| 289 | static void sharpsl_charge_on(void) | ||
| 290 | { | ||
| 291 | dev_dbg(sharpsl_pm.dev, "Turning Charger On\n"); | ||
| 292 | |||
| 293 | sharpsl_pm.full_count = 0; | ||
| 294 | sharpsl_pm.charge_mode = CHRG_ON; | ||
| 295 | schedule_delayed_work(&toggle_charger, msecs_to_jiffies(250)); | ||
| 296 | schedule_delayed_work(&sharpsl_bat, msecs_to_jiffies(500)); | ||
| 297 | } | ||
| 298 | |||
| 299 | static void sharpsl_charge_off(void) | ||
| 300 | { | ||
| 301 | dev_dbg(sharpsl_pm.dev, "Turning Charger Off\n"); | ||
| 302 | |||
| 303 | CHARGE_OFF(); | ||
| 304 | CHARGE_LED_OFF(); | ||
| 305 | sharpsl_pm.charge_mode = CHRG_OFF; | ||
| 306 | |||
| 307 | schedule_work(&sharpsl_bat); | ||
| 308 | } | ||
| 309 | |||
| 310 | static void sharpsl_charge_error(void) | ||
| 311 | { | ||
| 312 | CHARGE_LED_ERR(); | ||
| 313 | CHARGE_OFF(); | ||
| 314 | sharpsl_pm.charge_mode = CHRG_ERROR; | ||
| 315 | } | ||
| 316 | |||
| 317 | static void sharpsl_charge_toggle(void *private_) | ||
| 318 | { | ||
| 319 | dev_dbg(sharpsl_pm.dev, "Toogling Charger at time: %lx\n", jiffies); | ||
| 320 | |||
| 321 | if (STATUS_AC_IN() == 0) { | ||
| 322 | sharpsl_charge_off(); | ||
| 323 | return; | ||
| 324 | } else if ((sharpsl_check_battery_temp() < 0) || (sharpsl_ac_check() < 0)) { | ||
| 325 | sharpsl_charge_error(); | ||
| 326 | return; | ||
| 327 | } | ||
| 328 | |||
| 329 | CHARGE_LED_ON(); | ||
| 330 | CHARGE_OFF(); | ||
| 331 | mdelay(SHARPSL_CHARGE_WAIT_TIME); | ||
| 332 | CHARGE_ON(); | ||
| 333 | |||
| 334 | sharpsl_pm.charge_start_time = jiffies; | ||
| 335 | } | ||
| 336 | |||
| 337 | static void sharpsl_ac_timer(unsigned long data) | ||
| 338 | { | ||
| 339 | int acin = STATUS_AC_IN(); | ||
| 340 | |||
| 341 | dev_dbg(sharpsl_pm.dev, "AC Status: %d\n",acin); | ||
| 342 | |||
| 343 | sharpsl_average_clear(); | ||
| 344 | if (acin && (sharpsl_pm.charge_mode != CHRG_ON)) | ||
| 345 | sharpsl_charge_on(); | ||
| 346 | else if (sharpsl_pm.charge_mode == CHRG_ON) | ||
| 347 | sharpsl_charge_off(); | ||
| 348 | |||
| 349 | schedule_work(&sharpsl_bat); | ||
| 350 | } | ||
| 351 | |||
| 352 | |||
| 353 | static irqreturn_t sharpsl_ac_isr(int irq, void *dev_id, struct pt_regs *fp) | ||
| 354 | { | ||
| 355 | /* Delay the event slightly to debounce */ | ||
| 356 | /* Must be a smaller delay than the chrg_full_isr below */ | ||
| 357 | mod_timer(&sharpsl_pm.ac_timer, jiffies + msecs_to_jiffies(250)); | ||
| 358 | |||
| 359 | return IRQ_HANDLED; | ||
| 360 | } | ||
| 361 | |||
| 362 | static void sharpsl_chrg_full_timer(unsigned long data) | ||
| 363 | { | ||
| 364 | dev_dbg(sharpsl_pm.dev, "Charge Full at time: %lx\n", jiffies); | ||
| 365 | |||
| 366 | sharpsl_pm.full_count++; | ||
| 367 | |||
| 368 | if (STATUS_AC_IN() == 0) { | ||
| 369 | dev_dbg(sharpsl_pm.dev, "Charge Full: AC removed - stop charging!\n"); | ||
| 370 | if (sharpsl_pm.charge_mode == CHRG_ON) | ||
| 371 | sharpsl_charge_off(); | ||
| 372 | } else if (sharpsl_pm.full_count < 2) { | ||
| 373 | dev_dbg(sharpsl_pm.dev, "Charge Full: Count too low\n"); | ||
| 374 | schedule_work(&toggle_charger); | ||
| 375 | } else if (time_after(jiffies, sharpsl_pm.charge_start_time + SHARPSL_CHARGE_FINISH_TIME)) { | ||
| 376 | dev_dbg(sharpsl_pm.dev, "Charge Full: Interrupt generated too slowly - retry.\n"); | ||
| 377 | schedule_work(&toggle_charger); | ||
| 378 | } else { | ||
| 379 | sharpsl_charge_off(); | ||
| 380 | sharpsl_pm.charge_mode = CHRG_DONE; | ||
| 381 | dev_dbg(sharpsl_pm.dev, "Charge Full: Charging Finished\n"); | ||
| 382 | } | ||
| 383 | } | ||
| 384 | |||
| 385 | /* Charging Finished Interrupt (Not present on Corgi) */ | ||
| 386 | /* Can trigger at the same time as an AC staus change so | ||
| 387 | delay until after that has been processed */ | ||
| 388 | static irqreturn_t sharpsl_chrg_full_isr(int irq, void *dev_id, struct pt_regs *fp) | ||
| 389 | { | ||
| 390 | if (sharpsl_pm.flags & SHARPSL_SUSPENDED) | ||
| 391 | return IRQ_HANDLED; | ||
| 392 | |||
| 393 | /* delay until after any ac interrupt */ | ||
| 394 | mod_timer(&sharpsl_pm.chrg_full_timer, jiffies + msecs_to_jiffies(500)); | ||
| 395 | |||
| 396 | return IRQ_HANDLED; | ||
| 397 | } | ||
| 398 | |||
| 399 | static irqreturn_t sharpsl_fatal_isr(int irq, void *dev_id, struct pt_regs *fp) | ||
| 400 | { | ||
| 401 | int is_fatal = 0; | ||
| 402 | |||
| 403 | if (STATUS_BATT_LOCKED() == 0) { | ||
| 404 | dev_err(sharpsl_pm.dev, "Battery now Unlocked! Suspending.\n"); | ||
| 405 | is_fatal = 1; | ||
| 406 | } | ||
| 407 | |||
| 408 | if (sharpsl_pm.machinfo->gpio_fatal && (STATUS_FATAL() == 0)) { | ||
| 409 | dev_err(sharpsl_pm.dev, "Fatal Batt Error! Suspending.\n"); | ||
| 410 | is_fatal = 1; | ||
| 411 | } | ||
| 412 | |||
| 413 | if (!(sharpsl_pm.flags & SHARPSL_APM_QUEUED) && is_fatal) { | ||
| 414 | sharpsl_pm.flags |= SHARPSL_APM_QUEUED; | ||
| 415 | apm_queue_event(APM_CRITICAL_SUSPEND); | ||
| 416 | } | ||
| 417 | |||
| 418 | return IRQ_HANDLED; | ||
| 419 | } | ||
| 420 | |||
| 421 | /* | ||
| 422 | * Maintain an average of the last 10 readings | ||
| 423 | */ | ||
| 424 | #define SHARPSL_CNV_VALUE_NUM 10 | ||
| 425 | static int sharpsl_ad_index; | ||
| 426 | |||
| 427 | static void sharpsl_average_clear(void) | ||
| 428 | { | ||
| 429 | sharpsl_ad_index = 0; | ||
| 430 | } | ||
| 431 | |||
| 432 | static int sharpsl_average_value(int ad) | ||
| 433 | { | ||
| 434 | int i, ad_val = 0; | ||
| 435 | static int sharpsl_ad[SHARPSL_CNV_VALUE_NUM+1]; | ||
| 436 | |||
| 437 | if (sharpsl_pm.battstat.mainbat_status != APM_BATTERY_STATUS_HIGH) { | ||
| 438 | sharpsl_ad_index = 0; | ||
| 439 | return ad; | ||
| 440 | } | ||
| 441 | |||
| 442 | sharpsl_ad[sharpsl_ad_index] = ad; | ||
| 443 | sharpsl_ad_index++; | ||
| 444 | if (sharpsl_ad_index >= SHARPSL_CNV_VALUE_NUM) { | ||
| 445 | for (i=0; i < (SHARPSL_CNV_VALUE_NUM-1); i++) | ||
| 446 | sharpsl_ad[i] = sharpsl_ad[i+1]; | ||
| 447 | sharpsl_ad_index = SHARPSL_CNV_VALUE_NUM - 1; | ||
| 448 | } | ||
| 449 | for (i=0; i < sharpsl_ad_index; i++) | ||
| 450 | ad_val += sharpsl_ad[i]; | ||
| 451 | |||
| 452 | return (ad_val / sharpsl_ad_index); | ||
| 453 | } | ||
| 454 | |||
| 455 | |||
| 456 | /* | 126 | /* |
| 457 | * Read MAX1111 ADC | 127 | * Read MAX1111 ADC |
| 458 | */ | 128 | */ |
| 459 | static int read_max1111(int channel) | 129 | int sharpsl_pm_pxa_read_max1111(int channel) |
| 460 | { | 130 | { |
| 461 | return corgi_ssp_max1111_get((channel << MAXCTRL_SEL_SH) | MAXCTRL_PD0 | MAXCTRL_PD1 | 131 | return corgi_ssp_max1111_get((channel << MAXCTRL_SEL_SH) | MAXCTRL_PD0 | MAXCTRL_PD1 |
| 462 | | MAXCTRL_SGL | MAXCTRL_UNI | MAXCTRL_STR); | 132 | | MAXCTRL_SGL | MAXCTRL_UNI | MAXCTRL_STR); |
| 463 | } | 133 | } |
| 464 | 134 | ||
| 465 | static int sharpsl_read_main_battery(void) | 135 | void sharpsl_pm_pxa_init(void) |
| 466 | { | ||
| 467 | return read_max1111(BATT_AD); | ||
| 468 | } | ||
| 469 | |||
| 470 | static int sharpsl_read_temp(void) | ||
| 471 | { | 136 | { |
| 472 | int temp; | ||
| 473 | |||
| 474 | sharpsl_pm.machinfo->measure_temp(1); | ||
| 475 | |||
| 476 | mdelay(SHARPSL_CHECK_BATTERY_WAIT_TIME_TEMP); | ||
| 477 | temp = read_max1111(BATT_THM); | ||
| 478 | |||
| 479 | sharpsl_pm.machinfo->measure_temp(0); | ||
| 480 | |||
| 481 | return temp; | ||
| 482 | } | ||
| 483 | |||
| 484 | static int sharpsl_read_acin(void) | ||
| 485 | { | ||
| 486 | return read_max1111(JK_VAD); | ||
| 487 | } | ||
| 488 | |||
| 489 | /* | ||
| 490 | * Take an array of 5 integers, remove the maximum and minimum values | ||
| 491 | * and return the average. | ||
| 492 | */ | ||
| 493 | static int get_select_val(int *val) | ||
| 494 | { | ||
| 495 | int i, j, k, temp, sum = 0; | ||
| 496 | |||
| 497 | /* Find MAX val */ | ||
| 498 | temp = val[0]; | ||
| 499 | j=0; | ||
| 500 | for (i=1; i<5; i++) { | ||
| 501 | if (temp < val[i]) { | ||
| 502 | temp = val[i]; | ||
| 503 | j = i; | ||
| 504 | } | ||
| 505 | } | ||
| 506 | |||
| 507 | /* Find MIN val */ | ||
| 508 | temp = val[4]; | ||
| 509 | k=4; | ||
| 510 | for (i=3; i>=0; i--) { | ||
| 511 | if (temp > val[i]) { | ||
| 512 | temp = val[i]; | ||
| 513 | k = i; | ||
| 514 | } | ||
| 515 | } | ||
| 516 | |||
| 517 | for (i=0; i<5; i++) | ||
| 518 | if (i != j && i != k ) | ||
| 519 | sum += val[i]; | ||
| 520 | |||
| 521 | dev_dbg(sharpsl_pm.dev, "Average: %d from values: %d, %d, %d, %d, %d\n", sum/3, val[0], val[1], val[2], val[3], val[4]); | ||
| 522 | |||
| 523 | return (sum/3); | ||
| 524 | } | ||
| 525 | |||
| 526 | static int sharpsl_check_battery_temp(void) | ||
| 527 | { | ||
| 528 | int val, i, buff[5]; | ||
| 529 | |||
| 530 | /* Check battery temperature */ | ||
| 531 | for (i=0; i<5; i++) { | ||
| 532 | mdelay(SHARPSL_CHECK_BATTERY_WAIT_TIME_TEMP); | ||
| 533 | buff[i] = sharpsl_read_temp(); | ||
| 534 | } | ||
| 535 | |||
| 536 | val = get_select_val(buff); | ||
| 537 | |||
| 538 | dev_dbg(sharpsl_pm.dev, "Temperature: %d\n", val); | ||
| 539 | if (val > SHARPSL_CHARGE_ON_TEMP) | ||
| 540 | return -1; | ||
| 541 | |||
| 542 | return 0; | ||
| 543 | } | ||
| 544 | |||
| 545 | static int sharpsl_check_battery_voltage(void) | ||
| 546 | { | ||
| 547 | int val, i, buff[5]; | ||
| 548 | |||
| 549 | /* disable charge, enable discharge */ | ||
| 550 | CHARGE_OFF(); | ||
| 551 | DISCHARGE_ON(); | ||
| 552 | mdelay(SHARPSL_WAIT_DISCHARGE_ON); | ||
| 553 | |||
| 554 | if (sharpsl_pm.machinfo->discharge1) | ||
| 555 | sharpsl_pm.machinfo->discharge1(1); | ||
| 556 | |||
| 557 | /* Check battery voltage */ | ||
| 558 | for (i=0; i<5; i++) { | ||
| 559 | buff[i] = sharpsl_read_main_battery(); | ||
| 560 | mdelay(SHARPSL_CHECK_BATTERY_WAIT_TIME_VOLT); | ||
| 561 | } | ||
| 562 | |||
| 563 | if (sharpsl_pm.machinfo->discharge1) | ||
| 564 | sharpsl_pm.machinfo->discharge1(0); | ||
| 565 | |||
| 566 | DISCHARGE_OFF(); | ||
| 567 | |||
| 568 | val = get_select_val(buff); | ||
| 569 | dev_dbg(sharpsl_pm.dev, "Battery Voltage: %d\n", val); | ||
| 570 | |||
| 571 | if (val < SHARPSL_CHARGE_ON_VOLT) | ||
| 572 | return -1; | ||
| 573 | |||
| 574 | return 0; | ||
| 575 | } | ||
| 576 | |||
| 577 | static int sharpsl_ac_check(void) | ||
| 578 | { | ||
| 579 | int temp, i, buff[5]; | ||
| 580 | |||
| 581 | for (i=0; i<5; i++) { | ||
| 582 | buff[i] = sharpsl_read_acin(); | ||
| 583 | mdelay(SHARPSL_CHECK_BATTERY_WAIT_TIME_ACIN); | ||
| 584 | } | ||
| 585 | |||
| 586 | temp = get_select_val(buff); | ||
| 587 | dev_dbg(sharpsl_pm.dev, "AC Voltage: %d\n",temp); | ||
| 588 | |||
| 589 | if ((temp > SHARPSL_CHARGE_ON_ACIN_HIGH) || (temp < SHARPSL_CHARGE_ON_ACIN_LOW)) { | ||
| 590 | dev_err(sharpsl_pm.dev, "Error: AC check failed.\n"); | ||
| 591 | return -1; | ||
| 592 | } | ||
| 593 | |||
| 594 | return 0; | ||
| 595 | } | ||
| 596 | |||
| 597 | #ifdef CONFIG_PM | ||
| 598 | static int sharpsl_pm_suspend(struct platform_device *pdev, pm_message_t state) | ||
| 599 | { | ||
| 600 | sharpsl_pm.flags |= SHARPSL_SUSPENDED; | ||
| 601 | flush_scheduled_work(); | ||
| 602 | |||
| 603 | if (sharpsl_pm.charge_mode == CHRG_ON) | ||
| 604 | sharpsl_pm.flags |= SHARPSL_DO_OFFLINE_CHRG; | ||
| 605 | else | ||
| 606 | sharpsl_pm.flags &= ~SHARPSL_DO_OFFLINE_CHRG; | ||
| 607 | |||
| 608 | return 0; | ||
| 609 | } | ||
| 610 | |||
| 611 | static int sharpsl_pm_resume(struct platform_device *pdev) | ||
| 612 | { | ||
| 613 | /* Clear the reset source indicators as they break the bootloader upon reboot */ | ||
| 614 | RCSR = 0x0f; | ||
| 615 | sharpsl_average_clear(); | ||
| 616 | sharpsl_pm.flags &= ~SHARPSL_APM_QUEUED; | ||
| 617 | sharpsl_pm.flags &= ~SHARPSL_SUSPENDED; | ||
| 618 | |||
| 619 | return 0; | ||
| 620 | } | ||
| 621 | |||
| 622 | static void corgi_goto_sleep(unsigned long alarm_time, unsigned int alarm_enable, suspend_state_t state) | ||
| 623 | { | ||
| 624 | dev_dbg(sharpsl_pm.dev, "Time is: %08x\n",RCNR); | ||
| 625 | |||
| 626 | dev_dbg(sharpsl_pm.dev, "Offline Charge Activate = %d\n",sharpsl_pm.flags & SHARPSL_DO_OFFLINE_CHRG); | ||
| 627 | /* not charging and AC-IN! */ | ||
| 628 | |||
| 629 | if ((sharpsl_pm.flags & SHARPSL_DO_OFFLINE_CHRG) && (STATUS_AC_IN() != 0)) { | ||
| 630 | dev_dbg(sharpsl_pm.dev, "Activating Offline Charger...\n"); | ||
| 631 | sharpsl_pm.charge_mode = CHRG_OFF; | ||
| 632 | sharpsl_pm.flags &= ~SHARPSL_DO_OFFLINE_CHRG; | ||
| 633 | sharpsl_off_charge_battery(); | ||
| 634 | } | ||
| 635 | |||
| 636 | sharpsl_pm.machinfo->presuspend(); | ||
| 637 | |||
| 638 | PEDR = 0xffffffff; /* clear it */ | ||
| 639 | |||
| 640 | sharpsl_pm.flags &= ~SHARPSL_ALARM_ACTIVE; | ||
| 641 | if ((sharpsl_pm.charge_mode == CHRG_ON) && ((alarm_enable && ((alarm_time - RCNR) > (SHARPSL_BATCHK_TIME_SUSPEND + 30))) || !alarm_enable)) { | ||
| 642 | RTSR &= RTSR_ALE; | ||
| 643 | RTAR = RCNR + SHARPSL_BATCHK_TIME_SUSPEND; | ||
| 644 | dev_dbg(sharpsl_pm.dev, "Charging alarm at: %08x\n",RTAR); | ||
| 645 | sharpsl_pm.flags |= SHARPSL_ALARM_ACTIVE; | ||
| 646 | } else if (alarm_enable) { | ||
| 647 | RTSR &= RTSR_ALE; | ||
| 648 | RTAR = alarm_time; | ||
| 649 | dev_dbg(sharpsl_pm.dev, "User alarm at: %08x\n",RTAR); | ||
| 650 | } else { | ||
| 651 | dev_dbg(sharpsl_pm.dev, "No alarms set.\n"); | ||
| 652 | } | ||
| 653 | |||
| 654 | pxa_pm_enter(state); | ||
| 655 | |||
| 656 | sharpsl_pm.machinfo->postsuspend(); | ||
| 657 | |||
| 658 | dev_dbg(sharpsl_pm.dev, "Corgi woken up from suspend: %08x\n",PEDR); | ||
| 659 | } | ||
| 660 | |||
| 661 | static int corgi_enter_suspend(unsigned long alarm_time, unsigned int alarm_enable, suspend_state_t state) | ||
| 662 | { | ||
| 663 | if (!sharpsl_pm.machinfo->should_wakeup(!(sharpsl_pm.flags & SHARPSL_ALARM_ACTIVE) && alarm_enable) ) | ||
| 664 | { | ||
| 665 | if (!(sharpsl_pm.flags & SHARPSL_ALARM_ACTIVE)) { | ||
| 666 | dev_dbg(sharpsl_pm.dev, "No user triggered wakeup events and not charging. Strange. Suspend.\n"); | ||
| 667 | corgi_goto_sleep(alarm_time, alarm_enable, state); | ||
| 668 | return 1; | ||
| 669 | } | ||
| 670 | if(sharpsl_off_charge_battery()) { | ||
| 671 | dev_dbg(sharpsl_pm.dev, "Charging. Suspend...\n"); | ||
| 672 | corgi_goto_sleep(alarm_time, alarm_enable, state); | ||
| 673 | return 1; | ||
| 674 | } | ||
| 675 | dev_dbg(sharpsl_pm.dev, "User triggered wakeup in offline charger.\n"); | ||
| 676 | } | ||
| 677 | |||
| 678 | if ((STATUS_BATT_LOCKED() == 0) || (sharpsl_fatal_check() < 0) ) | ||
| 679 | { | ||
| 680 | dev_err(sharpsl_pm.dev, "Fatal condition. Suspend.\n"); | ||
| 681 | corgi_goto_sleep(alarm_time, alarm_enable, state); | ||
| 682 | return 1; | ||
| 683 | } | ||
| 684 | |||
| 685 | return 0; | ||
| 686 | } | ||
| 687 | |||
| 688 | static int corgi_pxa_pm_enter(suspend_state_t state) | ||
| 689 | { | ||
| 690 | unsigned long alarm_time = RTAR; | ||
| 691 | unsigned int alarm_status = ((RTSR & RTSR_ALE) != 0); | ||
| 692 | |||
| 693 | dev_dbg(sharpsl_pm.dev, "SharpSL suspending for first time.\n"); | ||
| 694 | |||
| 695 | corgi_goto_sleep(alarm_time, alarm_status, state); | ||
| 696 | |||
| 697 | while (corgi_enter_suspend(alarm_time,alarm_status,state)) | ||
| 698 | {} | ||
| 699 | |||
| 700 | dev_dbg(sharpsl_pm.dev, "SharpSL resuming...\n"); | ||
| 701 | |||
| 702 | return 0; | ||
| 703 | } | ||
| 704 | #endif | ||
| 705 | |||
| 706 | |||
| 707 | /* | ||
| 708 | * Check for fatal battery errors | ||
| 709 | * Fatal returns -1 | ||
| 710 | */ | ||
| 711 | static int sharpsl_fatal_check(void) | ||
| 712 | { | ||
| 713 | int buff[5], temp, i, acin; | ||
| 714 | |||
| 715 | dev_dbg(sharpsl_pm.dev, "sharpsl_fatal_check entered\n"); | ||
| 716 | |||
| 717 | /* Check AC-Adapter */ | ||
| 718 | acin = STATUS_AC_IN(); | ||
| 719 | |||
| 720 | if (acin && (sharpsl_pm.charge_mode == CHRG_ON)) { | ||
| 721 | CHARGE_OFF(); | ||
| 722 | udelay(100); | ||
| 723 | DISCHARGE_ON(); /* enable discharge */ | ||
| 724 | mdelay(SHARPSL_WAIT_DISCHARGE_ON); | ||
| 725 | } | ||
| 726 | |||
| 727 | if (sharpsl_pm.machinfo->discharge1) | ||
| 728 | sharpsl_pm.machinfo->discharge1(1); | ||
| 729 | |||
| 730 | /* Check battery : check inserting battery ? */ | ||
| 731 | for (i=0; i<5; i++) { | ||
| 732 | buff[i] = sharpsl_read_main_battery(); | ||
| 733 | mdelay(SHARPSL_CHECK_BATTERY_WAIT_TIME_VOLT); | ||
| 734 | } | ||
| 735 | |||
| 736 | if (sharpsl_pm.machinfo->discharge1) | ||
| 737 | sharpsl_pm.machinfo->discharge1(0); | ||
| 738 | |||
| 739 | if (acin && (sharpsl_pm.charge_mode == CHRG_ON)) { | ||
| 740 | udelay(100); | ||
| 741 | CHARGE_ON(); | ||
| 742 | DISCHARGE_OFF(); | ||
| 743 | } | ||
| 744 | |||
| 745 | temp = get_select_val(buff); | ||
| 746 | dev_dbg(sharpsl_pm.dev, "sharpsl_fatal_check: acin: %d, discharge voltage: %d, no discharge: %d\n", acin, temp, sharpsl_read_main_battery()); | ||
| 747 | |||
| 748 | if ((acin && (temp < SHARPSL_FATAL_ACIN_VOLT)) || | ||
| 749 | (!acin && (temp < SHARPSL_FATAL_NOACIN_VOLT))) | ||
| 750 | return -1; | ||
| 751 | return 0; | ||
| 752 | } | ||
| 753 | |||
| 754 | static int sharpsl_off_charge_error(void) | ||
| 755 | { | ||
| 756 | dev_err(sharpsl_pm.dev, "Offline Charger: Error occured.\n"); | ||
| 757 | CHARGE_OFF(); | ||
| 758 | CHARGE_LED_ERR(); | ||
| 759 | sharpsl_pm.charge_mode = CHRG_ERROR; | ||
| 760 | return 1; | ||
| 761 | } | ||
| 762 | |||
| 763 | /* | ||
| 764 | * Charging Control while suspended | ||
| 765 | * Return 1 - go straight to sleep | ||
| 766 | * Return 0 - sleep or wakeup depending on other factors | ||
| 767 | */ | ||
| 768 | static int sharpsl_off_charge_battery(void) | ||
| 769 | { | ||
| 770 | int time; | ||
| 771 | |||
| 772 | dev_dbg(sharpsl_pm.dev, "Charge Mode: %d\n", sharpsl_pm.charge_mode); | ||
| 773 | |||
| 774 | if (sharpsl_pm.charge_mode == CHRG_OFF) { | ||
| 775 | dev_dbg(sharpsl_pm.dev, "Offline Charger: Step 1\n"); | ||
| 776 | |||
| 777 | /* AC Check */ | ||
| 778 | if ((sharpsl_ac_check() < 0) || (sharpsl_check_battery_temp() < 0)) | ||
| 779 | return sharpsl_off_charge_error(); | ||
| 780 | |||
| 781 | /* Start Charging */ | ||
| 782 | CHARGE_LED_ON(); | ||
| 783 | CHARGE_OFF(); | ||
| 784 | mdelay(SHARPSL_CHARGE_WAIT_TIME); | ||
| 785 | CHARGE_ON(); | ||
| 786 | |||
| 787 | sharpsl_pm.charge_mode = CHRG_ON; | ||
| 788 | sharpsl_pm.full_count = 0; | ||
| 789 | |||
| 790 | return 1; | ||
| 791 | } else if (sharpsl_pm.charge_mode != CHRG_ON) { | ||
| 792 | return 1; | ||
| 793 | } | ||
| 794 | |||
| 795 | if (sharpsl_pm.full_count == 0) { | ||
| 796 | int time; | ||
| 797 | |||
| 798 | dev_dbg(sharpsl_pm.dev, "Offline Charger: Step 2\n"); | ||
| 799 | |||
| 800 | if ((sharpsl_check_battery_temp() < 0) || (sharpsl_check_battery_voltage() < 0)) | ||
| 801 | return sharpsl_off_charge_error(); | ||
| 802 | |||
| 803 | CHARGE_OFF(); | ||
| 804 | mdelay(SHARPSL_CHARGE_WAIT_TIME); | ||
| 805 | CHARGE_ON(); | ||
| 806 | sharpsl_pm.charge_mode = CHRG_ON; | ||
| 807 | |||
| 808 | mdelay(SHARPSL_CHARGE_CO_CHECK_TIME); | ||
| 809 | |||
| 810 | time = RCNR; | ||
| 811 | while(1) { | ||
| 812 | /* Check if any wakeup event had occured */ | ||
| 813 | if (sharpsl_pm.machinfo->charger_wakeup() != 0) | ||
| 814 | return 0; | ||
| 815 | /* Check for timeout */ | ||
| 816 | if ((RCNR - time) > SHARPSL_WAIT_CO_TIME) | ||
| 817 | return 1; | ||
| 818 | if (STATUS_CHRG_FULL()) { | ||
| 819 | dev_dbg(sharpsl_pm.dev, "Offline Charger: Charge full occured. Retrying to check\n"); | ||
| 820 | sharpsl_pm.full_count++; | ||
| 821 | CHARGE_OFF(); | ||
| 822 | mdelay(SHARPSL_CHARGE_WAIT_TIME); | ||
| 823 | CHARGE_ON(); | ||
| 824 | return 1; | ||
| 825 | } | ||
| 826 | } | ||
| 827 | } | ||
| 828 | |||
| 829 | dev_dbg(sharpsl_pm.dev, "Offline Charger: Step 3\n"); | ||
| 830 | |||
| 831 | mdelay(SHARPSL_CHARGE_CO_CHECK_TIME); | ||
| 832 | |||
| 833 | time = RCNR; | ||
| 834 | while(1) { | ||
| 835 | /* Check if any wakeup event had occured */ | ||
| 836 | if (sharpsl_pm.machinfo->charger_wakeup() != 0) | ||
| 837 | return 0; | ||
| 838 | /* Check for timeout */ | ||
| 839 | if ((RCNR-time) > SHARPSL_WAIT_CO_TIME) { | ||
| 840 | if (sharpsl_pm.full_count > SHARPSL_CHARGE_RETRY_CNT) { | ||
| 841 | dev_dbg(sharpsl_pm.dev, "Offline Charger: Not charged sufficiently. Retrying.\n"); | ||
| 842 | sharpsl_pm.full_count = 0; | ||
| 843 | } | ||
| 844 | sharpsl_pm.full_count++; | ||
| 845 | return 1; | ||
| 846 | } | ||
| 847 | if (STATUS_CHRG_FULL()) { | ||
| 848 | dev_dbg(sharpsl_pm.dev, "Offline Charger: Charging complete.\n"); | ||
| 849 | CHARGE_LED_OFF(); | ||
| 850 | CHARGE_OFF(); | ||
| 851 | sharpsl_pm.charge_mode = CHRG_DONE; | ||
| 852 | return 1; | ||
| 853 | } | ||
| 854 | } | ||
| 855 | } | ||
| 856 | |||
| 857 | |||
| 858 | static ssize_t battery_percentage_show(struct device *dev, struct device_attribute *attr, char *buf) | ||
| 859 | { | ||
| 860 | return sprintf(buf, "%d\n",sharpsl_pm.battstat.mainbat_percent); | ||
| 861 | } | ||
| 862 | |||
| 863 | static ssize_t battery_voltage_show(struct device *dev, struct device_attribute *attr, char *buf) | ||
| 864 | { | ||
| 865 | return sprintf(buf, "%d\n",sharpsl_pm.battstat.mainbat_voltage); | ||
| 866 | } | ||
| 867 | |||
| 868 | static DEVICE_ATTR(battery_percentage, 0444, battery_percentage_show, NULL); | ||
| 869 | static DEVICE_ATTR(battery_voltage, 0444, battery_voltage_show, NULL); | ||
| 870 | |||
| 871 | extern void (*apm_get_power_status)(struct apm_power_info *); | ||
| 872 | |||
| 873 | static void sharpsl_apm_get_power_status(struct apm_power_info *info) | ||
| 874 | { | ||
| 875 | info->ac_line_status = sharpsl_pm.battstat.ac_status; | ||
| 876 | |||
| 877 | if (sharpsl_pm.charge_mode == CHRG_ON) | ||
| 878 | info->battery_status = APM_BATTERY_STATUS_CHARGING; | ||
| 879 | else | ||
| 880 | info->battery_status = sharpsl_pm.battstat.mainbat_status; | ||
| 881 | |||
| 882 | info->battery_flag = (1 << info->battery_status); | ||
| 883 | info->battery_life = sharpsl_pm.battstat.mainbat_percent; | ||
| 884 | } | ||
| 885 | |||
| 886 | static struct pm_ops sharpsl_pm_ops = { | ||
| 887 | .pm_disk_mode = PM_DISK_FIRMWARE, | ||
| 888 | .prepare = pxa_pm_prepare, | ||
| 889 | .enter = corgi_pxa_pm_enter, | ||
| 890 | .finish = pxa_pm_finish, | ||
| 891 | }; | ||
| 892 | |||
| 893 | static int __init sharpsl_pm_probe(struct platform_device *pdev) | ||
| 894 | { | ||
| 895 | if (!pdev->dev.platform_data) | ||
| 896 | return -EINVAL; | ||
| 897 | |||
| 898 | sharpsl_pm.dev = &pdev->dev; | ||
| 899 | sharpsl_pm.machinfo = pdev->dev.platform_data; | ||
| 900 | sharpsl_pm.charge_mode = CHRG_OFF; | ||
| 901 | sharpsl_pm.flags = 0; | ||
| 902 | |||
| 903 | sharpsl_pm.machinfo->init(); | ||
| 904 | |||
| 905 | init_timer(&sharpsl_pm.ac_timer); | ||
| 906 | sharpsl_pm.ac_timer.function = sharpsl_ac_timer; | ||
| 907 | |||
| 908 | init_timer(&sharpsl_pm.chrg_full_timer); | ||
| 909 | sharpsl_pm.chrg_full_timer.function = sharpsl_chrg_full_timer; | ||
| 910 | |||
| 911 | pxa_gpio_mode(sharpsl_pm.machinfo->gpio_acin | GPIO_IN); | 137 | pxa_gpio_mode(sharpsl_pm.machinfo->gpio_acin | GPIO_IN); |
| 912 | pxa_gpio_mode(sharpsl_pm.machinfo->gpio_batfull | GPIO_IN); | 138 | pxa_gpio_mode(sharpsl_pm.machinfo->gpio_batfull | GPIO_IN); |
| 913 | pxa_gpio_mode(sharpsl_pm.machinfo->gpio_batlock | GPIO_IN); | 139 | pxa_gpio_mode(sharpsl_pm.machinfo->gpio_batlock | GPIO_IN); |
| @@ -938,26 +164,10 @@ static int __init sharpsl_pm_probe(struct platform_device *pdev) | |||
| 938 | } | 164 | } |
| 939 | else set_irq_type(IRQ_GPIO(sharpsl_pm.machinfo->gpio_batfull),IRQT_RISING); | 165 | else set_irq_type(IRQ_GPIO(sharpsl_pm.machinfo->gpio_batfull),IRQT_RISING); |
| 940 | } | 166 | } |
| 941 | |||
| 942 | device_create_file(&pdev->dev, &dev_attr_battery_percentage); | ||
| 943 | device_create_file(&pdev->dev, &dev_attr_battery_voltage); | ||
| 944 | |||
| 945 | apm_get_power_status = sharpsl_apm_get_power_status; | ||
| 946 | |||
| 947 | pm_set_ops(&sharpsl_pm_ops); | ||
| 948 | |||
| 949 | mod_timer(&sharpsl_pm.ac_timer, jiffies + msecs_to_jiffies(250)); | ||
| 950 | |||
| 951 | return 0; | ||
| 952 | } | 167 | } |
| 953 | 168 | ||
| 954 | static int sharpsl_pm_remove(struct platform_device *pdev) | 169 | void sharpsl_pm_pxa_remove(void) |
| 955 | { | 170 | { |
| 956 | pm_set_ops(NULL); | ||
| 957 | |||
| 958 | device_remove_file(&pdev->dev, &dev_attr_battery_percentage); | ||
| 959 | device_remove_file(&pdev->dev, &dev_attr_battery_voltage); | ||
| 960 | |||
| 961 | free_irq(IRQ_GPIO(sharpsl_pm.machinfo->gpio_acin), sharpsl_ac_isr); | 171 | free_irq(IRQ_GPIO(sharpsl_pm.machinfo->gpio_acin), sharpsl_ac_isr); |
| 962 | free_irq(IRQ_GPIO(sharpsl_pm.machinfo->gpio_batlock), sharpsl_fatal_isr); | 172 | free_irq(IRQ_GPIO(sharpsl_pm.machinfo->gpio_batlock), sharpsl_fatal_isr); |
| 963 | 173 | ||
| @@ -966,32 +176,4 @@ static int sharpsl_pm_remove(struct platform_device *pdev) | |||
| 966 | 176 | ||
| 967 | if (!machine_is_corgi()) | 177 | if (!machine_is_corgi()) |
| 968 | free_irq(IRQ_GPIO(sharpsl_pm.machinfo->gpio_batfull), sharpsl_chrg_full_isr); | 178 | free_irq(IRQ_GPIO(sharpsl_pm.machinfo->gpio_batfull), sharpsl_chrg_full_isr); |
| 969 | |||
| 970 | del_timer_sync(&sharpsl_pm.chrg_full_timer); | ||
| 971 | del_timer_sync(&sharpsl_pm.ac_timer); | ||
| 972 | |||
| 973 | return 0; | ||
| 974 | } | 179 | } |
| 975 | |||
| 976 | static struct platform_driver sharpsl_pm_driver = { | ||
| 977 | .probe = sharpsl_pm_probe, | ||
| 978 | .remove = sharpsl_pm_remove, | ||
| 979 | .suspend = sharpsl_pm_suspend, | ||
| 980 | .resume = sharpsl_pm_resume, | ||
| 981 | .driver = { | ||
| 982 | .name = "sharpsl-pm", | ||
| 983 | }, | ||
| 984 | }; | ||
| 985 | |||
| 986 | static int __devinit sharpsl_pm_init(void) | ||
| 987 | { | ||
| 988 | return platform_driver_register(&sharpsl_pm_driver); | ||
| 989 | } | ||
| 990 | |||
| 991 | static void sharpsl_pm_exit(void) | ||
| 992 | { | ||
| 993 | platform_driver_unregister(&sharpsl_pm_driver); | ||
| 994 | } | ||
| 995 | |||
| 996 | late_initcall(sharpsl_pm_init); | ||
| 997 | module_exit(sharpsl_pm_exit); | ||
diff --git a/arch/arm/mach-pxa/spitz.c b/arch/arm/mach-pxa/spitz.c index 2df1b56615b1..f2007db0cda5 100644 --- a/arch/arm/mach-pxa/spitz.c +++ b/arch/arm/mach-pxa/spitz.c | |||
| @@ -36,6 +36,7 @@ | |||
| 36 | #include <asm/arch/irq.h> | 36 | #include <asm/arch/irq.h> |
| 37 | #include <asm/arch/irda.h> | 37 | #include <asm/arch/irda.h> |
| 38 | #include <asm/arch/mmc.h> | 38 | #include <asm/arch/mmc.h> |
| 39 | #include <asm/arch/ohci.h> | ||
| 39 | #include <asm/arch/udc.h> | 40 | #include <asm/arch/udc.h> |
| 40 | #include <asm/arch/pxafb.h> | 41 | #include <asm/arch/pxafb.h> |
| 41 | #include <asm/arch/akita.h> | 42 | #include <asm/arch/akita.h> |
| @@ -126,10 +127,12 @@ static void spitz_card_pwr_ctrl(int device, unsigned short new_cpr) | |||
| 126 | cpr &= ~0x0002; | 127 | cpr &= ~0x0002; |
| 127 | if (device == SPITZ_PWR_SD) | 128 | if (device == SPITZ_PWR_SD) |
| 128 | cpr &= ~0x0004; | 129 | cpr &= ~0x0004; |
| 129 | write_scoop_reg(&spitzscoop_device.dev, SCOOP_CPR, cpr | new_cpr); | ||
| 130 | if (!(cpr & 0x0002) && !(cpr & 0x0004)) { | 130 | if (!(cpr & 0x0002) && !(cpr & 0x0004)) { |
| 131 | write_scoop_reg(&spitzscoop_device.dev, SCOOP_CPR, 0x0000); | ||
| 131 | mdelay(1); | 132 | mdelay(1); |
| 132 | reset_scoop_gpio(&spitzscoop_device.dev, SPITZ_SCP_CF_POWER); | 133 | reset_scoop_gpio(&spitzscoop_device.dev, SPITZ_SCP_CF_POWER); |
| 134 | } else { | ||
| 135 | write_scoop_reg(&spitzscoop_device.dev, SCOOP_CPR, cpr | new_cpr); | ||
| 133 | } | 136 | } |
| 134 | } | 137 | } |
| 135 | } | 138 | } |
| @@ -335,6 +338,35 @@ static struct pxamci_platform_data spitz_mci_platform_data = { | |||
| 335 | 338 | ||
| 336 | 339 | ||
| 337 | /* | 340 | /* |
| 341 | * USB Host (OHCI) | ||
| 342 | */ | ||
| 343 | static int spitz_ohci_init(struct device *dev) | ||
| 344 | { | ||
| 345 | /* Only Port 2 is connected */ | ||
| 346 | pxa_gpio_mode(SPITZ_GPIO_USB_CONNECT | GPIO_IN); | ||
| 347 | pxa_gpio_mode(SPITZ_GPIO_USB_HOST | GPIO_OUT); | ||
| 348 | pxa_gpio_mode(SPITZ_GPIO_USB_DEVICE | GPIO_IN); | ||
| 349 | |||
| 350 | /* Setup USB Port 2 Output Control Register */ | ||
| 351 | UP2OCR = UP2OCR_HXS | UP2OCR_HXOE | UP2OCR_DPPDE | UP2OCR_DMPDE; | ||
| 352 | |||
| 353 | GPSR(SPITZ_GPIO_USB_HOST) = GPIO_bit(SPITZ_GPIO_USB_HOST); | ||
| 354 | |||
| 355 | UHCHR = (UHCHR) & | ||
| 356 | ~(UHCHR_SSEP1 | UHCHR_SSEP2 | UHCHR_SSEP3 | UHCHR_SSE); | ||
| 357 | |||
| 358 | UHCRHDA |= UHCRHDA_NOCP; | ||
| 359 | |||
| 360 | return 0; | ||
| 361 | } | ||
| 362 | |||
| 363 | static struct pxaohci_platform_data spitz_ohci_platform_data = { | ||
| 364 | .port_mode = PMM_NPS_MODE, | ||
| 365 | .init = spitz_ohci_init, | ||
| 366 | }; | ||
| 367 | |||
| 368 | |||
| 369 | /* | ||
| 338 | * Irda | 370 | * Irda |
| 339 | */ | 371 | */ |
| 340 | static void spitz_irda_transceiver_mode(struct device *dev, int mode) | 372 | static void spitz_irda_transceiver_mode(struct device *dev, int mode) |
| @@ -411,6 +443,7 @@ static void __init common_init(void) | |||
| 411 | 443 | ||
| 412 | platform_add_devices(devices, ARRAY_SIZE(devices)); | 444 | platform_add_devices(devices, ARRAY_SIZE(devices)); |
| 413 | pxa_set_mci_info(&spitz_mci_platform_data); | 445 | pxa_set_mci_info(&spitz_mci_platform_data); |
| 446 | pxa_set_ohci_info(&spitz_ohci_platform_data); | ||
| 414 | pxa_set_ficp_info(&spitz_ficp_platform_data); | 447 | pxa_set_ficp_info(&spitz_ficp_platform_data); |
| 415 | set_pxa_fb_parent(&spitzssp_device.dev); | 448 | set_pxa_fb_parent(&spitzssp_device.dev); |
| 416 | set_pxa_fb_info(&spitz_pxafb_info); | 449 | set_pxa_fb_info(&spitz_pxafb_info); |
diff --git a/arch/arm/mach-pxa/spitz_pm.c b/arch/arm/mach-pxa/spitz_pm.c index 3ce7486daa51..5e5bdc898482 100644 --- a/arch/arm/mach-pxa/spitz_pm.c +++ b/arch/arm/mach-pxa/spitz_pm.c | |||
| @@ -33,19 +33,7 @@ static void spitz_charger_init(void) | |||
| 33 | { | 33 | { |
| 34 | pxa_gpio_mode(SPITZ_GPIO_KEY_INT | GPIO_IN); | 34 | pxa_gpio_mode(SPITZ_GPIO_KEY_INT | GPIO_IN); |
| 35 | pxa_gpio_mode(SPITZ_GPIO_SYNC | GPIO_IN); | 35 | pxa_gpio_mode(SPITZ_GPIO_SYNC | GPIO_IN); |
| 36 | } | 36 | sharpsl_pm_pxa_init(); |
| 37 | |||
| 38 | static void spitz_charge_led(int val) | ||
| 39 | { | ||
| 40 | if (val == SHARPSL_LED_ERROR) { | ||
| 41 | dev_dbg(sharpsl_pm.dev, "Charge LED Error\n"); | ||
| 42 | } else if (val == SHARPSL_LED_ON) { | ||
| 43 | dev_dbg(sharpsl_pm.dev, "Charge LED On\n"); | ||
| 44 | set_scoop_gpio(&spitzscoop_device.dev, SPITZ_SCP_LED_ORANGE); | ||
| 45 | } else { | ||
| 46 | dev_dbg(sharpsl_pm.dev, "Charge LED Off\n"); | ||
| 47 | reset_scoop_gpio(&spitzscoop_device.dev, SPITZ_SCP_LED_ORANGE); | ||
| 48 | } | ||
| 49 | } | 37 | } |
| 50 | 38 | ||
| 51 | static void spitz_measure_temp(int on) | 39 | static void spitz_measure_temp(int on) |
| @@ -92,7 +80,7 @@ static void spitz_discharge1(int on) | |||
| 92 | 80 | ||
| 93 | static void spitz_presuspend(void) | 81 | static void spitz_presuspend(void) |
| 94 | { | 82 | { |
| 95 | spitz_last_ac_status = STATUS_AC_IN(); | 83 | spitz_last_ac_status = sharpsl_pm.machinfo->read_devdata(SHARPSL_STATUS_ACIN); |
| 96 | 84 | ||
| 97 | /* GPIO Sleep Register */ | 85 | /* GPIO Sleep Register */ |
| 98 | PGSR0 = 0x00144018; | 86 | PGSR0 = 0x00144018; |
| @@ -138,7 +126,7 @@ static void spitz_postsuspend(void) | |||
| 138 | static int spitz_should_wakeup(unsigned int resume_on_alarm) | 126 | static int spitz_should_wakeup(unsigned int resume_on_alarm) |
| 139 | { | 127 | { |
| 140 | int is_resume = 0; | 128 | int is_resume = 0; |
| 141 | int acin = STATUS_AC_IN(); | 129 | int acin = sharpsl_pm.machinfo->read_devdata(SHARPSL_STATUS_ACIN); |
| 142 | 130 | ||
| 143 | if (spitz_last_ac_status != acin) { | 131 | if (spitz_last_ac_status != acin) { |
| 144 | if (acin) { | 132 | if (acin) { |
| @@ -148,8 +136,8 @@ static int spitz_should_wakeup(unsigned int resume_on_alarm) | |||
| 148 | } else { | 136 | } else { |
| 149 | /* charge off */ | 137 | /* charge off */ |
| 150 | dev_dbg(sharpsl_pm.dev, "AC Removed\n"); | 138 | dev_dbg(sharpsl_pm.dev, "AC Removed\n"); |
| 151 | CHARGE_LED_OFF(); | 139 | sharpsl_pm_led(SHARPSL_LED_OFF); |
| 152 | CHARGE_OFF(); | 140 | sharpsl_pm.machinfo->charge(0); |
| 153 | sharpsl_pm.charge_mode = CHRG_OFF; | 141 | sharpsl_pm.charge_mode = CHRG_OFF; |
| 154 | } | 142 | } |
| 155 | spitz_last_ac_status = acin; | 143 | spitz_last_ac_status = acin; |
| @@ -175,25 +163,41 @@ static unsigned long spitz_charger_wakeup(void) | |||
| 175 | return (~GPLR0 & GPIO_bit(SPITZ_GPIO_KEY_INT)) | (GPLR0 & GPIO_bit(SPITZ_GPIO_SYNC)); | 163 | return (~GPLR0 & GPIO_bit(SPITZ_GPIO_KEY_INT)) | (GPLR0 & GPIO_bit(SPITZ_GPIO_SYNC)); |
| 176 | } | 164 | } |
| 177 | 165 | ||
| 178 | static int spitz_acin_status(void) | 166 | unsigned long spitzpm_read_devdata(int type) |
| 179 | { | 167 | { |
| 180 | return (((~GPLR(SPITZ_GPIO_AC_IN)) & GPIO_bit(SPITZ_GPIO_AC_IN)) != 0); | 168 | switch(type) { |
| 169 | case SHARPSL_STATUS_ACIN: | ||
| 170 | return (((~GPLR(SPITZ_GPIO_AC_IN)) & GPIO_bit(SPITZ_GPIO_AC_IN)) != 0); | ||
| 171 | case SHARPSL_STATUS_LOCK: | ||
| 172 | return READ_GPIO_BIT(sharpsl_pm.machinfo->gpio_batlock); | ||
| 173 | case SHARPSL_STATUS_CHRGFULL: | ||
| 174 | return READ_GPIO_BIT(sharpsl_pm.machinfo->gpio_batfull); | ||
| 175 | case SHARPSL_STATUS_FATAL: | ||
| 176 | return READ_GPIO_BIT(sharpsl_pm.machinfo->gpio_fatal); | ||
| 177 | case SHARPSL_ACIN_VOLT: | ||
| 178 | return sharpsl_pm_pxa_read_max1111(MAX1111_ACIN_VOLT); | ||
| 179 | case SHARPSL_BATT_TEMP: | ||
| 180 | return sharpsl_pm_pxa_read_max1111(MAX1111_BATT_TEMP); | ||
| 181 | case SHARPSL_BATT_VOLT: | ||
| 182 | default: | ||
| 183 | return sharpsl_pm_pxa_read_max1111(MAX1111_BATT_VOLT); | ||
| 184 | } | ||
| 181 | } | 185 | } |
| 182 | 186 | ||
| 183 | struct sharpsl_charger_machinfo spitz_pm_machinfo = { | 187 | struct sharpsl_charger_machinfo spitz_pm_machinfo = { |
| 184 | .init = spitz_charger_init, | 188 | .init = spitz_charger_init, |
| 189 | .exit = sharpsl_pm_pxa_remove, | ||
| 185 | .gpio_batlock = SPITZ_GPIO_BAT_COVER, | 190 | .gpio_batlock = SPITZ_GPIO_BAT_COVER, |
| 186 | .gpio_acin = SPITZ_GPIO_AC_IN, | 191 | .gpio_acin = SPITZ_GPIO_AC_IN, |
| 187 | .gpio_batfull = SPITZ_GPIO_CHRG_FULL, | 192 | .gpio_batfull = SPITZ_GPIO_CHRG_FULL, |
| 188 | .gpio_fatal = SPITZ_GPIO_FATAL_BAT, | 193 | .gpio_fatal = SPITZ_GPIO_FATAL_BAT, |
| 189 | .status_acin = spitz_acin_status, | ||
| 190 | .discharge = spitz_discharge, | 194 | .discharge = spitz_discharge, |
| 191 | .discharge1 = spitz_discharge1, | 195 | .discharge1 = spitz_discharge1, |
| 192 | .charge = spitz_charge, | 196 | .charge = spitz_charge, |
| 193 | .chargeled = spitz_charge_led, | ||
| 194 | .measure_temp = spitz_measure_temp, | 197 | .measure_temp = spitz_measure_temp, |
| 195 | .presuspend = spitz_presuspend, | 198 | .presuspend = spitz_presuspend, |
| 196 | .postsuspend = spitz_postsuspend, | 199 | .postsuspend = spitz_postsuspend, |
| 200 | .read_devdata = spitzpm_read_devdata, | ||
| 197 | .charger_wakeup = spitz_charger_wakeup, | 201 | .charger_wakeup = spitz_charger_wakeup, |
| 198 | .should_wakeup = spitz_should_wakeup, | 202 | .should_wakeup = spitz_should_wakeup, |
| 199 | .bat_levels = 40, | 203 | .bat_levels = 40, |
diff --git a/arch/arm/mach-realview/clock.c b/arch/arm/mach-realview/clock.c index 002635c97bb6..ec3f7e798623 100644 --- a/arch/arm/mach-realview/clock.c +++ b/arch/arm/mach-realview/clock.c | |||
| @@ -13,9 +13,9 @@ | |||
| 13 | #include <linux/list.h> | 13 | #include <linux/list.h> |
| 14 | #include <linux/errno.h> | 14 | #include <linux/errno.h> |
| 15 | #include <linux/err.h> | 15 | #include <linux/err.h> |
| 16 | #include <linux/clk.h> | ||
| 16 | 17 | ||
| 17 | #include <asm/semaphore.h> | 18 | #include <asm/semaphore.h> |
| 18 | #include <asm/hardware/clock.h> | ||
| 19 | #include <asm/hardware/icst307.h> | 19 | #include <asm/hardware/icst307.h> |
| 20 | 20 | ||
| 21 | #include "clock.h" | 21 | #include "clock.h" |
| @@ -57,17 +57,6 @@ void clk_disable(struct clk *clk) | |||
| 57 | } | 57 | } |
| 58 | EXPORT_SYMBOL(clk_disable); | 58 | EXPORT_SYMBOL(clk_disable); |
| 59 | 59 | ||
| 60 | int clk_use(struct clk *clk) | ||
| 61 | { | ||
| 62 | return 0; | ||
| 63 | } | ||
| 64 | EXPORT_SYMBOL(clk_use); | ||
| 65 | |||
| 66 | void clk_unuse(struct clk *clk) | ||
| 67 | { | ||
| 68 | } | ||
| 69 | EXPORT_SYMBOL(clk_unuse); | ||
| 70 | |||
| 71 | unsigned long clk_get_rate(struct clk *clk) | 60 | unsigned long clk_get_rate(struct clk *clk) |
| 72 | { | 61 | { |
| 73 | return clk->rate; | 62 | return clk->rate; |
diff --git a/arch/arm/mach-realview/core.c b/arch/arm/mach-realview/core.c index af6580f1ceb8..4a222f59f2cf 100644 --- a/arch/arm/mach-realview/core.c +++ b/arch/arm/mach-realview/core.c | |||
| @@ -24,14 +24,14 @@ | |||
| 24 | #include <linux/dma-mapping.h> | 24 | #include <linux/dma-mapping.h> |
| 25 | #include <linux/sysdev.h> | 25 | #include <linux/sysdev.h> |
| 26 | #include <linux/interrupt.h> | 26 | #include <linux/interrupt.h> |
| 27 | #include <linux/amba/bus.h> | ||
| 28 | #include <linux/amba/clcd.h> | ||
| 27 | 29 | ||
| 28 | #include <asm/system.h> | 30 | #include <asm/system.h> |
| 29 | #include <asm/hardware.h> | 31 | #include <asm/hardware.h> |
| 30 | #include <asm/io.h> | 32 | #include <asm/io.h> |
| 31 | #include <asm/irq.h> | 33 | #include <asm/irq.h> |
| 32 | #include <asm/leds.h> | 34 | #include <asm/leds.h> |
| 33 | #include <asm/hardware/amba.h> | ||
| 34 | #include <asm/hardware/amba_clcd.h> | ||
| 35 | #include <asm/hardware/arm_timer.h> | 35 | #include <asm/hardware/arm_timer.h> |
| 36 | #include <asm/hardware/icst307.h> | 36 | #include <asm/hardware/icst307.h> |
| 37 | 37 | ||
diff --git a/arch/arm/mach-realview/core.h b/arch/arm/mach-realview/core.h index c06e6041df41..93e86d9f439c 100644 --- a/arch/arm/mach-realview/core.h +++ b/arch/arm/mach-realview/core.h | |||
| @@ -22,7 +22,8 @@ | |||
| 22 | #ifndef __ASM_ARCH_REALVIEW_H | 22 | #ifndef __ASM_ARCH_REALVIEW_H |
| 23 | #define __ASM_ARCH_REALVIEW_H | 23 | #define __ASM_ARCH_REALVIEW_H |
| 24 | 24 | ||
| 25 | #include <asm/hardware/amba.h> | 25 | #include <linux/amba/bus.h> |
| 26 | |||
| 26 | #include <asm/leds.h> | 27 | #include <asm/leds.h> |
| 27 | #include <asm/io.h> | 28 | #include <asm/io.h> |
| 28 | 29 | ||
diff --git a/arch/arm/mach-realview/realview_eb.c b/arch/arm/mach-realview/realview_eb.c index 7dc32503fdf2..112f7592aca9 100644 --- a/arch/arm/mach-realview/realview_eb.c +++ b/arch/arm/mach-realview/realview_eb.c | |||
| @@ -23,6 +23,7 @@ | |||
| 23 | #include <linux/init.h> | 23 | #include <linux/init.h> |
| 24 | #include <linux/platform_device.h> | 24 | #include <linux/platform_device.h> |
| 25 | #include <linux/sysdev.h> | 25 | #include <linux/sysdev.h> |
| 26 | #include <linux/amba/bus.h> | ||
| 26 | 27 | ||
| 27 | #include <asm/hardware.h> | 28 | #include <asm/hardware.h> |
| 28 | #include <asm/io.h> | 29 | #include <asm/io.h> |
| @@ -30,7 +31,6 @@ | |||
| 30 | #include <asm/leds.h> | 31 | #include <asm/leds.h> |
| 31 | #include <asm/mach-types.h> | 32 | #include <asm/mach-types.h> |
| 32 | #include <asm/hardware/gic.h> | 33 | #include <asm/hardware/gic.h> |
| 33 | #include <asm/hardware/amba.h> | ||
| 34 | #include <asm/hardware/icst307.h> | 34 | #include <asm/hardware/icst307.h> |
| 35 | 35 | ||
| 36 | #include <asm/mach/arch.h> | 36 | #include <asm/mach/arch.h> |
diff --git a/arch/arm/mach-rpc/dma.c b/arch/arm/mach-rpc/dma.c index bc0747439fb3..bd86ffba8810 100644 --- a/arch/arm/mach-rpc/dma.c +++ b/arch/arm/mach-rpc/dma.c | |||
| @@ -13,7 +13,7 @@ | |||
| 13 | #include <linux/mman.h> | 13 | #include <linux/mman.h> |
| 14 | #include <linux/init.h> | 14 | #include <linux/init.h> |
| 15 | #include <linux/interrupt.h> | 15 | #include <linux/interrupt.h> |
| 16 | #include <linux/pci.h> | 16 | #include <linux/dma-mapping.h> |
| 17 | 17 | ||
| 18 | #include <asm/page.h> | 18 | #include <asm/page.h> |
| 19 | #include <asm/dma.h> | 19 | #include <asm/dma.h> |
| @@ -148,11 +148,14 @@ static void iomd_enable_dma(dmach_t channel, dma_t *dma) | |||
| 148 | * Cope with ISA-style drivers which expect cache | 148 | * Cope with ISA-style drivers which expect cache |
| 149 | * coherence. | 149 | * coherence. |
| 150 | */ | 150 | */ |
| 151 | if (!dma->using_sg) { | 151 | if (!dma->sg) { |
| 152 | dma->buf.dma_address = pci_map_single(NULL, | 152 | dma->sg = &dma->buf; |
| 153 | dma->buf.__address, dma->buf.length, | 153 | dma->sgcount = 1; |
| 154 | dma->buf.length = dma->count; | ||
| 155 | dma->buf.dma_address = dma_map_single(NULL, | ||
| 156 | dma->addr, dma->count, | ||
| 154 | dma->dma_mode == DMA_MODE_READ ? | 157 | dma->dma_mode == DMA_MODE_READ ? |
| 155 | PCI_DMA_FROMDEVICE : PCI_DMA_TODEVICE); | 158 | DMA_FROM_DEVICE : DMA_TO_DEVICE); |
| 156 | } | 159 | } |
| 157 | 160 | ||
| 158 | iomd_writeb(DMA_CR_C, dma_base + CR); | 161 | iomd_writeb(DMA_CR_C, dma_base + CR); |
| @@ -239,7 +242,7 @@ static void floppy_enable_dma(dmach_t channel, dma_t *dma) | |||
| 239 | unsigned int fiqhandler_length; | 242 | unsigned int fiqhandler_length; |
| 240 | struct pt_regs regs; | 243 | struct pt_regs regs; |
| 241 | 244 | ||
| 242 | if (dma->using_sg) | 245 | if (dma->sg) |
| 243 | BUG(); | 246 | BUG(); |
| 244 | 247 | ||
| 245 | if (dma->dma_mode == DMA_MODE_READ) { | 248 | if (dma->dma_mode == DMA_MODE_READ) { |
| @@ -252,8 +255,8 @@ static void floppy_enable_dma(dmach_t channel, dma_t *dma) | |||
| 252 | fiqhandler_length = &floppy_fiqout_end - &floppy_fiqout_start; | 255 | fiqhandler_length = &floppy_fiqout_end - &floppy_fiqout_start; |
| 253 | } | 256 | } |
| 254 | 257 | ||
| 255 | regs.ARM_r9 = dma->buf.length; | 258 | regs.ARM_r9 = dma->count; |
| 256 | regs.ARM_r10 = (unsigned long)dma->buf.__address; | 259 | regs.ARM_r10 = (unsigned long)dma->addr; |
| 257 | regs.ARM_fp = (unsigned long)FLOPPYDMA_BASE; | 260 | regs.ARM_fp = (unsigned long)FLOPPYDMA_BASE; |
| 258 | 261 | ||
| 259 | if (claim_fiq(&fh)) { | 262 | if (claim_fiq(&fh)) { |
diff --git a/arch/arm/mach-s3c2410/clock.c b/arch/arm/mach-s3c2410/clock.c index 82e8253b1fa0..5830ae3ddd19 100644 --- a/arch/arm/mach-s3c2410/clock.c +++ b/arch/arm/mach-s3c2410/clock.c | |||
| @@ -34,16 +34,15 @@ | |||
| 34 | #include <linux/err.h> | 34 | #include <linux/err.h> |
| 35 | #include <linux/platform_device.h> | 35 | #include <linux/platform_device.h> |
| 36 | #include <linux/sysdev.h> | 36 | #include <linux/sysdev.h> |
| 37 | |||
| 38 | #include <linux/interrupt.h> | 37 | #include <linux/interrupt.h> |
| 39 | #include <linux/ioport.h> | 38 | #include <linux/ioport.h> |
| 39 | #include <linux/clk.h> | ||
| 40 | 40 | ||
| 41 | #include <asm/hardware.h> | 41 | #include <asm/hardware.h> |
| 42 | #include <asm/atomic.h> | 42 | #include <asm/atomic.h> |
| 43 | #include <asm/irq.h> | 43 | #include <asm/irq.h> |
| 44 | #include <asm/io.h> | 44 | #include <asm/io.h> |
| 45 | 45 | ||
| 46 | #include <asm/hardware/clock.h> | ||
| 47 | #include <asm/arch/regs-clock.h> | 46 | #include <asm/arch/regs-clock.h> |
| 48 | 47 | ||
| 49 | #include "clock.h" | 48 | #include "clock.h" |
| @@ -151,18 +150,6 @@ void clk_disable(struct clk *clk) | |||
| 151 | } | 150 | } |
| 152 | 151 | ||
| 153 | 152 | ||
| 154 | int clk_use(struct clk *clk) | ||
| 155 | { | ||
| 156 | atomic_inc(&clk->used); | ||
| 157 | return 0; | ||
| 158 | } | ||
| 159 | |||
| 160 | |||
| 161 | void clk_unuse(struct clk *clk) | ||
| 162 | { | ||
| 163 | atomic_dec(&clk->used); | ||
| 164 | } | ||
| 165 | |||
| 166 | unsigned long clk_get_rate(struct clk *clk) | 153 | unsigned long clk_get_rate(struct clk *clk) |
| 167 | { | 154 | { |
| 168 | if (IS_ERR(clk)) | 155 | if (IS_ERR(clk)) |
| @@ -196,8 +183,6 @@ EXPORT_SYMBOL(clk_get); | |||
| 196 | EXPORT_SYMBOL(clk_put); | 183 | EXPORT_SYMBOL(clk_put); |
| 197 | EXPORT_SYMBOL(clk_enable); | 184 | EXPORT_SYMBOL(clk_enable); |
| 198 | EXPORT_SYMBOL(clk_disable); | 185 | EXPORT_SYMBOL(clk_disable); |
| 199 | EXPORT_SYMBOL(clk_use); | ||
| 200 | EXPORT_SYMBOL(clk_unuse); | ||
| 201 | EXPORT_SYMBOL(clk_get_rate); | 186 | EXPORT_SYMBOL(clk_get_rate); |
| 202 | EXPORT_SYMBOL(clk_round_rate); | 187 | EXPORT_SYMBOL(clk_round_rate); |
| 203 | EXPORT_SYMBOL(clk_set_rate); | 188 | EXPORT_SYMBOL(clk_set_rate); |
| @@ -370,7 +355,6 @@ static struct clk init_clocks[] = { | |||
| 370 | int s3c24xx_register_clock(struct clk *clk) | 355 | int s3c24xx_register_clock(struct clk *clk) |
| 371 | { | 356 | { |
| 372 | clk->owner = THIS_MODULE; | 357 | clk->owner = THIS_MODULE; |
| 373 | atomic_set(&clk->used, 0); | ||
| 374 | 358 | ||
| 375 | if (clk->enable == NULL) | 359 | if (clk->enable == NULL) |
| 376 | clk->enable = clk_null_enable; | 360 | clk->enable = clk_null_enable; |
diff --git a/arch/arm/mach-s3c2410/clock.h b/arch/arm/mach-s3c2410/clock.h index 7953b6f397b9..177d5c8decf7 100644 --- a/arch/arm/mach-s3c2410/clock.h +++ b/arch/arm/mach-s3c2410/clock.h | |||
| @@ -16,7 +16,6 @@ struct clk { | |||
| 16 | struct clk *parent; | 16 | struct clk *parent; |
| 17 | const char *name; | 17 | const char *name; |
| 18 | int id; | 18 | int id; |
| 19 | atomic_t used; | ||
| 20 | unsigned long rate; | 19 | unsigned long rate; |
| 21 | unsigned long ctrlbit; | 20 | unsigned long ctrlbit; |
| 22 | int (*enable)(struct clk *, int enable); | 21 | int (*enable)(struct clk *, int enable); |
diff --git a/arch/arm/mach-s3c2410/s3c2440-clock.c b/arch/arm/mach-s3c2410/s3c2440-clock.c index c67e0979aec3..b557a2be8a01 100644 --- a/arch/arm/mach-s3c2410/s3c2440-clock.c +++ b/arch/arm/mach-s3c2410/s3c2440-clock.c | |||
| @@ -29,16 +29,15 @@ | |||
| 29 | #include <linux/err.h> | 29 | #include <linux/err.h> |
| 30 | #include <linux/device.h> | 30 | #include <linux/device.h> |
| 31 | #include <linux/sysdev.h> | 31 | #include <linux/sysdev.h> |
| 32 | |||
| 33 | #include <linux/interrupt.h> | 32 | #include <linux/interrupt.h> |
| 34 | #include <linux/ioport.h> | 33 | #include <linux/ioport.h> |
| 34 | #include <linux/clk.h> | ||
| 35 | 35 | ||
| 36 | #include <asm/hardware.h> | 36 | #include <asm/hardware.h> |
| 37 | #include <asm/atomic.h> | 37 | #include <asm/atomic.h> |
| 38 | #include <asm/irq.h> | 38 | #include <asm/irq.h> |
| 39 | #include <asm/io.h> | 39 | #include <asm/io.h> |
| 40 | 40 | ||
| 41 | #include <asm/hardware/clock.h> | ||
| 42 | #include <asm/arch/regs-clock.h> | 41 | #include <asm/arch/regs-clock.h> |
| 43 | 42 | ||
| 44 | #include "clock.h" | 43 | #include "clock.h" |
diff --git a/arch/arm/mach-s3c2410/s3c2440.c b/arch/arm/mach-s3c2410/s3c2440.c index 4d63e7133b48..b7fe6d9453fb 100644 --- a/arch/arm/mach-s3c2410/s3c2440.c +++ b/arch/arm/mach-s3c2410/s3c2440.c | |||
| @@ -28,6 +28,7 @@ | |||
| 28 | #include <linux/init.h> | 28 | #include <linux/init.h> |
| 29 | #include <linux/platform_device.h> | 29 | #include <linux/platform_device.h> |
| 30 | #include <linux/sysdev.h> | 30 | #include <linux/sysdev.h> |
| 31 | #include <linux/clk.h> | ||
| 31 | 32 | ||
| 32 | #include <asm/mach/arch.h> | 33 | #include <asm/mach/arch.h> |
| 33 | #include <asm/mach/map.h> | 34 | #include <asm/mach/map.h> |
| @@ -36,7 +37,6 @@ | |||
| 36 | #include <asm/hardware.h> | 37 | #include <asm/hardware.h> |
| 37 | #include <asm/io.h> | 38 | #include <asm/io.h> |
| 38 | #include <asm/irq.h> | 39 | #include <asm/irq.h> |
| 39 | #include <asm/hardware/clock.h> | ||
| 40 | 40 | ||
| 41 | #include <asm/arch/regs-clock.h> | 41 | #include <asm/arch/regs-clock.h> |
| 42 | #include <asm/arch/regs-serial.h> | 42 | #include <asm/arch/regs-serial.h> |
diff --git a/arch/arm/mach-s3c2410/time.c b/arch/arm/mach-s3c2410/time.c index 8a00e3c3cd08..10a2976aefdd 100644 --- a/arch/arm/mach-s3c2410/time.c +++ b/arch/arm/mach-s3c2410/time.c | |||
| @@ -24,6 +24,7 @@ | |||
| 24 | #include <linux/init.h> | 24 | #include <linux/init.h> |
| 25 | #include <linux/interrupt.h> | 25 | #include <linux/interrupt.h> |
| 26 | #include <linux/err.h> | 26 | #include <linux/err.h> |
| 27 | #include <linux/clk.h> | ||
| 27 | 28 | ||
| 28 | #include <asm/system.h> | 29 | #include <asm/system.h> |
| 29 | #include <asm/leds.h> | 30 | #include <asm/leds.h> |
| @@ -35,7 +36,6 @@ | |||
| 35 | #include <asm/arch/regs-timer.h> | 36 | #include <asm/arch/regs-timer.h> |
| 36 | #include <asm/arch/regs-irq.h> | 37 | #include <asm/arch/regs-irq.h> |
| 37 | #include <asm/mach/time.h> | 38 | #include <asm/mach/time.h> |
| 38 | #include <asm/hardware/clock.h> | ||
| 39 | 39 | ||
| 40 | #include "clock.h" | 40 | #include "clock.h" |
| 41 | #include "cpu.h" | 41 | #include "cpu.h" |
| @@ -191,7 +191,6 @@ static void s3c2410_timer_setup (void) | |||
| 191 | if (IS_ERR(clk)) | 191 | if (IS_ERR(clk)) |
| 192 | panic("failed to get clock for system timer"); | 192 | panic("failed to get clock for system timer"); |
| 193 | 193 | ||
| 194 | clk_use(clk); | ||
| 195 | clk_enable(clk); | 194 | clk_enable(clk); |
| 196 | 195 | ||
| 197 | pclk = clk_get_rate(clk); | 196 | pclk = clk_get_rate(clk); |
diff --git a/arch/arm/mach-sa1100/pm.c b/arch/arm/mach-sa1100/pm.c index 59c7964cfe11..786c8534231f 100644 --- a/arch/arm/mach-sa1100/pm.c +++ b/arch/arm/mach-sa1100/pm.c | |||
| @@ -135,29 +135,11 @@ unsigned long sleep_phys_sp(void *sp) | |||
| 135 | } | 135 | } |
| 136 | 136 | ||
| 137 | /* | 137 | /* |
| 138 | * Called after processes are frozen, but before we shut down devices. | ||
| 139 | */ | ||
| 140 | static int sa11x0_pm_prepare(suspend_state_t state) | ||
| 141 | { | ||
| 142 | return 0; | ||
| 143 | } | ||
| 144 | |||
| 145 | /* | ||
| 146 | * Called after devices are re-setup, but before processes are thawed. | ||
| 147 | */ | ||
| 148 | static int sa11x0_pm_finish(suspend_state_t state) | ||
| 149 | { | ||
| 150 | return 0; | ||
| 151 | } | ||
| 152 | |||
| 153 | /* | ||
| 154 | * Set to PM_DISK_FIRMWARE so we can quickly veto suspend-to-disk. | 138 | * Set to PM_DISK_FIRMWARE so we can quickly veto suspend-to-disk. |
| 155 | */ | 139 | */ |
| 156 | static struct pm_ops sa11x0_pm_ops = { | 140 | static struct pm_ops sa11x0_pm_ops = { |
| 157 | .pm_disk_mode = PM_DISK_FIRMWARE, | 141 | .pm_disk_mode = PM_DISK_FIRMWARE, |
| 158 | .prepare = sa11x0_pm_prepare, | ||
| 159 | .enter = sa11x0_pm_enter, | 142 | .enter = sa11x0_pm_enter, |
| 160 | .finish = sa11x0_pm_finish, | ||
| 161 | }; | 143 | }; |
| 162 | 144 | ||
| 163 | static int __init sa11x0_pm_init(void) | 145 | static int __init sa11x0_pm_init(void) |
diff --git a/arch/arm/mach-versatile/clock.c b/arch/arm/mach-versatile/clock.c index b96a2ea15d41..dcf10014f5cd 100644 --- a/arch/arm/mach-versatile/clock.c +++ b/arch/arm/mach-versatile/clock.c | |||
| @@ -14,9 +14,9 @@ | |||
| 14 | #include <linux/errno.h> | 14 | #include <linux/errno.h> |
| 15 | #include <linux/err.h> | 15 | #include <linux/err.h> |
| 16 | #include <linux/string.h> | 16 | #include <linux/string.h> |
| 17 | #include <linux/clk.h> | ||
| 17 | 18 | ||
| 18 | #include <asm/semaphore.h> | 19 | #include <asm/semaphore.h> |
| 19 | #include <asm/hardware/clock.h> | ||
| 20 | #include <asm/hardware/icst307.h> | 20 | #include <asm/hardware/icst307.h> |
| 21 | 21 | ||
| 22 | #include "clock.h" | 22 | #include "clock.h" |
| @@ -58,17 +58,6 @@ void clk_disable(struct clk *clk) | |||
| 58 | } | 58 | } |
| 59 | EXPORT_SYMBOL(clk_disable); | 59 | EXPORT_SYMBOL(clk_disable); |
| 60 | 60 | ||
| 61 | int clk_use(struct clk *clk) | ||
| 62 | { | ||
| 63 | return 0; | ||
| 64 | } | ||
| 65 | EXPORT_SYMBOL(clk_use); | ||
| 66 | |||
| 67 | void clk_unuse(struct clk *clk) | ||
| 68 | { | ||
| 69 | } | ||
| 70 | EXPORT_SYMBOL(clk_unuse); | ||
| 71 | |||
| 72 | unsigned long clk_get_rate(struct clk *clk) | 61 | unsigned long clk_get_rate(struct clk *clk) |
| 73 | { | 62 | { |
| 74 | return clk->rate; | 63 | return clk->rate; |
diff --git a/arch/arm/mach-versatile/core.c b/arch/arm/mach-versatile/core.c index a1ca46630dda..90023745b23a 100644 --- a/arch/arm/mach-versatile/core.c +++ b/arch/arm/mach-versatile/core.c | |||
| @@ -25,14 +25,14 @@ | |||
| 25 | #include <linux/platform_device.h> | 25 | #include <linux/platform_device.h> |
| 26 | #include <linux/sysdev.h> | 26 | #include <linux/sysdev.h> |
| 27 | #include <linux/interrupt.h> | 27 | #include <linux/interrupt.h> |
| 28 | #include <linux/amba/bus.h> | ||
| 29 | #include <linux/amba/clcd.h> | ||
| 28 | 30 | ||
| 29 | #include <asm/system.h> | 31 | #include <asm/system.h> |
| 30 | #include <asm/hardware.h> | 32 | #include <asm/hardware.h> |
| 31 | #include <asm/io.h> | 33 | #include <asm/io.h> |
| 32 | #include <asm/irq.h> | 34 | #include <asm/irq.h> |
| 33 | #include <asm/leds.h> | 35 | #include <asm/leds.h> |
| 34 | #include <asm/hardware/amba.h> | ||
| 35 | #include <asm/hardware/amba_clcd.h> | ||
| 36 | #include <asm/hardware/arm_timer.h> | 36 | #include <asm/hardware/arm_timer.h> |
| 37 | #include <asm/hardware/icst307.h> | 37 | #include <asm/hardware/icst307.h> |
| 38 | 38 | ||
diff --git a/arch/arm/mach-versatile/core.h b/arch/arm/mach-versatile/core.h index 588c20669d5d..afcaa858eb1f 100644 --- a/arch/arm/mach-versatile/core.h +++ b/arch/arm/mach-versatile/core.h | |||
| @@ -22,7 +22,7 @@ | |||
| 22 | #ifndef __ASM_ARCH_VERSATILE_H | 22 | #ifndef __ASM_ARCH_VERSATILE_H |
| 23 | #define __ASM_ARCH_VERSATILE_H | 23 | #define __ASM_ARCH_VERSATILE_H |
| 24 | 24 | ||
| 25 | #include <asm/hardware/amba.h> | 25 | #include <linux/amba/bus.h> |
| 26 | 26 | ||
| 27 | extern void __init versatile_init(void); | 27 | extern void __init versatile_init(void); |
| 28 | extern void __init versatile_init_irq(void); | 28 | extern void __init versatile_init_irq(void); |
diff --git a/arch/arm/mach-versatile/versatile_ab.c b/arch/arm/mach-versatile/versatile_ab.c index 8b0b3bef24ae..e74c8a2fbb95 100644 --- a/arch/arm/mach-versatile/versatile_ab.c +++ b/arch/arm/mach-versatile/versatile_ab.c | |||
| @@ -23,12 +23,12 @@ | |||
| 23 | #include <linux/init.h> | 23 | #include <linux/init.h> |
| 24 | #include <linux/device.h> | 24 | #include <linux/device.h> |
| 25 | #include <linux/sysdev.h> | 25 | #include <linux/sysdev.h> |
| 26 | #include <linux/amba/bus.h> | ||
| 26 | 27 | ||
| 27 | #include <asm/hardware.h> | 28 | #include <asm/hardware.h> |
| 28 | #include <asm/io.h> | 29 | #include <asm/io.h> |
| 29 | #include <asm/irq.h> | 30 | #include <asm/irq.h> |
| 30 | #include <asm/mach-types.h> | 31 | #include <asm/mach-types.h> |
| 31 | #include <asm/hardware/amba.h> | ||
| 32 | 32 | ||
| 33 | #include <asm/mach/arch.h> | 33 | #include <asm/mach/arch.h> |
| 34 | 34 | ||
diff --git a/arch/arm/mach-versatile/versatile_pb.c b/arch/arm/mach-versatile/versatile_pb.c index 7c3078c38916..22d5ca07f75d 100644 --- a/arch/arm/mach-versatile/versatile_pb.c +++ b/arch/arm/mach-versatile/versatile_pb.c | |||
| @@ -23,12 +23,12 @@ | |||
| 23 | #include <linux/init.h> | 23 | #include <linux/init.h> |
| 24 | #include <linux/device.h> | 24 | #include <linux/device.h> |
| 25 | #include <linux/sysdev.h> | 25 | #include <linux/sysdev.h> |
| 26 | #include <linux/amba/bus.h> | ||
| 26 | 27 | ||
| 27 | #include <asm/hardware.h> | 28 | #include <asm/hardware.h> |
| 28 | #include <asm/io.h> | 29 | #include <asm/io.h> |
| 29 | #include <asm/irq.h> | 30 | #include <asm/irq.h> |
| 30 | #include <asm/mach-types.h> | 31 | #include <asm/mach-types.h> |
| 31 | #include <asm/hardware/amba.h> | ||
| 32 | 32 | ||
| 33 | #include <asm/mach/arch.h> | 33 | #include <asm/mach/arch.h> |
| 34 | #include <asm/mach/mmc.h> | 34 | #include <asm/mach/mmc.h> |
diff --git a/arch/arm/mm/consistent.c b/arch/arm/mm/consistent.c index dbfe9e891f01..0513ed1b2fcf 100644 --- a/arch/arm/mm/consistent.c +++ b/arch/arm/mm/consistent.c | |||
| @@ -19,7 +19,6 @@ | |||
| 19 | #include <linux/dma-mapping.h> | 19 | #include <linux/dma-mapping.h> |
| 20 | 20 | ||
| 21 | #include <asm/cacheflush.h> | 21 | #include <asm/cacheflush.h> |
| 22 | #include <asm/io.h> | ||
| 23 | #include <asm/tlbflush.h> | 22 | #include <asm/tlbflush.h> |
| 24 | 23 | ||
| 25 | #define CONSISTENT_BASE (0xffc00000) | 24 | #define CONSISTENT_BASE (0xffc00000) |
diff --git a/arch/arm/mm/discontig.c b/arch/arm/mm/discontig.c index 0d097bb1bc4d..1e5602189507 100644 --- a/arch/arm/mm/discontig.c +++ b/arch/arm/mm/discontig.c | |||
| @@ -9,10 +9,8 @@ | |||
| 9 | * it under the terms of the GNU General Public License version 2 as | 9 | * it under the terms of the GNU General Public License version 2 as |
| 10 | * published by the Free Software Foundation. | 10 | * published by the Free Software Foundation. |
| 11 | */ | 11 | */ |
| 12 | |||
| 13 | #include <linux/module.h> | 12 | #include <linux/module.h> |
| 14 | #include <linux/mm.h> | 13 | #include <linux/mmzone.h> |
| 15 | #include <linux/init.h> | ||
| 16 | #include <linux/bootmem.h> | 14 | #include <linux/bootmem.h> |
| 17 | 15 | ||
| 18 | #if MAX_NUMNODES != 4 && MAX_NUMNODES != 16 | 16 | #if MAX_NUMNODES != 4 && MAX_NUMNODES != 16 |
diff --git a/arch/arm/mm/mm-armv.c b/arch/arm/mm/mm-armv.c index 9e50127be635..d0245a31d4dd 100644 --- a/arch/arm/mm/mm-armv.c +++ b/arch/arm/mm/mm-armv.c | |||
| @@ -19,7 +19,6 @@ | |||
| 19 | 19 | ||
| 20 | #include <asm/pgalloc.h> | 20 | #include <asm/pgalloc.h> |
| 21 | #include <asm/page.h> | 21 | #include <asm/page.h> |
| 22 | #include <asm/io.h> | ||
| 23 | #include <asm/setup.h> | 22 | #include <asm/setup.h> |
| 24 | #include <asm/tlbflush.h> | 23 | #include <asm/tlbflush.h> |
| 25 | 24 | ||
diff --git a/arch/arm/plat-omap/clock.c b/arch/arm/plat-omap/clock.c index 7ce39b986e23..84fd65656fcf 100644 --- a/arch/arm/plat-omap/clock.c +++ b/arch/arm/plat-omap/clock.c | |||
| @@ -19,10 +19,10 @@ | |||
| 19 | #include <linux/errno.h> | 19 | #include <linux/errno.h> |
| 20 | #include <linux/err.h> | 20 | #include <linux/err.h> |
| 21 | #include <linux/string.h> | 21 | #include <linux/string.h> |
| 22 | #include <linux/clk.h> | ||
| 22 | 23 | ||
| 23 | #include <asm/io.h> | 24 | #include <asm/io.h> |
| 24 | #include <asm/semaphore.h> | 25 | #include <asm/semaphore.h> |
| 25 | #include <asm/hardware/clock.h> | ||
| 26 | 26 | ||
| 27 | #include <asm/arch/clock.h> | 27 | #include <asm/arch/clock.h> |
| 28 | 28 | ||
diff --git a/arch/arm/plat-omap/common.c b/arch/arm/plat-omap/common.c index ccdb452630cf..adffc5a859ee 100644 --- a/arch/arm/plat-omap/common.c +++ b/arch/arm/plat-omap/common.c | |||
| @@ -18,12 +18,12 @@ | |||
| 18 | #include <linux/tty.h> | 18 | #include <linux/tty.h> |
| 19 | #include <linux/serial_8250.h> | 19 | #include <linux/serial_8250.h> |
| 20 | #include <linux/serial_reg.h> | 20 | #include <linux/serial_reg.h> |
| 21 | #include <linux/clk.h> | ||
| 21 | 22 | ||
| 22 | #include <asm/hardware.h> | 23 | #include <asm/hardware.h> |
| 23 | #include <asm/system.h> | 24 | #include <asm/system.h> |
| 24 | #include <asm/pgtable.h> | 25 | #include <asm/pgtable.h> |
| 25 | #include <asm/mach/map.h> | 26 | #include <asm/mach/map.h> |
| 26 | #include <asm/hardware/clock.h> | ||
| 27 | #include <asm/io.h> | 27 | #include <asm/io.h> |
| 28 | #include <asm/setup.h> | 28 | #include <asm/setup.h> |
| 29 | 29 | ||
diff --git a/arch/arm/plat-omap/cpu-omap.c b/arch/arm/plat-omap/cpu-omap.c index fd894bb00107..98edc9fdd6d1 100644 --- a/arch/arm/plat-omap/cpu-omap.c +++ b/arch/arm/plat-omap/cpu-omap.c | |||
| @@ -19,13 +19,12 @@ | |||
| 19 | #include <linux/delay.h> | 19 | #include <linux/delay.h> |
| 20 | #include <linux/init.h> | 20 | #include <linux/init.h> |
| 21 | #include <linux/err.h> | 21 | #include <linux/err.h> |
| 22 | #include <linux/clk.h> | ||
| 22 | 23 | ||
| 23 | #include <asm/hardware.h> | 24 | #include <asm/hardware.h> |
| 24 | #include <asm/io.h> | 25 | #include <asm/io.h> |
| 25 | #include <asm/system.h> | 26 | #include <asm/system.h> |
| 26 | 27 | ||
| 27 | #include <asm/hardware/clock.h> | ||
| 28 | |||
| 29 | /* TODO: Add support for SDRAM timing changes */ | 28 | /* TODO: Add support for SDRAM timing changes */ |
| 30 | 29 | ||
| 31 | int omap_verify_speed(struct cpufreq_policy *policy) | 30 | int omap_verify_speed(struct cpufreq_policy *policy) |
diff --git a/arch/arm/plat-omap/gpio.c b/arch/arm/plat-omap/gpio.c index 76f721d85137..ca3681a824ac 100644 --- a/arch/arm/plat-omap/gpio.c +++ b/arch/arm/plat-omap/gpio.c | |||
| @@ -19,9 +19,9 @@ | |||
| 19 | #include <linux/ptrace.h> | 19 | #include <linux/ptrace.h> |
| 20 | #include <linux/sysdev.h> | 20 | #include <linux/sysdev.h> |
| 21 | #include <linux/err.h> | 21 | #include <linux/err.h> |
| 22 | #include <linux/clk.h> | ||
| 22 | 23 | ||
| 23 | #include <asm/hardware.h> | 24 | #include <asm/hardware.h> |
| 24 | #include <asm/hardware/clock.h> | ||
| 25 | #include <asm/irq.h> | 25 | #include <asm/irq.h> |
| 26 | #include <asm/arch/irqs.h> | 26 | #include <asm/arch/irqs.h> |
| 27 | #include <asm/arch/gpio.h> | 27 | #include <asm/arch/gpio.h> |
diff --git a/arch/arm/plat-omap/mcbsp.c b/arch/arm/plat-omap/mcbsp.c index ea9475c86656..be0e0f32a598 100644 --- a/arch/arm/plat-omap/mcbsp.c +++ b/arch/arm/plat-omap/mcbsp.c | |||
| @@ -19,6 +19,7 @@ | |||
| 19 | #include <linux/completion.h> | 19 | #include <linux/completion.h> |
| 20 | #include <linux/interrupt.h> | 20 | #include <linux/interrupt.h> |
| 21 | #include <linux/err.h> | 21 | #include <linux/err.h> |
| 22 | #include <linux/clk.h> | ||
| 22 | 23 | ||
| 23 | #include <asm/delay.h> | 24 | #include <asm/delay.h> |
| 24 | #include <asm/io.h> | 25 | #include <asm/io.h> |
| @@ -30,8 +31,6 @@ | |||
| 30 | #include <asm/arch/dsp_common.h> | 31 | #include <asm/arch/dsp_common.h> |
| 31 | #include <asm/arch/mcbsp.h> | 32 | #include <asm/arch/mcbsp.h> |
| 32 | 33 | ||
| 33 | #include <asm/hardware/clock.h> | ||
| 34 | |||
| 35 | #ifdef CONFIG_MCBSP_DEBUG | 34 | #ifdef CONFIG_MCBSP_DEBUG |
| 36 | #define DBG(x...) printk(x) | 35 | #define DBG(x...) printk(x) |
| 37 | #else | 36 | #else |
diff --git a/arch/arm/plat-omap/ocpi.c b/arch/arm/plat-omap/ocpi.c index b86148227480..e40fcc8b43d4 100644 --- a/arch/arm/plat-omap/ocpi.c +++ b/arch/arm/plat-omap/ocpi.c | |||
| @@ -31,9 +31,9 @@ | |||
| 31 | #include <linux/init.h> | 31 | #include <linux/init.h> |
| 32 | #include <linux/spinlock.h> | 32 | #include <linux/spinlock.h> |
| 33 | #include <linux/err.h> | 33 | #include <linux/err.h> |
| 34 | #include <linux/clk.h> | ||
| 34 | 35 | ||
| 35 | #include <asm/io.h> | 36 | #include <asm/io.h> |
| 36 | #include <asm/hardware/clock.h> | ||
| 37 | #include <asm/hardware.h> | 37 | #include <asm/hardware.h> |
| 38 | 38 | ||
| 39 | #define OCPI_BASE 0xfffec320 | 39 | #define OCPI_BASE 0xfffec320 |
diff --git a/drivers/Makefile b/drivers/Makefile index ea410b6b7644..7fc3f0f08b29 100644 --- a/drivers/Makefile +++ b/drivers/Makefile | |||
| @@ -13,6 +13,7 @@ obj-$(CONFIG_ACPI) += acpi/ | |||
| 13 | # PnP must come after ACPI since it will eventually need to check if acpi | 13 | # PnP must come after ACPI since it will eventually need to check if acpi |
| 14 | # was used and do nothing if so | 14 | # was used and do nothing if so |
| 15 | obj-$(CONFIG_PNP) += pnp/ | 15 | obj-$(CONFIG_PNP) += pnp/ |
| 16 | obj-$(CONFIG_ARM_AMBA) += amba/ | ||
| 16 | 17 | ||
| 17 | # char/ comes before serial/ etc so that the VT console is the boot-time | 18 | # char/ comes before serial/ etc so that the VT console is the boot-time |
| 18 | # default. | 19 | # default. |
diff --git a/drivers/amba/Makefile b/drivers/amba/Makefile new file mode 100644 index 000000000000..40fe74097be2 --- /dev/null +++ b/drivers/amba/Makefile | |||
| @@ -0,0 +1,2 @@ | |||
| 1 | obj-y += bus.o | ||
| 2 | |||
diff --git a/arch/arm/common/amba.c b/drivers/amba/bus.c index c95ec9eab996..1bbdd1693d57 100644 --- a/arch/arm/common/amba.c +++ b/drivers/amba/bus.c | |||
| @@ -12,10 +12,10 @@ | |||
| 12 | #include <linux/device.h> | 12 | #include <linux/device.h> |
| 13 | #include <linux/string.h> | 13 | #include <linux/string.h> |
| 14 | #include <linux/slab.h> | 14 | #include <linux/slab.h> |
| 15 | #include <linux/amba/bus.h> | ||
| 15 | 16 | ||
| 16 | #include <asm/io.h> | 17 | #include <asm/io.h> |
| 17 | #include <asm/irq.h> | 18 | #include <asm/irq.h> |
| 18 | #include <asm/hardware/amba.h> | ||
| 19 | #include <asm/sizes.h> | 19 | #include <asm/sizes.h> |
| 20 | 20 | ||
| 21 | #define to_amba_device(d) container_of(d, struct amba_device, dev) | 21 | #define to_amba_device(d) container_of(d, struct amba_device, dev) |
diff --git a/drivers/char/s3c2410-rtc.c b/drivers/char/s3c2410-rtc.c index 3df7a574267b..2e308657f6f6 100644 --- a/drivers/char/s3c2410-rtc.c +++ b/drivers/char/s3c2410-rtc.c | |||
| @@ -24,6 +24,7 @@ | |||
| 24 | #include <linux/interrupt.h> | 24 | #include <linux/interrupt.h> |
| 25 | #include <linux/rtc.h> | 25 | #include <linux/rtc.h> |
| 26 | #include <linux/bcd.h> | 26 | #include <linux/bcd.h> |
| 27 | #include <linux/clk.h> | ||
| 27 | 28 | ||
| 28 | #include <asm/hardware.h> | 29 | #include <asm/hardware.h> |
| 29 | #include <asm/uaccess.h> | 30 | #include <asm/uaccess.h> |
| @@ -33,7 +34,6 @@ | |||
| 33 | 34 | ||
| 34 | #include <asm/mach/time.h> | 35 | #include <asm/mach/time.h> |
| 35 | 36 | ||
| 36 | #include <asm/hardware/clock.h> | ||
| 37 | #include <asm/arch/regs-rtc.h> | 37 | #include <asm/arch/regs-rtc.h> |
| 38 | 38 | ||
| 39 | /* need this for the RTC_AF definitions */ | 39 | /* need this for the RTC_AF definitions */ |
diff --git a/drivers/char/watchdog/s3c2410_wdt.c b/drivers/char/watchdog/s3c2410_wdt.c index eb667daee19b..9dc54736e4eb 100644 --- a/drivers/char/watchdog/s3c2410_wdt.c +++ b/drivers/char/watchdog/s3c2410_wdt.c | |||
| @@ -46,12 +46,12 @@ | |||
| 46 | #include <linux/init.h> | 46 | #include <linux/init.h> |
| 47 | #include <linux/platform_device.h> | 47 | #include <linux/platform_device.h> |
| 48 | #include <linux/interrupt.h> | 48 | #include <linux/interrupt.h> |
| 49 | #include <linux/clk.h> | ||
| 49 | 50 | ||
| 50 | #include <asm/uaccess.h> | 51 | #include <asm/uaccess.h> |
| 51 | #include <asm/io.h> | 52 | #include <asm/io.h> |
| 52 | 53 | ||
| 53 | #include <asm/arch/map.h> | 54 | #include <asm/arch/map.h> |
| 54 | #include <asm/hardware/clock.h> | ||
| 55 | 55 | ||
| 56 | #undef S3C24XX_VA_WATCHDOG | 56 | #undef S3C24XX_VA_WATCHDOG |
| 57 | #define S3C24XX_VA_WATCHDOG (0) | 57 | #define S3C24XX_VA_WATCHDOG (0) |
| @@ -397,7 +397,6 @@ static int s3c2410wdt_probe(struct platform_device *pdev) | |||
| 397 | return -ENOENT; | 397 | return -ENOENT; |
| 398 | } | 398 | } |
| 399 | 399 | ||
| 400 | clk_use(wdt_clock); | ||
| 401 | clk_enable(wdt_clock); | 400 | clk_enable(wdt_clock); |
| 402 | 401 | ||
| 403 | /* see if we can actually set the requested timer margin, and if | 402 | /* see if we can actually set the requested timer margin, and if |
| @@ -444,7 +443,6 @@ static int s3c2410wdt_remove(struct platform_device *dev) | |||
| 444 | 443 | ||
| 445 | if (wdt_clock != NULL) { | 444 | if (wdt_clock != NULL) { |
| 446 | clk_disable(wdt_clock); | 445 | clk_disable(wdt_clock); |
| 447 | clk_unuse(wdt_clock); | ||
| 448 | clk_put(wdt_clock); | 446 | clk_put(wdt_clock); |
| 449 | wdt_clock = NULL; | 447 | wdt_clock = NULL; |
| 450 | } | 448 | } |
diff --git a/drivers/i2c/busses/i2c-s3c2410.c b/drivers/i2c/busses/i2c-s3c2410.c index 58cfd3111ef6..f7d40f8e5f5c 100644 --- a/drivers/i2c/busses/i2c-s3c2410.c +++ b/drivers/i2c/busses/i2c-s3c2410.c | |||
| @@ -34,12 +34,12 @@ | |||
| 34 | #include <linux/errno.h> | 34 | #include <linux/errno.h> |
| 35 | #include <linux/err.h> | 35 | #include <linux/err.h> |
| 36 | #include <linux/platform_device.h> | 36 | #include <linux/platform_device.h> |
| 37 | #include <linux/clk.h> | ||
| 37 | 38 | ||
| 38 | #include <asm/hardware.h> | 39 | #include <asm/hardware.h> |
| 39 | #include <asm/irq.h> | 40 | #include <asm/irq.h> |
| 40 | #include <asm/io.h> | 41 | #include <asm/io.h> |
| 41 | 42 | ||
| 42 | #include <asm/hardware/clock.h> | ||
| 43 | #include <asm/arch/regs-gpio.h> | 43 | #include <asm/arch/regs-gpio.h> |
| 44 | #include <asm/arch/regs-iic.h> | 44 | #include <asm/arch/regs-iic.h> |
| 45 | #include <asm/arch/iic.h> | 45 | #include <asm/arch/iic.h> |
| @@ -738,7 +738,6 @@ static void s3c24xx_i2c_free(struct s3c24xx_i2c *i2c) | |||
| 738 | { | 738 | { |
| 739 | if (i2c->clk != NULL && !IS_ERR(i2c->clk)) { | 739 | if (i2c->clk != NULL && !IS_ERR(i2c->clk)) { |
| 740 | clk_disable(i2c->clk); | 740 | clk_disable(i2c->clk); |
| 741 | clk_unuse(i2c->clk); | ||
| 742 | clk_put(i2c->clk); | 741 | clk_put(i2c->clk); |
| 743 | i2c->clk = NULL; | 742 | i2c->clk = NULL; |
| 744 | } | 743 | } |
| @@ -778,7 +777,6 @@ static int s3c24xx_i2c_probe(struct platform_device *pdev) | |||
| 778 | 777 | ||
| 779 | dev_dbg(&pdev->dev, "clock source %p\n", i2c->clk); | 778 | dev_dbg(&pdev->dev, "clock source %p\n", i2c->clk); |
| 780 | 779 | ||
| 781 | clk_use(i2c->clk); | ||
| 782 | clk_enable(i2c->clk); | 780 | clk_enable(i2c->clk); |
| 783 | 781 | ||
| 784 | /* map the registers */ | 782 | /* map the registers */ |
diff --git a/drivers/input/serio/ambakmi.c b/drivers/input/serio/ambakmi.c index 9b1ab5e7a98d..3df5eedf8f31 100644 --- a/drivers/input/serio/ambakmi.c +++ b/drivers/input/serio/ambakmi.c | |||
| @@ -19,12 +19,12 @@ | |||
| 19 | #include <linux/delay.h> | 19 | #include <linux/delay.h> |
| 20 | #include <linux/slab.h> | 20 | #include <linux/slab.h> |
| 21 | #include <linux/err.h> | 21 | #include <linux/err.h> |
| 22 | #include <linux/amba/bus.h> | ||
| 23 | #include <linux/amba/kmi.h> | ||
| 24 | #include <linux/clk.h> | ||
| 22 | 25 | ||
| 23 | #include <asm/io.h> | 26 | #include <asm/io.h> |
| 24 | #include <asm/irq.h> | 27 | #include <asm/irq.h> |
| 25 | #include <asm/hardware/amba.h> | ||
| 26 | #include <asm/hardware/amba_kmi.h> | ||
| 27 | #include <asm/hardware/clock.h> | ||
| 28 | 28 | ||
| 29 | #define KMI_BASE (kmi->base) | 29 | #define KMI_BASE (kmi->base) |
| 30 | 30 | ||
| @@ -72,13 +72,9 @@ static int amba_kmi_open(struct serio *io) | |||
| 72 | unsigned int divisor; | 72 | unsigned int divisor; |
| 73 | int ret; | 73 | int ret; |
| 74 | 74 | ||
| 75 | ret = clk_use(kmi->clk); | ||
| 76 | if (ret) | ||
| 77 | goto out; | ||
| 78 | |||
| 79 | ret = clk_enable(kmi->clk); | 75 | ret = clk_enable(kmi->clk); |
| 80 | if (ret) | 76 | if (ret) |
| 81 | goto clk_unuse; | 77 | goto out; |
| 82 | 78 | ||
| 83 | divisor = clk_get_rate(kmi->clk) / 8000000 - 1; | 79 | divisor = clk_get_rate(kmi->clk) / 8000000 - 1; |
| 84 | writeb(divisor, KMICLKDIV); | 80 | writeb(divisor, KMICLKDIV); |
| @@ -97,8 +93,6 @@ static int amba_kmi_open(struct serio *io) | |||
| 97 | 93 | ||
| 98 | clk_disable: | 94 | clk_disable: |
| 99 | clk_disable(kmi->clk); | 95 | clk_disable(kmi->clk); |
| 100 | clk_unuse: | ||
| 101 | clk_unuse(kmi->clk); | ||
| 102 | out: | 96 | out: |
| 103 | return ret; | 97 | return ret; |
| 104 | } | 98 | } |
| @@ -111,7 +105,6 @@ static void amba_kmi_close(struct serio *io) | |||
| 111 | 105 | ||
| 112 | free_irq(kmi->irq, kmi); | 106 | free_irq(kmi->irq, kmi); |
| 113 | clk_disable(kmi->clk); | 107 | clk_disable(kmi->clk); |
| 114 | clk_unuse(kmi->clk); | ||
| 115 | } | 108 | } |
| 116 | 109 | ||
| 117 | static int amba_kmi_probe(struct amba_device *dev, void *id) | 110 | static int amba_kmi_probe(struct amba_device *dev, void *id) |
diff --git a/drivers/mmc/mmci.c b/drivers/mmc/mmci.c index 2b10a2d4ae09..634ef53e85a5 100644 --- a/drivers/mmc/mmci.c +++ b/drivers/mmc/mmci.c | |||
| @@ -19,14 +19,14 @@ | |||
| 19 | #include <linux/highmem.h> | 19 | #include <linux/highmem.h> |
| 20 | #include <linux/mmc/host.h> | 20 | #include <linux/mmc/host.h> |
| 21 | #include <linux/mmc/protocol.h> | 21 | #include <linux/mmc/protocol.h> |
| 22 | #include <linux/amba/bus.h> | ||
| 23 | #include <linux/clk.h> | ||
| 22 | 24 | ||
| 23 | #include <asm/cacheflush.h> | 25 | #include <asm/cacheflush.h> |
| 24 | #include <asm/div64.h> | 26 | #include <asm/div64.h> |
| 25 | #include <asm/io.h> | 27 | #include <asm/io.h> |
| 26 | #include <asm/scatterlist.h> | 28 | #include <asm/scatterlist.h> |
| 27 | #include <asm/sizes.h> | 29 | #include <asm/sizes.h> |
| 28 | #include <asm/hardware/amba.h> | ||
| 29 | #include <asm/hardware/clock.h> | ||
| 30 | #include <asm/mach/mmc.h> | 30 | #include <asm/mach/mmc.h> |
| 31 | 31 | ||
| 32 | #include "mmci.h" | 32 | #include "mmci.h" |
| @@ -494,13 +494,9 @@ static int mmci_probe(struct amba_device *dev, void *id) | |||
| 494 | goto host_free; | 494 | goto host_free; |
| 495 | } | 495 | } |
| 496 | 496 | ||
| 497 | ret = clk_use(host->clk); | ||
| 498 | if (ret) | ||
| 499 | goto clk_free; | ||
| 500 | |||
| 501 | ret = clk_enable(host->clk); | 497 | ret = clk_enable(host->clk); |
| 502 | if (ret) | 498 | if (ret) |
| 503 | goto clk_unuse; | 499 | goto clk_free; |
| 504 | 500 | ||
| 505 | host->plat = plat; | 501 | host->plat = plat; |
| 506 | host->mclk = clk_get_rate(host->clk); | 502 | host->mclk = clk_get_rate(host->clk); |
| @@ -573,8 +569,6 @@ static int mmci_probe(struct amba_device *dev, void *id) | |||
| 573 | iounmap(host->base); | 569 | iounmap(host->base); |
| 574 | clk_disable: | 570 | clk_disable: |
| 575 | clk_disable(host->clk); | 571 | clk_disable(host->clk); |
| 576 | clk_unuse: | ||
| 577 | clk_unuse(host->clk); | ||
| 578 | clk_free: | 572 | clk_free: |
| 579 | clk_put(host->clk); | 573 | clk_put(host->clk); |
| 580 | host_free: | 574 | host_free: |
| @@ -609,7 +603,6 @@ static int mmci_remove(struct amba_device *dev) | |||
| 609 | 603 | ||
| 610 | iounmap(host->base); | 604 | iounmap(host->base); |
| 611 | clk_disable(host->clk); | 605 | clk_disable(host->clk); |
| 612 | clk_unuse(host->clk); | ||
| 613 | clk_put(host->clk); | 606 | clk_put(host->clk); |
| 614 | 607 | ||
| 615 | mmc_free_host(mmc); | 608 | mmc_free_host(mmc); |
diff --git a/drivers/mtd/nand/s3c2410.c b/drivers/mtd/nand/s3c2410.c index d209214b1318..5b55599739f3 100644 --- a/drivers/mtd/nand/s3c2410.c +++ b/drivers/mtd/nand/s3c2410.c | |||
| @@ -53,6 +53,7 @@ | |||
| 53 | #include <linux/delay.h> | 53 | #include <linux/delay.h> |
| 54 | #include <linux/err.h> | 54 | #include <linux/err.h> |
| 55 | #include <linux/slab.h> | 55 | #include <linux/slab.h> |
| 56 | #include <linux/clk.h> | ||
| 56 | 57 | ||
| 57 | #include <linux/mtd/mtd.h> | 58 | #include <linux/mtd/mtd.h> |
| 58 | #include <linux/mtd/nand.h> | 59 | #include <linux/mtd/nand.h> |
| @@ -60,7 +61,6 @@ | |||
| 60 | #include <linux/mtd/partitions.h> | 61 | #include <linux/mtd/partitions.h> |
| 61 | 62 | ||
| 62 | #include <asm/io.h> | 63 | #include <asm/io.h> |
| 63 | #include <asm/hardware/clock.h> | ||
| 64 | 64 | ||
| 65 | #include <asm/arch/regs-nand.h> | 65 | #include <asm/arch/regs-nand.h> |
| 66 | #include <asm/arch/nand.h> | 66 | #include <asm/arch/nand.h> |
| @@ -460,7 +460,6 @@ static int s3c2410_nand_remove(struct platform_device *pdev) | |||
| 460 | 460 | ||
| 461 | if (info->clk != NULL && !IS_ERR(info->clk)) { | 461 | if (info->clk != NULL && !IS_ERR(info->clk)) { |
| 462 | clk_disable(info->clk); | 462 | clk_disable(info->clk); |
| 463 | clk_unuse(info->clk); | ||
| 464 | clk_put(info->clk); | 463 | clk_put(info->clk); |
| 465 | } | 464 | } |
| 466 | 465 | ||
| @@ -598,7 +597,6 @@ static int s3c24xx_nand_probe(struct platform_device *pdev, int is_s3c2440) | |||
| 598 | goto exit_error; | 597 | goto exit_error; |
| 599 | } | 598 | } |
| 600 | 599 | ||
| 601 | clk_use(info->clk); | ||
| 602 | clk_enable(info->clk); | 600 | clk_enable(info->clk); |
| 603 | 601 | ||
| 604 | /* allocate and map the resource */ | 602 | /* allocate and map the resource */ |
diff --git a/drivers/pcmcia/pxa2xx_sharpsl.c b/drivers/pcmcia/pxa2xx_sharpsl.c index b5fdeec20b15..12a7244a5ec8 100644 --- a/drivers/pcmcia/pxa2xx_sharpsl.c +++ b/drivers/pcmcia/pxa2xx_sharpsl.c | |||
| @@ -36,9 +36,18 @@ | |||
| 36 | struct scoop_pcmcia_config *platform_scoop_config; | 36 | struct scoop_pcmcia_config *platform_scoop_config; |
| 37 | #define SCOOP_DEV platform_scoop_config->devs | 37 | #define SCOOP_DEV platform_scoop_config->devs |
| 38 | 38 | ||
| 39 | static void sharpsl_pcmcia_init_reset(struct scoop_pcmcia_dev *scoopdev) | 39 | static void sharpsl_pcmcia_init_reset(struct soc_pcmcia_socket *skt) |
| 40 | { | 40 | { |
| 41 | struct scoop_pcmcia_dev *scoopdev = &SCOOP_DEV[skt->nr]; | ||
| 42 | |||
| 41 | reset_scoop(scoopdev->dev); | 43 | reset_scoop(scoopdev->dev); |
| 44 | |||
| 45 | /* Shared power controls need to be handled carefully */ | ||
| 46 | if (platform_scoop_config->power_ctrl) | ||
| 47 | platform_scoop_config->power_ctrl(scoopdev->dev, 0x0000, skt->nr); | ||
| 48 | else | ||
| 49 | write_scoop_reg(scoopdev->dev, SCOOP_CPR, 0x0000); | ||
| 50 | |||
| 42 | scoopdev->keep_vs = NO_KEEP_VS; | 51 | scoopdev->keep_vs = NO_KEEP_VS; |
| 43 | scoopdev->keep_rd = 0; | 52 | scoopdev->keep_rd = 0; |
| 44 | } | 53 | } |
| @@ -208,26 +217,17 @@ static int sharpsl_pcmcia_configure_socket(struct soc_pcmcia_socket *skt, | |||
| 208 | 217 | ||
| 209 | static void sharpsl_pcmcia_socket_init(struct soc_pcmcia_socket *skt) | 218 | static void sharpsl_pcmcia_socket_init(struct soc_pcmcia_socket *skt) |
| 210 | { | 219 | { |
| 211 | sharpsl_pcmcia_init_reset(&SCOOP_DEV[skt->nr]); | 220 | sharpsl_pcmcia_init_reset(skt); |
| 212 | 221 | ||
| 213 | /* Enable interrupt */ | 222 | /* Enable interrupt */ |
| 214 | write_scoop_reg(SCOOP_DEV[skt->nr].dev, SCOOP_IMR, 0x00C0); | 223 | write_scoop_reg(SCOOP_DEV[skt->nr].dev, SCOOP_IMR, 0x00C0); |
| 215 | write_scoop_reg(SCOOP_DEV[skt->nr].dev, SCOOP_MCR, 0x0101); | 224 | write_scoop_reg(SCOOP_DEV[skt->nr].dev, SCOOP_MCR, 0x0101); |
| 216 | SCOOP_DEV[skt->nr].keep_vs = NO_KEEP_VS; | 225 | SCOOP_DEV[skt->nr].keep_vs = NO_KEEP_VS; |
| 217 | |||
| 218 | if (machine_is_collie()) | ||
| 219 | /* We need to disable SS_OUTPUT_ENA here. */ | ||
| 220 | write_scoop_reg(SCOOP_DEV[skt->nr].dev, SCOOP_CPR, read_scoop_reg(SCOOP_DEV[skt->nr].dev, SCOOP_CPR) & ~0x0080); | ||
| 221 | } | 226 | } |
| 222 | 227 | ||
| 223 | static void sharpsl_pcmcia_socket_suspend(struct soc_pcmcia_socket *skt) | 228 | static void sharpsl_pcmcia_socket_suspend(struct soc_pcmcia_socket *skt) |
| 224 | { | 229 | { |
| 225 | /* CF_BUS_OFF */ | 230 | sharpsl_pcmcia_init_reset(skt); |
| 226 | sharpsl_pcmcia_init_reset(&SCOOP_DEV[skt->nr]); | ||
| 227 | |||
| 228 | if (machine_is_collie()) | ||
| 229 | /* We need to disable SS_OUTPUT_ENA here. */ | ||
| 230 | write_scoop_reg(SCOOP_DEV[skt->nr].dev, SCOOP_CPR, read_scoop_reg(SCOOP_DEV[skt->nr].dev, SCOOP_CPR) & ~0x0080); | ||
| 231 | } | 231 | } |
| 232 | 232 | ||
| 233 | static struct pcmcia_low_level sharpsl_pcmcia_ops = { | 233 | static struct pcmcia_low_level sharpsl_pcmcia_ops = { |
diff --git a/drivers/serial/amba-pl010.c b/drivers/serial/amba-pl010.c index ddd0307fece2..48f6e872314b 100644 --- a/drivers/serial/amba-pl010.c +++ b/drivers/serial/amba-pl010.c | |||
| @@ -47,12 +47,12 @@ | |||
| 47 | #include <linux/tty_flip.h> | 47 | #include <linux/tty_flip.h> |
| 48 | #include <linux/serial_core.h> | 48 | #include <linux/serial_core.h> |
| 49 | #include <linux/serial.h> | 49 | #include <linux/serial.h> |
| 50 | #include <linux/amba/bus.h> | ||
| 51 | #include <linux/amba/serial.h> | ||
| 50 | 52 | ||
| 51 | #include <asm/io.h> | 53 | #include <asm/io.h> |
| 52 | #include <asm/irq.h> | 54 | #include <asm/irq.h> |
| 53 | #include <asm/hardware.h> | 55 | #include <asm/hardware.h> |
| 54 | #include <asm/hardware/amba.h> | ||
| 55 | #include <asm/hardware/amba_serial.h> | ||
| 56 | 56 | ||
| 57 | #define UART_NR 2 | 57 | #define UART_NR 2 |
| 58 | 58 | ||
diff --git a/drivers/serial/amba-pl011.c b/drivers/serial/amba-pl011.c index d84476ee6592..129670556162 100644 --- a/drivers/serial/amba-pl011.c +++ b/drivers/serial/amba-pl011.c | |||
| @@ -47,12 +47,12 @@ | |||
| 47 | #include <linux/tty_flip.h> | 47 | #include <linux/tty_flip.h> |
| 48 | #include <linux/serial_core.h> | 48 | #include <linux/serial_core.h> |
| 49 | #include <linux/serial.h> | 49 | #include <linux/serial.h> |
| 50 | #include <linux/amba/bus.h> | ||
| 51 | #include <linux/amba/serial.h> | ||
| 52 | #include <linux/clk.h> | ||
| 50 | 53 | ||
| 51 | #include <asm/io.h> | 54 | #include <asm/io.h> |
| 52 | #include <asm/sizes.h> | 55 | #include <asm/sizes.h> |
| 53 | #include <asm/hardware/amba.h> | ||
| 54 | #include <asm/hardware/clock.h> | ||
| 55 | #include <asm/hardware/amba_serial.h> | ||
| 56 | 56 | ||
| 57 | #define UART_NR 14 | 57 | #define UART_NR 14 |
| 58 | 58 | ||
| @@ -761,10 +761,6 @@ static int pl011_probe(struct amba_device *dev, void *id) | |||
| 761 | goto unmap; | 761 | goto unmap; |
| 762 | } | 762 | } |
| 763 | 763 | ||
| 764 | ret = clk_use(uap->clk); | ||
| 765 | if (ret) | ||
| 766 | goto putclk; | ||
| 767 | |||
| 768 | uap->port.dev = &dev->dev; | 764 | uap->port.dev = &dev->dev; |
| 769 | uap->port.mapbase = dev->res.start; | 765 | uap->port.mapbase = dev->res.start; |
| 770 | uap->port.membase = base; | 766 | uap->port.membase = base; |
| @@ -782,8 +778,6 @@ static int pl011_probe(struct amba_device *dev, void *id) | |||
| 782 | if (ret) { | 778 | if (ret) { |
| 783 | amba_set_drvdata(dev, NULL); | 779 | amba_set_drvdata(dev, NULL); |
| 784 | amba_ports[i] = NULL; | 780 | amba_ports[i] = NULL; |
| 785 | clk_unuse(uap->clk); | ||
| 786 | putclk: | ||
| 787 | clk_put(uap->clk); | 781 | clk_put(uap->clk); |
| 788 | unmap: | 782 | unmap: |
| 789 | iounmap(base); | 783 | iounmap(base); |
| @@ -808,7 +802,6 @@ static int pl011_remove(struct amba_device *dev) | |||
| 808 | amba_ports[i] = NULL; | 802 | amba_ports[i] = NULL; |
| 809 | 803 | ||
| 810 | iounmap(uap->port.membase); | 804 | iounmap(uap->port.membase); |
| 811 | clk_unuse(uap->clk); | ||
| 812 | clk_put(uap->clk); | 805 | clk_put(uap->clk); |
| 813 | kfree(uap); | 806 | kfree(uap); |
| 814 | return 0; | 807 | return 0; |
diff --git a/drivers/serial/s3c2410.c b/drivers/serial/s3c2410.c index 47681c4654e4..fe83ce6fef52 100644 --- a/drivers/serial/s3c2410.c +++ b/drivers/serial/s3c2410.c | |||
| @@ -72,12 +72,12 @@ | |||
| 72 | #include <linux/serial_core.h> | 72 | #include <linux/serial_core.h> |
| 73 | #include <linux/serial.h> | 73 | #include <linux/serial.h> |
| 74 | #include <linux/delay.h> | 74 | #include <linux/delay.h> |
| 75 | #include <linux/clk.h> | ||
| 75 | 76 | ||
| 76 | #include <asm/io.h> | 77 | #include <asm/io.h> |
| 77 | #include <asm/irq.h> | 78 | #include <asm/irq.h> |
| 78 | 79 | ||
| 79 | #include <asm/hardware.h> | 80 | #include <asm/hardware.h> |
| 80 | #include <asm/hardware/clock.h> | ||
| 81 | 81 | ||
| 82 | #include <asm/arch/regs-serial.h> | 82 | #include <asm/arch/regs-serial.h> |
| 83 | #include <asm/arch/regs-gpio.h> | 83 | #include <asm/arch/regs-gpio.h> |
| @@ -782,11 +782,9 @@ static void s3c24xx_serial_set_termios(struct uart_port *port, | |||
| 782 | 782 | ||
| 783 | if (ourport->baudclk != NULL && !IS_ERR(ourport->baudclk)) { | 783 | if (ourport->baudclk != NULL && !IS_ERR(ourport->baudclk)) { |
| 784 | clk_disable(ourport->baudclk); | 784 | clk_disable(ourport->baudclk); |
| 785 | clk_unuse(ourport->baudclk); | ||
| 786 | ourport->baudclk = NULL; | 785 | ourport->baudclk = NULL; |
| 787 | } | 786 | } |
| 788 | 787 | ||
| 789 | clk_use(clk); | ||
| 790 | clk_enable(clk); | 788 | clk_enable(clk); |
| 791 | 789 | ||
| 792 | ourport->clksrc = clksrc; | 790 | ourport->clksrc = clksrc; |
| @@ -1077,9 +1075,6 @@ static int s3c24xx_serial_init_port(struct s3c24xx_uart_port *ourport, | |||
| 1077 | 1075 | ||
| 1078 | ourport->clk = clk_get(&platdev->dev, "uart"); | 1076 | ourport->clk = clk_get(&platdev->dev, "uart"); |
| 1079 | 1077 | ||
| 1080 | if (ourport->clk != NULL && !IS_ERR(ourport->clk)) | ||
| 1081 | clk_use(ourport->clk); | ||
| 1082 | |||
| 1083 | dbg("port: map=%08x, mem=%08x, irq=%d, clock=%ld\n", | 1078 | dbg("port: map=%08x, mem=%08x, irq=%d, clock=%ld\n", |
| 1084 | port->mapbase, port->membase, port->irq, port->uartclk); | 1079 | port->mapbase, port->membase, port->irq, port->uartclk); |
| 1085 | 1080 | ||
diff --git a/drivers/usb/host/ohci-omap.c b/drivers/usb/host/ohci-omap.c index c9e29d808711..3785b3f7df1b 100644 --- a/drivers/usb/host/ohci-omap.c +++ b/drivers/usb/host/ohci-omap.c | |||
| @@ -17,6 +17,7 @@ | |||
| 17 | #include <linux/signal.h> /* SA_INTERRUPT */ | 17 | #include <linux/signal.h> /* SA_INTERRUPT */ |
| 18 | #include <linux/jiffies.h> | 18 | #include <linux/jiffies.h> |
| 19 | #include <linux/platform_device.h> | 19 | #include <linux/platform_device.h> |
| 20 | #include <linux/clk.h> | ||
| 20 | 21 | ||
| 21 | #include <asm/hardware.h> | 22 | #include <asm/hardware.h> |
| 22 | #include <asm/io.h> | 23 | #include <asm/io.h> |
| @@ -27,7 +28,6 @@ | |||
| 27 | #include <asm/arch/gpio.h> | 28 | #include <asm/arch/gpio.h> |
| 28 | #include <asm/arch/fpga.h> | 29 | #include <asm/arch/fpga.h> |
| 29 | #include <asm/arch/usb.h> | 30 | #include <asm/arch/usb.h> |
| 30 | #include <asm/hardware/clock.h> | ||
| 31 | 31 | ||
| 32 | 32 | ||
| 33 | /* OMAP-1510 OHCI has its own MMU for DMA */ | 33 | /* OMAP-1510 OHCI has its own MMU for DMA */ |
diff --git a/drivers/usb/host/ohci-s3c2410.c b/drivers/usb/host/ohci-s3c2410.c index 35cc9402adc0..372527a83593 100644 --- a/drivers/usb/host/ohci-s3c2410.c +++ b/drivers/usb/host/ohci-s3c2410.c | |||
| @@ -20,9 +20,9 @@ | |||
| 20 | */ | 20 | */ |
| 21 | 21 | ||
| 22 | #include <linux/platform_device.h> | 22 | #include <linux/platform_device.h> |
| 23 | #include <linux/clk.h> | ||
| 23 | 24 | ||
| 24 | #include <asm/hardware.h> | 25 | #include <asm/hardware.h> |
| 25 | #include <asm/hardware/clock.h> | ||
| 26 | #include <asm/arch/usb-control.h> | 26 | #include <asm/arch/usb-control.h> |
| 27 | 27 | ||
| 28 | #define valid_port(idx) ((idx) == 1 || (idx) == 2) | 28 | #define valid_port(idx) ((idx) == 1 || (idx) == 2) |
| @@ -363,7 +363,6 @@ int usb_hcd_s3c2410_probe (const struct hc_driver *driver, | |||
| 363 | goto err1; | 363 | goto err1; |
| 364 | } | 364 | } |
| 365 | 365 | ||
| 366 | clk_use(clk); | ||
| 367 | s3c2410_start_hc(dev, hcd); | 366 | s3c2410_start_hc(dev, hcd); |
| 368 | 367 | ||
| 369 | hcd->regs = ioremap(hcd->rsrc_start, hcd->rsrc_len); | 368 | hcd->regs = ioremap(hcd->rsrc_start, hcd->rsrc_len); |
| @@ -384,7 +383,6 @@ int usb_hcd_s3c2410_probe (const struct hc_driver *driver, | |||
| 384 | err2: | 383 | err2: |
| 385 | s3c2410_stop_hc(dev); | 384 | s3c2410_stop_hc(dev); |
| 386 | iounmap(hcd->regs); | 385 | iounmap(hcd->regs); |
| 387 | clk_unuse(clk); | ||
| 388 | clk_put(clk); | 386 | clk_put(clk); |
| 389 | 387 | ||
| 390 | err1: | 388 | err1: |
diff --git a/drivers/video/amba-clcd.c b/drivers/video/amba-clcd.c index a3c2c45e29e0..0da4083ba908 100644 --- a/drivers/video/amba-clcd.c +++ b/drivers/video/amba-clcd.c | |||
| @@ -21,12 +21,11 @@ | |||
| 21 | #include <linux/init.h> | 21 | #include <linux/init.h> |
| 22 | #include <linux/ioport.h> | 22 | #include <linux/ioport.h> |
| 23 | #include <linux/list.h> | 23 | #include <linux/list.h> |
| 24 | #include <linux/amba/bus.h> | ||
| 25 | #include <linux/amba/clcd.h> | ||
| 26 | #include <linux/clk.h> | ||
| 24 | 27 | ||
| 25 | #include <asm/sizes.h> | 28 | #include <asm/sizes.h> |
| 26 | #include <asm/hardware/amba.h> | ||
| 27 | #include <asm/hardware/clock.h> | ||
| 28 | |||
| 29 | #include <asm/hardware/amba_clcd.h> | ||
| 30 | 29 | ||
| 31 | #define to_clcd(info) container_of(info, struct clcd_fb, fb) | 30 | #define to_clcd(info) container_of(info, struct clcd_fb, fb) |
| 32 | 31 | ||
| @@ -346,10 +345,6 @@ static int clcdfb_register(struct clcd_fb *fb) | |||
| 346 | goto out; | 345 | goto out; |
| 347 | } | 346 | } |
| 348 | 347 | ||
| 349 | ret = clk_use(fb->clk); | ||
| 350 | if (ret) | ||
| 351 | goto free_clk; | ||
| 352 | |||
| 353 | fb->fb.fix.mmio_start = fb->dev->res.start; | 348 | fb->fb.fix.mmio_start = fb->dev->res.start; |
| 354 | fb->fb.fix.mmio_len = SZ_4K; | 349 | fb->fb.fix.mmio_len = SZ_4K; |
| 355 | 350 | ||
| @@ -357,7 +352,7 @@ static int clcdfb_register(struct clcd_fb *fb) | |||
| 357 | if (!fb->regs) { | 352 | if (!fb->regs) { |
| 358 | printk(KERN_ERR "CLCD: unable to remap registers\n"); | 353 | printk(KERN_ERR "CLCD: unable to remap registers\n"); |
| 359 | ret = -ENOMEM; | 354 | ret = -ENOMEM; |
| 360 | goto unuse_clk; | 355 | goto free_clk; |
| 361 | } | 356 | } |
| 362 | 357 | ||
| 363 | fb->fb.fbops = &clcdfb_ops; | 358 | fb->fb.fbops = &clcdfb_ops; |
| @@ -427,8 +422,6 @@ static int clcdfb_register(struct clcd_fb *fb) | |||
| 427 | printk(KERN_ERR "CLCD: cannot register framebuffer (%d)\n", ret); | 422 | printk(KERN_ERR "CLCD: cannot register framebuffer (%d)\n", ret); |
| 428 | 423 | ||
| 429 | iounmap(fb->regs); | 424 | iounmap(fb->regs); |
| 430 | unuse_clk: | ||
| 431 | clk_unuse(fb->clk); | ||
| 432 | free_clk: | 425 | free_clk: |
| 433 | clk_put(fb->clk); | 426 | clk_put(fb->clk); |
| 434 | out: | 427 | out: |
| @@ -489,7 +482,6 @@ static int clcdfb_remove(struct amba_device *dev) | |||
| 489 | clcdfb_disable(fb); | 482 | clcdfb_disable(fb); |
| 490 | unregister_framebuffer(&fb->fb); | 483 | unregister_framebuffer(&fb->fb); |
| 491 | iounmap(fb->regs); | 484 | iounmap(fb->regs); |
| 492 | clk_unuse(fb->clk); | ||
| 493 | clk_put(fb->clk); | 485 | clk_put(fb->clk); |
| 494 | 486 | ||
| 495 | fb->board->remove(fb); | 487 | fb->board->remove(fb); |
diff --git a/drivers/video/backlight/corgi_bl.c b/drivers/video/backlight/corgi_bl.c index 6a219b2c77e3..d0aaf450e8c7 100644 --- a/drivers/video/backlight/corgi_bl.c +++ b/drivers/video/backlight/corgi_bl.c | |||
| @@ -20,6 +20,7 @@ | |||
| 20 | #include <linux/backlight.h> | 20 | #include <linux/backlight.h> |
| 21 | 21 | ||
| 22 | #include <asm/arch/sharpsl.h> | 22 | #include <asm/arch/sharpsl.h> |
| 23 | #include <asm/hardware/sharpsl_pm.h> | ||
| 23 | 24 | ||
| 24 | #define CORGI_DEFAULT_INTENSITY 0x1f | 25 | #define CORGI_DEFAULT_INTENSITY 0x1f |
| 25 | #define CORGI_LIMIT_MASK 0x0b | 26 | #define CORGI_LIMIT_MASK 0x0b |
diff --git a/drivers/video/imxfb.c b/drivers/video/imxfb.c index 5924cc225c95..1718baaeed2a 100644 --- a/drivers/video/imxfb.c +++ b/drivers/video/imxfb.c | |||
| @@ -554,7 +554,7 @@ static int __init imxfb_probe(struct platform_device *pdev) | |||
| 554 | 554 | ||
| 555 | inf = pdev->dev.platform_data; | 555 | inf = pdev->dev.platform_data; |
| 556 | if(!inf) { | 556 | if(!inf) { |
| 557 | dev_err(dev,"No platform_data available\n"); | 557 | dev_err(&pdev->dev,"No platform_data available\n"); |
| 558 | return -ENOMEM; | 558 | return -ENOMEM; |
| 559 | } | 559 | } |
| 560 | 560 | ||
| @@ -579,7 +579,7 @@ static int __init imxfb_probe(struct platform_device *pdev) | |||
| 579 | if (!inf->fixed_screen_cpu) { | 579 | if (!inf->fixed_screen_cpu) { |
| 580 | ret = imxfb_map_video_memory(info); | 580 | ret = imxfb_map_video_memory(info); |
| 581 | if (ret) { | 581 | if (ret) { |
| 582 | dev_err(dev, "Failed to allocate video RAM: %d\n", ret); | 582 | dev_err(&pdev->dev, "Failed to allocate video RAM: %d\n", ret); |
| 583 | ret = -ENOMEM; | 583 | ret = -ENOMEM; |
| 584 | goto failed_map; | 584 | goto failed_map; |
| 585 | } | 585 | } |
| @@ -608,7 +608,7 @@ static int __init imxfb_probe(struct platform_device *pdev) | |||
| 608 | imxfb_set_par(info); | 608 | imxfb_set_par(info); |
| 609 | ret = register_framebuffer(info); | 609 | ret = register_framebuffer(info); |
| 610 | if (ret < 0) { | 610 | if (ret < 0) { |
| 611 | dev_err(dev, "failed to register framebuffer\n"); | 611 | dev_err(&pdev->dev, "failed to register framebuffer\n"); |
| 612 | goto failed_register; | 612 | goto failed_register; |
| 613 | } | 613 | } |
| 614 | 614 | ||
diff --git a/drivers/video/s3c2410fb.c b/drivers/video/s3c2410fb.c index ce6e749db3a7..fe99d17a21d7 100644 --- a/drivers/video/s3c2410fb.c +++ b/drivers/video/s3c2410fb.c | |||
| @@ -87,6 +87,7 @@ | |||
| 87 | #include <linux/workqueue.h> | 87 | #include <linux/workqueue.h> |
| 88 | #include <linux/wait.h> | 88 | #include <linux/wait.h> |
| 89 | #include <linux/platform_device.h> | 89 | #include <linux/platform_device.h> |
| 90 | #include <linux/clk.h> | ||
| 90 | 91 | ||
| 91 | #include <asm/io.h> | 92 | #include <asm/io.h> |
| 92 | #include <asm/uaccess.h> | 93 | #include <asm/uaccess.h> |
| @@ -96,7 +97,6 @@ | |||
| 96 | #include <asm/arch/regs-lcd.h> | 97 | #include <asm/arch/regs-lcd.h> |
| 97 | #include <asm/arch/regs-gpio.h> | 98 | #include <asm/arch/regs-gpio.h> |
| 98 | #include <asm/arch/fb.h> | 99 | #include <asm/arch/fb.h> |
| 99 | #include <asm/hardware/clock.h> | ||
| 100 | 100 | ||
| 101 | #ifdef CONFIG_PM | 101 | #ifdef CONFIG_PM |
| 102 | #include <linux/pm.h> | 102 | #include <linux/pm.h> |
| @@ -746,7 +746,6 @@ int __init s3c2410fb_probe(struct platform_device *pdev) | |||
| 746 | goto release_irq; | 746 | goto release_irq; |
| 747 | } | 747 | } |
| 748 | 748 | ||
| 749 | clk_use(info->clk); | ||
| 750 | clk_enable(info->clk); | 749 | clk_enable(info->clk); |
| 751 | dprintk("got and enabled clock\n"); | 750 | dprintk("got and enabled clock\n"); |
| 752 | 751 | ||
| @@ -783,7 +782,6 @@ free_video_memory: | |||
| 783 | s3c2410fb_unmap_video_memory(info); | 782 | s3c2410fb_unmap_video_memory(info); |
| 784 | release_clock: | 783 | release_clock: |
| 785 | clk_disable(info->clk); | 784 | clk_disable(info->clk); |
| 786 | clk_unuse(info->clk); | ||
| 787 | clk_put(info->clk); | 785 | clk_put(info->clk); |
| 788 | release_irq: | 786 | release_irq: |
| 789 | free_irq(irq,info); | 787 | free_irq(irq,info); |
| @@ -828,7 +826,6 @@ static int s3c2410fb_remove(struct platform_device *pdev) | |||
| 828 | 826 | ||
| 829 | if (info->clk) { | 827 | if (info->clk) { |
| 830 | clk_disable(info->clk); | 828 | clk_disable(info->clk); |
| 831 | clk_unuse(info->clk); | ||
| 832 | clk_put(info->clk); | 829 | clk_put(info->clk); |
| 833 | info->clk = NULL; | 830 | info->clk = NULL; |
| 834 | } | 831 | } |
diff --git a/include/asm-arm/arch-aaec2000/dma.h b/include/asm-arm/arch-aaec2000/dma.h index 28c890b4a1d3..e100b1e526fe 100644 --- a/include/asm-arm/arch-aaec2000/dma.h +++ b/include/asm-arm/arch-aaec2000/dma.h | |||
| @@ -7,11 +7,3 @@ | |||
| 7 | * it under the terms of the GNU General Public License version 2 as | 7 | * it under the terms of the GNU General Public License version 2 as |
| 8 | * published by the Free Software Foundation. | 8 | * published by the Free Software Foundation. |
| 9 | */ | 9 | */ |
| 10 | |||
| 11 | #ifndef __ASM_ARCH_DMA_H | ||
| 12 | #define __ASM_ARCH_DMA_H | ||
| 13 | |||
| 14 | #define MAX_DMA_ADDRESS 0xffffffff | ||
| 15 | #define MAX_DMA_CHANNELS 0 | ||
| 16 | |||
| 17 | #endif | ||
diff --git a/include/asm-arm/arch-cl7500/dma.h b/include/asm-arm/arch-cl7500/dma.h index 1d6a8829d327..591ed2551892 100644 --- a/include/asm-arm/arch-cl7500/dma.h +++ b/include/asm-arm/arch-cl7500/dma.h | |||
| @@ -15,7 +15,6 @@ | |||
| 15 | * bytes of RAM. | 15 | * bytes of RAM. |
| 16 | */ | 16 | */ |
| 17 | #define MAX_DMA_ADDRESS 0xd0000000 | 17 | #define MAX_DMA_ADDRESS 0xd0000000 |
| 18 | #define MAX_DMA_CHANNELS 0 | ||
| 19 | 18 | ||
| 20 | #define DMA_S0 0 | 19 | #define DMA_S0 0 |
| 21 | 20 | ||
diff --git a/include/asm-arm/arch-cl7500/entry-macro.S b/include/asm-arm/arch-cl7500/entry-macro.S index 686f413f82d6..c9e5395e5106 100644 --- a/include/asm-arm/arch-cl7500/entry-macro.S +++ b/include/asm-arm/arch-cl7500/entry-macro.S | |||
| @@ -1,3 +1,3 @@ | |||
| 1 | 1 | #include <asm/hardware.h> | |
| 2 | #include <asm/hardware/entry-macro-iomd.S> | 2 | #include <asm/hardware/entry-macro-iomd.S> |
| 3 | 3 | ||
diff --git a/include/asm-arm/arch-clps711x/dma.h b/include/asm-arm/arch-clps711x/dma.h index 3c4c5c843252..610997938423 100644 --- a/include/asm-arm/arch-clps711x/dma.h +++ b/include/asm-arm/arch-clps711x/dma.h | |||
| @@ -17,12 +17,3 @@ | |||
| 17 | * along with this program; if not, write to the Free Software | 17 | * along with this program; if not, write to the Free Software |
| 18 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | 18 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
| 19 | */ | 19 | */ |
| 20 | #ifndef __ASM_ARCH_DMA_H | ||
| 21 | #define __ASM_ARCH_DMA_H | ||
| 22 | |||
| 23 | #define MAX_DMA_ADDRESS 0xffffffff | ||
| 24 | |||
| 25 | #define MAX_DMA_CHANNELS 0 | ||
| 26 | |||
| 27 | #endif /* _ASM_ARCH_DMA_H */ | ||
| 28 | |||
diff --git a/include/asm-arm/arch-clps711x/entry-macro.S b/include/asm-arm/arch-clps711x/entry-macro.S index b31079a1d4a9..21f6ee485819 100644 --- a/include/asm-arm/arch-clps711x/entry-macro.S +++ b/include/asm-arm/arch-clps711x/entry-macro.S | |||
| @@ -7,6 +7,7 @@ | |||
| 7 | * License version 2. This program is licensed "as is" without any | 7 | * License version 2. This program is licensed "as is" without any |
| 8 | * warranty of any kind, whether express or implied. | 8 | * warranty of any kind, whether express or implied. |
| 9 | */ | 9 | */ |
| 10 | #include <asm/hardware.h> | ||
| 10 | #include <asm/hardware/clps7111.h> | 11 | #include <asm/hardware/clps7111.h> |
| 11 | 12 | ||
| 12 | .macro disable_fiq | 13 | .macro disable_fiq |
diff --git a/include/asm-arm/arch-clps711x/system.h b/include/asm-arm/arch-clps711x/system.h index 2ab981fee37f..11e1491535a8 100644 --- a/include/asm-arm/arch-clps711x/system.h +++ b/include/asm-arm/arch-clps711x/system.h | |||
| @@ -20,7 +20,9 @@ | |||
| 20 | #ifndef __ASM_ARCH_SYSTEM_H | 20 | #ifndef __ASM_ARCH_SYSTEM_H |
| 21 | #define __ASM_ARCH_SYSTEM_H | 21 | #define __ASM_ARCH_SYSTEM_H |
| 22 | 22 | ||
| 23 | #include <asm/hardware.h> | ||
| 23 | #include <asm/hardware/clps7111.h> | 24 | #include <asm/hardware/clps7111.h> |
| 25 | #include <asm/io.h> | ||
| 24 | 26 | ||
| 25 | static inline void arch_idle(void) | 27 | static inline void arch_idle(void) |
| 26 | { | 28 | { |
diff --git a/include/asm-arm/arch-ebsa110/dma.h b/include/asm-arm/arch-ebsa110/dma.h index d491776ac1cc..c52f9e2ab0bb 100644 --- a/include/asm-arm/arch-ebsa110/dma.h +++ b/include/asm-arm/arch-ebsa110/dma.h | |||
| @@ -9,11 +9,3 @@ | |||
| 9 | * | 9 | * |
| 10 | * EBSA110 DMA definitions | 10 | * EBSA110 DMA definitions |
| 11 | */ | 11 | */ |
| 12 | #ifndef __ASM_ARCH_DMA_H | ||
| 13 | #define __ASM_ARCH_DMA_H | ||
| 14 | |||
| 15 | #define MAX_DMA_ADDRESS 0xffffffff | ||
| 16 | #define MAX_DMA_CHANNELS 0 | ||
| 17 | |||
| 18 | #endif /* _ASM_ARCH_DMA_H */ | ||
| 19 | |||
diff --git a/include/asm-arm/arch-ebsa285/dma.h b/include/asm-arm/arch-ebsa285/dma.h index c43046eb8bc7..0259ad45d33c 100644 --- a/include/asm-arm/arch-ebsa285/dma.h +++ b/include/asm-arm/arch-ebsa285/dma.h | |||
| @@ -10,11 +10,6 @@ | |||
| 10 | #define __ASM_ARCH_DMA_H | 10 | #define __ASM_ARCH_DMA_H |
| 11 | 11 | ||
| 12 | /* | 12 | /* |
| 13 | * This is the maximum DMA address that can be DMAd to. | ||
| 14 | */ | ||
| 15 | #define MAX_DMA_ADDRESS 0xffffffff | ||
| 16 | |||
| 17 | /* | ||
| 18 | * The 21285 has two internal DMA channels; we call these 8 and 9. | 13 | * The 21285 has two internal DMA channels; we call these 8 and 9. |
| 19 | * On CATS hardware we have an additional eight ISA dma channels | 14 | * On CATS hardware we have an additional eight ISA dma channels |
| 20 | * numbered 0..7. | 15 | * numbered 0..7. |
diff --git a/include/asm-arm/arch-ebsa285/entry-macro.S b/include/asm-arm/arch-ebsa285/entry-macro.S index db5729ff6349..cf10ac96fdde 100644 --- a/include/asm-arm/arch-ebsa285/entry-macro.S +++ b/include/asm-arm/arch-ebsa285/entry-macro.S | |||
| @@ -7,6 +7,8 @@ | |||
| 7 | * License version 2. This program is licensed "as is" without any | 7 | * License version 2. This program is licensed "as is" without any |
| 8 | * warranty of any kind, whether express or implied. | 8 | * warranty of any kind, whether express or implied. |
| 9 | */ | 9 | */ |
| 10 | #include <asm/hardware.h> | ||
| 11 | #include <asm/arch/irqs.h> | ||
| 10 | #include <asm/hardware/dec21285.h> | 12 | #include <asm/hardware/dec21285.h> |
| 11 | 13 | ||
| 12 | .macro disable_fiq | 14 | .macro disable_fiq |
diff --git a/include/asm-arm/arch-epxa10db/dma.h b/include/asm-arm/arch-epxa10db/dma.h index 5d97734d1077..de20ec8e74b1 100644 --- a/include/asm-arm/arch-epxa10db/dma.h +++ b/include/asm-arm/arch-epxa10db/dma.h | |||
| @@ -17,12 +17,3 @@ | |||
| 17 | * along with this program; if not, write to the Free Software | 17 | * along with this program; if not, write to the Free Software |
| 18 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | 18 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
| 19 | */ | 19 | */ |
| 20 | #ifndef __ASM_ARCH_DMA_H | ||
| 21 | #define __ASM_ARCH_DMA_H | ||
| 22 | |||
| 23 | #define MAX_DMA_ADDRESS 0xffffffff | ||
| 24 | |||
| 25 | #define MAX_DMA_CHANNELS 0 | ||
| 26 | |||
| 27 | #endif /* _ASM_ARCH_DMA_H */ | ||
| 28 | |||
diff --git a/include/asm-arm/arch-imx/dma.h b/include/asm-arm/arch-imx/dma.h index dbdc01780413..b45fa367d71e 100644 --- a/include/asm-arm/arch-imx/dma.h +++ b/include/asm-arm/arch-imx/dma.h | |||
| @@ -20,10 +20,6 @@ | |||
| 20 | #ifndef __ASM_ARCH_DMA_H | 20 | #ifndef __ASM_ARCH_DMA_H |
| 21 | #define __ASM_ARCH_DMA_H | 21 | #define __ASM_ARCH_DMA_H |
| 22 | 22 | ||
| 23 | #define MAX_DMA_ADDRESS 0xffffffff | ||
| 24 | |||
| 25 | #define MAX_DMA_CHANNELS 0 | ||
| 26 | |||
| 27 | /* | 23 | /* |
| 28 | * DMA registration | 24 | * DMA registration |
| 29 | */ | 25 | */ |
diff --git a/include/asm-arm/arch-imx/entry-macro.S b/include/asm-arm/arch-imx/entry-macro.S index b40ea7cf88ec..3b9ef6914627 100644 --- a/include/asm-arm/arch-imx/entry-macro.S +++ b/include/asm-arm/arch-imx/entry-macro.S | |||
| @@ -7,6 +7,8 @@ | |||
| 7 | * License version 2. This program is licensed "as is" without any | 7 | * License version 2. This program is licensed "as is" without any |
| 8 | * warranty of any kind, whether express or implied. | 8 | * warranty of any kind, whether express or implied. |
| 9 | */ | 9 | */ |
| 10 | #include <asm/hardware.h> | ||
| 11 | |||
| 10 | .macro disable_fiq | 12 | .macro disable_fiq |
| 11 | .endm | 13 | .endm |
| 12 | #define AITC_NIVECSR 0x40 | 14 | #define AITC_NIVECSR 0x40 |
diff --git a/include/asm-arm/arch-integrator/debug-macro.S b/include/asm-arm/arch-integrator/debug-macro.S index 484a1aa47098..031d30941791 100644 --- a/include/asm-arm/arch-integrator/debug-macro.S +++ b/include/asm-arm/arch-integrator/debug-macro.S | |||
| @@ -11,7 +11,7 @@ | |||
| 11 | * | 11 | * |
| 12 | */ | 12 | */ |
| 13 | 13 | ||
| 14 | #include <asm/hardware/amba_serial.h> | 14 | #include <linux/amba/serial.h> |
| 15 | 15 | ||
| 16 | .macro addruart,rx | 16 | .macro addruart,rx |
| 17 | mrc p15, 0, \rx, c1, c0 | 17 | mrc p15, 0, \rx, c1, c0 |
diff --git a/include/asm-arm/arch-integrator/dma.h b/include/asm-arm/arch-integrator/dma.h index 7171792290bd..83fd6bbaf9d3 100644 --- a/include/asm-arm/arch-integrator/dma.h +++ b/include/asm-arm/arch-integrator/dma.h | |||
| @@ -17,12 +17,3 @@ | |||
| 17 | * along with this program; if not, write to the Free Software | 17 | * along with this program; if not, write to the Free Software |
| 18 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | 18 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
| 19 | */ | 19 | */ |
| 20 | #ifndef __ASM_ARCH_DMA_H | ||
| 21 | #define __ASM_ARCH_DMA_H | ||
| 22 | |||
| 23 | #define MAX_DMA_ADDRESS 0xffffffff | ||
| 24 | |||
| 25 | #define MAX_DMA_CHANNELS 0 | ||
| 26 | |||
| 27 | #endif /* _ASM_ARCH_DMA_H */ | ||
| 28 | |||
diff --git a/include/asm-arm/arch-integrator/entry-macro.S b/include/asm-arm/arch-integrator/entry-macro.S index 44f7ee613194..69838d04f90b 100644 --- a/include/asm-arm/arch-integrator/entry-macro.S +++ b/include/asm-arm/arch-integrator/entry-macro.S | |||
| @@ -7,6 +7,8 @@ | |||
| 7 | * License version 2. This program is licensed "as is" without any | 7 | * License version 2. This program is licensed "as is" without any |
| 8 | * warranty of any kind, whether express or implied. | 8 | * warranty of any kind, whether express or implied. |
| 9 | */ | 9 | */ |
| 10 | #include <asm/hardware.h> | ||
| 11 | #include <asm/arch/irqs.h> | ||
| 10 | 12 | ||
| 11 | .macro disable_fiq | 13 | .macro disable_fiq |
| 12 | .endm | 14 | .endm |
diff --git a/include/asm-arm/arch-iop3xx/dma.h b/include/asm-arm/arch-iop3xx/dma.h index 797f9e6fc745..1e808db8af2a 100644 --- a/include/asm-arm/arch-iop3xx/dma.h +++ b/include/asm-arm/arch-iop3xx/dma.h | |||
| @@ -7,10 +7,3 @@ | |||
| 7 | * it under the terms of the GNU General Public License version 2 as | 7 | * it under the terms of the GNU General Public License version 2 as |
| 8 | * published by the Free Software Foundation. | 8 | * published by the Free Software Foundation. |
| 9 | */ | 9 | */ |
| 10 | |||
| 11 | #ifndef _IOP3XX_DMA_H_P | ||
| 12 | #define _IOP3XX_DMA_H_P | ||
| 13 | |||
| 14 | #define MAX_DMA_ADDRESS 0xffffffff | ||
| 15 | |||
| 16 | #endif /* _ASM_ARCH_DMA_H_P */ | ||
diff --git a/include/asm-arm/arch-iop3xx/entry-macro.S b/include/asm-arm/arch-iop3xx/entry-macro.S index e2ce7f5467c8..926668c098a5 100644 --- a/include/asm-arm/arch-iop3xx/entry-macro.S +++ b/include/asm-arm/arch-iop3xx/entry-macro.S | |||
| @@ -7,6 +7,7 @@ | |||
| 7 | * License version 2. This program is licensed "as is" without any | 7 | * License version 2. This program is licensed "as is" without any |
| 8 | * warranty of any kind, whether express or implied. | 8 | * warranty of any kind, whether express or implied. |
| 9 | */ | 9 | */ |
| 10 | #include <asm/arch/irqs.h> | ||
| 10 | 11 | ||
| 11 | #if defined(CONFIG_ARCH_IOP321) | 12 | #if defined(CONFIG_ARCH_IOP321) |
| 12 | .macro disable_fiq | 13 | .macro disable_fiq |
diff --git a/include/asm-arm/arch-ixp2000/dma.h b/include/asm-arm/arch-ixp2000/dma.h index 0fb3568a98dd..548d8dc507eb 100644 --- a/include/asm-arm/arch-ixp2000/dma.h +++ b/include/asm-arm/arch-ixp2000/dma.h | |||
| @@ -7,12 +7,3 @@ | |||
| 7 | * it under the terms of the GNU General Public License version 2 as | 7 | * it under the terms of the GNU General Public License version 2 as |
| 8 | * published by the Free Software Foundation. | 8 | * published by the Free Software Foundation. |
| 9 | */ | 9 | */ |
| 10 | #ifndef __ASM_ARCH_DMA_H | ||
| 11 | #define __ASM_ARCH_DMA_H | ||
| 12 | |||
| 13 | #define MAX_DMA_ADDRESS 0xffffffff | ||
| 14 | |||
| 15 | /* No DMA */ | ||
| 16 | #define MAX_DMA_CHANNELS 0 | ||
| 17 | |||
| 18 | #endif /* _ASM_ARCH_DMA_H */ | ||
diff --git a/include/asm-arm/arch-ixp2000/enp2611.h b/include/asm-arm/arch-ixp2000/enp2611.h index 95128d9f5026..42f3c28dc5c4 100644 --- a/include/asm-arm/arch-ixp2000/enp2611.h +++ b/include/asm-arm/arch-ixp2000/enp2611.h | |||
| @@ -36,5 +36,11 @@ | |||
| 36 | #define ENP2611_GPIO_SCL 7 | 36 | #define ENP2611_GPIO_SCL 7 |
| 37 | #define ENP2611_GPIO_SDA 6 | 37 | #define ENP2611_GPIO_SDA 6 |
| 38 | 38 | ||
| 39 | #define IRQ_ENP2611_THERMAL IRQ_IXP2000_GPIO4 | ||
| 40 | #define IRQ_ENP2611_OPTION_BOARD IRQ_IXP2000_GPIO3 | ||
| 41 | #define IRQ_ENP2611_CALEB IRQ_IXP2000_GPIO2 | ||
| 42 | #define IRQ_ENP2611_PM3386_1 IRQ_IXP2000_GPIO1 | ||
| 43 | #define IRQ_ENP2611_PM3386_0 IRQ_IXP2000_GPIO0 | ||
| 44 | |||
| 39 | 45 | ||
| 40 | #endif | 46 | #endif |
diff --git a/include/asm-arm/arch-ixp2000/entry-macro.S b/include/asm-arm/arch-ixp2000/entry-macro.S index e3a4e4121298..16e1e6124b31 100644 --- a/include/asm-arm/arch-ixp2000/entry-macro.S +++ b/include/asm-arm/arch-ixp2000/entry-macro.S | |||
| @@ -7,6 +7,7 @@ | |||
| 7 | * License version 2. This program is licensed "as is" without any | 7 | * License version 2. This program is licensed "as is" without any |
| 8 | * warranty of any kind, whether express or implied. | 8 | * warranty of any kind, whether express or implied. |
| 9 | */ | 9 | */ |
| 10 | #include <asm/arch/irqs.h> | ||
| 10 | 11 | ||
| 11 | .macro disable_fiq | 12 | .macro disable_fiq |
| 12 | .endm | 13 | .endm |
diff --git a/include/asm-arm/arch-ixp2000/io.h b/include/asm-arm/arch-ixp2000/io.h index 7fbcdf9931ee..c0ff2c6c66e7 100644 --- a/include/asm-arm/arch-ixp2000/io.h +++ b/include/asm-arm/arch-ixp2000/io.h | |||
| @@ -131,102 +131,4 @@ | |||
| 131 | #endif | 131 | #endif |
| 132 | 132 | ||
| 133 | 133 | ||
| 134 | #ifdef CONFIG_ARCH_IXDP2X01 | ||
| 135 | /* | ||
| 136 | * This is an ugly hack but the CS8900 on the 2x01's does not sit in any sort | ||
| 137 | * of "I/O space" and is just direct mapped into a 32-bit-only addressable | ||
| 138 | * bus. The address space for this bus is such that we can't really easily | ||
| 139 | * make it contiguous to the PCI I/O address range, and it also does not | ||
| 140 | * need swapping like PCI addresses do (IXDP2x01 is a BE platform). | ||
| 141 | * B/C of this we can't use the standard in/out functions and need to | ||
| 142 | * runtime check if the incoming address is a PCI address or for | ||
| 143 | * the CS89x0. | ||
| 144 | */ | ||
| 145 | #undef inw | ||
| 146 | #undef outw | ||
| 147 | #undef insw | ||
| 148 | #undef outsw | ||
| 149 | |||
| 150 | #include <asm/mach-types.h> | ||
| 151 | |||
| 152 | static inline void insw(u32 ptr, void *buf, int length) | ||
| 153 | { | ||
| 154 | register volatile u32 *port = (volatile u32 *)ptr; | ||
| 155 | |||
| 156 | /* | ||
| 157 | * Is this cycle meant for the CS8900? | ||
| 158 | */ | ||
| 159 | if ((machine_is_ixdp2401() || machine_is_ixdp2801()) && | ||
| 160 | (((u32)port >= (u32)IXDP2X01_CS8900_VIRT_BASE) && | ||
| 161 | ((u32)port <= (u32)IXDP2X01_CS8900_VIRT_END))) { | ||
| 162 | u8 *buf8 = (u8*)buf; | ||
| 163 | register u32 tmp32; | ||
| 164 | |||
| 165 | do { | ||
| 166 | tmp32 = *port; | ||
| 167 | *buf8++ = (u8)tmp32; | ||
| 168 | *buf8++ = (u8)(tmp32 >> 8); | ||
| 169 | } while(--length); | ||
| 170 | |||
| 171 | return; | ||
| 172 | } | ||
| 173 | |||
| 174 | __raw_readsw(alignw(___io(ptr)),buf,length); | ||
| 175 | } | ||
| 176 | |||
| 177 | static inline void outsw(u32 ptr, void *buf, int length) | ||
| 178 | { | ||
| 179 | register volatile u32 *port = (volatile u32 *)ptr; | ||
| 180 | |||
| 181 | /* | ||
| 182 | * Is this cycle meant for the CS8900? | ||
| 183 | */ | ||
| 184 | if ((machine_is_ixdp2401() || machine_is_ixdp2801()) && | ||
| 185 | (((u32)port >= (u32)IXDP2X01_CS8900_VIRT_BASE) && | ||
| 186 | ((u32)port <= (u32)IXDP2X01_CS8900_VIRT_END))) { | ||
| 187 | register u32 tmp32; | ||
| 188 | u8 *buf8 = (u8*)buf; | ||
| 189 | do { | ||
| 190 | tmp32 = *buf8++; | ||
| 191 | tmp32 |= (*buf8++) << 8; | ||
| 192 | *port = tmp32; | ||
| 193 | } while(--length); | ||
| 194 | return; | ||
| 195 | } | ||
| 196 | |||
| 197 | __raw_writesw(alignw(___io(ptr)),buf,length); | ||
| 198 | } | ||
| 199 | |||
| 200 | |||
| 201 | static inline u16 inw(u32 ptr) | ||
| 202 | { | ||
| 203 | register volatile u32 *port = (volatile u32 *)ptr; | ||
| 204 | |||
| 205 | /* | ||
| 206 | * Is this cycle meant for the CS8900? | ||
| 207 | */ | ||
| 208 | if ((machine_is_ixdp2401() || machine_is_ixdp2801()) && | ||
| 209 | (((u32)port >= (u32)IXDP2X01_CS8900_VIRT_BASE) && | ||
| 210 | ((u32)port <= (u32)IXDP2X01_CS8900_VIRT_END))) { | ||
| 211 | return (u16)(*port); | ||
| 212 | } | ||
| 213 | |||
| 214 | return __raw_readw(alignw(___io(ptr))); | ||
| 215 | } | ||
| 216 | |||
| 217 | static inline void outw(u16 value, u32 ptr) | ||
| 218 | { | ||
| 219 | register volatile u32 *port = (volatile u32 *)ptr; | ||
| 220 | |||
| 221 | if ((machine_is_ixdp2401() || machine_is_ixdp2801()) && | ||
| 222 | (((u32)port >= (u32)IXDP2X01_CS8900_VIRT_BASE) && | ||
| 223 | ((u32)port <= (u32)IXDP2X01_CS8900_VIRT_END))) { | ||
| 224 | *port = value; | ||
| 225 | return; | ||
| 226 | } | ||
| 227 | |||
| 228 | __raw_writew((value),alignw(___io(ptr))); | ||
| 229 | } | ||
| 230 | #endif /* IXDP2x01 */ | ||
| 231 | |||
| 232 | #endif | 134 | #endif |
diff --git a/include/asm-arm/arch-ixp2000/ixp2000-regs.h b/include/asm-arm/arch-ixp2000/ixp2000-regs.h index fc5ac6aec4f2..8cf70ff160af 100644 --- a/include/asm-arm/arch-ixp2000/ixp2000-regs.h +++ b/include/asm-arm/arch-ixp2000/ixp2000-regs.h | |||
| @@ -156,6 +156,14 @@ | |||
| 156 | #define IXP2000_IRQ_THD_RAW_STATUS_B_1 IXP2000_INTCTL_REG(0x84) | 156 | #define IXP2000_IRQ_THD_RAW_STATUS_B_1 IXP2000_INTCTL_REG(0x84) |
| 157 | #define IXP2000_IRQ_THD_RAW_STATUS_B_2 IXP2000_INTCTL_REG(0x88) | 157 | #define IXP2000_IRQ_THD_RAW_STATUS_B_2 IXP2000_INTCTL_REG(0x88) |
| 158 | #define IXP2000_IRQ_THD_RAW_STATUS_B_3 IXP2000_INTCTL_REG(0x8c) | 158 | #define IXP2000_IRQ_THD_RAW_STATUS_B_3 IXP2000_INTCTL_REG(0x8c) |
| 159 | #define IXP2000_IRQ_THD_STATUS_A_0 IXP2000_INTCTL_REG(0xe0) | ||
| 160 | #define IXP2000_IRQ_THD_STATUS_A_1 IXP2000_INTCTL_REG(0xe4) | ||
| 161 | #define IXP2000_IRQ_THD_STATUS_A_2 IXP2000_INTCTL_REG(0xe8) | ||
| 162 | #define IXP2000_IRQ_THD_STATUS_A_3 IXP2000_INTCTL_REG(0xec) | ||
| 163 | #define IXP2000_IRQ_THD_STATUS_B_0 IXP2000_INTCTL_REG(0x100) | ||
| 164 | #define IXP2000_IRQ_THD_STATUS_B_1 IXP2000_INTCTL_REG(0x104) | ||
| 165 | #define IXP2000_IRQ_THD_STATUS_B_2 IXP2000_INTCTL_REG(0x108) | ||
| 166 | #define IXP2000_IRQ_THD_STATUS_B_3 IXP2000_INTCTL_REG(0x10c) | ||
| 159 | #define IXP2000_IRQ_THD_ENABLE_SET_A_0 IXP2000_INTCTL_REG(0x160) | 167 | #define IXP2000_IRQ_THD_ENABLE_SET_A_0 IXP2000_INTCTL_REG(0x160) |
| 160 | #define IXP2000_IRQ_THD_ENABLE_SET_A_1 IXP2000_INTCTL_REG(0x164) | 168 | #define IXP2000_IRQ_THD_ENABLE_SET_A_1 IXP2000_INTCTL_REG(0x164) |
| 161 | #define IXP2000_IRQ_THD_ENABLE_SET_A_2 IXP2000_INTCTL_REG(0x168) | 169 | #define IXP2000_IRQ_THD_ENABLE_SET_A_2 IXP2000_INTCTL_REG(0x168) |
diff --git a/include/asm-arm/arch-ixp4xx/coyote.h b/include/asm-arm/arch-ixp4xx/coyote.h index dd0c2d2d8503..7ac9ba2c035c 100644 --- a/include/asm-arm/arch-ixp4xx/coyote.h +++ b/include/asm-arm/arch-ixp4xx/coyote.h | |||
| @@ -16,9 +16,6 @@ | |||
| 16 | #error "Do not include this directly, instead #include <asm/hardware.h>" | 16 | #error "Do not include this directly, instead #include <asm/hardware.h>" |
| 17 | #endif | 17 | #endif |
| 18 | 18 | ||
| 19 | #define COYOTE_FLASH_BASE IXP4XX_EXP_BUS_CS0_BASE_PHYS | ||
| 20 | #define COYOTE_FLASH_SIZE IXP4XX_EXP_BUS_CSX_REGION_SIZE * 2 | ||
| 21 | |||
| 22 | /* PCI controller GPIO to IRQ pin mappings */ | 19 | /* PCI controller GPIO to IRQ pin mappings */ |
| 23 | #define COYOTE_PCI_SLOT0_PIN 6 | 20 | #define COYOTE_PCI_SLOT0_PIN 6 |
| 24 | #define COYOTE_PCI_SLOT1_PIN 11 | 21 | #define COYOTE_PCI_SLOT1_PIN 11 |
| @@ -26,7 +23,7 @@ | |||
| 26 | #define COYOTE_PCI_SLOT0_DEVID 14 | 23 | #define COYOTE_PCI_SLOT0_DEVID 14 |
| 27 | #define COYOTE_PCI_SLOT1_DEVID 15 | 24 | #define COYOTE_PCI_SLOT1_DEVID 15 |
| 28 | 25 | ||
| 29 | #define COYOTE_IDE_BASE_PHYS IXP4XX_EXP_BUS_CS3_BASE_PHYS | 26 | #define COYOTE_IDE_BASE_PHYS IXP4XX_EXP_BUS_BASE(3) |
| 30 | #define COYOTE_IDE_BASE_VIRT 0xFFFE1000 | 27 | #define COYOTE_IDE_BASE_VIRT 0xFFFE1000 |
| 31 | #define COYOTE_IDE_REGION_SIZE 0x1000 | 28 | #define COYOTE_IDE_REGION_SIZE 0x1000 |
| 32 | 29 | ||
diff --git a/include/asm-arm/arch-ixp4xx/dma.h b/include/asm-arm/arch-ixp4xx/dma.h index 312065dc0e7a..b1a071ecebc8 100644 --- a/include/asm-arm/arch-ixp4xx/dma.h +++ b/include/asm-arm/arch-ixp4xx/dma.h | |||
| @@ -20,7 +20,4 @@ | |||
| 20 | 20 | ||
| 21 | #define MAX_DMA_ADDRESS (PAGE_OFFSET + SZ_64M) | 21 | #define MAX_DMA_ADDRESS (PAGE_OFFSET + SZ_64M) |
| 22 | 22 | ||
| 23 | /* No DMA */ | ||
| 24 | #define MAX_DMA_CHANNELS 0 | ||
| 25 | |||
| 26 | #endif /* _ASM_ARCH_DMA_H */ | 23 | #endif /* _ASM_ARCH_DMA_H */ |
diff --git a/include/asm-arm/arch-ixp4xx/entry-macro.S b/include/asm-arm/arch-ixp4xx/entry-macro.S index 323b0bc4a39c..27e124132e4c 100644 --- a/include/asm-arm/arch-ixp4xx/entry-macro.S +++ b/include/asm-arm/arch-ixp4xx/entry-macro.S | |||
| @@ -7,6 +7,7 @@ | |||
| 7 | * License version 2. This program is licensed "as is" without any | 7 | * License version 2. This program is licensed "as is" without any |
| 8 | * warranty of any kind, whether express or implied. | 8 | * warranty of any kind, whether express or implied. |
| 9 | */ | 9 | */ |
| 10 | #include <asm/hardware.h> | ||
| 10 | 11 | ||
| 11 | .macro disable_fiq | 12 | .macro disable_fiq |
| 12 | .endm | 13 | .endm |
diff --git a/include/asm-arm/arch-ixp4xx/gtwx5715.h b/include/asm-arm/arch-ixp4xx/gtwx5715.h index fc460af70627..c3069d67c00e 100644 --- a/include/asm-arm/arch-ixp4xx/gtwx5715.h +++ b/include/asm-arm/arch-ixp4xx/gtwx5715.h | |||
| @@ -57,10 +57,6 @@ | |||
| 57 | #define GTWX5715_GPIO13_IRQ IRQ_IXP4XX_SW_INT1 | 57 | #define GTWX5715_GPIO13_IRQ IRQ_IXP4XX_SW_INT1 |
| 58 | #define GTWX5715_GPIO14_IRQ IRQ_IXP4XX_SW_INT2 | 58 | #define GTWX5715_GPIO14_IRQ IRQ_IXP4XX_SW_INT2 |
| 59 | 59 | ||
| 60 | |||
| 61 | #define GTWX5715_FLASH_BASE IXP4XX_EXP_BUS_CS0_BASE_PHYS | ||
| 62 | #define GTWX5715_FLASH_SIZE (0x00800000) | ||
| 63 | |||
| 64 | /* PCI controller GPIO to IRQ pin mappings | 60 | /* PCI controller GPIO to IRQ pin mappings |
| 65 | 61 | ||
| 66 | INTA INTB | 62 | INTA INTB |
diff --git a/include/asm-arm/arch-ixp4xx/hardware.h b/include/asm-arm/arch-ixp4xx/hardware.h index cfb413c845f7..6acb69c95ef9 100644 --- a/include/asm-arm/arch-ixp4xx/hardware.h +++ b/include/asm-arm/arch-ixp4xx/hardware.h | |||
| @@ -45,5 +45,6 @@ extern unsigned int processor_id; | |||
| 45 | #include "coyote.h" | 45 | #include "coyote.h" |
| 46 | #include "prpmc1100.h" | 46 | #include "prpmc1100.h" |
| 47 | #include "nslu2.h" | 47 | #include "nslu2.h" |
| 48 | #include "nas100d.h" | ||
| 48 | 49 | ||
| 49 | #endif /* _ASM_ARCH_HARDWARE_H */ | 50 | #endif /* _ASM_ARCH_HARDWARE_H */ |
diff --git a/include/asm-arm/arch-ixp4xx/irqs.h b/include/asm-arm/arch-ixp4xx/irqs.h index 2cf4930372bc..f24b763ca18e 100644 --- a/include/asm-arm/arch-ixp4xx/irqs.h +++ b/include/asm-arm/arch-ixp4xx/irqs.h | |||
| @@ -100,4 +100,13 @@ | |||
| 100 | #define IRQ_NSLU2_PCI_INTB IRQ_IXP4XX_GPIO10 | 100 | #define IRQ_NSLU2_PCI_INTB IRQ_IXP4XX_GPIO10 |
| 101 | #define IRQ_NSLU2_PCI_INTC IRQ_IXP4XX_GPIO9 | 101 | #define IRQ_NSLU2_PCI_INTC IRQ_IXP4XX_GPIO9 |
| 102 | 102 | ||
| 103 | /* | ||
| 104 | * NAS100D board IRQs | ||
| 105 | */ | ||
| 106 | #define IRQ_NAS100D_PCI_INTA IRQ_IXP4XX_GPIO11 | ||
| 107 | #define IRQ_NAS100D_PCI_INTB IRQ_IXP4XX_GPIO10 | ||
| 108 | #define IRQ_NAS100D_PCI_INTC IRQ_IXP4XX_GPIO9 | ||
| 109 | #define IRQ_NAS100D_PCI_INTD IRQ_IXP4XX_GPIO8 | ||
| 110 | #define IRQ_NAS100D_PCI_INTE IRQ_IXP4XX_GPIO7 | ||
| 111 | |||
| 103 | #endif | 112 | #endif |
diff --git a/include/asm-arm/arch-ixp4xx/ixdp425.h b/include/asm-arm/arch-ixp4xx/ixdp425.h index 7d21bf941379..3d3820d7ba09 100644 --- a/include/asm-arm/arch-ixp4xx/ixdp425.h +++ b/include/asm-arm/arch-ixp4xx/ixdp425.h | |||
| @@ -16,9 +16,6 @@ | |||
| 16 | #error "Do not include this directly, instead #include <asm/hardware.h>" | 16 | #error "Do not include this directly, instead #include <asm/hardware.h>" |
| 17 | #endif | 17 | #endif |
| 18 | 18 | ||
| 19 | #define IXDP425_FLASH_BASE IXP4XX_EXP_BUS_CS0_BASE_PHYS | ||
| 20 | #define IXDP425_FLASH_SIZE IXP4XX_EXP_BUS_CSX_REGION_SIZE | ||
| 21 | |||
| 22 | #define IXDP425_SDA_PIN 7 | 19 | #define IXDP425_SDA_PIN 7 |
| 23 | #define IXDP425_SCL_PIN 6 | 20 | #define IXDP425_SCL_PIN 6 |
| 24 | 21 | ||
diff --git a/include/asm-arm/arch-ixp4xx/memory.h b/include/asm-arm/arch-ixp4xx/memory.h index e024d0a1a669..ee211d28a3ef 100644 --- a/include/asm-arm/arch-ixp4xx/memory.h +++ b/include/asm-arm/arch-ixp4xx/memory.h | |||
| @@ -16,31 +16,10 @@ | |||
| 16 | 16 | ||
| 17 | #ifndef __ASSEMBLY__ | 17 | #ifndef __ASSEMBLY__ |
| 18 | 18 | ||
| 19 | /* | 19 | void ixp4xx_adjust_zones(int node, unsigned long *size, unsigned long *holes); |
| 20 | * Only first 64MB of memory can be accessed via PCI. | ||
| 21 | * We use GFP_DMA to allocate safe buffers to do map/unmap. | ||
| 22 | * This is really ugly and we need a better way of specifying | ||
| 23 | * DMA-capable regions of memory. | ||
| 24 | */ | ||
| 25 | static inline void __arch_adjust_zones(int node, unsigned long *zone_size, | ||
| 26 | unsigned long *zhole_size) | ||
| 27 | { | ||
| 28 | unsigned int sz = SZ_64M >> PAGE_SHIFT; | ||
| 29 | |||
| 30 | /* | ||
| 31 | * Only adjust if > 64M on current system | ||
| 32 | */ | ||
| 33 | if (node || (zone_size[0] <= sz)) | ||
| 34 | return; | ||
| 35 | |||
| 36 | zone_size[1] = zone_size[0] - sz; | ||
| 37 | zone_size[0] = sz; | ||
| 38 | zhole_size[1] = zhole_size[0]; | ||
| 39 | zhole_size[0] = 0; | ||
| 40 | } | ||
| 41 | 20 | ||
| 42 | #define arch_adjust_zones(node, size, holes) \ | 21 | #define arch_adjust_zones(node, size, holes) \ |
| 43 | __arch_adjust_zones(node, size, holes) | 22 | ixp4xx_adjust_zones(node, size, holes) |
| 44 | 23 | ||
| 45 | #define ISA_DMA_THRESHOLD (SZ_64M - 1) | 24 | #define ISA_DMA_THRESHOLD (SZ_64M - 1) |
| 46 | 25 | ||
diff --git a/include/asm-arm/arch-ixp4xx/nas100d.h b/include/asm-arm/arch-ixp4xx/nas100d.h new file mode 100644 index 000000000000..51ac0180427c --- /dev/null +++ b/include/asm-arm/arch-ixp4xx/nas100d.h | |||
| @@ -0,0 +1,72 @@ | |||
| 1 | /* | ||
| 2 | * include/asm-arm/arch-ixp4xx/nas100d.h | ||
| 3 | * | ||
| 4 | * NAS100D platform specific definitions | ||
| 5 | * | ||
| 6 | * Copyright (c) 2005 Tower Technologies | ||
| 7 | * | ||
| 8 | * Author: Alessandro Zummo <a.zummo@towertech.it> | ||
| 9 | * | ||
| 10 | * based on ixdp425.h: | ||
| 11 | * Copyright 2004 (c) MontaVista, Software, Inc. | ||
| 12 | * | ||
| 13 | * This file is licensed under the terms of the GNU General Public | ||
| 14 | * License version 2. This program is licensed "as is" without any | ||
| 15 | * warranty of any kind, whether express or implied. | ||
| 16 | */ | ||
| 17 | |||
| 18 | #ifndef __ASM_ARCH_HARDWARE_H__ | ||
| 19 | #error "Do not include this directly, instead #include <asm/hardware.h>" | ||
| 20 | #endif | ||
| 21 | |||
| 22 | #define NAS100D_SDA_PIN 6 | ||
| 23 | #define NAS100D_SCL_PIN 5 | ||
| 24 | |||
| 25 | /* | ||
| 26 | * NAS100D PCI IRQs | ||
| 27 | */ | ||
| 28 | #define NAS100D_PCI_MAX_DEV 3 | ||
| 29 | #define NAS100D_PCI_IRQ_LINES 3 | ||
| 30 | |||
| 31 | |||
| 32 | /* PCI controller GPIO to IRQ pin mappings */ | ||
| 33 | #define NAS100D_PCI_INTA_PIN 11 | ||
| 34 | #define NAS100D_PCI_INTB_PIN 10 | ||
| 35 | #define NAS100D_PCI_INTC_PIN 9 | ||
| 36 | #define NAS100D_PCI_INTD_PIN 8 | ||
| 37 | #define NAS100D_PCI_INTE_PIN 7 | ||
| 38 | |||
| 39 | /* GPIO */ | ||
| 40 | |||
| 41 | #define NAS100D_GPIO0 0 | ||
| 42 | #define NAS100D_GPIO1 1 | ||
| 43 | #define NAS100D_GPIO2 2 | ||
| 44 | #define NAS100D_GPIO3 3 | ||
| 45 | #define NAS100D_GPIO4 4 | ||
| 46 | #define NAS100D_GPIO5 5 | ||
| 47 | #define NAS100D_GPIO6 6 | ||
| 48 | #define NAS100D_GPIO7 7 | ||
| 49 | #define NAS100D_GPIO8 8 | ||
| 50 | #define NAS100D_GPIO9 9 | ||
| 51 | #define NAS100D_GPIO10 10 | ||
| 52 | #define NAS100D_GPIO11 11 | ||
| 53 | #define NAS100D_GPIO12 12 | ||
| 54 | #define NAS100D_GPIO13 13 | ||
| 55 | #define NAS100D_GPIO14 14 | ||
| 56 | #define NAS100D_GPIO15 15 | ||
| 57 | |||
| 58 | |||
| 59 | /* Buttons */ | ||
| 60 | |||
| 61 | #define NAS100D_PB_GPIO NAS100D_GPIO14 | ||
| 62 | #define NAS100D_RB_GPIO NAS100D_GPIO4 | ||
| 63 | #define NAS100D_PO_GPIO NAS100D_GPIO12 /* power off */ | ||
| 64 | |||
| 65 | #define NAS100D_PB_IRQ IRQ_IXP4XX_GPIO14 | ||
| 66 | #define NAS100D_RB_IRQ IRQ_IXP4XX_GPIO4 | ||
| 67 | |||
| 68 | /* | ||
| 69 | #define NAS100D_PB_BM (1L << NAS100D_PB_GPIO) | ||
| 70 | #define NAS100D_PO_BM (1L << NAS100D_PO_GPIO) | ||
| 71 | #define NAS100D_RB_BM (1L << NAS100D_RB_GPIO) | ||
| 72 | */ | ||
diff --git a/include/asm-arm/arch-ixp4xx/nslu2.h b/include/asm-arm/arch-ixp4xx/nslu2.h index b8b347a559c7..4281838873ef 100644 --- a/include/asm-arm/arch-ixp4xx/nslu2.h +++ b/include/asm-arm/arch-ixp4xx/nslu2.h | |||
| @@ -18,9 +18,6 @@ | |||
| 18 | #error "Do not include this directly, instead #include <asm/hardware.h>" | 18 | #error "Do not include this directly, instead #include <asm/hardware.h>" |
| 19 | #endif | 19 | #endif |
| 20 | 20 | ||
| 21 | #define NSLU2_FLASH_BASE IXP4XX_EXP_BUS_CS0_BASE_PHYS | ||
| 22 | #define NSLU2_FLASH_SIZE IXP4XX_EXP_BUS_CSX_REGION_SIZE | ||
| 23 | |||
| 24 | #define NSLU2_SDA_PIN 7 | 21 | #define NSLU2_SDA_PIN 7 |
| 25 | #define NSLU2_SCL_PIN 6 | 22 | #define NSLU2_SCL_PIN 6 |
| 26 | 23 | ||
diff --git a/include/asm-arm/arch-ixp4xx/platform.h b/include/asm-arm/arch-ixp4xx/platform.h index f14ed63590c3..daf9790645ca 100644 --- a/include/asm-arm/arch-ixp4xx/platform.h +++ b/include/asm-arm/arch-ixp4xx/platform.h | |||
| @@ -26,16 +26,17 @@ | |||
| 26 | */ | 26 | */ |
| 27 | #define IXP4XX_EXP_BUS_BASE_PHYS (0x50000000) | 27 | #define IXP4XX_EXP_BUS_BASE_PHYS (0x50000000) |
| 28 | 28 | ||
| 29 | #define IXP4XX_EXP_BUS_CSX_REGION_SIZE (0x01000000) | 29 | /* |
| 30 | * The expansion bus on the IXP4xx can be configured for either 16 or | ||
| 31 | * 32MB windows and the CS offset for each region changes based on the | ||
| 32 | * current configuration. This means that we cannot simply hardcode | ||
| 33 | * each offset. ixp4xx_sys_init() looks at the expansion bus configuration | ||
| 34 | * as setup by the bootloader to determine our window size. | ||
| 35 | */ | ||
| 36 | extern unsigned long ixp4xx_exp_bus_size; | ||
| 30 | 37 | ||
| 31 | #define IXP4XX_EXP_BUS_CS0_BASE_PHYS (IXP4XX_EXP_BUS_BASE_PHYS + 0x00000000) | 38 | #define IXP4XX_EXP_BUS_BASE(region)\ |
| 32 | #define IXP4XX_EXP_BUS_CS1_BASE_PHYS (IXP4XX_EXP_BUS_BASE_PHYS + 0x01000000) | 39 | (IXP4XX_EXP_BUS_BASE_PHYS + ((region) * ixp4xx_exp_bus_size)) |
| 33 | #define IXP4XX_EXP_BUS_CS2_BASE_PHYS (IXP4XX_EXP_BUS_BASE_PHYS + 0x02000000) | ||
| 34 | #define IXP4XX_EXP_BUS_CS3_BASE_PHYS (IXP4XX_EXP_BUS_BASE_PHYS + 0x03000000) | ||
| 35 | #define IXP4XX_EXP_BUS_CS4_BASE_PHYS (IXP4XX_EXP_BUS_BASE_PHYS + 0x04000000) | ||
| 36 | #define IXP4XX_EXP_BUS_CS5_BASE_PHYS (IXP4XX_EXP_BUS_BASE_PHYS + 0x05000000) | ||
| 37 | #define IXP4XX_EXP_BUS_CS6_BASE_PHYS (IXP4XX_EXP_BUS_BASE_PHYS + 0x06000000) | ||
| 38 | #define IXP4XX_EXP_BUS_CS7_BASE_PHYS (IXP4XX_EXP_BUS_BASE_PHYS + 0x07000000) | ||
| 39 | 40 | ||
| 40 | #define IXP4XX_FLASH_WRITABLE (0x2) | 41 | #define IXP4XX_FLASH_WRITABLE (0x2) |
| 41 | #define IXP4XX_FLASH_DEFAULT (0xbcd23c40) | 42 | #define IXP4XX_FLASH_DEFAULT (0xbcd23c40) |
| @@ -112,10 +113,5 @@ static inline void gpio_line_set(u8 line, int value) | |||
| 112 | *IXP4XX_GPIO_GPOUTR &= ~(1 << line); | 113 | *IXP4XX_GPIO_GPOUTR &= ~(1 << line); |
| 113 | } | 114 | } |
| 114 | 115 | ||
| 115 | static inline void gpio_line_isr_clear(u8 line) | ||
| 116 | { | ||
| 117 | *IXP4XX_GPIO_GPISR = (1 << line); | ||
| 118 | } | ||
| 119 | |||
| 120 | #endif // __ASSEMBLY__ | 116 | #endif // __ASSEMBLY__ |
| 121 | 117 | ||
diff --git a/include/asm-arm/arch-l7200/dma.h b/include/asm-arm/arch-l7200/dma.h index 6595b386cfc9..4c7eca63f035 100644 --- a/include/asm-arm/arch-l7200/dma.h +++ b/include/asm-arm/arch-l7200/dma.h | |||
| @@ -17,7 +17,6 @@ | |||
| 17 | * bytes of RAM. | 17 | * bytes of RAM. |
| 18 | */ | 18 | */ |
| 19 | #define MAX_DMA_ADDRESS 0xd0000000 | 19 | #define MAX_DMA_ADDRESS 0xd0000000 |
| 20 | #define MAX_DMA_CHANNELS 0 | ||
| 21 | 20 | ||
| 22 | #define DMA_S0 0 | 21 | #define DMA_S0 0 |
| 23 | 22 | ||
diff --git a/include/asm-arm/arch-l7200/system.h b/include/asm-arm/arch-l7200/system.h index cb4ff29059b8..18825cf071ba 100644 --- a/include/asm-arm/arch-l7200/system.h +++ b/include/asm-arm/arch-l7200/system.h | |||
| @@ -12,6 +12,8 @@ | |||
| 12 | #ifndef __ASM_ARCH_SYSTEM_H | 12 | #ifndef __ASM_ARCH_SYSTEM_H |
| 13 | #define __ASM_ARCH_SYSTEM_H | 13 | #define __ASM_ARCH_SYSTEM_H |
| 14 | 14 | ||
| 15 | #include <asm/hardware.h> | ||
| 16 | |||
| 15 | static inline void arch_idle(void) | 17 | static inline void arch_idle(void) |
| 16 | { | 18 | { |
| 17 | *(unsigned long *)(IO_BASE + 0x50004) = 1; /* idle mode */ | 19 | *(unsigned long *)(IO_BASE + 0x50004) = 1; /* idle mode */ |
diff --git a/include/asm-arm/arch-lh7a40x/dma.h b/include/asm-arm/arch-lh7a40x/dma.h index 5797f01e1844..15492e3253f6 100644 --- a/include/asm-arm/arch-lh7a40x/dma.h +++ b/include/asm-arm/arch-lh7a40x/dma.h | |||
| @@ -7,11 +7,3 @@ | |||
| 7 | * version 2 as published by the Free Software Foundation. | 7 | * version 2 as published by the Free Software Foundation. |
| 8 | * | 8 | * |
| 9 | */ | 9 | */ |
| 10 | |||
| 11 | #ifndef __ASM_ARCH_DMA_H | ||
| 12 | #define __ASM_ARCH_DMA_H | ||
| 13 | |||
| 14 | #define MAX_DMA_ADDRESS 0xffffffff | ||
| 15 | #define MAX_DMA_CHANNELS 0 /* All DMA is internal to CPU */ | ||
| 16 | |||
| 17 | #endif /* _ASM_ARCH_DMA_H */ | ||
diff --git a/include/asm-arm/arch-lh7a40x/entry-macro.S b/include/asm-arm/arch-lh7a40x/entry-macro.S index 865f396aa63c..a2f67c06d9c9 100644 --- a/include/asm-arm/arch-lh7a40x/entry-macro.S +++ b/include/asm-arm/arch-lh7a40x/entry-macro.S | |||
| @@ -7,6 +7,8 @@ | |||
| 7 | * License version 2. This program is licensed "as is" without any | 7 | * License version 2. This program is licensed "as is" without any |
| 8 | * warranty of any kind, whether express or implied. | 8 | * warranty of any kind, whether express or implied. |
| 9 | */ | 9 | */ |
| 10 | #include <asm/hardware.h> | ||
| 11 | #include <asm/arch/irqs.h> | ||
| 10 | 12 | ||
| 11 | # if defined (CONFIG_ARCH_LH7A400) && defined (CONFIG_ARCH_LH7A404) | 13 | # if defined (CONFIG_ARCH_LH7A400) && defined (CONFIG_ARCH_LH7A404) |
| 12 | # error "LH7A400 and LH7A404 are mutually exclusive" | 14 | # error "LH7A400 and LH7A404 are mutually exclusive" |
diff --git a/include/asm-arm/arch-omap/dma.h b/include/asm-arm/arch-omap/dma.h index ccbcb580a5c1..d4e73efcb816 100644 --- a/include/asm-arm/arch-omap/dma.h +++ b/include/asm-arm/arch-omap/dma.h | |||
| @@ -21,9 +21,6 @@ | |||
| 21 | #ifndef __ASM_ARCH_DMA_H | 21 | #ifndef __ASM_ARCH_DMA_H |
| 22 | #define __ASM_ARCH_DMA_H | 22 | #define __ASM_ARCH_DMA_H |
| 23 | 23 | ||
| 24 | #define MAX_DMA_ADDRESS 0xffffffff | ||
| 25 | #define MAX_DMA_CHANNELS 0 | ||
| 26 | |||
| 27 | /* Hardware registers for omap1 */ | 24 | /* Hardware registers for omap1 */ |
| 28 | #define OMAP_DMA_BASE (0xfffed800) | 25 | #define OMAP_DMA_BASE (0xfffed800) |
| 29 | #define OMAP_DMA_GCR (OMAP_DMA_BASE + 0x400) | 26 | #define OMAP_DMA_GCR (OMAP_DMA_BASE + 0x400) |
diff --git a/include/asm-arm/arch-omap/entry-macro.S b/include/asm-arm/arch-omap/entry-macro.S index f8814a84910e..0ffb1185f1ac 100644 --- a/include/asm-arm/arch-omap/entry-macro.S +++ b/include/asm-arm/arch-omap/entry-macro.S | |||
| @@ -7,6 +7,8 @@ | |||
| 7 | * License version 2. This program is licensed "as is" without any | 7 | * License version 2. This program is licensed "as is" without any |
| 8 | * warranty of any kind, whether express or implied. | 8 | * warranty of any kind, whether express or implied. |
| 9 | */ | 9 | */ |
| 10 | #include <asm/hardware.h> | ||
| 11 | #include <asm/arch/irqs.h> | ||
| 10 | 12 | ||
| 11 | #if defined(CONFIG_ARCH_OMAP1) | 13 | #if defined(CONFIG_ARCH_OMAP1) |
| 12 | 14 | ||
diff --git a/include/asm-arm/arch-omap/system.h b/include/asm-arm/arch-omap/system.h index 9af415d2944a..6724a81bd10b 100644 --- a/include/asm-arm/arch-omap/system.h +++ b/include/asm-arm/arch-omap/system.h | |||
| @@ -5,8 +5,9 @@ | |||
| 5 | #ifndef __ASM_ARCH_SYSTEM_H | 5 | #ifndef __ASM_ARCH_SYSTEM_H |
| 6 | #define __ASM_ARCH_SYSTEM_H | 6 | #define __ASM_ARCH_SYSTEM_H |
| 7 | #include <linux/config.h> | 7 | #include <linux/config.h> |
| 8 | #include <linux/clk.h> | ||
| 9 | |||
| 8 | #include <asm/mach-types.h> | 10 | #include <asm/mach-types.h> |
| 9 | #include <asm/hardware/clock.h> | ||
| 10 | #include <asm/hardware.h> | 11 | #include <asm/hardware.h> |
| 11 | #include <asm/arch/prcm.h> | 12 | #include <asm/arch/prcm.h> |
| 12 | 13 | ||
diff --git a/include/asm-arm/arch-pxa/dma.h b/include/asm-arm/arch-pxa/dma.h index 56db3d49bfc8..3e88a2a02a0f 100644 --- a/include/asm-arm/arch-pxa/dma.h +++ b/include/asm-arm/arch-pxa/dma.h | |||
| @@ -12,11 +12,6 @@ | |||
| 12 | #ifndef __ASM_ARCH_DMA_H | 12 | #ifndef __ASM_ARCH_DMA_H |
| 13 | #define __ASM_ARCH_DMA_H | 13 | #define __ASM_ARCH_DMA_H |
| 14 | 14 | ||
| 15 | #define MAX_DMA_ADDRESS 0xffffffff | ||
| 16 | |||
| 17 | /* No DMA as the rest of the world see it */ | ||
| 18 | #define MAX_DMA_CHANNELS 0 | ||
| 19 | |||
| 20 | /* | 15 | /* |
| 21 | * Descriptor structure for PXA's DMA engine | 16 | * Descriptor structure for PXA's DMA engine |
| 22 | * Note: this structure must always be aligned to a 16-byte boundary. | 17 | * Note: this structure must always be aligned to a 16-byte boundary. |
diff --git a/include/asm-arm/arch-pxa/entry-macro.S b/include/asm-arm/arch-pxa/entry-macro.S index 2abfc8bb3ee5..4985e33afc12 100644 --- a/include/asm-arm/arch-pxa/entry-macro.S +++ b/include/asm-arm/arch-pxa/entry-macro.S | |||
| @@ -7,6 +7,8 @@ | |||
| 7 | * License version 2. This program is licensed "as is" without any | 7 | * License version 2. This program is licensed "as is" without any |
| 8 | * warranty of any kind, whether express or implied. | 8 | * warranty of any kind, whether express or implied. |
| 9 | */ | 9 | */ |
| 10 | #include <asm/hardware.h> | ||
| 11 | #include <asm/arch/irqs.h> | ||
| 10 | 12 | ||
| 11 | .macro disable_fiq | 13 | .macro disable_fiq |
| 12 | .endm | 14 | .endm |
diff --git a/include/asm-arm/arch-pxa/pxa-regs.h b/include/asm-arm/arch-pxa/pxa-regs.h index a75a2470f4f5..dae138b9cac5 100644 --- a/include/asm-arm/arch-pxa/pxa-regs.h +++ b/include/asm-arm/arch-pxa/pxa-regs.h | |||
| @@ -2042,6 +2042,18 @@ | |||
| 2042 | 2042 | ||
| 2043 | #ifdef CONFIG_PXA27x | 2043 | #ifdef CONFIG_PXA27x |
| 2044 | 2044 | ||
| 2045 | #define ARB_CNTRL __REG(0x48000048) /* Arbiter Control Register */ | ||
| 2046 | |||
| 2047 | #define ARB_DMA_SLV_PARK (1<<31) /* Be parked with DMA slave when idle */ | ||
| 2048 | #define ARB_CI_PARK (1<<30) /* Be parked with Camera Interface when idle */ | ||
| 2049 | #define ARB_EX_MEM_PARK (1<<29) /* Be parked with external MEMC when idle */ | ||
| 2050 | #define ARB_INT_MEM_PARK (1<<28) /* Be parked with internal MEMC when idle */ | ||
| 2051 | #define ARB_USB_PARK (1<<27) /* Be parked with USB when idle */ | ||
| 2052 | #define ARB_LCD_PARK (1<<26) /* Be parked with LCD when idle */ | ||
| 2053 | #define ARB_DMA_PARK (1<<25) /* Be parked with DMA when idle */ | ||
| 2054 | #define ARB_CORE_PARK (1<<24) /* Be parked with core when idle */ | ||
| 2055 | #define ARB_LOCK_FLAG (1<<23) /* Only Locking masters gain access to the bus */ | ||
| 2056 | |||
| 2045 | /* | 2057 | /* |
| 2046 | * Keypad | 2058 | * Keypad |
| 2047 | */ | 2059 | */ |
diff --git a/include/asm-arm/arch-realview/debug-macro.S b/include/asm-arm/arch-realview/debug-macro.S index ed28bd012236..017ad996848d 100644 --- a/include/asm-arm/arch-realview/debug-macro.S +++ b/include/asm-arm/arch-realview/debug-macro.S | |||
| @@ -11,7 +11,7 @@ | |||
| 11 | * | 11 | * |
| 12 | */ | 12 | */ |
| 13 | 13 | ||
| 14 | #include <asm/hardware/amba_serial.h> | 14 | #include <linux/amba/serial.h> |
| 15 | 15 | ||
| 16 | .macro addruart,rx | 16 | .macro addruart,rx |
| 17 | mrc p15, 0, \rx, c1, c0 | 17 | mrc p15, 0, \rx, c1, c0 |
diff --git a/include/asm-arm/arch-realview/dma.h b/include/asm-arm/arch-realview/dma.h index 744491a74bd9..8342e3f9d6ec 100644 --- a/include/asm-arm/arch-realview/dma.h +++ b/include/asm-arm/arch-realview/dma.h | |||
| @@ -18,10 +18,3 @@ | |||
| 18 | * along with this program; if not, write to the Free Software | 18 | * along with this program; if not, write to the Free Software |
| 19 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | 19 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
| 20 | */ | 20 | */ |
| 21 | #ifndef __ASM_ARCH_DMA_H | ||
| 22 | #define __ASM_ARCH_DMA_H | ||
| 23 | |||
| 24 | #define MAX_DMA_ADDRESS 0xffffffff | ||
| 25 | #define MAX_DMA_CHANNELS 0 | ||
| 26 | |||
| 27 | #endif /* _ASM_ARCH_DMA_H */ | ||
diff --git a/include/asm-arm/arch-realview/entry-macro.S b/include/asm-arm/arch-realview/entry-macro.S index 6288fad0dc41..1a6eec86bd47 100644 --- a/include/asm-arm/arch-realview/entry-macro.S +++ b/include/asm-arm/arch-realview/entry-macro.S | |||
| @@ -7,7 +7,7 @@ | |||
| 7 | * License version 2. This program is licensed "as is" without any | 7 | * License version 2. This program is licensed "as is" without any |
| 8 | * warranty of any kind, whether express or implied. | 8 | * warranty of any kind, whether express or implied. |
| 9 | */ | 9 | */ |
| 10 | 10 | #include <asm/hardware.h> | |
| 11 | #include <asm/hardware/gic.h> | 11 | #include <asm/hardware/gic.h> |
| 12 | 12 | ||
| 13 | .macro disable_fiq | 13 | .macro disable_fiq |
diff --git a/include/asm-arm/arch-rpc/entry-macro.S b/include/asm-arm/arch-rpc/entry-macro.S index 686f413f82d6..c9e5395e5106 100644 --- a/include/asm-arm/arch-rpc/entry-macro.S +++ b/include/asm-arm/arch-rpc/entry-macro.S | |||
| @@ -1,3 +1,3 @@ | |||
| 1 | 1 | #include <asm/hardware.h> | |
| 2 | #include <asm/hardware/entry-macro-iomd.S> | 2 | #include <asm/hardware/entry-macro-iomd.S> |
| 3 | 3 | ||
diff --git a/include/asm-arm/arch-s3c2410/dma.h b/include/asm-arm/arch-s3c2410/dma.h index e830a40e573a..b011e14f3bc6 100644 --- a/include/asm-arm/arch-s3c2410/dma.h +++ b/include/asm-arm/arch-s3c2410/dma.h | |||
| @@ -31,14 +31,6 @@ | |||
| 31 | #define MAX_DMA_TRANSFER_SIZE 0x100000 /* Data Unit is half word */ | 31 | #define MAX_DMA_TRANSFER_SIZE 0x100000 /* Data Unit is half word */ |
| 32 | 32 | ||
| 33 | 33 | ||
| 34 | /* according to the samsung port, we cannot use the regular | ||
| 35 | * dma channels... we must therefore provide our own interface | ||
| 36 | * for DMA, and allow our drivers to use that. | ||
| 37 | */ | ||
| 38 | |||
| 39 | #define MAX_DMA_CHANNELS 0 | ||
| 40 | |||
| 41 | |||
| 42 | /* we have 4 dma channels */ | 34 | /* we have 4 dma channels */ |
| 43 | #define S3C2410_DMA_CHANNELS (4) | 35 | #define S3C2410_DMA_CHANNELS (4) |
| 44 | 36 | ||
diff --git a/include/asm-arm/arch-s3c2410/entry-macro.S b/include/asm-arm/arch-s3c2410/entry-macro.S index b7d4d7f4422d..cc06b1bd37b2 100644 --- a/include/asm-arm/arch-s3c2410/entry-macro.S +++ b/include/asm-arm/arch-s3c2410/entry-macro.S | |||
| @@ -10,6 +10,8 @@ | |||
| 10 | * Modifications: | 10 | * Modifications: |
| 11 | * 10-Mar-2005 LCVR Changed S3C2410_VA to S3C24XX_VA | 11 | * 10-Mar-2005 LCVR Changed S3C2410_VA to S3C24XX_VA |
| 12 | */ | 12 | */ |
| 13 | #include <asm/hardware.h> | ||
| 14 | #include <asm/arch/irqs.h> | ||
| 13 | 15 | ||
| 14 | 16 | ||
| 15 | .macro get_irqnr_and_base, irqnr, irqstat, base, tmp | 17 | .macro get_irqnr_and_base, irqnr, irqstat, base, tmp |
diff --git a/include/asm-arm/arch-sa1100/dma.h b/include/asm-arm/arch-sa1100/dma.h index 3d60ed9f8c34..02575d72ac6b 100644 --- a/include/asm-arm/arch-sa1100/dma.h +++ b/include/asm-arm/arch-sa1100/dma.h | |||
| @@ -15,20 +15,6 @@ | |||
| 15 | 15 | ||
| 16 | 16 | ||
| 17 | /* | 17 | /* |
| 18 | * This is the maximum DMA address that can be DMAd to. | ||
| 19 | */ | ||
| 20 | #define MAX_DMA_ADDRESS 0xffffffff | ||
| 21 | |||
| 22 | |||
| 23 | /* | ||
| 24 | * The regular generic DMA interface is inappropriate for the | ||
| 25 | * SA1100 DMA model. None of the SA1100 specific drivers using | ||
| 26 | * DMA are portable anyway so it's pointless to try to twist the | ||
| 27 | * regular DMA API to accommodate them. | ||
| 28 | */ | ||
| 29 | #define MAX_DMA_CHANNELS 0 | ||
| 30 | |||
| 31 | /* | ||
| 32 | * The SA1100 has six internal DMA channels. | 18 | * The SA1100 has six internal DMA channels. |
| 33 | */ | 19 | */ |
| 34 | #define SA1100_DMA_CHANNELS 6 | 20 | #define SA1100_DMA_CHANNELS 6 |
diff --git a/include/asm-arm/arch-versatile/debug-macro.S b/include/asm-arm/arch-versatile/debug-macro.S index 89e38ac1444e..ef6167116dbb 100644 --- a/include/asm-arm/arch-versatile/debug-macro.S +++ b/include/asm-arm/arch-versatile/debug-macro.S | |||
| @@ -11,7 +11,7 @@ | |||
| 11 | * | 11 | * |
| 12 | */ | 12 | */ |
| 13 | 13 | ||
| 14 | #include <asm/hardware/amba_serial.h> | 14 | #include <linux/amba/serial.h> |
| 15 | 15 | ||
| 16 | .macro addruart,rx | 16 | .macro addruart,rx |
| 17 | mrc p15, 0, \rx, c1, c0 | 17 | mrc p15, 0, \rx, c1, c0 |
diff --git a/include/asm-arm/arch-versatile/dma.h b/include/asm-arm/arch-versatile/dma.h index dcc8ac26eac0..642577348623 100644 --- a/include/asm-arm/arch-versatile/dma.h +++ b/include/asm-arm/arch-versatile/dma.h | |||
| @@ -18,10 +18,3 @@ | |||
| 18 | * along with this program; if not, write to the Free Software | 18 | * along with this program; if not, write to the Free Software |
| 19 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | 19 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
| 20 | */ | 20 | */ |
| 21 | #ifndef __ASM_ARCH_DMA_H | ||
| 22 | #define __ASM_ARCH_DMA_H | ||
| 23 | |||
| 24 | #define MAX_DMA_ADDRESS 0xffffffff | ||
| 25 | #define MAX_DMA_CHANNELS 0 | ||
| 26 | |||
| 27 | #endif /* _ASM_ARCH_DMA_H */ | ||
diff --git a/include/asm-arm/arch-versatile/entry-macro.S b/include/asm-arm/arch-versatile/entry-macro.S index 90e4e970d253..58f0d71759f6 100644 --- a/include/asm-arm/arch-versatile/entry-macro.S +++ b/include/asm-arm/arch-versatile/entry-macro.S | |||
| @@ -7,7 +7,9 @@ | |||
| 7 | * License version 2. This program is licensed "as is" without any | 7 | * License version 2. This program is licensed "as is" without any |
| 8 | * warranty of any kind, whether express or implied. | 8 | * warranty of any kind, whether express or implied. |
| 9 | */ | 9 | */ |
| 10 | .macro disable_fiq | 10 | #include <asm/hardware.h> |
| 11 | |||
| 12 | .macro disable_fiq | ||
| 11 | .endm | 13 | .endm |
| 12 | 14 | ||
| 13 | .macro get_irqnr_and_base, irqnr, irqstat, base, tmp | 15 | .macro get_irqnr_and_base, irqnr, irqstat, base, tmp |
diff --git a/include/asm-arm/byteorder.h b/include/asm-arm/byteorder.h index d648a1915c33..741f5bc5d016 100644 --- a/include/asm-arm/byteorder.h +++ b/include/asm-arm/byteorder.h | |||
| @@ -15,9 +15,23 @@ | |||
| 15 | #ifndef __ASM_ARM_BYTEORDER_H | 15 | #ifndef __ASM_ARM_BYTEORDER_H |
| 16 | #define __ASM_ARM_BYTEORDER_H | 16 | #define __ASM_ARM_BYTEORDER_H |
| 17 | 17 | ||
| 18 | 18 | #include <linux/compiler.h> | |
| 19 | #include <asm/types.h> | 19 | #include <asm/types.h> |
| 20 | 20 | ||
| 21 | static inline __attribute_const__ __u32 ___arch__swab32(__u32 x) | ||
| 22 | { | ||
| 23 | __u32 t; | ||
| 24 | |||
| 25 | t = x ^ ((x << 16) | (x >> 16)); /* eor r1,r0,r0,ror #16 */ | ||
| 26 | x = (x << 24) | (x >> 8); /* mov r0,r0,ror #8 */ | ||
| 27 | t &= ~0x00FF0000; /* bic r1,r1,#0x00FF0000 */ | ||
| 28 | x ^= (t >> 8); /* eor r0,r0,r1,lsr #8 */ | ||
| 29 | |||
| 30 | return x; | ||
| 31 | } | ||
| 32 | |||
| 33 | #define __arch__swab32(x) ___arch__swab32(x) | ||
| 34 | |||
| 21 | #if !defined(__STRICT_ANSI__) || defined(__KERNEL__) | 35 | #if !defined(__STRICT_ANSI__) || defined(__KERNEL__) |
| 22 | # define __BYTEORDER_HAS_U64__ | 36 | # define __BYTEORDER_HAS_U64__ |
| 23 | # define __SWAB_64_THRU_32__ | 37 | # define __SWAB_64_THRU_32__ |
diff --git a/include/asm-arm/cacheflush.h b/include/asm-arm/cacheflush.h index e81baff4f54b..09e19a783a51 100644 --- a/include/asm-arm/cacheflush.h +++ b/include/asm-arm/cacheflush.h | |||
| @@ -14,7 +14,6 @@ | |||
| 14 | #include <linux/sched.h> | 14 | #include <linux/sched.h> |
| 15 | #include <linux/mm.h> | 15 | #include <linux/mm.h> |
| 16 | 16 | ||
| 17 | #include <asm/mman.h> | ||
| 18 | #include <asm/glue.h> | 17 | #include <asm/glue.h> |
| 19 | #include <asm/shmparam.h> | 18 | #include <asm/shmparam.h> |
| 20 | 19 | ||
diff --git a/include/asm-arm/dma.h b/include/asm-arm/dma.h index ef41df43a584..49c01e2bf7c8 100644 --- a/include/asm-arm/dma.h +++ b/include/asm-arm/dma.h | |||
| @@ -10,6 +10,13 @@ typedef unsigned int dmach_t; | |||
| 10 | #include <asm/arch/dma.h> | 10 | #include <asm/arch/dma.h> |
| 11 | 11 | ||
| 12 | /* | 12 | /* |
| 13 | * This is the maximum virtual address which can be DMA'd from. | ||
| 14 | */ | ||
| 15 | #ifndef MAX_DMA_ADDRESS | ||
| 16 | #define MAX_DMA_ADDRESS 0xffffffff | ||
| 17 | #endif | ||
| 18 | |||
| 19 | /* | ||
| 13 | * DMA modes | 20 | * DMA modes |
| 14 | */ | 21 | */ |
| 15 | typedef unsigned int dmamode_t; | 22 | typedef unsigned int dmamode_t; |
| @@ -91,7 +98,9 @@ extern void set_dma_sg(dmach_t channel, struct scatterlist *sg, int nr_sg); | |||
| 91 | * especially since some DMA architectures don't update the | 98 | * especially since some DMA architectures don't update the |
| 92 | * DMA address immediately, but defer it to the enable_dma(). | 99 | * DMA address immediately, but defer it to the enable_dma(). |
| 93 | */ | 100 | */ |
| 94 | extern void set_dma_addr(dmach_t channel, unsigned long physaddr); | 101 | extern void __set_dma_addr(dmach_t channel, void *addr); |
| 102 | #define set_dma_addr(channel, addr) \ | ||
| 103 | __set_dma_addr(channel, bus_to_virt(addr)) | ||
| 95 | 104 | ||
| 96 | /* Set the DMA byte count for this channel | 105 | /* Set the DMA byte count for this channel |
| 97 | * | 106 | * |
diff --git a/include/asm-arm/hardware/sharpsl_pm.h b/include/asm-arm/hardware/sharpsl_pm.h new file mode 100644 index 000000000000..36983e5f3665 --- /dev/null +++ b/include/asm-arm/hardware/sharpsl_pm.h | |||
| @@ -0,0 +1,94 @@ | |||
| 1 | /* | ||
| 2 | * SharpSL Battery/PM Driver | ||
| 3 | * | ||
| 4 | * Copyright (c) 2004-2005 Richard Purdie | ||
| 5 | * | ||
| 6 | * This program is free software; you can redistribute it and/or modify | ||
| 7 | * it under the terms of the GNU General Public License version 2 as | ||
| 8 | * published by the Free Software Foundation. | ||
| 9 | * | ||
| 10 | */ | ||
| 11 | |||
| 12 | #include <linux/interrupt.h> | ||
| 13 | |||
| 14 | struct sharpsl_charger_machinfo { | ||
| 15 | void (*init)(void); | ||
| 16 | void (*exit)(void); | ||
| 17 | int gpio_acin; | ||
| 18 | int gpio_batfull; | ||
| 19 | int gpio_batlock; | ||
| 20 | int gpio_fatal; | ||
| 21 | void (*discharge)(int); | ||
| 22 | void (*discharge1)(int); | ||
| 23 | void (*charge)(int); | ||
| 24 | void (*measure_temp)(int); | ||
| 25 | void (*presuspend)(void); | ||
| 26 | void (*postsuspend)(void); | ||
| 27 | unsigned long (*read_devdata)(int); | ||
| 28 | #define SHARPSL_BATT_VOLT 1 | ||
| 29 | #define SHARPSL_BATT_TEMP 2 | ||
| 30 | #define SHARPSL_ACIN_VOLT 3 | ||
| 31 | #define SHARPSL_STATUS_ACIN 4 | ||
| 32 | #define SHARPSL_STATUS_LOCK 5 | ||
| 33 | #define SHARPSL_STATUS_CHRGFULL 6 | ||
| 34 | #define SHARPSL_STATUS_FATAL 7 | ||
| 35 | unsigned long (*charger_wakeup)(void); | ||
| 36 | int (*should_wakeup)(unsigned int resume_on_alarm); | ||
| 37 | int bat_levels; | ||
| 38 | struct battery_thresh *bat_levels_noac; | ||
| 39 | struct battery_thresh *bat_levels_acin; | ||
| 40 | int status_high_acin; | ||
| 41 | int status_low_acin; | ||
| 42 | int status_high_noac; | ||
| 43 | int status_low_noac; | ||
| 44 | }; | ||
| 45 | |||
| 46 | struct battery_thresh { | ||
| 47 | int voltage; | ||
| 48 | int percentage; | ||
| 49 | }; | ||
| 50 | |||
| 51 | struct battery_stat { | ||
| 52 | int ac_status; /* APM AC Present/Not Present */ | ||
| 53 | int mainbat_status; /* APM Main Battery Status */ | ||
| 54 | int mainbat_percent; /* Main Battery Percentage Charge */ | ||
| 55 | int mainbat_voltage; /* Main Battery Voltage */ | ||
| 56 | }; | ||
| 57 | |||
| 58 | struct sharpsl_pm_status { | ||
| 59 | struct device *dev; | ||
| 60 | struct timer_list ac_timer; | ||
| 61 | struct timer_list chrg_full_timer; | ||
| 62 | |||
| 63 | int charge_mode; | ||
| 64 | #define CHRG_ERROR (-1) | ||
| 65 | #define CHRG_OFF (0) | ||
| 66 | #define CHRG_ON (1) | ||
| 67 | #define CHRG_DONE (2) | ||
| 68 | |||
| 69 | unsigned int flags; | ||
| 70 | #define SHARPSL_SUSPENDED (1 << 0) /* Device is Suspended */ | ||
| 71 | #define SHARPSL_ALARM_ACTIVE (1 << 1) /* Alarm is for charging event (not user) */ | ||
| 72 | #define SHARPSL_BL_LIMIT (1 << 2) /* Backlight Intensity Limited */ | ||
| 73 | #define SHARPSL_APM_QUEUED (1 << 3) /* APM Event Queued */ | ||
| 74 | #define SHARPSL_DO_OFFLINE_CHRG (1 << 4) /* Trigger the offline charger */ | ||
| 75 | |||
| 76 | int full_count; | ||
| 77 | unsigned long charge_start_time; | ||
| 78 | struct sharpsl_charger_machinfo *machinfo; | ||
| 79 | struct battery_stat battstat; | ||
| 80 | }; | ||
| 81 | |||
| 82 | extern struct sharpsl_pm_status sharpsl_pm; | ||
| 83 | |||
| 84 | |||
| 85 | #define SHARPSL_LED_ERROR 2 | ||
| 86 | #define SHARPSL_LED_ON 1 | ||
| 87 | #define SHARPSL_LED_OFF 0 | ||
| 88 | |||
| 89 | void sharpsl_battery_kick(void); | ||
| 90 | void sharpsl_pm_led(int val); | ||
| 91 | irqreturn_t sharpsl_ac_isr(int irq, void *dev_id, struct pt_regs *fp); | ||
| 92 | irqreturn_t sharpsl_chrg_full_isr(int irq, void *dev_id, struct pt_regs *fp); | ||
| 93 | irqreturn_t sharpsl_fatal_isr(int irq, void *dev_id, struct pt_regs *fp); | ||
| 94 | |||
diff --git a/include/asm-arm/mach/dma.h b/include/asm-arm/mach/dma.h index 31bf716106ee..e7c4a20aad53 100644 --- a/include/asm-arm/mach/dma.h +++ b/include/asm-arm/mach/dma.h | |||
| @@ -25,13 +25,15 @@ struct dma_ops { | |||
| 25 | }; | 25 | }; |
| 26 | 26 | ||
| 27 | struct dma_struct { | 27 | struct dma_struct { |
| 28 | void *addr; /* single DMA address */ | ||
| 29 | unsigned long count; /* single DMA size */ | ||
| 28 | struct scatterlist buf; /* single DMA */ | 30 | struct scatterlist buf; /* single DMA */ |
| 29 | int sgcount; /* number of DMA SG */ | 31 | int sgcount; /* number of DMA SG */ |
| 30 | struct scatterlist *sg; /* DMA Scatter-Gather List */ | 32 | struct scatterlist *sg; /* DMA Scatter-Gather List */ |
| 31 | 33 | ||
| 32 | unsigned int active:1; /* Transfer active */ | 34 | unsigned int active:1; /* Transfer active */ |
| 33 | unsigned int invalid:1; /* Address/Count changed */ | 35 | unsigned int invalid:1; /* Address/Count changed */ |
| 34 | unsigned int using_sg:1; /* using scatter list? */ | 36 | |
| 35 | dmamode_t dma_mode; /* DMA mode */ | 37 | dmamode_t dma_mode; /* DMA mode */ |
| 36 | int speed; /* DMA speed */ | 38 | int speed; /* DMA speed */ |
| 37 | 39 | ||
diff --git a/include/asm-arm/scatterlist.h b/include/asm-arm/scatterlist.h index 83b876fb04cc..de2f65eb42ed 100644 --- a/include/asm-arm/scatterlist.h +++ b/include/asm-arm/scatterlist.h | |||
| @@ -9,7 +9,6 @@ struct scatterlist { | |||
| 9 | unsigned int offset; /* buffer offset */ | 9 | unsigned int offset; /* buffer offset */ |
| 10 | dma_addr_t dma_address; /* dma address */ | 10 | dma_addr_t dma_address; /* dma address */ |
| 11 | unsigned int length; /* length */ | 11 | unsigned int length; /* length */ |
| 12 | char *__address; /* for set_dma_addr */ | ||
| 13 | }; | 12 | }; |
| 14 | 13 | ||
| 15 | /* | 14 | /* |
diff --git a/include/asm-arm/hardware/amba.h b/include/linux/amba/bus.h index 51e6e54b2aa1..51e6e54b2aa1 100644 --- a/include/asm-arm/hardware/amba.h +++ b/include/linux/amba/bus.h | |||
diff --git a/include/asm-arm/hardware/amba_clcd.h b/include/linux/amba/clcd.h index 6b8d73dc1ab0..6b8d73dc1ab0 100644 --- a/include/asm-arm/hardware/amba_clcd.h +++ b/include/linux/amba/clcd.h | |||
diff --git a/include/asm-arm/hardware/amba_kmi.h b/include/linux/amba/kmi.h index a39e5be751b3..a39e5be751b3 100644 --- a/include/asm-arm/hardware/amba_kmi.h +++ b/include/linux/amba/kmi.h | |||
diff --git a/include/asm-arm/hardware/amba_serial.h b/include/linux/amba/serial.h index dc726ffccebd..dc726ffccebd 100644 --- a/include/asm-arm/hardware/amba_serial.h +++ b/include/linux/amba/serial.h | |||
diff --git a/include/asm-arm/hardware/clock.h b/include/linux/clk.h index 19da861e523d..12848f81bb37 100644 --- a/include/asm-arm/hardware/clock.h +++ b/include/linux/clk.h | |||
| @@ -1,5 +1,5 @@ | |||
| 1 | /* | 1 | /* |
| 2 | * linux/include/asm-arm/hardware/clock.h | 2 | * linux/include/linux/clk.h |
| 3 | * | 3 | * |
| 4 | * Copyright (C) 2004 ARM Limited. | 4 | * Copyright (C) 2004 ARM Limited. |
| 5 | * Written by Deep Blue Solutions Limited. | 5 | * Written by Deep Blue Solutions Limited. |
| @@ -33,6 +33,8 @@ struct clk; | |||
| 33 | * uses @dev and @id to determine the clock consumer, and thereby | 33 | * uses @dev and @id to determine the clock consumer, and thereby |
| 34 | * the clock producer. (IOW, @id may be identical strings, but | 34 | * the clock producer. (IOW, @id may be identical strings, but |
| 35 | * clk_get may return different clock producers depending on @dev.) | 35 | * clk_get may return different clock producers depending on @dev.) |
| 36 | * | ||
| 37 | * Drivers must assume that the clock source is not enabled. | ||
| 36 | */ | 38 | */ |
| 37 | struct clk *clk_get(struct device *dev, const char *id); | 39 | struct clk *clk_get(struct device *dev, const char *id); |
| 38 | 40 | ||
| @@ -49,22 +51,16 @@ int clk_enable(struct clk *clk); | |||
| 49 | /** | 51 | /** |
| 50 | * clk_disable - inform the system when the clock source is no longer required. | 52 | * clk_disable - inform the system when the clock source is no longer required. |
| 51 | * @clk: clock source | 53 | * @clk: clock source |
| 52 | */ | ||
| 53 | void clk_disable(struct clk *clk); | ||
| 54 | |||
| 55 | /** | ||
| 56 | * clk_use - increment the use count | ||
| 57 | * @clk: clock source | ||
| 58 | * | 54 | * |
| 59 | * Returns success (0) or negative errno. | 55 | * Inform the system that a clock source is no longer required by |
| 60 | */ | 56 | * a driver and may be shut down. |
| 61 | int clk_use(struct clk *clk); | 57 | * |
| 62 | 58 | * Implementation detail: if the clock source is shared between | |
| 63 | /** | 59 | * multiple drivers, clk_enable() calls must be balanced by the |
| 64 | * clk_unuse - decrement the use count | 60 | * same number of clk_disable() calls for the clock source to be |
| 65 | * @clk: clock source | 61 | * disabled. |
| 66 | */ | 62 | */ |
| 67 | void clk_unuse(struct clk *clk); | 63 | void clk_disable(struct clk *clk); |
| 68 | 64 | ||
| 69 | /** | 65 | /** |
| 70 | * clk_get_rate - obtain the current clock rate (in Hz) for a clock source. | 66 | * clk_get_rate - obtain the current clock rate (in Hz) for a clock source. |
| @@ -76,6 +72,10 @@ unsigned long clk_get_rate(struct clk *clk); | |||
| 76 | /** | 72 | /** |
| 77 | * clk_put - "free" the clock source | 73 | * clk_put - "free" the clock source |
| 78 | * @clk: clock source | 74 | * @clk: clock source |
| 75 | * | ||
| 76 | * Note: drivers must ensure that all clk_enable calls made on this | ||
| 77 | * clock source are balanced by clk_disable calls prior to calling | ||
| 78 | * this function. | ||
| 79 | */ | 79 | */ |
| 80 | void clk_put(struct clk *clk); | 80 | void clk_put(struct clk *clk); |
| 81 | 81 | ||
diff --git a/sound/arm/aaci.c b/sound/arm/aaci.c index 5e9a81ab990b..54147c1f6361 100644 --- a/sound/arm/aaci.c +++ b/sound/arm/aaci.c | |||
| @@ -17,11 +17,11 @@ | |||
| 17 | #include <linux/spinlock.h> | 17 | #include <linux/spinlock.h> |
| 18 | #include <linux/interrupt.h> | 18 | #include <linux/interrupt.h> |
| 19 | #include <linux/err.h> | 19 | #include <linux/err.h> |
| 20 | #include <linux/amba/bus.h> | ||
| 20 | 21 | ||
| 21 | #include <asm/io.h> | 22 | #include <asm/io.h> |
| 22 | #include <asm/irq.h> | 23 | #include <asm/irq.h> |
| 23 | #include <asm/sizes.h> | 24 | #include <asm/sizes.h> |
| 24 | #include <asm/hardware/amba.h> | ||
| 25 | 25 | ||
| 26 | #include <sound/driver.h> | 26 | #include <sound/driver.h> |
| 27 | #include <sound/core.h> | 27 | #include <sound/core.h> |
