summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--linux/drivers/media/video/saa7111.c460
-rw-r--r--linux/drivers/media/video/tda9840.c300
-rw-r--r--linux/drivers/media/video/tda9840.h35
-rw-r--r--linux/drivers/media/video/tea6415c.c251
-rw-r--r--linux/drivers/media/video/tea6415c.h39
-rw-r--r--linux/drivers/media/video/tea6420.c228
-rw-r--r--linux/drivers/media/video/tea6420.h17
7 files changed, 0 insertions, 1330 deletions
diff --git a/linux/drivers/media/video/saa7111.c b/linux/drivers/media/video/saa7111.c
deleted file mode 100644
index 286ee8f0d..000000000
--- a/linux/drivers/media/video/saa7111.c
+++ /dev/null
@@ -1,460 +0,0 @@
-/*
- saa7111 - Philips SAA7111A video decoder driver version 0.0.3
-
- Copyright (C) 1998 Dave Perks <dperks@ibm.net>
-
- Slight changes for video timing and attachment output by
- Wolfgang Scherr <scherr@net4you.net>
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-*/
-
-#include <linux/module.h>
-#include <linux/init.h>
-#include <linux/delay.h>
-#include <linux/errno.h>
-#include <linux/fs.h>
-#include <linux/kernel.h>
-#include <linux/major.h>
-#include <linux/slab.h>
-#include <linux/mm.h>
-#include <linux/sched.h>
-
-#include <linux/videodev.h>
-#include <linux/version.h>
-#include <linux/i2c.h>
-
-#include <linux/video_decoder.h>
-
-#define DEBUG(x) /* Debug driver */
-
-/* ----------------------------------------------------------------------- */
-
-struct saa7111 {
- struct i2c_client *client;
- int addr;
- struct semaphore lock;
- unsigned char reg[32];
-
- int norm;
- int input;
- int enable;
- int bright;
- int contrast;
- int hue;
- int sat;
-};
-
-static unsigned short normal_i2c[] = { 0x24, 0x25, I2C_CLIENT_END };
-static unsigned short normal_i2c_range[] = { I2C_CLIENT_END };
-
-I2C_CLIENT_INSMOD;
-
-static struct i2c_client client_template;
-/* ----------------------------------------------------------------------- */
-static int saa7111_attach(struct i2c_adapter *adap, int addr, unsigned short flags, int kind)
-{
- int i;
- struct saa7111 *decoder;
- struct i2c_client *client;
-
- /* who wrote this? init[] is used for i2c_master_send() which expects an array that
- will be used for the 'buf' part of an i2c message unchanged. so, the first byte
- needs to be the subaddress to start with, then follow the data bytes... */
- static const unsigned char init[] = {
- 0x00, /* start address */
-
- 0x00, /* 00 - ID byte */
- 0x00, /* 01 - reserved */
-
- /*front end */
- 0xd0, /* 02 - FUSE=3, GUDL=2, MODE=0 */
- 0x23, /* 03 - HLNRS=0, VBSL=1, WPOFF=0, HOLDG=0, GAFIX=0, GAI1=256, GAI2=256 */
- 0x00, /* 04 - GAI1=256 */
- 0x00, /* 05 - GAI2=256 */
-
- /* decoder */
- 0xf3, /* 06 - HSB at 13(50Hz) / 17(60Hz) pixels after end of last line */
- 0x13, /* 07 - HSS at 113(50Hz) / 117(60Hz) pixels after end of last line */
- 0xc8, /* 08 - AUFD=1, FSEL=1, EXFIL=0, VTRC=1, HPLL=0, VNOI=0 */
- 0x01, /* 09 - BYPS=0, PREF=0, BPSS=0, VBLB=0, UPTCV=0, APER=1 */
- 0x80, /* 0a - BRIG=128 */
- 0x47, /* 0b - CONT=1.109 */
- 0x40, /* 0c - SATN=1.0 */
- 0x00, /* 0d - HUE=0 */
- 0x01, /* 0e - CDTO=0, CSTD=0, DCCF=0, FCTC=0, CHBW=1 */
- 0x00, /* 0f - reserved */
- 0x48, /* 10 - OFTS=1, HDEL=0, VRLN=1, YDEL=0 */
- 0x1c, /* 11 - GPSW=0, CM99=0, FECO=0, COMPO=1, OEYC=1, OEHV=1, VIPB=0, COLO=0 */
- 0x00, /* 12 - output control 2 */
- 0x00, /* 13 - output control 3 */
- 0x00, /* 14 - reserved */
- 0x00, /* 15 - VBI */
- 0x00, /* 16 - VBI */
- 0x00, /* 17 - VBI */
- };
- client = kmalloc(sizeof(*client), GFP_KERNEL);
- if(client == NULL)
- return -ENOMEM;
- client_template.adapter = adap;
- client_template.addr = addr;
- memcpy(client, &client_template, sizeof(*client));
-
- decoder = kmalloc(sizeof(*decoder), GFP_KERNEL);
- if (decoder == NULL)
- {
- kfree(client);
- return -ENOMEM;
- }
-
- memset(decoder, 0, sizeof(*decoder));
- decoder->client = client;
-#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0))
- client->data = decoder;
-#else
- i2c_set_clientdata(client, decoder);
-#endif
- decoder->addr = addr;
- decoder->norm = VIDEO_MODE_NTSC;
- decoder->input = 0;
- decoder->enable = 1;
- decoder->bright = 32768;
- decoder->contrast = 32768;
- decoder->hue = 32768;
- decoder->sat = 32768;
-
- i = i2c_master_send(client, init, sizeof(init));
- if (i < 0) {
- printk(KERN_ERR "%s_attach: init status %d\n",
-#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0))
- client->name, i);
-#else
- client->dev.name, i);
-#endif
- } else {
- printk(KERN_INFO "%s_attach: chip version %x @ 0x%08x\n",
-#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0))
- client->name, i2c_smbus_read_byte_data(client, 0x00) >> 4,addr);
-#else
- client->dev.name, i2c_smbus_read_byte_data(client, 0x00) >> 4,addr);
-#endif
- }
-
- init_MUTEX(&decoder->lock);
- i2c_attach_client(client);
- MOD_INC_USE_COUNT;
- return 0;
-}
-static int saa7111_probe(struct i2c_adapter *adap)
-{
- /* probing unknown devices on any Matrox i2c-bus takes ages due to the
- slow bit banging algorithm used. because of the fact a saa7111(a)
- is *never* present on a Matrox gfx card, we can skip such adapters
- here */
- if( 0 != (adap->id & I2C_HW_B_G400)) {
- return -ENODEV;
- }
-
-#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0))
- printk("saa7111: probing %s i2c adapter [id=0x%x]\n",
- adap->name,adap->id);
-#else
- printk("saa7111: probing %s i2c adapter [id=0x%x]\n",
- adap->dev.name,adap->id);
-#endif
- return i2c_probe(adap, &addr_data, saa7111_attach);
-}
-
-static int saa7111_detach(struct i2c_client *client)
-{
-#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0))
- struct saa7111 *decoder = client->data;
-#else
- struct saa7111 *decoder = i2c_get_clientdata(client);
-#endif
- i2c_detach_client(client);
- kfree(decoder);
- kfree(client);
- MOD_DEC_USE_COUNT;
- return 0;
-}
-
-static int saa7111_command(struct i2c_client *client, unsigned int cmd,
- void *arg)
-{
-#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0))
- struct saa7111 *decoder = client->data;
-#else
- struct saa7111 *decoder = i2c_get_clientdata(client);
-#endif
- switch (cmd) {
-
-#if defined(DECODER_DUMP)
- case DECODER_DUMP:
- {
- int i;
-
- for (i = 0; i < 32; i += 16) {
- int j;
-
-#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0))
- printk("KERN_DEBUG %s: %03x", client->name,
-#else
- printk("KERN_DEBUG %s: %03x", client->dev.name,
-#endif
- i);
- for (j = 0; j < 16; ++j) {
- printk(" %02x",
- i2c_smbus_read_byte_data(client,
- i + j));
- }
- printk("\n");
- }
- }
- break;
-#endif /* defined(DECODER_DUMP) */
- case DECODER_GET_CAPABILITIES:
- {
- struct video_decoder_capability *cap = arg;
-
- cap->flags
- = VIDEO_DECODER_PAL
- | VIDEO_DECODER_NTSC
- | VIDEO_DECODER_AUTO | VIDEO_DECODER_CCIR;
- cap->inputs = 8;
- cap->outputs = 1;
- }
- break;
- case DECODER_GET_STATUS:
- {
- int *iarg = arg;
- int status;
- int res;
-
- status = i2c_smbus_read_byte_data(client, 0x1f);
- res = 0;
- if ((status & (1 << 6)) == 0) {
- res |= DECODER_STATUS_GOOD;
- }
- switch (decoder->norm) {
- case VIDEO_MODE_NTSC:
- res |= DECODER_STATUS_NTSC;
- break;
- case VIDEO_MODE_PAL:
- res |= DECODER_STATUS_PAL;
- break;
- default:
- case VIDEO_MODE_AUTO:
- if ((status & (1 << 5)) != 0) {
- res |= DECODER_STATUS_NTSC;
- } else {
- res |= DECODER_STATUS_PAL;
- }
- break;
- }
- if ((status & (1 << 0)) != 0) {
- res |= DECODER_STATUS_COLOR;
- }
- *iarg = res;
- }
- break;
-
- case DECODER_SET_NORM:
- {
- int *iarg = arg;
-
- switch (*iarg) {
-
- case VIDEO_MODE_NTSC:
- i2c_smbus_write_byte_data(client, 0x08,
- (decoder->
- reg[0x08] & 0x3f) | 0x40);
- break;
-
- case VIDEO_MODE_PAL:
- i2c_smbus_write_byte_data(client, 0x08,
- (decoder->
- reg[0x08] & 0x3f) | 0x00);
- break;
-
- case VIDEO_MODE_AUTO:
- i2c_smbus_write_byte_data(client, 0x08,
- (decoder->
- reg[0x08] & 0x3f) | 0x80);
- break;
-
- default:
- return -EINVAL;
-
- }
- decoder->norm = *iarg;
- }
- break;
-
- case DECODER_SET_INPUT:
- {
- int *iarg = arg;
-
- if (*iarg < 0 || *iarg > 7) {
- return -EINVAL;
- }
-
- if (decoder->input != *iarg) {
- decoder->input = *iarg;
- /* select mode */
- i2c_smbus_write_byte_data(client, 0x02,
- (decoder->
- reg[0x02] & 0xf8) |
- decoder->input);
- /* bypass chrominance trap for modes 4..7 */
- i2c_smbus_write_byte_data(client, 0x09,
- (decoder->
- reg[0x09] & 0x7f) |
- ((decoder->input >
- 3) ? 0x80 : 0));
- }
- }
- break;
-
- case DECODER_SET_OUTPUT:
- {
- int *iarg = arg;
-
- /* not much choice of outputs */
- if (*iarg != 0) {
- return -EINVAL;
- }
- }
- break;
-
- case DECODER_ENABLE_OUTPUT:
- {
- int *iarg = arg;
- int enable = (*iarg != 0);
-
- if (decoder->enable != enable) {
- decoder->enable = enable;
-
-// RJ: If output should be disabled (for playing videos), we also need a open PLL.
-// The input is set to 0 (where no input source is connected), although this
-// is not necessary.
-//
-// If output should be enabled, we have to reverse the above.
-
- if (decoder->enable) {
- i2c_smbus_write_byte_data(client, 0x02,
- (decoder->
- reg[0x02] & 0xf8) |
- decoder->input);
- i2c_smbus_write_byte_data(client, 0x08,
- (decoder->
- reg[0x08] & 0xfb));
- i2c_smbus_write_byte_data(client, 0x11,
- (decoder->
- reg[0x11] & 0xf3) |
- 0x0c);
- } else {
- i2c_smbus_write_byte_data(client, 0x02,
- (decoder->
- reg[0x02] & 0xf8));
- i2c_smbus_write_byte_data(client, 0x08,
- (decoder->
- reg[0x08] & 0xfb) |
- 0x04);
- i2c_smbus_write_byte_data(client, 0x11,
- (decoder->
- reg[0x11] & 0xf3));
- }
- }
- }
- break;
-
- case DECODER_SET_PICTURE:
- {
- struct video_picture *pic = arg;
-
- if (decoder->bright != pic->brightness) {
- /* We want 0 to 255 we get 0-65535 */
- decoder->bright = pic->brightness;
- i2c_smbus_write_byte_data(client, 0x0a,
- decoder->bright >> 8);
- }
- if (decoder->contrast != pic->contrast) {
- /* We want 0 to 127 we get 0-65535 */
- decoder->contrast = pic->contrast;
- i2c_smbus_write_byte_data(client, 0x0b,
- decoder->contrast >> 9);
- }
- if (decoder->sat != pic->colour) {
- /* We want 0 to 127 we get 0-65535 */
- decoder->sat = pic->colour;
- i2c_smbus_write_byte_data(client, 0x0c,
- decoder->sat >> 9);
- }
- if (decoder->hue != pic->hue) {
- /* We want -128 to 127 we get 0-65535 */
- decoder->hue = pic->hue;
- i2c_smbus_write_byte_data(client, 0x0d,
- (decoder->hue - 32768) >> 8);
- }
- }
- break;
-
- default:
- return -EINVAL;
- }
-
- return 0;
-}
-
-/* ----------------------------------------------------------------------- */
-
-static struct i2c_driver i2c_driver_saa7111 = {
-#if LINUX_VERSION_CODE > KERNEL_VERSION(2,5,54)
- .owner = THIS_MODULE,
-#endif
- .name = "saa7111", /* name */
- .id = I2C_DRIVERID_SAA7111A, /* ID */
- .flags = I2C_DF_NOTIFY,
- .attach_adapter = saa7111_probe,
- .detach_client = saa7111_detach,
- .command = saa7111_command
-};
-
-static struct i2c_client client_template = {
-#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)
- .name = "saa7111_client",
-#else
- .dev = {
- .name = "saa7111_client",
- },
-#endif
- .id = -1,
- .driver = &i2c_driver_saa7111
-};
-
-static int saa7111_init(void)
-{
- return i2c_add_driver(&i2c_driver_saa7111);
-}
-
-static void saa7111_exit(void)
-{
- i2c_del_driver(&i2c_driver_saa7111);
-}
-
-module_init(saa7111_init);
-module_exit(saa7111_exit);
-MODULE_LICENSE("GPL");
diff --git a/linux/drivers/media/video/tda9840.c b/linux/drivers/media/video/tda9840.c
deleted file mode 100644
index a3bc1c729..000000000
--- a/linux/drivers/media/video/tda9840.c
+++ /dev/null
@@ -1,300 +0,0 @@
- /*
- tda9840.h - i2c-driver for the tda9840 by SGS Thomson
-
- Copyright (C) 1998-2003 Michael Hunold <michael@mihu.de>
-
- The tda9840 is a stereo/dual sound processor with digital
- identification. It can be found at address 0x42 on the i2c-bus.
-
- For detailed informations download the specifications directly
- from SGS Thomson at http://www.st.com
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-
-#include <linux/version.h>
-#include <linux/module.h>
-#include <linux/kernel.h>
-#include <linux/poll.h>
-#include <linux/slab.h>
-#include <linux/i2c.h>
-#include <linux/init.h>
-
-#include "tda9840.h"
-
-static int debug = 0; /* insmod parameter */
-MODULE_PARM(debug,"i");
-#define dprintk if (debug) printk
-
-#define SWITCH 0x00
-#define LEVEL_ADJUST 0x02
-#define STEREO_ADJUST 0x03
-#define TEST 0x04
-
-/* addresses to scan, found only at 0x42 (7-Bit) */
-static unsigned short normal_i2c[] = {I2C_TDA9840, I2C_CLIENT_END};
-static unsigned short normal_i2c_range[] = {I2C_CLIENT_END};
-
-/* magic definition of all other variables and things */
-I2C_CLIENT_INSMOD;
-
-/* unique ID allocation */
-static int tda9840_id = 0;
-
-static struct i2c_driver driver;
-
-static int tda9840_command(struct i2c_client *client, unsigned int cmd, void* arg)
-{
- int result = 0;
-
- switch (cmd) {
- case TDA9840_SWITCH:
- {
- int byte = *(int*)arg;
-
- dprintk("tda9840.o: TDA9840_SWITCH: 0x%02x\n",byte);
-
- if ( byte != TDA9840_SET_MONO
- && byte != TDA9840_SET_MUTE
- && byte != TDA9840_SET_STEREO
- && byte != TDA9840_SET_LANG1
- && byte != TDA9840_SET_LANG2
- && byte != TDA9840_SET_BOTH
- && byte != TDA9840_SET_BOTH_R
- && byte != TDA9840_SET_EXTERNAL ) {
- return -EINVAL;
- }
-
- if ( 0 != (result = i2c_smbus_write_byte_data(client, SWITCH, byte))) {
- printk("tda9840.o: TDA9840_SWITCH error.\n");
- return -EFAULT;
- }
-
- return 0;
- }
-
- case TDA9840_LEVEL_ADJUST:
- {
- int byte = *(int*)arg;
-
- dprintk("tda9840.o: TDA9840_LEVEL_ADJUST: %d\n",byte);
-
- /* check for correct range */
- if ( byte > 25 || byte < -20 )
- return -EINVAL;
-
- /* calculate actual value to set, see specs, page 18 */
- byte /= 5;
- if ( 0 < byte )
- byte += 0x8;
- else
- byte = -byte;
-
- if ( 0 != (result = i2c_smbus_write_byte_data(client, LEVEL_ADJUST, byte))) {
- printk("tda9840.o: TDA9840_LEVEL_ADJUST error.\n");
- return -EFAULT;
- }
-
- return 0;
- }
-
- case TDA9840_STEREO_ADJUST:
- {
- int byte = *(int*)arg;
-
- dprintk("tda9840.o: TDA9840_STEREO_ADJUST: %d\n",byte);
-
- /* check for correct range */
- if ( byte > 25 || byte < -24 )
- return -EINVAL;
-
- /* calculate actual value to set */
- byte /= 5;
- if ( 0 < byte )
- byte += 0x20;
- else
- byte = -byte;
-
- if ( 0 != (result = i2c_smbus_write_byte_data(client, STEREO_ADJUST, byte))) {
- printk("tda9840.o: TDA9840_STEREO_ADJUST error.\n");
- return -EFAULT;
- }
-
- return 0;
- }
-
- case TDA9840_DETECT:
- {
- int byte = 0x0;
-
- if ( -1 == (byte = i2c_smbus_read_byte_data(client, STEREO_ADJUST))) {
- printk("tda9840.o: TDA9840_DETECT error while reading.\n");
- return -EFAULT;
- }
-
- if( 0 != (byte & 0x80)) {
- dprintk("tda9840.o: TDA9840_DETECT, register contents invalid.\n");
- return -EFAULT;
- }
-
- dprintk("tda9840.o: TDA9840_DETECT, result: 0x%02x (original byte)\n",byte);
-
- return ((byte & 0x60) >> 5);
- }
-
- case TDA9840_TEST:
- {
- int byte = *(int*)arg;
-
- dprintk("tda9840.o: TDA9840_TEST: 0x%02x\n",byte);
-
- /* mask out irrelevant bits */
- byte &= 0x3;
-
- if ( 0 != (result = i2c_smbus_write_byte_data(client, TEST, byte))) {
- printk("tda9840.o: TDA9840_TEST error.\n");
- return -EFAULT;
- }
-
- return 0;
- }
-
- default:
- return -ENOIOCTLCMD;
- }
-
- return 0;
-}
-
-static int tda9840_detect(struct i2c_adapter *adapter, int address, unsigned short flags, int kind)
-{
- struct i2c_client *client;
- int result = 0;
-
- int byte = 0x0;
-
- /* let's see whether this adapter can support what we need */
- if ( 0 == i2c_check_functionality(adapter, I2C_FUNC_SMBUS_READ_BYTE_DATA|I2C_FUNC_SMBUS_WRITE_BYTE_DATA)) {
- return 0;
- }
-
- /* allocate memory for client structure */
- client = kmalloc(sizeof(struct i2c_client), GFP_KERNEL);
- if (0 == client) {
- printk("tda9840.o: not enough kernel memory.\n");
- return -ENOMEM;
- }
- memset(client, 0, sizeof(struct i2c_client));
-
- /* fill client structure */
-#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0))
- sprintf(client->name,"tda9840 (0x%02x)", address);
-#else
- sprintf(client->dev.name,"tda9840 (0x%02x)", address);
-#endif
- client->id = tda9840_id++;
- client->flags = 0;
- client->addr = address;
- client->adapter = adapter;
- client->driver = &driver;
-
- /* tell the i2c layer a new client has arrived */
- if (0 != (result = i2c_attach_client(client))) {
- kfree(client);
- return result;
- }
-
- /* set initial values for level & stereo - adjustment, mode */
- byte = 0;
- if ( 0 != (result = tda9840_command(client, TDA9840_LEVEL_ADJUST, &byte))) {
- printk("tda9840.o: could not initialize ic #1. continuing anyway. (result:%d)\n",result);
- }
-
- if ( 0 != (result = tda9840_command(client, TDA9840_STEREO_ADJUST, &byte))) {
- printk("tda9840.o: could not initialize ic #2. continuing anyway. (result:%d)\n",result);
- }
-
- byte = TDA9840_SET_MONO;
- if ( 0 != (result = tda9840_command(client, TDA9840_SWITCH, &byte))) {
- printk("tda9840.o: could not initialize ic #3. continuing anyway. (result:%d)\n",result);
- }
-
-#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0))
- printk("tda9840.o: detected @ 0x%02x on adapter %s\n",address,&client->adapter->name[0]);
-#else
- printk("tda9840.o: detected @ 0x%02x on adapter %s\n",address,&client->adapter->dev.name[0]);
-#endif
- return 0;
-}
-
-static int tda9840_attach(struct i2c_adapter *adapter)
-{
- /* let's see whether this is a know adapter we can attach to */
- if( adapter->id != I2C_ALGO_SAA7146 ) {
-#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0))
- dprintk("tda9840.o: refusing to probe on unknown adapter [name='%s',id=0x%x]\n",adapter->name,adapter->id);
-#else
- dprintk("tda9840.o: refusing to probe on unknown adapter [name='%s',id=0x%x]\n",adapter->dev.name,adapter->id);
-#endif
- return -ENODEV;
- }
-
- return i2c_probe(adapter,&addr_data,&tda9840_detect);
-}
-
-static int tda9840_detach(struct i2c_client *client)
-{
- int err = 0;
-
- if ( 0 != (err = i2c_detach_client(client))) {
- printk("tda9840.o: Client deregistration failed, client not detached.\n");
- return err;
- }
-
- kfree(client);
-
- return 0;
-}
-
-static struct i2c_driver driver = {
-#if LINUX_VERSION_CODE > KERNEL_VERSION(2,5,54)
- .owner = THIS_MODULE,
-#endif
- .name = "tda9840 driver",
- .id = I2C_DRIVERID_TDA9840,
- .flags = I2C_DF_NOTIFY,
- .attach_adapter = tda9840_attach,
- .detach_client = tda9840_detach,
- .command = tda9840_command,
-};
-
-static int tda9840_init_module(void)
-{
- i2c_add_driver(&driver);
- return 0;
-}
-
-static void tda9840_cleanup_module(void)
-{
- i2c_del_driver(&driver);
-}
-
-module_init(tda9840_init_module);
-module_exit(tda9840_cleanup_module);
-
-MODULE_AUTHOR("Michael Hunold <michael@mihu.de>");
-MODULE_DESCRIPTION("tda9840 driver");
-MODULE_LICENSE("GPL");
-
diff --git a/linux/drivers/media/video/tda9840.h b/linux/drivers/media/video/tda9840.h
deleted file mode 100644
index 28021053b..000000000
--- a/linux/drivers/media/video/tda9840.h
+++ /dev/null
@@ -1,35 +0,0 @@
-#ifndef __INCLUDED_TDA9840__
-#define __INCLUDED_TDA9840__
-
-#define I2C_TDA9840 0x42
-
-#define TDA9840_DETECT _IOR('v',1,int)
-/* return values for TDA9840_DETCT */
-#define TDA9840_MONO_DETECT 0x0
-#define TDA9840_DUAL_DETECT 0x1
-#define TDA9840_STEREO_DETECT 0x2
-#define TDA9840_INCORRECT_DETECT 0x3
-
-#define TDA9840_SWITCH _IOW('v',2,int)
-/* modes than can be set with TDA9840_SWITCH */
-#define TDA9840_SET_MUTE 0x00
-#define TDA9840_SET_MONO 0x10
-#define TDA9840_SET_STEREO 0x2a
-#define TDA9840_SET_LANG1 0x12
-#define TDA9840_SET_LANG2 0x1e
-#define TDA9840_SET_BOTH 0x1a
-#define TDA9840_SET_BOTH_R 0x16
-#define TDA9840_SET_EXTERNAL 0x7a
-
-/* values may range between +2.5 and -2.0;
- the value has to be multiplied with 10 */
-#define TDA9840_LEVEL_ADJUST _IOW('v',3,int)
-
-/* values may range between +2.5 and -2.4;
- the value has to be multiplied with 10 */
-#define TDA9840_STEREO_ADJUST _IOW('v',4,int)
-
-/* currently not implemented */
-#define TDA9840_TEST _IOW('v',5,int)
-
-#endif
diff --git a/linux/drivers/media/video/tea6415c.c b/linux/drivers/media/video/tea6415c.c
deleted file mode 100644
index f8db1aacc..000000000
--- a/linux/drivers/media/video/tea6415c.c
+++ /dev/null
@@ -1,251 +0,0 @@
- /*
- tea6415c.h - i2c-driver for the tea6415c by SGS Thomson
-
- Copyright (C) 1998-2003 Michael Hunold <michael@mihu.de>
-
- The tea6415c is a bus controlled video-matrix-switch
- with 8 inputs and 6 outputs.
- It is cascadable, i.e. it can be found at the addresses
- 0x43 and 0x03 on the i2c-bus.
-
- For detailed informations download the specifications directly
- from SGS Thomson at http://www.st.com
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License vs published by
- the Free Software Foundation; either version 2 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 675 Mvss Ave, Cambridge, MA 02139, USA.
- */
-
-#include <linux/version.h>
-#include <linux/module.h>
-#include <linux/kernel.h>
-#include <linux/poll.h>
-#include <linux/slab.h>
-#include <linux/i2c.h>
-#include <linux/init.h>
-#include "tea6415c.h"
-
-static int debug = 0; /* insmod parameter */
-MODULE_PARM(debug,"i");
-#define dprintk if (debug) printk
-
-#define TEA6415C_NUM_INPUTS 8
-#define TEA6415C_NUM_OUTPUTS 6
-
-/* addresses to scan, found only at 0x03 and/or 0x43 (7-bit) */
-static unsigned short normal_i2c[] = {I2C_TEA6415C_1, I2C_TEA6415C_2, I2C_CLIENT_END};
-static unsigned short normal_i2c_range[] = {I2C_CLIENT_END};
-
-/* magic definition of all other variables and things */
-I2C_CLIENT_INSMOD;
-
-static struct i2c_driver driver;
-
-/* unique ID allocation */
-static int tea6415c_id = 0;
-
-/* this function is called by i2c_probe */
-static int tea6415c_detect(struct i2c_adapter *adapter, int address, unsigned short flags, int kind)
-{
- struct i2c_client *client = 0;
- int err = 0;
-
- /* let's see whether this adapter can support what we need */
- if ( 0 == i2c_check_functionality(adapter, I2C_FUNC_SMBUS_WRITE_BYTE)) {
- return 0;
- }
-
- /* allocate memory for client structure */
- client = kmalloc(sizeof(struct i2c_client), GFP_KERNEL);
- if (0 == client) {
- return -ENOMEM;
- }
- memset(client, 0, sizeof(struct i2c_client));
-
- /* fill client structure */
-#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0))
- sprintf(client->name,"tea6415c (0x%02x)", address);
-#else
- sprintf(client->dev.name,"tea6415c (0x%02x)", address);
-#endif
- client->id = tea6415c_id++;
- client->flags = 0;
- client->addr = address;
- client->adapter = adapter;
- client->driver = &driver;
-
- /* tell the i2c layer a new client has arrived */
- if (0 != (err = i2c_attach_client(client))) {
- kfree(client);
- return err;
- }
-
-#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0))
- printk("tea6415c.o: detected @ 0x%02x on adapter %s\n",address,&client->adapter->name[0]);
-#else
- printk("tea6415c.o: detected @ 0x%02x on adapter %s\n",address,&client->adapter->dev.name[0]);
-#endif
-
- return 0;
-}
-
-static int tea6415c_attach(struct i2c_adapter *adapter)
-{
- /* let's see whether this is a know adapter we can attach to */
- if( adapter->id != I2C_ALGO_SAA7146 ) {
-#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0))
- dprintk("tea6415c.o: refusing to probe on unknown adapter [name='%s',id=0x%x]\n",adapter->name,adapter->id);
-#else
- dprintk("tea6415c.o: refusing to probe on unknown adapter [name='%s',id=0x%x]\n",adapter->dev.name,adapter->id);
-#endif
- return -ENODEV;
- }
-
- return i2c_probe(adapter,&addr_data,&tea6415c_detect);
-}
-
-static int tea6415c_detach(struct i2c_client *client)
-{
- int err = 0;
-
- if ( 0 != (err = i2c_detach_client(client))) {
- printk("tea6415c.o: Client deregistration failed, client not detached.\n");
- return err;
- }
-
- kfree(client);
-
- return 0;
-}
-
-/* makes a connection between the input-pin 'i' and the output-pin 'o'
- for the tea6415c-client 'client' */
-static int tea6415c_switch(struct i2c_client *client, int i, int o)
-{
- u8 byte = 0;
-
- dprintk("tea6415c.o: tea6415c_switch: adr:0x%02x, i:%d, o:%d\n", client->addr, i, o);
-
- /* check if the pins are valid */
- if ( 0 == (( 1 == i || 3 == i || 5 == i || 6 == i || 8 == i || 10 == i || 20 == i || 11 == i ) &&
- (18 == o || 17 == o || 16 == o || 15 == o || 14 == o || 13 == o )))
- return -1;
-
- /* to understand this, have a look at the tea6415c-specs (p.5) */
- switch(o) {
- case 18:
- byte = 0x00;
- break;
- case 14:
- byte = 0x20;
- break;
- case 16:
- byte = 0x10;
- break;
- case 17:
- byte = 0x08;
- break;
- case 15:
- byte = 0x18;
- break;
- case 13:
- byte = 0x28;
- break;
- };
-
- switch(i) {
- case 5:
- byte |= 0x00;
- break;
- case 8:
- byte |= 0x04;
- break;
- case 3:
- byte |= 0x02;
- break;
- case 20:
- byte |= 0x06;
- break;
- case 6:
- byte |= 0x01;
- break;
- case 10:
- byte |= 0x05;
- break;
- case 1:
- byte |= 0x03;
- break;
- case 11:
- byte |= 0x07;
- break;
- };
-
- if ( 0 != i2c_smbus_write_byte(client,byte)) {
- dprintk("tea6415c.o: tea6415c_switch: could not write to tea6415c\n");
- return -1;
- }
-
- return 0;
-}
-
-static int tea6415c_command(struct i2c_client *client, unsigned int cmd, void* arg)
-{
- struct tea6415c_multiplex *v = (struct tea6415c_multiplex*)arg;
- int result = 0;
-
- switch (cmd) {
- case TEA6415C_SWITCH: {
- result = tea6415c_switch(client,v->in,v->out);
- break;
- }
- default: {
- return -ENOIOCTLCMD;
- }
- }
-
- if ( 0 != result )
- return result;
-
- return 0;
-}
-
-static struct i2c_driver driver = {
-#if LINUX_VERSION_CODE > KERNEL_VERSION(2,5,54)
- .owner = THIS_MODULE,
-#endif
- .name = "tea6415c driver",
- .id = I2C_DRIVERID_TEA6415C,
- .flags = I2C_DF_NOTIFY,
- .attach_adapter = tea6415c_attach,
- .detach_client = tea6415c_detach,
- .command = tea6415c_command,
-};
-
-static int tea6415c_init_module(void)
-{
- i2c_add_driver(&driver);
- return 0;
-}
-
-static void tea6415c_cleanup_module(void)
-{
- i2c_del_driver(&driver);
-}
-
-module_init(tea6415c_init_module);
-module_exit(tea6415c_cleanup_module);
-
-MODULE_AUTHOR("Michael Hunold <michael@mihu.de>");
-MODULE_DESCRIPTION("tea6415c driver");
-MODULE_LICENSE("GPL");
-
diff --git a/linux/drivers/media/video/tea6415c.h b/linux/drivers/media/video/tea6415c.h
deleted file mode 100644
index f84ed8005..000000000
--- a/linux/drivers/media/video/tea6415c.h
+++ /dev/null
@@ -1,39 +0,0 @@
-#ifndef __INCLUDED_TEA6415C__
-#define __INCLUDED_TEA6415C__
-
-/* possible i2c-addresses */
-#define I2C_TEA6415C_1 0x03
-#define I2C_TEA6415C_2 0x43
-
-/* the tea6415c's design is quite brain-dead. although there are
- 8 inputs and 6 outputs, these aren't enumerated in any way. because
- I don't want to say "connect input pin 20 to output pin 17", I define
- a "virtual" pin-order. */
-
-/* input pins */
-#define TEA6415C_OUTPUT1 18
-#define TEA6415C_OUTPUT2 14
-#define TEA6415C_OUTPUT3 16
-#define TEA6415C_OUTPUT4 17
-#define TEA6415C_OUTPUT5 13
-#define TEA6415C_OUTPUT6 15
-
-/* output pins */
-#define TEA6415C_INPUT1 5
-#define TEA6415C_INPUT2 8
-#define TEA6415C_INPUT3 3
-#define TEA6415C_INPUT4 20
-#define TEA6415C_INPUT5 6
-#define TEA6415C_INPUT6 10
-#define TEA6415C_INPUT7 1
-#define TEA6415C_INPUT8 11
-
-struct tea6415c_multiplex
-{
- int in; /* input-pin */
- int out; /* output-pin */
-};
-
-#define TEA6415C_SWITCH _IOW('v',1,struct tea6415c_multiplex)
-
-#endif
diff --git a/linux/drivers/media/video/tea6420.c b/linux/drivers/media/video/tea6420.c
deleted file mode 100644
index 6619439b0..000000000
--- a/linux/drivers/media/video/tea6420.c
+++ /dev/null
@@ -1,228 +0,0 @@
- /*
- tea6420.o - i2c-driver for the tea6420 by SGS Thomson
-
- Copyright (C) 1998-2003 Michael Hunold <michael@mihu.de>
-
- The tea6420 is a bus controlled audio-matrix with 5 stereo inputs,
- 4 stereo outputs and gain control for each output.
- It is cascadable, i.e. it can be found at the adresses 0x98
- and 0x9a on the i2c-bus.
-
- For detailed informations download the specifications directly
- from SGS Thomson at http://www.st.com
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-
-#include <linux/version.h>
-#include <linux/module.h>
-#include <linux/kernel.h>
-#include <linux/poll.h>
-#include <linux/slab.h>
-#include <linux/i2c.h>
-#include <linux/init.h>
-
-#include "tea6420.h"
-
-static int debug = 0; /* insmod parameter */
-MODULE_PARM(debug,"i");
-#define dprintk if (debug) printk
-
-/* addresses to scan, found only at 0x4c and/or 0x4d (7-Bit) */
-static unsigned short normal_i2c[] = {I2C_TEA6420_1, I2C_TEA6420_2, I2C_CLIENT_END};
-static unsigned short normal_i2c_range[] = {I2C_CLIENT_END};
-
-/* magic definition of all other variables and things */
-I2C_CLIENT_INSMOD;
-
-static struct i2c_driver driver;
-
-/* unique ID allocation */
-static int tea6420_id = 0;
-
-/* make a connection between the input 'i' and the output 'o'
- with gain 'g' for the tea6420-client 'client' (note: i = 6 means 'mute') */
-static int tea6420_switch(struct i2c_client *client, int i, int o, int g)
-{
- u8 byte = 0;
-
- int result = 0;
-
- dprintk("tea6420.o: tea6420_switch: adr:0x%02x, i:%d, o:%d, g:%d\n",client->addr,i,o,g);
-
- /* check if the paramters are valid */
- if ( i < 1 || i > 6 || o < 1 || o > 4 || g < 0 || g > 6 || g%2 != 0 )
- return -1;
-
- byte = ((o-1)<<5);
- byte |= (i-1);
-
- /* to understand this, have a look at the tea6420-specs (p.5) */
- switch(g) {
- case 0:
- byte |= (3<<3);
- break;
- case 2:
- byte |= (2<<3);
- break;
- case 4:
- byte |= (1<<3);
- break;
- case 6:
- break;
- }
-
- /* fixme?: 1 != ... => 0 != */
- if ( 0 != (result = i2c_smbus_write_byte(client,byte))) {
- printk("tea6402:%d\n",result);
- dprintk(KERN_ERR "tea6420.o: could not switch, result:%d\n",result);
- return -EFAULT;
- }
-
- return 0;
-}
-
-/* this function is called by i2c_probe */
-static int tea6420_detect(struct i2c_adapter *adapter, int address, unsigned short flags, int kind)
-{
- struct i2c_client *client;
- int err = 0, i = 0;
-
- /* let's see whether this adapter can support what we need */
- if ( 0 == i2c_check_functionality(adapter, I2C_FUNC_SMBUS_WRITE_BYTE)) {
- return 0;
- }
-
- /* allocate memory for client structure */
- client = kmalloc(sizeof(struct i2c_client), GFP_KERNEL);
- if (0 == client) {
- return -ENOMEM;
- }
- memset(client, 0, sizeof(struct i2c_client));
-
- /* fill client structure */
-#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0))
- sprintf(client->name,"tea6420 (0x%02x)", address);
-#else
- sprintf(client->dev.name,"tea6420 (0x%02x)", address);
-#endif
- client->id = tea6420_id++;
- client->flags = 0;
- client->addr = address;
- client->adapter = adapter;
- client->driver = &driver;
-
- /* tell the i2c layer a new client has arrived */
- if (0 != (err = i2c_attach_client(client))) {
- kfree(client);
- return err;
- }
-
- /* set initial values: set "mute"-input to all outputs at gain 0 */
- err = 0;
- for(i = 1; i < 5; i++) {
- err += tea6420_switch(client, 6, i, 0);
- }
- if( 0 != err) {
- printk("tea6420.o: could not initialize chipset. continuing anyway.\n");
- }
-
-#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0))
- printk("tea6420.o: detected @ 0x%02x on adapter %s\n",address,&client->adapter->name[0]);
-#else
- printk("tea6420.o: detected @ 0x%02x on adapter %s\n",address,&client->adapter->dev.name[0]);
-#endif
- return 0;
-}
-
-static int tea6420_attach(struct i2c_adapter *adapter)
-{
- /* let's see whether this is a know adapter we can attach to */
- if( adapter->id != I2C_ALGO_SAA7146 ) {
-#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0))
- dprintk("tea6420.o: refusing to probe on unknown adapter [name='%s',id=0x%x]\n",adapter->name,adapter->id);
-#else
- dprintk("tea6420.o: refusing to probe on unknown adapter [name='%s',id=0x%x]\n",adapter->dev.name,adapter->id);
-#endif
- return -ENODEV;
- }
-
- return i2c_probe(adapter,&addr_data,&tea6420_detect);
-}
-
-static int tea6420_detach(struct i2c_client *client)
-{
- int err = 0;
-
- if ( 0 != (err = i2c_detach_client(client))) {
- printk("tea6420.o: Client deregistration failed, client not detached.\n");
- return err;
- }
-
- kfree(client);
-
- return 0;
-}
-
-static int tea6420_command(struct i2c_client *client, unsigned int cmd, void* arg)
-{
- struct tea6420_multiplex *a = (struct tea6420_multiplex*)arg;
- int result = 0;
-
- switch (cmd) {
- case TEA6420_SWITCH: {
- result = tea6420_switch(client,a->in,a->out,a->gain);
- break;
- }
- default: {
- return -ENOIOCTLCMD;
- }
- }
-
- if ( 0 != result )
- return result;
-
- return 0;
-}
-
-static struct i2c_driver driver = {
-#if LINUX_VERSION_CODE > KERNEL_VERSION(2,5,54)
- .owner = THIS_MODULE,
-#endif
- .name = "tea6420 driver",
- .id = I2C_DRIVERID_TEA6420,
- .flags = I2C_DF_NOTIFY,
- .attach_adapter = tea6420_attach,
- .detach_client = tea6420_detach,
- .command = tea6420_command,
-};
-
-static int tea6420_init_module(void)
-{
- i2c_add_driver(&driver);
- return 0;
-}
-
-static void tea6420_cleanup_module(void)
-{
- i2c_del_driver(&driver);
-}
-
-module_init(tea6420_init_module);
-module_exit(tea6420_cleanup_module);
-
-MODULE_AUTHOR("Michael Hunold <michael@mihu.de>");
-MODULE_DESCRIPTION("tea6420 driver");
-MODULE_LICENSE("GPL");
diff --git a/linux/drivers/media/video/tea6420.h b/linux/drivers/media/video/tea6420.h
deleted file mode 100644
index ea664df15..000000000
--- a/linux/drivers/media/video/tea6420.h
+++ /dev/null
@@ -1,17 +0,0 @@
-#ifndef __INCLUDED_TEA6420__
-#define __INCLUDED_TEA6420__
-
-/* possible addresses */
-#define I2C_TEA6420_1 0x4c
-#define I2C_TEA6420_2 0x4d
-
-struct tea6420_multiplex
-{
- int in; /* input of audio switch */
- int out; /* output of audio switch */
- int gain; /* gain of connection */
-};
-
-#define TEA6420_SWITCH _IOW('v',1,struct tea6420_multiplex)
-
-#endif