radio: Add Sanyo LM7000 tuner driver
PATCH v2 1/3 radio: Add Sanyo LM7000 tuner driver
Add very simple driver for Sanyo LM7000 AM/FM tuner chip. Only FM is supported as there is no known HW with AM implemented.
This will be used by radio-aimslab and radio-sf16fmi.
Signed-off-by Ondrej Zary <[email protected]>
drivers/media/radio/lm7000.h new file +43 -0
@@ -0,0 +1,43 @@ +#ifndef __LM7000_H +#define __LM7000_H + +/* Sanyo LM7000 tuner chip control +* +* Copyright 2012 Ondrej Zary <[email protected]> +* based on radio-aimslab.c by M. Kirkwood +* and radio-sf16fmi.c by M. Kirkwood and Petr Vandrovec +*/ + +#define LM7000_DATA (1 << 0) +#define LM7000_CLK (1 << 1) +#define LM7000_CE (1 << 2) + +#define LM7000_FM_100 (0 << 20) +#define LM7000_FM_50 (1 << 20) +#define LM7000_FM_25 (2 << 20) +#define LM7000_BIT_FM (1 << 23) + +static inline void lm7000_set_freq (u32 freq,void *handle, +void (*set_pins)(void *handle,u8 pins)) +{ +int i; +u8 data; +u32 val; + + freq +=171200 ;/* Add 10.7 MHz IF */ + freq /=400 ;/* Convert to 25 kHz units */ + val = freq |LM7000_FM_25 |LM7000_BIT_FM ; +/* write the 24-bit register, starting with LSB */ +for (i =0 ; i <24 ; i++) { + data = val & (1 << i) ?LM7000_DATA :0 ; +set_pins (handle, data |LM7000_CE ); +udelay (2 ); +set_pins (handle, data |LM7000_CE |LM7000_CLK ); +udelay (2 ); +set_pins (handle, data |LM7000_CE ); +udelay (2 ); + } +set_pins (handle,0 ); +} + +#endif /* __LM7000_H */
Signature · 1 line
Ondrej Zary
Quoted 6 lines · On Wed June 13 2012 23:25:32 Ondrej Zary wrote:
Add very simple driver for Sanyo LM7000 AM/FM tuner chip. Only FM is supported as there is no known HW with AM implemented.
This will be used by radio-aimslab and radio-sf16fmi.
Signed-off-by Ondrej Zary <[email protected]>
For all three patches:
Acked-by Hans Verkuil <[email protected]>
Thanks!
Hans
Quoted 54 lines
drivers/media/radio/lm7000.h new file +43
-0@@ -0,0 +1,43 @@ +#ifndef __LM7000_H +#define __LM7000_H + +/* Sanyo LM7000 tuner chip control +* +* Copyright 2012 Ondrej Zary <[email protected]> +* based on radio-aimslab.c by M. Kirkwood +* and radio-sf16fmi.c by M. Kirkwood and Petr Vandrovec +*/ + +#define LM7000_DATA (1 << 0) +#define LM7000_CLK (1 << 1) +#define LM7000_CE (1 << 2) + +#define LM7000_FM_100 (0 << 20) +#define LM7000_FM_50 (1 << 20) +#define LM7000_FM_25 (2 << 20) +#define LM7000_BIT_FM (1 << 23) + +static inline void lm7000_set_freq (u32 freq,void *handle, +void (*set_pins)(void *handle,u8 pins)) +{ +int i; +u8 data; +u32 val; + + freq +=171200 ;/* Add 10.7 MHz IF */ + freq /=400 ;/* Convert to 25 kHz units */ + val = freq |LM7000_FM_25 |LM7000_BIT_FM ; +/* write the 24-bit register, starting with LSB */ +for (i =0 ; i <24 ; i++) { + data = val & (1 << i) ?LM7000_DATA :0 ; +set_pins (handle, data |LM7000_CE ); +udelay (2 ); +set_pins (handle, data |LM7000_CE |LM7000_CLK ); +udelay (2 ); +set_pins (handle, data |LM7000_CE ); +udelay (2 ); + } +set_pins (handle,0 ); +} + +#endif /* __LM7000_H */