Commit 76ea992a authored by Hans Verkuil's avatar Hans Verkuil Committed by Mauro Carvalho Chehab

[media] bttv: set initial tv/radio frequencies

Set an initial frequencies when the driver is loaded. That way G_FREQUENCY will
give a frequency that corresponds with reality.
Signed-off-by: default avatarHans Verkuil <hans.verkuil@cisco.com>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@redhat.com>
parent d9b67076
...@@ -2007,10 +2007,27 @@ static int bttv_g_frequency(struct file *file, void *priv, ...@@ -2007,10 +2007,27 @@ static int bttv_g_frequency(struct file *file, void *priv,
if (f->tuner) if (f->tuner)
return -EINVAL; return -EINVAL;
f->frequency = btv->freq; f->frequency = f->type == V4L2_TUNER_RADIO ?
btv->radio_freq : btv->tv_freq;
return 0; return 0;
} }
static void bttv_set_frequency(struct bttv *btv, struct v4l2_frequency *f)
{
bttv_call_all(btv, tuner, s_frequency, f);
/* s_frequency may clamp the frequency, so get the actual
frequency before assigning radio/tv_freq. */
bttv_call_all(btv, tuner, g_frequency, f);
if (f->type == V4L2_TUNER_RADIO) {
btv->radio_freq = f->frequency;
if (btv->has_matchbox)
tea5757_set_freq(btv, btv->radio_freq);
} else {
btv->tv_freq = f->frequency;
}
}
static int bttv_s_frequency(struct file *file, void *priv, static int bttv_s_frequency(struct file *file, void *priv,
struct v4l2_frequency *f) struct v4l2_frequency *f)
{ {
...@@ -2024,11 +2041,7 @@ static int bttv_s_frequency(struct file *file, void *priv, ...@@ -2024,11 +2041,7 @@ static int bttv_s_frequency(struct file *file, void *priv,
err = v4l2_prio_check(&btv->prio, fh->prio); err = v4l2_prio_check(&btv->prio, fh->prio);
if (err) if (err)
return err; return err;
bttv_set_frequency(btv, f);
btv->freq = f->frequency;
bttv_call_all(btv, tuner, s_frequency, f);
if (btv->has_matchbox && btv->radio_user)
tea5757_set_freq(btv, btv->freq);
return 0; return 0;
} }
...@@ -4235,6 +4248,11 @@ static void pci_set_command(struct pci_dev *dev) ...@@ -4235,6 +4248,11 @@ static void pci_set_command(struct pci_dev *dev)
static int bttv_probe(struct pci_dev *dev, const struct pci_device_id *pci_id) static int bttv_probe(struct pci_dev *dev, const struct pci_device_id *pci_id)
{ {
struct v4l2_frequency init_freq = {
.tuner = 0,
.type = V4L2_TUNER_ANALOG_TV,
.frequency = 980,
};
int result; int result;
unsigned char lat; unsigned char lat;
struct bttv *btv; struct bttv *btv;
...@@ -4375,6 +4393,10 @@ static int bttv_probe(struct pci_dev *dev, const struct pci_device_id *pci_id) ...@@ -4375,6 +4393,10 @@ static int bttv_probe(struct pci_dev *dev, const struct pci_device_id *pci_id)
/* some card-specific stuff (needs working i2c) */ /* some card-specific stuff (needs working i2c) */
bttv_init_card2(btv); bttv_init_card2(btv);
bttv_init_tuner(btv); bttv_init_tuner(btv);
if (btv->tuner_type != TUNER_ABSENT) {
bttv_set_frequency(btv, &init_freq);
btv->radio_freq = 90500 * 16; /* 90.5Mhz default */
}
init_irqreg(btv); init_irqreg(btv);
/* register video4linux + input */ /* register video4linux + input */
......
...@@ -418,7 +418,7 @@ struct bttv { ...@@ -418,7 +418,7 @@ struct bttv {
unsigned int input; unsigned int input;
unsigned int audio; unsigned int audio;
unsigned int mute; unsigned int mute;
unsigned long freq; unsigned long tv_freq;
unsigned int tvnorm; unsigned int tvnorm;
int hue, contrast, bright, saturation; int hue, contrast, bright, saturation;
struct v4l2_framebuffer fbuf; struct v4l2_framebuffer fbuf;
...@@ -442,6 +442,7 @@ struct bttv { ...@@ -442,6 +442,7 @@ struct bttv {
int has_radio; int has_radio;
int radio_user; int radio_user;
int radio_uses_msp_demodulator; int radio_uses_msp_demodulator;
unsigned long radio_freq;
/* miro/pinnacle + Aimslab VHX /* miro/pinnacle + Aimslab VHX
philips matchbox (tea5757 radio tuner) support */ philips matchbox (tea5757 radio tuner) support */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment