V4L/DVB (13222): pvrusb2: Make more info available to udev
pvrusb2: Associate V4L device node in sysfs with the underlying USB device. This opens the door to device information tracking in udev Signed-off-by: Mike Isely <isely@pobox.com> Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
This commit is contained in:
parent
5abaa530bf
commit
4a89baa2e1
1 changed files with 14 additions and 1 deletions
|
@ -913,6 +913,15 @@ static void pvr2_v4l2_dev_destroy(struct pvr2_v4l2_dev *dip)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static void pvr2_v4l2_dev_disassociate_parent(struct pvr2_v4l2_dev *dip)
|
||||||
|
{
|
||||||
|
if (!dip) return;
|
||||||
|
if (!dip->devbase.parent) return;
|
||||||
|
dip->devbase.parent = NULL;
|
||||||
|
device_move(&dip->devbase.dev, NULL, DPM_ORDER_NONE);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
static void pvr2_v4l2_destroy_no_lock(struct pvr2_v4l2 *vp)
|
static void pvr2_v4l2_destroy_no_lock(struct pvr2_v4l2 *vp)
|
||||||
{
|
{
|
||||||
if (vp->dev_video) {
|
if (vp->dev_video) {
|
||||||
|
@ -943,6 +952,8 @@ static void pvr2_v4l2_internal_check(struct pvr2_channel *chp)
|
||||||
struct pvr2_v4l2 *vp;
|
struct pvr2_v4l2 *vp;
|
||||||
vp = container_of(chp,struct pvr2_v4l2,channel);
|
vp = container_of(chp,struct pvr2_v4l2,channel);
|
||||||
if (!vp->channel.mc_head->disconnect_flag) return;
|
if (!vp->channel.mc_head->disconnect_flag) return;
|
||||||
|
pvr2_v4l2_dev_disassociate_parent(vp->dev_video);
|
||||||
|
pvr2_v4l2_dev_disassociate_parent(vp->dev_radio);
|
||||||
if (vp->vfirst) return;
|
if (vp->vfirst) return;
|
||||||
pvr2_v4l2_destroy_no_lock(vp);
|
pvr2_v4l2_destroy_no_lock(vp);
|
||||||
}
|
}
|
||||||
|
@ -1250,12 +1261,13 @@ static void pvr2_v4l2_dev_init(struct pvr2_v4l2_dev *dip,
|
||||||
struct pvr2_v4l2 *vp,
|
struct pvr2_v4l2 *vp,
|
||||||
int v4l_type)
|
int v4l_type)
|
||||||
{
|
{
|
||||||
|
struct usb_device *usbdev;
|
||||||
int mindevnum;
|
int mindevnum;
|
||||||
int unit_number;
|
int unit_number;
|
||||||
int *nr_ptr = NULL;
|
int *nr_ptr = NULL;
|
||||||
dip->v4lp = vp;
|
dip->v4lp = vp;
|
||||||
|
|
||||||
|
usbdev = pvr2_hdw_get_dev(vp->channel.mc_head->hdw);
|
||||||
dip->v4l_type = v4l_type;
|
dip->v4l_type = v4l_type;
|
||||||
switch (v4l_type) {
|
switch (v4l_type) {
|
||||||
case VFL_TYPE_GRABBER:
|
case VFL_TYPE_GRABBER:
|
||||||
|
@ -1296,6 +1308,7 @@ static void pvr2_v4l2_dev_init(struct pvr2_v4l2_dev *dip,
|
||||||
if (nr_ptr && (unit_number >= 0) && (unit_number < PVR_NUM)) {
|
if (nr_ptr && (unit_number >= 0) && (unit_number < PVR_NUM)) {
|
||||||
mindevnum = nr_ptr[unit_number];
|
mindevnum = nr_ptr[unit_number];
|
||||||
}
|
}
|
||||||
|
dip->devbase.parent = &usbdev->dev;
|
||||||
if ((video_register_device(&dip->devbase,
|
if ((video_register_device(&dip->devbase,
|
||||||
dip->v4l_type, mindevnum) < 0) &&
|
dip->v4l_type, mindevnum) < 0) &&
|
||||||
(video_register_device(&dip->devbase,
|
(video_register_device(&dip->devbase,
|
||||||
|
|
Loading…
Add table
Reference in a new issue