aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMauro Carvalho Chehab <mchehab@osg.samsung.com>2015-09-04 14:33:46 -0400
committerMauro Carvalho Chehab <mchehab@osg.samsung.com>2016-01-11 09:18:59 -0500
commit0d3ab8410dcb60aef2104231ba817037b3ba73bd (patch)
treeced0091bb244d4f5b64a04bfde9a314e9e960e69
parent13f6e8887a1f61764a05a3348476d38071201f08 (diff)
[media] dvb core: must check dvb_create_media_graph()
If media controller is enabled and mdev is filled, it should ensure that the media graph will be properly initialized. Enforce that. Acked-by: Hans Verkuil <hans.verkuil@cisco.com> Signed-off-by: Mauro Carvalho Chehab <mchehab@osg.samsung.com>
-rw-r--r--drivers/media/common/siano/smsdvb-main.c6
-rw-r--r--drivers/media/dvb-core/dvbdev.h2
-rw-r--r--drivers/media/usb/au0828/au0828-dvb.c8
-rw-r--r--drivers/media/usb/cx231xx/cx231xx-dvb.c6
-rw-r--r--drivers/media/usb/dvb-usb-v2/dvb_usb_core.c4
-rw-r--r--drivers/media/usb/dvb-usb/dvb-usb-dvb.c6
6 files changed, 23 insertions, 9 deletions
diff --git a/drivers/media/common/siano/smsdvb-main.c b/drivers/media/common/siano/smsdvb-main.c
index f4305ae800f4..ab345490a43a 100644
--- a/drivers/media/common/siano/smsdvb-main.c
+++ b/drivers/media/common/siano/smsdvb-main.c
@@ -1183,7 +1183,11 @@ static int smsdvb_hotplug(struct smscore_device_t *coredev,
1183 if (smsdvb_debugfs_create(client) < 0) 1183 if (smsdvb_debugfs_create(client) < 0)
1184 pr_info("failed to create debugfs node\n"); 1184 pr_info("failed to create debugfs node\n");
1185 1185
1186 dvb_create_media_graph(&client->adapter); 1186 rc = dvb_create_media_graph(&client->adapter);
1187 if (rc < 0) {
1188 pr_err("dvb_create_media_graph failed %d\n", rc);
1189 goto client_error;
1190 }
1187 1191
1188 pr_info("DVB interface registered.\n"); 1192 pr_info("DVB interface registered.\n");
1189 return 0; 1193 return 0;
diff --git a/drivers/media/dvb-core/dvbdev.h b/drivers/media/dvb-core/dvbdev.h
index 3840dd62bfee..de85ba0f570a 100644
--- a/drivers/media/dvb-core/dvbdev.h
+++ b/drivers/media/dvb-core/dvbdev.h
@@ -206,7 +206,7 @@ int dvb_register_device(struct dvb_adapter *adap,
206void dvb_unregister_device(struct dvb_device *dvbdev); 206void dvb_unregister_device(struct dvb_device *dvbdev);
207 207
208#ifdef CONFIG_MEDIA_CONTROLLER_DVB 208#ifdef CONFIG_MEDIA_CONTROLLER_DVB
209int dvb_create_media_graph(struct dvb_adapter *adap); 209__must_check int dvb_create_media_graph(struct dvb_adapter *adap);
210static inline void dvb_register_media_controller(struct dvb_adapter *adap, 210static inline void dvb_register_media_controller(struct dvb_adapter *adap,
211 struct media_device *mdev) 211 struct media_device *mdev)
212{ 212{
diff --git a/drivers/media/usb/au0828/au0828-dvb.c b/drivers/media/usb/au0828/au0828-dvb.c
index c01772c4f9f0..cd542b49a6c2 100644
--- a/drivers/media/usb/au0828/au0828-dvb.c
+++ b/drivers/media/usb/au0828/au0828-dvb.c
@@ -486,12 +486,14 @@ static int dvb_register(struct au0828_dev *dev)
486 dvb->start_count = 0; 486 dvb->start_count = 0;
487 dvb->stop_count = 0; 487 dvb->stop_count = 0;
488 488
489#ifdef CONFIG_MEDIA_CONTROLLER_DVB 489 result = dvb_create_media_graph(&dvb->adapter);
490 dvb_create_media_graph(&dvb->adapter); 490 if (result < 0)
491#endif 491 goto fail_create_graph;
492 492
493 return 0; 493 return 0;
494 494
495fail_create_graph:
496 dvb_net_release(&dvb->net);
495fail_fe_conn: 497fail_fe_conn:
496 dvb->demux.dmx.remove_frontend(&dvb->demux.dmx, &dvb->fe_mem); 498 dvb->demux.dmx.remove_frontend(&dvb->demux.dmx, &dvb->fe_mem);
497fail_fe_mem: 499fail_fe_mem:
diff --git a/drivers/media/usb/cx231xx/cx231xx-dvb.c b/drivers/media/usb/cx231xx/cx231xx-dvb.c
index e3594b9fab4a..b7552d20ebdb 100644
--- a/drivers/media/usb/cx231xx/cx231xx-dvb.c
+++ b/drivers/media/usb/cx231xx/cx231xx-dvb.c
@@ -551,10 +551,14 @@ static int register_dvb(struct cx231xx_dvb *dvb,
551 551
552 /* register network adapter */ 552 /* register network adapter */
553 dvb_net_init(&dvb->adapter, &dvb->net, &dvb->demux.dmx); 553 dvb_net_init(&dvb->adapter, &dvb->net, &dvb->demux.dmx);
554 dvb_create_media_graph(&dvb->adapter); 554 result = dvb_create_media_graph(&dvb->adapter);
555 if (result < 0)
556 goto fail_create_graph;
555 557
556 return 0; 558 return 0;
557 559
560fail_create_graph:
561 dvb_net_release(&dvb->net);
558fail_fe_conn: 562fail_fe_conn:
559 dvb->demux.dmx.remove_frontend(&dvb->demux.dmx, &dvb->fe_mem); 563 dvb->demux.dmx.remove_frontend(&dvb->demux.dmx, &dvb->fe_mem);
560fail_fe_mem: 564fail_fe_mem:
diff --git a/drivers/media/usb/dvb-usb-v2/dvb_usb_core.c b/drivers/media/usb/dvb-usb-v2/dvb_usb_core.c
index f5df9eaba04f..6d3f61f6dc77 100644
--- a/drivers/media/usb/dvb-usb-v2/dvb_usb_core.c
+++ b/drivers/media/usb/dvb-usb-v2/dvb_usb_core.c
@@ -698,7 +698,9 @@ static int dvb_usbv2_adapter_frontend_init(struct dvb_usb_adapter *adap)
698 } 698 }
699 } 699 }
700 700
701 dvb_create_media_graph(&adap->dvb_adap); 701 ret = dvb_create_media_graph(&adap->dvb_adap);
702 if (ret < 0)
703 goto err_dvb_unregister_frontend;
702 704
703 return 0; 705 return 0;
704 706
diff --git a/drivers/media/usb/dvb-usb/dvb-usb-dvb.c b/drivers/media/usb/dvb-usb/dvb-usb-dvb.c
index 8a260c854653..b51dbdf03f42 100644
--- a/drivers/media/usb/dvb-usb/dvb-usb-dvb.c
+++ b/drivers/media/usb/dvb-usb/dvb-usb-dvb.c
@@ -318,10 +318,12 @@ int dvb_usb_adapter_frontend_init(struct dvb_usb_adapter *adap)
318 318
319 adap->num_frontends_initialized++; 319 adap->num_frontends_initialized++;
320 } 320 }
321 if (ret)
322 return ret;
321 323
322 dvb_create_media_graph(&adap->dvb_adap); 324 ret = dvb_create_media_graph(&adap->dvb_adap);
323 325
324 return 0; 326 return ret;
325} 327}
326 328
327int dvb_usb_adapter_frontend_exit(struct dvb_usb_adapter *adap) 329int dvb_usb_adapter_frontend_exit(struct dvb_usb_adapter *adap)