Add the rt linux 4.1.3-rt3 as base
[kvmfornfv.git] / kernel / drivers / media / radio / radio-tea5777.h
diff --git a/kernel/drivers/media/radio/radio-tea5777.h b/kernel/drivers/media/radio/radio-tea5777.h
new file mode 100644 (file)
index 0000000..4ea43a9
--- /dev/null
@@ -0,0 +1,90 @@
+#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.
+ *
+ *   You should have received a copy of the GNU General Public License
+ *   along with this program; if not, write to the Free Software
+ *   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+ *
+ */
+
+#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 */
+       u32 band;                       /* current band */
+       u32 freq;                       /* current frequency */
+       u32 audmode;                    /* last set audmode */
+       u32 seek_rangelow;              /* current hwseek limits */
+       u32 seek_rangehigh;
+       u32 read_reg;
+       u64 write_reg;
+       struct mutex mutex;
+       struct radio_tea5777_ops *ops;
+       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);
+int radio_tea5777_set_freq(struct radio_tea5777 *tea);
+
+#endif /* __RADIO_TEA5777_H */