]> asedeno.scripts.mit.edu Git - linux.git/commitdiff
media: ddbridge/max: implement MCI/MaxSX8 attach function
authorDaniel Scheller <d.scheller@gmx.net>
Mon, 9 Apr 2018 16:47:49 +0000 (12:47 -0400)
committerMauro Carvalho Chehab <mchehab+samsung@kernel.org>
Fri, 4 May 2018 14:49:57 +0000 (10:49 -0400)
Implement frontend attachment as ddb_fe_attach_mci() into the
ddbridge-max module. The MaxSX8 MCI cards are part of the Max card series
and make use of the LNB controller driven by the already existing lnb
functionality, so here's where this code belongs to.

Picked up from the upstream dddvb-0.9.33 release.

Signed-off-by: Daniel Scheller <d.scheller@gmx.net>
Signed-off-by: Mauro Carvalho Chehab <mchehab+samsung@kernel.org>
drivers/media/pci/ddbridge/ddbridge-max.c
drivers/media/pci/ddbridge/ddbridge-max.h

index dc6b81488746677e15ded420e6e9750f9094a00d..739e4b444cf469fd2d614380cf133e08ab8a5eb9 100644 (file)
@@ -33,6 +33,7 @@
 #include "ddbridge.h"
 #include "ddbridge-regs.h"
 #include "ddbridge-io.h"
+#include "ddbridge-mci.h"
 
 #include "ddbridge-max.h"
 #include "mxl5xx.h"
@@ -452,3 +453,44 @@ int ddb_fe_attach_mxl5xx(struct ddb_input *input)
        dvb->input = tuner;
        return 0;
 }
+
+/******************************************************************************/
+/* MAX MCI related functions */
+
+int ddb_fe_attach_mci(struct ddb_input *input)
+{
+       struct ddb *dev = input->port->dev;
+       struct ddb_dvb *dvb = &input->port->dvb[input->nr & 1];
+       struct ddb_port *port = input->port;
+       struct ddb_link *link = &dev->link[port->lnr];
+       int demod, tuner;
+
+       demod = input->nr;
+       tuner = demod & 3;
+       if (fmode == 3)
+               tuner = 0;
+       dvb->fe = ddb_mci_attach(input, 0, demod, &dvb->set_input);
+       if (!dvb->fe) {
+               dev_err(dev->dev, "No MAXSX8 found!\n");
+               return -ENODEV;
+       }
+       if (!dvb->set_input) {
+               dev_err(dev->dev, "No MCI set_input function pointer!\n");
+               return -ENODEV;
+       }
+       if (input->nr < 4) {
+               lnb_command(dev, port->lnr, input->nr, LNB_CMD_INIT);
+               lnb_set_voltage(dev, port->lnr, input->nr, SEC_VOLTAGE_OFF);
+       }
+       ddb_lnb_init_fmode(dev, link, fmode);
+
+       dvb->fe->ops.set_voltage = max_set_voltage;
+       dvb->fe->ops.enable_high_lnb_voltage = max_enable_high_lnb_voltage;
+       dvb->fe->ops.set_tone = max_set_tone;
+       dvb->diseqc_send_master_cmd = dvb->fe->ops.diseqc_send_master_cmd;
+       dvb->fe->ops.diseqc_send_master_cmd = max_send_master_cmd;
+       dvb->fe->ops.diseqc_send_burst = max_send_burst;
+       dvb->fe->sec_priv = input;
+       dvb->input = tuner;
+       return 0;
+}
index bf8bf38739f6da512d455fdd42e36c1b6db8b804..82efc53baa9495311b46757c8a3816bdc114501d 100644 (file)
@@ -25,5 +25,6 @@
 
 int ddb_lnb_init_fmode(struct ddb *dev, struct ddb_link *link, u32 fm);
 int ddb_fe_attach_mxl5xx(struct ddb_input *input);
+int ddb_fe_attach_mci(struct ddb_input *input);
 
 #endif /* _DDBRIDGE_MAX_H */