Annotation of sys/dev/ic/lm700x.c, Revision 1.1.1.1
1.1 nbrk 1: /* $OpenBSD: lm700x.c,v 1.3 2007/05/22 04:14:03 jsg Exp $ */
2:
3: /*
4: * Copyright (c) 2001 Vladimir Popov <jumbo@narod.ru>
5: * All rights reserved.
6: *
7: * Redistribution and use in source and binary forms, with or without
8: * modification, are permitted provided that the following conditions
9: * are met:
10: * 1. Redistributions of source code must retain the above copyright
11: * notice, this list of conditions and the following disclaimer.
12: * 2. Redistributions in binary form must reproduce the above copyright
13: * notice, this list of conditions and the following disclaimer in the
14: * documentation and/or other materials provided with the distribution.
15: *
16: * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
17: * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
18: * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
19: * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
20: * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
21: * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
22: * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
23: * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
24: * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
25: * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26: */
27:
28: /* Implementation of most common lm700x routines */
29:
30: /*
31: * Sanyo LM7001 Direct PLL Frequency Synthesizer
32: *
33: * The LM7001J and LM7001JM (used in Aztech/PackardBell cards) are PLL
34: * frequency synthesizer LSIs for tuners. These LSIs are software compatible
35: * with LM7000 (used in Radiotrack, Radioreveal RA300, some Mediaforte cards),
36: * but do not include an IF calculation circuit.
37: *
38: * The FM VCO circuit includes a high-speed programmable divider that can
39: * divide directly.
40: *
41: * Features:
42: * Seven reference frequencies: 1, 5, 9, 10, 25, 50, and 100 kHz;
43: * Band-switching outputs (3 bits);
44: * Controller clock output (400 kHz);
45: * Serial input circuit for data input (using the CE, CL and DATA pins).
46: *
47: * The LM7001J and LM7001JM have a 24-bit shift register.
48: */
49:
50: #include <sys/param.h>
51: #include <sys/radioio.h>
52:
53: #include <dev/ic/lm700x.h>
54:
55: u_int32_t
56: lm700x_encode_freq(u_int32_t nfreq, u_int32_t rf)
57: {
58: nfreq += IF_FREQ;
59: nfreq /= lm700x_decode_ref(rf);
60: return nfreq;
61: }
62:
63: void
64: lm700x_hardware_write(struct lm700x_t *lm, u_int32_t data, u_int32_t addon)
65: {
66: int i;
67:
68: lm->init(lm->iot, lm->ioh, lm->offset, lm->rsetdata | addon);
69:
70: for (i = 0; i < LM700X_REGISTER_LENGTH; i++)
71: if (data & (1 << i)) {
72: bus_space_write_1(lm->iot, lm->ioh, lm->offset,
73: lm->wocl | addon);
74: DELAY(LM700X_WRITE_DELAY);
75: bus_space_write_1(lm->iot, lm->ioh, lm->offset,
76: lm->woch | addon);
77: DELAY(LM700X_WRITE_DELAY);
78: bus_space_write_1(lm->iot, lm->ioh, lm->offset,
79: lm->wocl | addon);
80: } else {
81: bus_space_write_1(lm->iot, lm->ioh, lm->offset,
82: lm->wzcl | addon);
83: DELAY(LM700X_WRITE_DELAY);
84: bus_space_write_1(lm->iot, lm->ioh, lm->offset,
85: lm->wzch | addon);
86: DELAY(LM700X_WRITE_DELAY);
87: bus_space_write_1(lm->iot, lm->ioh, lm->offset,
88: lm->wzcl | addon);
89: }
90:
91: lm->rset(lm->iot, lm->ioh, lm->offset, lm->rsetdata | addon);
92: }
93:
94: u_int32_t
95: lm700x_encode_ref(u_int8_t rf)
96: {
97: u_int32_t ret;
98:
99: if (rf < 36)
100: ret = LM700X_REF_025;
101: else if (rf > 35 && rf < 75)
102: ret = LM700X_REF_050;
103: else
104: ret = LM700X_REF_100;
105:
106: return ret;
107: }
108:
109: u_int8_t
110: lm700x_decode_ref(u_int32_t rf)
111: {
112: u_int8_t ret;
113:
114: switch (rf) {
115: case LM700X_REF_100:
116: ret = 100;
117: break;
118: case LM700X_REF_025:
119: ret = 25;
120: break;
121: case LM700X_REF_050:
122: /* FALLTHROUGH */
123: default:
124: ret = 50;
125: break;
126: }
127:
128: return ret;
129: }
CVSweb