diff options
author | Jean Delvare <khali@linux-fr.org> | 2006-12-10 15:21:29 -0500 |
---|---|---|
committer | Jean Delvare <khali@arrakis.delvare> | 2006-12-10 15:21:29 -0500 |
commit | 51fd554b6547b74c7e6d1f52885ba8532b531023 (patch) | |
tree | 5d9e5a30a3e41fb4e77c2b3f9c2dd1cb33abbcc7 /drivers/i2c/busses/i2c-ite.c | |
parent | 36cfb5ccfa39ddd030926d08fcf80ba553c88737 (diff) |
i2c: Delete the broken i2c-ite bus driver
The rest of the ITE8172 support was already removed from MIPS tree.
Signed-off-by: Jean Delvare <khali@linux-fr.org>
Signed-off-by: Yoichi Yuasa <yoichi_yuasa@tripeaks.co.jp>
Acked-by: Ralf Baechle <ralf@linux-mips.org>
Diffstat (limited to 'drivers/i2c/busses/i2c-ite.c')
-rw-r--r-- | drivers/i2c/busses/i2c-ite.c | 278 |
1 files changed, 0 insertions, 278 deletions
diff --git a/drivers/i2c/busses/i2c-ite.c b/drivers/i2c/busses/i2c-ite.c deleted file mode 100644 index f7d71869b3b9..000000000000 --- a/drivers/i2c/busses/i2c-ite.c +++ /dev/null | |||
@@ -1,278 +0,0 @@ | |||
1 | /* | ||
2 | ------------------------------------------------------------------------- | ||
3 | i2c-adap-ite.c i2c-hw access for the IIC peripheral on the ITE MIPS system | ||
4 | ------------------------------------------------------------------------- | ||
5 | Hai-Pao Fan, MontaVista Software, Inc. | ||
6 | hpfan@mvista.com or source@mvista.com | ||
7 | |||
8 | Copyright 2001 MontaVista Software Inc. | ||
9 | |||
10 | ---------------------------------------------------------------------------- | ||
11 | This file was highly leveraged from i2c-elektor.c, which was created | ||
12 | by Simon G. Vogl and Hans Berglund: | ||
13 | |||
14 | |||
15 | Copyright (C) 1995-97 Simon G. Vogl | ||
16 | 1998-99 Hans Berglund | ||
17 | |||
18 | This program is free software; you can redistribute it and/or modify | ||
19 | it under the terms of the GNU General Public License as published by | ||
20 | the Free Software Foundation; either version 2 of the License, or | ||
21 | (at your option) any later version. | ||
22 | |||
23 | This program is distributed in the hope that it will be useful, | ||
24 | but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
25 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
26 | GNU General Public License for more details. | ||
27 | |||
28 | You should have received a copy of the GNU General Public License | ||
29 | along with this program; if not, write to the Free Software | ||
30 | Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ | ||
31 | /* ------------------------------------------------------------------------- */ | ||
32 | |||
33 | /* With some changes from Kyösti Mälkki <kmalkki@cc.hut.fi> and even | ||
34 | Frodo Looijaard <frodol@dds.nl> */ | ||
35 | |||
36 | #include <linux/kernel.h> | ||
37 | #include <linux/ioport.h> | ||
38 | #include <linux/module.h> | ||
39 | #include <linux/delay.h> | ||
40 | #include <linux/slab.h> | ||
41 | #include <linux/init.h> | ||
42 | #include <linux/wait.h> | ||
43 | #include <asm/irq.h> | ||
44 | #include <asm/io.h> | ||
45 | |||
46 | #include <linux/i2c.h> | ||
47 | #include <linux/i2c-algo-ite.h> | ||
48 | #include <linux/i2c-adap-ite.h> | ||
49 | #include "../i2c-ite.h" | ||
50 | |||
51 | #define DEFAULT_BASE 0x14014030 | ||
52 | #define ITE_IIC_IO_SIZE 0x40 | ||
53 | #define DEFAULT_IRQ 0 | ||
54 | #define DEFAULT_CLOCK 0x1b0e /* default 16MHz/(27+14) = 400KHz */ | ||
55 | #define DEFAULT_OWN 0x55 | ||
56 | |||
57 | static int base; | ||
58 | static int irq; | ||
59 | static int clock; | ||
60 | static int own; | ||
61 | |||
62 | static struct iic_ite gpi; | ||
63 | static wait_queue_head_t iic_wait; | ||
64 | static int iic_pending; | ||
65 | static spinlock_t lock; | ||
66 | |||
67 | /* ----- local functions ---------------------------------------------- */ | ||
68 | |||
69 | static void iic_ite_setiic(void *data, int ctl, short val) | ||
70 | { | ||
71 | unsigned long j = jiffies + 10; | ||
72 | |||
73 | pr_debug(" Write 0x%02x to 0x%x\n",(unsigned short)val, ctl&0xff); | ||
74 | #ifdef DEBUG | ||
75 | while (time_before(jiffies, j)) | ||
76 | schedule(); | ||
77 | #endif | ||
78 | outw(val,ctl); | ||
79 | } | ||
80 | |||
81 | static short iic_ite_getiic(void *data, int ctl) | ||
82 | { | ||
83 | short val; | ||
84 | |||
85 | val = inw(ctl); | ||
86 | pr_debug("Read 0x%02x from 0x%x\n",(unsigned short)val, ctl&0xff); | ||
87 | return (val); | ||
88 | } | ||
89 | |||
90 | /* Return our slave address. This is the address | ||
91 | * put on the I2C bus when another master on the bus wants to address us | ||
92 | * as a slave | ||
93 | */ | ||
94 | static int iic_ite_getown(void *data) | ||
95 | { | ||
96 | return (gpi.iic_own); | ||
97 | } | ||
98 | |||
99 | |||
100 | static int iic_ite_getclock(void *data) | ||
101 | { | ||
102 | return (gpi.iic_clock); | ||
103 | } | ||
104 | |||
105 | |||
106 | /* Put this process to sleep. We will wake up when the | ||
107 | * IIC controller interrupts. | ||
108 | */ | ||
109 | static void iic_ite_waitforpin(void) { | ||
110 | DEFINE_WAIT(wait); | ||
111 | int timeout = 2; | ||
112 | unsigned long flags; | ||
113 | |||
114 | /* If interrupts are enabled (which they are), then put the process to | ||
115 | * sleep. This process will be awakened by two events -- either the | ||
116 | * the IIC peripheral interrupts or the timeout expires. | ||
117 | * If interrupts are not enabled then delay for a reasonable amount | ||
118 | * of time and return. | ||
119 | */ | ||
120 | if (gpi.iic_irq > 0) { | ||
121 | spin_lock_irqsave(&lock, flags); | ||
122 | if (iic_pending == 0) { | ||
123 | spin_unlock_irqrestore(&lock, flags); | ||
124 | prepare_to_wait(&iic_wait, &wait, TASK_INTERRUPTIBLE); | ||
125 | if (schedule_timeout(timeout*HZ)) { | ||
126 | spin_lock_irqsave(&lock, flags); | ||
127 | if (iic_pending == 1) { | ||
128 | iic_pending = 0; | ||
129 | } | ||
130 | spin_unlock_irqrestore(&lock, flags); | ||
131 | } | ||
132 | finish_wait(&iic_wait, &wait); | ||
133 | } else { | ||
134 | iic_pending = 0; | ||
135 | spin_unlock_irqrestore(&lock, flags); | ||
136 | } | ||
137 | } else { | ||
138 | udelay(100); | ||
139 | } | ||
140 | } | ||
141 | |||
142 | |||
143 | static irqreturn_t iic_ite_handler(int this_irq, void *dev_id) | ||
144 | { | ||
145 | spin_lock(&lock); | ||
146 | iic_pending = 1; | ||
147 | spin_unlock(&lock); | ||
148 | |||
149 | wake_up_interruptible(&iic_wait); | ||
150 | |||
151 | return IRQ_HANDLED; | ||
152 | } | ||
153 | |||
154 | |||
155 | /* Lock the region of memory where I/O registers exist. Request our | ||
156 | * interrupt line and register its associated handler. | ||
157 | */ | ||
158 | static int iic_hw_resrc_init(void) | ||
159 | { | ||
160 | if (!request_region(gpi.iic_base, ITE_IIC_IO_SIZE, "i2c")) | ||
161 | return -ENODEV; | ||
162 | |||
163 | if (gpi.iic_irq <= 0) | ||
164 | return 0; | ||
165 | |||
166 | if (request_irq(gpi.iic_irq, iic_ite_handler, 0, "ITE IIC", 0) < 0) | ||
167 | gpi.iic_irq = 0; | ||
168 | else | ||
169 | enable_irq(gpi.iic_irq); | ||
170 | |||
171 | return 0; | ||
172 | } | ||
173 | |||
174 | |||
175 | static void iic_ite_release(void) | ||
176 | { | ||
177 | if (gpi.iic_irq > 0) { | ||
178 | disable_irq(gpi.iic_irq); | ||
179 | free_irq(gpi.iic_irq, 0); | ||
180 | } | ||
181 | release_region(gpi.iic_base , 2); | ||
182 | } | ||
183 | |||
184 | /* ------------------------------------------------------------------------ | ||
185 | * Encapsulate the above functions in the correct operations structure. | ||
186 | * This is only done when more than one hardware adapter is supported. | ||
187 | */ | ||
188 | static struct i2c_algo_iic_data iic_ite_data = { | ||
189 | NULL, | ||
190 | iic_ite_setiic, | ||
191 | iic_ite_getiic, | ||
192 | iic_ite_getown, | ||
193 | iic_ite_getclock, | ||
194 | iic_ite_waitforpin, | ||
195 | 80, 80, 100, /* waits, timeout */ | ||
196 | }; | ||
197 | |||
198 | static struct i2c_adapter iic_ite_ops = { | ||
199 | .owner = THIS_MODULE, | ||
200 | .id = I2C_HW_I_IIC, | ||
201 | .algo_data = &iic_ite_data, | ||
202 | .name = "ITE IIC adapter", | ||
203 | }; | ||
204 | |||
205 | /* Called when the module is loaded. This function starts the | ||
206 | * cascade of calls up through the hierarchy of i2c modules (i.e. up to the | ||
207 | * algorithm layer and into to the core layer) | ||
208 | */ | ||
209 | static int __init iic_ite_init(void) | ||
210 | { | ||
211 | |||
212 | struct iic_ite *piic = &gpi; | ||
213 | |||
214 | printk(KERN_INFO "Initialize ITE IIC adapter module\n"); | ||
215 | if (base == 0) | ||
216 | piic->iic_base = DEFAULT_BASE; | ||
217 | else | ||
218 | piic->iic_base = base; | ||
219 | |||
220 | if (irq == 0) | ||
221 | piic->iic_irq = DEFAULT_IRQ; | ||
222 | else | ||
223 | piic->iic_irq = irq; | ||
224 | |||
225 | if (clock == 0) | ||
226 | piic->iic_clock = DEFAULT_CLOCK; | ||
227 | else | ||
228 | piic->iic_clock = clock; | ||
229 | |||
230 | if (own == 0) | ||
231 | piic->iic_own = DEFAULT_OWN; | ||
232 | else | ||
233 | piic->iic_own = own; | ||
234 | |||
235 | iic_ite_data.data = (void *)piic; | ||
236 | init_waitqueue_head(&iic_wait); | ||
237 | spin_lock_init(&lock); | ||
238 | if (iic_hw_resrc_init() == 0) { | ||
239 | if (i2c_iic_add_bus(&iic_ite_ops) < 0) | ||
240 | return -ENODEV; | ||
241 | } else { | ||
242 | return -ENODEV; | ||
243 | } | ||
244 | printk(KERN_INFO " found device at %#x irq %d.\n", | ||
245 | piic->iic_base, piic->iic_irq); | ||
246 | return 0; | ||
247 | } | ||
248 | |||
249 | |||
250 | static void iic_ite_exit(void) | ||
251 | { | ||
252 | i2c_iic_del_bus(&iic_ite_ops); | ||
253 | iic_ite_release(); | ||
254 | } | ||
255 | |||
256 | /* If modules is NOT defined when this file is compiled, then the MODULE_* | ||
257 | * macros will resolve to nothing | ||
258 | */ | ||
259 | MODULE_AUTHOR("MontaVista Software <www.mvista.com>"); | ||
260 | MODULE_DESCRIPTION("I2C-Bus adapter routines for ITE IIC bus adapter"); | ||
261 | MODULE_LICENSE("GPL"); | ||
262 | |||
263 | module_param(base, int, 0); | ||
264 | module_param(irq, int, 0); | ||
265 | module_param(clock, int, 0); | ||
266 | module_param(own, int, 0); | ||
267 | |||
268 | |||
269 | /* Called when module is loaded or when kernel is initialized. | ||
270 | * If MODULES is defined when this file is compiled, then this function will | ||
271 | * resolve to init_module (the function called when insmod is invoked for a | ||
272 | * module). Otherwise, this function is called early in the boot, when the | ||
273 | * kernel is intialized. Check out /include/init.h to see how this works. | ||
274 | */ | ||
275 | module_init(iic_ite_init); | ||
276 | |||
277 | /* Resolves to module_cleanup when MODULES is defined. */ | ||
278 | module_exit(iic_ite_exit); | ||