Re: [PATCH][Update_for_2.6.38] DM04/QQBOX Frontend attach change.

2010-12-07 Thread Malcolm Priestley
On Fri, 2010-12-03 at 09:32 -0200, Mauro Carvalho Chehab wrote:
 Em 27-11-2010 11:13, Malcolm Priestley escreveu:
  Driver Version v1.73 - Frontend attach change.
  To stop double rc registration in multi tuner environment or firmware 
  change.
  
  Signed-off-by: Malcolm Priestley tvbox...@gmail.com
  
   
  +static int lme_name(struct dvb_usb_adapter *adap)
  +{
  +   struct lme2510_state *st = adap-dev-priv;
  +   const char *desc = adap-dev-desc-name;
  +   char *fe_name[] = {,  LG TDQY-P001F,  SHARP:BS2F7HZ7395};
  +   char *name = adap-fe-ops.info.name;
  +
  +   strcpy(name, desc);
  +   strcat(name, fe_name[st-tuner_config]);
 
 Please use, instead, strlcpy/strlcat, to avoid writing outside the buffer 
 size.
 
Patch appears to have been lost. Resend.

Driver Version v1.74
Amended patch with change to strlcpy/strlcat.


Signed-off-by: Malcolm Priestley tvbox...@gmail.com

diff --git a/drivers/media/dvb/dvb-usb/lmedm04.c 
b/drivers/media/dvb/dvb-usb/lmedm04.c
index 1455c23..9eea418 100644
--- a/drivers/media/dvb/dvb-usb/lmedm04.c
+++ b/drivers/media/dvb/dvb-usb/lmedm04.c
@@ -584,6 +584,7 @@ static int lme2510_int_service(struct dvb_usb_adapter *adap)
ret = lme2510_int_read(adap);
if (ret  0) {
rc_unregister_device(rc);
+   info(INT Unable to start Interupt Service);
return -ENODEV;
}
 
@@ -674,7 +675,7 @@ static void lme_coldreset(struct usb_device *dev)
return;
 }
 
-static void lme_firmware_switch(struct usb_device *udev, int cold)
+static int lme_firmware_switch(struct usb_device *udev, int cold)
 {
const struct firmware *fw = NULL;
char lme2510c_s7395[] = dvb-usb-lme2510c-s7395.fw;
@@ -685,7 +686,7 @@ static void lme_firmware_switch(struct usb_device *udev, 
int cold)
cold = (cold  0) ? (cold  1) : 0;
 
if (udev-descriptor.idProduct == 0x1122)
-   return;
+   return 0;
 
switch (dvb_usb_lme2510_firmware) {
case 0:
@@ -715,10 +716,12 @@ static void lme_firmware_switch(struct usb_device *udev, 
int cold)
 
release_firmware(fw);
 
-   if (cold)
+   if (cold) {
lme_coldreset(udev);
+   return -ENODEV;
+   }
 
-   return;
+   return ret;
 }
 
 static int lme2510_kill_urb(struct usb_data_stream *stream)
@@ -786,45 +789,43 @@ static int dm04_lme2510_set_voltage(struct dvb_frontend 
*fe,
return (ret  0) ? -ENODEV : 0;
 }
 
+static int lme_name(struct dvb_usb_adapter *adap)
+{
+   struct lme2510_state *st = adap-dev-priv;
+   const char *desc = adap-dev-desc-name;
+   char *fe_name[] = {,  LG TDQY-P001F,  SHARP:BS2F7HZ7395};
+   char *name = adap-fe-ops.info.name;
+
+   strlcpy(name, desc, 128);
+   strlcat(name, fe_name[st-tuner_config], 128);
+
+   return 0;
+}
+
 static int dm04_lme2510_frontend_attach(struct dvb_usb_adapter *adap)
 {
-   int ret = 0;
struct lme2510_state *st = adap-dev-priv;
 
-   /* Interupt Start  */
-   ret = lme2510_int_service(adap);
-   if (ret  0) {
-   info(INT Unable to start Interupt Service);
-   return -ENODEV;
-   }
+   int ret = 0;
 
st-i2c_talk_onoff = 1;
-   st-i2c_gate = 4;
 
+   st-i2c_gate = 4;
adap-fe = dvb_attach(tda10086_attach, tda10086_config,
adap-dev-i2c_adap);
 
if (adap-fe) {
info(TUN Found Frontend TDA10086);
-   memcpy(adap-fe-ops.info.name,
-   DM04_LG_TDQY-P001F DVB-S, 24);
-   adap-fe-ops.set_voltage = dm04_lme2510_set_voltage;
st-i2c_tuner_gate_w = 4;
st-i2c_tuner_gate_r = 4;
st-i2c_tuner_addr = 0xc0;
-   if (dvb_attach(tda826x_attach, adap-fe, 0xc0,
-   adap-dev-i2c_adap, 1)) {
-   info(TUN TDA8263 Found);
-   st-tuner_config = TUNER_LG;
-   if (dvb_usb_lme2510_firmware != 1) {
-   dvb_usb_lme2510_firmware = 1;
-   lme_firmware_switch(adap-dev-udev, 1);
-   } else /*stops LG/Sharp multi tuner problems*/
-   dvb_usb_lme2510_firmware = 0;
-   return 0;
-   }
-   kfree(adap-fe);
-   adap-fe = NULL;
+   st-tuner_config = TUNER_LG;
+   if (dvb_usb_lme2510_firmware != 1) {
+   dvb_usb_lme2510_firmware = 1;
+   ret = lme_firmware_switch(adap-dev-udev, 1);
+   } else /*stops LG/Sharp multi tuner problems*/
+   dvb_usb_lme2510_firmware = 0;
+   goto end;
}
 
st-i2c_gate = 5;
@@ -833,28 +834,64 @@ static int dm04_lme2510_frontend_attach(struct 
dvb_usb_adapter *adap)
 
if (adap-fe) {
info(FE Found Stv0288);
-  

Re: [PATCH][Update_for_2.6.38] DM04/QQBOX Frontend attach change.

2010-12-03 Thread Mauro Carvalho Chehab
Em 27-11-2010 11:13, Malcolm Priestley escreveu:
 Driver Version v1.73 - Frontend attach change.
 To stop double rc registration in multi tuner environment or firmware change.
 
 Signed-off-by: Malcolm Priestley tvbox...@gmail.com
 
 
 diff --git a/drivers/media/dvb/dvb-usb/lmedm04.c 
 b/drivers/media/dvb/dvb-usb/lmedm04.c
 index 1455c23..dc3172f 100644
 --- a/drivers/media/dvb/dvb-usb/lmedm04.c
 +++ b/drivers/media/dvb/dvb-usb/lmedm04.c
 @@ -584,6 +584,7 @@ static int lme2510_int_service(struct dvb_usb_adapter 
 *adap)
   ret = lme2510_int_read(adap);
   if (ret  0) {
   rc_unregister_device(rc);
 + info(INT Unable to start Interupt Service);
   return -ENODEV;
   }
  
 @@ -674,7 +675,7 @@ static void lme_coldreset(struct usb_device *dev)
   return;
  }
  
 -static void lme_firmware_switch(struct usb_device *udev, int cold)
 +static int lme_firmware_switch(struct usb_device *udev, int cold)
  {
   const struct firmware *fw = NULL;
   char lme2510c_s7395[] = dvb-usb-lme2510c-s7395.fw;
 @@ -685,7 +686,7 @@ static void lme_firmware_switch(struct usb_device *udev, 
 int cold)
   cold = (cold  0) ? (cold  1) : 0;
  
   if (udev-descriptor.idProduct == 0x1122)
 - return;
 + return 0;
  
   switch (dvb_usb_lme2510_firmware) {
   case 0:
 @@ -715,10 +716,12 @@ static void lme_firmware_switch(struct usb_device 
 *udev, int cold)
  
   release_firmware(fw);
  
 - if (cold)
 + if (cold) {
   lme_coldreset(udev);
 + return -ENODEV;
 + }
  
 - return;
 + return ret;
  }
  
  static int lme2510_kill_urb(struct usb_data_stream *stream)
 @@ -786,45 +789,43 @@ static int dm04_lme2510_set_voltage(struct dvb_frontend 
 *fe,
   return (ret  0) ? -ENODEV : 0;
  }
  
 +static int lme_name(struct dvb_usb_adapter *adap)
 +{
 + struct lme2510_state *st = adap-dev-priv;
 + const char *desc = adap-dev-desc-name;
 + char *fe_name[] = {,  LG TDQY-P001F,  SHARP:BS2F7HZ7395};
 + char *name = adap-fe-ops.info.name;
 +
 + strcpy(name, desc);
 + strcat(name, fe_name[st-tuner_config]);

Please use, instead, strlcpy/strlcat, to avoid writing outside the buffer size.

 +
 + return 0;
 +}
 +
  static int dm04_lme2510_frontend_attach(struct dvb_usb_adapter *adap)
  {
 - int ret = 0;
   struct lme2510_state *st = adap-dev-priv;
  
 - /* Interupt Start  */
 - ret = lme2510_int_service(adap);
 - if (ret  0) {
 - info(INT Unable to start Interupt Service);
 - return -ENODEV;
 - }
 + int ret = 0;
  
   st-i2c_talk_onoff = 1;
 - st-i2c_gate = 4;
  
 + st-i2c_gate = 4;
   adap-fe = dvb_attach(tda10086_attach, tda10086_config,
   adap-dev-i2c_adap);
  
   if (adap-fe) {
   info(TUN Found Frontend TDA10086);
 - memcpy(adap-fe-ops.info.name,
 - DM04_LG_TDQY-P001F DVB-S, 24);
 - adap-fe-ops.set_voltage = dm04_lme2510_set_voltage;
   st-i2c_tuner_gate_w = 4;
   st-i2c_tuner_gate_r = 4;
   st-i2c_tuner_addr = 0xc0;
 - if (dvb_attach(tda826x_attach, adap-fe, 0xc0,
 - adap-dev-i2c_adap, 1)) {
 - info(TUN TDA8263 Found);
 - st-tuner_config = TUNER_LG;
 - if (dvb_usb_lme2510_firmware != 1) {
 - dvb_usb_lme2510_firmware = 1;
 - lme_firmware_switch(adap-dev-udev, 1);
 - } else /*stops LG/Sharp multi tuner problems*/
 - dvb_usb_lme2510_firmware = 0;
 - return 0;
 - }
 - kfree(adap-fe);
 - adap-fe = NULL;
 + st-tuner_config = TUNER_LG;
 + if (dvb_usb_lme2510_firmware != 1) {
 + dvb_usb_lme2510_firmware = 1;
 + ret = lme_firmware_switch(adap-dev-udev, 1);
 + } else /*stops LG/Sharp multi tuner problems*/
 + dvb_usb_lme2510_firmware = 0;
 + goto end;
   }
  
   st-i2c_gate = 5;
 @@ -833,28 +834,64 @@ static int dm04_lme2510_frontend_attach(struct 
 dvb_usb_adapter *adap)
  
   if (adap-fe) {
   info(FE Found Stv0288);
 - memcpy(adap-fe-ops.info.name,
 - DM04_SHARP:BS2F7HZ7395, 22);
 - adap-fe-ops.set_voltage = dm04_lme2510_set_voltage;
   st-i2c_tuner_gate_w = 4;
   st-i2c_tuner_gate_r = 5;
   st-i2c_tuner_addr = 0xc0;
 - if (dvb_attach(ix2505v_attach , adap-fe, lme_tuner,
 - adap-dev-i2c_adap)) {
 - st-tuner_config = TUNER_S7395;
 - info(TUN Sharp IX2505V silicon tuner);
 - if (dvb_usb_lme2510_firmware != 0) {
 -   

Re: [PATCH][Update_for_2.6.38] DM04/QQBOX Frontend attach change.

2010-12-03 Thread Malcolm Priestley
On Fri, 2010-12-03 at 09:32 -0200, Mauro Carvalho Chehab wrote:
 Em 27-11-2010 11:13, Malcolm Priestley escreveu:
  Driver Version v1.73 - Frontend attach change.
  To stop double rc registration in multi tuner environment or firmware 
  change.
  
  Signed-off-by: Malcolm Priestley tvbox...@gmail.com
  
  
  +   strcpy(name, desc);
  +   strcat(name, fe_name[st-tuner_config]);
 
 Please use, instead, strlcpy/strlcat, to avoid writing outside the buffer 
 size.
 
  +

Driver Version v1.74
Amended patch with change to strlcpy/strlcat.


Signed-off-by: Malcolm Priestley tvbox...@gmail.com


diff --git a/drivers/media/dvb/dvb-usb/lmedm04.c
b/drivers/media/dvb/dvb-usb/lmedm04.c
index 1455c23..9eea418 100644
--- a/drivers/media/dvb/dvb-usb/lmedm04.c
+++ b/drivers/media/dvb/dvb-usb/lmedm04.c
@@ -584,6 +584,7 @@ static int lme2510_int_service(struct
dvb_usb_adapter *adap)
ret = lme2510_int_read(adap);
if (ret  0) {
rc_unregister_device(rc);
+   info(INT Unable to start Interupt Service);
return -ENODEV;
}
 
@@ -674,7 +675,7 @@ static void lme_coldreset(struct usb_device *dev)
return;
 }
 
-static void lme_firmware_switch(struct usb_device *udev, int cold)
+static int lme_firmware_switch(struct usb_device *udev, int cold)
 {
const struct firmware *fw = NULL;
char lme2510c_s7395[] = dvb-usb-lme2510c-s7395.fw;
@@ -685,7 +686,7 @@ static void lme_firmware_switch(struct usb_device
*udev, int cold)
cold = (cold  0) ? (cold  1) : 0;
 
if (udev-descriptor.idProduct == 0x1122)
-   return;
+   return 0;
 
switch (dvb_usb_lme2510_firmware) {
case 0:
@@ -715,10 +716,12 @@ static void lme_firmware_switch(struct usb_device
*udev, int cold)
 
release_firmware(fw);
 
-   if (cold)
+   if (cold) {
lme_coldreset(udev);
+   return -ENODEV;
+   }
 
-   return;
+   return ret;
 }
 
 static int lme2510_kill_urb(struct usb_data_stream *stream)
@@ -786,45 +789,43 @@ static int dm04_lme2510_set_voltage(struct
dvb_frontend *fe,
return (ret  0) ? -ENODEV : 0;
 }
 
+static int lme_name(struct dvb_usb_adapter *adap)
+{
+   struct lme2510_state *st = adap-dev-priv;
+   const char *desc = adap-dev-desc-name;
+   char *fe_name[] = {,  LG TDQY-P001F,  SHARP:BS2F7HZ7395};
+   char *name = adap-fe-ops.info.name;
+
+   strlcpy(name, desc, 128);
+   strlcat(name, fe_name[st-tuner_config], 128);
+
+   return 0;
+}
+
 static int dm04_lme2510_frontend_attach(struct dvb_usb_adapter *adap)
 {
-   int ret = 0;
struct lme2510_state *st = adap-dev-priv;
 
-   /* Interupt Start  */
-   ret = lme2510_int_service(adap);
-   if (ret  0) {
-   info(INT Unable to start Interupt Service);
-   return -ENODEV;
-   }
+   int ret = 0;
 
st-i2c_talk_onoff = 1;
-   st-i2c_gate = 4;
 
+   st-i2c_gate = 4;
adap-fe = dvb_attach(tda10086_attach, tda10086_config,
adap-dev-i2c_adap);
 
if (adap-fe) {
info(TUN Found Frontend TDA10086);
-   memcpy(adap-fe-ops.info.name,
-   DM04_LG_TDQY-P001F DVB-S, 24);
-   adap-fe-ops.set_voltage = dm04_lme2510_set_voltage;
st-i2c_tuner_gate_w = 4;
st-i2c_tuner_gate_r = 4;
st-i2c_tuner_addr = 0xc0;
-   if (dvb_attach(tda826x_attach, adap-fe, 0xc0,
-   adap-dev-i2c_adap, 1)) {
-   info(TUN TDA8263 Found);
-   st-tuner_config = TUNER_LG;
-   if (dvb_usb_lme2510_firmware != 1) {
-   dvb_usb_lme2510_firmware = 1;
-   lme_firmware_switch(adap-dev-udev, 1);
-   } else /*stops LG/Sharp multi tuner problems*/
-   dvb_usb_lme2510_firmware = 0;
-   return 0;
-   }
-   kfree(adap-fe);
-   adap-fe = NULL;
+   st-tuner_config = TUNER_LG;
+   if (dvb_usb_lme2510_firmware != 1) {
+   dvb_usb_lme2510_firmware = 1;
+   ret = lme_firmware_switch(adap-dev-udev, 1);
+   } else /*stops LG/Sharp multi tuner problems*/
+   dvb_usb_lme2510_firmware = 0;
+   goto end;
}
 
st-i2c_gate = 5;
@@ -833,28 +834,64 @@ static int dm04_lme2510_frontend_attach(struct
dvb_usb_adapter *adap)
 
if (adap-fe) {
info(FE Found Stv0288);
-   memcpy(adap-fe-ops.info.name,
-   DM04_SHARP:BS2F7HZ7395, 22);
-   adap-fe-ops.set_voltage = dm04_lme2510_set_voltage;
st-i2c_tuner_gate_w = 4;
st-i2c_tuner_gate_r = 5;
st-i2c_tuner_addr = 0xc0;
-  

[PATCH][Update_for_2.6.38] DM04/QQBOX Frontend attach change - amended.

2010-12-03 Thread Malcolm Priestley
On Fri, 2010-12-03 at 09:32 -0200, Mauro Carvalho Chehab wrote:
 Em 27-11-2010 11:13, Malcolm Priestley escreveu:
  Driver Version v1.73 - Frontend attach change.
  To stop double rc registration in multi tuner environment or firmware 
  change.
  
  Signed-off-by: Malcolm Priestley tvbox...@gmail.com
  
  
  +   strcpy(name, desc);
  +   strcat(name, fe_name[st-tuner_config]);
 
 Please use, instead, strlcpy/strlcat, to avoid writing outside the buffer 
 size.
 
  +

Driver Version v1.74
Amended patch with change to strlcpy/strlcat.


Signed-off-by: Malcolm Priestley tvbox...@gmail.com


diff --git a/drivers/media/dvb/dvb-usb/lmedm04.c 
b/drivers/media/dvb/dvb-usb/lmedm04.c
index 1455c23..9eea418 100644
--- a/drivers/media/dvb/dvb-usb/lmedm04.c
+++ b/drivers/media/dvb/dvb-usb/lmedm04.c
@@ -584,6 +584,7 @@ static int lme2510_int_service(struct dvb_usb_adapter *adap)
ret = lme2510_int_read(adap);
if (ret  0) {
rc_unregister_device(rc);
+   info(INT Unable to start Interupt Service);
return -ENODEV;
}
 
@@ -674,7 +675,7 @@ static void lme_coldreset(struct usb_device *dev)
return;
 }
 
-static void lme_firmware_switch(struct usb_device *udev, int cold)
+static int lme_firmware_switch(struct usb_device *udev, int cold)
 {
const struct firmware *fw = NULL;
char lme2510c_s7395[] = dvb-usb-lme2510c-s7395.fw;
@@ -685,7 +686,7 @@ static void lme_firmware_switch(struct usb_device *udev, 
int cold)
cold = (cold  0) ? (cold  1) : 0;
 
if (udev-descriptor.idProduct == 0x1122)
-   return;
+   return 0;
 
switch (dvb_usb_lme2510_firmware) {
case 0:
@@ -715,10 +716,12 @@ static void lme_firmware_switch(struct usb_device *udev, 
int cold)
 
release_firmware(fw);
 
-   if (cold)
+   if (cold) {
lme_coldreset(udev);
+   return -ENODEV;
+   }
 
-   return;
+   return ret;
 }
 
 static int lme2510_kill_urb(struct usb_data_stream *stream)
@@ -786,45 +789,43 @@ static int dm04_lme2510_set_voltage(struct dvb_frontend 
*fe,
return (ret  0) ? -ENODEV : 0;
 }
 
+static int lme_name(struct dvb_usb_adapter *adap)
+{
+   struct lme2510_state *st = adap-dev-priv;
+   const char *desc = adap-dev-desc-name;
+   char *fe_name[] = {,  LG TDQY-P001F,  SHARP:BS2F7HZ7395};
+   char *name = adap-fe-ops.info.name;
+
+   strlcpy(name, desc, 128);
+   strlcat(name, fe_name[st-tuner_config], 128);
+
+   return 0;
+}
+
 static int dm04_lme2510_frontend_attach(struct dvb_usb_adapter *adap)
 {
-   int ret = 0;
struct lme2510_state *st = adap-dev-priv;
 
-   /* Interupt Start  */
-   ret = lme2510_int_service(adap);
-   if (ret  0) {
-   info(INT Unable to start Interupt Service);
-   return -ENODEV;
-   }
+   int ret = 0;
 
st-i2c_talk_onoff = 1;
-   st-i2c_gate = 4;
 
+   st-i2c_gate = 4;
adap-fe = dvb_attach(tda10086_attach, tda10086_config,
adap-dev-i2c_adap);
 
if (adap-fe) {
info(TUN Found Frontend TDA10086);
-   memcpy(adap-fe-ops.info.name,
-   DM04_LG_TDQY-P001F DVB-S, 24);
-   adap-fe-ops.set_voltage = dm04_lme2510_set_voltage;
st-i2c_tuner_gate_w = 4;
st-i2c_tuner_gate_r = 4;
st-i2c_tuner_addr = 0xc0;
-   if (dvb_attach(tda826x_attach, adap-fe, 0xc0,
-   adap-dev-i2c_adap, 1)) {
-   info(TUN TDA8263 Found);
-   st-tuner_config = TUNER_LG;
-   if (dvb_usb_lme2510_firmware != 1) {
-   dvb_usb_lme2510_firmware = 1;
-   lme_firmware_switch(adap-dev-udev, 1);
-   } else /*stops LG/Sharp multi tuner problems*/
-   dvb_usb_lme2510_firmware = 0;
-   return 0;
-   }
-   kfree(adap-fe);
-   adap-fe = NULL;
+   st-tuner_config = TUNER_LG;
+   if (dvb_usb_lme2510_firmware != 1) {
+   dvb_usb_lme2510_firmware = 1;
+   ret = lme_firmware_switch(adap-dev-udev, 1);
+   } else /*stops LG/Sharp multi tuner problems*/
+   dvb_usb_lme2510_firmware = 0;
+   goto end;
}
 
st-i2c_gate = 5;
@@ -833,28 +834,64 @@ static int dm04_lme2510_frontend_attach(struct 
dvb_usb_adapter *adap)
 
if (adap-fe) {
info(FE Found Stv0288);
-   memcpy(adap-fe-ops.info.name,
-   DM04_SHARP:BS2F7HZ7395, 22);
-   adap-fe-ops.set_voltage = dm04_lme2510_set_voltage;
st-i2c_tuner_gate_w = 4;
st-i2c_tuner_gate_r = 5;
st-i2c_tuner_addr = 0xc0;
- 

[PATCH][Update_for_2.6.38] DM04/QQBOX Frontend attach change.

2010-11-27 Thread Malcolm Priestley
Driver Version v1.73 - Frontend attach change.
To stop double rc registration in multi tuner environment or firmware change.

Signed-off-by: Malcolm Priestley tvbox...@gmail.com


diff --git a/drivers/media/dvb/dvb-usb/lmedm04.c 
b/drivers/media/dvb/dvb-usb/lmedm04.c
index 1455c23..dc3172f 100644
--- a/drivers/media/dvb/dvb-usb/lmedm04.c
+++ b/drivers/media/dvb/dvb-usb/lmedm04.c
@@ -584,6 +584,7 @@ static int lme2510_int_service(struct dvb_usb_adapter *adap)
ret = lme2510_int_read(adap);
if (ret  0) {
rc_unregister_device(rc);
+   info(INT Unable to start Interupt Service);
return -ENODEV;
}
 
@@ -674,7 +675,7 @@ static void lme_coldreset(struct usb_device *dev)
return;
 }
 
-static void lme_firmware_switch(struct usb_device *udev, int cold)
+static int lme_firmware_switch(struct usb_device *udev, int cold)
 {
const struct firmware *fw = NULL;
char lme2510c_s7395[] = dvb-usb-lme2510c-s7395.fw;
@@ -685,7 +686,7 @@ static void lme_firmware_switch(struct usb_device *udev, 
int cold)
cold = (cold  0) ? (cold  1) : 0;
 
if (udev-descriptor.idProduct == 0x1122)
-   return;
+   return 0;
 
switch (dvb_usb_lme2510_firmware) {
case 0:
@@ -715,10 +716,12 @@ static void lme_firmware_switch(struct usb_device *udev, 
int cold)
 
release_firmware(fw);
 
-   if (cold)
+   if (cold) {
lme_coldreset(udev);
+   return -ENODEV;
+   }
 
-   return;
+   return ret;
 }
 
 static int lme2510_kill_urb(struct usb_data_stream *stream)
@@ -786,45 +789,43 @@ static int dm04_lme2510_set_voltage(struct dvb_frontend 
*fe,
return (ret  0) ? -ENODEV : 0;
 }
 
+static int lme_name(struct dvb_usb_adapter *adap)
+{
+   struct lme2510_state *st = adap-dev-priv;
+   const char *desc = adap-dev-desc-name;
+   char *fe_name[] = {,  LG TDQY-P001F,  SHARP:BS2F7HZ7395};
+   char *name = adap-fe-ops.info.name;
+
+   strcpy(name, desc);
+   strcat(name, fe_name[st-tuner_config]);
+
+   return 0;
+}
+
 static int dm04_lme2510_frontend_attach(struct dvb_usb_adapter *adap)
 {
-   int ret = 0;
struct lme2510_state *st = adap-dev-priv;
 
-   /* Interupt Start  */
-   ret = lme2510_int_service(adap);
-   if (ret  0) {
-   info(INT Unable to start Interupt Service);
-   return -ENODEV;
-   }
+   int ret = 0;
 
st-i2c_talk_onoff = 1;
-   st-i2c_gate = 4;
 
+   st-i2c_gate = 4;
adap-fe = dvb_attach(tda10086_attach, tda10086_config,
adap-dev-i2c_adap);
 
if (adap-fe) {
info(TUN Found Frontend TDA10086);
-   memcpy(adap-fe-ops.info.name,
-   DM04_LG_TDQY-P001F DVB-S, 24);
-   adap-fe-ops.set_voltage = dm04_lme2510_set_voltage;
st-i2c_tuner_gate_w = 4;
st-i2c_tuner_gate_r = 4;
st-i2c_tuner_addr = 0xc0;
-   if (dvb_attach(tda826x_attach, adap-fe, 0xc0,
-   adap-dev-i2c_adap, 1)) {
-   info(TUN TDA8263 Found);
-   st-tuner_config = TUNER_LG;
-   if (dvb_usb_lme2510_firmware != 1) {
-   dvb_usb_lme2510_firmware = 1;
-   lme_firmware_switch(adap-dev-udev, 1);
-   } else /*stops LG/Sharp multi tuner problems*/
-   dvb_usb_lme2510_firmware = 0;
-   return 0;
-   }
-   kfree(adap-fe);
-   adap-fe = NULL;
+   st-tuner_config = TUNER_LG;
+   if (dvb_usb_lme2510_firmware != 1) {
+   dvb_usb_lme2510_firmware = 1;
+   ret = lme_firmware_switch(adap-dev-udev, 1);
+   } else /*stops LG/Sharp multi tuner problems*/
+   dvb_usb_lme2510_firmware = 0;
+   goto end;
}
 
st-i2c_gate = 5;
@@ -833,28 +834,64 @@ static int dm04_lme2510_frontend_attach(struct 
dvb_usb_adapter *adap)
 
if (adap-fe) {
info(FE Found Stv0288);
-   memcpy(adap-fe-ops.info.name,
-   DM04_SHARP:BS2F7HZ7395, 22);
-   adap-fe-ops.set_voltage = dm04_lme2510_set_voltage;
st-i2c_tuner_gate_w = 4;
st-i2c_tuner_gate_r = 5;
st-i2c_tuner_addr = 0xc0;
-   if (dvb_attach(ix2505v_attach , adap-fe, lme_tuner,
-   adap-dev-i2c_adap)) {
-   st-tuner_config = TUNER_S7395;
-   info(TUN Sharp IX2505V silicon tuner);
-   if (dvb_usb_lme2510_firmware != 0) {
-   dvb_usb_lme2510_firmware = 0;
-