/* Generated by ./xlat/gen.sh from ./xlat/evdev_switch.in; do not edit. */

#include "gcc_compat.h"
#include "static_assert.h"

#if defined(SW_LID) || (defined(HAVE_DECL_SW_LID) && HAVE_DECL_SW_LID)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((SW_LID) == (0x00), "SW_LID != 0x00");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define SW_LID 0x00
#endif
#if defined(SW_TABLET_MODE) || (defined(HAVE_DECL_SW_TABLET_MODE) && HAVE_DECL_SW_TABLET_MODE)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((SW_TABLET_MODE) == (0x01), "SW_TABLET_MODE != 0x01");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define SW_TABLET_MODE 0x01
#endif
#if defined(SW_HEADPHONE_INSERT) || (defined(HAVE_DECL_SW_HEADPHONE_INSERT) && HAVE_DECL_SW_HEADPHONE_INSERT)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((SW_HEADPHONE_INSERT) == (0x02), "SW_HEADPHONE_INSERT != 0x02");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define SW_HEADPHONE_INSERT 0x02
#endif
#if defined(SW_RFKILL_ALL) || (defined(HAVE_DECL_SW_RFKILL_ALL) && HAVE_DECL_SW_RFKILL_ALL)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((SW_RFKILL_ALL) == (0x03), "SW_RFKILL_ALL != 0x03");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define SW_RFKILL_ALL 0x03
#endif
#if defined(SW_MICROPHONE_INSERT) || (defined(HAVE_DECL_SW_MICROPHONE_INSERT) && HAVE_DECL_SW_MICROPHONE_INSERT)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((SW_MICROPHONE_INSERT) == (0x04), "SW_MICROPHONE_INSERT != 0x04");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define SW_MICROPHONE_INSERT 0x04
#endif
#if defined(SW_DOCK) || (defined(HAVE_DECL_SW_DOCK) && HAVE_DECL_SW_DOCK)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((SW_DOCK) == (0x05), "SW_DOCK != 0x05");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define SW_DOCK 0x05
#endif
#if defined(SW_LINEOUT_INSERT) || (defined(HAVE_DECL_SW_LINEOUT_INSERT) && HAVE_DECL_SW_LINEOUT_INSERT)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((SW_LINEOUT_INSERT) == (0x06), "SW_LINEOUT_INSERT != 0x06");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define SW_LINEOUT_INSERT 0x06
#endif
#if defined(SW_JACK_PHYSICAL_INSERT) || (defined(HAVE_DECL_SW_JACK_PHYSICAL_INSERT) && HAVE_DECL_SW_JACK_PHYSICAL_INSERT)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((SW_JACK_PHYSICAL_INSERT) == (0x07), "SW_JACK_PHYSICAL_INSERT != 0x07");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define SW_JACK_PHYSICAL_INSERT 0x07
#endif
#if defined(SW_VIDEOOUT_INSERT) || (defined(HAVE_DECL_SW_VIDEOOUT_INSERT) && HAVE_DECL_SW_VIDEOOUT_INSERT)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((SW_VIDEOOUT_INSERT) == (0x08), "SW_VIDEOOUT_INSERT != 0x08");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define SW_VIDEOOUT_INSERT 0x08
#endif
#if defined(SW_CAMERA_LENS_COVER) || (defined(HAVE_DECL_SW_CAMERA_LENS_COVER) && HAVE_DECL_SW_CAMERA_LENS_COVER)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((SW_CAMERA_LENS_COVER) == (0x09), "SW_CAMERA_LENS_COVER != 0x09");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define SW_CAMERA_LENS_COVER 0x09
#endif
#if defined(SW_KEYPAD_SLIDE) || (defined(HAVE_DECL_SW_KEYPAD_SLIDE) && HAVE_DECL_SW_KEYPAD_SLIDE)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((SW_KEYPAD_SLIDE) == (0x0a), "SW_KEYPAD_SLIDE != 0x0a");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define SW_KEYPAD_SLIDE 0x0a
#endif
#if defined(SW_FRONT_PROXIMITY) || (defined(HAVE_DECL_SW_FRONT_PROXIMITY) && HAVE_DECL_SW_FRONT_PROXIMITY)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((SW_FRONT_PROXIMITY) == (0x0b), "SW_FRONT_PROXIMITY != 0x0b");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define SW_FRONT_PROXIMITY 0x0b
#endif
#if defined(SW_ROTATE_LOCK) || (defined(HAVE_DECL_SW_ROTATE_LOCK) && HAVE_DECL_SW_ROTATE_LOCK)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((SW_ROTATE_LOCK) == (0x0c), "SW_ROTATE_LOCK != 0x0c");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define SW_ROTATE_LOCK 0x0c
#endif
#if defined(SW_LINEIN_INSERT) || (defined(HAVE_DECL_SW_LINEIN_INSERT) && HAVE_DECL_SW_LINEIN_INSERT)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((SW_LINEIN_INSERT) == (0x0d), "SW_LINEIN_INSERT != 0x0d");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define SW_LINEIN_INSERT 0x0d
#endif
#if defined(SW_MUTE_DEVICE) || (defined(HAVE_DECL_SW_MUTE_DEVICE) && HAVE_DECL_SW_MUTE_DEVICE)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((SW_MUTE_DEVICE) == (0x0e), "SW_MUTE_DEVICE != 0x0e");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define SW_MUTE_DEVICE 0x0e
#endif
#if defined(SW_PEN_INSERTED) || (defined(HAVE_DECL_SW_PEN_INSERTED) && HAVE_DECL_SW_PEN_INSERTED)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((SW_PEN_INSERTED) == (0x0f), "SW_PEN_INSERTED != 0x0f");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define SW_PEN_INSERTED 0x0f
#endif

#ifndef XLAT_MACROS_ONLY

# ifdef IN_MPERS

#  error static const struct xlat evdev_switch in mpers mode

# else

static
const struct xlat evdev_switch[] = {
 [SW_LID] = XLAT(SW_LID),
 [SW_TABLET_MODE] = XLAT(SW_TABLET_MODE),
 [SW_HEADPHONE_INSERT] = XLAT(SW_HEADPHONE_INSERT),
 [SW_RFKILL_ALL] = XLAT(SW_RFKILL_ALL),
 [SW_MICROPHONE_INSERT] = XLAT(SW_MICROPHONE_INSERT),
 [SW_DOCK] = XLAT(SW_DOCK),
 [SW_LINEOUT_INSERT] = XLAT(SW_LINEOUT_INSERT),
 [SW_JACK_PHYSICAL_INSERT] = XLAT(SW_JACK_PHYSICAL_INSERT),
 [SW_VIDEOOUT_INSERT] = XLAT(SW_VIDEOOUT_INSERT),
 [SW_CAMERA_LENS_COVER] = XLAT(SW_CAMERA_LENS_COVER),
 [SW_KEYPAD_SLIDE] = XLAT(SW_KEYPAD_SLIDE),
 [SW_FRONT_PROXIMITY] = XLAT(SW_FRONT_PROXIMITY),
 [SW_ROTATE_LOCK] = XLAT(SW_ROTATE_LOCK),
 [SW_LINEIN_INSERT] = XLAT(SW_LINEIN_INSERT),
 [SW_MUTE_DEVICE] = XLAT(SW_MUTE_DEVICE),
 [SW_PEN_INSERTED] = XLAT(SW_PEN_INSERTED),
 XLAT_END
};

# endif /* !IN_MPERS */

#endif /* !XLAT_MACROS_ONLY */
