2019-05-27 08:55:06 +02:00
/* SPDX-License-Identifier: GPL-2.0-or-later */
2012-06-23 04:39:58 -03: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 >
*/
# 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 15:49:59 -03:00
u32 band ; /* current band */
2012-06-23 04:39:58 -03:00
u32 freq ; /* current frequency */
2012-08-10 15:49:59 -03:00
u32 audmode ; /* last set audmode */
2012-06-23 04:39:58 -03:00
u32 seek_rangelow ; /* current hwseek limits */
u32 seek_rangehigh ;
u32 read_reg ;
u64 write_reg ;
struct mutex mutex ;
2015-11-13 09:38:32 -02:00
const struct radio_tea5777_ops * ops ;
2012-06-23 04:39:58 -03: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 12:37:13 -03:00
int radio_tea5777_set_freq ( struct radio_tea5777 * tea ) ;
2012-06-23 04:39:58 -03:00
# endif /* __RADIO_TEA5777_H */