|
20 | 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 | 26 | #include <linux/compat.h>
|
24 | 27 | #include <linux/export.h>
|
25 | 28 | #include <linux/idr.h>
|
@@ -115,6 +118,26 @@ static long media_device_enum_entities(struct media_device *mdev,
|
115 | 118 | u_ent.group_id = 0; /* Unused */
|
116 | 119 | u_ent.pads = ent->num_pads;
|
117 | 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 | 141 | memcpy(&u_ent.raw, &ent->info, sizeof(ent->info));
|
119 | 142 | if (copy_to_user(uent, &u_ent, sizeof(u_ent)))
|
120 | 143 | return -EFAULT;
|
|
0 commit comments