| /* 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 */ |