diff options
Diffstat (limited to 'drivers')
| -rw-r--r-- | drivers/media/media-device.c | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/drivers/media/media-device.c b/drivers/media/media-device.c index 7dae0ac0f3ae..e9219f528d7e 100644 --- a/drivers/media/media-device.c +++ b/drivers/media/media-device.c | |||
| @@ -20,6 +20,9 @@ | |||
| 20 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | 20 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
| 21 | */ | 21 | */ |
| 22 | 22 | ||
| 23 | /* We need to access legacy defines from linux/media.h */ | ||
| 24 | #define __NEED_MEDIA_LEGACY_API | ||
| 25 | |||
| 23 | #include <linux/compat.h> | 26 | #include <linux/compat.h> |
| 24 | #include <linux/export.h> | 27 | #include <linux/export.h> |
| 25 | #include <linux/idr.h> | 28 | #include <linux/idr.h> |
| @@ -115,6 +118,26 @@ static long media_device_enum_entities(struct media_device *mdev, | |||
| 115 | u_ent.group_id = 0; /* Unused */ | 118 | u_ent.group_id = 0; /* Unused */ |
| 116 | u_ent.pads = ent->num_pads; | 119 | u_ent.pads = ent->num_pads; |
| 117 | u_ent.links = ent->num_links - ent->num_backlinks; | 120 | u_ent.links = ent->num_links - ent->num_backlinks; |
| 121 | |||
| 122 | /* | ||
| 123 | * Workaround for a bug at media-ctl <= v1.10 that makes it to | ||
| 124 | * do the wrong thing if the entity function doesn't belong to | ||
| 125 | * either MEDIA_ENT_F_OLD_BASE or MEDIA_ENT_F_OLD_SUBDEV_BASE | ||
| 126 | * Ranges. | ||
| 127 | * | ||
| 128 | * Non-subdevices are expected to be at the MEDIA_ENT_F_OLD_BASE, | ||
| 129 | * or, otherwise, will be silently ignored by media-ctl when | ||
| 130 | * printing the graphviz diagram. So, map them into the devnode | ||
| 131 | * old range. | ||
| 132 | */ | ||
| 133 | if (ent->function < MEDIA_ENT_F_OLD_BASE || | ||
| 134 | ent->function > MEDIA_ENT_T_DEVNODE_UNKNOWN) { | ||
| 135 | if (is_media_entity_v4l2_subdev(ent)) | ||
| 136 | u_ent.type = MEDIA_ENT_F_V4L2_SUBDEV_UNKNOWN; | ||
| 137 | else if (ent->function != MEDIA_ENT_F_IO_V4L) | ||
| 138 | u_ent.type = MEDIA_ENT_T_DEVNODE_UNKNOWN; | ||
| 139 | } | ||
| 140 | |||
| 118 | memcpy(&u_ent.raw, &ent->info, sizeof(ent->info)); | 141 | memcpy(&u_ent.raw, &ent->info, sizeof(ent->info)); |
| 119 | if (copy_to_user(uent, &u_ent, sizeof(u_ent))) | 142 | if (copy_to_user(uent, &u_ent, sizeof(u_ent))) |
| 120 | return -EFAULT; | 143 | return -EFAULT; |
