blob: 95697a79e9b34ee9862bfdf4e65d42db4c05ede2 [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
Linus Nielsen Feltzingd1d63962002-06-26 12:39:49 +0000269void mas_reset(void)
270{
Linus Nielsen Feltzingbef7ab02003-11-07 12:15:24 +0000271 or_b(0x01, &PAIORH);
Jens Arnolddbd11c92004-11-22 01:54:26 +0000272
273#if CONFIG_HWCODEC == MAS3507D
274 or_b(0x01, &PAIORH);
275 and_b(~0x01, &PADRH);
276 sleep(HZ/100);
277 or_b(0x01, &PADRH);
278 sleep(HZ/5);
279
280#elif (CONFIG_HWCODEC == MAS3587F) || (CONFIG_HWCODEC == MAS3539F)
Linus Nielsen Feltzingd1d63962002-06-26 12:39:49 +0000281 if(old_recorder)
282 {
283 /* Older recorder models don't invert the POR signal */
Linus Nielsen Feltzingbef7ab02003-11-07 12:15:24 +0000284 or_b(0x01, &PADRH);
Linus Nielsen Feltzingd1d63962002-06-26 12:39:49 +0000285 sleep(HZ/100);
Linus Nielsen Feltzingbef7ab02003-11-07 12:15:24 +0000286 and_b(~0x01, &PADRH);
Linus Nielsen Feltzingd1d63962002-06-26 12:39:49 +0000287 sleep(HZ/5);
288 }
289 else
290 {
Linus Nielsen Feltzingbef7ab02003-11-07 12:15:24 +0000291 and_b(~0x01, &PADRH);
Linus Nielsen Feltzingd1d63962002-06-26 12:39:49 +0000292 sleep(HZ/100);
Linus Nielsen Feltzingbef7ab02003-11-07 12:15:24 +0000293 or_b(0x01, &PADRH);
Linus Nielsen Feltzingd1d63962002-06-26 12:39:49 +0000294 sleep(HZ/5);
Jens Arnolddbd11c92004-11-22 01:54:26 +0000295 }
296#endif
Linus Nielsen Feltzingd1d63962002-06-26 12:39:49 +0000297}
298
Jens Arnolddbd11c92004-11-22 01:54:26 +0000299#if (CONFIG_HWCODEC == MAS3587F) || (CONFIG_HWCODEC == MAS3539F)
Linus Nielsen Feltzing9c0e5d82002-06-19 12:03:41 +0000300int mas_direct_config_read(unsigned char reg)
301{
Linus Nielsen Feltzing9c0e5d82002-06-19 12:03:41 +0000302 int ret = 0;
Linus Nielsen Feltzinge1cb0542002-06-24 12:35:37 +0000303 unsigned char tmp[2];
Linus Nielsen Feltzing9c0e5d82002-06-19 12:03:41 +0000304
Linus Nielsen Feltzinge1cb0542002-06-24 12:35:37 +0000305 i2c_begin();
306
Linus Nielsen Feltzing9c0e5d82002-06-19 12:03:41 +0000307 i2c_start();
308 i2c_outb(MAS_DEV_WRITE);
309 if (i2c_getack()) {
310 i2c_outb(reg);
311 if (i2c_getack()) {
312 i2c_start();
313 i2c_outb(MAS_DEV_READ);
314 if (i2c_getack()) {
315 tmp[0] = i2c_inb(0);
316 tmp[1] = i2c_inb(1); /* NAK the last byte */
317 ret = (tmp[0] << 8) | tmp[1];
318 }
319 else
320 ret = -3;
321 }
322 else
323 ret = -2;
324 }
325 else
326 ret = -1;
327
328 i2c_stop();
329
Linus Nielsen Feltzinge1cb0542002-06-24 12:35:37 +0000330 i2c_end();
Linus Nielsen Feltzing9c0e5d82002-06-19 12:03:41 +0000331 return ret;
332}
333
334int mas_direct_config_write(unsigned char reg, unsigned int val)
335{
Linus Nielsen Feltzinge1cb0542002-06-24 12:35:37 +0000336 int ret = 0;
Linus Nielsen Feltzing9c0e5d82002-06-19 12:03:41 +0000337 unsigned char buf[3];
338
Linus Nielsen Feltzinge1cb0542002-06-24 12:35:37 +0000339 i2c_begin();
340
Linus Nielsen Feltzing9c0e5d82002-06-19 12:03:41 +0000341 buf[0] = reg;
342 buf[1] = (val >> 8) & 0xff;
343 buf[2] = val & 0xff;
344
345 /* send write command */
346 if (i2c_write(MAS_DEV_WRITE,buf,3))
347 {
Linus Nielsen Feltzinge1cb0542002-06-24 12:35:37 +0000348 ret = -1;
Linus Nielsen Feltzing9c0e5d82002-06-19 12:03:41 +0000349 }
Linus Nielsen Feltzinge1cb0542002-06-24 12:35:37 +0000350
351 i2c_end();
Linus Nielsen Feltzing417685f2002-06-25 14:12:37 +0000352 return ret;
Linus Nielsen Feltzing9c0e5d82002-06-19 12:03:41 +0000353}
354
355int mas_codec_writereg(int reg, unsigned int val)
356{
Linus Nielsen Feltzinge1cb0542002-06-24 12:35:37 +0000357 int ret = 0;
358 unsigned char buf[5];
Linus Nielsen Feltzing9c0e5d82002-06-19 12:03:41 +0000359
Linus Nielsen Feltzinge1cb0542002-06-24 12:35:37 +0000360 i2c_begin();
361
362 buf[0] = MAS_CODEC_WRITE;
363 buf[1] = (reg >> 8) & 0xff;
364 buf[2] = reg & 0xff;
365 buf[3] = (val >> 8) & 0xff;
366 buf[4] = val & 0xff;
Linus Nielsen Feltzing9c0e5d82002-06-19 12:03:41 +0000367
368 /* send write command */
Linus Nielsen Feltzinge1cb0542002-06-24 12:35:37 +0000369 if (i2c_write(MAS_DEV_WRITE,buf,5))
Linus Nielsen Feltzing9c0e5d82002-06-19 12:03:41 +0000370 {
Linus Nielsen Feltzinge1cb0542002-06-24 12:35:37 +0000371 ret = -1;
Linus Nielsen Feltzing9c0e5d82002-06-19 12:03:41 +0000372 }
Linus Nielsen Feltzinge1cb0542002-06-24 12:35:37 +0000373
374 i2c_end();
375 return ret;
Linus Nielsen Feltzing9c0e5d82002-06-19 12:03:41 +0000376}
377
378int mas_codec_readreg(int reg)
379{
Linus Nielsen Feltzing9c0e5d82002-06-19 12:03:41 +0000380 int ret = 0;
381 unsigned char buf[16];
382 unsigned char tmp[2];
383
Linus Nielsen Feltzinge1cb0542002-06-24 12:35:37 +0000384 i2c_begin();
385
386 buf[0] = MAS_CODEC_WRITE;
387 buf[1] = (reg >> 8) & 0xff;
388 buf[2] = reg & 0xff;
Linus Nielsen Feltzing9c0e5d82002-06-19 12:03:41 +0000389
390 /* send read command */
Linus Nielsen Feltzinge1cb0542002-06-24 12:35:37 +0000391 if (i2c_write(MAS_DEV_WRITE,buf,3))
Linus Nielsen Feltzing9c0e5d82002-06-19 12:03:41 +0000392 {
Linus Nielsen Feltzing63f0b5e2002-11-24 11:47:24 +0000393 ret = -1;
Linus Nielsen Feltzing9c0e5d82002-06-19 12:03:41 +0000394 }
Linus Nielsen Feltzing63f0b5e2002-11-24 11:47:24 +0000395 else
396 {
397 i2c_start();
398 i2c_outb(MAS_DEV_WRITE);
Linus Nielsen Feltzing9c0e5d82002-06-19 12:03:41 +0000399 if (i2c_getack()) {
Linus Nielsen Feltzing63f0b5e2002-11-24 11:47:24 +0000400 i2c_outb(MAS_CODEC_READ);
Linus Nielsen Feltzing9c0e5d82002-06-19 12:03:41 +0000401 if (i2c_getack()) {
Linus Nielsen Feltzing63f0b5e2002-11-24 11:47:24 +0000402 i2c_start();
403 i2c_outb(MAS_DEV_READ);
404 if (i2c_getack()) {
405 tmp[0] = i2c_inb(0);
406 tmp[1] = i2c_inb(1); /* NAK the last byte */
407 ret = (tmp[0] << 8) | tmp[1];
408 }
409 else
410 ret = -4;
Linus Nielsen Feltzing9c0e5d82002-06-19 12:03:41 +0000411 }
412 else
413 ret = -3;
414 }
415 else
416 ret = -2;
Linus Nielsen Feltzing9c0e5d82002-06-19 12:03:41 +0000417
Linus Nielsen Feltzing63f0b5e2002-11-24 11:47:24 +0000418 i2c_stop();
419 }
420
Linus Nielsen Feltzinge1cb0542002-06-24 12:35:37 +0000421 i2c_end();
Linus Nielsen Feltzing9c0e5d82002-06-19 12:03:41 +0000422 return ret;
423}
Linus Nielsen Feltzingd5bb9a42002-11-20 22:22:13 +0000424
425unsigned long mas_readver(void)
426{
427 int ret = 0;
428 unsigned char buf[16];
429 unsigned long value;
430
431 i2c_begin();
432
433 buf[0] = MAS_DATA_WRITE;
434 buf[1] = MAS_CMD_READ_IC_VER;
435 buf[2] = 0;
436
437 /* send read command */
438 if (i2c_write(MAS_DEV_WRITE,buf,3))
439 {
440 ret = -1;
441 }
442 else
443 {
444 if(mas_devread(&value, 1))
445 {
446 ret = -2;
447 }
448 else
449 {
450 ret = value;
451 }
452 }
453
454 i2c_end();
455 return ret;
456}
457
Linus Nielsen Feltzing9c0e5d82002-06-19 12:03:41 +0000458#endif