/* SPDX-License-Identifier: GPL-2.0-or-later */ #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 */ 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; const 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 */