Merge branch 'omap-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tmlind...
[pandora-kernel.git] / drivers / media / dvb / ngene / ngene-core.c
index fedd341..c8b4dfa 100644 (file)
@@ -34,7 +34,6 @@
 #include <linux/io.h>
 #include <asm/div64.h>
 #include <linux/pci.h>
-#include <linux/pci_ids.h>
 #include <linux/smp_lock.h>
 #include <linux/timer.h>
 #include <linux/byteorder/generic.h>
 
 #include "ngene.h"
 
-#include "stv6110x.h"
-#include "stv090x.h"
-#include "lnbh24.h"
-#include "lgdt330x.h"
-#include "mt2131.h"
-
 static int one_adapter = 1;
 module_param(one_adapter, int, 0444);
 MODULE_PARM_DESC(one_adapter, "Use only one adapter.");
@@ -64,8 +57,6 @@ DVB_DEFINE_MOD_OPT_ADAPTER_NR(adapter_nr);
 
 #define dprintk        if (debug) printk
 
-#define DEVICE_NAME "ngene"
-
 #define ngwriteb(dat, adr)         writeb((dat), (char *)(dev->iomem + (adr)))
 #define ngwritel(dat, adr)         writel((dat), (char *)(dev->iomem + (adr)))
 #define ngwriteb(dat, adr)         writeb((dat), (char *)(dev->iomem + (adr)))
@@ -512,7 +503,7 @@ static u8 ITUFeatureDecoderSetup[8] = {
        0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x04, 0x00
 };
 
-static void FillTSBuffer(void *Buffer, int Length, u32 Flags)
+void FillTSBuffer(void *Buffer, int Length, u32 Flags)
 {
        u32 *ptr = Buffer;
 
@@ -725,62 +716,7 @@ static int ngene_command_stream_control(struct ngene *dev, u8 stream,
        return 0;
 }
 
-
-/****************************************************************************/
-/* EEPROM TAGS **************************************************************/
-/****************************************************************************/
-
-/****************************************************************************/
-/* DVB functions and API interface ******************************************/
-/****************************************************************************/
-
-static void swap_buffer(u32 *p, u32 len)
-{
-       while (len) {
-               *p = swab32(*p);
-               p++;
-               len -= 4;
-       }
-}
-
-
-static void *tsin_exchange(void *priv, void *buf, u32 len, u32 clock, u32 flags)
-{
-       struct ngene_channel *chan = priv;
-
-
-#ifdef COMMAND_TIMEOUT_WORKAROUND
-       if (chan->users > 0)
-#endif
-               dvb_dmx_swfilter(&chan->demux, buf, len);
-       return NULL;
-}
-
-u8 fill_ts[188] = { 0x47, 0x1f, 0xff, 0x10 };
-
-static void *tsout_exchange(void *priv, void *buf, u32 len,
-                           u32 clock, u32 flags)
-{
-       struct ngene_channel *chan = priv;
-       struct ngene *dev = chan->dev;
-       u32 alen;
-
-       alen = dvb_ringbuffer_avail(&dev->tsout_rbuf);
-       alen -= alen % 188;
-
-       if (alen < len)
-               FillTSBuffer(buf + alen, len - alen, flags);
-       else
-               alen = len;
-       dvb_ringbuffer_read(&dev->tsout_rbuf, buf, alen);
-       if (flags & DF_SWAP32)
-               swap_buffer((u32 *)buf, alen);
-       wake_up_interruptible(&dev->tsout_rbuf.queue);
-       return buf;
-}
-
-
-static void set_transfer(struct ngene_channel *chan, int state)
+void set_transfer(struct ngene_channel *chan, int state)
 {
        u8 control = 0, mode = 0, flags = 0;
        struct ngene *dev = chan->dev;
@@ -847,79 +783,6 @@ static void set_transfer(struct ngene_channel *chan, int state)
        }
 }
 
-static int ngene_start_feed(struct dvb_demux_feed *dvbdmxfeed)
-{
-       struct dvb_demux *dvbdmx = dvbdmxfeed->demux;
-       struct ngene_channel *chan = dvbdmx->priv;
-
-       if (chan->users == 0) {
-#ifdef COMMAND_TIMEOUT_WORKAROUND
-               if (!chan->running)
-#endif
-                       set_transfer(chan, 1);
-               /* msleep(10); */
-       }
-
-       return ++chan->users;
-}
-
-static int ngene_stop_feed(struct dvb_demux_feed *dvbdmxfeed)
-{
-       struct dvb_demux *dvbdmx = dvbdmxfeed->demux;
-       struct ngene_channel *chan = dvbdmx->priv;
-
-       if (--chan->users)
-               return chan->users;
-
-#ifndef COMMAND_TIMEOUT_WORKAROUND
-       set_transfer(chan, 0);
-#endif
-
-       return 0;
-}
-
-
-
-static int my_dvb_dmx_ts_card_init(struct dvb_demux *dvbdemux, char *id,
-                                  int (*start_feed)(struct dvb_demux_feed *),
-                                  int (*stop_feed)(struct dvb_demux_feed *),
-                                  void *priv)
-{
-       dvbdemux->priv = priv;
-
-       dvbdemux->filternum = 256;
-       dvbdemux->feednum = 256;
-       dvbdemux->start_feed = start_feed;
-       dvbdemux->stop_feed = stop_feed;
-       dvbdemux->write_to_decoder = NULL;
-       dvbdemux->dmx.capabilities = (DMX_TS_FILTERING |
-                                     DMX_SECTION_FILTERING |
-                                     DMX_MEMORY_BASED_FILTERING);
-       return dvb_dmx_init(dvbdemux);
-}
-
-static int my_dvb_dmxdev_ts_card_init(struct dmxdev *dmxdev,
-                                     struct dvb_demux *dvbdemux,
-                                     struct dmx_frontend *hw_frontend,
-                                     struct dmx_frontend *mem_frontend,
-                                     struct dvb_adapter *dvb_adapter)
-{
-       int ret;
-
-       dmxdev->filternum = 256;
-       dmxdev->demux = &dvbdemux->dmx;
-       dmxdev->capabilities = 0;
-       ret = dvb_dmxdev_init(dmxdev, dvb_adapter);
-       if (ret < 0)
-               return ret;
-
-       hw_frontend->source = DMX_FRONTEND_0;
-       dvbdemux->dmx.add_frontend(&dvbdemux->dmx, hw_frontend);
-       mem_frontend->source = DMX_MEMORY_FE;
-       dvbdemux->dmx.add_frontend(&dvbdemux->dmx, mem_frontend);
-       return dvbdemux->dmx.connect_frontend(&dvbdemux->dmx, hw_frontend);
-}
-
 
 /****************************************************************************/
 /* nGene hardware init and release functions ********************************/
@@ -1504,97 +1367,6 @@ fail:
 
 
 
-/****************************************************************************/
-/* Switch control (I2C gates, etc.) *****************************************/
-/****************************************************************************/
-
-
-/****************************************************************************/
-/* Demod/tuner attachment ***************************************************/
-/****************************************************************************/
-
-static int tuner_attach_stv6110(struct ngene_channel *chan)
-{
-       struct stv090x_config *feconf = (struct stv090x_config *)
-               chan->dev->card_info->fe_config[chan->number];
-       struct stv6110x_config *tunerconf = (struct stv6110x_config *)
-               chan->dev->card_info->tuner_config[chan->number];
-       struct stv6110x_devctl *ctl;
-
-       ctl = dvb_attach(stv6110x_attach, chan->fe, tunerconf,
-                        &chan->i2c_adapter);
-       if (ctl == NULL) {
-               printk(KERN_ERR DEVICE_NAME ": No STV6110X found!\n");
-               return -ENODEV;
-       }
-
-       feconf->tuner_init          = ctl->tuner_init;
-       feconf->tuner_set_mode      = ctl->tuner_set_mode;
-       feconf->tuner_set_frequency = ctl->tuner_set_frequency;
-       feconf->tuner_get_frequency = ctl->tuner_get_frequency;
-       feconf->tuner_set_bandwidth = ctl->tuner_set_bandwidth;
-       feconf->tuner_get_bandwidth = ctl->tuner_get_bandwidth;
-       feconf->tuner_set_bbgain    = ctl->tuner_set_bbgain;
-       feconf->tuner_get_bbgain    = ctl->tuner_get_bbgain;
-       feconf->tuner_set_refclk    = ctl->tuner_set_refclk;
-       feconf->tuner_get_status    = ctl->tuner_get_status;
-
-       return 0;
-}
-
-
-static int demod_attach_stv0900(struct ngene_channel *chan)
-{
-       struct stv090x_config *feconf = (struct stv090x_config *)
-               chan->dev->card_info->fe_config[chan->number];
-
-       chan->fe = dvb_attach(stv090x_attach,
-                       feconf,
-                       &chan->i2c_adapter,
-                       chan->number == 0 ? STV090x_DEMODULATOR_0 :
-                                           STV090x_DEMODULATOR_1);
-       if (chan->fe == NULL) {
-               printk(KERN_ERR DEVICE_NAME ": No STV0900 found!\n");
-               return -ENODEV;
-       }
-
-       if (!dvb_attach(lnbh24_attach, chan->fe, &chan->i2c_adapter, 0,
-                       0, chan->dev->card_info->lnb[chan->number])) {
-               printk(KERN_ERR DEVICE_NAME ": No LNBH24 found!\n");
-               dvb_frontend_detach(chan->fe);
-               return -ENODEV;
-       }
-
-       return 0;
-}
-
-static struct lgdt330x_config aver_m780 = {
-       .demod_address = 0xb2 >> 1,
-       .demod_chip    = LGDT3303,
-       .serial_mpeg   = 0x00, /* PARALLEL */
-       .clock_polarity_flip = 1,
-};
-
-static struct mt2131_config m780_tunerconfig = {
-       0xc0 >> 1
-};
-
-/* A single func to attach the demo and tuner, rather than
- * use two sep funcs like the current design mandates.
- */
-static int demod_attach_lg330x(struct ngene_channel *chan)
-{
-       chan->fe = dvb_attach(lgdt330x_attach, &aver_m780, &chan->i2c_adapter);
-       if (chan->fe == NULL) {
-               printk(KERN_ERR DEVICE_NAME ": No LGDT330x found!\n");
-               return -ENODEV;
-       }
-
-       dvb_attach(mt2131_attach, chan->fe, &chan->i2c_adapter,
-                  &m780_tunerconfig, 0);
-
-       return (chan->fe) ? 0 : -ENODEV;
-}
 
 /****************************************************************************/
 /****************************************************************************/
@@ -1712,7 +1484,7 @@ static int init_channels(struct ngene *dev)
 /* device probe/remove calls ************************************************/
 /****************************************************************************/
 
-static void __devexit ngene_remove(struct pci_dev *pdev)
+void __devexit ngene_remove(struct pci_dev *pdev)
 {
        struct ngene *dev = (struct ngene *)pci_get_drvdata(pdev);
        int i;
@@ -1726,8 +1498,8 @@ static void __devexit ngene_remove(struct pci_dev *pdev)
        pci_disable_device(pdev);
 }
 
-static int __devinit ngene_probe(struct pci_dev *pci_dev,
-                                const struct pci_device_id *id)
+int __devinit ngene_probe(struct pci_dev *pci_dev,
+                         const struct pci_device_id *id)
 {
        struct ngene *dev;
        int stat = 0;
@@ -1773,200 +1545,3 @@ fail0:
        pci_set_drvdata(pci_dev, NULL);
        return stat;
 }
-
-/****************************************************************************/
-/* Card configs *************************************************************/
-/****************************************************************************/
-
-static struct stv090x_config fe_cineS2 = {
-       .device         = STV0900,
-       .demod_mode     = STV090x_DUAL,
-       .clk_mode       = STV090x_CLK_EXT,
-
-       .xtal           = 27000000,
-       .address        = 0x68,
-
-       .ts1_mode       = STV090x_TSMODE_SERIAL_PUNCTURED,
-       .ts2_mode       = STV090x_TSMODE_SERIAL_PUNCTURED,
-
-       .repeater_level = STV090x_RPTLEVEL_16,
-
-       .adc1_range     = STV090x_ADC_1Vpp,
-       .adc2_range     = STV090x_ADC_1Vpp,
-
-       .diseqc_envelope_mode = true,
-};
-
-static struct stv6110x_config tuner_cineS2_0 = {
-       .addr   = 0x60,
-       .refclk = 27000000,
-       .clk_div = 1,
-};
-
-static struct stv6110x_config tuner_cineS2_1 = {
-       .addr   = 0x63,
-       .refclk = 27000000,
-       .clk_div = 1,
-};
-
-static struct ngene_info ngene_info_cineS2 = {
-       .type           = NGENE_SIDEWINDER,
-       .name           = "Linux4Media cineS2 DVB-S2 Twin Tuner",
-       .io_type        = {NGENE_IO_TSIN, NGENE_IO_TSIN},
-       .demod_attach   = {demod_attach_stv0900, demod_attach_stv0900},
-       .tuner_attach   = {tuner_attach_stv6110, tuner_attach_stv6110},
-       .fe_config      = {&fe_cineS2, &fe_cineS2},
-       .tuner_config   = {&tuner_cineS2_0, &tuner_cineS2_1},
-       .lnb            = {0x0b, 0x08},
-       .tsf            = {3, 3},
-       .fw_version     = 15,
-};
-
-static struct ngene_info ngene_info_satixS2 = {
-       .type           = NGENE_SIDEWINDER,
-       .name           = "Mystique SaTiX-S2 Dual",
-       .io_type        = {NGENE_IO_TSIN, NGENE_IO_TSIN},
-       .demod_attach   = {demod_attach_stv0900, demod_attach_stv0900},
-       .tuner_attach   = {tuner_attach_stv6110, tuner_attach_stv6110},
-       .fe_config      = {&fe_cineS2, &fe_cineS2},
-       .tuner_config   = {&tuner_cineS2_0, &tuner_cineS2_1},
-       .lnb            = {0x0b, 0x08},
-       .tsf            = {3, 3},
-       .fw_version     = 15,
-};
-
-static struct ngene_info ngene_info_satixS2v2 = {
-       .type           = NGENE_SIDEWINDER,
-       .name           = "Mystique SaTiX-S2 Dual (v2)",
-       .io_type        = {NGENE_IO_TSIN, NGENE_IO_TSIN},
-       .demod_attach   = {demod_attach_stv0900, demod_attach_stv0900},
-       .tuner_attach   = {tuner_attach_stv6110, tuner_attach_stv6110},
-       .fe_config      = {&fe_cineS2, &fe_cineS2},
-       .tuner_config   = {&tuner_cineS2_0, &tuner_cineS2_1},
-       .lnb            = {0x0a, 0x08},
-       .tsf            = {3, 3},
-       .fw_version     = 15,
-};
-
-static struct ngene_info ngene_info_cineS2v5 = {
-       .type           = NGENE_SIDEWINDER,
-       .name           = "Linux4Media cineS2 DVB-S2 Twin Tuner (v5)",
-       .io_type        = {NGENE_IO_TSIN, NGENE_IO_TSIN},
-       .demod_attach   = {demod_attach_stv0900, demod_attach_stv0900},
-       .tuner_attach   = {tuner_attach_stv6110, tuner_attach_stv6110},
-       .fe_config      = {&fe_cineS2, &fe_cineS2},
-       .tuner_config   = {&tuner_cineS2_0, &tuner_cineS2_1},
-       .lnb            = {0x0a, 0x08},
-       .tsf            = {3, 3},
-       .fw_version     = 15,
-};
-
-static struct ngene_info ngene_info_m780 = {
-       .type           = NGENE_APP,
-       .name           = "Aver M780 ATSC/QAM-B",
-
-       /* Channel 0 is analog, which is currently unsupported */
-       .io_type        = { NGENE_IO_NONE, NGENE_IO_TSIN },
-       .demod_attach   = { NULL, demod_attach_lg330x },
-
-       /* Ensure these are NULL else the frame will call them (as funcs) */
-       .tuner_attach   = { 0, 0, 0, 0 },
-       .fe_config      = { NULL, &aver_m780 },
-       .avf            = { 0 },
-
-       /* A custom electrical interface config for the demod to bridge */
-       .tsf            = { 4, 4 },
-       .fw_version     = 15,
-};
-
-/****************************************************************************/
-
-
-
-/****************************************************************************/
-/* PCI Subsystem ID *********************************************************/
-/****************************************************************************/
-
-#define NGENE_ID(_subvend, _subdev, _driverdata) { \
-       .vendor = NGENE_VID, .device = NGENE_PID, \
-       .subvendor = _subvend, .subdevice = _subdev, \
-       .driver_data = (unsigned long) &_driverdata }
-
-/****************************************************************************/
-
-static const struct pci_device_id ngene_id_tbl[] __devinitdata = {
-       NGENE_ID(0x18c3, 0xabc3, ngene_info_cineS2),
-       NGENE_ID(0x18c3, 0xabc4, ngene_info_cineS2),
-       NGENE_ID(0x18c3, 0xdb01, ngene_info_satixS2),
-       NGENE_ID(0x18c3, 0xdb02, ngene_info_satixS2v2),
-       NGENE_ID(0x18c3, 0xdd00, ngene_info_cineS2v5),
-       NGENE_ID(0x1461, 0x062e, ngene_info_m780),
-       {0}
-};
-MODULE_DEVICE_TABLE(pci, ngene_id_tbl);
-
-/****************************************************************************/
-/* Init/Exit ****************************************************************/
-/****************************************************************************/
-
-static pci_ers_result_t ngene_error_detected(struct pci_dev *dev,
-                                            enum pci_channel_state state)
-{
-       printk(KERN_ERR DEVICE_NAME ": PCI error\n");
-       if (state == pci_channel_io_perm_failure)
-               return PCI_ERS_RESULT_DISCONNECT;
-       if (state == pci_channel_io_frozen)
-               return PCI_ERS_RESULT_NEED_RESET;
-       return PCI_ERS_RESULT_CAN_RECOVER;
-}
-
-static pci_ers_result_t ngene_link_reset(struct pci_dev *dev)
-{
-       printk(KERN_INFO DEVICE_NAME ": link reset\n");
-       return 0;
-}
-
-static pci_ers_result_t ngene_slot_reset(struct pci_dev *dev)
-{
-       printk(KERN_INFO DEVICE_NAME ": slot reset\n");
-       return 0;
-}
-
-static void ngene_resume(struct pci_dev *dev)
-{
-       printk(KERN_INFO DEVICE_NAME ": resume\n");
-}
-
-static struct pci_error_handlers ngene_errors = {
-       .error_detected = ngene_error_detected,
-       .link_reset = ngene_link_reset,
-       .slot_reset = ngene_slot_reset,
-       .resume = ngene_resume,
-};
-
-static struct pci_driver ngene_pci_driver = {
-       .name        = "ngene",
-       .id_table    = ngene_id_tbl,
-       .probe       = ngene_probe,
-       .remove      = __devexit_p(ngene_remove),
-       .err_handler = &ngene_errors,
-};
-
-static __init int module_init_ngene(void)
-{
-       printk(KERN_INFO
-              "nGene PCIE bridge driver, Copyright (C) 2005-2007 Micronas\n");
-       return pci_register_driver(&ngene_pci_driver);
-}
-
-static __exit void module_exit_ngene(void)
-{
-       pci_unregister_driver(&ngene_pci_driver);
-}
-
-module_init(module_init_ngene);
-module_exit(module_exit_ngene);
-
-MODULE_DESCRIPTION("nGene");
-MODULE_AUTHOR("Micronas, Ralph Metzler, Manfred Voelkel");
-MODULE_LICENSE("GPL");