diff options
Diffstat (limited to 'arch/arm/mach-sa1100')
-rw-r--r-- | arch/arm/mach-sa1100/Kconfig | 2 | ||||
-rw-r--r-- | arch/arm/mach-sa1100/Makefile | 2 | ||||
-rw-r--r-- | arch/arm/mach-sa1100/assabet.c | 1 | ||||
-rw-r--r-- | arch/arm/mach-sa1100/clock.c | 132 | ||||
-rw-r--r-- | arch/arm/mach-sa1100/collie.c | 30 | ||||
-rw-r--r-- | arch/arm/mach-sa1100/collie_pm.c | 278 | ||||
-rw-r--r-- | arch/arm/mach-sa1100/cpu-sa1100.c | 2 | ||||
-rw-r--r-- | arch/arm/mach-sa1100/generic.c | 6 |
8 files changed, 450 insertions, 3 deletions
diff --git a/arch/arm/mach-sa1100/Kconfig b/arch/arm/mach-sa1100/Kconfig index 6923316b3d0d..cd67ab1b217b 100644 --- a/arch/arm/mach-sa1100/Kconfig +++ b/arch/arm/mach-sa1100/Kconfig | |||
@@ -111,7 +111,7 @@ config SA1100_LART | |||
111 | bool "LART" | 111 | bool "LART" |
112 | help | 112 | help |
113 | Say Y here if you are using the Linux Advanced Radio Terminal | 113 | Say Y here if you are using the Linux Advanced Radio Terminal |
114 | (also known as the LART). See <http://www.lart.tudelft.nl/> for | 114 | (also known as the LART). See <http://www.lartmaker.nl/> for |
115 | information on the LART. | 115 | information on the LART. |
116 | 116 | ||
117 | config SA1100_PLEB | 117 | config SA1100_PLEB |
diff --git a/arch/arm/mach-sa1100/Makefile b/arch/arm/mach-sa1100/Makefile index e4a4a3e8aa8f..e27f15042a22 100644 --- a/arch/arm/mach-sa1100/Makefile +++ b/arch/arm/mach-sa1100/Makefile | |||
@@ -3,7 +3,7 @@ | |||
3 | # | 3 | # |
4 | 4 | ||
5 | # Common support | 5 | # Common support |
6 | obj-y := generic.o irq.o dma.o time.o | 6 | obj-y := clock.o generic.o irq.o dma.o time.o #nmi-oopser.o |
7 | obj-m := | 7 | obj-m := |
8 | obj-n := | 8 | obj-n := |
9 | obj- := | 9 | obj- := |
diff --git a/arch/arm/mach-sa1100/assabet.c b/arch/arm/mach-sa1100/assabet.c index a599bb0d4ab8..c58f12ba7a93 100644 --- a/arch/arm/mach-sa1100/assabet.c +++ b/arch/arm/mach-sa1100/assabet.c | |||
@@ -26,6 +26,7 @@ | |||
26 | #include <asm/irq.h> | 26 | #include <asm/irq.h> |
27 | #include <asm/setup.h> | 27 | #include <asm/setup.h> |
28 | #include <asm/page.h> | 28 | #include <asm/page.h> |
29 | #include <asm/pgtable-hwdef.h> | ||
29 | #include <asm/pgtable.h> | 30 | #include <asm/pgtable.h> |
30 | #include <asm/tlbflush.h> | 31 | #include <asm/tlbflush.h> |
31 | 32 | ||
diff --git a/arch/arm/mach-sa1100/clock.c b/arch/arm/mach-sa1100/clock.c new file mode 100644 index 000000000000..b1e8fd766c1a --- /dev/null +++ b/arch/arm/mach-sa1100/clock.c | |||
@@ -0,0 +1,132 @@ | |||
1 | /* | ||
2 | * linux/arch/arm/mach-sa1100/clock.c | ||
3 | */ | ||
4 | #include <linux/module.h> | ||
5 | #include <linux/kernel.h> | ||
6 | #include <linux/list.h> | ||
7 | #include <linux/errno.h> | ||
8 | #include <linux/err.h> | ||
9 | #include <linux/string.h> | ||
10 | #include <linux/clk.h> | ||
11 | #include <linux/spinlock.h> | ||
12 | |||
13 | #include <asm/hardware.h> | ||
14 | #include <asm/semaphore.h> | ||
15 | |||
16 | struct clk { | ||
17 | struct list_head node; | ||
18 | unsigned long rate; | ||
19 | struct module *owner; | ||
20 | const char *name; | ||
21 | unsigned int enabled; | ||
22 | void (*enable)(void); | ||
23 | void (*disable)(void); | ||
24 | }; | ||
25 | |||
26 | static LIST_HEAD(clocks); | ||
27 | static DECLARE_MUTEX(clocks_sem); | ||
28 | static DEFINE_SPINLOCK(clocks_lock); | ||
29 | |||
30 | struct clk *clk_get(struct device *dev, const char *id) | ||
31 | { | ||
32 | struct clk *p, *clk = ERR_PTR(-ENOENT); | ||
33 | |||
34 | down(&clocks_sem); | ||
35 | list_for_each_entry(p, &clocks, node) { | ||
36 | if (strcmp(id, p->name) == 0 && try_module_get(p->owner)) { | ||
37 | clk = p; | ||
38 | break; | ||
39 | } | ||
40 | } | ||
41 | up(&clocks_sem); | ||
42 | |||
43 | return clk; | ||
44 | } | ||
45 | EXPORT_SYMBOL(clk_get); | ||
46 | |||
47 | void clk_put(struct clk *clk) | ||
48 | { | ||
49 | module_put(clk->owner); | ||
50 | } | ||
51 | EXPORT_SYMBOL(clk_put); | ||
52 | |||
53 | int clk_enable(struct clk *clk) | ||
54 | { | ||
55 | unsigned long flags; | ||
56 | |||
57 | spin_lock_irqsave(&clocks_lock, flags); | ||
58 | if (clk->enabled++ == 0) | ||
59 | clk->enable(); | ||
60 | spin_unlock_irqrestore(&clocks_lock, flags); | ||
61 | return 0; | ||
62 | } | ||
63 | EXPORT_SYMBOL(clk_enable); | ||
64 | |||
65 | void clk_disable(struct clk *clk) | ||
66 | { | ||
67 | unsigned long flags; | ||
68 | |||
69 | WARN_ON(clk->enabled == 0); | ||
70 | |||
71 | spin_lock_irqsave(&clocks_lock, flags); | ||
72 | if (--clk->enabled == 0) | ||
73 | clk->disable(); | ||
74 | spin_unlock_irqrestore(&clocks_lock, flags); | ||
75 | } | ||
76 | EXPORT_SYMBOL(clk_disable); | ||
77 | |||
78 | unsigned long clk_get_rate(struct clk *clk) | ||
79 | { | ||
80 | return clk->rate; | ||
81 | } | ||
82 | EXPORT_SYMBOL(clk_get_rate); | ||
83 | |||
84 | |||
85 | static void clk_gpio27_enable(void) | ||
86 | { | ||
87 | /* | ||
88 | * First, set up the 3.6864MHz clock on GPIO 27 for the SA-1111: | ||
89 | * (SA-1110 Developer's Manual, section 9.1.2.1) | ||
90 | */ | ||
91 | GAFR |= GPIO_32_768kHz; | ||
92 | GPDR |= GPIO_32_768kHz; | ||
93 | TUCR = TUCR_3_6864MHz; | ||
94 | } | ||
95 | |||
96 | static void clk_gpio27_disable(void) | ||
97 | { | ||
98 | TUCR = 0; | ||
99 | GPDR &= ~GPIO_32_768kHz; | ||
100 | GAFR &= ~GPIO_32_768kHz; | ||
101 | } | ||
102 | |||
103 | static struct clk clk_gpio27 = { | ||
104 | .name = "GPIO27_CLK", | ||
105 | .rate = 3686400, | ||
106 | .enable = clk_gpio27_enable, | ||
107 | .disable = clk_gpio27_disable, | ||
108 | }; | ||
109 | |||
110 | int clk_register(struct clk *clk) | ||
111 | { | ||
112 | down(&clocks_sem); | ||
113 | list_add(&clk->node, &clocks); | ||
114 | up(&clocks_sem); | ||
115 | return 0; | ||
116 | } | ||
117 | EXPORT_SYMBOL(clk_register); | ||
118 | |||
119 | void clk_unregister(struct clk *clk) | ||
120 | { | ||
121 | down(&clocks_sem); | ||
122 | list_del(&clk->node); | ||
123 | up(&clocks_sem); | ||
124 | } | ||
125 | EXPORT_SYMBOL(clk_unregister); | ||
126 | |||
127 | static int __init clk_init(void) | ||
128 | { | ||
129 | clk_register(&clk_gpio27); | ||
130 | return 0; | ||
131 | } | ||
132 | arch_initcall(clk_init); | ||
diff --git a/arch/arm/mach-sa1100/collie.c b/arch/arm/mach-sa1100/collie.c index 6888816a1935..102454082474 100644 --- a/arch/arm/mach-sa1100/collie.c +++ b/arch/arm/mach-sa1100/collie.c | |||
@@ -40,6 +40,7 @@ | |||
40 | #include <asm/hardware/scoop.h> | 40 | #include <asm/hardware/scoop.h> |
41 | #include <asm/mach/sharpsl_param.h> | 41 | #include <asm/mach/sharpsl_param.h> |
42 | #include <asm/hardware/locomo.h> | 42 | #include <asm/hardware/locomo.h> |
43 | #include <asm/arch/mcp.h> | ||
43 | 44 | ||
44 | #include "generic.h" | 45 | #include "generic.h" |
45 | 46 | ||
@@ -66,6 +67,32 @@ struct platform_device colliescoop_device = { | |||
66 | .resource = collie_scoop_resources, | 67 | .resource = collie_scoop_resources, |
67 | }; | 68 | }; |
68 | 69 | ||
70 | static struct scoop_pcmcia_dev collie_pcmcia_scoop[] = { | ||
71 | { | ||
72 | .dev = &colliescoop_device.dev, | ||
73 | .irq = COLLIE_IRQ_GPIO_CF_IRQ, | ||
74 | .cd_irq = COLLIE_IRQ_GPIO_CF_CD, | ||
75 | .cd_irq_str = "PCMCIA0 CD", | ||
76 | }, | ||
77 | }; | ||
78 | |||
79 | static struct scoop_pcmcia_config collie_pcmcia_config = { | ||
80 | .devs = &collie_pcmcia_scoop[0], | ||
81 | .num_devs = 1, | ||
82 | }; | ||
83 | |||
84 | |||
85 | static struct mcp_plat_data collie_mcp_data = { | ||
86 | .mccr0 = MCCR0_ADM, | ||
87 | .sclk_rate = 11981000, | ||
88 | }; | ||
89 | |||
90 | |||
91 | static struct sa1100_port_fns collie_port_fns __initdata = { | ||
92 | .set_mctrl = collie_uart_set_mctrl, | ||
93 | .get_mctrl = collie_uart_get_mctrl, | ||
94 | }; | ||
95 | |||
69 | 96 | ||
70 | static struct resource locomo_resources[] = { | 97 | static struct resource locomo_resources[] = { |
71 | [0] = { | 98 | [0] = { |
@@ -159,6 +186,8 @@ static void __init collie_init(void) | |||
159 | GPDR |= GPIO_32_768kHz; | 186 | GPDR |= GPIO_32_768kHz; |
160 | TUCR = TUCR_32_768kHz; | 187 | TUCR = TUCR_32_768kHz; |
161 | 188 | ||
189 | platform_scoop_config = &collie_pcmcia_config; | ||
190 | |||
162 | ret = platform_add_devices(devices, ARRAY_SIZE(devices)); | 191 | ret = platform_add_devices(devices, ARRAY_SIZE(devices)); |
163 | if (ret) { | 192 | if (ret) { |
164 | printk(KERN_WARNING "collie: Unable to register LoCoMo device\n"); | 193 | printk(KERN_WARNING "collie: Unable to register LoCoMo device\n"); |
@@ -166,6 +195,7 @@ static void __init collie_init(void) | |||
166 | 195 | ||
167 | sa11x0_set_flash_data(&collie_flash_data, collie_flash_resources, | 196 | sa11x0_set_flash_data(&collie_flash_data, collie_flash_resources, |
168 | ARRAY_SIZE(collie_flash_resources)); | 197 | ARRAY_SIZE(collie_flash_resources)); |
198 | sa11x0_set_mcp_data(&collie_mcp_data); | ||
169 | 199 | ||
170 | sharpsl_save_param(); | 200 | sharpsl_save_param(); |
171 | } | 201 | } |
diff --git a/arch/arm/mach-sa1100/collie_pm.c b/arch/arm/mach-sa1100/collie_pm.c new file mode 100644 index 000000000000..696d7d29c8a5 --- /dev/null +++ b/arch/arm/mach-sa1100/collie_pm.c | |||
@@ -0,0 +1,278 @@ | |||
1 | /* | ||
2 | * Based on spitz_pm.c and sharp code. | ||
3 | * | ||
4 | * Copyright (C) 2001 SHARP | ||
5 | * Copyright 2005 Pavel Machek <pavel@suse.cz> | ||
6 | * | ||
7 | * Distribute under GPLv2. | ||
8 | * | ||
9 | * Li-ion batteries are angry beasts, and they like to explode. This driver is not finished, | ||
10 | * and sometimes charges them when it should not. If it makes angry lithium to come your way... | ||
11 | * ...well, you have been warned. | ||
12 | */ | ||
13 | |||
14 | #include <linux/module.h> | ||
15 | #include <linux/stat.h> | ||
16 | #include <linux/init.h> | ||
17 | #include <linux/kernel.h> | ||
18 | #include <linux/delay.h> | ||
19 | #include <linux/interrupt.h> | ||
20 | #include <linux/device.h> | ||
21 | #include <linux/platform_device.h> | ||
22 | |||
23 | #include <asm/irq.h> | ||
24 | #include <asm/mach-types.h> | ||
25 | #include <asm/hardware.h> | ||
26 | #include <asm/hardware/scoop.h> | ||
27 | #include <asm/dma.h> | ||
28 | #include <asm/arch/collie.h> | ||
29 | #include <asm/mach/sharpsl_param.h> | ||
30 | #include <asm/hardware/sharpsl_pm.h> | ||
31 | |||
32 | #include "../drivers/mfd/ucb1x00.h" | ||
33 | |||
34 | static struct ucb1x00 *ucb; | ||
35 | static int ad_revise; | ||
36 | |||
37 | #define ADCtoPower(x) ((330 * x * 2) / 1024) | ||
38 | |||
39 | static void collie_charger_init(void) | ||
40 | { | ||
41 | int err; | ||
42 | |||
43 | if (sharpsl_param.adadj != -1) { | ||
44 | ad_revise = sharpsl_param.adadj; | ||
45 | } | ||
46 | |||
47 | /* Register interrupt handler. */ | ||
48 | if ((err = request_irq(COLLIE_IRQ_GPIO_AC_IN, sharpsl_ac_isr, SA_INTERRUPT, | ||
49 | "ACIN", sharpsl_ac_isr))) { | ||
50 | printk("Could not get irq %d.\n", COLLIE_IRQ_GPIO_AC_IN); | ||
51 | return; | ||
52 | } | ||
53 | if ((err = request_irq(COLLIE_IRQ_GPIO_CO, sharpsl_chrg_full_isr, SA_INTERRUPT, | ||
54 | "CO", sharpsl_chrg_full_isr))) { | ||
55 | free_irq(COLLIE_IRQ_GPIO_AC_IN, sharpsl_ac_isr); | ||
56 | printk("Could not get irq %d.\n", COLLIE_IRQ_GPIO_CO); | ||
57 | return; | ||
58 | } | ||
59 | |||
60 | ucb1x00_io_set_dir(ucb, 0, COLLIE_TC35143_GPIO_MBAT_ON | COLLIE_TC35143_GPIO_TMP_ON | | ||
61 | COLLIE_TC35143_GPIO_BBAT_ON); | ||
62 | return; | ||
63 | } | ||
64 | |||
65 | static void collie_measure_temp(int on) | ||
66 | { | ||
67 | if (on) | ||
68 | ucb1x00_io_write(ucb, COLLIE_TC35143_GPIO_TMP_ON, 0); | ||
69 | else | ||
70 | ucb1x00_io_write(ucb, 0, COLLIE_TC35143_GPIO_TMP_ON); | ||
71 | } | ||
72 | |||
73 | static void collie_charge(int on) | ||
74 | { | ||
75 | if (on) { | ||
76 | printk("Should start charger\n"); | ||
77 | } else { | ||
78 | printk("Should stop charger\n"); | ||
79 | } | ||
80 | #ifdef I_AM_SURE | ||
81 | |||
82 | /* Zaurus seems to contain LTC1731 ; it should know when to | ||
83 | * stop charging itself, so setting charge on should be | ||
84 | * relatively harmless (as long as it is not done too often). | ||
85 | */ | ||
86 | #define CF_BUF_CTRL_BASE 0xF0800000 | ||
87 | #define SCOOP_REG(adr) (*(volatile unsigned short*)(CF_BUF_CTRL_BASE+(adr))) | ||
88 | #define SCOOP_REG_GPWR SCOOP_REG(SCOOP_GPWR) | ||
89 | |||
90 | if (on) { | ||
91 | set_scoop_gpio(&colliescoop_device.dev, COLLIE_SCP_CHARGE_ON); | ||
92 | } else { | ||
93 | reset_scoop_gpio(&colliescoop_device.dev, COLLIE_SCP_CHARGE_ON); | ||
94 | } | ||
95 | #endif | ||
96 | } | ||
97 | |||
98 | static void collie_discharge(int on) | ||
99 | { | ||
100 | } | ||
101 | |||
102 | static void collie_discharge1(int on) | ||
103 | { | ||
104 | } | ||
105 | |||
106 | static void collie_presuspend(void) | ||
107 | { | ||
108 | } | ||
109 | |||
110 | static void collie_postsuspend(void) | ||
111 | { | ||
112 | } | ||
113 | |||
114 | static int collie_should_wakeup(unsigned int resume_on_alarm) | ||
115 | { | ||
116 | return 0; | ||
117 | } | ||
118 | |||
119 | static unsigned long collie_charger_wakeup(void) | ||
120 | { | ||
121 | return 0; | ||
122 | } | ||
123 | |||
124 | int collie_read_backup_battery(void) | ||
125 | { | ||
126 | int voltage; | ||
127 | |||
128 | ucb1x00_adc_enable(ucb); | ||
129 | |||
130 | /* Gives 75..130 */ | ||
131 | ucb1x00_io_write(ucb, COLLIE_TC35143_GPIO_BBAT_ON, 0); | ||
132 | voltage = ucb1x00_adc_read(ucb, UCB_ADC_INP_AD1, UCB_SYNC); | ||
133 | |||
134 | ucb1x00_io_write(ucb, 0, COLLIE_TC35143_GPIO_BBAT_ON); | ||
135 | ucb1x00_adc_disable(ucb); | ||
136 | |||
137 | printk("Backup battery = %d(%d)\n", ADCtoPower(voltage), voltage); | ||
138 | |||
139 | return ADCtoPower(voltage); | ||
140 | } | ||
141 | |||
142 | int collie_read_main_battery(void) | ||
143 | { | ||
144 | int voltage, voltage_rev, voltage_volts; | ||
145 | |||
146 | ucb1x00_adc_enable(ucb); | ||
147 | ucb1x00_io_write(ucb, 0, COLLIE_TC35143_GPIO_BBAT_ON); | ||
148 | ucb1x00_io_write(ucb, COLLIE_TC35143_GPIO_MBAT_ON, 0); | ||
149 | /* gives values 160..255 with battery removed... and | ||
150 | 145..255 with battery inserted. (on AC), goes as low as | ||
151 | 80 on DC. */ | ||
152 | voltage = ucb1x00_adc_read(ucb, UCB_ADC_INP_AD1, UCB_SYNC); | ||
153 | |||
154 | ucb1x00_io_write(ucb, 0, COLLIE_TC35143_GPIO_MBAT_ON); | ||
155 | ucb1x00_adc_disable(ucb); | ||
156 | |||
157 | voltage_rev = voltage + ((ad_revise * voltage) / 652); | ||
158 | voltage_volts = ADCtoPower(voltage_rev); | ||
159 | |||
160 | printk("Main battery = %d(%d)\n", voltage_volts, voltage); | ||
161 | |||
162 | if (voltage != -1) | ||
163 | return voltage_volts; | ||
164 | else | ||
165 | return voltage; | ||
166 | } | ||
167 | |||
168 | int collie_read_temp(void) | ||
169 | { | ||
170 | int voltage; | ||
171 | |||
172 | /* According to Sharp, temp must be > 973, main battery must be < 465, | ||
173 | FIXME: sharpsl_pm.c has both conditions negated? FIXME: values | ||
174 | are way out of range? */ | ||
175 | |||
176 | ucb1x00_adc_enable(ucb); | ||
177 | ucb1x00_io_write(ucb, COLLIE_TC35143_GPIO_TMP_ON, 0); | ||
178 | /* >1010 = battery removed, 460 = 22C ?, higer = lower temp ? */ | ||
179 | voltage = ucb1x00_adc_read(ucb, UCB_ADC_INP_AD0, UCB_SYNC); | ||
180 | ucb1x00_io_write(ucb, 0, COLLIE_TC35143_GPIO_TMP_ON); | ||
181 | ucb1x00_adc_disable(ucb); | ||
182 | |||
183 | printk("Battery temp = %d\n", voltage); | ||
184 | return voltage; | ||
185 | } | ||
186 | |||
187 | static unsigned long read_devdata(int which) | ||
188 | { | ||
189 | switch (which) { | ||
190 | case SHARPSL_BATT_VOLT: | ||
191 | return collie_read_main_battery(); | ||
192 | case SHARPSL_BATT_TEMP: | ||
193 | return collie_read_temp(); | ||
194 | case SHARPSL_ACIN_VOLT: | ||
195 | return 0x1; | ||
196 | case SHARPSL_STATUS_ACIN: { | ||
197 | int ret = GPLR & COLLIE_GPIO_AC_IN; | ||
198 | printk("AC status = %d\n", ret); | ||
199 | return ret; | ||
200 | } | ||
201 | case SHARPSL_STATUS_FATAL: { | ||
202 | int ret = GPLR & COLLIE_GPIO_MAIN_BAT_LOW; | ||
203 | printk("Fatal bat = %d\n", ret); | ||
204 | return ret; | ||
205 | } | ||
206 | default: | ||
207 | return ~0; | ||
208 | } | ||
209 | } | ||
210 | |||
211 | struct battery_thresh collie_battery_levels[] = { | ||
212 | { 368, 100}, | ||
213 | { 358, 25}, | ||
214 | { 356, 5}, | ||
215 | { 0, 0}, | ||
216 | }; | ||
217 | |||
218 | struct sharpsl_charger_machinfo collie_pm_machinfo = { | ||
219 | .init = collie_charger_init, | ||
220 | .read_devdata = read_devdata, | ||
221 | .discharge = collie_discharge, | ||
222 | .discharge1 = collie_discharge1, | ||
223 | .charge = collie_charge, | ||
224 | .measure_temp = collie_measure_temp, | ||
225 | .presuspend = collie_presuspend, | ||
226 | .postsuspend = collie_postsuspend, | ||
227 | .charger_wakeup = collie_charger_wakeup, | ||
228 | .should_wakeup = collie_should_wakeup, | ||
229 | .bat_levels = 3, | ||
230 | .bat_levels_noac = collie_battery_levels, | ||
231 | .bat_levels_acin = collie_battery_levels, | ||
232 | .status_high_acin = 368, | ||
233 | .status_low_acin = 358, | ||
234 | .status_high_noac = 368, | ||
235 | .status_low_noac = 358, | ||
236 | }; | ||
237 | |||
238 | static int __init collie_pm_ucb_add(struct ucb1x00_dev *pdev) | ||
239 | { | ||
240 | sharpsl_pm.machinfo = &collie_pm_machinfo; | ||
241 | ucb = pdev->ucb; | ||
242 | return 0; | ||
243 | } | ||
244 | |||
245 | static struct ucb1x00_driver collie_pm_ucb_driver = { | ||
246 | .add = collie_pm_ucb_add, | ||
247 | }; | ||
248 | |||
249 | static struct platform_device *collie_pm_device; | ||
250 | |||
251 | static int __init collie_pm_init(void) | ||
252 | { | ||
253 | int ret; | ||
254 | |||
255 | collie_pm_device = platform_device_alloc("sharpsl-pm", -1); | ||
256 | if (!collie_pm_device) | ||
257 | return -ENOMEM; | ||
258 | |||
259 | collie_pm_device->dev.platform_data = &collie_pm_machinfo; | ||
260 | ret = platform_device_add(collie_pm_device); | ||
261 | |||
262 | if (ret) | ||
263 | platform_device_put(collie_pm_device); | ||
264 | |||
265 | if (!ret) | ||
266 | ret = ucb1x00_register_driver(&collie_pm_ucb_driver); | ||
267 | |||
268 | return ret; | ||
269 | } | ||
270 | |||
271 | static void __exit collie_pm_exit(void) | ||
272 | { | ||
273 | ucb1x00_unregister_driver(&collie_pm_ucb_driver); | ||
274 | platform_device_unregister(collie_pm_device); | ||
275 | } | ||
276 | |||
277 | module_init(collie_pm_init); | ||
278 | module_exit(collie_pm_exit); | ||
diff --git a/arch/arm/mach-sa1100/cpu-sa1100.c b/arch/arm/mach-sa1100/cpu-sa1100.c index 6435b2e48ffa..d68630b74d78 100644 --- a/arch/arm/mach-sa1100/cpu-sa1100.c +++ b/arch/arm/mach-sa1100/cpu-sa1100.c | |||
@@ -11,7 +11,7 @@ | |||
11 | * linux-2.4.5-rmk1 | 11 | * linux-2.4.5-rmk1 |
12 | * | 12 | * |
13 | * This software has been developed while working on the LART | 13 | * This software has been developed while working on the LART |
14 | * computing board (http://www.lart.tudelft.nl/), which is | 14 | * computing board (http://www.lartmaker.nl/), which is |
15 | * sponsored by the Mobile Multi-media Communications | 15 | * sponsored by the Mobile Multi-media Communications |
16 | * (http://www.mmc.tudelft.nl/) and Ubiquitous Communications | 16 | * (http://www.mmc.tudelft.nl/) and Ubiquitous Communications |
17 | * (http://www.ubicom.tudelft.nl/) projects. | 17 | * (http://www.ubicom.tudelft.nl/) projects. |
diff --git a/arch/arm/mach-sa1100/generic.c b/arch/arm/mach-sa1100/generic.c index 2abdc419e984..9ea71551fc04 100644 --- a/arch/arm/mach-sa1100/generic.c +++ b/arch/arm/mach-sa1100/generic.c | |||
@@ -324,6 +324,11 @@ void sa11x0_set_irda_data(struct irda_platform_data *irda) | |||
324 | sa11x0ir_device.dev.platform_data = irda; | 324 | sa11x0ir_device.dev.platform_data = irda; |
325 | } | 325 | } |
326 | 326 | ||
327 | static struct platform_device sa11x0rtc_device = { | ||
328 | .name = "sa1100-rtc", | ||
329 | .id = -1, | ||
330 | }; | ||
331 | |||
327 | static struct platform_device *sa11x0_devices[] __initdata = { | 332 | static struct platform_device *sa11x0_devices[] __initdata = { |
328 | &sa11x0udc_device, | 333 | &sa11x0udc_device, |
329 | &sa11x0uart1_device, | 334 | &sa11x0uart1_device, |
@@ -333,6 +338,7 @@ static struct platform_device *sa11x0_devices[] __initdata = { | |||
333 | &sa11x0pcmcia_device, | 338 | &sa11x0pcmcia_device, |
334 | &sa11x0fb_device, | 339 | &sa11x0fb_device, |
335 | &sa11x0mtd_device, | 340 | &sa11x0mtd_device, |
341 | &sa11x0rtc_device, | ||
336 | }; | 342 | }; |
337 | 343 | ||
338 | static int __init sa1100_init(void) | 344 | static int __init sa1100_init(void) |