Skip to contentSkip to conversation

add support for using multiproto drivers with old api

PATCH In review Anssi Hannula 5 participants 7 messages May 23, 2008 – May 24, 2008 Media (V4L/DVB)

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 add support for using multiproto drivers with old api

Hi!

The attached adds support for using multiproto drivers with the old api.

Signature · 1 line
Anssi Hannula

From: Anssi Hannula <[email protected]>

multiproto: add support for using multiproto drivers with old api

Allow using multiproto drivers with the old API. Multiproto drivers will provide one frontend type over the old API. For STB0899 this is FE_QPSK. olddrv_to_newapi() and newapi_to_olddrv() are renamed to oldapi_to_newapi() and newapi_to_oldapi(), respectively.

---

linux/drivers/media/dvb/dvb-core/dvb_frontend.c +35 -4
diff -r 6fdfb2b22241 -r 5dc544760be6 linux/drivers/media/dvb/dvb-core/dvb_frontend.c
@@ -354,7 +354,7 @@
 	return 0;
 }
 
-int newapi_to_olddrv(struct dvbfe_params *params,
+int newapi_to_oldapi(struct dvbfe_params *params,
 		     struct dvb_frontend_parameters *p,
 		     enum dvbfe_delsys delsys)
 {
@@ -466,7 +466,7 @@
 	return 0;
 }
 
-int olddrv_to_newapi(struct dvb_frontend *fe,
+int oldapi_to_newapi(struct dvb_frontend *fe,
 		     struct dvbfe_params *params,
 		     struct dvb_frontend_parameters *p,
 		     enum fe_type fe_type)
@@ -1649,6 +1649,9 @@
 		memset(&fetunesettings, 0, sizeof(struct dvb_frontend_tune_settings));
 		memcpy(&fetunesettings.parameters, parg, sizeof (struct dvb_frontend_parameters));
 
+		/* Request the search algorithm to search */
+		fepriv->algo_status |= DVBFE_ALGO_SEARCH_AGAIN;
+
 		/* force auto frequency inversion if requested */
 		if (dvb_force_auto_inversion) {
 			fepriv->parameters.inversion = INVERSION_AUTO;
@@ -1697,6 +1700,27 @@
 		if (dvb_override_tune_delay > 0)
 			fepriv->min_delay = (dvb_override_tune_delay * HZ) / 1000;
 
+		if (oldapi_to_newapi(fe, &fepriv->fe_params, &fepriv->parameters, fe->ops.info.type) == -EINVAL)
+			printk("%s: ERROR !!! Converting Old parameters --> New parameters\n", __func__);
+
+		/* set delivery system to the default old-API one */
+		if (fe->ops.set_delsys) {
+			switch(fe->ops.info.type) {
+			case FE_QPSK:
+				fe->ops.set_delsys(fe, DVBFE_DELSYS_DVBS);
+				fe->ops.set_delsys(fe, DVBFE_DELSYS_DVBS);
+			case FE_QAM:
+				fe->ops.set_delsys(fe, DVBFE_DELSYS_DVBC);
+				break;
+			case FE_OFDM:
+				fe->ops.set_delsys(fe, DVBFE_DELSYS_DVBT);
+				break;
+			case FE_ATSC:
+				fe->ops.set_delsys(fe, DVBFE_DELSYS_ATSC);
+				break;
+			}
+		}
+
 		fepriv->state = FESTATE_RETUNE;
 		dvb_frontend_wakeup(fe);
 		dvb_frontend_add_event(fe, 0);
@@ -1720,6 +1744,13 @@
 		if (fe->ops.get_frontend) {
 			memcpy (parg, &fepriv->parameters, sizeof (struct dvb_frontend_parameters));
 			err = fe->ops.get_frontend(fe, (struct dvb_frontend_parameters*) parg);
+		} else if (fe->ops.get_params) {
+			err = fe->ops.get_params(fe, &fepriv->fe_params);
+			if (!err) {
+				if (newapi_to_oldapi(&fepriv->fe_params, &fepriv->parameters, fepriv->delsys)  == -EINVAL)
+					printk("%s: ERROR !!! Converting New parameters --> Old parameters\n", __func__);
+				memcpy(parg, &fepriv->parameters, sizeof (struct dvb_frontend_parameters));
+			}
 		}
 		break;
 
@@ -1751,7 +1782,7 @@
 		    (delsys & DVBFE_DELSYS_DVBT) ||
 		    (delsys & DVBFE_DELSYS_ATSC)) {
 
-			if (newapi_to_olddrv(&fepriv->fe_params, &fepriv->parameters, fepriv->delsys)  == -EINVAL)
+			if (newapi_to_oldapi(&fepriv->fe_params, &fepriv->parameters, fepriv->delsys)  == -EINVAL)
 				printk("%s: ERROR !!! Converting New parameters --> Old parameters\n", __func__);
 		}
 		/* Request the search algorithm to search	*/
@@ -1841,7 +1872,7 @@
 		} else if (fe->ops.get_frontend) {
 			err = fe->ops.get_frontend(fe, &fepriv->parameters);
 			if (!err) {
-				if (olddrv_to_newapi(fe, &fepriv->fe_params, &fepriv->parameters, fe->ops.info.type) == -EINVAL)
+				if (oldapi_to_newapi(fe, &fepriv->fe_params, &fepriv->parameters, fe->ops.info.type) == -EINVAL)
 					printk("%s: ERROR !!! Converting Old parameters --> New parameters\n", __func__);
 				memcpy(parg, &fepriv->fe_params, sizeof (struct dvbfe_params));
 			}
linux/drivers/media/dvb/frontends/stb0899_drv.c +1 -0
diff -r 6fdfb2b22241 -r 5dc544760be6 linux/drivers/media/dvb/frontends/stb0899_drv.c
@@ -2036,6 +2036,7 @@
 
 	.info = {
 		.name			= "STB0899 Multistandard",
+		.type			= FE_QPSK, /* with old API */
 	},
 
 	.release			= stb0899_release,

_______________________________________________
linux-dvb mailing list
[email protected]
http://www.linuxtv.org/cgi-bin/mailman/listinfo/linux-dvb

#1 lore raw

Hello Anssi,

Quoted 1 line · Anssi Hannula

The attached adds support for using multiproto drivers with the old api.

there seems to be a needlessly duplicated line in your patch:

+ /* set delivery system to the default old-API one */
+ if (fe->ops.set_delsys) {
+ switch(fe->ops.info.type) {
+ case FE_QPSK:
+ fe->ops.set_delsys(fe, DVBFE_DELSYS_DVBS);
+ fe->ops.set_delsys(fe, DVBFE_DELSYS_DVBS);

Regards,
Andreas

_______________________________________________
linux-dvb mailing list
[email protected]
http://www.linuxtv.org/cgi-bin/mailman/listinfo/linux-dvb

#2 lore raw

Review

Quoted 13 lines · Andreas Oberritter

Hello Anssi,

Quoted 1 line · Anssi Hannula

The attached adds support for using multiproto drivers with the old api.

there seems to be a needlessly duplicated line in your patch:

(quoted diff) +6 -0
+	/* set delivery system to the default old-API one */
+	if (fe->ops.set_delsys) {
+		switch(fe->ops.info.type) {
+		case FE_QPSK:
+			fe->ops.set_delsys(fe, DVBFE_DELSYS_DVBS);
+			fe->ops.set_delsys(fe, DVBFE_DELSYS_DVBS);

Strange, the latter one should be 'break;'.

Attached again.

Signature · 1 line
Anssi Hannula

From: Anssi Hannula <[email protected]>

multiproto: add support for using multiproto drivers with old api

Allow using multiproto drivers with the old API. Multiproto drivers will provide one frontend type over the old API. For STB0899 this is FE_QPSK. olddrv_to_newapi() and newapi_to_olddrv() are renamed to oldapi_to_newapi() and newapi_to_oldapi(), respectively.

---

linux/drivers/media/dvb/dvb-core/dvb_frontend.c +35 -4
diff -r 6fdfb2b22241 -r 5dc544760be6 linux/drivers/media/dvb/dvb-core/dvb_frontend.c
@@ -354,7 +354,7 @@
 	return 0;
 }
 
-int newapi_to_olddrv(struct dvbfe_params *params,
+int newapi_to_oldapi(struct dvbfe_params *params,
 		     struct dvb_frontend_parameters *p,
 		     enum dvbfe_delsys delsys)
 {
@@ -466,7 +466,7 @@
 	return 0;
 }
 
-int olddrv_to_newapi(struct dvb_frontend *fe,
+int oldapi_to_newapi(struct dvb_frontend *fe,
 		     struct dvbfe_params *params,
 		     struct dvb_frontend_parameters *p,
 		     enum fe_type fe_type)
@@ -1649,6 +1649,9 @@
 		memset(&fetunesettings, 0, sizeof(struct dvb_frontend_tune_settings));
 		memcpy(&fetunesettings.parameters, parg, sizeof (struct dvb_frontend_parameters));
 
+		/* Request the search algorithm to search */
+		fepriv->algo_status |= DVBFE_ALGO_SEARCH_AGAIN;
+
 		/* force auto frequency inversion if requested */
 		if (dvb_force_auto_inversion) {
 			fepriv->parameters.inversion = INVERSION_AUTO;
@@ -1697,6 +1700,27 @@
 		if (dvb_override_tune_delay > 0)
 			fepriv->min_delay = (dvb_override_tune_delay * HZ) / 1000;
 
+		if (oldapi_to_newapi(fe, &fepriv->fe_params, &fepriv->parameters, fe->ops.info.type) == -EINVAL)
+			printk("%s: ERROR !!! Converting Old parameters --> New parameters\n", __func__);
+
+		/* set delivery system to the default old-API one */
+		if (fe->ops.set_delsys) {
+			switch(fe->ops.info.type) {
+			case FE_QPSK:
+				fe->ops.set_delsys(fe, DVBFE_DELSYS_DVBS);
+				break;
+			case FE_QAM:
+				fe->ops.set_delsys(fe, DVBFE_DELSYS_DVBC);
+				break;
+			case FE_OFDM:
+				fe->ops.set_delsys(fe, DVBFE_DELSYS_DVBT);
+				break;
+			case FE_ATSC:
+				fe->ops.set_delsys(fe, DVBFE_DELSYS_ATSC);
+				break;
+			}
+		}
+
 		fepriv->state = FESTATE_RETUNE;
 		dvb_frontend_wakeup(fe);
 		dvb_frontend_add_event(fe, 0);
@@ -1720,6 +1744,13 @@
 		if (fe->ops.get_frontend) {
 			memcpy (parg, &fepriv->parameters, sizeof (struct dvb_frontend_parameters));
 			err = fe->ops.get_frontend(fe, (struct dvb_frontend_parameters*) parg);
+		} else if (fe->ops.get_params) {
+			err = fe->ops.get_params(fe, &fepriv->fe_params);
+			if (!err) {
+				if (newapi_to_oldapi(&fepriv->fe_params, &fepriv->parameters, fepriv->delsys)  == -EINVAL)
+					printk("%s: ERROR !!! Converting New parameters --> Old parameters\n", __func__);
+				memcpy(parg, &fepriv->parameters, sizeof (struct dvb_frontend_parameters));
+			}
 		}
 		break;
 
@@ -1751,7 +1782,7 @@
 		    (delsys & DVBFE_DELSYS_DVBT) ||
 		    (delsys & DVBFE_DELSYS_ATSC)) {
 
-			if (newapi_to_olddrv(&fepriv->fe_params, &fepriv->parameters, fepriv->delsys)  == -EINVAL)
+			if (newapi_to_oldapi(&fepriv->fe_params, &fepriv->parameters, fepriv->delsys)  == -EINVAL)
 				printk("%s: ERROR !!! Converting New parameters --> Old parameters\n", __func__);
 		}
 		/* Request the search algorithm to search	*/
@@ -1841,7 +1872,7 @@
 		} else if (fe->ops.get_frontend) {
 			err = fe->ops.get_frontend(fe, &fepriv->parameters);
 			if (!err) {
-				if (olddrv_to_newapi(fe, &fepriv->fe_params, &fepriv->parameters, fe->ops.info.type) == -EINVAL)
+				if (oldapi_to_newapi(fe, &fepriv->fe_params, &fepriv->parameters, fe->ops.info.type) == -EINVAL)
 					printk("%s: ERROR !!! Converting Old parameters --> New parameters\n", __func__);
 				memcpy(parg, &fepriv->fe_params, sizeof (struct dvbfe_params));
 			}
linux/drivers/media/dvb/frontends/stb0899_drv.c +1 -0
diff -r 6fdfb2b22241 -r 5dc544760be6 linux/drivers/media/dvb/frontends/stb0899_drv.c
@@ -2036,6 +2036,7 @@
 
 	.info = {
 		.name			= "STB0899 Multistandard",
+		.type			= FE_QPSK, /* with old API */
 	},
 
 	.release			= stb0899_release,

_______________________________________________
linux-dvb mailing list
[email protected]
http://www.linuxtv.org/cgi-bin/mailman/listinfo/linux-dvb

#3 lore raw

2008/5/23 Anssi Hannula <[email protected]>:

Quoted 15 lines

linux/drivers/media/dvb/dvb-core/dvb_frontend.c

Quoted 13 lines · Andreas Oberritter

Hello Anssi,

Quoted 1 line · Anssi Hannula

The attached adds support for using multiproto drivers with the old api.

there seems to be a needlessly duplicated line in your patch:

linux/drivers/media/dvb/dvb-core/dvb_frontend.c +6 -0
+     /* set delivery system to the default old-API one */
+     if (fe->ops.set_delsys) {
+             switch(fe->ops.info.type) {
+             case FE_QPSK:
+                     fe->ops.set_delsys(fe, DVBFE_DELSYS_DVBS);
+                     fe->ops.set_delsys(fe, DVBFE_DELSYS_DVBS);
Quoted 6 lines

Strange, the latter one should be 'break;'.

Attached again.

--
Anssi Hannula

Thank you so much :)
I can't believe I'm watching tv in kaffeine with my multiproto card.

My card is Technotred TT Connect S2-3650 CI
Using this drivers:
dvb-core.ko
dvb-pll.ko
stb6100.ko
insmod stb0899.ko
lnbp22.ko
idvb-usb.ko
dvb-usb-pctv452e.ko

Faruk

_______________________________________________
linux-dvb mailing list
[email protected]
http://www.linuxtv.org/cgi-bin/mailman/listinfo/linux-dvb

#4 lore raw
Quoted 13 lines
Quoted 13 lines

linux/drivers/media/dvb/dvb-core/dvb_frontend.c

Quoted 10 lines
Quoted 1 line

The attached adds support for using multiproto drivers with the old api.

there seems to be a needlessly duplicated line in your patch:

linux/drivers/media/dvb/dvb-core/dvb_frontend.c +6 -0
+     /* set delivery system to the default old-API one */
+     if (fe->ops.set_delsys) {
+             switch(fe->ops.info.type) {
+             case FE_QPSK:
+                     fe->ops.set_delsys(fe, DVBFE_DELSYS_DVBS);
+                     fe->ops.set_delsys(fe, DVBFE_DELSYS_DVBS);

Strange, the latter one should be 'break;'.

Quoted 7 lines
Quoted 4 lines

Attached again.

--
Anssi Hannula

Thank you so much :)
I can't believe I'm watching tv in kaffeine with my multiproto card.

what about dvb-s2 channels on your kaffeine ? how can you watch their ?

Goga

Quoted 9 lines

My card is Technotred TT Connect S2-3650 CI
Using this drivers:
dvb-core.ko
dvb-pll.ko
stb6100.ko
insmod stb0899.ko
lnbp22.ko
idvb-usb.ko
dvb-usb-pctv452e.ko

_______________________________________________
linux-dvb mailing list
[email protected]
http://www.linuxtv.org/cgi-bin/mailman/listinfo/linux-dvb

#6 lore raw
In reply to Goga777
Quoted 8 lines · Goga777 wrote:
Quoted 4 lines
Quoted 1 line

Thank you so much :)
I can't believe I'm watching tv in kaffeine with my multiproto card.

what about dvb-s2 channels on your kaffeine ? how can you watch their ?

i've got a kaffeine multiproto patch coming soon, it should fully support multiproto api but has been only tested on dvb-s/s2 with my cards dvbs fullfeatured and budget dvb-s2

dvb-s2 chans are working fine, other problems are h264 HD / xine / ffh264 related, i'm on 64 bit.

i'll have to test my patch against that new multiproto patch and i'll probably post my kaffeine patch on kaffeine forum later next week.. Or somewhere else if kaffeine guys don't want to see multiproto content there as i know they won't support multiproto..

the patch is supposed to be v4l-dvb / multiproto compatible so you don't need two different versions of kaffeine if you're switching api versions..

Later

Marc

_______________________________________________
linux-dvb mailing list
[email protected]
http://www.linuxtv.org/cgi-bin/mailman/listinfo/linux-dvb