blob: 52a91c5e4010b2c2e87861b2175602382ad8fecf [file] [log] [blame]
Linus Nielsen Feltzing257d17d2002-04-20 23:18:14 +00001/***************************************************************************
2 * __________ __ ___.
3 * Open \______ \ ____ ____ | | _\_ |__ _______ ___
4 * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
5 * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
6 * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
7 * \/ \/ \/ \/ \/
8 * $Id$
9 *
10 * Copyright (C) 2002 by Linus Nielsen Feltzing
11 *
12 * All files in this archive are subject to the GNU General Public License.
13 * See the file COPYING in the source tree root for full license agreement.
14 *
15 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
16 * KIND, either express or implied.
17 *
18 ****************************************************************************/
Linus Nielsen Feltzingd1d63962002-06-26 12:39:49 +000019#include "stdbool.h"
Linus Nielsen Feltzingf1e9de52002-07-29 09:34:44 +000020#include "config.h"
Linus Nielsen Feltzingd1d63962002-06-26 12:39:49 +000021#include "sh7034.h"
Linus Nielsen Feltzing257d17d2002-04-20 23:18:14 +000022#include "i2c.h"
23#include "debug.h"
24#include "mas.h"
Linus Nielsen Feltzingd1d63962002-06-26 12:39:49 +000025#include "kernel.h"
Jörg Hohensohn75bab492003-11-06 01:34:50 +000026#include "system.h"
Linus Nielsen Feltzingd1d63962002-06-26 12:39:49 +000027
28extern bool old_recorder;
Linus Nielsen Feltzing257d17d2002-04-20 23:18:14 +000029
Linus Nielsen Feltzinge1cb0542002-06-24 12:35:37 +000030static int mas_devread(unsigned long *dest, int len);
31
Linus Nielsen Feltzing0e085992002-05-16 21:12:57 +000032int mas_default_read(unsigned short *buf)
Linus Nielsen Feltzing0bd77a62002-05-03 13:12:21 +000033{
Linus Nielsen Feltzing0e085992002-05-16 21:12:57 +000034 unsigned char *dest = (unsigned char *)buf;
35 int ret = 0;
Linus Nielsen Feltzinge1cb0542002-06-24 12:35:37 +000036
37 i2c_begin();
Linus Nielsen Feltzing0e085992002-05-16 21:12:57 +000038
39 i2c_start();
40 i2c_outb(MAS_DEV_WRITE);
41 if (i2c_getack()) {
42 i2c_outb(MAS_DATA_READ);
43 if (i2c_getack()) {
44 i2c_start();
45 i2c_outb(MAS_DEV_READ);
46 if (i2c_getack()) {
47 dest[0] = i2c_inb(0);
48 dest[1] = i2c_inb(1);
49 }
50 else
51 ret = -3;
52 }
53 else
54 ret = -2;
55 }
56 else
57 ret = -1;
58
59 i2c_stop();
60
Linus Nielsen Feltzinge1cb0542002-06-24 12:35:37 +000061 i2c_end();
Linus Nielsen Feltzing0e085992002-05-16 21:12:57 +000062 return ret;
Linus Nielsen Feltzing0bd77a62002-05-03 13:12:21 +000063}
64
65int mas_run(unsigned short address)
Linus Nielsen Feltzing611a7c52002-05-02 23:01:10 +000066{
Linus Nielsen Feltzinge1cb0542002-06-24 12:35:37 +000067 int ret = 0;
68 unsigned char buf[3];
Linus Nielsen Feltzing611a7c52002-05-02 23:01:10 +000069
Linus Nielsen Feltzinge1cb0542002-06-24 12:35:37 +000070 i2c_begin();
71
72 buf[0] = MAS_DATA_WRITE;
Linus Nielsen Feltzing5c682fb2002-07-28 11:45:52 +000073 buf[1] = address >> 8;
Linus Nielsen Feltzinge1cb0542002-06-24 12:35:37 +000074 buf[2] = address & 0xff;
Linus Nielsen Feltzing611a7c52002-05-02 23:01:10 +000075
76 /* send run command */
Linus Nielsen Feltzinge1cb0542002-06-24 12:35:37 +000077 if (i2c_write(MAS_DEV_WRITE,buf,3))
Linus Nielsen Feltzing611a7c52002-05-02 23:01:10 +000078 {
Linus Nielsen Feltzinge1cb0542002-06-24 12:35:37 +000079 ret = -1;
Linus Nielsen Feltzing611a7c52002-05-02 23:01:10 +000080 }
81
Linus Nielsen Feltzinge1cb0542002-06-24 12:35:37 +000082 i2c_end();
83 return ret;
Linus Nielsen Feltzing611a7c52002-05-02 23:01:10 +000084}
85
Linus Nielsen Feltzing257d17d2002-04-20 23:18:14 +000086/* note: 'len' is number of 32-bit words, not number of bytes! */
87int mas_readmem(int bank, int addr, unsigned long* dest, int len)
88{
Linus Nielsen Feltzinge1cb0542002-06-24 12:35:37 +000089 int ret = 0;
90 unsigned char buf[7];
Linus Nielsen Feltzing257d17d2002-04-20 23:18:14 +000091
Linus Nielsen Feltzinge1cb0542002-06-24 12:35:37 +000092 i2c_begin();
93
94 buf[0] = MAS_DATA_WRITE;
95 buf[1] = bank?MAS_CMD_READ_D1_MEM:MAS_CMD_READ_D0_MEM;
96 buf[2] = 0x00;
97 buf[3] = (len & 0xff00) >> 8;
98 buf[4] = len & 0xff;
99 buf[5] = (addr & 0xff00) >> 8;
100 buf[6] = addr & 0xff;
Linus Nielsen Feltzing257d17d2002-04-20 23:18:14 +0000101
102 /* send read command */
Linus Nielsen Feltzinge1cb0542002-06-24 12:35:37 +0000103 if (i2c_write(MAS_DEV_WRITE,buf,7))
Linus Nielsen Feltzing257d17d2002-04-20 23:18:14 +0000104 {
Linus Nielsen Feltzinge1cb0542002-06-24 12:35:37 +0000105 ret = -1;
Linus Nielsen Feltzing257d17d2002-04-20 23:18:14 +0000106 }
107
Linus Nielsen Feltzinge1cb0542002-06-24 12:35:37 +0000108 ret = mas_devread(dest, len);
109
110 i2c_end();
111 return ret;
Linus Nielsen Feltzing257d17d2002-04-20 23:18:14 +0000112}
113
114/* note: 'len' is number of 32-bit words, not number of bytes! */
Jens Arnold0ceaa5e2004-08-17 01:45:48 +0000115int mas_writemem(int bank, int addr, const unsigned long* src, int len)
Linus Nielsen Feltzing257d17d2002-04-20 23:18:14 +0000116{
Linus Nielsen Feltzinge1cb0542002-06-24 12:35:37 +0000117 int ret = 0;
Linus Nielsen Feltzing257d17d2002-04-20 23:18:14 +0000118 int i, j;
119 unsigned char buf[60];
Jens Arnold0ceaa5e2004-08-17 01:45:48 +0000120 const unsigned char* ptr = (const unsigned char*)src;
Linus Nielsen Feltzing257d17d2002-04-20 23:18:14 +0000121
Linus Nielsen Feltzinge1cb0542002-06-24 12:35:37 +0000122 i2c_begin();
123
Linus Nielsen Feltzing257d17d2002-04-20 23:18:14 +0000124 i=0;
125 buf[i++] = MAS_DATA_WRITE;
Linus Nielsen Feltzing9c0e5d82002-06-19 12:03:41 +0000126 buf[i++] = bank?MAS_CMD_WRITE_D1_MEM:MAS_CMD_WRITE_D0_MEM;
Linus Nielsen Feltzing257d17d2002-04-20 23:18:14 +0000127 buf[i++] = 0x00;
128 buf[i++] = (len & 0xff00) >> 8;
129 buf[i++] = len & 0xff;
130 buf[i++] = (addr & 0xff00) >> 8;
131 buf[i++] = addr & 0xff;
132
133 j = 0;
134 while(len--) {
Jens Arnoldeaa1f732004-09-29 19:51:41 +0000135#if (CONFIG_HWCODEC == MAS3587F) || (CONFIG_HWCODEC == MAS3539F)
Linus Nielsen Feltzing257d17d2002-04-20 23:18:14 +0000136 buf[i++] = 0;
Linus Nielsen Feltzing9c0e5d82002-06-19 12:03:41 +0000137 buf[i++] = ptr[j+1];
138 buf[i++] = ptr[j+2];
139 buf[i++] = ptr[j+3];
140#else
141 buf[i++] = ptr[j+2];
142 buf[i++] = ptr[j+3];
143 buf[i++] = 0;
144 buf[i++] = ptr[j+1];
145#endif
Linus Nielsen Feltzing257d17d2002-04-20 23:18:14 +0000146 j += 4;
147 }
148
149 /* send write command */
150 if (i2c_write(MAS_DEV_WRITE,buf,i))
151 {
Linus Nielsen Feltzinge1cb0542002-06-24 12:35:37 +0000152 ret = -1;
Linus Nielsen Feltzing257d17d2002-04-20 23:18:14 +0000153 }
154
Linus Nielsen Feltzinge1cb0542002-06-24 12:35:37 +0000155 i2c_end();
156 return ret;
Linus Nielsen Feltzing257d17d2002-04-20 23:18:14 +0000157}
158
159int mas_readreg(int reg)
160{
Linus Nielsen Feltzinge1cb0542002-06-24 12:35:37 +0000161 int ret = 0;
Linus Nielsen Feltzing257d17d2002-04-20 23:18:14 +0000162 unsigned char buf[16];
Linus Nielsen Feltzing9c0e5d82002-06-19 12:03:41 +0000163 unsigned long value;
Linus Nielsen Feltzing257d17d2002-04-20 23:18:14 +0000164
Linus Nielsen Feltzinge1cb0542002-06-24 12:35:37 +0000165 i2c_begin();
166
167 buf[0] = MAS_DATA_WRITE;
168 buf[1] = MAS_CMD_READ_REG | (reg >> 4);
169 buf[2] = (reg & 0x0f) << 4;
Linus Nielsen Feltzing257d17d2002-04-20 23:18:14 +0000170
171 /* send read command */
Linus Nielsen Feltzinge1cb0542002-06-24 12:35:37 +0000172 if (i2c_write(MAS_DEV_WRITE,buf,3))
Linus Nielsen Feltzing257d17d2002-04-20 23:18:14 +0000173 {
Linus Nielsen Feltzinge1cb0542002-06-24 12:35:37 +0000174 ret = -1;
175 }
176 else
177 {
178 if(mas_devread(&value, 1))
179 {
180 ret = -2;
181 }
182 else
183 {
184 ret = value;
185 }
Linus Nielsen Feltzing257d17d2002-04-20 23:18:14 +0000186 }
187
Linus Nielsen Feltzinge1cb0542002-06-24 12:35:37 +0000188 i2c_end();
189 return ret;
Linus Nielsen Feltzing257d17d2002-04-20 23:18:14 +0000190}
191
Linus Nielsen Feltzing0e085992002-05-16 21:12:57 +0000192int mas_writereg(int reg, unsigned int val)
Linus Nielsen Feltzing257d17d2002-04-20 23:18:14 +0000193{
Linus Nielsen Feltzinge1cb0542002-06-24 12:35:37 +0000194 int ret = 0;
195 unsigned char buf[5];
Linus Nielsen Feltzing257d17d2002-04-20 23:18:14 +0000196
Linus Nielsen Feltzinge1cb0542002-06-24 12:35:37 +0000197 i2c_begin();
198
199 buf[0] = MAS_DATA_WRITE;
200 buf[1] = MAS_CMD_WRITE_REG | (reg >> 4);
201 buf[2] = ((reg & 0x0f) << 4) | (val & 0x0f);
202 buf[3] = (val >> 12) & 0xff;
203 buf[4] = (val >> 4) & 0xff;
Linus Nielsen Feltzing257d17d2002-04-20 23:18:14 +0000204
205 /* send write command */
Linus Nielsen Feltzinge1cb0542002-06-24 12:35:37 +0000206 if (i2c_write(MAS_DEV_WRITE,buf,5))
Linus Nielsen Feltzing257d17d2002-04-20 23:18:14 +0000207 {
Linus Nielsen Feltzinge1cb0542002-06-24 12:35:37 +0000208 ret = -1;
Linus Nielsen Feltzing257d17d2002-04-20 23:18:14 +0000209 }
Linus Nielsen Feltzinge1cb0542002-06-24 12:35:37 +0000210
211 i2c_end();
212 return ret;
Linus Nielsen Feltzing257d17d2002-04-20 23:18:14 +0000213}
214
215/* note: 'len' is number of 32-bit words, not number of bytes! */
Linus Nielsen Feltzinge1cb0542002-06-24 12:35:37 +0000216static int mas_devread(unsigned long *dest, int len)
Linus Nielsen Feltzing257d17d2002-04-20 23:18:14 +0000217{
Linus Nielsen Feltzing257d17d2002-04-20 23:18:14 +0000218 int ret = 0;
Linus Nielsen Feltzinge1cb0542002-06-24 12:35:37 +0000219 unsigned char* ptr = (unsigned char*)dest;
Linus Nielsen Feltzing257d17d2002-04-20 23:18:14 +0000220 int i;
221
222 /* handle read-back */
Linus Nielsen Feltzing9c0e5d82002-06-19 12:03:41 +0000223 /* Remember, the MAS values are only 20 bits, so we set
224 the upper 12 bits to 0 */
Linus Nielsen Feltzing257d17d2002-04-20 23:18:14 +0000225 i2c_start();
226 i2c_outb(MAS_DEV_WRITE);
227 if (i2c_getack()) {
228 i2c_outb(MAS_DATA_READ);
229 if (i2c_getack()) {
230 i2c_start();
231 i2c_outb(MAS_DEV_READ);
232 if (i2c_getack()) {
233 for (i=0;len;i++) {
234 len--;
Jens Arnoldeaa1f732004-09-29 19:51:41 +0000235#if (CONFIG_HWCODEC == MAS3587F) || (CONFIG_HWCODEC == MAS3539F)
Linus Nielsen Feltzing9c0e5d82002-06-19 12:03:41 +0000236 i2c_inb(0); /* Dummy read */
237 ptr[i*4+0] = 0;
238 ptr[i*4+1] = i2c_inb(0) & 0x0f;
239 ptr[i*4+2] = i2c_inb(0);
Linus Nielsen Feltzing257d17d2002-04-20 23:18:14 +0000240 if(len)
Linus Nielsen Feltzing9c0e5d82002-06-19 12:03:41 +0000241 ptr[i*4+3] = i2c_inb(0);
Linus Nielsen Feltzing257d17d2002-04-20 23:18:14 +0000242 else
Linus Nielsen Feltzing9c0e5d82002-06-19 12:03:41 +0000243 ptr[i*4+3] = i2c_inb(1); /* NAK the last byte */
244#else
245 ptr[i*4+2] = i2c_inb(0);
246 ptr[i*4+3] = i2c_inb(0);
247 ptr[i*4+0] = i2c_inb(0);
248 if(len)
249 ptr[i*4+1] = i2c_inb(0);
250 else
251 ptr[i*4+1] = i2c_inb(1); /* NAK the last byte */
252#endif
Linus Nielsen Feltzing257d17d2002-04-20 23:18:14 +0000253 }
254 }
255 else
256 ret = -3;
257 }
258 else
259 ret = -2;
260 }
261 else
262 ret = -1;
263
264 i2c_stop();
265
266 return ret;
267}
Linus Nielsen Feltzing9c0e5d82002-06-19 12:03:41 +0000268
Jens Arnoldeaa1f732004-09-29 19:51:41 +0000269#if (CONFIG_HWCODEC == MAS3587F) || (CONFIG_HWCODEC == MAS3539F)
Linus Nielsen Feltzingd1d63962002-06-26 12:39:49 +0000270void mas_reset(void)
271{
Linus Nielsen Feltzingbef7ab02003-11-07 12:15:24 +0000272 or_b(0x01, &PAIORH);
Linus Nielsen Feltzingd1d63962002-06-26 12:39:49 +0000273
274 if(old_recorder)
275 {
276 /* Older recorder models don't invert the POR signal */
Linus Nielsen Feltzingbef7ab02003-11-07 12:15:24 +0000277 or_b(0x01, &PADRH);
Linus Nielsen Feltzingd1d63962002-06-26 12:39:49 +0000278 sleep(HZ/100);
Linus Nielsen Feltzingbef7ab02003-11-07 12:15:24 +0000279 and_b(~0x01, &PADRH);
Linus Nielsen Feltzingd1d63962002-06-26 12:39:49 +0000280 sleep(HZ/5);
281 }
282 else
283 {
Linus Nielsen Feltzingbef7ab02003-11-07 12:15:24 +0000284 and_b(~0x01, &PADRH);
Linus Nielsen Feltzingd1d63962002-06-26 12:39:49 +0000285 sleep(HZ/100);
Linus Nielsen Feltzingbef7ab02003-11-07 12:15:24 +0000286 or_b(0x01, &PADRH);
Linus Nielsen Feltzingd1d63962002-06-26 12:39:49 +0000287 sleep(HZ/5);
288 }
289}
290
Linus Nielsen Feltzing9c0e5d82002-06-19 12:03:41 +0000291int mas_direct_config_read(unsigned char reg)
292{
Linus Nielsen Feltzing9c0e5d82002-06-19 12:03:41 +0000293 int ret = 0;
Linus Nielsen Feltzinge1cb0542002-06-24 12:35:37 +0000294 unsigned char tmp[2];
Linus Nielsen Feltzing9c0e5d82002-06-19 12:03:41 +0000295
Linus Nielsen Feltzinge1cb0542002-06-24 12:35:37 +0000296 i2c_begin();
297
Linus Nielsen Feltzing9c0e5d82002-06-19 12:03:41 +0000298 i2c_start();
299 i2c_outb(MAS_DEV_WRITE);
300 if (i2c_getack()) {
301 i2c_outb(reg);
302 if (i2c_getack()) {
303 i2c_start();
304 i2c_outb(MAS_DEV_READ);
305 if (i2c_getack()) {
306 tmp[0] = i2c_inb(0);
307 tmp[1] = i2c_inb(1); /* NAK the last byte */
308 ret = (tmp[0] << 8) | tmp[1];
309 }
310 else
311 ret = -3;
312 }
313 else
314 ret = -2;
315 }
316 else
317 ret = -1;
318
319 i2c_stop();
320
Linus Nielsen Feltzinge1cb0542002-06-24 12:35:37 +0000321 i2c_end();
Linus Nielsen Feltzing9c0e5d82002-06-19 12:03:41 +0000322 return ret;
323}
324
325int mas_direct_config_write(unsigned char reg, unsigned int val)
326{
Linus Nielsen Feltzinge1cb0542002-06-24 12:35:37 +0000327 int ret = 0;
Linus Nielsen Feltzing9c0e5d82002-06-19 12:03:41 +0000328 unsigned char buf[3];
329
Linus Nielsen Feltzinge1cb0542002-06-24 12:35:37 +0000330 i2c_begin();
331
Linus Nielsen Feltzing9c0e5d82002-06-19 12:03:41 +0000332 buf[0] = reg;
333 buf[1] = (val >> 8) & 0xff;
334 buf[2] = val & 0xff;
335
336 /* send write command */
337 if (i2c_write(MAS_DEV_WRITE,buf,3))
338 {
Linus Nielsen Feltzinge1cb0542002-06-24 12:35:37 +0000339 ret = -1;
Linus Nielsen Feltzing9c0e5d82002-06-19 12:03:41 +0000340 }
Linus Nielsen Feltzinge1cb0542002-06-24 12:35:37 +0000341
342 i2c_end();
Linus Nielsen Feltzing417685f2002-06-25 14:12:37 +0000343 return ret;
Linus Nielsen Feltzing9c0e5d82002-06-19 12:03:41 +0000344}
345
346int mas_codec_writereg(int reg, unsigned int val)
347{
Linus Nielsen Feltzinge1cb0542002-06-24 12:35:37 +0000348 int ret = 0;
349 unsigned char buf[5];
Linus Nielsen Feltzing9c0e5d82002-06-19 12:03:41 +0000350
Linus Nielsen Feltzinge1cb0542002-06-24 12:35:37 +0000351 i2c_begin();
352
353 buf[0] = MAS_CODEC_WRITE;
354 buf[1] = (reg >> 8) & 0xff;
355 buf[2] = reg & 0xff;
356 buf[3] = (val >> 8) & 0xff;
357 buf[4] = val & 0xff;
Linus Nielsen Feltzing9c0e5d82002-06-19 12:03:41 +0000358
359 /* send write command */
Linus Nielsen Feltzinge1cb0542002-06-24 12:35:37 +0000360 if (i2c_write(MAS_DEV_WRITE,buf,5))
Linus Nielsen Feltzing9c0e5d82002-06-19 12:03:41 +0000361 {
Linus Nielsen Feltzinge1cb0542002-06-24 12:35:37 +0000362 ret = -1;
Linus Nielsen Feltzing9c0e5d82002-06-19 12:03:41 +0000363 }
Linus Nielsen Feltzinge1cb0542002-06-24 12:35:37 +0000364
365 i2c_end();
366 return ret;
Linus Nielsen Feltzing9c0e5d82002-06-19 12:03:41 +0000367}
368
369int mas_codec_readreg(int reg)
370{
Linus Nielsen Feltzing9c0e5d82002-06-19 12:03:41 +0000371 int ret = 0;
372 unsigned char buf[16];
373 unsigned char tmp[2];
374
Linus Nielsen Feltzinge1cb0542002-06-24 12:35:37 +0000375 i2c_begin();
376
377 buf[0] = MAS_CODEC_WRITE;
378 buf[1] = (reg >> 8) & 0xff;
379 buf[2] = reg & 0xff;
Linus Nielsen Feltzing9c0e5d82002-06-19 12:03:41 +0000380
381 /* send read command */
Linus Nielsen Feltzinge1cb0542002-06-24 12:35:37 +0000382 if (i2c_write(MAS_DEV_WRITE,buf,3))
Linus Nielsen Feltzing9c0e5d82002-06-19 12:03:41 +0000383 {
Linus Nielsen Feltzing63f0b5e2002-11-24 11:47:24 +0000384 ret = -1;
Linus Nielsen Feltzing9c0e5d82002-06-19 12:03:41 +0000385 }
Linus Nielsen Feltzing63f0b5e2002-11-24 11:47:24 +0000386 else
387 {
388 i2c_start();
389 i2c_outb(MAS_DEV_WRITE);
Linus Nielsen Feltzing9c0e5d82002-06-19 12:03:41 +0000390 if (i2c_getack()) {
Linus Nielsen Feltzing63f0b5e2002-11-24 11:47:24 +0000391 i2c_outb(MAS_CODEC_READ);
Linus Nielsen Feltzing9c0e5d82002-06-19 12:03:41 +0000392 if (i2c_getack()) {
Linus Nielsen Feltzing63f0b5e2002-11-24 11:47:24 +0000393 i2c_start();
394 i2c_outb(MAS_DEV_READ);
395 if (i2c_getack()) {
396 tmp[0] = i2c_inb(0);
397 tmp[1] = i2c_inb(1); /* NAK the last byte */
398 ret = (tmp[0] << 8) | tmp[1];
399 }
400 else
401 ret = -4;
Linus Nielsen Feltzing9c0e5d82002-06-19 12:03:41 +0000402 }
403 else
404 ret = -3;
405 }
406 else
407 ret = -2;
Linus Nielsen Feltzing9c0e5d82002-06-19 12:03:41 +0000408
Linus Nielsen Feltzing63f0b5e2002-11-24 11:47:24 +0000409 i2c_stop();
410 }
411
Linus Nielsen Feltzinge1cb0542002-06-24 12:35:37 +0000412 i2c_end();
Linus Nielsen Feltzing9c0e5d82002-06-19 12:03:41 +0000413 return ret;
414}
Linus Nielsen Feltzingd5bb9a42002-11-20 22:22:13 +0000415
416unsigned long mas_readver(void)
417{
418 int ret = 0;
419 unsigned char buf[16];
420 unsigned long value;
421
422 i2c_begin();
423
424 buf[0] = MAS_DATA_WRITE;
425 buf[1] = MAS_CMD_READ_IC_VER;
426 buf[2] = 0;
427
428 /* send read command */
429 if (i2c_write(MAS_DEV_WRITE,buf,3))
430 {
431 ret = -1;
432 }
433 else
434 {
435 if(mas_devread(&value, 1))
436 {
437 ret = -2;
438 }
439 else
440 {
441 ret = value;
442 }
443 }
444
445 i2c_end();
446 return ret;
447}
448
Linus Nielsen Feltzing9c0e5d82002-06-19 12:03:41 +0000449#endif