• Mauro Carvalho Chehab's avatar
    [media] media-device: map new functions into old types for legacy API · b2cd2744
    Mauro Carvalho Chehab authored
    The legacy media controller userspace API exposes entity types that
    carry both type and function information. The new API replaces the type
    with a function. It preserves backward compatibility by defining legacy
    functions for the existing types and using them in drivers.
    
    This works fine, as long as newer entity functions won't be added.
    
    Unfortunately, some tools, like media-ctl with --print-dot argument
    rely on the now legacy MEDIA_ENT_T_V4L2_SUBDEV and MEDIA_ENT_T_DEVNODE
    numeric ranges to identify what entities will be shown.
    
    Also, if the entity doesn't match those ranges, it will ignore the
    major/minor information on devnodes, and won't be getting the devnode
    name via udev or sysfs.
    
    As we're now adding devices outside the old range, the legacy ioctl
    needs to map the new entity functions into a type at the old range,
    or otherwise we'll have a regression.
    
    Detected on all released media-ctl versions (e. g. versions <= 1.10).
    
    Fix this by deriving the type from the function to emulate the legacy
    API if the function isn't in the legacy functions range.
    Reported-by: default avatarLaurent Pinchart <laurent.pinchart@ideasonboard.com>
    Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@osg.samsung.com>
    b2cd2744
media-device.c 19.1 KB