2019-05-27 08:55:06 +02:00
/* SPDX-License-Identifier: GPL-2.0-or-later */
2005-04-16 15:20:36 -07:00
# ifndef __SOUND_TEA575X_TUNER_H
# define __SOUND_TEA575X_TUNER_H
/*
* ALSA driver for TEA5757 / 5759 Philips AM / FM tuner chips
*
2007-10-15 09:50:19 +02:00
* Copyright ( c ) 2004 Jaroslav Kysela < perex @ perex . cz >
2006-06-21 01:29:38 -03:00
*/
2005-04-16 15:20:36 -07:00
2009-02-27 11:51:24 -03:00
# include <linux/videodev2.h>
2011-05-23 09:17:19 -03:00
# include <media/v4l2-ctrls.h>
2006-06-21 01:29:38 -03:00
# include <media/v4l2-dev.h>
2012-02-27 05:30:13 -03:00
# include <media/v4l2-device.h>
2005-04-16 15:20:36 -07:00
2011-05-12 22:17:56 +02:00
# define TEA575X_FMIF 10700
2012-07-12 17:39:18 -03:00
# define TEA575X_AMIF 450
2011-05-12 22:17:56 +02:00
2011-05-09 23:39:26 +02:00
# define TEA575X_DATA (1 << 0)
# define TEA575X_CLK (1 << 1)
# define TEA575X_WREN (1 << 2)
# define TEA575X_MOST (1 << 3)
2005-11-17 14:17:19 +01:00
struct snd_tea575x ;
2005-04-16 15:20:36 -07:00
struct snd_tea575x_ops {
2012-05-18 09:36:17 -03:00
/* Drivers using snd_tea575x must either define read_ and write_val */
void ( * write_val ) ( struct snd_tea575x * tea , u32 val ) ;
u32 ( * read_val ) ( struct snd_tea575x * tea ) ;
/* Or define the 3 pin functions */
2011-05-09 23:39:26 +02:00
void ( * set_pins ) ( struct snd_tea575x * tea , u8 pins ) ;
u8 ( * get_pins ) ( struct snd_tea575x * tea ) ;
void ( * set_direction ) ( struct snd_tea575x * tea , bool output ) ;
2005-04-16 15:20:36 -07:00
} ;
struct snd_tea575x {
2012-02-27 05:30:13 -03:00
struct v4l2_device * v4l2_dev ;
2012-05-19 07:57:03 -03:00
struct v4l2_file_operations fops ;
2011-05-23 09:17:19 -03:00
struct video_device vd ; /* video device */
2012-02-27 05:30:13 -03:00
int radio_nr ; /* radio_nr */
2011-03-19 16:32:53 +01:00
bool tea5759 ; /* 5759 chip is present */
2012-07-12 17:39:18 -03:00
bool has_am ; /* Device can tune to AM freqs */
2012-02-27 05:30:13 -03:00
bool cannot_read_data ; /* Device cannot read the data pin */
2012-05-18 12:21:57 -03:00
bool cannot_mute ; /* Device cannot mute */
2011-03-19 16:32:53 +01:00
bool mute ; /* Device is muted? */
bool stereo ; /* receiving stereo */
bool tuned ; /* tuned to a station */
2005-04-16 15:20:36 -07:00
unsigned int val ; /* hw value */
2012-07-12 17:39:18 -03:00
u32 band ; /* 0: FM, 1: FM-Japan, 2: AM */
2012-02-27 05:30:13 -03:00
u32 freq ; /* frequency */
2011-06-11 10:28:59 -03:00
struct mutex mutex ;
2015-11-22 08:32:53 -02:00
const struct snd_tea575x_ops * ops ;
2005-04-16 15:20:36 -07:00
void * private_data ;
2011-05-12 22:18:22 +02:00
u8 card [ 32 ] ;
u8 bus_info [ 32 ] ;
2011-05-23 09:17:19 -03:00
struct v4l2_ctrl_handler ctrl_handler ;
int ( * ext_init ) ( struct snd_tea575x * tea ) ;
2005-04-16 15:20:36 -07:00
} ;
2015-01-15 17:10:46 -03:00
int snd_tea575x_enum_freq_bands ( struct snd_tea575x * tea ,
struct v4l2_frequency_band * band ) ;
int snd_tea575x_g_tuner ( struct snd_tea575x * tea , struct v4l2_tuner * v ) ;
int snd_tea575x_s_hw_freq_seek ( struct file * file , struct snd_tea575x * tea ,
const struct v4l2_hw_freq_seek * a ) ;
2013-05-14 16:54:43 -03:00
int snd_tea575x_hw_init ( struct snd_tea575x * tea ) ;
2012-05-19 07:57:03 -03:00
int snd_tea575x_init ( struct snd_tea575x * tea , struct module * owner ) ;
2005-11-17 14:17:19 +01:00
void snd_tea575x_exit ( struct snd_tea575x * tea ) ;
2012-08-11 12:55:22 -03:00
void snd_tea575x_set_freq ( struct snd_tea575x * tea ) ;
2005-04-16 15:20:36 -07:00
# endif /* __SOUND_TEA575X_TUNER_H */