Re: [PATCHv2] Partially revert 'Fix DVB devnode representation at media controller'

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Em Mon, 16 Feb 2015 13:11:39 +0100
Hans Verkuil <hverkuil@xxxxxxxxx> 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 <hans.verkuil@xxxxxxxxx>
> 
> 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 majordomo@xxxxxxxxxxxxxxx
> 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 majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html




[Index of Archives]     [Linux Input]     [Video for Linux]     [Gstreamer Embedded]     [Mplayer Users]     [Linux USB Devel]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Yosemite Backpacking]
  Powered by Linux