radio-tea5777.h revision d7aab0bf9dbd658c25e815aa034042aed6801f3e
14faba767c6243b43ad975406fe027be7394e4591Hans de Goede#ifndef __RADIO_TEA5777_H
24faba767c6243b43ad975406fe027be7394e4591Hans de Goede#define __RADIO_TEA5777_H
34faba767c6243b43ad975406fe027be7394e4591Hans de Goede
44faba767c6243b43ad975406fe027be7394e4591Hans de Goede/*
54faba767c6243b43ad975406fe027be7394e4591Hans de Goede *   v4l2 driver for TEA5777 Philips AM/FM radio tuner chips
64faba767c6243b43ad975406fe027be7394e4591Hans de Goede *
74faba767c6243b43ad975406fe027be7394e4591Hans de Goede *	Copyright (c) 2012 Hans de Goede <hdegoede@redhat.com>
84faba767c6243b43ad975406fe027be7394e4591Hans de Goede *
94faba767c6243b43ad975406fe027be7394e4591Hans de Goede *   Based on the ALSA driver for TEA5757/5759 Philips AM/FM radio tuner chips:
104faba767c6243b43ad975406fe027be7394e4591Hans de Goede *
114faba767c6243b43ad975406fe027be7394e4591Hans de Goede *	Copyright (c) 2004 Jaroslav Kysela <perex@perex.cz>
124faba767c6243b43ad975406fe027be7394e4591Hans de Goede *	Copyright (c) 2012 Hans de Goede <hdegoede@redhat.com>
134faba767c6243b43ad975406fe027be7394e4591Hans de Goede *
144faba767c6243b43ad975406fe027be7394e4591Hans de Goede *   This program is free software; you can redistribute it and/or modify
154faba767c6243b43ad975406fe027be7394e4591Hans de Goede *   it under the terms of the GNU General Public License as published by
164faba767c6243b43ad975406fe027be7394e4591Hans de Goede *   the Free Software Foundation; either version 2 of the License, or
174faba767c6243b43ad975406fe027be7394e4591Hans de Goede *   (at your option) any later version.
184faba767c6243b43ad975406fe027be7394e4591Hans de Goede *
194faba767c6243b43ad975406fe027be7394e4591Hans de Goede *   This program is distributed in the hope that it will be useful,
204faba767c6243b43ad975406fe027be7394e4591Hans de Goede *   but WITHOUT ANY WARRANTY; without even the implied warranty of
214faba767c6243b43ad975406fe027be7394e4591Hans de Goede *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
224faba767c6243b43ad975406fe027be7394e4591Hans de Goede *   GNU General Public License for more details.
234faba767c6243b43ad975406fe027be7394e4591Hans de Goede *
244faba767c6243b43ad975406fe027be7394e4591Hans de Goede *   You should have received a copy of the GNU General Public License
254faba767c6243b43ad975406fe027be7394e4591Hans de Goede *   along with this program; if not, write to the Free Software
264faba767c6243b43ad975406fe027be7394e4591Hans de Goede *   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
274faba767c6243b43ad975406fe027be7394e4591Hans de Goede *
284faba767c6243b43ad975406fe027be7394e4591Hans de Goede */
294faba767c6243b43ad975406fe027be7394e4591Hans de Goede
304faba767c6243b43ad975406fe027be7394e4591Hans de Goede#include <linux/videodev2.h>
314faba767c6243b43ad975406fe027be7394e4591Hans de Goede#include <media/v4l2-ctrls.h>
324faba767c6243b43ad975406fe027be7394e4591Hans de Goede#include <media/v4l2-dev.h>
334faba767c6243b43ad975406fe027be7394e4591Hans de Goede#include <media/v4l2-device.h>
344faba767c6243b43ad975406fe027be7394e4591Hans de Goede
354faba767c6243b43ad975406fe027be7394e4591Hans de Goede#define TEA575X_FMIF	10700
364faba767c6243b43ad975406fe027be7394e4591Hans de Goede#define TEA575X_AMIF	  450
374faba767c6243b43ad975406fe027be7394e4591Hans de Goede
384faba767c6243b43ad975406fe027be7394e4591Hans de Goedestruct radio_tea5777;
394faba767c6243b43ad975406fe027be7394e4591Hans de Goede
404faba767c6243b43ad975406fe027be7394e4591Hans de Goedestruct radio_tea5777_ops {
414faba767c6243b43ad975406fe027be7394e4591Hans de Goede	/*
424faba767c6243b43ad975406fe027be7394e4591Hans de Goede	 * Write the 6 bytes large write register of the tea5777
434faba767c6243b43ad975406fe027be7394e4591Hans de Goede	 *
444faba767c6243b43ad975406fe027be7394e4591Hans de Goede	 * val represents the 6 write registers, with byte 1 from the
454faba767c6243b43ad975406fe027be7394e4591Hans de Goede	 * datasheet being the most significant byte (so byte 5 of the u64),
464faba767c6243b43ad975406fe027be7394e4591Hans de Goede	 * and byte 6 from the datasheet being the least significant byte.
474faba767c6243b43ad975406fe027be7394e4591Hans de Goede	 *
484faba767c6243b43ad975406fe027be7394e4591Hans de Goede	 * returns 0 on success.
494faba767c6243b43ad975406fe027be7394e4591Hans de Goede	 */
504faba767c6243b43ad975406fe027be7394e4591Hans de Goede	int (*write_reg)(struct radio_tea5777 *tea, u64 val);
514faba767c6243b43ad975406fe027be7394e4591Hans de Goede	/*
524faba767c6243b43ad975406fe027be7394e4591Hans de Goede	 * Read the 3 bytes large read register of the tea5777
534faba767c6243b43ad975406fe027be7394e4591Hans de Goede	 *
544faba767c6243b43ad975406fe027be7394e4591Hans de Goede	 * The read value gets returned in val, akin to write_reg, byte 1 from
554faba767c6243b43ad975406fe027be7394e4591Hans de Goede	 * the datasheet is stored as the most significant byte (so byte 2 of
564faba767c6243b43ad975406fe027be7394e4591Hans de Goede	 * the u32), and byte 3 from the datasheet gets stored as the least
574faba767c6243b43ad975406fe027be7394e4591Hans de Goede	 * significant byte (iow byte 0 of the u32).
584faba767c6243b43ad975406fe027be7394e4591Hans de Goede	 *
594faba767c6243b43ad975406fe027be7394e4591Hans de Goede	 * returns 0 on success.
604faba767c6243b43ad975406fe027be7394e4591Hans de Goede	 */
614faba767c6243b43ad975406fe027be7394e4591Hans de Goede	int (*read_reg)(struct radio_tea5777 *tea, u32 *val);
624faba767c6243b43ad975406fe027be7394e4591Hans de Goede};
634faba767c6243b43ad975406fe027be7394e4591Hans de Goede
644faba767c6243b43ad975406fe027be7394e4591Hans de Goedestruct radio_tea5777 {
654faba767c6243b43ad975406fe027be7394e4591Hans de Goede	struct v4l2_device *v4l2_dev;
664faba767c6243b43ad975406fe027be7394e4591Hans de Goede	struct v4l2_file_operations fops;
674faba767c6243b43ad975406fe027be7394e4591Hans de Goede	struct video_device vd;		/* video device */
684faba767c6243b43ad975406fe027be7394e4591Hans de Goede	bool has_am;			/* Device can tune to AM freqs */
694faba767c6243b43ad975406fe027be7394e4591Hans de Goede	bool write_before_read;		/* must write before read quirk */
704faba767c6243b43ad975406fe027be7394e4591Hans de Goede	bool needs_write;		/* for write before read quirk */
71d7aab0bf9dbd658c25e815aa034042aed6801f3eHans de Goede	u32 band;			/* current band */
724faba767c6243b43ad975406fe027be7394e4591Hans de Goede	u32 freq;			/* current frequency */
73d7aab0bf9dbd658c25e815aa034042aed6801f3eHans de Goede	u32 audmode;			/* last set audmode */
744faba767c6243b43ad975406fe027be7394e4591Hans de Goede	u32 seek_rangelow;		/* current hwseek limits */
754faba767c6243b43ad975406fe027be7394e4591Hans de Goede	u32 seek_rangehigh;
764faba767c6243b43ad975406fe027be7394e4591Hans de Goede	u32 read_reg;
774faba767c6243b43ad975406fe027be7394e4591Hans de Goede	u64 write_reg;
784faba767c6243b43ad975406fe027be7394e4591Hans de Goede	struct mutex mutex;
794faba767c6243b43ad975406fe027be7394e4591Hans de Goede	struct radio_tea5777_ops *ops;
804faba767c6243b43ad975406fe027be7394e4591Hans de Goede	void *private_data;
814faba767c6243b43ad975406fe027be7394e4591Hans de Goede	u8 card[32];
824faba767c6243b43ad975406fe027be7394e4591Hans de Goede	u8 bus_info[32];
834faba767c6243b43ad975406fe027be7394e4591Hans de Goede	struct v4l2_ctrl_handler ctrl_handler;
844faba767c6243b43ad975406fe027be7394e4591Hans de Goede};
854faba767c6243b43ad975406fe027be7394e4591Hans de Goede
864faba767c6243b43ad975406fe027be7394e4591Hans de Goedeint radio_tea5777_init(struct radio_tea5777 *tea, struct module *owner);
874faba767c6243b43ad975406fe027be7394e4591Hans de Goedevoid radio_tea5777_exit(struct radio_tea5777 *tea);
884faba767c6243b43ad975406fe027be7394e4591Hans de Goede
894faba767c6243b43ad975406fe027be7394e4591Hans de Goede#endif /* __RADIO_TEA5777_H */
90