Commit e7375f37 authored by Andrew Morton's avatar Andrew Morton Committed by Linus Torvalds

[PATCH] dvb: Update av7110 driver

From: Michael Hunold <hunold@linuxtv.org>

av7110: follow changes in saa7146_core regarding saa7146_set_gpio() and
saa7146_wait_for_debi_done() function

av7110: increased I2C speed to 275 kHz, follow introduction of
SAA7146_I2C_SHORT_DELAY flag to speed up I2C access

budget: make budget-ci use this gpio function and the new wait_...()
function, this fixes
BORROWED_FROM_AV7110_H_BUT_REALLY_BELONGS_IN_SAA7146_DEFS_H remark

budget: use alternative values for BRS setup on budget cards (by Rober
Schlabbach)

budget: remote control table should be filled completely.  at least populate
the entries that come with the standard Hauppauge RC (Jamie Honan)

ttpci-eeprom: add proper MODULE_LICENSE("GPL") so we don't taint the kernel
anymore
parent e82f2130
...@@ -35,7 +35,6 @@ ...@@ -35,7 +35,6 @@
#define __KERNEL_SYSCALLS__ #define __KERNEL_SYSCALLS__
#include <linux/module.h> #include <linux/module.h>
#include <linux/init.h>
#include <linux/kmod.h> #include <linux/kmod.h>
#include <linux/delay.h> #include <linux/delay.h>
#include <linux/fs.h> #include <linux/fs.h>
...@@ -43,7 +42,6 @@ ...@@ -43,7 +42,6 @@
#include <linux/poll.h> #include <linux/poll.h>
#include <linux/unistd.h> #include <linux/unistd.h>
#include <linux/byteorder/swabb.h> #include <linux/byteorder/swabb.h>
#include <linux/slab.h>
#include <linux/smp_lock.h> #include <linux/smp_lock.h>
#include <stdarg.h> #include <stdarg.h>
...@@ -55,10 +53,8 @@ ...@@ -55,10 +53,8 @@
#include <linux/ptrace.h> #include <linux/ptrace.h>
#include <linux/ioport.h> #include <linux/ioport.h>
#include <linux/in.h> #include <linux/in.h>
#include <linux/slab.h>
#include <linux/string.h> #include <linux/string.h>
#include <linux/pci.h> #include <linux/pci.h>
#include <linux/init.h>
#include <linux/vmalloc.h> #include <linux/vmalloc.h>
#include <linux/netdevice.h> #include <linux/netdevice.h>
#include <linux/inetdevice.h> #include <linux/inetdevice.h>
...@@ -108,6 +104,7 @@ static int vidmode=CVBS_RGB_OUT; ...@@ -108,6 +104,7 @@ static int vidmode=CVBS_RGB_OUT;
static int pids_off; static int pids_off;
static int adac=DVB_ADAC_TI; static int adac=DVB_ADAC_TI;
static int hw_sections = 1; static int hw_sections = 1;
static int rgb_on = 0;
int av7110_num = 0; int av7110_num = 0;
...@@ -118,42 +115,12 @@ int av7110_num = 0; ...@@ -118,42 +115,12 @@ int av7110_num = 0;
* DEBI functions * DEBI functions
****************************************************************************/ ****************************************************************************/
#define wait_for_debi_done(x) \
saa7146_wait_for_debi_done(x->dev) \
/* This DEBI code is based on the Stradis driver /* This DEBI code is based on the Stradis driver
by Nathan Laredo <laredo@gnu.org> */ by Nathan Laredo <laredo@gnu.org> */
static int wait_for_debi_done(struct av7110 *av7110)
{
struct saa7146_dev *dev = av7110->dev;
int start;
/* wait for registers to be programmed */
start = jiffies;
while (1) {
if (saa7146_read(dev, MC2) & 2)
break;
if (jiffies-start > HZ/20) {
printk ("%s: timed out while waiting for registers "
"getting programmed\n", __FUNCTION__);
return -ETIMEDOUT;
}
}
/* wait for transfer to complete */
start = jiffies;
while (1) {
if (!(saa7146_read(dev, PSR) & SPCI_DEBI_S))
break;
saa7146_read(dev, MC2);
if (jiffies-start > HZ/4) {
printk ("%s: timed out while waiting for transfer "
"completion\n", __FUNCTION__);
return -ETIMEDOUT;
}
}
return 0;
}
static int debiwrite(struct av7110 *av7110, u32 config, static int debiwrite(struct av7110 *av7110, u32 config,
int addr, u32 val, int count) int addr, u32 val, int count)
{ {
...@@ -375,7 +342,7 @@ static int record_cb(struct dvb_filter_pes2ts *p2t, u8 *buf, size_t len) ...@@ -375,7 +342,7 @@ static int record_cb(struct dvb_filter_pes2ts *p2t, u8 *buf, size_t len)
{ {
struct dvb_demux_feed *dvbdmxfeed=(struct dvb_demux_feed *) p2t->priv; struct dvb_demux_feed *dvbdmxfeed=(struct dvb_demux_feed *) p2t->priv;
DEB_EE(("struct dvb_filter_pes2ts:%p\n",p2t)); // DEB_EE(("struct dvb_filter_pes2ts:%p\n",p2t));
if (!(dvbdmxfeed->ts_type & TS_PACKET)) if (!(dvbdmxfeed->ts_type & TS_PACKET))
return 0; return 0;
...@@ -385,14 +352,14 @@ static int record_cb(struct dvb_filter_pes2ts *p2t, u8 *buf, size_t len) ...@@ -385,14 +352,14 @@ static int record_cb(struct dvb_filter_pes2ts *p2t, u8 *buf, size_t len)
return dvbdmxfeed->cb.ts(buf, len, 0, 0, return dvbdmxfeed->cb.ts(buf, len, 0, 0,
&dvbdmxfeed->feed.ts, DMX_OK); &dvbdmxfeed->feed.ts, DMX_OK);
else else
return dvb_filter_pes2ts(p2t, buf, len); return dvb_filter_pes2ts(p2t, buf, len, 1);
} }
static int dvb_filter_pes2ts_cb(void *priv, unsigned char *data) static int dvb_filter_pes2ts_cb(void *priv, unsigned char *data)
{ {
struct dvb_demux_feed *dvbdmxfeed=(struct dvb_demux_feed *) priv; struct dvb_demux_feed *dvbdmxfeed=(struct dvb_demux_feed *) priv;
DEB_EE(("dvb_demux_feed:%p\n",dvbdmxfeed)); // DEB_EE(("dvb_demux_feed:%p\n",dvbdmxfeed));
dvbdmxfeed->cb.ts(data, 188, 0, 0, dvbdmxfeed->cb.ts(data, 188, 0, 0,
&dvbdmxfeed->feed.ts, &dvbdmxfeed->feed.ts,
...@@ -886,10 +853,10 @@ static void gpioirq (unsigned long data) ...@@ -886,10 +853,10 @@ static void gpioirq (unsigned long data)
txbuf=irdebi(av7110, DEBINOSWAP, TX_BUFF, 0, 2); txbuf=irdebi(av7110, DEBINOSWAP, TX_BUFF, 0, 2);
len=(av7110->debilen+3)&(~3); len=(av7110->debilen+3)&(~3);
DEB_D(("GPIO0 irq %d %d\n", av7110->debitype, av7110->debilen)); // DEB_D(("GPIO0 irq %d %d\n", av7110->debitype, av7110->debilen));
print_time("gpio"); print_time("gpio");
DEB_D(("GPIO0 irq %02x\n", av7110->debitype&0xff)); // DEB_D(("GPIO0 irq %02x\n", av7110->debitype&0xff));
switch (av7110->debitype&0xff) { switch (av7110->debitype&0xff) {
case DATA_TS_PLAY: case DATA_TS_PLAY:
...@@ -2706,9 +2673,9 @@ static int tuner_set_tv_freq (struct saa7146_dev *dev, u32 freq) ...@@ -2706,9 +2673,9 @@ static int tuner_set_tv_freq (struct saa7146_dev *dev, u32 freq)
buf[1] = div & 0xff; buf[1] = div & 0xff;
buf[2] = 0x8e; buf[2] = 0x8e;
if (freq < (u32) (16*168.25) ) if (freq < (u32) 16*168.25 )
config = 0xa0; config = 0xa0;
else if (freq < (u32) (16*447.25)) else if (freq < (u32) 16*447.25)
config = 0x90; config = 0x90;
else else
config = 0x30; config = 0x30;
...@@ -4294,8 +4261,10 @@ static void av7110_before_after_tune (fe_status_t s, void *data) ...@@ -4294,8 +4261,10 @@ static void av7110_before_after_tune (fe_status_t s, void *data)
av7110->pids[DMX_PES_TELETEXT], 0, av7110->pids[DMX_PES_TELETEXT], 0,
av7110->pids[DMX_PES_PCR]); av7110->pids[DMX_PES_PCR]);
outcom(av7110, COMTYPE_PIDFILTER, Scan, 0); outcom(av7110, COMTYPE_PIDFILTER, Scan, 0);
} else } else {
SetPIDs(av7110, 0, 0, 0, 0, 0); SetPIDs(av7110, 0, 0, 0, 0, 0);
outcom(av7110, COMTYPE_PIDFILTER, FlushTSQueue, 0);
}
up(&av7110->pid_mutex); up(&av7110->pid_mutex);
} }
...@@ -4553,7 +4522,7 @@ static int av7110_attach (struct saa7146_dev* dev, struct saa7146_pci_extension_ ...@@ -4553,7 +4522,7 @@ static int av7110_attach (struct saa7146_dev* dev, struct saa7146_pci_extension_
get recognized before the main driver is fully loaded */ get recognized before the main driver is fully loaded */
saa7146_write(dev, GPIO_CTRL, 0x500000); saa7146_write(dev, GPIO_CTRL, 0x500000);
saa7146_i2c_adapter_prepare(dev, NULL, SAA7146_I2C_BUS_BIT_RATE_3200); saa7146_i2c_adapter_prepare(dev, NULL, SAA7146_I2C_BUS_BIT_RATE_120); /* 275 kHz */
av7110->i2c_bus = dvb_register_i2c_bus (master_xfer, dev, av7110->i2c_bus = dvb_register_i2c_bus (master_xfer, dev,
av7110->dvb_adapter, 0); av7110->dvb_adapter, 0);
...@@ -4571,7 +4540,7 @@ static int av7110_attach (struct saa7146_dev* dev, struct saa7146_pci_extension_ ...@@ -4571,7 +4540,7 @@ static int av7110_attach (struct saa7146_dev* dev, struct saa7146_pci_extension_
/* set dd1 stream a & b */ /* set dd1 stream a & b */
saa7146_write(dev, DD1_STREAM_B, 0x00000000); saa7146_write(dev, DD1_STREAM_B, 0x00000000);
saa7146_write(dev, DD1_INIT, 0x02000000); saa7146_write(dev, DD1_INIT, 0x03000000);
saa7146_write(dev, MC2, (MASK_09 | MASK_25 | MASK_10 | MASK_26)); saa7146_write(dev, MC2, (MASK_09 | MASK_25 | MASK_10 | MASK_26));
/* upload all */ /* upload all */
...@@ -4729,7 +4698,7 @@ static int av7110_attach (struct saa7146_dev* dev, struct saa7146_pci_extension_ ...@@ -4729,7 +4698,7 @@ static int av7110_attach (struct saa7146_dev* dev, struct saa7146_pci_extension_
memcpy(standard,dvb_standard,sizeof(struct saa7146_standard)*2); memcpy(standard,dvb_standard,sizeof(struct saa7146_standard)*2);
/* set dd1 stream a & b */ /* set dd1 stream a & b */
saa7146_write(dev, DD1_STREAM_B, 0x00000000); saa7146_write(dev, DD1_STREAM_B, 0x00000000);
saa7146_write(dev, DD1_INIT, 0x02000700); saa7146_write(dev, DD1_INIT, 0x03000700);
saa7146_write(dev, MC2, (MASK_09 | MASK_25 | MASK_10 | MASK_26)); saa7146_write(dev, MC2, (MASK_09 | MASK_25 | MASK_10 | MASK_26));
} }
else if (dev->pci->subsystem_vendor == 0x110a) { else if (dev->pci->subsystem_vendor == 0x110a) {
...@@ -4747,7 +4716,8 @@ static int av7110_attach (struct saa7146_dev* dev, struct saa7146_pci_extension_ ...@@ -4747,7 +4716,8 @@ static int av7110_attach (struct saa7146_dev* dev, struct saa7146_pci_extension_
// switch DVB SCART on // switch DVB SCART on
outcom(av7110, COMTYPE_AUDIODAC, MainSwitch, 1, 0); outcom(av7110, COMTYPE_AUDIODAC, MainSwitch, 1, 0);
outcom(av7110, COMTYPE_AUDIODAC, ADSwitch, 1, 1); outcom(av7110, COMTYPE_AUDIODAC, ADSwitch, 1, 1);
//saa7146_setgpio(dev, 1, SAA7146_GPIO_OUTHI); // RGB on, SCART pin 16 if (rgb_on)
saa7146_setgpio(dev, 1, SAA7146_GPIO_OUTHI); // RGB on, SCART pin 16
//saa7146_setgpio(dev, 3, SAA7146_GPIO_OUTLO); // SCARTpin 8 //saa7146_setgpio(dev, 3, SAA7146_GPIO_OUTLO); // SCARTpin 8
} }
...@@ -4858,7 +4828,7 @@ static void av7110_irq(struct saa7146_dev* dev, u32 *isr) ...@@ -4858,7 +4828,7 @@ static void av7110_irq(struct saa7146_dev* dev, u32 *isr)
{ {
struct av7110 *av7110 = (struct av7110*)dev->ext_priv; struct av7110 *av7110 = (struct av7110*)dev->ext_priv;
DEB_INT(("dev: %p, av7110: %p\n",dev,av7110)); // DEB_INT(("dev: %p, av7110: %p\n",dev,av7110));
if (*isr & MASK_19) if (*isr & MASK_19)
tasklet_schedule (&av7110->debi_tasklet); tasklet_schedule (&av7110->debi_tasklet);
...@@ -4887,7 +4857,7 @@ static struct saa7146_standard standard[] = { ...@@ -4887,7 +4857,7 @@ static struct saa7146_standard standard[] = {
static struct saa7146_standard analog_standard[] = { static struct saa7146_standard analog_standard[] = {
{ {
.name = "PAL", .id = V4L2_STD_PAL_BG, .name = "PAL", .id = V4L2_STD_PAL_BG,
.v_offset = 0x18, .v_field = 288, .v_calc = 576, .v_offset = 0x18 /* 0 */ , .v_field = 288, .v_calc = 576,
.h_offset = 0x08, .h_pixels = 708, .h_calc = 709, .h_offset = 0x08, .h_pixels = 708, .h_calc = 709,
.v_max_out = 576, .h_max_out = 768, .v_max_out = 576, .h_max_out = 768,
}, { }, {
...@@ -4975,7 +4945,7 @@ static struct saa7146_ext_vv av7110_vv_data_st = { ...@@ -4975,7 +4945,7 @@ static struct saa7146_ext_vv av7110_vv_data_st = {
.inputs = 1, .inputs = 1,
.audios = 1, .audios = 1,
.capabilities = 0, .capabilities = 0,
.flags = SAA7146_EXT_SWAP_ODD_EVEN, .flags = 0,
.stds = &standard[0], .stds = &standard[0],
.num_stds = sizeof(standard)/sizeof(struct saa7146_standard), .num_stds = sizeof(standard)/sizeof(struct saa7146_standard),
...@@ -5002,6 +4972,7 @@ static struct saa7146_ext_vv av7110_vv_data_c = { ...@@ -5002,6 +4972,7 @@ static struct saa7146_ext_vv av7110_vv_data_c = {
static struct saa7146_extension av7110_extension = { static struct saa7146_extension av7110_extension = {
.name = "dvb\0", .name = "dvb\0",
.flags = SAA7146_I2C_SHORT_DELAY,
.module = THIS_MODULE, .module = THIS_MODULE,
.pci_tbl = &pci_tbl[0], .pci_tbl = &pci_tbl[0],
...@@ -5054,4 +5025,6 @@ MODULE_PARM(adac,"i"); ...@@ -5054,4 +5025,6 @@ MODULE_PARM(adac,"i");
MODULE_PARM_DESC(adac,"audio DAC type: 0 TI, 1 CRYSTAL, 2 MSP (use if autodetection fails)"); MODULE_PARM_DESC(adac,"audio DAC type: 0 TI, 1 CRYSTAL, 2 MSP (use if autodetection fails)");
MODULE_PARM(hw_sections, "i"); MODULE_PARM(hw_sections, "i");
MODULE_PARM_DESC(hw_sections, "0 use software section filter, 1 use hardware"); MODULE_PARM_DESC(hw_sections, "0 use software section filter, 1 use hardware");
MODULE_PARM(rgb_on, "i");
MODULE_PARM_DESC(rgb_on, "For Siemens DVB-C cards only: Enable RGB control"
" signal on SCART pin 16 to switch SCART video mode from CVBS to RGB");
...@@ -169,7 +169,8 @@ enum av7110_pid_command { ...@@ -169,7 +169,8 @@ enum av7110_pid_command {
DelPIDFilter, DelPIDFilter,
Scan, Scan,
SetDescr, SetDescr,
SetIR SetIR,
FlushTSQueue
}; };
enum av7110_mpeg_command { enum av7110_mpeg_command {
......
...@@ -35,81 +35,26 @@ ...@@ -35,81 +35,26 @@
#include <linux/interrupt.h> #include <linux/interrupt.h>
#include <linux/input.h> #include <linux/input.h>
#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0))
#include "input_fake.h"
#endif
struct budget_ci { struct budget_ci {
struct budget budget; struct budget budget;
struct input_dev input_dev; struct input_dev input_dev;
struct tasklet_struct msp430_irq_tasklet; struct tasklet_struct msp430_irq_tasklet;
}; };
static u32 budget_debiread4 (struct saa7146_dev *saa, u32 config, int addr, int count)
#ifndef BORROWED_FROM_AV7110_H_BUT_REALLY_BELONGS_IN_SAA7146_DEFS_H
#define DEBINOSWAP 0x000e0000
#define GPIO_IRQHI 0x10
#define GPIO_INPUT 0x00
void gpio_set(struct saa7146_dev* saa, u8 pin, u8 data)
{
u32 value = 0;
/* sanity check */
if(pin > 3)
return;
/* read old register contents */
value = saa7146_read(saa, GPIO_CTRL );
value &= ~(0xff << (8*pin));
value |= (data << (8*pin));
saa7146_write(saa, GPIO_CTRL, value);
}
static int wait_for_debi_done(struct saa7146_dev *saa)
{
int start = jiffies;
/* wait for registers to be programmed */
while (1) {
if (saa7146_read(saa, MC2) & 2)
break;
if (jiffies - start > HZ / 20) {
printk ("DVB (%s): timed out while waiting"
" for registers getting programmed\n",
__FUNCTION__);
return -ETIMEDOUT;
}
}
/* wait for transfer to complete */
start = jiffies;
while (1) {
if (!(saa7146_read(saa, PSR) & SPCI_DEBI_S))
break;
saa7146_read(saa, MC2);
if (jiffies - start > HZ / 4) {
printk ("DVB (%s): timed out while waiting"
" for transfer completion\n",
__FUNCTION__);
return -ETIMEDOUT;
}
}
return 0;
}
static u32 debiread (struct saa7146_dev *saa, u32 config, int addr, int count)
{ {
u32 result = 0; u32 result = 0;
if (count > 4 || count <= 0) if (count > 4 || count <= 0)
return 0; return 0;
if (wait_for_debi_done(saa) < 0) if (saa7146_wait_for_debi_done(saa) < 0)
return 0; return 0;
saa7146_write (saa, DEBI_COMMAND, saa7146_write (saa, DEBI_COMMAND,
...@@ -118,7 +63,7 @@ static u32 debiread (struct saa7146_dev *saa, u32 config, int addr, int count) ...@@ -118,7 +63,7 @@ static u32 debiread (struct saa7146_dev *saa, u32 config, int addr, int count)
saa7146_write(saa, DEBI_CONFIG, config); saa7146_write(saa, DEBI_CONFIG, config);
saa7146_write(saa, MC2, (2 << 16) | 2); saa7146_write(saa, MC2, (2 << 16) | 2);
wait_for_debi_done(saa); saa7146_wait_for_debi_done(saa);
result = saa7146_read(saa, DEBI_AD); result = saa7146_read(saa, DEBI_AD);
result &= (0xffffffffUL >> ((4 - count) * 8)); result &= (0xffffffffUL >> ((4 - count) * 8));
...@@ -126,20 +71,6 @@ static u32 debiread (struct saa7146_dev *saa, u32 config, int addr, int count) ...@@ -126,20 +71,6 @@ static u32 debiread (struct saa7146_dev *saa, u32 config, int addr, int count)
return result; return result;
} }
/* DEBI during interrupt */
static inline u32 irdebi(struct saa7146_dev *saa, u32 config, int addr, u32 val, int count)
{
u32 res;
res = debiread(saa, config, addr, count);
return res;
}
#endif
/* from reading the following remotes: /* from reading the following remotes:
Zenith Universal 7 / TV Mode 807 / VCR Mode 837 Zenith Universal 7 / TV Mode 807 / VCR Mode 837
Hauppauge (from NOVA-CI-s box product) Hauppauge (from NOVA-CI-s box product)
...@@ -150,7 +81,7 @@ static u16 key_map[64] = { ...@@ -150,7 +81,7 @@ static u16 key_map[64] = {
KEY_0, KEY_1, KEY_2, KEY_3, KEY_4, KEY_5, KEY_6, KEY_7, KEY_8, KEY_0, KEY_1, KEY_2, KEY_3, KEY_4, KEY_5, KEY_6, KEY_7, KEY_8,
KEY_9, KEY_9,
KEY_ENTER, KEY_ENTER,
0, KEY_RED,
KEY_POWER, /* RADIO on Hauppauge */ KEY_POWER, /* RADIO on Hauppauge */
KEY_MUTE, KEY_MUTE,
0, 0,
...@@ -162,11 +93,11 @@ static u16 key_map[64] = { ...@@ -162,11 +93,11 @@ static u16 key_map[64] = {
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
KEY_UP, KEY_DOWN, KEY_UP, KEY_DOWN,
KEY_OPTION, /* RESERVED on Hauppauge */ KEY_OPTION, /* RESERVED on Hauppauge */
0, KEY_BREAK,
/* 0x2X */ /* 0x2X */
KEY_CHANNELUP, KEY_CHANNELDOWN, KEY_CHANNELUP, KEY_CHANNELDOWN,
KEY_PREVIOUS, /* Prev. Ch on Zenith, SOURCE on Hauppauge */ KEY_PREVIOUS, /* Prev. Ch on Zenith, SOURCE on Hauppauge */
0, 0, 0, 0, KEY_RESTART, KEY_OK,
KEY_CYCLEWINDOWS, /* MINIMIZE on Hauppauge */ KEY_CYCLEWINDOWS, /* MINIMIZE on Hauppauge */
0, 0,
KEY_ENTER, /* VCR mode on Zenith */ KEY_ENTER, /* VCR mode on Zenith */
...@@ -177,7 +108,7 @@ static u16 key_map[64] = { ...@@ -177,7 +108,7 @@ static u16 key_map[64] = {
KEY_MENU, /* FULL SCREEN on Hauppauge */ KEY_MENU, /* FULL SCREEN on Hauppauge */
0, 0,
/* 0x3X */ /* 0x3X */
0, KEY_SLOW,
KEY_PREVIOUS, /* VCR mode on Zenith */ KEY_PREVIOUS, /* VCR mode on Zenith */
KEY_REWIND, KEY_REWIND,
0, 0,
...@@ -189,7 +120,7 @@ static u16 key_map[64] = { ...@@ -189,7 +120,7 @@ static u16 key_map[64] = {
KEY_C, KEY_C,
0, 0,
KEY_EXIT, KEY_EXIT,
0, KEY_POWER2,
KEY_TUNER, /* VCR mode on Zenith */ KEY_TUNER, /* VCR mode on Zenith */
0, 0,
}; };
...@@ -217,7 +148,7 @@ static void msp430_ir_interrupt (unsigned long data) ...@@ -217,7 +148,7 @@ static void msp430_ir_interrupt (unsigned long data)
struct budget_ci *budget_ci = (struct budget_ci*) data; struct budget_ci *budget_ci = (struct budget_ci*) data;
struct saa7146_dev *saa = budget_ci->budget.dev; struct saa7146_dev *saa = budget_ci->budget.dev;
struct input_dev *dev = &budget_ci->input_dev; struct input_dev *dev = &budget_ci->input_dev;
unsigned int code = irdebi(saa, DEBINOSWAP, 0x1234, 0, 2) >> 8; unsigned int code = budget_debiread4(saa, DEBINOSWAP, 0x1234, 2) >> 8;
if (code & 0x40) { if (code & 0x40) {
code &= 0x3f; code &= 0x3f;
...@@ -271,7 +202,7 @@ static int msp430_ir_init (struct budget_ci *budget_ci) ...@@ -271,7 +202,7 @@ static int msp430_ir_init (struct budget_ci *budget_ci)
saa7146_write(saa, IER, saa7146_read(saa, IER) | MASK_06); saa7146_write(saa, IER, saa7146_read(saa, IER) | MASK_06);
gpio_set(saa, 3, GPIO_IRQHI); saa7146_setgpio(saa, 3, SAA7146_GPIO_IRQHI);
return 0; return 0;
} }
...@@ -283,8 +214,8 @@ static void msp430_ir_deinit (struct budget_ci *budget_ci) ...@@ -283,8 +214,8 @@ static void msp430_ir_deinit (struct budget_ci *budget_ci)
struct input_dev *dev = &budget_ci->input_dev; struct input_dev *dev = &budget_ci->input_dev;
saa7146_write(saa, IER, saa7146_read(saa, IER) & ~MASK_06); saa7146_write(saa, IER, saa7146_read(saa, IER) & ~MASK_06);
gpio_set(saa, 3, GPIO_INPUT); saa7146_setgpio(saa, 3, SAA7146_GPIO_INPUT);
gpio_set(saa, 2, GPIO_INPUT); saa7146_setgpio(saa, 2, SAA7146_GPIO_INPUT);
if (del_timer(&dev->timer)) if (del_timer(&dev->timer))
input_event(dev, EV_KEY, key_map[dev->repeat_key], !!0); input_event(dev, EV_KEY, key_map[dev->repeat_key], !!0);
......
...@@ -64,8 +64,8 @@ static struct saa7146_pci_extension_data x_var = { \ ...@@ -64,8 +64,8 @@ static struct saa7146_pci_extension_data x_var = { \
.ext_priv = &x_var ## _info, \ .ext_priv = &x_var ## _info, \
.ext = &budget_extension }; .ext = &budget_extension };
#define TS_WIDTH (4*188) #define TS_WIDTH (376)
#define TS_HEIGHT (1024/4) #define TS_HEIGHT (512)
#define TS_BUFLEN (TS_WIDTH*TS_HEIGHT) #define TS_BUFLEN (TS_WIDTH*TS_HEIGHT)
#define TS_MAX_PACKETS (TS_BUFLEN/TS_SIZE) #define TS_MAX_PACKETS (TS_BUFLEN/TS_SIZE)
......
...@@ -142,3 +142,9 @@ int ttpci_eeprom_parse_mac(struct dvb_i2c_bus *i2c) ...@@ -142,3 +142,9 @@ int ttpci_eeprom_parse_mac(struct dvb_i2c_bus *i2c)
} }
EXPORT_SYMBOL(ttpci_eeprom_parse_mac); EXPORT_SYMBOL(ttpci_eeprom_parse_mac);
MODULE_LICENSE("GPL");
MODULE_AUTHOR("Ralph Metzler, Marcus Metzler, others");
MODULE_DESCRIPTION("Decode dvb_net MAC address from EEPROM of PCI DVB cards "
"made by Siemens, Technotrend, Hauppauge");
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