Lines Matching refs:dvbdev

88 	struct dvb_device *dvbdev;  in dvb_device_open()  local
97 dvbdev = dvb_minors[minor]; in dvb_device_open()
99 if (dvbdev && dvbdev->fops) { in dvb_device_open()
103 new_fops = fops_get(dvbdev->fops); in dvb_device_open()
106 file->private_data = dvb_device_get(dvbdev); in dvb_device_open()
113 dvb_device_put(dvbdev); in dvb_device_open()
132 struct dvb_device *dvbdev = file->private_data; in dvb_generic_open() local
134 if (!dvbdev) in dvb_generic_open()
137 if (!dvbdev->users) in dvb_generic_open()
141 if (!dvbdev->readers) in dvb_generic_open()
143 dvbdev->readers--; in dvb_generic_open()
145 if (!dvbdev->writers) in dvb_generic_open()
147 dvbdev->writers--; in dvb_generic_open()
150 dvbdev->users--; in dvb_generic_open()
157 struct dvb_device *dvbdev = file->private_data; in dvb_generic_release() local
159 if (!dvbdev) in dvb_generic_release()
163 dvbdev->readers++; in dvb_generic_release()
165 dvbdev->writers++; in dvb_generic_release()
167 dvbdev->users++; in dvb_generic_release()
169 dvb_device_put(dvbdev); in dvb_generic_release()
178 struct dvb_device *dvbdev = file->private_data; in dvb_generic_ioctl() local
180 if (!dvbdev) in dvb_generic_ioctl()
183 if (!dvbdev->kernel_ioctl) in dvb_generic_ioctl()
186 return dvb_usercopy(file, cmd, arg, dvbdev->kernel_ioctl); in dvb_generic_ioctl()
207 static void dvb_media_device_free(struct dvb_device *dvbdev) in dvb_media_device_free() argument
210 if (dvbdev->entity) { in dvb_media_device_free()
211 media_device_unregister_entity(dvbdev->entity); in dvb_media_device_free()
212 kfree(dvbdev->entity); in dvb_media_device_free()
213 kfree(dvbdev->pads); in dvb_media_device_free()
214 dvbdev->entity = NULL; in dvb_media_device_free()
215 dvbdev->pads = NULL; in dvb_media_device_free()
218 if (dvbdev->tsout_entity) { in dvb_media_device_free()
221 for (i = 0; i < dvbdev->tsout_num_entities; i++) { in dvb_media_device_free()
222 media_device_unregister_entity(&dvbdev->tsout_entity[i]); in dvb_media_device_free()
223 kfree(dvbdev->tsout_entity[i].name); in dvb_media_device_free()
225 kfree(dvbdev->tsout_entity); in dvb_media_device_free()
226 kfree(dvbdev->tsout_pads); in dvb_media_device_free()
227 dvbdev->tsout_entity = NULL; in dvb_media_device_free()
228 dvbdev->tsout_pads = NULL; in dvb_media_device_free()
230 dvbdev->tsout_num_entities = 0; in dvb_media_device_free()
233 if (dvbdev->intf_devnode) { in dvb_media_device_free()
234 media_devnode_remove(dvbdev->intf_devnode); in dvb_media_device_free()
235 dvbdev->intf_devnode = NULL; in dvb_media_device_free()
238 if (dvbdev->adapter->conn) { in dvb_media_device_free()
239 media_device_unregister_entity(dvbdev->adapter->conn); in dvb_media_device_free()
240 kfree(dvbdev->adapter->conn); in dvb_media_device_free()
241 dvbdev->adapter->conn = NULL; in dvb_media_device_free()
242 kfree(dvbdev->adapter->conn_pads); in dvb_media_device_free()
243 dvbdev->adapter->conn_pads = NULL; in dvb_media_device_free()
249 static int dvb_create_tsout_entity(struct dvb_device *dvbdev, in dvb_create_tsout_entity() argument
254 dvbdev->tsout_pads = kcalloc(npads, sizeof(*dvbdev->tsout_pads), in dvb_create_tsout_entity()
256 if (!dvbdev->tsout_pads) in dvb_create_tsout_entity()
259 dvbdev->tsout_entity = kcalloc(npads, sizeof(*dvbdev->tsout_entity), in dvb_create_tsout_entity()
261 if (!dvbdev->tsout_entity) in dvb_create_tsout_entity()
264 dvbdev->tsout_num_entities = npads; in dvb_create_tsout_entity()
267 struct media_pad *pads = &dvbdev->tsout_pads[i]; in dvb_create_tsout_entity()
268 struct media_entity *entity = &dvbdev->tsout_entity[i]; in dvb_create_tsout_entity()
282 ret = media_device_register_entity(dvbdev->adapter->mdev, in dvb_create_tsout_entity()
293 static int dvb_create_media_entity(struct dvb_device *dvbdev, in dvb_create_media_entity() argument
303 ret = dvb_create_tsout_entity(dvbdev, DVR_TSOUT, in dvb_create_media_entity()
308 ret = dvb_create_tsout_entity(dvbdev, DEMUX_TSOUT, in dvb_create_media_entity()
331 dvbdev->entity = kzalloc(sizeof(*dvbdev->entity), GFP_KERNEL); in dvb_create_media_entity()
332 if (!dvbdev->entity) in dvb_create_media_entity()
335 dvbdev->entity->name = dvbdev->name; in dvb_create_media_entity()
338 dvbdev->pads = kcalloc(npads, sizeof(*dvbdev->pads), in dvb_create_media_entity()
340 if (!dvbdev->pads) { in dvb_create_media_entity()
341 kfree(dvbdev->entity); in dvb_create_media_entity()
342 dvbdev->entity = NULL; in dvb_create_media_entity()
349 dvbdev->entity->function = MEDIA_ENT_F_DTV_DEMOD; in dvb_create_media_entity()
350 dvbdev->pads[0].flags = MEDIA_PAD_FL_SINK; in dvb_create_media_entity()
351 dvbdev->pads[1].flags = MEDIA_PAD_FL_SOURCE; in dvb_create_media_entity()
354 dvbdev->entity->function = MEDIA_ENT_F_TS_DEMUX; in dvb_create_media_entity()
355 dvbdev->pads[0].flags = MEDIA_PAD_FL_SINK; in dvb_create_media_entity()
357 dvbdev->pads[i].flags = MEDIA_PAD_FL_SOURCE; in dvb_create_media_entity()
360 dvbdev->entity->function = MEDIA_ENT_F_DTV_CA; in dvb_create_media_entity()
361 dvbdev->pads[0].flags = MEDIA_PAD_FL_SINK; in dvb_create_media_entity()
362 dvbdev->pads[1].flags = MEDIA_PAD_FL_SOURCE; in dvb_create_media_entity()
366 kfree(dvbdev->entity); in dvb_create_media_entity()
367 kfree(dvbdev->pads); in dvb_create_media_entity()
368 dvbdev->entity = NULL; in dvb_create_media_entity()
369 dvbdev->pads = NULL; in dvb_create_media_entity()
374 ret = media_entity_pads_init(dvbdev->entity, npads, dvbdev->pads); in dvb_create_media_entity()
378 ret = media_device_register_entity(dvbdev->adapter->mdev, in dvb_create_media_entity()
379 dvbdev->entity); in dvb_create_media_entity()
384 __func__, dvbdev->entity->name); in dvb_create_media_entity()
390 static int dvb_register_media_device(struct dvb_device *dvbdev, in dvb_register_media_device() argument
399 if (!dvbdev->adapter->mdev) in dvb_register_media_device()
402 ret = dvb_create_media_entity(dvbdev, type, demux_sink_pads); in dvb_register_media_device()
426 dvbdev->intf_devnode = media_devnode_create(dvbdev->adapter->mdev, in dvb_register_media_device()
430 if (!dvbdev->intf_devnode) in dvb_register_media_device()
441 if (!dvbdev->entity) in dvb_register_media_device()
444 link = media_create_intf_link(dvbdev->entity, in dvb_register_media_device()
445 &dvbdev->intf_devnode->intf, in dvb_register_media_device()
458 struct dvb_device *dvbdev; in dvb_register_device() local
475 *pdvbdev = dvbdev = kzalloc(sizeof(*dvbdev), GFP_KERNEL); in dvb_register_device()
476 if (!dvbdev) { in dvb_register_device()
497 kfree(dvbdev); in dvb_register_device()
506 kfree(dvbdev); in dvb_register_device()
518 memcpy(dvbdev, template, sizeof(struct dvb_device)); in dvb_register_device()
519 kref_init(&dvbdev->ref); in dvb_register_device()
520 dvbdev->type = type; in dvb_register_device()
521 dvbdev->id = id; in dvb_register_device()
522 dvbdev->adapter = adap; in dvb_register_device()
523 dvbdev->priv = priv; in dvb_register_device()
524 dvbdev->fops = dvbdevfops; in dvb_register_device()
525 init_waitqueue_head(&dvbdev->wait_queue); in dvb_register_device()
527 list_add_tail(&dvbdev->list_head, &adap->device_list); in dvb_register_device()
542 list_del(&dvbdev->list_head); in dvb_register_device()
543 kfree(dvbdev); in dvb_register_device()
550 dvbdev->minor = minor; in dvb_register_device()
551 dvb_minors[minor] = dvb_device_get(dvbdev); in dvb_register_device()
553 ret = dvb_register_media_device(dvbdev, type, minor, demux_sink_pads); in dvb_register_device()
562 dvb_media_device_free(dvbdev); in dvb_register_device()
563 list_del(&dvbdev->list_head); in dvb_register_device()
564 kfree(dvbdev); in dvb_register_device()
572 dvbdev, "dvb%d.%s%d", adap->num, dnames[type], id); in dvb_register_device()
581 dvb_media_device_free(dvbdev); in dvb_register_device()
582 list_del(&dvbdev->list_head); in dvb_register_device()
583 kfree(dvbdev); in dvb_register_device()
597 void dvb_remove_device(struct dvb_device *dvbdev) in dvb_remove_device() argument
599 if (!dvbdev) in dvb_remove_device()
603 dvb_minors[dvbdev->minor] = NULL; in dvb_remove_device()
604 dvb_device_put(dvbdev); in dvb_remove_device()
607 dvb_media_device_free(dvbdev); in dvb_remove_device()
609 device_destroy(dvb_class, MKDEV(DVB_MAJOR, dvbdev->minor)); in dvb_remove_device()
611 list_del(&dvbdev->list_head); in dvb_remove_device()
617 struct dvb_device *dvbdev = container_of(ref, struct dvb_device, ref); in dvb_free_device() local
619 kfree(dvbdev); in dvb_free_device()
622 struct dvb_device *dvb_device_get(struct dvb_device *dvbdev) in dvb_device_get() argument
624 kref_get(&dvbdev->ref); in dvb_device_get()
625 return dvbdev; in dvb_device_get()
629 void dvb_device_put(struct dvb_device *dvbdev) in dvb_device_put() argument
631 if (dvbdev) in dvb_device_put()
632 kref_put(&dvbdev->ref, dvb_free_device); in dvb_device_put()
635 void dvb_unregister_device(struct dvb_device *dvbdev) in dvb_unregister_device() argument
637 dvb_remove_device(dvbdev); in dvb_unregister_device()
638 dvb_device_put(dvbdev); in dvb_unregister_device()
1071 const struct dvb_device *dvbdev = dev_get_drvdata(dev); in dvb_uevent() local
1073 add_uevent_var(env, "DVB_ADAPTER_NUM=%d", dvbdev->adapter->num); in dvb_uevent()
1074 add_uevent_var(env, "DVB_DEVICE_TYPE=%s", dnames[dvbdev->type]); in dvb_uevent()
1075 add_uevent_var(env, "DVB_DEVICE_NUM=%d", dvbdev->id); in dvb_uevent()
1081 const struct dvb_device *dvbdev = dev_get_drvdata(dev); in dvb_devnode() local
1084 dvbdev->adapter->num, dnames[dvbdev->type], dvbdev->id); in dvb_devnode()