aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
Diffstat (limited to 'drivers')
-rw-r--r--drivers/media/media-device.c23
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;