diff options
Diffstat (limited to 'linux/drivers/media')
-rw-r--r-- | linux/drivers/media/video/cx88/cx88-video.c | 15 | ||||
-rw-r--r-- | linux/drivers/media/video/tea5767.c | 48 | ||||
-rw-r--r-- | linux/drivers/media/video/tuner-core.c | 3 |
3 files changed, 41 insertions, 25 deletions
diff --git a/linux/drivers/media/video/cx88/cx88-video.c b/linux/drivers/media/video/cx88/cx88-video.c index 7edb24afa..f508b1256 100644 --- a/linux/drivers/media/video/cx88/cx88-video.c +++ b/linux/drivers/media/video/cx88/cx88-video.c @@ -1,5 +1,5 @@ /* - * $Id: cx88-video.c,v 1.67 2005/06/17 20:49:30 nsh Exp $ + * $Id: cx88-video.c,v 1.68 2005/06/19 15:59:25 mchehab Exp $ * * device driver for Conexant 2388x based TV cards * video4linux video interface @@ -1760,8 +1760,19 @@ static int radio_do_ioctl(struct inode *inode, struct file *file, *id = 0; return 0; } - case VIDIOC_S_AUDIO: case VIDIOC_S_TUNER: + { + struct v4l2_tuner *t = arg; + + if (0 != t->index) + return -EINVAL; + + cx88_call_i2c_clients(dev->core,VIDIOC_S_TUNER,t); + + return 0; + } + + case VIDIOC_S_AUDIO: case VIDIOC_S_INPUT: case VIDIOC_S_STD: return 0; diff --git a/linux/drivers/media/video/tea5767.c b/linux/drivers/media/video/tea5767.c index ed7b56944..7eee795c7 100644 --- a/linux/drivers/media/video/tea5767.c +++ b/linux/drivers/media/video/tea5767.c @@ -2,7 +2,7 @@ * For Philips TEA5767 FM Chip used on some TV Cards like Prolink Pixelview * I2C address is allways 0xC0. * - * $Id: tea5767.c,v 1.7 2005/06/15 02:43:03 mchehab Exp $ + * $Id: tea5767.c,v 1.8 2005/06/19 15:59:25 mchehab Exp $ * * Copyright (c) 2005 Mauro Carvalho Chehab (mchehab@brturbo.com.br) * This code is placed under the terms of the GNU General Public License @@ -129,18 +129,6 @@ static void set_tv_freq(struct i2c_client *c, unsigned int freq) tuner_warn("This tuner doesn't support TV freq.\n"); } -/* Closest value table */ -/* int radio_frq[16]={ 0, 1, 2, 4, 5, 6, 8, 9, 10, 11, 12, 14, 15, 16, 17, 18 }; */ -/* 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 */ - -/* radio adjust freq for odd channel frequencies used in US, Brazil, ... */ -/* int radio_frq[16]={ 0, 1, 2, 3, 5, 6, 7, 9, 10, 11, 13, 14, 15, 17, 18, 19 }; */ -/* 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 */ - -/* radio adjust freq for even channel frequencies */ -/* int radio_frq[16]={ 0, 1, 3, 4, 5, 7, 8, 9, 10, 11, 12, 13, 15, 16, 17, 19 }; */ -/* 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 */ - /* Freq should be specifyed at 62.5 Hz */ static void set_radio_freq(struct i2c_client *c, unsigned int frq) { @@ -158,6 +146,10 @@ static void set_radio_freq(struct i2c_client *c, unsigned int frq) buffer[2] = TEA5767_PORT1_HIGH; buffer[3] = TEA5767_PORT2_HIGH | TEA5767_HIGH_CUT_CTRL | TEA5767_ST_NOISE_CTL | TEA5767_JAPAN_BAND; buffer[4]=0; + + + if (!t->audmode == V4L2_TUNER_MODE_MONO) + buffer[3] |= TEA5767_MONO; switch (t->type) { case TEA5767_HIGH_LO_13MHz: @@ -194,13 +186,27 @@ static void set_radio_freq(struct i2c_client *c, unsigned int frq) buffer[0] = (div>>8) & 0x3f; buffer[1] = div & 0xff; - tuner_dbg("TEA5767 radio SET 0x%02x 0x%02x 0x%02x 0x%02x 0x%02x\n", - buffer[0],buffer[1],buffer[2],buffer[3],buffer[4]); +/* tuner_dbg("TEA5767 radio SET 0x%02x 0x%02x 0x%02x 0x%02x 0x%02x\n", + buffer[0],buffer[1],buffer[2],buffer[3],buffer[4]); */ if (5 != (rc = i2c_master_send(c,buffer,5))) tuner_warn("i2c i/o error: rc == %d (should be 5)\n",rc); } +static int tea5767_set_tuner(struct i2c_client *c, struct v4l2_tuner *vt) +{ + struct tuner *t = i2c_get_clientdata(c); + + if (vt->audmode == V4L2_TUNER_MODE_MONO) + t->audmode = V4L2_TUNER_MODE_MONO; + else + t->audmode = V4L2_TUNER_MODE_STEREO; + + set_radio_freq(c, t->freq); + + return 0; +} + static void tea5767_status_dump(unsigned char *buffer) { unsigned int div, frq; @@ -264,10 +270,10 @@ static int tea5767_signal(struct i2c_client *c) if (5 != (rc = i2c_master_recv(c,buffer,5))) tuner_warn ( "i2c i/o error: rc == %d (should be 5)\n",rc); - tuner_dbg("TEA5767 radio SIG GET 0x%02x 0x%02x 0x%02x 0x%02x 0x%02x\n", - buffer[0],buffer[1],buffer[2],buffer[3],buffer[4]); +/* tuner_dbg("TEA5767 radio SIG GET 0x%02x 0x%02x 0x%02x 0x%02x 0x%02x\n", + buffer[0],buffer[1],buffer[2],buffer[3],buffer[4]); */ - tea5767_status_dump(buffer); + /* tea5767_status_dump(buffer); */ return ((buffer[3] & TEA5767_ADC_LEVEL_MASK) <<(13-4)); } @@ -281,12 +287,9 @@ static int tea5767_stereo(struct i2c_client *c) if (5 != (rc = i2c_master_recv(c,buffer,5))) tuner_warn ( "i2c i/o error: rc == %d (should be 5)\n",rc); -// tuner_dbg("TEA5767 radio ST GET 0x%02x 0x%02x 0x%02x 0x%02x 0x%02x\n", -// buffer[0],buffer[1],buffer[2],buffer[3],buffer[4]); - rc = buffer[2] & TEA5767_STEREO_MASK; - tuner_dbg("TEA5767 radio ST GET = %02x\n", rc); +/* tuner_dbg("TEA5767 radio ST GET = %02x\n", rc); */ return ( (buffer[2] & TEA5767_STEREO_MASK) ? V4L2_TUNER_SUB_STEREO: 0); } @@ -303,6 +306,7 @@ int tea5767_tuner_init(struct i2c_client *c) t->radio_freq = set_radio_freq; t->has_signal = tea5767_signal; t->is_stereo = tea5767_stereo; + t->set_tuner = tea5767_set_tuner; return (0); } diff --git a/linux/drivers/media/video/tuner-core.c b/linux/drivers/media/video/tuner-core.c index e92053f27..a0a38be0d 100644 --- a/linux/drivers/media/video/tuner-core.c +++ b/linux/drivers/media/video/tuner-core.c @@ -1,5 +1,5 @@ /* - * $Id: tuner-core.c,v 1.22 2005/06/19 14:41:59 mchehab Exp $ + * $Id: tuner-core.c,v 1.23 2005/06/19 15:59:25 mchehab Exp $ * * i2c tv tuner chip device driver * core core, i.e. kernel interfaces, registering and so on @@ -285,6 +285,7 @@ static int tuner_attach(struct i2c_adapter *adap, int addr, int kind) i2c_set_clientdata(&t->i2c, t); t->type = UNSET; t->radio_if2 = 10700*1000; /* 10.7MHz - FM radio */ + t->audmode = V4L2_TUNER_MODE_STEREO; i2c_attach_client(&t->i2c); tuner_info("chip found @ 0x%x (%s)\n", |