mirror of
https://github.com/torvalds/linux.git
synced 2024-11-12 15:11:50 +00:00
V4L/DVB (13706): [MB86A16] Overhaul
* better ISR handling * I2C fixes * better handling of configurations Signed-off-by: Manu Abraham <manu@linuxtv.org> Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
This commit is contained in:
parent
bd1fcac014
commit
df0cca174b
@ -65,10 +65,19 @@
|
||||
#define mmaor(dat, addr) mmwrite((dat) | ((mask) & mmread(addr)), addr)
|
||||
|
||||
|
||||
struct mantis_hwconfig {
|
||||
char *model_name;
|
||||
char *dev_type;
|
||||
};
|
||||
|
||||
|
||||
struct mantis_pci {
|
||||
/* PCI stuff */
|
||||
u16 vendor_id;
|
||||
u16 device_id;
|
||||
u16 subsystem_vendor;
|
||||
u16 subsystem_device;
|
||||
|
||||
u8 latency;
|
||||
|
||||
struct pci_dev *pdev;
|
||||
@ -110,7 +119,7 @@ struct mantis_pci {
|
||||
|
||||
u8 feeds;
|
||||
|
||||
struct mantis_config *config;
|
||||
struct mantis_hwconfig *hwconfig;
|
||||
|
||||
u32 mantis_int_stat;
|
||||
u32 mantis_int_mask;
|
||||
@ -121,7 +130,8 @@ struct mantis_pci {
|
||||
u32 sub_device_id;
|
||||
|
||||
/* A12 A13 A14 */
|
||||
int gpio_status;};
|
||||
int gpio_status;
|
||||
};
|
||||
|
||||
extern unsigned int verbose;
|
||||
extern unsigned int devs;
|
||||
|
@ -20,7 +20,10 @@
|
||||
|
||||
#include "mantis_common.h"
|
||||
#include "mantis_core.h"
|
||||
|
||||
#include "mantis_vp1033.h"
|
||||
#include "mantis_vp1034.h"
|
||||
#include "mantis_vp2033.h"
|
||||
#include "mantis_vp3030.h"
|
||||
|
||||
static int read_eeprom_byte(struct mantis_pci *mantis, u8 *data, u8 length)
|
||||
{
|
||||
@ -45,7 +48,7 @@ static int read_eeprom_byte(struct mantis_pci *mantis, u8 *data, u8 length)
|
||||
|
||||
return err;
|
||||
}
|
||||
msleep_interruptible(2);
|
||||
// msleep_interruptible(2);
|
||||
|
||||
return 0;
|
||||
}
|
||||
@ -72,41 +75,6 @@ static int write_eeprom_byte(struct mantis_pci *mantis, u8 *data, u8 length)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int get_subdevice_id(struct mantis_pci *mantis)
|
||||
{
|
||||
int err;
|
||||
static u8 sub_device_id[2];
|
||||
|
||||
mantis->sub_device_id = 0;
|
||||
sub_device_id[0] = 0xfc;
|
||||
if ((err = read_eeprom_byte(mantis, &sub_device_id[0], 2)) < 0) {
|
||||
dprintk(verbose, MANTIS_ERROR, 1, "Mantis EEPROM read error");
|
||||
return err;
|
||||
}
|
||||
mantis->sub_device_id = (sub_device_id[0] << 8) | sub_device_id[1];
|
||||
dprintk(verbose, MANTIS_ERROR, 1, "Sub Device ID=[0x%04x]",
|
||||
mantis->sub_device_id);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int get_subvendor_id(struct mantis_pci *mantis)
|
||||
{
|
||||
int err;
|
||||
static u8 sub_vendor_id[2];
|
||||
|
||||
mantis->sub_vendor_id = 0;
|
||||
sub_vendor_id[0] = 0xfe;
|
||||
if ((err = read_eeprom_byte(mantis, &sub_vendor_id[0], 2)) < 0) {
|
||||
dprintk(verbose, MANTIS_ERROR, 1, "Mantis EEPROM read error");
|
||||
return err;
|
||||
}
|
||||
mantis->sub_vendor_id = (sub_vendor_id[0] << 8) | sub_vendor_id[1];
|
||||
dprintk(verbose, MANTIS_ERROR, 1, "Sub Vendor ID=[0x%04x]",
|
||||
mantis->sub_vendor_id);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int get_mac_address(struct mantis_pci *mantis)
|
||||
{
|
||||
@ -118,8 +86,8 @@ static int get_mac_address(struct mantis_pci *mantis)
|
||||
|
||||
return err;
|
||||
}
|
||||
dprintk(verbose, MANTIS_ERROR, 1,
|
||||
"MAC Address=[%02x:%02x:%02x:%02x:%02x:%02x]",
|
||||
dprintk(verbose, MANTIS_ERROR, 0,
|
||||
" MAC Address=[%02x:%02x:%02x:%02x:%02x:%02x]\n",
|
||||
mantis->mac_address[0], mantis->mac_address[1],
|
||||
mantis->mac_address[2], mantis->mac_address[3],
|
||||
mantis->mac_address[4], mantis->mac_address[5]);
|
||||
@ -127,11 +95,51 @@ static int get_mac_address(struct mantis_pci *mantis)
|
||||
return 0;
|
||||
}
|
||||
|
||||
#define MANTIS_MODEL_UNKNOWN "UNKNOWN"
|
||||
#define MANTIS_DEV_UNKNOWN "UNKNOWN"
|
||||
|
||||
struct mantis_hwconfig unknown_device = {
|
||||
.model_name = MANTIS_MODEL_UNKNOWN,
|
||||
.dev_type = MANTIS_DEV_UNKNOWN,
|
||||
};
|
||||
|
||||
static void mantis_load_config(struct mantis_pci *mantis)
|
||||
{
|
||||
switch (mantis->subsystem_device) {
|
||||
case MANTIS_VP_1033_DVB_S: // VP-1033
|
||||
mantis->hwconfig = &vp1033_mantis_config;
|
||||
break;
|
||||
case MANTIS_VP_1034_DVB_S: // VP-1034
|
||||
mantis->hwconfig = &vp1034_mantis_config;
|
||||
break;
|
||||
case MANTIS_VP_2033_DVB_C: // VP-2033
|
||||
mantis->hwconfig = &vp2033_mantis_config;
|
||||
break;
|
||||
case MANTIS_VP_3030_DVB_T: // VP-3030
|
||||
mantis->hwconfig = &vp3030_mantis_config;
|
||||
break;
|
||||
default:
|
||||
mantis->hwconfig = &unknown_device;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
int mantis_core_init(struct mantis_pci *mantis)
|
||||
{
|
||||
int err = 0;
|
||||
|
||||
mantis_load_config(mantis);
|
||||
dprintk(verbose, MANTIS_ERROR, 0, "found a %s PCI %s device on (%02x:%02x.%x),\n",
|
||||
mantis->hwconfig->model_name, mantis->hwconfig->dev_type,
|
||||
mantis->pdev->bus->number, PCI_SLOT(mantis->pdev->devfn), PCI_FUNC(mantis->pdev->devfn));
|
||||
dprintk(verbose, MANTIS_ERROR, 0, " Mantis Rev %d [%04x:%04x], ",
|
||||
mantis->revision,
|
||||
mantis->subsystem_vendor, mantis->subsystem_device);
|
||||
dprintk(verbose, MANTIS_ERROR, 0,
|
||||
"irq: %d, latency: %d\n memory: 0x%lx, mmio: 0x%p\n",
|
||||
mantis->pdev->irq, mantis->latency,
|
||||
mantis->mantis_addr, mantis->mantis_mmio);
|
||||
|
||||
if ((err = mantis_i2c_init(mantis)) < 0) {
|
||||
dprintk(verbose, MANTIS_ERROR, 1, "Mantis I2C init failed");
|
||||
return err;
|
||||
@ -140,14 +148,6 @@ int mantis_core_init(struct mantis_pci *mantis)
|
||||
dprintk(verbose, MANTIS_ERROR, 1, "get MAC address failed");
|
||||
return err;
|
||||
}
|
||||
if ((err = get_subvendor_id(mantis)) < 0) {
|
||||
dprintk(verbose, MANTIS_ERROR, 1, "get Sub vendor ID failed");
|
||||
return err;
|
||||
}
|
||||
if ((err = get_subdevice_id(mantis)) < 0) {
|
||||
dprintk(verbose, MANTIS_ERROR, 1, "get Sub device ID failed");
|
||||
return err;
|
||||
}
|
||||
if ((err = mantis_dma_init(mantis)) < 0) {
|
||||
dprintk(verbose, MANTIS_ERROR, 1, "Mantis DMA init failed");
|
||||
return err;
|
||||
@ -162,7 +162,6 @@ int mantis_core_init(struct mantis_pci *mantis)
|
||||
|
||||
int mantis_core_exit(struct mantis_pci *mantis)
|
||||
{
|
||||
|
||||
mantis_dma_stop(mantis);
|
||||
dprintk(verbose, MANTIS_ERROR, 1, "DMA engine stopping");
|
||||
if (mantis_dma_exit(mantis) < 0)
|
||||
|
@ -206,22 +206,13 @@ err0:
|
||||
return result;
|
||||
}
|
||||
|
||||
#define MANTIS_VP_1027_DVB_S 0x0013
|
||||
#define MANTIS_VP_1033_DVB_S 0x0016
|
||||
#define MANTIS_VP_1034_DVB_S 0x0014
|
||||
#define MANTIS_VP_1040_DVB_S2
|
||||
#define MANTIS_VP_1041_DVB_S2
|
||||
#define MANTIS_VP_2033_DVB_C 0x0008
|
||||
#define MANTIS_VP_3024_DVB_T 0x0009
|
||||
#define MANTIS_VP_3030_DVB_T 0x0024
|
||||
|
||||
int __devinit mantis_frontend_init(struct mantis_pci *mantis)
|
||||
{
|
||||
dprintk(verbose, MANTIS_DEBUG, 1, "Mantis frontend Init");
|
||||
mantis_fe_powerup(mantis);
|
||||
mantis_frontend_reset(mantis);
|
||||
dprintk(verbose, MANTIS_DEBUG, 1, "Device ID=%02x", mantis->sub_device_id);
|
||||
switch (mantis->sub_device_id) {
|
||||
dprintk(verbose, MANTIS_DEBUG, 1, "Device ID=%02x", mantis->subsystem_device);
|
||||
switch (mantis->subsystem_device) {
|
||||
case MANTIS_VP_1033_DVB_S: // VP-1033
|
||||
dprintk(verbose, MANTIS_ERROR, 1, "Probing for STV0299 (DVB-S)");
|
||||
mantis->fe = stv0299_attach(&lgtdqcs001f_config,
|
||||
|
@ -33,32 +33,27 @@
|
||||
static int mantis_ack_wait(struct mantis_pci *mantis)
|
||||
{
|
||||
int rc = 0;
|
||||
u32 timeout = 0;
|
||||
|
||||
if (wait_event_interruptible_timeout(mantis->i2c_wq,
|
||||
mantis->mantis_int_stat & MANTIS_INT_I2CRACK,
|
||||
msecs_to_jiffies(50)) == -ERESTARTSYS)
|
||||
mantis->mantis_int_stat & MANTIS_INT_I2CDONE,
|
||||
msecs_to_jiffies(50)) == -ERESTARTSYS) {
|
||||
|
||||
dprintk(verbose, MANTIS_DEBUG, 1, "I2C Transfer failed, Master !I2CDONE");
|
||||
rc = -EREMOTEIO;
|
||||
/*
|
||||
// Wait till we are done
|
||||
while (mantis->mantis_int_stat & MANTIS_INT_I2CRACK){
|
||||
if (mantis->mantis_int_stat & MANTIS_INT_I2CDONE) {
|
||||
mantis->mantis_int_stat &= ~MANTIS_INT_I2CRACK;
|
||||
// dprintk(verbose, MANTIS_DEBUG, 1, "SLAVE RACK 'ed .. Waiting for I2CDONE");
|
||||
}
|
||||
while (!(mantis->mantis_int_stat & MANTIS_INT_I2CRACK)) {
|
||||
dprintk(verbose, MANTIS_DEBUG, 1, "Waiting for Slave RACK");
|
||||
mantis->mantis_int_stat = mmread(MANTIS_INT_STAT);
|
||||
msleep(5);
|
||||
timeout++;
|
||||
if (timeout > 500) {
|
||||
dprintk(verbose, MANTIS_ERROR, 1, "Slave RACK Fail !");
|
||||
rc = -EREMOTEIO;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (mantis->mantis_int_stat & MANTIS_INT_I2CDONE) {
|
||||
// dprintk(verbose, MANTIS_DEBUG, 1, "Mantis Int I2CDONE");
|
||||
rc = 1;
|
||||
}
|
||||
|
||||
mantis->mantis_int_stat &= ~MANTIS_INT_I2CDONE;
|
||||
*/
|
||||
// ..
|
||||
if (mantis->mantis_int_stat & MANTIS_INT_I2CRACK)
|
||||
msleep_interruptible(10);
|
||||
udelay(350);
|
||||
|
||||
return rc;
|
||||
}
|
||||
@ -67,7 +62,7 @@ static int mantis_i2c_read(struct mantis_pci *mantis, const struct i2c_msg *msg)
|
||||
{
|
||||
u32 rxd, i;
|
||||
|
||||
dprintk(verbose, MANTIS_DEBUG, 1, "Address=[0x%02x]", msg->addr);
|
||||
dprintk(verbose, MANTIS_INFO, 0, " %s: Address=[0x%02x] <R>[ ", __func__, msg->addr);
|
||||
for (i = 0; i < msg->len; i++) {
|
||||
rxd = (msg->addr << 25) | (1 << 24)
|
||||
| MANTIS_I2C_RATE_3
|
||||
@ -77,18 +72,17 @@ static int mantis_i2c_read(struct mantis_pci *mantis, const struct i2c_msg *msg)
|
||||
if (i == (msg->len - 1))
|
||||
rxd &= ~MANTIS_I2C_STOP;
|
||||
|
||||
mmwrite(MANTIS_INT_I2CDONE, MANTIS_INT_STAT);
|
||||
mmwrite(rxd, MANTIS_I2CDATA_CTL);
|
||||
if (mantis_ack_wait(mantis) < 0) {
|
||||
if (mantis_ack_wait(mantis) != 0) {
|
||||
dprintk(verbose, MANTIS_DEBUG, 1, "ACK failed<R>");
|
||||
return -EIO;
|
||||
return -EREMOTEIO;
|
||||
}
|
||||
rxd = mmread(MANTIS_I2CDATA_CTL);
|
||||
msg->buf[i] = (u8)((rxd >> 8) & 0xFF);
|
||||
dprintk(verbose, MANTIS_DEBUG, 1,
|
||||
"Data<R[%d]>=[0x%02x]", i, msg->buf[i]);
|
||||
|
||||
msleep_interruptible(2);
|
||||
dprintk(verbose, MANTIS_INFO, 0, "%02x ", msg->buf[i]);
|
||||
}
|
||||
dprintk(verbose, MANTIS_INFO, 0, "]\n");
|
||||
|
||||
return 0;
|
||||
}
|
||||
@ -98,9 +92,9 @@ static int mantis_i2c_write(struct mantis_pci *mantis, const struct i2c_msg *msg
|
||||
int i;
|
||||
u32 txd = 0;
|
||||
|
||||
dprintk(verbose, MANTIS_DEBUG, 1, "Address=[0x%02x]", msg->addr);
|
||||
dprintk(verbose, MANTIS_INFO, 0, " %s: Address=[0x%02x] <W>[ ", __func__, msg->addr);
|
||||
for (i = 0; i < msg->len; i++) {
|
||||
dprintk(verbose, MANTIS_DEBUG, 1, "Data<W[%d]>=[0x%02x]", i, msg->buf[i]);
|
||||
dprintk(verbose, MANTIS_INFO, 0, "%02x ", msg->buf[i]);
|
||||
txd = (msg->addr << 25) | (msg->buf[i] << 8)
|
||||
| MANTIS_I2C_RATE_3
|
||||
| MANTIS_I2C_STOP
|
||||
@ -109,13 +103,14 @@ static int mantis_i2c_write(struct mantis_pci *mantis, const struct i2c_msg *msg
|
||||
if (i == (msg->len - 1))
|
||||
txd &= ~MANTIS_I2C_STOP;
|
||||
|
||||
mmwrite(MANTIS_INT_I2CDONE, MANTIS_INT_STAT);
|
||||
mmwrite(txd, MANTIS_I2CDATA_CTL);
|
||||
if (mantis_ack_wait(mantis) < 0) {
|
||||
if (mantis_ack_wait(mantis) != 0) {
|
||||
dprintk(verbose, MANTIS_DEBUG, 1, "ACK failed<W>");
|
||||
return -1;
|
||||
return -EREMOTEIO;
|
||||
}
|
||||
udelay(500);
|
||||
}
|
||||
dprintk(verbose, MANTIS_INFO, 0, "]\n");
|
||||
|
||||
return 0;
|
||||
}
|
||||
@ -159,7 +154,7 @@ static struct i2c_adapter mantis_i2c_adapter = {
|
||||
|
||||
int __devinit mantis_i2c_init(struct mantis_pci *mantis)
|
||||
{
|
||||
u32 intstat;
|
||||
u32 intstat, intmask;
|
||||
|
||||
memcpy(&mantis->adapter, &mantis_i2c_adapter, sizeof (mantis_i2c_adapter));
|
||||
i2c_set_adapdata(&mantis->adapter, mantis);
|
||||
@ -169,15 +164,12 @@ int __devinit mantis_i2c_init(struct mantis_pci *mantis)
|
||||
|
||||
dprintk(verbose, MANTIS_DEBUG, 1, "Initializing I2C ..");
|
||||
|
||||
// Clear all interrupts
|
||||
intstat = mmread(MANTIS_INT_STAT);
|
||||
intmask = mmread(MANTIS_INT_MASK);
|
||||
mmwrite(intstat, MANTIS_INT_STAT);
|
||||
mmwrite(intmask | MANTIS_INT_I2CDONE, MANTIS_INT_MASK);
|
||||
|
||||
mmwrite(mmread(MANTIS_INT_MASK) | MANTIS_INT_I2CDONE,
|
||||
MANTIS_INT_MASK);
|
||||
|
||||
dprintk(verbose, MANTIS_DEBUG, 1, "[0x%08x/%08x]",
|
||||
mmread(MANTIS_INT_STAT), mmread(MANTIS_INT_MASK));
|
||||
dprintk(verbose, MANTIS_DEBUG, 1, "[0x%08x/%08x]", intstat, intmask);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -52,7 +52,6 @@ MODULE_DEVICE_TABLE(pci, mantis_pci_table);
|
||||
|
||||
static irqreturn_t mantis_pci_irq(int irq, void *dev_id)
|
||||
{
|
||||
int i = 0, interrupts = 0;
|
||||
u32 stat = 0, mask = 0, lstat = 0, mstat = 0;
|
||||
struct mantis_pci *mantis;
|
||||
|
||||
@ -64,109 +63,67 @@ static irqreturn_t mantis_pci_irq(int irq, void *dev_id)
|
||||
stat = mmread(MANTIS_INT_STAT);
|
||||
mask = mmread(MANTIS_INT_MASK);
|
||||
mstat = lstat = stat & ~MANTIS_INT_RISCSTAT;
|
||||
|
||||
if (!(stat & mask)) {
|
||||
dprintk(verbose, MANTIS_DEBUG, 1, "Not ours !");
|
||||
if (!(stat & mask))
|
||||
return IRQ_NONE;
|
||||
|
||||
mantis->mantis_int_stat = stat;
|
||||
mantis->mantis_int_mask = mask;
|
||||
dprintk(verbose, MANTIS_DEBUG, 0, "=== Interrupts[%04x/%04x]= [", stat, mask);
|
||||
if (stat & MANTIS_INT_RISCEN) {
|
||||
dprintk(verbose, MANTIS_DEBUG, 0, "* DMA enabl *");
|
||||
}
|
||||
mmwrite(lstat, MANTIS_INT_STAT);
|
||||
interrupts = hweight32(stat);
|
||||
dprintk(verbose, MANTIS_DEBUG, 0, "=== Interrupts[%04x/%04x]=%d [", stat, mask, interrupts);
|
||||
|
||||
while (lstat) {
|
||||
if (lstat & MANTIS_INT_RISCEN) {
|
||||
dprintk(verbose, MANTIS_DEBUG, 0, "* DMA enabl *");
|
||||
lstat &= ~MANTIS_INT_RISCEN;
|
||||
|
||||
} else if (lstat & MANTIS_INT_I2CRACK) {
|
||||
dprintk(verbose, MANTIS_DEBUG, 0, "* I2C R-ACK *");
|
||||
mantis->mantis_int_stat = stat;
|
||||
mantis->mantis_int_mask = mask;
|
||||
wake_up(&mantis->i2c_wq);
|
||||
lstat &= ~MANTIS_INT_I2CRACK;
|
||||
|
||||
} else if (lstat & MANTIS_INT_PCMCIA7) {
|
||||
dprintk(verbose, MANTIS_DEBUG, 0, "* PCMCIA-07 *");
|
||||
lstat &= ~MANTIS_INT_PCMCIA7;
|
||||
|
||||
} else if (lstat & MANTIS_INT_PCMCIA6) {
|
||||
dprintk(verbose, MANTIS_DEBUG, 0, "* PCMCIA-06 *");
|
||||
lstat &= ~MANTIS_INT_PCMCIA6;
|
||||
|
||||
} else if (lstat & MANTIS_INT_PCMCIA5) {
|
||||
dprintk(verbose, MANTIS_DEBUG, 0, "* PCMCIA-05 *");
|
||||
lstat &= ~MANTIS_INT_PCMCIA5;
|
||||
|
||||
} else if (lstat & MANTIS_INT_PCMCIA4) {
|
||||
dprintk(verbose, MANTIS_DEBUG, 0, "* PCMCIA-04 *");
|
||||
lstat &= ~MANTIS_INT_PCMCIA4;
|
||||
|
||||
} else if (lstat & MANTIS_INT_PCMCIA3) {
|
||||
dprintk(verbose, MANTIS_DEBUG, 0, "* PCMCIA-03 *");
|
||||
lstat &= ~MANTIS_INT_PCMCIA3;
|
||||
|
||||
} else if (lstat & MANTIS_INT_PCMCIA2) {
|
||||
dprintk(verbose, MANTIS_DEBUG, 0, "* PCMCIA-02 *");
|
||||
lstat &= ~MANTIS_INT_PCMCIA2;
|
||||
|
||||
} else if (lstat & MANTIS_INT_PCMCIA1) {
|
||||
dprintk(verbose, MANTIS_DEBUG, 0, "* PCMCIA-01 *");
|
||||
lstat &= ~MANTIS_INT_PCMCIA1;
|
||||
|
||||
} else if (lstat & MANTIS_INT_PCMCIA0) {
|
||||
dprintk(verbose, MANTIS_DEBUG, 0, "* PCMCIA-00 *");
|
||||
lstat &= ~MANTIS_INT_PCMCIA0;
|
||||
|
||||
} else if (lstat & MANTIS_INT_IRQ0) {
|
||||
dprintk(verbose, MANTIS_DEBUG, 0, "* INT IRQ-0 *");
|
||||
lstat &= ~MANTIS_INT_IRQ0;
|
||||
|
||||
} else if (lstat & MANTIS_INT_IRQ1) {
|
||||
dprintk(verbose, MANTIS_DEBUG, 0, "* INT IRQ-1 *");
|
||||
lstat &= ~MANTIS_INT_IRQ1;
|
||||
|
||||
} else if (lstat & MANTIS_INT_OCERR) {
|
||||
dprintk(verbose, MANTIS_DEBUG, 0, "* INT OCERR *");
|
||||
lstat &= ~MANTIS_INT_OCERR;
|
||||
|
||||
} else if (lstat & MANTIS_INT_PABORT) {
|
||||
dprintk(verbose, MANTIS_DEBUG, 0, "* INT PABRT *");
|
||||
lstat &= ~MANTIS_INT_PABORT;
|
||||
|
||||
} else if (lstat & MANTIS_INT_RIPERR) {
|
||||
dprintk(verbose, MANTIS_DEBUG, 0, "* INT RIPRR *");
|
||||
lstat &= ~MANTIS_INT_RIPERR;
|
||||
|
||||
} else if (lstat & MANTIS_INT_PPERR) {
|
||||
dprintk(verbose, MANTIS_DEBUG, 0, "* INT PPERR *");
|
||||
lstat &= ~MANTIS_INT_PPERR;
|
||||
|
||||
} else if (lstat & MANTIS_INT_FTRGT) {
|
||||
dprintk(verbose, MANTIS_DEBUG, 0, "* INT FTRGT *");
|
||||
lstat &= ~MANTIS_INT_FTRGT;
|
||||
|
||||
} else if (lstat & MANTIS_INT_RISCI) {
|
||||
dprintk(verbose, MANTIS_DEBUG, 0, "* INT RISCI *");
|
||||
mantis->finished_block = (stat & MANTIS_INT_RISCSTAT) >> 28;
|
||||
tasklet_schedule(&mantis->tasklet);
|
||||
lstat &= ~MANTIS_INT_RISCI;
|
||||
|
||||
} else if (lstat & MANTIS_INT_I2CDONE) {
|
||||
dprintk(verbose, MANTIS_DEBUG, 0, "* I2C DONE *");
|
||||
mantis->mantis_int_stat = stat;
|
||||
mantis->mantis_int_mask = mask;
|
||||
lstat &= ~MANTIS_INT_I2CDONE;
|
||||
} else {
|
||||
dprintk(verbose, MANTIS_DEBUG, 0,
|
||||
"* Unknown [%04x/%04x] *", stat, mask);
|
||||
break;
|
||||
}
|
||||
i++;
|
||||
if (i > interrupts) {
|
||||
dprintk(verbose, MANTIS_ERROR, 1, "going Loopy ! -- BREAK --");
|
||||
break;
|
||||
}
|
||||
if (stat & MANTIS_INT_I2CRACK) {
|
||||
dprintk(verbose, MANTIS_DEBUG, 0, "* I2C R-ACK *");
|
||||
// wake_up(&mantis->i2c_wq);
|
||||
}
|
||||
if (stat & MANTIS_INT_PCMCIA7) {
|
||||
dprintk(verbose, MANTIS_DEBUG, 0, "* PCMCIA-07 *");
|
||||
}
|
||||
if (stat & MANTIS_INT_IRQ0) {
|
||||
dprintk(verbose, MANTIS_DEBUG, 0, "* INT IRQ-0 *");
|
||||
}
|
||||
if (stat & MANTIS_INT_IRQ1) {
|
||||
dprintk(verbose, MANTIS_DEBUG, 0, "* INT IRQ-1 *");
|
||||
}
|
||||
if (stat & MANTIS_INT_OCERR) {
|
||||
dprintk(verbose, MANTIS_DEBUG, 0, "* INT OCERR *");
|
||||
}
|
||||
if (stat & MANTIS_INT_PABORT) {
|
||||
dprintk(verbose, MANTIS_DEBUG, 0, "* INT PABRT *");
|
||||
}
|
||||
if (stat & MANTIS_INT_RIPERR) {
|
||||
dprintk(verbose, MANTIS_DEBUG, 0, "* INT RIPRR *");
|
||||
}
|
||||
if (stat & MANTIS_INT_PPERR) {
|
||||
dprintk(verbose, MANTIS_DEBUG, 0, "* INT PPERR *");
|
||||
}
|
||||
if (stat & MANTIS_INT_FTRGT) {
|
||||
dprintk(verbose, MANTIS_DEBUG, 0, "* INT FTRGT *");
|
||||
}
|
||||
if (stat & MANTIS_INT_RISCI) {
|
||||
dprintk(verbose, MANTIS_DEBUG, 0, "* INT RISCI *");
|
||||
mantis->finished_block = (stat & MANTIS_INT_RISCSTAT) >> 28;
|
||||
tasklet_schedule(&mantis->tasklet);
|
||||
}
|
||||
if (stat & MANTIS_INT_I2CDONE) {
|
||||
dprintk(verbose, MANTIS_DEBUG, 0, "* I2C DONE *");
|
||||
wake_up(&mantis->i2c_wq);
|
||||
}
|
||||
mmwrite(stat, MANTIS_INT_STAT);
|
||||
stat &= ~(MANTIS_INT_RISCEN | MANTIS_INT_I2CDONE |
|
||||
MANTIS_INT_I2CRACK | MANTIS_INT_PCMCIA7 |
|
||||
MANTIS_INT_PCMCIA6 | MANTIS_INT_PCMCIA5 |
|
||||
MANTIS_INT_PCMCIA4 | MANTIS_INT_PCMCIA3 |
|
||||
MANTIS_INT_PCMCIA2 | MANTIS_INT_PCMCIA1 |
|
||||
MANTIS_INT_PCMCIA0 | MANTIS_INT_IRQ1 |
|
||||
MANTIS_INT_IRQ0 | MANTIS_INT_OCERR |
|
||||
MANTIS_INT_PABORT | MANTIS_INT_RIPERR |
|
||||
MANTIS_INT_PPERR | MANTIS_INT_FTRGT |
|
||||
MANTIS_INT_RISCI);
|
||||
|
||||
if (stat)
|
||||
dprintk(verbose, MANTIS_DEBUG, 0, "* Unknown [%04x] *", stat);
|
||||
|
||||
dprintk(verbose, MANTIS_DEBUG, 0, "] ===\n");
|
||||
|
||||
return IRQ_HANDLED;
|
||||
@ -180,8 +137,6 @@ static int __devinit mantis_pci_probe(struct pci_dev *pdev,
|
||||
struct mantis_pci *mantis;
|
||||
int ret = 0;
|
||||
|
||||
devs++;
|
||||
|
||||
mantis = kmalloc(sizeof (struct mantis_pci), GFP_KERNEL);
|
||||
if (mantis == NULL) {
|
||||
printk("%s: Out of memory\n", __func__);
|
||||
@ -190,6 +145,8 @@ static int __devinit mantis_pci_probe(struct pci_dev *pdev,
|
||||
}
|
||||
memset(mantis, 0, sizeof (struct mantis_pci));
|
||||
mantis->num = devs;
|
||||
devs++;
|
||||
|
||||
if (pci_enable_device(pdev)) {
|
||||
dprintk(verbose, MANTIS_ERROR, 1, "Mantis PCI enable failed");
|
||||
ret = -ENODEV;
|
||||
@ -225,11 +182,13 @@ static int __devinit mantis_pci_probe(struct pci_dev *pdev,
|
||||
mantis->latency = latency;
|
||||
mantis->revision = revision;
|
||||
mantis->pdev = pdev;
|
||||
mantis->subsystem_vendor = pdev->subsystem_vendor;
|
||||
mantis->subsystem_device = pdev->subsystem_device;
|
||||
init_waitqueue_head(&mantis->i2c_wq);
|
||||
|
||||
// CAM bypass
|
||||
//mmwrite(mmread(MANTIS_INT_MASK) | MANTIS_INT_IRQ1, MANTIS_INT_MASK);
|
||||
dprintk(verbose, MANTIS_INFO, 1, "gpif status: %04x irqcfg: %04x", mmread(0x9c), mmread(0x98));
|
||||
dprintk(verbose, MANTIS_INFO, 0, "\ngpif status: %04x irqcfg: %04x\n", mmread(0x9c), mmread(0x98));
|
||||
if ((mmread(0x9c) & 0x200) != 0) { //CAM inserted
|
||||
msleep_interruptible(1);
|
||||
if ((mmread(0x9c) & 0x200) != 0)
|
||||
@ -242,11 +201,8 @@ static int __devinit mantis_pci_probe(struct pci_dev *pdev,
|
||||
}
|
||||
mantis_set_direction(mantis, 0);
|
||||
|
||||
// default latency if none specified
|
||||
if (!latency)
|
||||
pci_write_config_byte(pdev, PCI_LATENCY_TIMER, 32);
|
||||
dprintk(verbose, MANTIS_ERROR, 0, "Mantis Rev %d, ",
|
||||
mantis->revision);
|
||||
|
||||
dprintk(verbose, MANTIS_ERROR, 0,
|
||||
"irq: %d, latency: %d\n memory: 0x%lx, mmio: 0x%p\n",
|
||||
|
@ -81,6 +81,14 @@ struct stv0299_config lgtdqcs001f_config = {
|
||||
// .pll_set = lgtdqcs001f_pll_set,
|
||||
};
|
||||
|
||||
#define MANTIS_MODEL_NAME "VP-1033"
|
||||
#define MANTIS_DEV_TYPE "DVB-S/DSS"
|
||||
|
||||
struct mantis_hwconfig vp1033_mantis_config = {
|
||||
.model_name = MANTIS_MODEL_NAME,
|
||||
.dev_type = MANTIS_DEV_TYPE,
|
||||
};
|
||||
|
||||
int lgtdqcs001f_tuner_set(struct dvb_frontend *fe,
|
||||
struct dvb_frontend_parameters *params)
|
||||
{
|
||||
|
@ -21,10 +21,14 @@
|
||||
#ifndef __MANTIS_VP1033_H
|
||||
#define __MANTIS_VP1033_H
|
||||
|
||||
#include "stv0299.h"
|
||||
#include "dvb_frontend.h"
|
||||
#include "mantis_common.h"
|
||||
#include "stv0299.h"
|
||||
|
||||
#define MANTIS_VP_1033_DVB_S 0x0016
|
||||
|
||||
extern struct stv0299_config lgtdqcs001f_config;
|
||||
extern struct mantis_hwconfig vp1033_mantis_config;
|
||||
|
||||
extern int lgtdqcs001f_tuner_set(struct dvb_frontend *fe,
|
||||
struct dvb_frontend_parameters *params);
|
||||
|
@ -26,6 +26,14 @@ struct mb86a16_config vp1034_config = {
|
||||
.set_voltage = vp1034_set_voltage,
|
||||
};
|
||||
|
||||
#define MANTIS_MODEL_NAME "VP-1034"
|
||||
#define MANTIS_DEV_TYPE "DVB-S/DSS"
|
||||
|
||||
struct mantis_hwconfig vp1034_mantis_config = {
|
||||
.model_name = MANTIS_MODEL_NAME,
|
||||
.dev_type = MANTIS_DEV_TYPE,
|
||||
};
|
||||
|
||||
int vp1034_set_voltage(struct dvb_frontend *fe, fe_sec_voltage_t voltage)
|
||||
{
|
||||
struct mantis_pci *mantis = fe->dvb->priv;
|
||||
|
@ -21,9 +21,14 @@
|
||||
#ifndef __MANTIS_VP1034_H
|
||||
#define __MANTIS_VP1034_H
|
||||
|
||||
#include "mb86a16.h"
|
||||
#include "dvb_frontend.h"
|
||||
#include "mantis_common.h"
|
||||
#include "mb86a16.h"
|
||||
|
||||
|
||||
#define MANTIS_VP_1034_DVB_S 0x0014
|
||||
|
||||
extern struct mantis_hwconfig vp1034_mantis_config;
|
||||
extern struct mb86a16_config vp1034_config;
|
||||
extern int vp1034_set_voltage(struct dvb_frontend *fe, fe_sec_voltage_t voltage);
|
||||
|
||||
|
@ -32,9 +32,17 @@ struct tda10021_state {
|
||||
u8 reg0;
|
||||
};
|
||||
|
||||
#define MANTIS_MODEL_NAME "VP-2033"
|
||||
#define MANTIS_DEV_TYPE "DVB-C"
|
||||
|
||||
struct mantis_hwconfig vp2033_mantis_config = {
|
||||
.model_name = MANTIS_MODEL_NAME,
|
||||
.dev_type = MANTIS_DEV_TYPE,
|
||||
};
|
||||
|
||||
struct cu1216_config philips_cu1216_config = {
|
||||
.demod_address = 0x18 >> 1,
|
||||
.pll_set = philips_cu1216_tuner_set,
|
||||
.demod_address = 0x18 >> 1,
|
||||
.pll_set = philips_cu1216_tuner_set,
|
||||
// .fe_reset = mantis_fe_reset,
|
||||
};
|
||||
|
||||
@ -47,10 +55,10 @@ int philips_cu1216_tuner_set(struct dvb_frontend *fe,
|
||||
u8 buf[4];
|
||||
|
||||
struct i2c_msg msg = {
|
||||
.addr = 0xc0 >> 1,
|
||||
.flags = 0,
|
||||
.buf = buf,
|
||||
.len = sizeof (buf)
|
||||
.addr = 0xc0 >> 1,
|
||||
.flags = 0,
|
||||
.buf = buf,
|
||||
.len = sizeof (buf)
|
||||
};
|
||||
|
||||
#define TUNER_MUL 62500
|
||||
|
@ -21,10 +21,14 @@
|
||||
#ifndef __MANTIS_VP2033_H
|
||||
#define __MANTIS_VP2033_H
|
||||
|
||||
#include "cu1216.h"
|
||||
#include "dvb_frontend.h"
|
||||
#include "mantis_common.h"
|
||||
#include "cu1216.h"
|
||||
|
||||
#define MANTIS_VP_2033_DVB_C 0x0008
|
||||
|
||||
extern struct cu1216_config philips_cu1216_config;
|
||||
extern struct mantis_hwconfig vp2033_mantis_config;
|
||||
|
||||
extern int philips_cu1216_tuner_set(struct dvb_frontend *fe,
|
||||
struct dvb_frontend_parameters *params);
|
||||
|
@ -22,7 +22,15 @@
|
||||
#include "mantis_vp3030.h"
|
||||
|
||||
struct zl10353_config mantis_vp3030_config = {
|
||||
.demod_address = 0x0f,
|
||||
.demod_address = 0x0f,
|
||||
};
|
||||
|
||||
#define MANTIS_MODEL_NAME "VP-3030"
|
||||
#define MANTIS_DEV_TYPE "DVB-T"
|
||||
|
||||
struct mantis_hwconfig vp3030_mantis_config = {
|
||||
.model_name = MANTIS_MODEL_NAME,
|
||||
.dev_type = MANTIS_DEV_TYPE,
|
||||
};
|
||||
|
||||
int panasonic_en57h12d5_set_params(struct dvb_frontend *fe,
|
||||
|
@ -21,10 +21,14 @@
|
||||
#ifndef __MANTIS_VP3030_H
|
||||
#define __MANTIS_VP3030_H
|
||||
|
||||
#include "zl10353.h"
|
||||
#include "dvb-pll.h"
|
||||
#include "dvb_frontend.h"
|
||||
#include "mantis_common.h"
|
||||
#include "dvb-pll.h"
|
||||
#include "zl10353.h"
|
||||
|
||||
#define MANTIS_VP_3030_DVB_T 0x0024
|
||||
|
||||
extern struct zl10353_config mantis_vp3030_config;
|
||||
extern struct mantis_hwconfig vp3030_mantis_config;
|
||||
|
||||
#endif // __MANTIS_VP3030_H
|
||||
|
Loading…
Reference in New Issue
Block a user