@@ -35,6 +35,9 @@
#include "zl10353.h"
#include "mb86a16.h"
#include "tda1004x.h"
+#include "af9013.h"
+#include "tda18271.h"
+
unsigned int verbose;
module_param(verbose, int, 0644);
@@ -540,6 +543,82 @@ static struct saa716x_config saa716x_ave
.i2c_rate = SAA716x_I2C_RATE_100,
};
+#define SAA716x_MODEL_AVERMEDIA_A188 "Avermedia AVerTV Duo Hybrid PCI-E II A188"
+#define SAA716x_DEV_AVERMEDIA_A188 "2x DVB-T + 2x Analaog"
+
+static int load_config_avera188(struct saa716x_dev *saa716x)
+{
+ int ret = 0;
+ return ret;
+}
+
+/* probably af9013 is used in parallel mode
+** common demod_address are 0x38 and 0x3a
+** tuner is nxp tda18271
+*/
+struct af9013_config avera188_af9013_config = {
+ .demod_address = 0x38,
+ .output_mode = AF9013_OUTPUT_MODE_PARALLEL,
+ .api_version = { 0, 1, 9, 0 },
+ .gpio[0] = AF9013_GPIO_HI,
+ .gpio[3] = AF9013_GPIO_TUNER_ON,
+
+/*
+ .demod_address = 0x3a,
+ .output_mode = AF9013_OUTPUT_MODE_SERIAL,
+ .api_version = { 0, 1, 9, 0 },
+ .gpio[0] = AF9013_GPIO_TUNER_ON,
+ .gpio[1] = AF9013_GPIO_LO,
+*/
+};
+
+
+static int saa716x_avera188_frontend_attach(struct saa716x_adapter *adapter, int count)
+{
+ struct saa716x_dev *saa716x = adapter->saa716x;
+ struct saa716x_i2c *i2c = &saa716x->i2c[count];
+ int i;
+
+ if (count == 0) {
+ dprintk(SAA716x_DEBUG, 1, "Adapter (%d) SAA716x frontend Init", count);
+ dprintk(SAA716x_DEBUG, 1, "Adapter (%d) Device ID=%02x", count, saa716x->pdev->subsystem_device);
+ dprintk(SAA716x_ERROR, 1, "Adapter (%d) Power ON", count);
+ saa716x_gpio_write(saa716x, GPIO_14, 1);
+ msleep(100);
+
+ for(i = 0; i < 1; i++)
+ { /* try all addresses in a loop */
+ /* avera188_af9013_config.demod_address = i; */
+
+ printk("Trying af9013 frontend on I2C address 0x%02x", avera188_af9013_config.demod_address);
+ adapter->fe = af9013_attach(&avera188_af9013_config, &i2c->i2c_adapter);
+ if (adapter->fe == NULL) {
+ dprintk(SAA716x_ERROR, 1, "Frontend attach failed");
+ /* return -ENODEV; */
+ } else {
+ dprintk(SAA716x_ERROR, 1, "Done!");
+ return 0;
+ }
+ }
+ return -ENODEV;
+
+ }
+
+ return 0;
+}
+
+static struct saa716x_config saa716x_avera188_config = {
+ .model_name = SAA716x_MODEL_AVERMEDIA_A188,
+ .dev_type = SAA716x_DEV_AVERMEDIA_A188,
+ .boot_mode = SAA716x_EXT_BOOT,
+ .load_config = &load_config_avera188,
+ .adapters = 1,
+ .frontend_attach = saa716x_avera188_frontend_attach,
+ .irq_handler = saa716x_hybrid_pci_irq,
+ .i2c_rate = SAA716x_I2C_RATE_100,
+};
+
+
static struct pci_device_id saa716x_hybrid_pci_table[] = {
MAKE_ENTRY(TWINHAN_TECHNOLOGIES, TWINHAN_VP_6090, SAA7162, &saa716x_vp6090_config),
@@ -547,6 +626,7 @@ static struct pci_device_id saa716x_hybr
MAKE_ENTRY(NXP_REFERENCE_BOARD, PCI_ANY_ID, SAA7160, &saa716x_nemo_config),
MAKE_ENTRY(AVERMEDIA, AVERMEDIA_HC82, SAA7160, &saa716x_averhc82_config),
MAKE_ENTRY(AVERMEDIA, AVERMEDIA_H788, SAA7160, &saa716x_averh788_config),
+ MAKE_ENTRY(AVERMEDIA, AVERMEDIA_A188, SAA7160, &saa716x_avera188_config),
{ }
};
MODULE_DEVICE_TABLE(pci, saa716x_hybrid_pci_table);
Only in saa716x/linux/drivers/media/common/saa716x: saa716x_hybrid.c~
@@ -7,5 +7,6 @@
#define TWINHAN_VP_6090 0x0027
#define AVERMEDIA_HC82 0x2355
#define AVERMEDIA_H788 0x1455
+#define AVERMEDIA_A188 0x1855
#endif /* __SAA716x_HYBRID_H */