? diff
Index: budget-core.c
===================================================================
RCS file: /cvs/linuxtv/dvb-kernel/linux/drivers/media/dvb/ttpci/budget-core.c,v
retrieving revision 1.10
diff -p -u -r1.10 budget-core.c
--- budget-core.c	19 Sep 2003 17:23:40 -0000	1.10
+++ budget-core.c	25 Feb 2004 20:19:41 -0000
@@ -38,10 +38,17 @@ static int start_ts_capture (struct budg
 
         budget->tsf=0xff;
         budget->ttbp=0;
-        saa7146_write(dev, DD1_INIT, 0x02000600);
-        saa7146_write(dev, MC2, (MASK_09 | MASK_25 | MASK_10 | MASK_26));
 
-        saa7146_write(dev, BRS_CTRL, 0x60000000);	
+        if (budget->card->type == BUDGET_FS_ACTIVY) {
+                saa7146_write(dev, DD1_INIT, 0x04000000);
+                saa7146_write(dev, MC2, (MASK_09 | MASK_25));
+                saa7146_write(dev, BRS_CTRL, 0x00000000);	
+        } else {
+                saa7146_write(dev, DD1_INIT, 0x02000600);
+                saa7146_write(dev, MC2, (MASK_09 | MASK_25 | MASK_10 | MASK_26));
+                saa7146_write(dev, BRS_CTRL, 0x60000000);
+        }
+
       	saa7146_write(dev, MC2, (MASK_08 | MASK_24));
         mdelay(10);
 
@@ -49,9 +56,15 @@ static int start_ts_capture (struct budg
         saa7146_write(dev, BASE_EVEN3, 0);
         saa7146_write(dev, PROT_ADDR3, TS_WIDTH*TS_HEIGHT);	
         saa7146_write(dev, BASE_PAGE3, budget->pt.dma |ME1|0x90);
-        saa7146_write(dev, PITCH3, TS_WIDTH);
 
-        saa7146_write(dev, NUM_LINE_BYTE3, (TS_HEIGHT<<16)|TS_WIDTH);
+        if (budget->card->type == BUDGET_FS_ACTIVY) {
+                saa7146_write(dev, PITCH3, TS_WIDTH/2);
+                saa7146_write(dev, NUM_LINE_BYTE3, ((TS_HEIGHT*2)<<16)|(TS_WIDTH/2));
+        } else {
+                saa7146_write(dev, PITCH3, TS_WIDTH);
+                saa7146_write(dev, NUM_LINE_BYTE3, (TS_HEIGHT<<16)|TS_WIDTH);
+        }
+
       	saa7146_write(dev, MC2, (MASK_04 | MASK_20));
      	saa7146_write(dev, MC1, (MASK_04 | MASK_20)); // DMA3 on
 
@@ -217,7 +230,8 @@ int ttpci_budget_init (struct budget *bu
 
 	/* the Siemens DVB needs this if you want to have the i2c chips
            get recognized before the main driver is loaded */
-        saa7146_write(dev, GPIO_CTRL, 0x500000);
+	if (bi->type != BUDGET_FS_ACTIVY)
+		saa7146_write(dev, GPIO_CTRL, 0x500000); /* GPIO 3 = 1 */
 	
 	saa7146_i2c_adapter_prepare(dev, NULL, SAA7146_I2C_BUS_BIT_RATE_120);
 
@@ -242,7 +256,11 @@ int ttpci_budget_init (struct budget *bu
 
 	tasklet_init (&budget->vpe_tasklet, vpeirq, (unsigned long) budget);
 
-	saa7146_setgpio(dev, 2, SAA7146_GPIO_OUTHI); /* frontend power on */
+	/* frontend power on */
+	if (bi->type == BUDGET_FS_ACTIVY)
+		saa7146_setgpio(dev, 1, SAA7146_GPIO_OUTHI);
+	else
+		saa7146_setgpio(dev, 2, SAA7146_GPIO_OUTHI);
 
         if (budget_register(budget) == 0) {
 		return 0;
Index: budget.c
===================================================================
RCS file: /cvs/linuxtv/dvb-kernel/linux/drivers/media/dvb/ttpci/budget.c,v
retrieving revision 1.15
diff -p -u -r1.15 budget.c
--- budget.c	9 Oct 2003 10:06:11 -0000	1.15
+++ budget.c	25 Feb 2004 20:19:41 -0000
@@ -142,6 +142,44 @@ int budget_diseqc_ioctl (struct dvb_fron
 }
 
 
+/* Routines for Fujitsu Siemens Activy card */
+static int SetVoltage_Activy (struct budget *budget, fe_sec_voltage_t voltage)
+{
+	struct saa7146_dev *dev=budget->dev;
+	DEB_EE(("budget: %p\n",budget));
+
+	switch (voltage) {
+	case SEC_VOLTAGE_13:
+                saa7146_setgpio(dev, 2, SAA7146_GPIO_OUTLO);
+		break;
+	case SEC_VOLTAGE_18:
+                saa7146_setgpio(dev, 2, SAA7146_GPIO_OUTHI);
+		break;
+	default:
+		return -EINVAL;
+	};
+
+        return 0;
+}
+
+
+int budget_diseqc_ioctl_activy (struct dvb_frontend *fe, unsigned int cmd, void *arg)
+{
+	struct budget *budget = fe->before_after_data;
+
+	DEB_EE(("budget: %p\n",budget));
+
+	switch (cmd) {
+		case FE_SET_VOLTAGE:
+			return SetVoltage_Activy (budget, (fe_sec_voltage_t) arg);
+		default:
+			return -EOPNOTSUPP;
+	};
+
+	return 0;
+}
+
+
 static int budget_attach (struct saa7146_dev* dev, struct saa7146_pci_extension_data *info)
 {
 	struct budget *budget = NULL;
@@ -160,7 +198,11 @@ static int budget_attach (struct saa7146
 		return err;
 	}
 
-	dvb_add_frontend_ioctls (budget->dvb_adapter,
+	if (budget->card->type == BUDGET_FS_ACTIVY)
+		dvb_add_frontend_ioctls (budget->dvb_adapter,
+				 budget_diseqc_ioctl_activy, NULL, budget);
+	else
+		dvb_add_frontend_ioctls (budget->dvb_adapter,
 				 budget_diseqc_ioctl, NULL, budget);
 
 	dev->ext_priv = budget;
@@ -174,7 +216,11 @@ static int budget_detach (struct saa7146
 	struct budget *budget = (struct budget*) dev->ext_priv;
 	int err;
 
-	dvb_remove_frontend_ioctls (budget->dvb_adapter,
+	if (budget->card->type == BUDGET_FS_ACTIVY)
+		dvb_remove_frontend_ioctls (budget->dvb_adapter,
+				    budget_diseqc_ioctl_activy, NULL);
+	else
+		dvb_remove_frontend_ioctls (budget->dvb_adapter,
 				    budget_diseqc_ioctl, NULL);
 
 	err = ttpci_budget_deinit (budget);
@@ -193,6 +239,7 @@ MAKE_BUDGET_INFO(ttbs,	"TT-Budget/WinTV-
 MAKE_BUDGET_INFO(ttbc,	"TT-Budget/WinTV-NOVA-C  PCI",	BUDGET_TT);
 MAKE_BUDGET_INFO(ttbt,	"TT-Budget/WinTV-NOVA-T  PCI",	BUDGET_TT);
 MAKE_BUDGET_INFO(satel,	"SATELCO Multimedia PCI",	BUDGET_TT_HW_DISEQC);
+MAKE_BUDGET_INFO(fsacs, "Fujitsu Siemens Activy Budget-S PCI", BUDGET_FS_ACTIVY);
 /* Uncomment for Budget Patch */
 /*MAKE_BUDGET_INFO(fs_1_3,"Siemens/Technotrend/Hauppauge PCI rev1.3+Budget_Patch", BUDGET_PATCH);*/
 
@@ -203,6 +250,7 @@ static struct pci_device_id pci_tbl[] = 
 	MAKE_EXTENSION_PCI(ttbc,  0x13c2, 0x1004),
 	MAKE_EXTENSION_PCI(ttbt,  0x13c2, 0x1005),
 	MAKE_EXTENSION_PCI(satel, 0x13c2, 0x1013),
+	MAKE_EXTENSION_PCI(fsacs, 0x1131, 0x4f61),
 	{
 		.vendor    = 0,
 	}
Index: budget.h
===================================================================
RCS file: /cvs/linuxtv/dvb-kernel/linux/drivers/media/dvb/ttpci/budget.h,v
retrieving revision 1.6
diff -p -u -r1.6 budget.h
--- budget.h	3 Nov 2003 19:09:13 -0000	1.6
+++ budget.h	25 Feb 2004 20:19:41 -0000
@@ -73,6 +73,7 @@ static struct saa7146_pci_extension_data
 #define BUDGET_TT_HW_DISEQC	   1
 #define BUDGET_KNC1		   2
 #define BUDGET_PATCH		   3
+#define BUDGET_FS_ACTIVY	   4
 
 
 extern int ttpci_budget_init (struct budget *budget,
