lkml.org 
[lkml]   [2016]   [Jan]   [17]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Date
    Subject[PATCH 3.2 09/70] ALSA: tlv: compute TLV_*_ITEM lengths automatically
    3.2.76-rc1 review patch.  If anyone has any objections, please let me know.

    ------------------

    From: Clemens Ladisch <clemens@ladisch.de>

    commit b5b9eb546762c4015c67c31364a6ec6f83fd2ada upstream.

    Add helper macros with a little bit of preprocessor magic to
    automatically compute the length of a TLV item. This lets us avoid
    having to compute this by hand, and will allow to use items that do
    not use a fixed length.

    Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
    ---
    include/sound/tlv.h | 20 ++++++++++++--------
    1 file changed, 12 insertions(+), 8 deletions(-)

    diff --git a/include/sound/tlv.h b/include/sound/tlv.h
    index 7067e2d..137d165 100644
    --- a/include/sound/tlv.h
    +++ b/include/sound/tlv.h
    @@ -38,21 +38,26 @@
    #define SNDRV_CTL_TLVT_DB_MINMAX 4 /* dB scale with min/max */
    #define SNDRV_CTL_TLVT_DB_MINMAX_MUTE 5 /* dB scale with min/max with mute */

    +#define TLV_ITEM(type, ...) \
    + (type), TLV_LENGTH(__VA_ARGS__), __VA_ARGS__
    +#define TLV_LENGTH(...) \
    + ((unsigned int)sizeof((const unsigned int[]) { __VA_ARGS__ }))
    +
    #define TLV_DB_SCALE_MASK 0xffff
    #define TLV_DB_SCALE_MUTE 0x10000
    #define TLV_DB_SCALE_ITEM(min, step, mute) \
    - SNDRV_CTL_TLVT_DB_SCALE, 2 * sizeof(unsigned int), \
    - (min), ((step) & TLV_DB_SCALE_MASK) | ((mute) ? TLV_DB_SCALE_MUTE : 0)
    + TLV_ITEM(SNDRV_CTL_TLVT_DB_SCALE, \
    + (min), \
    + ((step) & TLV_DB_SCALE_MASK) | \
    + ((mute) ? TLV_DB_SCALE_MUTE : 0))
    #define DECLARE_TLV_DB_SCALE(name, min, step, mute) \
    unsigned int name[] = { TLV_DB_SCALE_ITEM(min, step, mute) }

    /* dB scale specified with min/max values instead of step */
    #define TLV_DB_MINMAX_ITEM(min_dB, max_dB) \
    - SNDRV_CTL_TLVT_DB_MINMAX, 2 * sizeof(unsigned int), \
    - (min_dB), (max_dB)
    + TLV_ITEM(SNDRV_CTL_TLVT_DB_MINMAX, (min_dB), (max_dB))
    #define TLV_DB_MINMAX_MUTE_ITEM(min_dB, max_dB) \
    - SNDRV_CTL_TLVT_DB_MINMAX_MUTE, 2 * sizeof(unsigned int), \
    - (min_dB), (max_dB)
    + TLV_ITEM(SNDRV_CTL_TLVT_DB_MINMAX_MUTE, (min_dB), (max_dB))
    #define DECLARE_TLV_DB_MINMAX(name, min_dB, max_dB) \
    unsigned int name[] = { TLV_DB_MINMAX_ITEM(min_dB, max_dB) }
    #define DECLARE_TLV_DB_MINMAX_MUTE(name, min_dB, max_dB) \
    @@ -60,8 +65,7 @@

    /* linear volume between min_dB and max_dB (.01dB unit) */
    #define TLV_DB_LINEAR_ITEM(min_dB, max_dB) \
    - SNDRV_CTL_TLVT_DB_LINEAR, 2 * sizeof(unsigned int), \
    - (min_dB), (max_dB)
    + TLV_ITEM(SNDRV_CTL_TLVT_DB_LINEAR, (min_dB), (max_dB))
    #define DECLARE_TLV_DB_LINEAR(name, min_dB, max_dB) \
    unsigned int name[] = { TLV_DB_LINEAR_ITEM(min_dB, max_dB) }


    \
     
     \ /
      Last update: 2016-01-18 05:01    [W:2.666 / U:0.272 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site