Skip to content

Commit

Permalink
[PATCH] v4l: SAA7134 Update
Browse files Browse the repository at this point in the history
- Corrected all cards marked as 7135 cards to 7133.
- Add new card support for Compro VideoMate TV Gold+II.
- Add new card support for Kworld Xpert TV PVR7134
- Add new card support for Typhoon DVB-T Cardbus.
- Changes to comply with CodingStyle: // comments converted to /* */
- Remove irq2_mask field from saa7134_dev structure.
- Collect all the bits needed in saa7134_hwinit2() instead.
- Distinguish the different variants of the Medion MD7134 modules via eeprom
- moved Philips FMD1216 radio specific setup to saa7134-core.c
- Fix kernel compile error with CONFIG_MODULES=n
- Cleanup tuner private calls.
- Some Indent fixes.

Signed-off-by: Michael Tokarev <mjt@tls.msk.ru>
Signed-off-by: Michael Krufky <mkrufky@m1k.net>
Signed-off-by: Hannibal <hannibal@megapolis.pl>
Signed-off-by: Elshin Roman <roxmail@list.ru>
Signed-off-by: Hermann Pitton <hermann.pitton@onlinehome.de>
Signed-off-by: Juergen Orschiedt <jorschiedt@web.de>
Signed-off-by: Hartmut Hackmann <hartmut.hackmann@t-online.de>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
  • Loading branch information
Mauro Carvalho Chehab authored and Linus Torvalds committed Jul 12, 2005
1 parent 85369df commit 330a115
Show file tree
Hide file tree
Showing 10 changed files with 1,498 additions and 1,076 deletions.
2,174 changes: 1,298 additions & 876 deletions drivers/media/video/saa7134/saa7134-cards.c

Large diffs are not rendered by default.

74 changes: 17 additions & 57 deletions drivers/media/video/saa7134/saa7134-core.c
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* $Id: saa7134-core.c,v 1.30 2005/05/22 19:23:39 nsh Exp $
* $Id: saa7134-core.c,v 1.39 2005/07/05 17:37:35 nsh Exp $
*
* device driver for philips saa7134 based TV cards
* driver core
Expand Down Expand Up @@ -183,46 +183,6 @@ void saa7134_track_gpio(struct saa7134_dev *dev, char *msg)

/* ------------------------------------------------------------------ */

#if 0
static char *dec1_bits[8] = {
"DCSTD0", "DCSCT1", "WIPA", "GLIMB",
"GLIMT", "SLTCA", "HLCK"
};
static char *dec2_bits[8] = {
"RDCAP", "COPRO", "COLSTR", "TYPE3",
NULL, "FIDT", "HLVLN", "INTL"
};
static char *scale1_bits[8] = {
"VID_A", "VBI_A", NULL, NULL, "VID_B", "VBI_B"
};
static char *scale2_bits[8] = {
"TRERR", "CFERR", "LDERR", "WASRST",
"FIDSCI", "FIDSCO", "D6^D5", "TASK"
};

static void dump_statusreg(struct saa7134_dev *dev, int reg,
char *regname, char **bits)
{
int value,i;

value = saa_readb(reg);
printk(KERN_DEBUG "%s: %s:", dev->name, regname);
for (i = 7; i >= 0; i--) {
if (NULL == bits[i])
continue;
printk(" %s=%d", bits[i], (value & (1 << i)) ? 1 : 0);
}
printk("\n");
}

static void dump_statusregs(struct saa7134_dev *dev)
{
dump_statusreg(dev,SAA7134_STATUS_VIDEO1,"dec1",dec1_bits);
dump_statusreg(dev,SAA7134_STATUS_VIDEO2,"dec2",dec2_bits);
dump_statusreg(dev,SAA7134_SCALER_STATUS0,"scale0",scale1_bits);
dump_statusreg(dev,SAA7134_SCALER_STATUS1,"scale1",scale2_bits);
}
#endif

/* ----------------------------------------------------------- */
/* delayed request_module */
Expand Down Expand Up @@ -616,10 +576,6 @@ static irqreturn_t saa7134_irq(int irq, void *dev_id, struct pt_regs *regs)
if (irq_debug)
print_irqstatus(dev,loop,report,status);

#if 0
if (report & SAA7134_IRQ_REPORT_CONF_ERR)
dump_statusregs(dev);
#endif

if (report & SAA7134_IRQ_REPORT_RDCAP /* _INTL */)
saa7134_irq_video_intl(dev);
Expand Down Expand Up @@ -711,7 +667,6 @@ static int saa7134_hwinit1(struct saa7134_dev *dev)
SAA7134_MAIN_CTRL_EVFE1 |
SAA7134_MAIN_CTRL_EVFE2 |
SAA7134_MAIN_CTRL_ESFE |
SAA7134_MAIN_CTRL_EBADC |
SAA7134_MAIN_CTRL_EBDAC);

/* enable peripheral devices */
Expand All @@ -726,14 +681,28 @@ static int saa7134_hwinit1(struct saa7134_dev *dev)
/* late init (with i2c + irq) */
static int saa7134_hwinit2(struct saa7134_dev *dev)
{
unsigned int irq2_mask;
dprintk("hwinit2\n");

saa7134_video_init2(dev);
saa7134_tvaudio_init2(dev);

/* enable IRQ's */
irq2_mask =
SAA7134_IRQ2_INTE_DEC3 |
SAA7134_IRQ2_INTE_DEC2 |
SAA7134_IRQ2_INTE_DEC1 |
SAA7134_IRQ2_INTE_DEC0 |
SAA7134_IRQ2_INTE_PE |
SAA7134_IRQ2_INTE_AR;

if (dev->has_remote)
irq2_mask |= (SAA7134_IRQ2_INTE_GPIO18 |
SAA7134_IRQ2_INTE_GPIO18A |
SAA7134_IRQ2_INTE_GPIO16 );

saa_writel(SAA7134_IRQ1, 0);
saa_writel(SAA7134_IRQ2, dev->irq2_mask);
saa_writel(SAA7134_IRQ2, irq2_mask);

return 0;
}
Expand Down Expand Up @@ -954,13 +923,6 @@ static int __devinit saa7134_initdev(struct pci_dev *pci_dev,
}

/* initialize hardware #1 */
dev->irq2_mask =
SAA7134_IRQ2_INTE_DEC3 |
SAA7134_IRQ2_INTE_DEC2 |
SAA7134_IRQ2_INTE_DEC1 |
SAA7134_IRQ2_INTE_DEC0 |
SAA7134_IRQ2_INTE_PE |
SAA7134_IRQ2_INTE_AR;
saa7134_board_init1(dev);
saa7134_hwinit1(dev);

Expand Down Expand Up @@ -990,6 +952,7 @@ static int __devinit saa7134_initdev(struct pci_dev *pci_dev,
request_module("saa6752hs");
request_module_depend("saa7134-empress",&need_empress);
}

if (card_is_dvb(dev))
request_module_depend("saa7134-dvb",&need_dvb);

Expand Down Expand Up @@ -1144,9 +1107,6 @@ static void __devexit saa7134_finidev(struct pci_dev *pci_dev)
release_mem_region(pci_resource_start(pci_dev,0),
pci_resource_len(pci_dev,0));

#if 0 /* causes some trouble when reinserting the driver ... */
pci_disable_device(pci_dev);
#endif
pci_set_drvdata(pci_dev, NULL);

/* free memory */
Expand Down
45 changes: 36 additions & 9 deletions drivers/media/video/saa7134/saa7134-i2c.c
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* $Id: saa7134-i2c.c,v 1.11 2005/06/12 01:36:14 mchehab Exp $
* $Id: saa7134-i2c.c,v 1.19 2005/07/07 01:49:30 mkrufky Exp $
*
* device driver for philips saa7134 based TV cards
* i2c interface support
Expand Down Expand Up @@ -197,10 +197,6 @@ static inline int i2c_send_byte(struct saa7134_dev *dev,
enum i2c_status status;
__u32 dword;

#if 0
i2c_set_attr(dev,attr);
saa_writeb(SAA7134_I2C_DATA, data);
#else
/* have to write both attr + data in one 32bit word */
dword = saa_readl(SAA7134_I2C_ATTR_STATUS >> 2);
dword &= 0x0f;
Expand All @@ -210,7 +206,6 @@ static inline int i2c_send_byte(struct saa7134_dev *dev,
// dword |= 0x40 << 16; /* 400 kHz */
dword |= 0xf0 << 24;
saa_writel(SAA7134_I2C_ATTR_STATUS >> 2, dword);
#endif
d2printk(KERN_DEBUG "%s: i2c data => 0x%x\n",dev->name,data);

if (!i2c_is_busy_wait(dev))
Expand Down Expand Up @@ -331,12 +326,44 @@ static u32 functionality(struct i2c_adapter *adap)

static int attach_inform(struct i2c_client *client)
{
struct saa7134_dev *dev = client->adapter->algo_data;
struct saa7134_dev *dev = client->adapter->algo_data;
int tuner = dev->tuner_type;
int conf = dev->tda9887_conf;
struct tuner_setup tun_setup;

d1printk( "%s i2c attach [addr=0x%x,client=%s]\n",
client->driver->name,client->addr,i2c_clientname(client));

if (!client->driver->command)
return 0;

if (saa7134_boards[dev->board].radio_type != UNSET) {

tun_setup.type = saa7134_boards[dev->board].radio_type;
tun_setup.addr = saa7134_boards[dev->board].radio_addr;

if ((tun_setup.addr == ADDR_UNSET) || (tun_setup.addr == client->addr)) {
tun_setup.mode_mask = T_RADIO;

client->driver->command(client, TUNER_SET_TYPE_ADDR, &tun_setup);
}
}

if (tuner != UNSET) {

tun_setup.type = tuner;
tun_setup.addr = saa7134_boards[dev->board].tuner_addr;

if ((tun_setup.addr == ADDR_UNSET)||(tun_setup.addr == client->addr)) {

tun_setup.mode_mask = T_ANALOG_TV;

client->driver->command(client,TUNER_SET_TYPE_ADDR, &tun_setup);
}
}

client->driver->command(client, TDA9887_SET_CONFIG, &conf);

saa7134_i2c_call_clients(dev,TUNER_SET_TYPE,&tuner);
saa7134_i2c_call_clients(dev,TDA9887_SET_CONFIG,&conf);
return 0;
}

Expand Down
48 changes: 24 additions & 24 deletions drivers/media/video/saa7134/saa7134-input.c
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* $Id: saa7134-input.c,v 1.19 2005/06/07 18:02:26 nsh Exp $
* $Id: saa7134-input.c,v 1.21 2005/06/22 23:37:34 nsh Exp $
*
* handle saa7134 IR remotes via linux kernel input layer.
*
Expand Down Expand Up @@ -68,10 +68,8 @@ static IR_KEYTAB_TYPE flyvideo_codes[IR_KEYTAB_SIZE] = {
[ 6 ] = KEY_AGAIN, // Recal
[ 16 ] = KEY_KPENTER, // Enter

#if 1 /* FIXME */
[ 26 ] = KEY_F22, // Stereo
[ 24 ] = KEY_EDIT, // AV Source
#endif
};

static IR_KEYTAB_TYPE cinergy_codes[IR_KEYTAB_SIZE] = {
Expand Down Expand Up @@ -172,45 +170,45 @@ static IR_KEYTAB_TYPE eztv_codes[IR_KEYTAB_SIZE] = {
};

static IR_KEYTAB_TYPE avacssmart_codes[IR_KEYTAB_SIZE] = {
[ 30 ] = KEY_POWER, // power
[ 30 ] = KEY_POWER, // power
[ 28 ] = KEY_SEARCH, // scan
[ 7 ] = KEY_SELECT, // source
[ 7 ] = KEY_SELECT, // source

[ 22 ] = KEY_VOLUMEUP,
[ 20 ] = KEY_VOLUMEDOWN,
[ 31 ] = KEY_CHANNELUP,
[ 31 ] = KEY_CHANNELUP,
[ 23 ] = KEY_CHANNELDOWN,
[ 24 ] = KEY_MUTE,

[ 2 ] = KEY_KP0,
[ 1 ] = KEY_KP1,
[ 11 ] = KEY_KP2,
[ 27 ] = KEY_KP3,
[ 5 ] = KEY_KP4,
[ 9 ] = KEY_KP5,
[ 21 ] = KEY_KP6,
[ 1 ] = KEY_KP1,
[ 11 ] = KEY_KP2,
[ 27 ] = KEY_KP3,
[ 5 ] = KEY_KP4,
[ 9 ] = KEY_KP5,
[ 21 ] = KEY_KP6,
[ 6 ] = KEY_KP7,
[ 10 ] = KEY_KP8,
[ 10 ] = KEY_KP8,
[ 18 ] = KEY_KP9,
[ 16 ] = KEY_KPDOT,

[ 3 ] = KEY_TUNER, // tv/fm
[ 4 ] = KEY_REWIND, // fm tuning left or function left
[ 12 ] = KEY_FORWARD, // fm tuning right or function right
[ 4 ] = KEY_REWIND, // fm tuning left or function left
[ 12 ] = KEY_FORWARD, // fm tuning right or function right

[ 0 ] = KEY_RECORD,
[ 8 ] = KEY_STOP,
[ 17 ] = KEY_PLAY,
[ 8 ] = KEY_STOP,
[ 17 ] = KEY_PLAY,

[ 25 ] = KEY_ZOOM,
[ 14 ] = KEY_MENU, // function
[ 19 ] = KEY_AGAIN, // recall
[ 29 ] = KEY_RESTART, // reset
[ 26 ] = KEY_SHUFFLE, // snapshot/shuffle

// FIXME
[ 13 ] = KEY_F21, // mts
[ 15 ] = KEY_F22, // min
[ 26 ] = KEY_F23, // freeze
[ 15 ] = KEY_F22, // min
};

/* Alex Hermann <gaaf@gmx.net> */
Expand Down Expand Up @@ -489,13 +487,14 @@ int saa7134_input_init1(struct saa7134_dev *dev)
break;
case SAA7134_BOARD_ECS_TVP3XP:
case SAA7134_BOARD_ECS_TVP3XP_4CB5:
ir_codes = eztv_codes;
mask_keycode = 0x00017c;
mask_keyup = 0x000002;
ir_codes = eztv_codes;
mask_keycode = 0x00017c;
mask_keyup = 0x000002;
polling = 50; // ms
break;
break;
case SAA7134_BOARD_KWORLD_XPERT:
case SAA7134_BOARD_AVACSSMARTTV:
ir_codes = avacssmart_codes;
ir_codes = avacssmart_codes;
mask_keycode = 0x00001F;
mask_keyup = 0x000020;
polling = 50; // ms
Expand Down Expand Up @@ -524,6 +523,7 @@ int saa7134_input_init1(struct saa7134_dev *dev)
polling = 50; // ms
break;
case SAA7134_BOARD_VIDEOMATE_TV_PVR:
case SAA7134_BOARD_VIDEOMATE_TV_GOLD_PLUSII:
ir_codes = videomate_tv_pvr_codes;
mask_keycode = 0x00003F;
mask_keyup = 0x400000;
Expand Down
19 changes: 13 additions & 6 deletions drivers/media/video/saa7134/saa7134-oss.c
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* $Id: saa7134-oss.c,v 1.14 2005/05/18 22:45:16 hhackmann Exp $
* $Id: saa7134-oss.c,v 1.17 2005/06/28 23:41:47 mkrufky Exp $
*
* device driver for philips saa7134 based TV cards
* oss dsp interface
Expand Down Expand Up @@ -556,21 +556,28 @@ mixer_recsrc_7134(struct saa7134_dev *dev)
static int
mixer_recsrc_7133(struct saa7134_dev *dev)
{
u32 value = 0xbbbbbb;
u32 anabar, xbarin;

xbarin = 0x03; // adc
anabar = 0;
switch (dev->oss.input) {
case TV:
value = 0xbbbb10; /* MAIN */
xbarin = 0; // Demodulator
anabar = 2; // DACs
break;
case LINE1:
value = 0xbbbb32; /* AUX1 */
anabar = 0; // aux1, aux1
break;
case LINE2:
case LINE2_LEFT:
value = 0xbbbb54; /* AUX2 */
anabar = 9; // aux2, aux2
break;
}
saa_dsp_writel(dev, 0x46c >> 2, value);
/* output xbar always main channel */
saa_dsp_writel(dev, 0x46c >> 2, 0xbbbb10);
saa_dsp_writel(dev, 0x464 >> 2, xbarin);
saa_writel(0x594 >> 2, anabar);

return 0;
}

Expand Down
6 changes: 3 additions & 3 deletions drivers/media/video/saa7134/saa7134-ts.c
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* $Id: saa7134-ts.c,v 1.14 2005/02/03 10:24:33 kraxel Exp $
* $Id: saa7134-ts.c,v 1.15 2005/06/14 22:48:18 hhackmann Exp $
*
* device driver for philips saa7134 based TV cards
* video4linux video interface
Expand Down Expand Up @@ -221,10 +221,10 @@ void saa7134_irq_ts_done(struct saa7134_dev *dev, unsigned long status)
if (dev->ts_q.curr) {
field = dev->ts_q.curr->vb.field;
if (field == V4L2_FIELD_TOP) {
if ((status & 0x100000) != 0x000000)
if ((status & 0x100000) != 0x100000)
goto done;
} else {
if ((status & 0x100000) != 0x100000)
if ((status & 0x100000) != 0x000000)
goto done;
}
saa7134_buffer_finish(dev,&dev->ts_q,STATE_DONE);
Expand Down
Loading

0 comments on commit 330a115

Please sign in to comment.