45
45
module_param(one_adapter, int, 0444);
46
46
MODULE_PARM_DESC(one_adapter, "Use only one adapter.");
48
static int shutdown_workaround;
49
module_param(shutdown_workaround, int, 0644);
50
MODULE_PARM_DESC(shutdown_workaround, "Activate workaround for shutdown problem with some chipsets.");
50
53
module_param(debug, int, 0444);
119
122
Cur->ngeneBuffer.SR.Flags &=
122
/* Stop proccessing stream */
125
/* Stop processing stream */
125
128
/* We got a valid buffer,
130
133
printk(KERN_ERR DEVICE_NAME ": OOPS\n");
131
134
if (chan->HWState == HWSTATE_RUN) {
132
135
Cur->ngeneBuffer.SR.Flags &= ~0x40;
133
break; /* Stop proccessing stream */
136
break; /* Stop processing stream */
136
139
if (chan->AudioDTOUpdated) {
145
148
if (chan->HWState == HWSTATE_RUN) {
149
u32 Flags = chan->DataFormatFlags;
147
150
IBufferExchange *exch1 = chan->pBufferExchange;
148
151
IBufferExchange *exch2 = chan->pBufferExchange2;
149
152
if (Cur->ngeneBuffer.SR.Flags & 0x01)
475
478
/* Set NGENE I2S Config to transport stream compatible mode */
477
static u8 TS_I2SConfiguration[4] = { 0x3E, 0x1A, 0x00, 0x00 }; /*3e 18 00 00 ?*/
480
static u8 TS_I2SConfiguration[4] = { 0x3E, 0x18, 0x00, 0x00 };
479
static u8 TS_I2SOutConfiguration[4] = { 0x80, 0x20, 0x00, 0x00 };
482
static u8 TS_I2SOutConfiguration[4] = { 0x80, 0x04, 0x00, 0x00 };
481
484
static u8 ITUDecoderSetup[4][16] = {
482
485
{0x1c, 0x13, 0x01, 0x68, 0x3d, 0x90, 0x14, 0x20, /* SDTV */
749
752
if (chan->mode & NGENE_IO_TSOUT) {
750
753
chan->pBufferExchange = tsout_exchange;
751
754
/* 0x66666666 = 50MHz *2^33 /250MHz */
752
chan->AudioDTOValue = 0x66666666;
753
/* set_dto(chan, 38810700+1000); */
754
/* set_dto(chan, 19392658); */
755
chan->AudioDTOValue = 0x80000000;
756
chan->AudioDTOUpdated = 1;
756
758
if (chan->mode & NGENE_IO_TSIN)
757
759
chan->pBufferExchange = tsin_exchange;
758
/* ngwritel(0, 0x9310); */
759
760
spin_unlock_irq(&chan->state_lock);
761
762
;/* printk(KERN_INFO DEVICE_NAME ": lock=%08x\n",
1184
1186
dvb_ringbuffer_init(&dev->tsout_rbuf,
1185
1187
dev->tsout_buf, TSOUT_BUF_SIZE);
1189
if (dev->card_info->io_type[2]&NGENE_IO_TSIN) {
1190
dev->tsin_buf = vmalloc(TSIN_BUF_SIZE);
1193
dvb_ringbuffer_init(&dev->tsin_rbuf,
1194
dev->tsin_buf, TSIN_BUF_SIZE);
1187
1196
if (dev->card_info->io_type[2] & NGENE_IO_AIN) {
1188
1197
dev->ain_buf = vmalloc(AIN_BUF_SIZE);
1189
1198
if (!dev->ain_buf)
1319
static int ngene_buffer_config(struct ngene *dev)
1323
if (dev->card_info->fw_version >= 17) {
1324
u8 tsin12_config[6] = { 0x60, 0x60, 0x00, 0x00, 0x00, 0x00 };
1325
u8 tsin1234_config[6] = { 0x30, 0x30, 0x00, 0x30, 0x30, 0x00 };
1326
u8 tsio1235_config[6] = { 0x30, 0x30, 0x00, 0x28, 0x00, 0x38 };
1327
u8 *bconf = tsin12_config;
1329
if (dev->card_info->io_type[2]&NGENE_IO_TSIN &&
1330
dev->card_info->io_type[3]&NGENE_IO_TSIN) {
1331
bconf = tsin1234_config;
1332
if (dev->card_info->io_type[4]&NGENE_IO_TSOUT &&
1334
bconf = tsio1235_config;
1336
stat = ngene_command_config_free_buf(dev, bconf);
1338
int bconf = BUFFER_CONFIG_4422;
1340
if (dev->card_info->io_type[3] == NGENE_IO_TSIN)
1341
bconf = BUFFER_CONFIG_3333;
1342
stat = ngene_command_config_buf(dev, bconf);
1304
1348
static int ngene_start(struct ngene *dev)
1368
if (dev->card_info->fw_version == 17) {
1369
u8 tsin4_config[6] = {
1370
3072 / 64, 3072 / 64, 0, 3072 / 64, 3072 / 64, 0};
1371
u8 default_config[6] = {
1372
4096 / 64, 4096 / 64, 0, 2048 / 64, 2048 / 64, 0};
1373
u8 *bconf = default_config;
1375
if (dev->card_info->io_type[3] == NGENE_IO_TSIN)
1376
bconf = tsin4_config;
1377
dprintk(KERN_DEBUG DEVICE_NAME ": FW 17 buffer config\n");
1378
stat = ngene_command_config_free_buf(dev, bconf);
1380
int bconf = BUFFER_CONFIG_4422;
1381
if (dev->card_info->io_type[3] == NGENE_IO_TSIN)
1382
bconf = BUFFER_CONFIG_3333;
1383
stat = ngene_command_config_buf(dev, bconf);
1409
1433
struct dvb_demux *dvbdemux = &chan->demux;
1410
1434
struct ngene *dev = chan->dev;
1411
struct ngene_info *ni = dev->card_info;
1412
int io = ni->io_type[chan->number];
1414
if (chan->dev->cmd_timeout_workaround && chan->running)
1415
1437
set_transfer(chan, 0);
1417
1439
tasklet_kill(&chan->demux_tasklet);
1419
if (io & (NGENE_IO_TSIN | NGENE_IO_TSOUT)) {
1421
dvb_unregister_frontend(chan->fe);
1422
dvb_frontend_detach(chan->fe);
1442
dvb_unregister_device(chan->ci_dev);
1443
chan->ci_dev = NULL;
1447
dvb_unregister_frontend(chan->fe);
1448
dvb_frontend_detach(chan->fe);
1452
if (chan->has_demux) {
1453
dvb_net_release(&chan->dvbnet);
1425
1454
dvbdemux->dmx.close(&dvbdemux->dmx);
1426
1455
dvbdemux->dmx.remove_frontend(&dvbdemux->dmx,
1427
1456
&chan->hw_frontend);
1429
1458
&chan->mem_frontend);
1430
1459
dvb_dmxdev_release(&chan->dmxdev);
1431
1460
dvb_dmx_release(&chan->demux);
1461
chan->has_demux = false;
1433
if (chan->number == 0 || !one_adapter)
1434
dvb_unregister_adapter(&dev->adapter[chan->number]);
1464
if (chan->has_adapter) {
1465
dvb_unregister_adapter(&dev->adapter[chan->number]);
1466
chan->has_adapter = false;
1449
1481
chan->type = io;
1450
1482
chan->mode = chan->type; /* for now only one mode */
1484
if (io & NGENE_IO_TSIN) {
1486
if (ni->demod_attach[nr]) {
1487
ret = ni->demod_attach[nr](chan);
1491
if (chan->fe && ni->tuner_attach[nr]) {
1492
ret = ni->tuner_attach[nr](chan);
1498
if (!dev->ci.en && (io & NGENE_IO_TSOUT))
1452
1501
if (io & (NGENE_IO_TSIN | NGENE_IO_TSOUT)) {
1453
1502
if (nr >= STREAM_AUDIOIN1)
1454
1503
chan->DataFormatFlags = DF_SWAP32;
1455
1505
if (nr == 0 || !one_adapter || dev->first_adapter == NULL) {
1456
1506
adapter = &dev->adapter[nr];
1457
1507
ret = dvb_register_adapter(adapter, "nGene",
1459
1509
&chan->dev->pci_dev->dev,
1463
1513
if (dev->first_adapter == NULL)
1464
1514
dev->first_adapter = adapter;
1515
chan->has_adapter = true;
1466
1517
adapter = dev->first_adapter;
1520
if (dev->ci.en && (io & NGENE_IO_TSOUT)) {
1521
dvb_ca_en50221_init(adapter, dev->ci.en, 0, 1);
1522
set_transfer(chan, 1);
1523
chan->dev->channel[2].DataFormatFlags = DF_SWAP32;
1524
set_transfer(&chan->dev->channel[2], 1);
1525
dvb_register_device(adapter, &chan->ci_dev,
1526
&ngene_dvbdev_ci, (void *) chan,
1533
if (dvb_register_frontend(adapter, chan->fe) < 0)
1535
chan->has_demux = true;
1538
if (chan->has_demux) {
1469
1539
ret = my_dvb_dmx_ts_card_init(dvbdemux, "SW demux",
1470
1540
ngene_start_feed,
1471
1541
ngene_stop_feed, chan);
1472
1542
ret = my_dvb_dmxdev_ts_card_init(&chan->dmxdev, &chan->demux,
1473
1543
&chan->hw_frontend,
1474
1544
&chan->mem_frontend, adapter);
1545
ret = dvb_net_init(adapter, &chan->dvbnet, &chan->demux.dmx);
1477
if (io & NGENE_IO_TSIN) {
1479
if (ni->demod_attach[nr])
1480
ni->demod_attach[nr](chan);
1482
if (dvb_register_frontend(adapter, chan->fe) < 0) {
1483
if (chan->fe->ops.release)
1484
chan->fe->ops.release(chan->fe);
1488
if (chan->fe && ni->tuner_attach[nr])
1489
if (ni->tuner_attach[nr] (chan) < 0) {
1490
printk(KERN_ERR DEVICE_NAME
1491
": Tuner attach failed on channel %d!\n",
1552
dvb_frontend_detach(chan->fe);
1555
release_channel(chan);
1498
1559
static int init_channels(struct ngene *dev)
1574
static void cxd_attach(struct ngene *dev)
1576
struct ngene_ci *ci = &dev->ci;
1578
ci->en = cxd2099_attach(0x40, dev, &dev->channel[0].i2c_adapter);
1583
static void cxd_detach(struct ngene *dev)
1585
struct ngene_ci *ci = &dev->ci;
1587
dvb_ca_en50221_release(ci->en);
1592
/***********************************/
1593
/* workaround for shutdown failure */
1594
/***********************************/
1596
static void ngene_unlink(struct ngene *dev)
1598
struct ngene_command com;
1600
com.cmd.hdr.Opcode = CMD_MEM_WRITE;
1601
com.cmd.hdr.Length = 3;
1602
com.cmd.MemoryWrite.address = 0x910c;
1603
com.cmd.MemoryWrite.data = 0xff;
1607
down(&dev->cmd_mutex);
1608
ngwritel(0, NGENE_INT_ENABLE);
1609
ngene_command_mutex(dev, &com);
1610
up(&dev->cmd_mutex);
1613
void ngene_shutdown(struct pci_dev *pdev)
1615
struct ngene *dev = (struct ngene *)pci_get_drvdata(pdev);
1617
if (!dev || !shutdown_workaround)
1620
printk(KERN_INFO DEVICE_NAME ": shutdown workaround...\n");
1622
pci_disable_device(pdev);
1513
1625
/****************************************************************************/
1514
1626
/* device probe/remove calls ************************************************/
1515
1627
/****************************************************************************/
1522
1634
tasklet_kill(&dev->event_tasklet);
1523
1635
for (i = MAX_STREAM - 1; i >= 0; i--)
1524
1636
release_channel(&dev->channel[i]);
1525
1639
ngene_stop(dev);
1526
1640
ngene_release_buffers(dev);
1527
1641
pci_set_drvdata(pdev, NULL);