Em Mon, 16 Feb 2015 13:11:39 +0100
Hans Verkuil <[email protected]> escreveu:

> Partially revert e31a0ba7df6ce21ac4ed58c4182ec12ca8fd78fb (media: Fix DVB 
> devnode
> representation at media controller) and 
> 15d2042107f90f7ce39705716bc2c9a2ec1d5125
> (Docbook: Fix documentation for media controller devnodes) commits.
> 
> Those commits mark the alsa struct in struct media_entity_desc as deprecated.
> However, the alsa struct should remain as it is since it cannot be replaced
> by a simple major/minor device node description. The alsa struct was designed
> to be used as an alsa card description so V4L2 drivers could use this to 
> expose
> the alsa card that they create to carry the captured audio. Such a card is not
> just a PCM device, but also needs to contain the alsa subdevice information,
> and it may map to multiple devices, e.g. a PCM and a mixer device, such as the
> au0828 usb stick creates.
> 
> This is exactly as intended and this cannot and should not be replaced by a
> simple major/minor.
> 
> However, whether this information is in the right form for an ALSA device such
> that it can handle udev renaming rules as well is another matter. So mark this
> alsa struct as experimental and document the problems involved.
> 
> Updated the documentation as well to reflect this and to reinstate the 'major'
> and 'minor' field documentation for the struct dev that was removed in the
> original commit.
> 
> Updated the documentation to clearly state that struct dev is to be used for
> (sub-)devices that create a single device node. Other devices need their own
> structure here.

I'm OK with this patch.

I have to say that, when we end by merging media controller support into
ALSA, the best is to not use MEDIA_ENT_T_DEVNODE_ALSA, as we should reserve
MEDIA_ENT_T_DEVNODE_* for the (sub-)devices that have a single devnode
mapping.

So, IMHO, the best would be to create a new type for ALSA (MEDIA_ENT_T_ALSA),
as its properties will be different than a normal MEDIA_ENT_T_DEVNODE.

In other words, something like:

#define MEDIA_ENT_T_DEVNODE             (1 << MEDIA_ENT_TYPE_SHIFT)
#define MEDIA_ENT_T_V4L2_SUBDEV         (2 << MEDIA_ENT_TYPE_SHIFT)
#define MEDIA_ENT_T_ALSA                (3 << MEDIA_ENT_TYPE_SHIFT)

struct media_entity_desc {
        /* Common fields for all types/subtypes of entities */
        __u32 id;
        char name[32];
        __u32 type;
        __u32 revision;
        __u32 flags;
        __u32 group_id;
        __u16 pads;
        __u16 links;
        __u32 reserved[4];

        /*
         * Data specific for a media entity type
         */
        union {
                /*
                 * for MEDIA_ENT_T_DEVNODE and MEDIA_ENT_T_V4L2_SUBDEV.
                 *
                 * If MEDIA_ENT_T_V4L2_SUBDEV, this is filled only if 
                 * CONFIG_VIDEO_V4L2_SUBDEV_API. Otherwise, major/minor
                 * should be zero. Perhaps we should add a new flag to
                 * indicate if subdev devnode info is available.
                 */
                struct { __u32 major, minor } dev;

                /* for MEDIA_ENT_T_ALSA */
                struct { __u32 card, device, subdevice } alsa_props; /* 
MEDIA_ENT_T_DEVNODE_ALSA */
        }

        /*
         * Data specific to a media entity subtype, if needed
         */
        union {
                u32 reserved2[172];
        }
}

(deprecated fields removed, just to easy the reading of the above struct)

Regards,
Mauro

> 
> Signed-off-by: Hans Verkuil <[email protected]>
> 
> diff --git a/Documentation/DocBook/media/v4l/media-ioc-enum-entities.xml 
> b/Documentation/DocBook/media/v4l/media-ioc-enum-entities.xml
> index cbf307f..a77c1de 100644
> --- a/Documentation/DocBook/media/v4l/media-ioc-enum-entities.xml
> +++ b/Documentation/DocBook/media/v4l/media-ioc-enum-entities.xml
> @@ -145,7 +145,52 @@
>           <entry>struct</entry>
>           <entry><structfield>dev</structfield></entry>
>           <entry></entry>
> -         <entry>Valid for (sub-)devices that create devnodes.</entry>
> +         <entry>Valid for (sub-)devices that create a single device 
> node.</entry>
> +       </row>
> +       <row>
> +         <entry></entry>
> +         <entry></entry>
> +         <entry>__u32</entry>
> +         <entry><structfield>major</structfield></entry>
> +         <entry>Device node major number.</entry>
> +       </row>
> +       <row>
> +         <entry></entry>
> +         <entry></entry>
> +         <entry>__u32</entry>
> +         <entry><structfield>minor</structfield></entry>
> +         <entry>Device node minor number.</entry>
> +       </row>
> +       <row>
> +         <entry></entry>
> +         <entry>struct</entry>
> +         <entry><structfield>alsa</structfield></entry>
> +         <entry></entry>
> +         <entry>Valid for ALSA devices only. This is an <link 
> linkend="experimental">experimental</link>
> +         ALSA device specification. If you want to use this, please contact 
> the
> +         linux-media mailing list (&v4l-ml;) first.
> +         </entry>
> +       </row>
> +       <row>
> +         <entry></entry>
> +         <entry></entry>
> +         <entry>__u32</entry>
> +         <entry><structfield>card</structfield></entry>
> +         <entry>ALSA card number</entry>
> +       </row>
> +       <row>
> +         <entry></entry>
> +         <entry></entry>
> +         <entry>__u32</entry>
> +         <entry><structfield>device</structfield></entry>
> +         <entry>ALSA device number</entry>
> +       </row>
> +       <row>
> +         <entry></entry>
> +         <entry></entry>
> +         <entry>__u32</entry>
> +         <entry><structfield>subdevice</structfield></entry>
> +         <entry>ALSA sub-device number</entry>
>         </row>
>         <row>
>           <entry></entry>
> diff --git a/include/uapi/linux/media.h b/include/uapi/linux/media.h
> index 52cc2a6..bcb2fe8a 100644
> --- a/include/uapi/linux/media.h
> +++ b/include/uapi/linux/media.h
> @@ -91,6 +91,27 @@ struct media_entity_desc {
>  
>  #if 1
>               /*
> +              * EXPERIMENTAL: this shouldn't have been added without
> +              * actual drivers that use this. When the first real driver
> +              * appears that sets this information, special attention
> +              * should be given whether this information is 1) enough, and
> +              * 2) can deal with udev rules that rename devices. The struct
> +              * dev would not be sufficient for this since that does not
> +              * contain the subdevice information. In addition, struct dev
> +              * can only refer to a single device, and not to multiple (e.g.
> +              * pcm and mixer devices).
> +              *
> +              * So for now mark this as experimental.
> +              */
> +             struct {
> +                     __u32 card;
> +                     __u32 device;
> +                     __u32 subdevice;
> +             } alsa;
> +#endif
> +
> +#if 1
> +             /*
>                * DEPRECATED: previous node specifications. Kept just to
>                * avoid breaking compilation, but media_entity_desc.dev
>                * should be used instead. In particular, alsa and dvb
> @@ -106,11 +127,6 @@ struct media_entity_desc {
>                       __u32 major;
>                       __u32 minor;
>               } fb;
> -             struct {
> -                     __u32 card;
> -                     __u32 device;
> -                     __u32 subdevice;
> -             } alsa;
>               int dvb;
>  #endif
>  
> --
> To unsubscribe from this list: send the line "unsubscribe linux-media" in
> the body of a message to [email protected]
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
--
To unsubscribe from this list: send the line "unsubscribe linux-media" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to