Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: GPL-2.0 */
0002 #ifndef __LM7000_H
0003 #define __LM7000_H
0004 
0005 /* Sanyo LM7000 tuner chip control
0006  *
0007  * Copyright 2012 Ondrej Zary <linux@rainbow-software.org>
0008  * based on radio-aimslab.c by M. Kirkwood
0009  * and radio-sf16fmi.c by M. Kirkwood and Petr Vandrovec
0010  */
0011 
0012 #define LM7000_DATA (1 << 0)
0013 #define LM7000_CLK  (1 << 1)
0014 #define LM7000_CE   (1 << 2)
0015 
0016 #define LM7000_FM_100   (0 << 20)
0017 #define LM7000_FM_50    (1 << 20)
0018 #define LM7000_FM_25    (2 << 20)
0019 #define LM7000_BIT_FM   (1 << 23)
0020 
0021 static inline void lm7000_set_freq(u32 freq, void *handle,
0022                 void (*set_pins)(void *handle, u8 pins))
0023 {
0024     int i;
0025     u8 data;
0026     u32 val;
0027 
0028     freq += 171200;     /* Add 10.7 MHz IF */
0029     freq /= 400;        /* Convert to 25 kHz units */
0030     val = freq | LM7000_FM_25 | LM7000_BIT_FM;
0031     /* write the 24-bit register, starting with LSB */
0032     for (i = 0; i < 24; i++) {
0033         data = val & (1 << i) ? LM7000_DATA : 0;
0034         set_pins(handle, data | LM7000_CE);
0035         udelay(2);
0036         set_pins(handle, data | LM7000_CE | LM7000_CLK);
0037         udelay(2);
0038         set_pins(handle, data | LM7000_CE);
0039         udelay(2);
0040     }
0041     set_pins(handle, 0);
0042 }
0043 
0044 #endif /* __LM7000_H */