radio-sf16fmi: Fix remaining v4l2-compliance problems
cover radio-sf16fmi: Fix remaining v4l2-compliance problems
These patches fix two remaining v4l2-compliance problems of radio-sf16fmi driver after control framework conversion:
http://www.mail-archive.com/linux-media%40vger.kernel.org/msg62772.html
Tested with SF16-FMI card.
Signature · 1 line
Ondrej Zary
PATCH 1/2 radio-sf16fmi: Add module name to bus_info
Fix v4l2-compliance in VIDIOC_QUERYCAP by changing "ISA" to "ISA:radio-sf16fmi".
Signed-off-by Ondrej Zary <[email protected]>
--- drivers/media/radio/radio-sf16fmi.c | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-)
drivers/media/radio/radio-sf16fmi.c +1 -1
@@ -123,7 +123,7 @@ static int vidioc_querycap(struct file *file, void *priv, {strlcpy (v->driver,"radio-sf16fmi" ,sizeof (v->driver));strlcpy (v->card,"SF16-FMI/FMP/FMD radio" ,sizeof (v->card)); -strlcpy (v->bus_info,"ISA" ,sizeof (v->bus_info)); +strlcpy (v->bus_info,"ISA:radio-sf16fmi" ,sizeof (v->bus_info)); v->device_caps =V4L2_CAP_TUNER |V4L2_CAP_RADIO ; v->capabilities = v->device_caps |V4L2_CAP_DEVICE_CAPS ;return 0 ;
Signature · 1 line
Ondrej Zary
PATCH 2/2 radio-sf16fmi: Set frequency during init
In reply to Ondrej ZarySet freqency during initialization to fix v4l2-compliance error.
This also fixes VIDIOC_G_FREQUENCY always returning zero (broken by me during LM7000 conversion).
Signed-off-by Ondrej Zary <[email protected]>
--- drivers/media/radio/radio-sf16fmi.c | 25 +++++++++++++++++-------- 1 files changed, 17 insertions(+), 8 deletions(-)
drivers/media/radio/radio-sf16fmi.c +17 -8
@@ -50,7 +50,7 @@ struct fmistruct video_device vdev;int io;bool mute; -unsigned long curfreq;/* freq in kHz */ +u32 curfreq;/* freq in kHz */ struct mutex lock; };
@@ -118,6 +118,14 @@ static inline int fmi_getsigstr(struct fmi *fmi)return (res &2 ) ?0 :0xFFFF ; } +static void fmi_set_freq (struct fmi *fmi) +{ + fmi->curfreq =clamp (fmi->curfreq,RSF16_MINFREQ ,RSF16_MAXFREQ ); +/* rounding in steps of 800 to match the freq +that will be used */ +lm7000_set_freq ((fmi->curfreq /800 ) *800 , fmi, fmi_set_pins); +} +static int vidioc_querycap (struct file *file,void *priv,struct v4l2_capability *v) {
@@ -158,14 +166,13 @@ static int vidioc_s_frequency(struct file *file, void *priv, const struct v4l2_frequency *f) {struct fmi *fmi =video_drvdata (file); -unsigned freq = f->frequency;if (f->tuner !=0 || f->type !=V4L2_TUNER_RADIO )return -EINVAL ; -clamp (freq,RSF16_MINFREQ ,RSF16_MAXFREQ ); -/* rounding in steps of 800 to match the freq -that will be used */ -lm7000_set_freq ((freq /800 ) *800 , fmi, fmi_set_pins); + + fmi->curfreq = f->frequency; +fmi_set_freq (fmi); +return 0 ; }
@@ -342,8 +349,10 @@ static int __init fmi_init(void)mutex_init (&fmi->lock); -/* mute card - prevents noisy bootups */ -fmi_mute (fmi); +/* mute card and set default frequency */ + fmi->mute =1 ; + fmi->curfreq =RSF16_MINFREQ ; +fmi_set_freq (fmi);if (video_register_device (&fmi->vdev,VFL_TYPE_RADIO , radio_nr) <0 ) {v4l2_ctrl_handler_free (hdl);
Signature · 1 line
Ondrej Zary