From 70bfae5aaf7254f3cdfc1647441ff2b595933f09 Mon Sep 17 00:00:00 2001
From: Michel Ludwig <michel.ludwig@gmail.com>
Date: Mon, 19 Nov 2007 06:10:54 -0300
Subject: [PATCH] V4L/DVB (12818): tm6000: Use dvb_frontend_detach instead of
 single symbol_put commands

Thanks to Mike Krufky for pointed that one out. Also include some minor
cleanups.

Signed-off-by: Michel Ludwig <michel.ludwig@gmail.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
---
 drivers/staging/tm6000/hack.c       |  3 ++-
 drivers/staging/tm6000/tm6000-dvb.c | 19 +++++--------------
 2 files changed, 7 insertions(+), 15 deletions(-)

diff --git a/drivers/staging/tm6000/hack.c b/drivers/staging/tm6000/hack.c
index 87f3f498e8eb..f181fce6716b 100644
--- a/drivers/staging/tm6000/hack.c
+++ b/drivers/staging/tm6000/hack.c
@@ -237,8 +237,9 @@ struct dvb_frontend* pseudo_zl10353_attach(struct tm6000_core *dev,
 {
 	struct tm6000_dvb *dvb = dev->dvb;
 
-	dvb->frontend = zl10353_attach(config, i2c);
+	dvb->frontend = dvb_attach(zl10353_attach, config, i2c);
 	if(!dvb->frontend) {
+		printk(KERN_ERR "Error during zl10353_attach!\n");
 		return NULL;
 	}
 
diff --git a/drivers/staging/tm6000/tm6000-dvb.c b/drivers/staging/tm6000/tm6000-dvb.c
index b423795f0017..fa6d3a00f9b0 100644
--- a/drivers/staging/tm6000/tm6000-dvb.c
+++ b/drivers/staging/tm6000/tm6000-dvb.c
@@ -205,12 +205,7 @@ int tm6000_dvb_attach_frontend(struct tm6000_core *dev)
 		return -1;
 	}
 
-	if(dvb->frontend) {
-		return 0;
-	}
-	else {
-		return -1;
-	}
+	return (!dvb->frontend) ? -1 : 0;
 }
 
 int tm6000_dvb_register(struct tm6000_core *dev)
@@ -226,7 +221,7 @@ int tm6000_dvb_register(struct tm6000_core *dev)
 	ret = tm6000_dvb_attach_frontend(dev);
 	if(ret < 0) {
 		printk(KERN_ERR "tm6000: couldn't attach the frontend!\n");
-//		goto err;
+		goto err;
 	}
 
 	ret = dvb_register_adapter(&dvb->adapter, "Trident TVMaster 6000 DVB-T",
@@ -250,7 +245,7 @@ int tm6000_dvb_register(struct tm6000_core *dev)
 			printk(KERN_ERR "tm6000: couldn't register "
 					"frontend (xc3028)\n");
 			ret = -EINVAL;
-			goto adapter_err;
+			goto frontend_err;
 		}
 		printk(KERN_INFO "tm6000: XC2028/3028 asked to be "
 				 "attached to frontend!\n");
@@ -288,10 +283,8 @@ int tm6000_dvb_register(struct tm6000_core *dev)
 	dvb_dmx_release(&dvb->demux);
 frontend_err:
 	if(dvb->frontend) {
+		dvb_frontend_detach(dvb->frontend);
 		dvb_unregister_frontend(dvb->frontend);
-#ifdef CONFIG_DVB_CORE_ATTACH
-		symbol_put(xc3028_attach);
-#endif
 	}
 adapter_err:
 	dvb_unregister_adapter(&dvb->adapter);
@@ -314,10 +307,8 @@ void tm6000_dvb_unregister(struct tm6000_core *dev)
 
 // 	mutex_lock(&tm6000_driver.open_close_mutex);
 	if(dvb->frontend) {
+		dvb_frontend_detach(dvb->frontend);
 		dvb_unregister_frontend(dvb->frontend);
-#ifdef CONFIG_DVB_CORE_ATTACH
-		symbol_put(xc3028_attach);
-#endif
 	}
 
 	dvb_dmxdev_release(&dvb->dmxdev);
-- 
2.30.9