Annotation of sys/dev/ic/lm700x.c, Revision 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