2012-06-23 11:39:58 +04:00
# ifndef __RADIO_TEA5777_H
# define __RADIO_TEA5777_H
/*
* v4l2 driver for TEA5777 Philips AM / FM radio tuner chips
*
* Copyright ( c ) 2012 Hans de Goede < hdegoede @ redhat . com >
*
* Based on the ALSA driver for TEA5757 / 5759 Philips AM / FM radio tuner chips :
*
* Copyright ( c ) 2004 Jaroslav Kysela < perex @ perex . cz >
* Copyright ( c ) 2012 Hans de Goede < hdegoede @ redhat . com >
*
* This program is free software ; you can redistribute it and / or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation ; either version 2 of the License , or
* ( at your option ) any later version .
*
* This program is distributed in the hope that it will be useful ,
* but WITHOUT ANY WARRANTY ; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the
* GNU General Public License for more details .
*
*/
# include <linux/videodev2.h>
# include <media/v4l2-ctrls.h>
# include <media/v4l2-dev.h>
# include <media/v4l2-device.h>
# define TEA575X_FMIF 10700
# define TEA575X_AMIF 450
struct radio_tea5777 ;
struct radio_tea5777_ops {
/*
* Write the 6 bytes large write register of the tea5777
*
* val represents the 6 write registers , with byte 1 from the
* datasheet being the most significant byte ( so byte 5 of the u64 ) ,
* and byte 6 from the datasheet being the least significant byte .
*
* returns 0 on success .
*/
int ( * write_reg ) ( struct radio_tea5777 * tea , u64 val ) ;
/*
* Read the 3 bytes large read register of the tea5777
*
* The read value gets returned in val , akin to write_reg , byte 1 from
* the datasheet is stored as the most significant byte ( so byte 2 of
* the u32 ) , and byte 3 from the datasheet gets stored as the least
* significant byte ( iow byte 0 of the u32 ) .
*
* returns 0 on success .
*/
int ( * read_reg ) ( struct radio_tea5777 * tea , u32 * val ) ;
} ;
struct radio_tea5777 {
struct v4l2_device * v4l2_dev ;
struct v4l2_file_operations fops ;
struct video_device vd ; /* video device */
bool has_am ; /* Device can tune to AM freqs */
bool write_before_read ; /* must write before read quirk */
bool needs_write ; /* for write before read quirk */
2012-08-10 22:49:59 +04:00
u32 band ; /* current band */
2012-06-23 11:39:58 +04:00
u32 freq ; /* current frequency */
2012-08-10 22:49:59 +04:00
u32 audmode ; /* last set audmode */
2012-06-23 11:39:58 +04:00
u32 seek_rangelow ; /* current hwseek limits */
u32 seek_rangehigh ;
u32 read_reg ;
u64 write_reg ;
struct mutex mutex ;
2015-11-13 14:38:32 +03:00
const struct radio_tea5777_ops * ops ;
2012-06-23 11:39:58 +04:00
void * private_data ;
u8 card [ 32 ] ;
u8 bus_info [ 32 ] ;
struct v4l2_ctrl_handler ctrl_handler ;
} ;
int radio_tea5777_init ( struct radio_tea5777 * tea , struct module * owner ) ;
void radio_tea5777_exit ( struct radio_tea5777 * tea ) ;
2012-08-11 19:37:13 +04:00
int radio_tea5777_set_freq ( struct radio_tea5777 * tea ) ;
2012-06-23 11:39:58 +04:00
# endif /* __RADIO_TEA5777_H */