diff mbox series

mass constexpr conversions

Message ID 20210421224000.24506-1-rosenp@gmail.com (mailing list archive)
State New, archived
Headers show
Series mass constexpr conversions | expand

Commit Message

Rosen Penev April 21, 2021, 10:40 p.m. UTC
Reduces size slightly.

Signed-off-by: Rosen Penev <rosenp@gmail.com>
---
 utils/cec-compliance/cec-test-adapter.cpp   |  23 ++-
 utils/cec-compliance/cec-test.cpp           |   2 +-
 utils/cec-ctl/cec-ctl.cpp                   |  38 ++---
 utils/cec-follower/cec-processing.cpp       |   6 +-
 utils/common/media-info.cpp                 |  42 ++---
 utils/common/v4l2-info.cpp                  | 177 ++++++++++----------
 utils/libcecutil/cec-log.cpp                |  10 +-
 utils/libcecutil/cec-log.h                  |   2 +-
 utils/rds-ctl/rds-ctl.cpp                   |   6 +-
 utils/v4l2-compliance/v4l2-compliance.cpp   |   4 +-
 utils/v4l2-compliance/v4l2-test-buffers.cpp |   2 +-
 utils/v4l2-compliance/v4l2-test-colors.cpp  |  28 ++--
 utils/v4l2-compliance/v4l2-test-formats.cpp |   2 +-
 utils/v4l2-ctl/v4l2-ctl-common.cpp          |  11 +-
 utils/v4l2-ctl/v4l2-ctl-edid.cpp            |  91 +++-------
 utils/v4l2-ctl/v4l2-ctl-io.cpp              |   4 +-
 utils/v4l2-ctl/v4l2-ctl-misc.cpp            |  26 +--
 utils/v4l2-ctl/v4l2-ctl-overlay.cpp         |  30 +---
 utils/v4l2-ctl/v4l2-ctl-selection.cpp       |  18 +-
 utils/v4l2-ctl/v4l2-ctl-stds.cpp            |  28 +---
 utils/v4l2-ctl/v4l2-ctl-streaming.cpp       |   2 +-
 utils/v4l2-ctl/v4l2-ctl-subdev.cpp          |  50 ++----
 utils/v4l2-ctl/v4l2-ctl-tuner.cpp           |  13 +-
 utils/v4l2-ctl/v4l2-ctl-vbi.cpp             |  12 +-
 utils/v4l2-ctl/v4l2-ctl-vidcap.cpp          |   9 +-
 utils/v4l2-ctl/v4l2-ctl.cpp                 |  24 +--
 utils/v4l2-dbg/v4l2-dbg.cpp                 |   8 +-
 27 files changed, 244 insertions(+), 424 deletions(-)

Comments

Hans Verkuil April 22, 2021, 6:54 a.m. UTC | #1
Hi Rosen,

Please add a prefix to your subject line indicating which part of v4l-utils
was changed. In this case it would be:

[PATCH] v4l-utils/utils: mass constexpr conversions

On 22/04/2021 00:40, Rosen Penev wrote:
> Reduces size slightly.
> 
> Signed-off-by: Rosen Penev <rosenp@gmail.com>
> ---
>  utils/cec-compliance/cec-test-adapter.cpp   |  23 ++-
>  utils/cec-compliance/cec-test.cpp           |   2 +-
>  utils/cec-ctl/cec-ctl.cpp                   |  38 ++---
>  utils/cec-follower/cec-processing.cpp       |   6 +-
>  utils/common/media-info.cpp                 |  42 ++---
>  utils/common/v4l2-info.cpp                  | 177 ++++++++++----------
>  utils/libcecutil/cec-log.cpp                |  10 +-
>  utils/libcecutil/cec-log.h                  |   2 +-
>  utils/rds-ctl/rds-ctl.cpp                   |   6 +-
>  utils/v4l2-compliance/v4l2-compliance.cpp   |   4 +-
>  utils/v4l2-compliance/v4l2-test-buffers.cpp |   2 +-
>  utils/v4l2-compliance/v4l2-test-colors.cpp  |  28 ++--
>  utils/v4l2-compliance/v4l2-test-formats.cpp |   2 +-
>  utils/v4l2-ctl/v4l2-ctl-common.cpp          |  11 +-
>  utils/v4l2-ctl/v4l2-ctl-edid.cpp            |  91 +++-------
>  utils/v4l2-ctl/v4l2-ctl-io.cpp              |   4 +-
>  utils/v4l2-ctl/v4l2-ctl-misc.cpp            |  26 +--
>  utils/v4l2-ctl/v4l2-ctl-overlay.cpp         |  30 +---
>  utils/v4l2-ctl/v4l2-ctl-selection.cpp       |  18 +-
>  utils/v4l2-ctl/v4l2-ctl-stds.cpp            |  28 +---
>  utils/v4l2-ctl/v4l2-ctl-streaming.cpp       |   2 +-
>  utils/v4l2-ctl/v4l2-ctl-subdev.cpp          |  50 ++----
>  utils/v4l2-ctl/v4l2-ctl-tuner.cpp           |  13 +-
>  utils/v4l2-ctl/v4l2-ctl-vbi.cpp             |  12 +-
>  utils/v4l2-ctl/v4l2-ctl-vidcap.cpp          |   9 +-
>  utils/v4l2-ctl/v4l2-ctl.cpp                 |  24 +--
>  utils/v4l2-dbg/v4l2-dbg.cpp                 |   8 +-
>  27 files changed, 244 insertions(+), 424 deletions(-)
> 
> diff --git a/utils/cec-compliance/cec-test-adapter.cpp b/utils/cec-compliance/cec-test-adapter.cpp
> index cf1b6191f..3aa78fd66 100644
> --- a/utils/cec-compliance/cec-test-adapter.cpp
> +++ b/utils/cec-compliance/cec-test-adapter.cpp
> @@ -14,8 +14,8 @@
>  
>  #include "cec-compliance.h"
>  
> -static const __u8 tx_ok_retry_mask = CEC_TX_STATUS_OK | CEC_TX_STATUS_MAX_RETRIES;
> -static const __u32 msg_fl_mask = CEC_MSG_FL_REPLY_TO_FOLLOWERS | CEC_MSG_FL_RAW;
> +static constexpr __u8 tx_ok_retry_mask = CEC_TX_STATUS_OK | CEC_TX_STATUS_MAX_RETRIES;
> +static constexpr __u32 msg_fl_mask = CEC_MSG_FL_REPLY_TO_FOLLOWERS | CEC_MSG_FL_RAW;

I'm happy with these changes.

>  
>  // Flush any pending messages
>  static int flush_pending_msgs(struct node *node)
> @@ -107,27 +107,24 @@ static int testAdapPhysAddr(struct node *node)
>  
>  static int testAdapLogAddrs(struct node *node)
>  {
> -	static const __u8 la_types[] = {
> +	static constexpr __u8 la_types[] = {
>  		CEC_LOG_ADDR_TYPE_TV,
>  		CEC_LOG_ADDR_TYPE_RECORD,
>  		CEC_LOG_ADDR_TYPE_TUNER,
> -		CEC_LOG_ADDR_TYPE_AUDIOSYSTEM
> +		CEC_LOG_ADDR_TYPE_AUDIOSYSTEM,

I'm not so happy with these changes: it's not what is described in the
subject of the patch, and I don't think this should be changed anyway.

>  	};
> -	static const __u8 prim_dev_types[] = {
> +	static constexpr __u8 prim_dev_types[] = {
>  		CEC_OP_PRIM_DEVTYPE_TV,
>  		CEC_OP_PRIM_DEVTYPE_RECORD,
>  		CEC_OP_PRIM_DEVTYPE_TUNER,
> -		CEC_OP_PRIM_DEVTYPE_AUDIOSYSTEM
> +		CEC_OP_PRIM_DEVTYPE_AUDIOSYSTEM,
>  	};
> -	static const __u8 all_dev_types[2] = {
> -		CEC_OP_ALL_DEVTYPE_TV | CEC_OP_ALL_DEVTYPE_RECORD |
> -		CEC_OP_ALL_DEVTYPE_AUDIOSYSTEM,
> +	static constexpr __u8 all_dev_types[2] = {
> +		CEC_OP_ALL_DEVTYPE_TV | CEC_OP_ALL_DEVTYPE_RECORD | CEC_OP_ALL_DEVTYPE_AUDIOSYSTEM,
>  		CEC_OP_ALL_DEVTYPE_RECORD | CEC_OP_ALL_DEVTYPE_AUDIOSYSTEM,
>  	};
> -	static const __u8 features[12] = {
> -		0x90, 0x00, 0x8e, 0x00,
> -		0xff, 0xff, 0xff, 0xff,
> -		0xff, 0xff, 0xff, 0xff
> +	static constexpr __u8 features[12] = {
> +		0x90, 0x00, 0x8e, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
>  	};
>  	struct cec_log_addrs clear = { };
>  	struct cec_log_addrs laddrs;
> diff --git a/utils/cec-compliance/cec-test.cpp b/utils/cec-compliance/cec-test.cpp
> index 8da29f227..55e51b7b2 100644
> --- a/utils/cec-compliance/cec-test.cpp
> +++ b/utils/cec-compliance/cec-test.cpp
> @@ -701,7 +701,7 @@ static const vec_remote_subtests deck_ctl_subtests{
>  
>  /* Tuner Control */
>  
> -static const char *bcast_type2s(__u8 bcast_type)
> +static const char *const bcast_type2s(__u8 bcast_type)

Again, such changes shouldn't be buried in a patch that says that it
just changes const to constexpr. Make this a separate patch.

>  {
>  	switch (bcast_type) {
>  	case CEC_OP_ANA_BCAST_TYPE_CABLE:
> diff --git a/utils/cec-ctl/cec-ctl.cpp b/utils/cec-ctl/cec-ctl.cpp
> index c17265a5c..a7c4f3a2b 100644
> --- a/utils/cec-ctl/cec-ctl.cpp
> +++ b/utils/cec-ctl/cec-ctl.cpp
> @@ -350,7 +350,7 @@ static void usage()
>  	       );
>  }
>  
> -static const char *power_status2s(__u8 power_status)
> +static const char *const power_status2s(__u8 power_status)
>  {
>  	switch (power_status) {
>  	case CEC_OP_POWER_STATUS_ON:
> @@ -443,7 +443,7 @@ static void log_raw_msg(const struct cec_msg *msg)
>  	printf("\n");
>  }
>  
> -static const char *event2s(__u32 event)
> +static const char *const event2s(__u32 event)
>  {
>  	switch (event) {
>  	case CEC_EVENT_STATE_CHANGE:
> @@ -2179,9 +2179,9 @@ int main(int argc, char **argv)
>  			usage();
>  			return 1;
>  		case OptVendorCommand: {
> -			static const char *arg_names[] = {
> +			static constexpr const char *arg_names[] = {
>  				"payload",
> -				nullptr
> +				nullptr,

This I definitely do not like. nullptr is a sentinel and so will always
be the last in the list. Not adding a comma indicates that as well.

>  			};
>  			char *value, *endptr, *subs = optarg;
>  			__u8 size = 0;
> @@ -2213,10 +2213,10 @@ int main(int argc, char **argv)
>  			break;
>  		}
>  		case OptCustomCommand: {
> -			static const char *arg_names[] = {
> +			static constexpr const char *arg_names[] = {
>  				"cmd",
>  				"payload",
> -				nullptr
> +				nullptr,
>  			};
>  			char *value, *endptr, *subs = optarg;
>  			bool have_cmd = false;
> @@ -2256,10 +2256,10 @@ int main(int argc, char **argv)
>  			break;
>  		}
>  		case OptVendorCommandWithID: {
> -			static const char *arg_names[] = {
> +			static constexpr const char *arg_names[] = {
>  				"vendor-id",
>  				"cmd",
> -				nullptr
> +				nullptr,
>  			};
>  			char *value, *endptr, *subs = optarg;
>  			__u32 vendor_id = 0;
> @@ -2295,9 +2295,9 @@ int main(int argc, char **argv)
>  			break;
>  		}
>  		case OptVendorRemoteButtonDown: {
> -			static const char *arg_names[] = {
> +			static constexpr const char *arg_names[] = {
>  				"rc-code",
> -				nullptr
> +				nullptr,
>  			};
>  			char *value, *endptr, *subs = optarg;
>  			__u8 size = 0;
> @@ -2344,10 +2344,10 @@ int main(int argc, char **argv)
>  			break;
>  
>  		case OptTestPowerCycle: {
> -			static const char *arg_names[] = {
> +			static constexpr const char *arg_names[] = {
>  				"polls",
>  				"sleep",
> -				nullptr
> +				nullptr,
>  			};
>  			char *value, *subs = optarg;
>  
> @@ -2371,16 +2371,10 @@ int main(int argc, char **argv)
>  		}
>  
>  		case OptStressTestPowerCycle: {
> -			static const char *arg_names[] = {
> -				"cnt",
> -				"min-sleep",
> -				"max-sleep",
> -				"seed",
> -				"repeats",
> -				"sleep-before-on",
> -				"sleep-before-off",
> -				"polls",
> -				nullptr
> +			static constexpr const char *arg_names[] = {
> +				"cnt",	   "min-sleep",	      "max-sleep",	  "seed",
> +				"repeats", "sleep-before-on", "sleep-before-off", "polls",

Keep this as-is. One per line.

> +				nullptr,
>  			};
>  			char *value, *subs = optarg;
>  
> diff --git a/utils/cec-follower/cec-processing.cpp b/utils/cec-follower/cec-processing.cpp
> index 024407471..48d627096 100644
> --- a/utils/cec-follower/cec-processing.cpp
> +++ b/utils/cec-follower/cec-processing.cpp
> @@ -38,10 +38,10 @@ struct la_info la_info[15];
>  
>  static struct timespec start_monotonic;
>  static struct timeval start_timeofday;
> -static const time_t time_to_transient = 1;
> -static const time_t time_to_stable = 8;
> +static constexpr time_t time_to_transient = 1;
> +static constexpr time_t time_to_stable = 8;
>  
> -static const char *get_ui_cmd_string(__u8 ui_cmd)
> +static const char *const get_ui_cmd_string(__u8 ui_cmd)
>  {
>  	return cec_log_ui_cmd_string(ui_cmd) ? : "Unknown";
>  }
> diff --git a/utils/common/media-info.cpp b/utils/common/media-info.cpp
> index 3a5477e84..ae327a7a1 100644
> --- a/utils/common/media-info.cpp
> +++ b/utils/common/media-info.cpp
> @@ -33,23 +33,17 @@ static std::string num2s(unsigned num, bool is_hex = true)
>  	return buf;
>  }
>  
> -static struct {
> +static constexpr struct {
>  	const char *devname;
>  	enum media_type type;
>  } media_types[] = {
> -	{ "video", MEDIA_TYPE_VIDEO },
> -	{ "vbi", MEDIA_TYPE_VBI },
> -	{ "radio", MEDIA_TYPE_RADIO },
> -	{ "swradio", MEDIA_TYPE_SDR },
> -	{ "v4l-subdev", MEDIA_TYPE_SUBDEV },
> -	{ "v4l-touch", MEDIA_TYPE_TOUCH },
> -	{ "media", MEDIA_TYPE_MEDIA },
> -	{ "frontend", MEDIA_TYPE_DVB_FRONTEND },
> -	{ "demux", MEDIA_TYPE_DVB_DEMUX },
> -	{ "dvr", MEDIA_TYPE_DVB_DVR },
> -	{ "net", MEDIA_TYPE_DVB_NET },
> -	{ "ca", MEDIA_TYPE_DTV_CA },
> -	{ nullptr, MEDIA_TYPE_UNKNOWN }
> +	{ "video", MEDIA_TYPE_VIDEO },	     { "vbi", MEDIA_TYPE_VBI },
> +	{ "radio", MEDIA_TYPE_RADIO },	     { "swradio", MEDIA_TYPE_SDR },
> +	{ "v4l-subdev", MEDIA_TYPE_SUBDEV }, { "v4l-touch", MEDIA_TYPE_TOUCH },
> +	{ "media", MEDIA_TYPE_MEDIA },	     { "frontend", MEDIA_TYPE_DVB_FRONTEND },
> +	{ "demux", MEDIA_TYPE_DVB_DEMUX },   { "dvr", MEDIA_TYPE_DVB_DVR },
> +	{ "net", MEDIA_TYPE_DVB_NET },	     { "ca", MEDIA_TYPE_DTV_CA },
> +	{ nullptr, MEDIA_TYPE_UNKNOWN },

Please don't combine two per line, it's actually harder to read and maintain.

>  };
>  
>  media_type mi_media_detect_type(const char *device)
> @@ -255,10 +249,10 @@ int mi_get_media_fd(int fd, const char *bus_info)
>  	return media_fd;
>  }
>  
> -static const flag_def entity_flags_def[] = {
> +static constexpr flag_def entity_flags_def[] = {
>  	{ MEDIA_ENT_FL_DEFAULT, "default" },
>  	{ MEDIA_ENT_FL_CONNECTOR, "connector" },
> -	{ 0, nullptr }
> +	{ 0, nullptr },
>  };
>  
>  std::string mi_entflags2s(__u32 flags)
> @@ -266,7 +260,7 @@ std::string mi_entflags2s(__u32 flags)
>  	return flags2s(flags, entity_flags_def);
>  }
>  
> -static const flag_def interface_types_def[] = {
> +static constexpr flag_def interface_types_def[] = {
>  	{ MEDIA_INTF_T_DVB_FE, "DVB Front End" },
>  	{ MEDIA_INTF_T_DVB_DEMUX, "DVB Demuxer" },
>  	{ MEDIA_INTF_T_DVB_DVR, "DVB DVR" },
> @@ -288,7 +282,7 @@ static const flag_def interface_types_def[] = {
>  	{ MEDIA_INTF_T_ALSA_HWDEP, "ALSA HWDEP" },
>  	{ MEDIA_INTF_T_ALSA_SEQUENCER, "ALSA Sequencer" },
>  	{ MEDIA_INTF_T_ALSA_TIMER, "ALSA Timer" },
> -	{ 0, nullptr }
> +	{ 0, nullptr },
>  };
>  
>  std::string mi_ifacetype2s(__u32 type)
> @@ -299,7 +293,7 @@ std::string mi_ifacetype2s(__u32 type)
>  	return "FAIL: Unknown (" + num2s(type) + ")";
>  }
>  
> -static const flag_def entity_functions_def[] = {
> +static constexpr flag_def entity_functions_def[] = {
>  	{ MEDIA_ENT_F_UNKNOWN, "FAIL: Uninitialized Function" },
>  	{ MEDIA_ENT_F_V4L2_SUBDEV_UNKNOWN, "FAIL: Unknown V4L2 Sub-Device" },
>  	{ MEDIA_ENT_T_DEVNODE_UNKNOWN, "FAIL: Unknown Device Node" },
> @@ -335,7 +329,7 @@ static const flag_def entity_functions_def[] = {
>  	{ MEDIA_ENT_F_PROC_VIDEO_ENCODER, "Video Encoder" },
>  	{ MEDIA_ENT_F_VID_MUX, "Video Muxer" },
>  	{ MEDIA_ENT_F_VID_IF_BRIDGE, "Video Interface Bridge" },
> -	{ 0, nullptr }
> +	{ 0, nullptr },
>  };
>  
>  std::string mi_entfunction2s(__u32 function, bool *is_invalid)
> @@ -392,11 +386,11 @@ bool mi_func_requires_intf(__u32 function)
>  	}
>  }
>  
> -static const flag_def pad_flags_def[] = {
> +static constexpr flag_def pad_flags_def[] = {
>  	{ MEDIA_PAD_FL_SINK, "Sink" },
>  	{ MEDIA_PAD_FL_SOURCE, "Source" },
>  	{ MEDIA_PAD_FL_MUST_CONNECT, "Must Connect" },
> -	{ 0, nullptr }
> +	{ 0, nullptr },
>  };
>  
>  std::string mi_padflags2s(__u32 flags)
> @@ -404,11 +398,11 @@ std::string mi_padflags2s(__u32 flags)
>  	return flags2s(flags, pad_flags_def);
>  }
>  
> -static const flag_def link_flags_def[] = {
> +static constexpr flag_def link_flags_def[] = {
>  	{ MEDIA_LNK_FL_ENABLED, "Enabled" },
>  	{ MEDIA_LNK_FL_IMMUTABLE, "Immutable" },
>  	{ MEDIA_LNK_FL_DYNAMIC, "Dynamic" },
> -	{ 0, nullptr }
> +	{ 0, nullptr },
>  };
>  
>  std::string mi_linkflags2s(__u32 flags)
> diff --git a/utils/common/v4l2-info.cpp b/utils/common/v4l2-info.cpp
> index cb3cb91f7..512597a20 100644
> --- a/utils/common/v4l2-info.cpp
> +++ b/utils/common/v4l2-info.cpp
> @@ -201,7 +201,7 @@ std::string buftype2s(int type)
>  	}
>  }
>  
> -static const flag_def bufcap_def[] = {
> +static constexpr flag_def bufcap_def[] = {
>  	{ V4L2_BUF_CAP_SUPPORTS_MMAP, "mmap" },
>  	{ V4L2_BUF_CAP_SUPPORTS_USERPTR, "userptr" },
>  	{ V4L2_BUF_CAP_SUPPORTS_DMABUF, "dmabuf" },
> @@ -209,7 +209,7 @@ static const flag_def bufcap_def[] = {
>  	{ V4L2_BUF_CAP_SUPPORTS_ORPHANED_BUFS, "orphaned-bufs" },
>  	{ V4L2_BUF_CAP_SUPPORTS_M2M_HOLD_CAPTURE_BUF, "m2m-hold-capture-buf" },
>  	{ V4L2_BUF_CAP_SUPPORTS_MMAP_CACHE_HINTS, "mmap-cache-hints" },
> -	{ 0, nullptr }
> +	{ 0, nullptr },
>  };
>  
>  std::string bufcap2s(__u32 caps)
> @@ -345,9 +345,9 @@ std::string quantization2s(int val)
>  	}
>  }
>  
> -static const flag_def pixflags_def[] = {
> -	{ V4L2_PIX_FMT_FLAG_PREMUL_ALPHA,  "premultiplied-alpha" },
> -	{ 0, nullptr }
> +static constexpr flag_def pixflags_def[] = {
> +	{ V4L2_PIX_FMT_FLAG_PREMUL_ALPHA, "premultiplied-alpha" },
> +	{ 0, nullptr },
>  };
>  
>  std::string pixflags2s(unsigned flags)
> @@ -355,12 +355,12 @@ std::string pixflags2s(unsigned flags)
>  	return flags2s(flags, pixflags_def);
>  }
>  
> -static const flag_def service_def[] = {
> -	{ V4L2_SLICED_TELETEXT_B,  "teletext" },
> -	{ V4L2_SLICED_VPS,         "vps" },
> +static constexpr flag_def service_def[] = {
> +	{ V4L2_SLICED_TELETEXT_B, "teletext" },
> +	{ V4L2_SLICED_VPS, "vps" },
>  	{ V4L2_SLICED_CAPTION_525, "cc" },
> -	{ V4L2_SLICED_WSS_625,     "wss" },
> -	{ 0, nullptr }
> +	{ V4L2_SLICED_WSS_625, "wss" },
> +	{ 0, nullptr },
>  };
>  
>  std::string service2s(unsigned service)
> @@ -368,19 +368,19 @@ std::string service2s(unsigned service)
>  	return flags2s(service, service_def);
>  }
>  
> -#define FMTDESC_DEF(enc_type)							\
> -static const flag_def fmtdesc_ ## enc_type ## _def[] = { 			\
> -	{ V4L2_FMT_FLAG_COMPRESSED, "compressed" }, 				\
> -	{ V4L2_FMT_FLAG_EMULATED, "emulated" }, 				\
> -	{ V4L2_FMT_FLAG_CONTINUOUS_BYTESTREAM, "continuous-bytestream" }, 	\
> -	{ V4L2_FMT_FLAG_DYN_RESOLUTION, "dyn-resolution" }, 			\
> -	{ V4L2_FMT_FLAG_ENC_CAP_FRAME_INTERVAL, "enc-cap-frame-interval" },	\
> -	{ V4L2_FMT_FLAG_CSC_COLORSPACE, "csc-colorspace" }, 			\
> -	{ V4L2_FMT_FLAG_CSC_YCBCR_ENC, "csc-"#enc_type }, 			\
> -	{ V4L2_FMT_FLAG_CSC_QUANTIZATION, "csc-quantization" }, 		\
> -	{ V4L2_FMT_FLAG_CSC_XFER_FUNC, "csc-xfer-func" }, 			\
> -	{ 0, NULL } 								\
> -};
> +#define FMTDESC_DEF(enc_type)                                                       \
> +	static constexpr flag_def fmtdesc_##enc_type##_def[] = {                    \
> +		{ V4L2_FMT_FLAG_COMPRESSED, "compressed" },                         \
> +		{ V4L2_FMT_FLAG_EMULATED, "emulated" },                             \
> +		{ V4L2_FMT_FLAG_CONTINUOUS_BYTESTREAM, "continuous-bytestream" },   \
> +		{ V4L2_FMT_FLAG_DYN_RESOLUTION, "dyn-resolution" },                 \
> +		{ V4L2_FMT_FLAG_ENC_CAP_FRAME_INTERVAL, "enc-cap-frame-interval" }, \
> +		{ V4L2_FMT_FLAG_CSC_COLORSPACE, "csc-colorspace" },                 \
> +		{ V4L2_FMT_FLAG_CSC_YCBCR_ENC, "csc-" #enc_type },                  \
> +		{ V4L2_FMT_FLAG_CSC_QUANTIZATION, "csc-quantization" },             \
> +		{ V4L2_FMT_FLAG_CSC_XFER_FUNC, "csc-xfer-func" },                   \
> +		{ 0, NULL }                                                         \
> +	};
>  
>  FMTDESC_DEF(ycbcr)
>  FMTDESC_DEF(hsv)
> @@ -392,14 +392,14 @@ std::string fmtdesc2s(unsigned flags, bool is_hsv)
>  	return flags2s(flags, fmtdesc_ycbcr_def);
>  }
>  
> -#define MBUS_DEF(enc_type)						\
> -static const flag_def mbus_ ## enc_type ## _def[] = { 			\
> -	{ V4L2_SUBDEV_MBUS_CODE_CSC_COLORSPACE, "csc-colorspace" }, 	\
> -	{ V4L2_SUBDEV_MBUS_CODE_CSC_YCBCR_ENC, "csc-"#enc_type },	\
> -	{ V4L2_SUBDEV_MBUS_CODE_CSC_QUANTIZATION, "csc-quantization" }, \
> -	{ V4L2_SUBDEV_MBUS_CODE_CSC_XFER_FUNC, "csc-xfer-func" }, 	\
> -	{ 0, NULL }							\
> -};
> +#define MBUS_DEF(enc_type)                                                      \
> +	static constexpr flag_def mbus_##enc_type##_def[] = {                   \
> +		{ V4L2_SUBDEV_MBUS_CODE_CSC_COLORSPACE, "csc-colorspace" },     \
> +		{ V4L2_SUBDEV_MBUS_CODE_CSC_YCBCR_ENC, "csc-" #enc_type },      \
> +		{ V4L2_SUBDEV_MBUS_CODE_CSC_QUANTIZATION, "csc-quantization" }, \
> +		{ V4L2_SUBDEV_MBUS_CODE_CSC_XFER_FUNC, "csc-xfer-func" },       \
> +		{ 0, NULL }                                                     \
> +	};

Why mess with the indentation?

>  
>  MBUS_DEF(ycbcr)
>  MBUS_DEF(hsv)
> @@ -411,7 +411,7 @@ std::string mbus2s(unsigned flags, bool is_hsv)
>  	return flags2s(flags, mbus_ycbcr_def);
>  }
>  
> -static const flag_def selection_targets_def[] = {
> +static constexpr flag_def selection_targets_def[] = {
>  	{ V4L2_SEL_TGT_CROP_ACTIVE, "crop" },
>  	{ V4L2_SEL_TGT_CROP_DEFAULT, "crop_default" },
>  	{ V4L2_SEL_TGT_CROP_BOUNDS, "crop_bounds" },
> @@ -420,7 +420,7 @@ static const flag_def selection_targets_def[] = {
>  	{ V4L2_SEL_TGT_COMPOSE_BOUNDS, "compose_bounds" },
>  	{ V4L2_SEL_TGT_COMPOSE_PADDED, "compose_padded" },
>  	{ V4L2_SEL_TGT_NATIVE_SIZE, "native_size" },
> -	{ 0, nullptr }
> +	{ 0, nullptr },
>  };
>  
>  bool valid_seltarget_at_idx(unsigned i)
> @@ -459,25 +459,22 @@ std::string selflags2s(__u32 flags)
>  	return flags2s(flags, selection_flags_def);
>  }
>  
> -static const char *std_pal[] = {
> -	"B", "B1", "G", "H", "I", "D", "D1", "K",
> -	"M", "N", "Nc", "60",
> -	nullptr
> +static constexpr const char *std_pal[] = {
> +	"B", "B1", "G", "H", "I", "D", "D1", "K", "M", "N", "Nc", "60", nullptr,
>  };
> -static const char *std_ntsc[] = {
> -	"M", "M-JP", "443", "M-KR",
> -	nullptr
> +static constexpr const char *std_ntsc[] = {
> +	"M", "M-JP", "443", "M-KR", nullptr,
>  };
> -static const char *std_secam[] = {
> -	"B", "D", "G", "H", "K", "K1", "L", "Lc",
> -	nullptr
> +static constexpr const char *std_secam[] = {
> +	"B", "D", "G", "H", "K", "K1", "L", "Lc", nullptr,
>  };
> -static const char *std_atsc[] = {
> -	"8-VSB", "16-VSB",
> -	nullptr
> +static constexpr const char *std_atsc[] = {
> +	"8-VSB",
> +	"16-VSB",
> +	nullptr,
>  };

Please don't mess with how these values are arranged. It's done like that for a reason.

>  
> -static std::string partstd2s(const char *prefix, const char *stds[], unsigned long long std)
> +static std::string partstd2s(const char *prefix, const char *const stds[], unsigned long long std)
>  {
>  	std::string s = std::string(prefix) + "-";
>  	int first = 1;
> @@ -519,40 +516,40 @@ std::string std2s(v4l2_std_id std, const char *sep)
>  
>  std::string ctrlflags2s(__u32 flags)
>  {
> -	static const flag_def def[] = {
> -		{ V4L2_CTRL_FLAG_GRABBED,    "grabbed" },
> -		{ V4L2_CTRL_FLAG_DISABLED,   "disabled" },
> -		{ V4L2_CTRL_FLAG_READ_ONLY,  "read-only" },
> -		{ V4L2_CTRL_FLAG_UPDATE,     "update" },
> -		{ V4L2_CTRL_FLAG_INACTIVE,   "inactive" },
> -		{ V4L2_CTRL_FLAG_SLIDER,     "slider" },
> +	static constexpr flag_def def[] = {
> +		{ V4L2_CTRL_FLAG_GRABBED, "grabbed" },
> +		{ V4L2_CTRL_FLAG_DISABLED, "disabled" },
> +		{ V4L2_CTRL_FLAG_READ_ONLY, "read-only" },
> +		{ V4L2_CTRL_FLAG_UPDATE, "update" },
> +		{ V4L2_CTRL_FLAG_INACTIVE, "inactive" },
> +		{ V4L2_CTRL_FLAG_SLIDER, "slider" },
>  		{ V4L2_CTRL_FLAG_WRITE_ONLY, "write-only" },
> -		{ V4L2_CTRL_FLAG_VOLATILE,   "volatile" },
> -		{ V4L2_CTRL_FLAG_HAS_PAYLOAD,"has-payload" },
> +		{ V4L2_CTRL_FLAG_VOLATILE, "volatile" },
> +		{ V4L2_CTRL_FLAG_HAS_PAYLOAD, "has-payload" },
>  		{ V4L2_CTRL_FLAG_EXECUTE_ON_WRITE, "execute-on-write" },
>  		{ V4L2_CTRL_FLAG_MODIFY_LAYOUT, "modify-layout" },
> -		{ 0, nullptr }
> +		{ 0, nullptr },
>  	};
>  	return flags2s(flags, def);
>  }
>  
> -static const flag_def in_status_def[] = {
> -	{ V4L2_IN_ST_NO_POWER,    "no power" },
> -	{ V4L2_IN_ST_NO_SIGNAL,   "no signal" },
> -	{ V4L2_IN_ST_NO_COLOR,    "no color" },
> -	{ V4L2_IN_ST_HFLIP,       "hflip" },
> -	{ V4L2_IN_ST_VFLIP,       "vflip" },
> -	{ V4L2_IN_ST_NO_H_LOCK,   "no hsync lock" },
> -	{ V4L2_IN_ST_NO_V_LOCK,   "no vsync lock" },
> +static constexpr flag_def in_status_def[] = {
> +	{ V4L2_IN_ST_NO_POWER, "no power" },
> +	{ V4L2_IN_ST_NO_SIGNAL, "no signal" },
> +	{ V4L2_IN_ST_NO_COLOR, "no color" },
> +	{ V4L2_IN_ST_HFLIP, "hflip" },
> +	{ V4L2_IN_ST_VFLIP, "vflip" },
> +	{ V4L2_IN_ST_NO_H_LOCK, "no hsync lock" },
> +	{ V4L2_IN_ST_NO_V_LOCK, "no vsync lock" },
>  	{ V4L2_IN_ST_NO_STD_LOCK, "no standard format lock" },
> -	{ V4L2_IN_ST_COLOR_KILL,  "color kill" },
> -	{ V4L2_IN_ST_NO_SYNC,     "no sync lock" },
> -	{ V4L2_IN_ST_NO_EQU,      "no equalizer lock" },
> -	{ V4L2_IN_ST_NO_CARRIER,  "no carrier" },
> +	{ V4L2_IN_ST_COLOR_KILL, "color kill" },
> +	{ V4L2_IN_ST_NO_SYNC, "no sync lock" },
> +	{ V4L2_IN_ST_NO_EQU, "no equalizer lock" },
> +	{ V4L2_IN_ST_NO_CARRIER, "no carrier" },
>  	{ V4L2_IN_ST_MACROVISION, "macrovision" },
> -	{ V4L2_IN_ST_NO_ACCESS,   "no conditional access" },
> -	{ V4L2_IN_ST_VTR,         "VTR time constant" },
> -	{ 0, nullptr }
> +	{ V4L2_IN_ST_NO_ACCESS, "no conditional access" },
> +	{ V4L2_IN_ST_VTR, "VTR time constant" },
> +	{ 0, nullptr },
>  };
>  
>  std::string in_status2s(__u32 status)
> @@ -560,11 +557,11 @@ std::string in_status2s(__u32 status)
>  	return status ? flags2s(status, in_status_def) : "ok";
>  }
>  
> -static const flag_def input_cap_def[] = {
> +static constexpr flag_def input_cap_def[] = {
>  	{ V4L2_IN_CAP_DV_TIMINGS, "DV timings" },
>  	{ V4L2_IN_CAP_STD, "SDTV standards" },
>  	{ V4L2_IN_CAP_NATIVE_SIZE, "Native Size" },
> -	{ 0, nullptr }
> +	{ 0, nullptr },
>  };
>  
>  std::string input_cap2s(__u32 capabilities)
> @@ -572,11 +569,11 @@ std::string input_cap2s(__u32 capabilities)
>  	return capabilities ? flags2s(capabilities, input_cap_def) : "not defined";
>  }
>  
> -static const flag_def output_cap_def[] = {
> +static constexpr flag_def output_cap_def[] = {
>  	{ V4L2_OUT_CAP_DV_TIMINGS, "DV timings" },
>  	{ V4L2_OUT_CAP_STD, "SDTV standards" },
>  	{ V4L2_OUT_CAP_NATIVE_SIZE, "Native Size" },
> -	{ 0, nullptr }
> +	{ 0, nullptr },
>  };
>  
>  std::string output_cap2s(__u32 capabilities)
> @@ -630,13 +627,9 @@ std::string fbufflags2s(unsigned fl)
>  	return s;
>  }
>  
> -static const flag_def dv_standards_def[] = {
> -	{ V4L2_DV_BT_STD_CEA861, "CTA-861" },
> -	{ V4L2_DV_BT_STD_DMT, "DMT" },
> -	{ V4L2_DV_BT_STD_CVT, "CVT" },
> -	{ V4L2_DV_BT_STD_GTF, "GTF" },
> -	{ V4L2_DV_BT_STD_SDI, "SDI" },
> -	{ 0, nullptr }
> +static constexpr flag_def dv_standards_def[] = {
> +	{ V4L2_DV_BT_STD_CEA861, "CTA-861" }, { V4L2_DV_BT_STD_DMT, "DMT" }, { V4L2_DV_BT_STD_CVT, "CVT" },
> +	{ V4L2_DV_BT_STD_GTF, "GTF" },	      { V4L2_DV_BT_STD_SDI, "SDI" }, { 0, nullptr },
>  };
>  
>  std::string dv_standards2s(__u32 flags)
> @@ -675,12 +668,12 @@ std::string dvflags2s(unsigned vsync, int val)
>  	return s;
>  }
>  
> -static const flag_def dv_caps_def[] = {
> +static constexpr flag_def dv_caps_def[] = {
>  	{ V4L2_DV_BT_CAP_INTERLACED, "Interlaced" },
>  	{ V4L2_DV_BT_CAP_PROGRESSIVE, "Progressive" },
>  	{ V4L2_DV_BT_CAP_REDUCED_BLANKING, "Reduced Blanking" },
>  	{ V4L2_DV_BT_CAP_CUSTOM, "Custom Formats" },
> -	{ 0, nullptr }
> +	{ 0, nullptr },
>  };
>  
>  std::string dv_caps2s(__u32 flags)
> @@ -688,13 +681,13 @@ std::string dv_caps2s(__u32 flags)
>  	return flags2s(flags, dv_caps_def);
>  }
>  
> -static const flag_def tc_flags_def[] = {
> +static constexpr flag_def tc_flags_def[] = {
>  	{ V4L2_TC_FLAG_DROPFRAME, "dropframe" },
>  	{ V4L2_TC_FLAG_COLORFRAME, "colorframe" },
>  	{ V4L2_TC_USERBITS_field, "userbits-field" },
>  	{ V4L2_TC_USERBITS_USERDEFINED, "userbits-userdefined" },
>  	{ V4L2_TC_USERBITS_8BITCHARS, "userbits-8bitchars" },
> -	{ 0, nullptr }
> +	{ 0, nullptr },
>  };
>  
>  std::string tc_flags2s(__u32 flags)
> @@ -702,7 +695,7 @@ std::string tc_flags2s(__u32 flags)
>  	return flags2s(flags, tc_flags_def);
>  }
>  
> -static const flag_def buffer_flags_def[] = {
> +static constexpr flag_def buffer_flags_def[] = {
>  	{ V4L2_BUF_FLAG_MAPPED, "mapped" },
>  	{ V4L2_BUF_FLAG_QUEUED, "queued" },
>  	{ V4L2_BUF_FLAG_DONE, "done" },
> @@ -718,7 +711,7 @@ static const flag_def buffer_flags_def[] = {
>  	{ V4L2_BUF_FLAG_LAST, "last" },
>  	{ V4L2_BUF_FLAG_REQUEST_FD, "request-fd" },
>  	{ V4L2_BUF_FLAG_IN_REQUEST, "in-request" },
> -	{ 0, nullptr }
> +	{ 0, nullptr },
>  };
>  
>  std::string bufferflags2s(__u32 flags)
> @@ -757,10 +750,10 @@ std::string bufferflags2s(__u32 flags)
>  	return s;
>  }
>  
> -static const flag_def vbi_def[] = {
> -	{ V4L2_VBI_UNSYNC,     "unsynchronized" },
> +static constexpr flag_def vbi_def[] = {
> +	{ V4L2_VBI_UNSYNC, "unsynchronized" },
>  	{ V4L2_VBI_INTERLACED, "interlaced" },
> -	{ 0, nullptr }
> +	{ 0, nullptr },
>  };
>  
>  std::string vbiflags2s(__u32 flags)
> diff --git a/utils/libcecutil/cec-log.cpp b/utils/libcecutil/cec-log.cpp
> index e2178473c..3aea03b54 100644
> --- a/utils/libcecutil/cec-log.cpp
> +++ b/utils/libcecutil/cec-log.cpp
> @@ -14,19 +14,19 @@
>  #include "cec-log.h"
>  #include "compiler.h"
>  
> -static const struct cec_arg arg_u8 = {
> +static constexpr cec_arg arg_u8 = {
>  	CEC_ARG_TYPE_U8,
>  };
>  
> -static const struct cec_arg arg_u16 = {
> +static constexpr cec_arg arg_u16 = {
>  	CEC_ARG_TYPE_U16,
>  };
>  
> -static const struct cec_arg arg_u32 = {
> +static constexpr cec_arg arg_u32 = {
>  	CEC_ARG_TYPE_U32,
>  };
>  
> -static const struct cec_arg arg_string = {
> +static constexpr cec_arg arg_string = {
>  	CEC_ARG_TYPE_STRING,
>  };
>  
> @@ -330,7 +330,7 @@ static void log_unknown_msg(const struct cec_msg *msg)
>  	}
>  }
>  
> -const char *cec_log_ui_cmd_string(__u8 ui_cmd)
> +const char *const cec_log_ui_cmd_string(__u8 ui_cmd)
>  {
>  	for (unsigned i = 0; i < arg_ui_cmd.num_enum_values; i++) {
>  		if (type_ui_cmd[i].value == ui_cmd)
> diff --git a/utils/libcecutil/cec-log.h b/utils/libcecutil/cec-log.h
> index 09bf50637..b903fa22f 100644
> --- a/utils/libcecutil/cec-log.h
> +++ b/utils/libcecutil/cec-log.h
> @@ -38,6 +38,6 @@ struct cec_msg_args {
>  const struct cec_msg_args *cec_log_msg_args(unsigned int index);
>  void cec_log_msg(const struct cec_msg *msg);
>  void cec_log_htng_msg(const struct cec_msg *msg);
> -const char *cec_log_ui_cmd_string(__u8 ui_cmd);
> +const char *const cec_log_ui_cmd_string(__u8 ui_cmd);
>  
>  #endif
> diff --git a/utils/rds-ctl/rds-ctl.cpp b/utils/rds-ctl/rds-ctl.cpp
> index 8161aa453..0cae93a1f 100644
> --- a/utils/rds-ctl/rds-ctl.cpp
> +++ b/utils/rds-ctl/rds-ctl.cpp
> @@ -185,7 +185,7 @@ static int doioctl_name(int fd, unsigned long int request, void *parm, const cha
>  
>  #define doioctl(n, r, p) doioctl_name(n, r, p, #r)
>  
> -static const char *audmode2s(int audmode)
> +static const char *const audmode2s(int audmode)
>  {
>  	switch (audmode) {
>  		case V4L2_TUNER_MODE_STEREO: return "stereo";
> @@ -382,11 +382,11 @@ static void parse_freq_seek(char *optarg, struct v4l2_hw_freq_seek &seek)
>  	char *subs = optarg;
>  
>  	while (*subs != '\0') {
> -		static const char *const subopts[] = {
> +		static constexpr const char *subopts[] = {
>  			"dir",
>  			"wrap",
>  			"spacing",
> -			nullptr
> +			nullptr,
>  		};
>  
>  		switch (parse_subopt(&subs, subopts, &value)) {
> diff --git a/utils/v4l2-compliance/v4l2-compliance.cpp b/utils/v4l2-compliance/v4l2-compliance.cpp
> index 90a503612..8bd2f73e4 100644
> --- a/utils/v4l2-compliance/v4l2-compliance.cpp
> +++ b/utils/v4l2-compliance/v4l2-compliance.cpp
> @@ -1618,11 +1618,11 @@ int main(int argc, char **argv)
>  		case OptStreamAllColorTest:
>  			subs = optarg;
>  			while (*subs != '\0') {
> -				static const char *const subopts[] = {
> +				static constexpr const char *subopts[] = {
>  					"color",
>  					"skip",
>  					"perc",
> -					nullptr
> +					nullptr,
>  				};
>  
>  				switch (parse_subopt(&subs, subopts, &value)) {
> diff --git a/utils/v4l2-compliance/v4l2-test-buffers.cpp b/utils/v4l2-compliance/v4l2-test-buffers.cpp
> index bc5958c2c..f154f3152 100644
> --- a/utils/v4l2-compliance/v4l2-test-buffers.cpp
> +++ b/utils/v4l2-compliance/v4l2-test-buffers.cpp
> @@ -855,7 +855,7 @@ static int captureBufs(struct node *node, struct node *node_m2m_cap, const cv4l_
>  		cv4l_queue &m2m_q, unsigned frame_count, int pollmode,
>  		unsigned &capture_count)
>  {
> -	static const char *pollmode_str[] = {
> +	static constexpr const char *pollmode_str[] = {
>  		"",
>  		" (select)",
>  		" (epoll)",
> diff --git a/utils/v4l2-compliance/v4l2-test-colors.cpp b/utils/v4l2-compliance/v4l2-test-colors.cpp
> index 55a816949..3f0afe107 100644
> --- a/utils/v4l2-compliance/v4l2-test-colors.cpp
> +++ b/utils/v4l2-compliance/v4l2-test-colors.cpp
> @@ -59,25 +59,25 @@ struct color {
>  	double r, g, b, a;
>  };
>  
> -static const double bt601[3][3] = {
> -	{ 1, 0,       1.4020  },
> +static constexpr double bt601[3][3] = {
> +	{ 1, 0, 1.4020 },
>  	{ 1, -0.3441, -0.7141 },
> -	{ 1, 1.7720,  0       },
> +	{ 1, 1.7720, 0 },
>  };
> -static const double rec709[3][3] = {
> -	{ 1, 0,       1.5748  },
> +static constexpr double rec709[3][3] = {
> +	{ 1, 0, 1.5748 },
>  	{ 1, -0.1873, -0.4681 },
> -	{ 1, 1.8556,  0       },
> +	{ 1, 1.8556, 0 },
>  };
> -static const double smpte240m[3][3] = {
> -	{ 1, 0,       1.5756  },
> +static constexpr double smpte240m[3][3] = {
> +	{ 1, 0, 1.5756 },
>  	{ 1, -0.2253, -0.4767 },
> -	{ 1, 1.8270,  0       },
> +	{ 1, 1.8270, 0 },
>  };
> -static const double bt2020[3][3] = {
> -	{ 1, 0,       1.4746  },
> +static constexpr double bt2020[3][3] = {
> +	{ 1, 0, 1.4746 },
>  	{ 1, -0.1646, -0.5714 },
> -	{ 1, 1.8814,  0       },
> +	{ 1, 1.8814, 0 },
>  };
>  
>  static void ycbcr2rgb(const double m[3][3], double y, double cb, double cr,
> @@ -465,10 +465,10 @@ static void getColor(const cv4l_fmt &fmt, __u8 * const planes[3],
>  	}
>  }
>  
> -static const char * const colors[] = {
> +static constexpr const char *colors[] = {
>  	"red",
>  	"green",
> -	"blue"
> +	"blue",
>  };
>  
>  static int testColorsFmt(struct node *node, unsigned component,
> diff --git a/utils/v4l2-compliance/v4l2-test-formats.cpp b/utils/v4l2-compliance/v4l2-test-formats.cpp
> index 60ebf559a..3761b1fa9 100644
> --- a/utils/v4l2-compliance/v4l2-test-formats.cpp
> +++ b/utils/v4l2-compliance/v4l2-test-formats.cpp
> @@ -27,7 +27,7 @@
>  #include "compiler.h"
>  #include "v4l2-compliance.h"
>  
> -static const __u32 buftype2cap[] = {
> +static constexpr __u32 buftype2cap[] = {
>  	0,
>  	V4L2_CAP_VIDEO_CAPTURE | V4L2_CAP_VIDEO_M2M,
>  	V4L2_CAP_VIDEO_OUTPUT | V4L2_CAP_VIDEO_M2M,
> diff --git a/utils/v4l2-ctl/v4l2-ctl-common.cpp b/utils/v4l2-ctl/v4l2-ctl-common.cpp
> index 17ad488dd..66e468c3f 100644
> --- a/utils/v4l2-ctl/v4l2-ctl-common.cpp
> +++ b/utils/v4l2-ctl/v4l2-ctl-common.cpp
> @@ -116,15 +116,8 @@ void common_usage()
>  	       );
>  }
>  
> -static const char *prefixes[] = {
> -	"video",
> -	"radio",
> -	"vbi",
> -	"swradio",
> -	"v4l-subdev",
> -	"v4l-touch",
> -	"media",
> -	nullptr
> +static constexpr const char *prefixes[] = {
> +	"video", "radio", "vbi", "swradio", "v4l-subdev", "v4l-touch", "media", nullptr,
>  };
>  
>  static bool is_v4l_dev(const char *name)
> diff --git a/utils/v4l2-ctl/v4l2-ctl-edid.cpp b/utils/v4l2-ctl/v4l2-ctl-edid.cpp
> index 80ea151f5..f40c17241 100644
> --- a/utils/v4l2-ctl/v4l2-ctl-edid.cpp
> +++ b/utils/v4l2-ctl/v4l2-ctl-edid.cpp
> @@ -658,23 +658,23 @@ static void print_edid_mods(const struct v4l2_edid *e)
>  	}
>  	loc = get_edid_vid_cap_location(e->edid, e->blocks * 128);
>  	if (loc >= 0) {
> -		static const char *pt_scan[] = {
> +		static constexpr const char *pt_scan[] = {
>  			"No Data",
>  			"Always Overscanned",
>  			"Always Underscanned",
> -			"Supports both over- and underscan"
> +			"Supports both over- and underscan",
>  		};
> -		static const char *it_scan[] = {
> +		static constexpr const char *it_scan[] = {
>  			"IT Formats not supported",
>  			"Always Overscanned",
>  			"Always Underscanned",
> -			"Supports both over- and underscan"
> +			"Supports both over- and underscan",
>  		};
> -		static const char *ce_scan[] = {
> +		static constexpr const char *ce_scan[] = {
>  			"CE Formats not supported",
>  			"Always Overscanned",
>  			"Always Underscanned",
> -			"Supports both over- and underscan"
> +			"Supports both over- and underscan",
>  		};
>  		__u8 v = e->edid[loc];
>  
> @@ -1087,65 +1087,17 @@ void edid_cmd(int ch, char *optarg)
>  			break;
>  		subs = optarg;
>  		while (*subs != '\0') {
> -			static const char *const subopts[] = {
> -				"pad",
> -				"type",
> -				"edid",
> -				"file",
> -				"format",
> -				"pa",
> -				"s-pt",
> -				"s-it",
> -				"s-ce",
> -				"y444",
> -				"30-bit",
> -				"36-bit",
> -				"48-bit",
> -				"graphics",
> -				"photo",
> -				"cinema",
> -				"game",
> -				"scdc",
> -				"underscan",
> -				"audio",
> -				"ycbcr444",
> -				"ycbcr422",
> -				"qy",
> -				"qs",
> -				"xvycc-601",
> -				"xvycc-709",
> -				"sycc",
> -				"opycc",
> -				"oprgb",
> -				"bt2020-rgb",
> -				"bt2020-ycc",
> -				"bt2020-cycc",
> -				"dci-p3",
> -				"sdr",
> -				"hdr",
> -				"smpte2084",
> -				"hlg",
> -				"fl-fr",
> -				"lfe",
> -				"fc",
> -				"bl-br",
> -				"bc",
> -				"flc-frc",
> -				"rlc-rrc",
> -				"flw-frw",
> -				"tpfl-tpfr",
> -				"tpc",
> -				"tpfc",
> -				"ls-rs",
> -				"lfe2",
> -				"tpbc",
> -				"sil-sir",
> -				"tpsil-tpsir",
> -				"tpbl-tpbr",
> -				"btfc",
> -				"btfl-btbr",
> -				"tpls-tprs",
> -				nullptr
> +			static constexpr const char *subopts[] = {
> +				"pad",	      "type",	     "edid",	  "file",      "format",      "pa",
> +				"s-pt",	      "s-it",	     "s-ce",	  "y444",      "30-bit",      "36-bit",
> +				"48-bit",     "graphics",    "photo",	  "cinema",    "game",	      "scdc",
> +				"underscan",  "audio",	     "ycbcr444",  "ycbcr422",  "qy",	      "qs",
> +				"xvycc-601",  "xvycc-709",   "sycc",	  "opycc",     "oprgb",	      "bt2020-rgb",
> +				"bt2020-ycc", "bt2020-cycc", "dci-p3",	  "sdr",       "hdr",	      "smpte2084",
> +				"hlg",	      "fl-fr",	     "lfe",	  "fc",	       "bl-br",	      "bc",
> +				"flc-frc",    "rlc-rrc",     "flw-frw",	  "tpfl-tpfr", "tpc",	      "tpfc",
> +				"ls-rs",      "lfe2",	     "tpbc",	  "sil-sir",   "tpsil-tpsir", "tpbl-tpbr",
> +				"btfc",	      "btfl-btbr",   "tpls-tprs", nullptr,
>  			};
>  
>  			int opt = getsubopt(&subs, (char* const*)subopts, &value);
> @@ -1307,13 +1259,8 @@ void edid_cmd(int ch, char *optarg)
>  			break;
>  		subs = optarg;
>  		while (*subs != '\0') {
> -			static const char *const subopts[] = {
> -				"pad",
> -				"startblock",
> -				"blocks",
> -				"format",
> -				"file",
> -				nullptr
> +			static constexpr const char *subopts[] = {
> +				"pad", "startblock", "blocks", "format", "file", nullptr,
>  			};
>  
>  			switch (parse_subopt(&subs, subopts, &value)) {
> diff --git a/utils/v4l2-ctl/v4l2-ctl-io.cpp b/utils/v4l2-ctl/v4l2-ctl-io.cpp
> index 2c51e5736..c50fff86b 100644
> --- a/utils/v4l2-ctl/v4l2-ctl-io.cpp
> +++ b/utils/v4l2-ctl/v4l2-ctl-io.cpp
> @@ -31,7 +31,7 @@ void io_usage()
>  	       );
>  }
>  
> -static const char *inputtype2s(__u32 type)
> +static const char *const inputtype2s(__u32 type)
>  {
>  	switch (type) {
>  	case V4L2_INPUT_TYPE_TUNER:
> @@ -45,7 +45,7 @@ static const char *inputtype2s(__u32 type)
>  	}
>  }
>  
> -static const char *outputtype2s(__u32 type)
> +static const char *const outputtype2s(__u32 type)
>  {
>  	switch (type) {
>  	case V4L2_OUTPUT_TYPE_MODULATOR:
> diff --git a/utils/v4l2-ctl/v4l2-ctl-misc.cpp b/utils/v4l2-ctl/v4l2-ctl-misc.cpp
> index 1853608a3..06b5c7a90 100644
> --- a/utils/v4l2-ctl/v4l2-ctl-misc.cpp
> +++ b/utils/v4l2-ctl/v4l2-ctl-misc.cpp
> @@ -178,15 +178,10 @@ void misc_cmd(int ch, char *optarg)
>  	case OptSetJpegComp:
>  		subs = optarg;
>  		while (*subs != '\0') {
> -			static const char *const subopts[] = {
> -				"app0", "app1", "app2", "app3",
> -				"app4", "app5", "app6", "app7",
> -				"app8", "app9", "appa", "appb",
> -				"appc", "appd", "appe", "appf",
> -				"quality",
> -				"markers",
> -				"comment",
> -				nullptr
> +			static constexpr const char *subopts[] = {
> +				"app0", "app1", "app2",	   "app3",    "app4",	 "app5",  "app6",
> +				"app7", "app8", "app9",	   "appa",    "appb",	 "appc",  "appd",
> +				"appe", "appf", "quality", "markers", "comment", nullptr,
>  			};
>  			size_t len;
>  			int opt = parse_subopt(&subs, subopts, &value);
> @@ -235,10 +230,10 @@ void misc_cmd(int ch, char *optarg)
>  	case OptTryEncoderCmd:
>  		subs = optarg;
>  		while (*subs != '\0') {
> -			static const char *const subopts[] = {
> +			static constexpr const char *subopts[] = {
>  				"cmd",
>  				"flags",
> -				nullptr
> +				nullptr,
>  			};
>  
>  			switch (parse_subopt(&subs, subopts, &value)) {
> @@ -258,13 +253,8 @@ void misc_cmd(int ch, char *optarg)
>  	case OptTryDecoderCmd:
>  		subs = optarg;
>  		while (*subs != '\0') {
> -			static const char *const subopts[] = {
> -				"cmd",
> -				"flags",
> -				"stop_pts",
> -				"start_speed",
> -				"start_format",
> -				nullptr
> +			static constexpr const char *subopts[] = {
> +				"cmd", "flags", "stop_pts", "start_speed", "start_format", nullptr,
>  			};
>  
>  			switch (parse_subopt(&subs, subopts, &value)) {
> diff --git a/utils/v4l2-ctl/v4l2-ctl-overlay.cpp b/utils/v4l2-ctl/v4l2-ctl-overlay.cpp
> index 639a41757..71c437f81 100644
> --- a/utils/v4l2-ctl/v4l2-ctl-overlay.cpp
> +++ b/utils/v4l2-ctl/v4l2-ctl-overlay.cpp
> @@ -209,15 +209,8 @@ void overlay_cmd(int ch, char *optarg)
>  	case OptTryOverlayFormat:
>  		subs = optarg;
>  		while (subs && *subs != '\0') {
> -			static const char *const subopts[] = {
> -				"chromakey",
> -				"global_alpha",
> -				"left",
> -				"top",
> -				"width",
> -				"height",
> -				"field",
> -				nullptr
> +			static constexpr const char *subopts[] = {
> +				"chromakey", "global_alpha", "left", "top", "width", "height", "field", nullptr,
>  			};
>  
>  			switch (parse_subopt(&subs, subopts, &value)) {
> @@ -260,12 +253,8 @@ void overlay_cmd(int ch, char *optarg)
>  		subs = optarg;
>  		memset(&r, 0, sizeof(r));
>  		while (*subs != '\0') {
> -			static const char *const subopts[] = {
> -				"left",
> -				"top",
> -				"width",
> -				"height",
> -				nullptr
> +			static constexpr const char *subopts[] = {
> +				"left", "top", "width", "height", nullptr,
>  			};
>  
>  			switch (parse_subopt(&subs, subopts, &value)) {
> @@ -308,14 +297,9 @@ void overlay_cmd(int ch, char *optarg)
>  			const unsigned alpha_flags = V4L2_FBUF_FLAG_GLOBAL_ALPHA |
>  						     V4L2_FBUF_FLAG_LOCAL_ALPHA |
>  						     V4L2_FBUF_FLAG_LOCAL_INV_ALPHA;
> -			static const char *const subopts[] = {
> -				"chromakey",
> -				"src_chromakey",
> -				"global_alpha",
> -				"local_alpha",
> -				"local_inv_alpha",
> -				"fb",
> -				nullptr
> +			static constexpr const char *subopts[] = {
> +				"chromakey", "src_chromakey", "global_alpha", "local_alpha", "local_inv_alpha",
> +				"fb",	     nullptr,
>  			};
>  
>  			switch (parse_subopt(&subs, subopts, &value)) {
> diff --git a/utils/v4l2-ctl/v4l2-ctl-selection.cpp b/utils/v4l2-ctl/v4l2-ctl-selection.cpp
> index 4633776fb..7385d5bfe 100644
> --- a/utils/v4l2-ctl/v4l2-ctl-selection.cpp
> +++ b/utils/v4l2-ctl/v4l2-ctl-selection.cpp
> @@ -93,12 +93,8 @@ static void parse_crop(char *optarg, unsigned int &set_crop, v4l2_rect &vcrop)
>  	char *subs = optarg;
>  
>  	while (*subs != '\0') {
> -		static const char *const subopts[] = {
> -			"left",
> -			"top",
> -			"width",
> -			"height",
> -			nullptr
> +		static constexpr const char *subopts[] = {
> +			"left", "top", "width", "height", nullptr,
>  		};
>  
>  		switch (parse_subopt(&subs, subopts, &value)) {
> @@ -153,14 +149,8 @@ static int parse_selection(char *optarg, unsigned int &set_sel, v4l2_selection &
>  	char *subs = optarg;
>  
>  	while (*subs != '\0') {
> -		static const char *const subopts[] = {
> -			"target",
> -			"flags",
> -			"left",
> -			"top",
> -			"width",
> -			"height",
> -			nullptr
> +		static constexpr const char *subopts[] = {
> +			"target", "flags", "left", "top", "width", "height", nullptr,
>  		};
>  
>  		switch (parse_subopt(&subs, subopts, &value)) {
> diff --git a/utils/v4l2-ctl/v4l2-ctl-stds.cpp b/utils/v4l2-ctl/v4l2-ctl-stds.cpp
> index 82571f932..f54368eb4 100644
> --- a/utils/v4l2-ctl/v4l2-ctl-stds.cpp
> +++ b/utils/v4l2-ctl/v4l2-ctl-stds.cpp
> @@ -160,29 +160,11 @@ static int parse_timing_subopt(char **subopt_str, int *value)
>  	int opt;
>  	char *opt_str;
>  
> -	static const char * const subopt_list[] = {
> -		"width",
> -		"height",
> -		"interlaced",
> -		"polarities",
> -		"pixelclock",
> -		"hfp",
> -		"hs",
> -		"hbp",
> -		"vfp",
> -		"vs",
> -		"vbp",
> -		"il_vfp",
> -		"il_vs",
> -		"il_vbp",
> -		"index",
> -		"cvt",
> -		"gtf",
> -		"fps",
> -		"reduced-blanking",
> -		"reduced-fps",
> -		"clear",
> -		nullptr
> +	static constexpr const char *subopt_list[] = {
> +		"width", "height", "interlaced", "polarities", "pixelclock",	   "hfp",	  "hs",
> +		"hbp",	 "vfp",	   "vs",	 "vbp",	       "il_vfp",	   "il_vs",	  "il_vbp",
> +		"index", "cvt",	   "gtf",	 "fps",	       "reduced-blanking", "reduced-fps", "clear",
> +		nullptr,
>  	};
>  
>  	opt = getsubopt(subopt_str, (char* const*) subopt_list, &opt_str);
> diff --git a/utils/v4l2-ctl/v4l2-ctl-streaming.cpp b/utils/v4l2-ctl/v4l2-ctl-streaming.cpp
> index b8dc30fb3..62424e4cc 100644
> --- a/utils/v4l2-ctl/v4l2-ctl-streaming.cpp
> +++ b/utils/v4l2-ctl/v4l2-ctl-streaming.cpp
> @@ -503,7 +503,7 @@ static void print_buffer(FILE *f, struct v4l2_buffer &buf)
>  		static_cast<__u64>(buf.timestamp.tv_sec), static_cast<__u64>(buf.timestamp.tv_usec),
>  		timestamp_type2s(buf.flags).c_str(), timestamp_src2s(buf.flags).c_str());
>  	if (buf.flags & V4L2_BUF_FLAG_TIMECODE) {
> -		static const int fps_types[] = { 0, 24, 25, 30, 50, 60 };
> +		static constexpr int fps_types[] = { 0, 24, 25, 30, 50, 60 };
>  		int fps = buf.timecode.type;
>  
>  		if (fps > 5)
> diff --git a/utils/v4l2-ctl/v4l2-ctl-subdev.cpp b/utils/v4l2-ctl/v4l2-ctl-subdev.cpp
> index ecfd32443..1764ad485 100644
> --- a/utils/v4l2-ctl/v4l2-ctl-subdev.cpp
> +++ b/utils/v4l2-ctl/v4l2-ctl-subdev.cpp
> @@ -5,10 +5,10 @@ struct mbus_name {
>  	__u32 code;
>  };
>  
> -static const struct mbus_name mbus_names[] = {
> +static constexpr struct mbus_name mbus_names[] = {
>  	{ "Fixed", MEDIA_BUS_FMT_FIXED },
>  #include "media-bus-format-names.h"
> -	{ nullptr, 0 }
> +	{ nullptr, 0 },
>  };
>  
>  /* selection specified */
> @@ -97,10 +97,10 @@ void subdev_cmd(int ch, char *optarg)
>  	case OptListSubDevFrameSizes:
>  		subs = optarg;
>  		while (*subs != '\0') {
> -			static const char *const subopts[] = {
> +			static constexpr const char *subopts[] = {
>  				"pad",
>  				"code",
> -				nullptr
> +				nullptr,
>  			};
>  
>  			switch (parse_subopt(&subs, subopts, &value)) {
> @@ -119,12 +119,8 @@ void subdev_cmd(int ch, char *optarg)
>  	case OptListSubDevFrameIntervals:
>  		subs = optarg;
>  		while (*subs != '\0') {
> -			static const char *const subopts[] = {
> -				"pad",
> -				"code",
> -				"width",
> -				"height",
> -				nullptr
> +			static constexpr const char *subopts[] = {
> +				"pad", "code", "width", "height", nullptr,
>  			};
>  
>  			switch (parse_subopt(&subs, subopts, &value)) {
> @@ -153,10 +149,10 @@ void subdev_cmd(int ch, char *optarg)
>  	case OptGetSubDevSelection:
>  		subs = optarg;
>  		while (*subs != '\0') {
> -			static const char *const subopts[] = {
> +			static constexpr const char *subopts[] = {
>  				"pad",
>  				"target",
> -				nullptr
> +				nullptr,
>  			};
>  			unsigned int target;
>  
> @@ -187,18 +183,9 @@ void subdev_cmd(int ch, char *optarg)
>  		ffmt.field = V4L2_FIELD_ANY;
>  		subs = optarg;
>  		while (*subs != '\0') {
> -			static const char *const subopts[] = {
> -				"width",
> -				"height",
> -				"code",
> -				"field",
> -				"colorspace",
> -				"ycbcr",
> -				"hsv",
> -				"quantization",
> -				"xfer",
> -				"pad",
> -				nullptr
> +			static constexpr const char *subopts[] = {
> +				"width", "height",	 "code", "field", "colorspace", "ycbcr",
> +				"hsv",	 "quantization", "xfer", "pad",	  nullptr,
>  			};
>  
>  			switch (parse_subopt(&subs, subopts, &value)) {
> @@ -256,15 +243,8 @@ void subdev_cmd(int ch, char *optarg)
>  		subs = optarg;
>  
>  		while (*subs != '\0') {
> -			static const char *const subopts[] = {
> -				"target",
> -				"flags",
> -				"left",
> -				"top",
> -				"width",
> -				"height",
> -				"pad",
> -				nullptr
> +			static constexpr const char *subopts[] = {
> +				"target", "flags", "left", "top", "width", "height", "pad", nullptr,
>  			};
>  
>  			switch (parse_subopt(&subs, subopts, &value)) {
> @@ -309,10 +289,10 @@ void subdev_cmd(int ch, char *optarg)
>  		subs = optarg;
>  
>  		while (*subs != '\0') {
> -			static const char *const subopts[] = {
> +			static constexpr const char *subopts[] = {
>  				"pad",
>  				"fps",
> -				nullptr
> +				nullptr,
>  			};
>  
>  			switch (parse_subopt(&subs, subopts, &value)) {
> diff --git a/utils/v4l2-ctl/v4l2-ctl-tuner.cpp b/utils/v4l2-ctl/v4l2-ctl-tuner.cpp
> index 7d6f6f3e7..126b413eb 100644
> --- a/utils/v4l2-ctl/v4l2-ctl-tuner.cpp
> +++ b/utils/v4l2-ctl/v4l2-ctl-tuner.cpp
> @@ -45,7 +45,7 @@ void tuner_usage()
>  	       );
>  }
>  
> -static const char *audmode2s(int audmode)
> +static const char *const audmode2s(int audmode)
>  {
>  	switch (audmode) {
>  		case V4L2_TUNER_MODE_STEREO: return "stereo";
> @@ -57,7 +57,7 @@ static const char *audmode2s(int audmode)
>  	}
>  }
>  
> -static const char *ttype2s(int type)
> +static const char *const ttype2s(int type)
>  {
>  	switch (type) {
>  		case V4L2_TUNER_RADIO: return "radio";
> @@ -157,13 +157,8 @@ static void parse_freq_seek(char *optarg, struct v4l2_hw_freq_seek &seek)
>  	char *subs = optarg;
>  
>  	while (*subs != '\0') {
> -		static const char *const subopts[] = {
> -			"dir",
> -			"wrap",
> -			"spacing",
> -			"low",
> -			"high",
> -			nullptr
> +		static constexpr const char *subopts[] = {
> +			"dir", "wrap", "spacing", "low", "high", nullptr,
>  		};
>  
>  		switch (parse_subopt(&subs, subopts, &value)) {
> diff --git a/utils/v4l2-ctl/v4l2-ctl-vbi.cpp b/utils/v4l2-ctl/v4l2-ctl-vbi.cpp
> index 33191aa64..51508a7b9 100644
> --- a/utils/v4l2-ctl/v4l2-ctl-vbi.cpp
> +++ b/utils/v4l2-ctl/v4l2-ctl-vbi.cpp
> @@ -123,15 +123,9 @@ void vbi_cmd(int ch, char *optarg)
>  		subs = optarg;
>  		memset(&raw->fmt.vbi, 0, sizeof(raw->fmt.vbi));
>  		while (*subs != '\0') {
> -			static const char *const subopts[] = {
> -				"samplingrate",
> -				"offset",
> -				"samplesperline",
> -				"start0",
> -				"start1",
> -				"count0",
> -				"count1",
> -				nullptr
> +			static constexpr const char *subopts[] = {
> +				"samplingrate", "offset", "samplesperline", "start0",
> +				"start1",	"count0", "count1",	    nullptr,
>  			};
>  
>  			switch (parse_subopt(&subs, subopts, &value)) {
> diff --git a/utils/v4l2-ctl/v4l2-ctl-vidcap.cpp b/utils/v4l2-ctl/v4l2-ctl-vidcap.cpp
> index c66c248a3..b12631b80 100644
> --- a/utils/v4l2-ctl/v4l2-ctl-vidcap.cpp
> +++ b/utils/v4l2-ctl/v4l2-ctl-vidcap.cpp
> @@ -133,11 +133,11 @@ void vidcap_cmd(int ch, char *optarg)
>  	case OptListFrameIntervals:
>  		subs = optarg;
>  		while (*subs != '\0') {
> -			static const char *const subopts[] = {
> +			static constexpr const char *subopts[] = {
>  				"width",
>  				"height",
>  				"pixelformat",
> -				nullptr
> +				nullptr,
>  			};
>  
>  			switch (parse_subopt(&subs, subopts, &value)) {
> @@ -395,9 +395,8 @@ void vidcap_list(cv4l_fd &fd)
>  
>  void print_touch_buffer(FILE *f, cv4l_buffer &buf, cv4l_fmt &fmt, cv4l_queue &q)
>  {
> -	static const char img[16] = {
> -		'.', ',', ':', ';', '!', '|', 'i', 'c',
> -		'n', 'o', 'm', 'I', 'C', 'N', 'O', 'M',
> +	static constexpr char img[16] = {
> +		'.', ',', ':', ';', '!', '|', 'i', 'c', 'n', 'o', 'm', 'I', 'C', 'N', 'O', 'M',
>  	};
>  	auto vbuf = static_cast<__s16 *>(q.g_dataptr(buf.g_index(), 0));
>  	__u32 x, y;
> diff --git a/utils/v4l2-ctl/v4l2-ctl.cpp b/utils/v4l2-ctl/v4l2-ctl.cpp
> index d91577e14..4ddbecce7 100644
> --- a/utils/v4l2-ctl/v4l2-ctl.cpp
> +++ b/utils/v4l2-ctl/v4l2-ctl.cpp
> @@ -523,11 +523,11 @@ void printfmt(int fd, const struct v4l2_format &vfmt)
>  
>  static std::string frmtype2s(unsigned type)
>  {
> -	static const char *types[] = {
> +	static constexpr const char *types[] = {
>  		"Unknown",
>  		"Discrete",
>  		"Continuous",
> -		"Stepwise"
> +		"Stepwise",
>  	};
>  
>  	if (type > 3)
> @@ -764,20 +764,9 @@ int parse_fmt(char *optarg, __u32 &width, __u32 &height, __u32 &pixelformat,
>  	flags = 0;
>  	subs = optarg;
>  	while (*subs != '\0') {
> -		static const char *const subopts[] = {
> -			"width",
> -			"height",
> -			"pixelformat",
> -			"field",
> -			"colorspace",
> -			"ycbcr",
> -			"hsv",
> -			"bytesperline",
> -			"premul-alpha",
> -			"quantization",
> -			"xfer",
> -			"sizeimage",
> -			nullptr
> +		static constexpr const char *subopts[] = {
> +			"width",	"height",	"pixelformat",	"field", "colorspace", "ycbcr", "hsv",
> +			"bytesperline", "premul-alpha", "quantization", "xfer",	 "sizeimage",  nullptr,
>  		};
>  
>  		switch (parse_subopt(&subs, subopts, &value)) {
> @@ -1032,8 +1021,7 @@ static int open_media_bus_info(const std::string &bus_info)
>  	return -1;
>  }
>  
> -static const char *make_devname(const char *device, const char *devname,
> -				const std::string &media_bus_info)
> +static const char *const make_devname(const char *device, const char *devname, const std::string &media_bus_info)
>  {
>  	if (device[0] >= '0' && device[0] <= '9' && strlen(device) <= 3) {
>  		static char newdev[32];
> diff --git a/utils/v4l2-dbg/v4l2-dbg.cpp b/utils/v4l2-dbg/v4l2-dbg.cpp
> index 0873c2686..b3eed1de7 100644
> --- a/utils/v4l2-dbg/v4l2-dbg.cpp
> +++ b/utils/v4l2-dbg/v4l2-dbg.cpp
> @@ -302,7 +302,7 @@ static unsigned long long parse_reg(const struct board_list *curr_bd, const std:
>  	return strtoull(reg.c_str(), nullptr, 0);
>  }
>  
> -static const char *reg_name(const struct board_list *curr_bd, unsigned long long reg)
> +static const char *const reg_name(const struct board_list *curr_bd, unsigned long long reg)
>  {
>  	if (curr_bd) {
>  		for (const auto &curr : curr_bd->regs) {
> @@ -317,7 +317,7 @@ static const char *reg_name(const struct board_list *curr_bd, unsigned long long
>  	return nullptr;
>  }
>  
> -static const char *binary(unsigned long long val)
> +static const char *const binary(unsigned long long val)
>  {
>  	static char bin[80];
>  	char *p = bin;
> @@ -494,10 +494,10 @@ int main(int argc, char **argv)
>  				break;
>  
>  			while (*subs != '\0') {
> -				static const char * const subopts[] = {
> +				static constexpr const char *subopts[] = {
>  					"min",
>  					"max",
> -					nullptr
> +					nullptr,
>  				};
>  
>  				switch (parse_subopt(&subs, subopts, &value)) {
> 

I'm rejecting this.

I have nothing against changing const to constexpr where appropriate,
but you are making way too many other changes, and I disagree with a lot
of them.

Regards,

	Hans
diff mbox series

Patch

diff --git a/utils/cec-compliance/cec-test-adapter.cpp b/utils/cec-compliance/cec-test-adapter.cpp
index cf1b6191f..3aa78fd66 100644
--- a/utils/cec-compliance/cec-test-adapter.cpp
+++ b/utils/cec-compliance/cec-test-adapter.cpp
@@ -14,8 +14,8 @@ 
 
 #include "cec-compliance.h"
 
-static const __u8 tx_ok_retry_mask = CEC_TX_STATUS_OK | CEC_TX_STATUS_MAX_RETRIES;
-static const __u32 msg_fl_mask = CEC_MSG_FL_REPLY_TO_FOLLOWERS | CEC_MSG_FL_RAW;
+static constexpr __u8 tx_ok_retry_mask = CEC_TX_STATUS_OK | CEC_TX_STATUS_MAX_RETRIES;
+static constexpr __u32 msg_fl_mask = CEC_MSG_FL_REPLY_TO_FOLLOWERS | CEC_MSG_FL_RAW;
 
 // Flush any pending messages
 static int flush_pending_msgs(struct node *node)
@@ -107,27 +107,24 @@  static int testAdapPhysAddr(struct node *node)
 
 static int testAdapLogAddrs(struct node *node)
 {
-	static const __u8 la_types[] = {
+	static constexpr __u8 la_types[] = {
 		CEC_LOG_ADDR_TYPE_TV,
 		CEC_LOG_ADDR_TYPE_RECORD,
 		CEC_LOG_ADDR_TYPE_TUNER,
-		CEC_LOG_ADDR_TYPE_AUDIOSYSTEM
+		CEC_LOG_ADDR_TYPE_AUDIOSYSTEM,
 	};
-	static const __u8 prim_dev_types[] = {
+	static constexpr __u8 prim_dev_types[] = {
 		CEC_OP_PRIM_DEVTYPE_TV,
 		CEC_OP_PRIM_DEVTYPE_RECORD,
 		CEC_OP_PRIM_DEVTYPE_TUNER,
-		CEC_OP_PRIM_DEVTYPE_AUDIOSYSTEM
+		CEC_OP_PRIM_DEVTYPE_AUDIOSYSTEM,
 	};
-	static const __u8 all_dev_types[2] = {
-		CEC_OP_ALL_DEVTYPE_TV | CEC_OP_ALL_DEVTYPE_RECORD |
-		CEC_OP_ALL_DEVTYPE_AUDIOSYSTEM,
+	static constexpr __u8 all_dev_types[2] = {
+		CEC_OP_ALL_DEVTYPE_TV | CEC_OP_ALL_DEVTYPE_RECORD | CEC_OP_ALL_DEVTYPE_AUDIOSYSTEM,
 		CEC_OP_ALL_DEVTYPE_RECORD | CEC_OP_ALL_DEVTYPE_AUDIOSYSTEM,
 	};
-	static const __u8 features[12] = {
-		0x90, 0x00, 0x8e, 0x00,
-		0xff, 0xff, 0xff, 0xff,
-		0xff, 0xff, 0xff, 0xff
+	static constexpr __u8 features[12] = {
+		0x90, 0x00, 0x8e, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
 	};
 	struct cec_log_addrs clear = { };
 	struct cec_log_addrs laddrs;
diff --git a/utils/cec-compliance/cec-test.cpp b/utils/cec-compliance/cec-test.cpp
index 8da29f227..55e51b7b2 100644
--- a/utils/cec-compliance/cec-test.cpp
+++ b/utils/cec-compliance/cec-test.cpp
@@ -701,7 +701,7 @@  static const vec_remote_subtests deck_ctl_subtests{
 
 /* Tuner Control */
 
-static const char *bcast_type2s(__u8 bcast_type)
+static const char *const bcast_type2s(__u8 bcast_type)
 {
 	switch (bcast_type) {
 	case CEC_OP_ANA_BCAST_TYPE_CABLE:
diff --git a/utils/cec-ctl/cec-ctl.cpp b/utils/cec-ctl/cec-ctl.cpp
index c17265a5c..a7c4f3a2b 100644
--- a/utils/cec-ctl/cec-ctl.cpp
+++ b/utils/cec-ctl/cec-ctl.cpp
@@ -350,7 +350,7 @@  static void usage()
 	       );
 }
 
-static const char *power_status2s(__u8 power_status)
+static const char *const power_status2s(__u8 power_status)
 {
 	switch (power_status) {
 	case CEC_OP_POWER_STATUS_ON:
@@ -443,7 +443,7 @@  static void log_raw_msg(const struct cec_msg *msg)
 	printf("\n");
 }
 
-static const char *event2s(__u32 event)
+static const char *const event2s(__u32 event)
 {
 	switch (event) {
 	case CEC_EVENT_STATE_CHANGE:
@@ -2179,9 +2179,9 @@  int main(int argc, char **argv)
 			usage();
 			return 1;
 		case OptVendorCommand: {
-			static const char *arg_names[] = {
+			static constexpr const char *arg_names[] = {
 				"payload",
-				nullptr
+				nullptr,
 			};
 			char *value, *endptr, *subs = optarg;
 			__u8 size = 0;
@@ -2213,10 +2213,10 @@  int main(int argc, char **argv)
 			break;
 		}
 		case OptCustomCommand: {
-			static const char *arg_names[] = {
+			static constexpr const char *arg_names[] = {
 				"cmd",
 				"payload",
-				nullptr
+				nullptr,
 			};
 			char *value, *endptr, *subs = optarg;
 			bool have_cmd = false;
@@ -2256,10 +2256,10 @@  int main(int argc, char **argv)
 			break;
 		}
 		case OptVendorCommandWithID: {
-			static const char *arg_names[] = {
+			static constexpr const char *arg_names[] = {
 				"vendor-id",
 				"cmd",
-				nullptr
+				nullptr,
 			};
 			char *value, *endptr, *subs = optarg;
 			__u32 vendor_id = 0;
@@ -2295,9 +2295,9 @@  int main(int argc, char **argv)
 			break;
 		}
 		case OptVendorRemoteButtonDown: {
-			static const char *arg_names[] = {
+			static constexpr const char *arg_names[] = {
 				"rc-code",
-				nullptr
+				nullptr,
 			};
 			char *value, *endptr, *subs = optarg;
 			__u8 size = 0;
@@ -2344,10 +2344,10 @@  int main(int argc, char **argv)
 			break;
 
 		case OptTestPowerCycle: {
-			static const char *arg_names[] = {
+			static constexpr const char *arg_names[] = {
 				"polls",
 				"sleep",
-				nullptr
+				nullptr,
 			};
 			char *value, *subs = optarg;
 
@@ -2371,16 +2371,10 @@  int main(int argc, char **argv)
 		}
 
 		case OptStressTestPowerCycle: {
-			static const char *arg_names[] = {
-				"cnt",
-				"min-sleep",
-				"max-sleep",
-				"seed",
-				"repeats",
-				"sleep-before-on",
-				"sleep-before-off",
-				"polls",
-				nullptr
+			static constexpr const char *arg_names[] = {
+				"cnt",	   "min-sleep",	      "max-sleep",	  "seed",
+				"repeats", "sleep-before-on", "sleep-before-off", "polls",
+				nullptr,
 			};
 			char *value, *subs = optarg;
 
diff --git a/utils/cec-follower/cec-processing.cpp b/utils/cec-follower/cec-processing.cpp
index 024407471..48d627096 100644
--- a/utils/cec-follower/cec-processing.cpp
+++ b/utils/cec-follower/cec-processing.cpp
@@ -38,10 +38,10 @@  struct la_info la_info[15];
 
 static struct timespec start_monotonic;
 static struct timeval start_timeofday;
-static const time_t time_to_transient = 1;
-static const time_t time_to_stable = 8;
+static constexpr time_t time_to_transient = 1;
+static constexpr time_t time_to_stable = 8;
 
-static const char *get_ui_cmd_string(__u8 ui_cmd)
+static const char *const get_ui_cmd_string(__u8 ui_cmd)
 {
 	return cec_log_ui_cmd_string(ui_cmd) ? : "Unknown";
 }
diff --git a/utils/common/media-info.cpp b/utils/common/media-info.cpp
index 3a5477e84..ae327a7a1 100644
--- a/utils/common/media-info.cpp
+++ b/utils/common/media-info.cpp
@@ -33,23 +33,17 @@  static std::string num2s(unsigned num, bool is_hex = true)
 	return buf;
 }
 
-static struct {
+static constexpr struct {
 	const char *devname;
 	enum media_type type;
 } media_types[] = {
-	{ "video", MEDIA_TYPE_VIDEO },
-	{ "vbi", MEDIA_TYPE_VBI },
-	{ "radio", MEDIA_TYPE_RADIO },
-	{ "swradio", MEDIA_TYPE_SDR },
-	{ "v4l-subdev", MEDIA_TYPE_SUBDEV },
-	{ "v4l-touch", MEDIA_TYPE_TOUCH },
-	{ "media", MEDIA_TYPE_MEDIA },
-	{ "frontend", MEDIA_TYPE_DVB_FRONTEND },
-	{ "demux", MEDIA_TYPE_DVB_DEMUX },
-	{ "dvr", MEDIA_TYPE_DVB_DVR },
-	{ "net", MEDIA_TYPE_DVB_NET },
-	{ "ca", MEDIA_TYPE_DTV_CA },
-	{ nullptr, MEDIA_TYPE_UNKNOWN }
+	{ "video", MEDIA_TYPE_VIDEO },	     { "vbi", MEDIA_TYPE_VBI },
+	{ "radio", MEDIA_TYPE_RADIO },	     { "swradio", MEDIA_TYPE_SDR },
+	{ "v4l-subdev", MEDIA_TYPE_SUBDEV }, { "v4l-touch", MEDIA_TYPE_TOUCH },
+	{ "media", MEDIA_TYPE_MEDIA },	     { "frontend", MEDIA_TYPE_DVB_FRONTEND },
+	{ "demux", MEDIA_TYPE_DVB_DEMUX },   { "dvr", MEDIA_TYPE_DVB_DVR },
+	{ "net", MEDIA_TYPE_DVB_NET },	     { "ca", MEDIA_TYPE_DTV_CA },
+	{ nullptr, MEDIA_TYPE_UNKNOWN },
 };
 
 media_type mi_media_detect_type(const char *device)
@@ -255,10 +249,10 @@  int mi_get_media_fd(int fd, const char *bus_info)
 	return media_fd;
 }
 
-static const flag_def entity_flags_def[] = {
+static constexpr flag_def entity_flags_def[] = {
 	{ MEDIA_ENT_FL_DEFAULT, "default" },
 	{ MEDIA_ENT_FL_CONNECTOR, "connector" },
-	{ 0, nullptr }
+	{ 0, nullptr },
 };
 
 std::string mi_entflags2s(__u32 flags)
@@ -266,7 +260,7 @@  std::string mi_entflags2s(__u32 flags)
 	return flags2s(flags, entity_flags_def);
 }
 
-static const flag_def interface_types_def[] = {
+static constexpr flag_def interface_types_def[] = {
 	{ MEDIA_INTF_T_DVB_FE, "DVB Front End" },
 	{ MEDIA_INTF_T_DVB_DEMUX, "DVB Demuxer" },
 	{ MEDIA_INTF_T_DVB_DVR, "DVB DVR" },
@@ -288,7 +282,7 @@  static const flag_def interface_types_def[] = {
 	{ MEDIA_INTF_T_ALSA_HWDEP, "ALSA HWDEP" },
 	{ MEDIA_INTF_T_ALSA_SEQUENCER, "ALSA Sequencer" },
 	{ MEDIA_INTF_T_ALSA_TIMER, "ALSA Timer" },
-	{ 0, nullptr }
+	{ 0, nullptr },
 };
 
 std::string mi_ifacetype2s(__u32 type)
@@ -299,7 +293,7 @@  std::string mi_ifacetype2s(__u32 type)
 	return "FAIL: Unknown (" + num2s(type) + ")";
 }
 
-static const flag_def entity_functions_def[] = {
+static constexpr flag_def entity_functions_def[] = {
 	{ MEDIA_ENT_F_UNKNOWN, "FAIL: Uninitialized Function" },
 	{ MEDIA_ENT_F_V4L2_SUBDEV_UNKNOWN, "FAIL: Unknown V4L2 Sub-Device" },
 	{ MEDIA_ENT_T_DEVNODE_UNKNOWN, "FAIL: Unknown Device Node" },
@@ -335,7 +329,7 @@  static const flag_def entity_functions_def[] = {
 	{ MEDIA_ENT_F_PROC_VIDEO_ENCODER, "Video Encoder" },
 	{ MEDIA_ENT_F_VID_MUX, "Video Muxer" },
 	{ MEDIA_ENT_F_VID_IF_BRIDGE, "Video Interface Bridge" },
-	{ 0, nullptr }
+	{ 0, nullptr },
 };
 
 std::string mi_entfunction2s(__u32 function, bool *is_invalid)
@@ -392,11 +386,11 @@  bool mi_func_requires_intf(__u32 function)
 	}
 }
 
-static const flag_def pad_flags_def[] = {
+static constexpr flag_def pad_flags_def[] = {
 	{ MEDIA_PAD_FL_SINK, "Sink" },
 	{ MEDIA_PAD_FL_SOURCE, "Source" },
 	{ MEDIA_PAD_FL_MUST_CONNECT, "Must Connect" },
-	{ 0, nullptr }
+	{ 0, nullptr },
 };
 
 std::string mi_padflags2s(__u32 flags)
@@ -404,11 +398,11 @@  std::string mi_padflags2s(__u32 flags)
 	return flags2s(flags, pad_flags_def);
 }
 
-static const flag_def link_flags_def[] = {
+static constexpr flag_def link_flags_def[] = {
 	{ MEDIA_LNK_FL_ENABLED, "Enabled" },
 	{ MEDIA_LNK_FL_IMMUTABLE, "Immutable" },
 	{ MEDIA_LNK_FL_DYNAMIC, "Dynamic" },
-	{ 0, nullptr }
+	{ 0, nullptr },
 };
 
 std::string mi_linkflags2s(__u32 flags)
diff --git a/utils/common/v4l2-info.cpp b/utils/common/v4l2-info.cpp
index cb3cb91f7..512597a20 100644
--- a/utils/common/v4l2-info.cpp
+++ b/utils/common/v4l2-info.cpp
@@ -201,7 +201,7 @@  std::string buftype2s(int type)
 	}
 }
 
-static const flag_def bufcap_def[] = {
+static constexpr flag_def bufcap_def[] = {
 	{ V4L2_BUF_CAP_SUPPORTS_MMAP, "mmap" },
 	{ V4L2_BUF_CAP_SUPPORTS_USERPTR, "userptr" },
 	{ V4L2_BUF_CAP_SUPPORTS_DMABUF, "dmabuf" },
@@ -209,7 +209,7 @@  static const flag_def bufcap_def[] = {
 	{ V4L2_BUF_CAP_SUPPORTS_ORPHANED_BUFS, "orphaned-bufs" },
 	{ V4L2_BUF_CAP_SUPPORTS_M2M_HOLD_CAPTURE_BUF, "m2m-hold-capture-buf" },
 	{ V4L2_BUF_CAP_SUPPORTS_MMAP_CACHE_HINTS, "mmap-cache-hints" },
-	{ 0, nullptr }
+	{ 0, nullptr },
 };
 
 std::string bufcap2s(__u32 caps)
@@ -345,9 +345,9 @@  std::string quantization2s(int val)
 	}
 }
 
-static const flag_def pixflags_def[] = {
-	{ V4L2_PIX_FMT_FLAG_PREMUL_ALPHA,  "premultiplied-alpha" },
-	{ 0, nullptr }
+static constexpr flag_def pixflags_def[] = {
+	{ V4L2_PIX_FMT_FLAG_PREMUL_ALPHA, "premultiplied-alpha" },
+	{ 0, nullptr },
 };
 
 std::string pixflags2s(unsigned flags)
@@ -355,12 +355,12 @@  std::string pixflags2s(unsigned flags)
 	return flags2s(flags, pixflags_def);
 }
 
-static const flag_def service_def[] = {
-	{ V4L2_SLICED_TELETEXT_B,  "teletext" },
-	{ V4L2_SLICED_VPS,         "vps" },
+static constexpr flag_def service_def[] = {
+	{ V4L2_SLICED_TELETEXT_B, "teletext" },
+	{ V4L2_SLICED_VPS, "vps" },
 	{ V4L2_SLICED_CAPTION_525, "cc" },
-	{ V4L2_SLICED_WSS_625,     "wss" },
-	{ 0, nullptr }
+	{ V4L2_SLICED_WSS_625, "wss" },
+	{ 0, nullptr },
 };
 
 std::string service2s(unsigned service)
@@ -368,19 +368,19 @@  std::string service2s(unsigned service)
 	return flags2s(service, service_def);
 }
 
-#define FMTDESC_DEF(enc_type)							\
-static const flag_def fmtdesc_ ## enc_type ## _def[] = { 			\
-	{ V4L2_FMT_FLAG_COMPRESSED, "compressed" }, 				\
-	{ V4L2_FMT_FLAG_EMULATED, "emulated" }, 				\
-	{ V4L2_FMT_FLAG_CONTINUOUS_BYTESTREAM, "continuous-bytestream" }, 	\
-	{ V4L2_FMT_FLAG_DYN_RESOLUTION, "dyn-resolution" }, 			\
-	{ V4L2_FMT_FLAG_ENC_CAP_FRAME_INTERVAL, "enc-cap-frame-interval" },	\
-	{ V4L2_FMT_FLAG_CSC_COLORSPACE, "csc-colorspace" }, 			\
-	{ V4L2_FMT_FLAG_CSC_YCBCR_ENC, "csc-"#enc_type }, 			\
-	{ V4L2_FMT_FLAG_CSC_QUANTIZATION, "csc-quantization" }, 		\
-	{ V4L2_FMT_FLAG_CSC_XFER_FUNC, "csc-xfer-func" }, 			\
-	{ 0, NULL } 								\
-};
+#define FMTDESC_DEF(enc_type)                                                       \
+	static constexpr flag_def fmtdesc_##enc_type##_def[] = {                    \
+		{ V4L2_FMT_FLAG_COMPRESSED, "compressed" },                         \
+		{ V4L2_FMT_FLAG_EMULATED, "emulated" },                             \
+		{ V4L2_FMT_FLAG_CONTINUOUS_BYTESTREAM, "continuous-bytestream" },   \
+		{ V4L2_FMT_FLAG_DYN_RESOLUTION, "dyn-resolution" },                 \
+		{ V4L2_FMT_FLAG_ENC_CAP_FRAME_INTERVAL, "enc-cap-frame-interval" }, \
+		{ V4L2_FMT_FLAG_CSC_COLORSPACE, "csc-colorspace" },                 \
+		{ V4L2_FMT_FLAG_CSC_YCBCR_ENC, "csc-" #enc_type },                  \
+		{ V4L2_FMT_FLAG_CSC_QUANTIZATION, "csc-quantization" },             \
+		{ V4L2_FMT_FLAG_CSC_XFER_FUNC, "csc-xfer-func" },                   \
+		{ 0, NULL }                                                         \
+	};
 
 FMTDESC_DEF(ycbcr)
 FMTDESC_DEF(hsv)
@@ -392,14 +392,14 @@  std::string fmtdesc2s(unsigned flags, bool is_hsv)
 	return flags2s(flags, fmtdesc_ycbcr_def);
 }
 
-#define MBUS_DEF(enc_type)						\
-static const flag_def mbus_ ## enc_type ## _def[] = { 			\
-	{ V4L2_SUBDEV_MBUS_CODE_CSC_COLORSPACE, "csc-colorspace" }, 	\
-	{ V4L2_SUBDEV_MBUS_CODE_CSC_YCBCR_ENC, "csc-"#enc_type },	\
-	{ V4L2_SUBDEV_MBUS_CODE_CSC_QUANTIZATION, "csc-quantization" }, \
-	{ V4L2_SUBDEV_MBUS_CODE_CSC_XFER_FUNC, "csc-xfer-func" }, 	\
-	{ 0, NULL }							\
-};
+#define MBUS_DEF(enc_type)                                                      \
+	static constexpr flag_def mbus_##enc_type##_def[] = {                   \
+		{ V4L2_SUBDEV_MBUS_CODE_CSC_COLORSPACE, "csc-colorspace" },     \
+		{ V4L2_SUBDEV_MBUS_CODE_CSC_YCBCR_ENC, "csc-" #enc_type },      \
+		{ V4L2_SUBDEV_MBUS_CODE_CSC_QUANTIZATION, "csc-quantization" }, \
+		{ V4L2_SUBDEV_MBUS_CODE_CSC_XFER_FUNC, "csc-xfer-func" },       \
+		{ 0, NULL }                                                     \
+	};
 
 MBUS_DEF(ycbcr)
 MBUS_DEF(hsv)
@@ -411,7 +411,7 @@  std::string mbus2s(unsigned flags, bool is_hsv)
 	return flags2s(flags, mbus_ycbcr_def);
 }
 
-static const flag_def selection_targets_def[] = {
+static constexpr flag_def selection_targets_def[] = {
 	{ V4L2_SEL_TGT_CROP_ACTIVE, "crop" },
 	{ V4L2_SEL_TGT_CROP_DEFAULT, "crop_default" },
 	{ V4L2_SEL_TGT_CROP_BOUNDS, "crop_bounds" },
@@ -420,7 +420,7 @@  static const flag_def selection_targets_def[] = {
 	{ V4L2_SEL_TGT_COMPOSE_BOUNDS, "compose_bounds" },
 	{ V4L2_SEL_TGT_COMPOSE_PADDED, "compose_padded" },
 	{ V4L2_SEL_TGT_NATIVE_SIZE, "native_size" },
-	{ 0, nullptr }
+	{ 0, nullptr },
 };
 
 bool valid_seltarget_at_idx(unsigned i)
@@ -459,25 +459,22 @@  std::string selflags2s(__u32 flags)
 	return flags2s(flags, selection_flags_def);
 }
 
-static const char *std_pal[] = {
-	"B", "B1", "G", "H", "I", "D", "D1", "K",
-	"M", "N", "Nc", "60",
-	nullptr
+static constexpr const char *std_pal[] = {
+	"B", "B1", "G", "H", "I", "D", "D1", "K", "M", "N", "Nc", "60", nullptr,
 };
-static const char *std_ntsc[] = {
-	"M", "M-JP", "443", "M-KR",
-	nullptr
+static constexpr const char *std_ntsc[] = {
+	"M", "M-JP", "443", "M-KR", nullptr,
 };
-static const char *std_secam[] = {
-	"B", "D", "G", "H", "K", "K1", "L", "Lc",
-	nullptr
+static constexpr const char *std_secam[] = {
+	"B", "D", "G", "H", "K", "K1", "L", "Lc", nullptr,
 };
-static const char *std_atsc[] = {
-	"8-VSB", "16-VSB",
-	nullptr
+static constexpr const char *std_atsc[] = {
+	"8-VSB",
+	"16-VSB",
+	nullptr,
 };
 
-static std::string partstd2s(const char *prefix, const char *stds[], unsigned long long std)
+static std::string partstd2s(const char *prefix, const char *const stds[], unsigned long long std)
 {
 	std::string s = std::string(prefix) + "-";
 	int first = 1;
@@ -519,40 +516,40 @@  std::string std2s(v4l2_std_id std, const char *sep)
 
 std::string ctrlflags2s(__u32 flags)
 {
-	static const flag_def def[] = {
-		{ V4L2_CTRL_FLAG_GRABBED,    "grabbed" },
-		{ V4L2_CTRL_FLAG_DISABLED,   "disabled" },
-		{ V4L2_CTRL_FLAG_READ_ONLY,  "read-only" },
-		{ V4L2_CTRL_FLAG_UPDATE,     "update" },
-		{ V4L2_CTRL_FLAG_INACTIVE,   "inactive" },
-		{ V4L2_CTRL_FLAG_SLIDER,     "slider" },
+	static constexpr flag_def def[] = {
+		{ V4L2_CTRL_FLAG_GRABBED, "grabbed" },
+		{ V4L2_CTRL_FLAG_DISABLED, "disabled" },
+		{ V4L2_CTRL_FLAG_READ_ONLY, "read-only" },
+		{ V4L2_CTRL_FLAG_UPDATE, "update" },
+		{ V4L2_CTRL_FLAG_INACTIVE, "inactive" },
+		{ V4L2_CTRL_FLAG_SLIDER, "slider" },
 		{ V4L2_CTRL_FLAG_WRITE_ONLY, "write-only" },
-		{ V4L2_CTRL_FLAG_VOLATILE,   "volatile" },
-		{ V4L2_CTRL_FLAG_HAS_PAYLOAD,"has-payload" },
+		{ V4L2_CTRL_FLAG_VOLATILE, "volatile" },
+		{ V4L2_CTRL_FLAG_HAS_PAYLOAD, "has-payload" },
 		{ V4L2_CTRL_FLAG_EXECUTE_ON_WRITE, "execute-on-write" },
 		{ V4L2_CTRL_FLAG_MODIFY_LAYOUT, "modify-layout" },
-		{ 0, nullptr }
+		{ 0, nullptr },
 	};
 	return flags2s(flags, def);
 }
 
-static const flag_def in_status_def[] = {
-	{ V4L2_IN_ST_NO_POWER,    "no power" },
-	{ V4L2_IN_ST_NO_SIGNAL,   "no signal" },
-	{ V4L2_IN_ST_NO_COLOR,    "no color" },
-	{ V4L2_IN_ST_HFLIP,       "hflip" },
-	{ V4L2_IN_ST_VFLIP,       "vflip" },
-	{ V4L2_IN_ST_NO_H_LOCK,   "no hsync lock" },
-	{ V4L2_IN_ST_NO_V_LOCK,   "no vsync lock" },
+static constexpr flag_def in_status_def[] = {
+	{ V4L2_IN_ST_NO_POWER, "no power" },
+	{ V4L2_IN_ST_NO_SIGNAL, "no signal" },
+	{ V4L2_IN_ST_NO_COLOR, "no color" },
+	{ V4L2_IN_ST_HFLIP, "hflip" },
+	{ V4L2_IN_ST_VFLIP, "vflip" },
+	{ V4L2_IN_ST_NO_H_LOCK, "no hsync lock" },
+	{ V4L2_IN_ST_NO_V_LOCK, "no vsync lock" },
 	{ V4L2_IN_ST_NO_STD_LOCK, "no standard format lock" },
-	{ V4L2_IN_ST_COLOR_KILL,  "color kill" },
-	{ V4L2_IN_ST_NO_SYNC,     "no sync lock" },
-	{ V4L2_IN_ST_NO_EQU,      "no equalizer lock" },
-	{ V4L2_IN_ST_NO_CARRIER,  "no carrier" },
+	{ V4L2_IN_ST_COLOR_KILL, "color kill" },
+	{ V4L2_IN_ST_NO_SYNC, "no sync lock" },
+	{ V4L2_IN_ST_NO_EQU, "no equalizer lock" },
+	{ V4L2_IN_ST_NO_CARRIER, "no carrier" },
 	{ V4L2_IN_ST_MACROVISION, "macrovision" },
-	{ V4L2_IN_ST_NO_ACCESS,   "no conditional access" },
-	{ V4L2_IN_ST_VTR,         "VTR time constant" },
-	{ 0, nullptr }
+	{ V4L2_IN_ST_NO_ACCESS, "no conditional access" },
+	{ V4L2_IN_ST_VTR, "VTR time constant" },
+	{ 0, nullptr },
 };
 
 std::string in_status2s(__u32 status)
@@ -560,11 +557,11 @@  std::string in_status2s(__u32 status)
 	return status ? flags2s(status, in_status_def) : "ok";
 }
 
-static const flag_def input_cap_def[] = {
+static constexpr flag_def input_cap_def[] = {
 	{ V4L2_IN_CAP_DV_TIMINGS, "DV timings" },
 	{ V4L2_IN_CAP_STD, "SDTV standards" },
 	{ V4L2_IN_CAP_NATIVE_SIZE, "Native Size" },
-	{ 0, nullptr }
+	{ 0, nullptr },
 };
 
 std::string input_cap2s(__u32 capabilities)
@@ -572,11 +569,11 @@  std::string input_cap2s(__u32 capabilities)
 	return capabilities ? flags2s(capabilities, input_cap_def) : "not defined";
 }
 
-static const flag_def output_cap_def[] = {
+static constexpr flag_def output_cap_def[] = {
 	{ V4L2_OUT_CAP_DV_TIMINGS, "DV timings" },
 	{ V4L2_OUT_CAP_STD, "SDTV standards" },
 	{ V4L2_OUT_CAP_NATIVE_SIZE, "Native Size" },
-	{ 0, nullptr }
+	{ 0, nullptr },
 };
 
 std::string output_cap2s(__u32 capabilities)
@@ -630,13 +627,9 @@  std::string fbufflags2s(unsigned fl)
 	return s;
 }
 
-static const flag_def dv_standards_def[] = {
-	{ V4L2_DV_BT_STD_CEA861, "CTA-861" },
-	{ V4L2_DV_BT_STD_DMT, "DMT" },
-	{ V4L2_DV_BT_STD_CVT, "CVT" },
-	{ V4L2_DV_BT_STD_GTF, "GTF" },
-	{ V4L2_DV_BT_STD_SDI, "SDI" },
-	{ 0, nullptr }
+static constexpr flag_def dv_standards_def[] = {
+	{ V4L2_DV_BT_STD_CEA861, "CTA-861" }, { V4L2_DV_BT_STD_DMT, "DMT" }, { V4L2_DV_BT_STD_CVT, "CVT" },
+	{ V4L2_DV_BT_STD_GTF, "GTF" },	      { V4L2_DV_BT_STD_SDI, "SDI" }, { 0, nullptr },
 };
 
 std::string dv_standards2s(__u32 flags)
@@ -675,12 +668,12 @@  std::string dvflags2s(unsigned vsync, int val)
 	return s;
 }
 
-static const flag_def dv_caps_def[] = {
+static constexpr flag_def dv_caps_def[] = {
 	{ V4L2_DV_BT_CAP_INTERLACED, "Interlaced" },
 	{ V4L2_DV_BT_CAP_PROGRESSIVE, "Progressive" },
 	{ V4L2_DV_BT_CAP_REDUCED_BLANKING, "Reduced Blanking" },
 	{ V4L2_DV_BT_CAP_CUSTOM, "Custom Formats" },
-	{ 0, nullptr }
+	{ 0, nullptr },
 };
 
 std::string dv_caps2s(__u32 flags)
@@ -688,13 +681,13 @@  std::string dv_caps2s(__u32 flags)
 	return flags2s(flags, dv_caps_def);
 }
 
-static const flag_def tc_flags_def[] = {
+static constexpr flag_def tc_flags_def[] = {
 	{ V4L2_TC_FLAG_DROPFRAME, "dropframe" },
 	{ V4L2_TC_FLAG_COLORFRAME, "colorframe" },
 	{ V4L2_TC_USERBITS_field, "userbits-field" },
 	{ V4L2_TC_USERBITS_USERDEFINED, "userbits-userdefined" },
 	{ V4L2_TC_USERBITS_8BITCHARS, "userbits-8bitchars" },
-	{ 0, nullptr }
+	{ 0, nullptr },
 };
 
 std::string tc_flags2s(__u32 flags)
@@ -702,7 +695,7 @@  std::string tc_flags2s(__u32 flags)
 	return flags2s(flags, tc_flags_def);
 }
 
-static const flag_def buffer_flags_def[] = {
+static constexpr flag_def buffer_flags_def[] = {
 	{ V4L2_BUF_FLAG_MAPPED, "mapped" },
 	{ V4L2_BUF_FLAG_QUEUED, "queued" },
 	{ V4L2_BUF_FLAG_DONE, "done" },
@@ -718,7 +711,7 @@  static const flag_def buffer_flags_def[] = {
 	{ V4L2_BUF_FLAG_LAST, "last" },
 	{ V4L2_BUF_FLAG_REQUEST_FD, "request-fd" },
 	{ V4L2_BUF_FLAG_IN_REQUEST, "in-request" },
-	{ 0, nullptr }
+	{ 0, nullptr },
 };
 
 std::string bufferflags2s(__u32 flags)
@@ -757,10 +750,10 @@  std::string bufferflags2s(__u32 flags)
 	return s;
 }
 
-static const flag_def vbi_def[] = {
-	{ V4L2_VBI_UNSYNC,     "unsynchronized" },
+static constexpr flag_def vbi_def[] = {
+	{ V4L2_VBI_UNSYNC, "unsynchronized" },
 	{ V4L2_VBI_INTERLACED, "interlaced" },
-	{ 0, nullptr }
+	{ 0, nullptr },
 };
 
 std::string vbiflags2s(__u32 flags)
diff --git a/utils/libcecutil/cec-log.cpp b/utils/libcecutil/cec-log.cpp
index e2178473c..3aea03b54 100644
--- a/utils/libcecutil/cec-log.cpp
+++ b/utils/libcecutil/cec-log.cpp
@@ -14,19 +14,19 @@ 
 #include "cec-log.h"
 #include "compiler.h"
 
-static const struct cec_arg arg_u8 = {
+static constexpr cec_arg arg_u8 = {
 	CEC_ARG_TYPE_U8,
 };
 
-static const struct cec_arg arg_u16 = {
+static constexpr cec_arg arg_u16 = {
 	CEC_ARG_TYPE_U16,
 };
 
-static const struct cec_arg arg_u32 = {
+static constexpr cec_arg arg_u32 = {
 	CEC_ARG_TYPE_U32,
 };
 
-static const struct cec_arg arg_string = {
+static constexpr cec_arg arg_string = {
 	CEC_ARG_TYPE_STRING,
 };
 
@@ -330,7 +330,7 @@  static void log_unknown_msg(const struct cec_msg *msg)
 	}
 }
 
-const char *cec_log_ui_cmd_string(__u8 ui_cmd)
+const char *const cec_log_ui_cmd_string(__u8 ui_cmd)
 {
 	for (unsigned i = 0; i < arg_ui_cmd.num_enum_values; i++) {
 		if (type_ui_cmd[i].value == ui_cmd)
diff --git a/utils/libcecutil/cec-log.h b/utils/libcecutil/cec-log.h
index 09bf50637..b903fa22f 100644
--- a/utils/libcecutil/cec-log.h
+++ b/utils/libcecutil/cec-log.h
@@ -38,6 +38,6 @@  struct cec_msg_args {
 const struct cec_msg_args *cec_log_msg_args(unsigned int index);
 void cec_log_msg(const struct cec_msg *msg);
 void cec_log_htng_msg(const struct cec_msg *msg);
-const char *cec_log_ui_cmd_string(__u8 ui_cmd);
+const char *const cec_log_ui_cmd_string(__u8 ui_cmd);
 
 #endif
diff --git a/utils/rds-ctl/rds-ctl.cpp b/utils/rds-ctl/rds-ctl.cpp
index 8161aa453..0cae93a1f 100644
--- a/utils/rds-ctl/rds-ctl.cpp
+++ b/utils/rds-ctl/rds-ctl.cpp
@@ -185,7 +185,7 @@  static int doioctl_name(int fd, unsigned long int request, void *parm, const cha
 
 #define doioctl(n, r, p) doioctl_name(n, r, p, #r)
 
-static const char *audmode2s(int audmode)
+static const char *const audmode2s(int audmode)
 {
 	switch (audmode) {
 		case V4L2_TUNER_MODE_STEREO: return "stereo";
@@ -382,11 +382,11 @@  static void parse_freq_seek(char *optarg, struct v4l2_hw_freq_seek &seek)
 	char *subs = optarg;
 
 	while (*subs != '\0') {
-		static const char *const subopts[] = {
+		static constexpr const char *subopts[] = {
 			"dir",
 			"wrap",
 			"spacing",
-			nullptr
+			nullptr,
 		};
 
 		switch (parse_subopt(&subs, subopts, &value)) {
diff --git a/utils/v4l2-compliance/v4l2-compliance.cpp b/utils/v4l2-compliance/v4l2-compliance.cpp
index 90a503612..8bd2f73e4 100644
--- a/utils/v4l2-compliance/v4l2-compliance.cpp
+++ b/utils/v4l2-compliance/v4l2-compliance.cpp
@@ -1618,11 +1618,11 @@  int main(int argc, char **argv)
 		case OptStreamAllColorTest:
 			subs = optarg;
 			while (*subs != '\0') {
-				static const char *const subopts[] = {
+				static constexpr const char *subopts[] = {
 					"color",
 					"skip",
 					"perc",
-					nullptr
+					nullptr,
 				};
 
 				switch (parse_subopt(&subs, subopts, &value)) {
diff --git a/utils/v4l2-compliance/v4l2-test-buffers.cpp b/utils/v4l2-compliance/v4l2-test-buffers.cpp
index bc5958c2c..f154f3152 100644
--- a/utils/v4l2-compliance/v4l2-test-buffers.cpp
+++ b/utils/v4l2-compliance/v4l2-test-buffers.cpp
@@ -855,7 +855,7 @@  static int captureBufs(struct node *node, struct node *node_m2m_cap, const cv4l_
 		cv4l_queue &m2m_q, unsigned frame_count, int pollmode,
 		unsigned &capture_count)
 {
-	static const char *pollmode_str[] = {
+	static constexpr const char *pollmode_str[] = {
 		"",
 		" (select)",
 		" (epoll)",
diff --git a/utils/v4l2-compliance/v4l2-test-colors.cpp b/utils/v4l2-compliance/v4l2-test-colors.cpp
index 55a816949..3f0afe107 100644
--- a/utils/v4l2-compliance/v4l2-test-colors.cpp
+++ b/utils/v4l2-compliance/v4l2-test-colors.cpp
@@ -59,25 +59,25 @@  struct color {
 	double r, g, b, a;
 };
 
-static const double bt601[3][3] = {
-	{ 1, 0,       1.4020  },
+static constexpr double bt601[3][3] = {
+	{ 1, 0, 1.4020 },
 	{ 1, -0.3441, -0.7141 },
-	{ 1, 1.7720,  0       },
+	{ 1, 1.7720, 0 },
 };
-static const double rec709[3][3] = {
-	{ 1, 0,       1.5748  },
+static constexpr double rec709[3][3] = {
+	{ 1, 0, 1.5748 },
 	{ 1, -0.1873, -0.4681 },
-	{ 1, 1.8556,  0       },
+	{ 1, 1.8556, 0 },
 };
-static const double smpte240m[3][3] = {
-	{ 1, 0,       1.5756  },
+static constexpr double smpte240m[3][3] = {
+	{ 1, 0, 1.5756 },
 	{ 1, -0.2253, -0.4767 },
-	{ 1, 1.8270,  0       },
+	{ 1, 1.8270, 0 },
 };
-static const double bt2020[3][3] = {
-	{ 1, 0,       1.4746  },
+static constexpr double bt2020[3][3] = {
+	{ 1, 0, 1.4746 },
 	{ 1, -0.1646, -0.5714 },
-	{ 1, 1.8814,  0       },
+	{ 1, 1.8814, 0 },
 };
 
 static void ycbcr2rgb(const double m[3][3], double y, double cb, double cr,
@@ -465,10 +465,10 @@  static void getColor(const cv4l_fmt &fmt, __u8 * const planes[3],
 	}
 }
 
-static const char * const colors[] = {
+static constexpr const char *colors[] = {
 	"red",
 	"green",
-	"blue"
+	"blue",
 };
 
 static int testColorsFmt(struct node *node, unsigned component,
diff --git a/utils/v4l2-compliance/v4l2-test-formats.cpp b/utils/v4l2-compliance/v4l2-test-formats.cpp
index 60ebf559a..3761b1fa9 100644
--- a/utils/v4l2-compliance/v4l2-test-formats.cpp
+++ b/utils/v4l2-compliance/v4l2-test-formats.cpp
@@ -27,7 +27,7 @@ 
 #include "compiler.h"
 #include "v4l2-compliance.h"
 
-static const __u32 buftype2cap[] = {
+static constexpr __u32 buftype2cap[] = {
 	0,
 	V4L2_CAP_VIDEO_CAPTURE | V4L2_CAP_VIDEO_M2M,
 	V4L2_CAP_VIDEO_OUTPUT | V4L2_CAP_VIDEO_M2M,
diff --git a/utils/v4l2-ctl/v4l2-ctl-common.cpp b/utils/v4l2-ctl/v4l2-ctl-common.cpp
index 17ad488dd..66e468c3f 100644
--- a/utils/v4l2-ctl/v4l2-ctl-common.cpp
+++ b/utils/v4l2-ctl/v4l2-ctl-common.cpp
@@ -116,15 +116,8 @@  void common_usage()
 	       );
 }
 
-static const char *prefixes[] = {
-	"video",
-	"radio",
-	"vbi",
-	"swradio",
-	"v4l-subdev",
-	"v4l-touch",
-	"media",
-	nullptr
+static constexpr const char *prefixes[] = {
+	"video", "radio", "vbi", "swradio", "v4l-subdev", "v4l-touch", "media", nullptr,
 };
 
 static bool is_v4l_dev(const char *name)
diff --git a/utils/v4l2-ctl/v4l2-ctl-edid.cpp b/utils/v4l2-ctl/v4l2-ctl-edid.cpp
index 80ea151f5..f40c17241 100644
--- a/utils/v4l2-ctl/v4l2-ctl-edid.cpp
+++ b/utils/v4l2-ctl/v4l2-ctl-edid.cpp
@@ -658,23 +658,23 @@  static void print_edid_mods(const struct v4l2_edid *e)
 	}
 	loc = get_edid_vid_cap_location(e->edid, e->blocks * 128);
 	if (loc >= 0) {
-		static const char *pt_scan[] = {
+		static constexpr const char *pt_scan[] = {
 			"No Data",
 			"Always Overscanned",
 			"Always Underscanned",
-			"Supports both over- and underscan"
+			"Supports both over- and underscan",
 		};
-		static const char *it_scan[] = {
+		static constexpr const char *it_scan[] = {
 			"IT Formats not supported",
 			"Always Overscanned",
 			"Always Underscanned",
-			"Supports both over- and underscan"
+			"Supports both over- and underscan",
 		};
-		static const char *ce_scan[] = {
+		static constexpr const char *ce_scan[] = {
 			"CE Formats not supported",
 			"Always Overscanned",
 			"Always Underscanned",
-			"Supports both over- and underscan"
+			"Supports both over- and underscan",
 		};
 		__u8 v = e->edid[loc];
 
@@ -1087,65 +1087,17 @@  void edid_cmd(int ch, char *optarg)
 			break;
 		subs = optarg;
 		while (*subs != '\0') {
-			static const char *const subopts[] = {
-				"pad",
-				"type",
-				"edid",
-				"file",
-				"format",
-				"pa",
-				"s-pt",
-				"s-it",
-				"s-ce",
-				"y444",
-				"30-bit",
-				"36-bit",
-				"48-bit",
-				"graphics",
-				"photo",
-				"cinema",
-				"game",
-				"scdc",
-				"underscan",
-				"audio",
-				"ycbcr444",
-				"ycbcr422",
-				"qy",
-				"qs",
-				"xvycc-601",
-				"xvycc-709",
-				"sycc",
-				"opycc",
-				"oprgb",
-				"bt2020-rgb",
-				"bt2020-ycc",
-				"bt2020-cycc",
-				"dci-p3",
-				"sdr",
-				"hdr",
-				"smpte2084",
-				"hlg",
-				"fl-fr",
-				"lfe",
-				"fc",
-				"bl-br",
-				"bc",
-				"flc-frc",
-				"rlc-rrc",
-				"flw-frw",
-				"tpfl-tpfr",
-				"tpc",
-				"tpfc",
-				"ls-rs",
-				"lfe2",
-				"tpbc",
-				"sil-sir",
-				"tpsil-tpsir",
-				"tpbl-tpbr",
-				"btfc",
-				"btfl-btbr",
-				"tpls-tprs",
-				nullptr
+			static constexpr const char *subopts[] = {
+				"pad",	      "type",	     "edid",	  "file",      "format",      "pa",
+				"s-pt",	      "s-it",	     "s-ce",	  "y444",      "30-bit",      "36-bit",
+				"48-bit",     "graphics",    "photo",	  "cinema",    "game",	      "scdc",
+				"underscan",  "audio",	     "ycbcr444",  "ycbcr422",  "qy",	      "qs",
+				"xvycc-601",  "xvycc-709",   "sycc",	  "opycc",     "oprgb",	      "bt2020-rgb",
+				"bt2020-ycc", "bt2020-cycc", "dci-p3",	  "sdr",       "hdr",	      "smpte2084",
+				"hlg",	      "fl-fr",	     "lfe",	  "fc",	       "bl-br",	      "bc",
+				"flc-frc",    "rlc-rrc",     "flw-frw",	  "tpfl-tpfr", "tpc",	      "tpfc",
+				"ls-rs",      "lfe2",	     "tpbc",	  "sil-sir",   "tpsil-tpsir", "tpbl-tpbr",
+				"btfc",	      "btfl-btbr",   "tpls-tprs", nullptr,
 			};
 
 			int opt = getsubopt(&subs, (char* const*)subopts, &value);
@@ -1307,13 +1259,8 @@  void edid_cmd(int ch, char *optarg)
 			break;
 		subs = optarg;
 		while (*subs != '\0') {
-			static const char *const subopts[] = {
-				"pad",
-				"startblock",
-				"blocks",
-				"format",
-				"file",
-				nullptr
+			static constexpr const char *subopts[] = {
+				"pad", "startblock", "blocks", "format", "file", nullptr,
 			};
 
 			switch (parse_subopt(&subs, subopts, &value)) {
diff --git a/utils/v4l2-ctl/v4l2-ctl-io.cpp b/utils/v4l2-ctl/v4l2-ctl-io.cpp
index 2c51e5736..c50fff86b 100644
--- a/utils/v4l2-ctl/v4l2-ctl-io.cpp
+++ b/utils/v4l2-ctl/v4l2-ctl-io.cpp
@@ -31,7 +31,7 @@  void io_usage()
 	       );
 }
 
-static const char *inputtype2s(__u32 type)
+static const char *const inputtype2s(__u32 type)
 {
 	switch (type) {
 	case V4L2_INPUT_TYPE_TUNER:
@@ -45,7 +45,7 @@  static const char *inputtype2s(__u32 type)
 	}
 }
 
-static const char *outputtype2s(__u32 type)
+static const char *const outputtype2s(__u32 type)
 {
 	switch (type) {
 	case V4L2_OUTPUT_TYPE_MODULATOR:
diff --git a/utils/v4l2-ctl/v4l2-ctl-misc.cpp b/utils/v4l2-ctl/v4l2-ctl-misc.cpp
index 1853608a3..06b5c7a90 100644
--- a/utils/v4l2-ctl/v4l2-ctl-misc.cpp
+++ b/utils/v4l2-ctl/v4l2-ctl-misc.cpp
@@ -178,15 +178,10 @@  void misc_cmd(int ch, char *optarg)
 	case OptSetJpegComp:
 		subs = optarg;
 		while (*subs != '\0') {
-			static const char *const subopts[] = {
-				"app0", "app1", "app2", "app3",
-				"app4", "app5", "app6", "app7",
-				"app8", "app9", "appa", "appb",
-				"appc", "appd", "appe", "appf",
-				"quality",
-				"markers",
-				"comment",
-				nullptr
+			static constexpr const char *subopts[] = {
+				"app0", "app1", "app2",	   "app3",    "app4",	 "app5",  "app6",
+				"app7", "app8", "app9",	   "appa",    "appb",	 "appc",  "appd",
+				"appe", "appf", "quality", "markers", "comment", nullptr,
 			};
 			size_t len;
 			int opt = parse_subopt(&subs, subopts, &value);
@@ -235,10 +230,10 @@  void misc_cmd(int ch, char *optarg)
 	case OptTryEncoderCmd:
 		subs = optarg;
 		while (*subs != '\0') {
-			static const char *const subopts[] = {
+			static constexpr const char *subopts[] = {
 				"cmd",
 				"flags",
-				nullptr
+				nullptr,
 			};
 
 			switch (parse_subopt(&subs, subopts, &value)) {
@@ -258,13 +253,8 @@  void misc_cmd(int ch, char *optarg)
 	case OptTryDecoderCmd:
 		subs = optarg;
 		while (*subs != '\0') {
-			static const char *const subopts[] = {
-				"cmd",
-				"flags",
-				"stop_pts",
-				"start_speed",
-				"start_format",
-				nullptr
+			static constexpr const char *subopts[] = {
+				"cmd", "flags", "stop_pts", "start_speed", "start_format", nullptr,
 			};
 
 			switch (parse_subopt(&subs, subopts, &value)) {
diff --git a/utils/v4l2-ctl/v4l2-ctl-overlay.cpp b/utils/v4l2-ctl/v4l2-ctl-overlay.cpp
index 639a41757..71c437f81 100644
--- a/utils/v4l2-ctl/v4l2-ctl-overlay.cpp
+++ b/utils/v4l2-ctl/v4l2-ctl-overlay.cpp
@@ -209,15 +209,8 @@  void overlay_cmd(int ch, char *optarg)
 	case OptTryOverlayFormat:
 		subs = optarg;
 		while (subs && *subs != '\0') {
-			static const char *const subopts[] = {
-				"chromakey",
-				"global_alpha",
-				"left",
-				"top",
-				"width",
-				"height",
-				"field",
-				nullptr
+			static constexpr const char *subopts[] = {
+				"chromakey", "global_alpha", "left", "top", "width", "height", "field", nullptr,
 			};
 
 			switch (parse_subopt(&subs, subopts, &value)) {
@@ -260,12 +253,8 @@  void overlay_cmd(int ch, char *optarg)
 		subs = optarg;
 		memset(&r, 0, sizeof(r));
 		while (*subs != '\0') {
-			static const char *const subopts[] = {
-				"left",
-				"top",
-				"width",
-				"height",
-				nullptr
+			static constexpr const char *subopts[] = {
+				"left", "top", "width", "height", nullptr,
 			};
 
 			switch (parse_subopt(&subs, subopts, &value)) {
@@ -308,14 +297,9 @@  void overlay_cmd(int ch, char *optarg)
 			const unsigned alpha_flags = V4L2_FBUF_FLAG_GLOBAL_ALPHA |
 						     V4L2_FBUF_FLAG_LOCAL_ALPHA |
 						     V4L2_FBUF_FLAG_LOCAL_INV_ALPHA;
-			static const char *const subopts[] = {
-				"chromakey",
-				"src_chromakey",
-				"global_alpha",
-				"local_alpha",
-				"local_inv_alpha",
-				"fb",
-				nullptr
+			static constexpr const char *subopts[] = {
+				"chromakey", "src_chromakey", "global_alpha", "local_alpha", "local_inv_alpha",
+				"fb",	     nullptr,
 			};
 
 			switch (parse_subopt(&subs, subopts, &value)) {
diff --git a/utils/v4l2-ctl/v4l2-ctl-selection.cpp b/utils/v4l2-ctl/v4l2-ctl-selection.cpp
index 4633776fb..7385d5bfe 100644
--- a/utils/v4l2-ctl/v4l2-ctl-selection.cpp
+++ b/utils/v4l2-ctl/v4l2-ctl-selection.cpp
@@ -93,12 +93,8 @@  static void parse_crop(char *optarg, unsigned int &set_crop, v4l2_rect &vcrop)
 	char *subs = optarg;
 
 	while (*subs != '\0') {
-		static const char *const subopts[] = {
-			"left",
-			"top",
-			"width",
-			"height",
-			nullptr
+		static constexpr const char *subopts[] = {
+			"left", "top", "width", "height", nullptr,
 		};
 
 		switch (parse_subopt(&subs, subopts, &value)) {
@@ -153,14 +149,8 @@  static int parse_selection(char *optarg, unsigned int &set_sel, v4l2_selection &
 	char *subs = optarg;
 
 	while (*subs != '\0') {
-		static const char *const subopts[] = {
-			"target",
-			"flags",
-			"left",
-			"top",
-			"width",
-			"height",
-			nullptr
+		static constexpr const char *subopts[] = {
+			"target", "flags", "left", "top", "width", "height", nullptr,
 		};
 
 		switch (parse_subopt(&subs, subopts, &value)) {
diff --git a/utils/v4l2-ctl/v4l2-ctl-stds.cpp b/utils/v4l2-ctl/v4l2-ctl-stds.cpp
index 82571f932..f54368eb4 100644
--- a/utils/v4l2-ctl/v4l2-ctl-stds.cpp
+++ b/utils/v4l2-ctl/v4l2-ctl-stds.cpp
@@ -160,29 +160,11 @@  static int parse_timing_subopt(char **subopt_str, int *value)
 	int opt;
 	char *opt_str;
 
-	static const char * const subopt_list[] = {
-		"width",
-		"height",
-		"interlaced",
-		"polarities",
-		"pixelclock",
-		"hfp",
-		"hs",
-		"hbp",
-		"vfp",
-		"vs",
-		"vbp",
-		"il_vfp",
-		"il_vs",
-		"il_vbp",
-		"index",
-		"cvt",
-		"gtf",
-		"fps",
-		"reduced-blanking",
-		"reduced-fps",
-		"clear",
-		nullptr
+	static constexpr const char *subopt_list[] = {
+		"width", "height", "interlaced", "polarities", "pixelclock",	   "hfp",	  "hs",
+		"hbp",	 "vfp",	   "vs",	 "vbp",	       "il_vfp",	   "il_vs",	  "il_vbp",
+		"index", "cvt",	   "gtf",	 "fps",	       "reduced-blanking", "reduced-fps", "clear",
+		nullptr,
 	};
 
 	opt = getsubopt(subopt_str, (char* const*) subopt_list, &opt_str);
diff --git a/utils/v4l2-ctl/v4l2-ctl-streaming.cpp b/utils/v4l2-ctl/v4l2-ctl-streaming.cpp
index b8dc30fb3..62424e4cc 100644
--- a/utils/v4l2-ctl/v4l2-ctl-streaming.cpp
+++ b/utils/v4l2-ctl/v4l2-ctl-streaming.cpp
@@ -503,7 +503,7 @@  static void print_buffer(FILE *f, struct v4l2_buffer &buf)
 		static_cast<__u64>(buf.timestamp.tv_sec), static_cast<__u64>(buf.timestamp.tv_usec),
 		timestamp_type2s(buf.flags).c_str(), timestamp_src2s(buf.flags).c_str());
 	if (buf.flags & V4L2_BUF_FLAG_TIMECODE) {
-		static const int fps_types[] = { 0, 24, 25, 30, 50, 60 };
+		static constexpr int fps_types[] = { 0, 24, 25, 30, 50, 60 };
 		int fps = buf.timecode.type;
 
 		if (fps > 5)
diff --git a/utils/v4l2-ctl/v4l2-ctl-subdev.cpp b/utils/v4l2-ctl/v4l2-ctl-subdev.cpp
index ecfd32443..1764ad485 100644
--- a/utils/v4l2-ctl/v4l2-ctl-subdev.cpp
+++ b/utils/v4l2-ctl/v4l2-ctl-subdev.cpp
@@ -5,10 +5,10 @@  struct mbus_name {
 	__u32 code;
 };
 
-static const struct mbus_name mbus_names[] = {
+static constexpr struct mbus_name mbus_names[] = {
 	{ "Fixed", MEDIA_BUS_FMT_FIXED },
 #include "media-bus-format-names.h"
-	{ nullptr, 0 }
+	{ nullptr, 0 },
 };
 
 /* selection specified */
@@ -97,10 +97,10 @@  void subdev_cmd(int ch, char *optarg)
 	case OptListSubDevFrameSizes:
 		subs = optarg;
 		while (*subs != '\0') {
-			static const char *const subopts[] = {
+			static constexpr const char *subopts[] = {
 				"pad",
 				"code",
-				nullptr
+				nullptr,
 			};
 
 			switch (parse_subopt(&subs, subopts, &value)) {
@@ -119,12 +119,8 @@  void subdev_cmd(int ch, char *optarg)
 	case OptListSubDevFrameIntervals:
 		subs = optarg;
 		while (*subs != '\0') {
-			static const char *const subopts[] = {
-				"pad",
-				"code",
-				"width",
-				"height",
-				nullptr
+			static constexpr const char *subopts[] = {
+				"pad", "code", "width", "height", nullptr,
 			};
 
 			switch (parse_subopt(&subs, subopts, &value)) {
@@ -153,10 +149,10 @@  void subdev_cmd(int ch, char *optarg)
 	case OptGetSubDevSelection:
 		subs = optarg;
 		while (*subs != '\0') {
-			static const char *const subopts[] = {
+			static constexpr const char *subopts[] = {
 				"pad",
 				"target",
-				nullptr
+				nullptr,
 			};
 			unsigned int target;
 
@@ -187,18 +183,9 @@  void subdev_cmd(int ch, char *optarg)
 		ffmt.field = V4L2_FIELD_ANY;
 		subs = optarg;
 		while (*subs != '\0') {
-			static const char *const subopts[] = {
-				"width",
-				"height",
-				"code",
-				"field",
-				"colorspace",
-				"ycbcr",
-				"hsv",
-				"quantization",
-				"xfer",
-				"pad",
-				nullptr
+			static constexpr const char *subopts[] = {
+				"width", "height",	 "code", "field", "colorspace", "ycbcr",
+				"hsv",	 "quantization", "xfer", "pad",	  nullptr,
 			};
 
 			switch (parse_subopt(&subs, subopts, &value)) {
@@ -256,15 +243,8 @@  void subdev_cmd(int ch, char *optarg)
 		subs = optarg;
 
 		while (*subs != '\0') {
-			static const char *const subopts[] = {
-				"target",
-				"flags",
-				"left",
-				"top",
-				"width",
-				"height",
-				"pad",
-				nullptr
+			static constexpr const char *subopts[] = {
+				"target", "flags", "left", "top", "width", "height", "pad", nullptr,
 			};
 
 			switch (parse_subopt(&subs, subopts, &value)) {
@@ -309,10 +289,10 @@  void subdev_cmd(int ch, char *optarg)
 		subs = optarg;
 
 		while (*subs != '\0') {
-			static const char *const subopts[] = {
+			static constexpr const char *subopts[] = {
 				"pad",
 				"fps",
-				nullptr
+				nullptr,
 			};
 
 			switch (parse_subopt(&subs, subopts, &value)) {
diff --git a/utils/v4l2-ctl/v4l2-ctl-tuner.cpp b/utils/v4l2-ctl/v4l2-ctl-tuner.cpp
index 7d6f6f3e7..126b413eb 100644
--- a/utils/v4l2-ctl/v4l2-ctl-tuner.cpp
+++ b/utils/v4l2-ctl/v4l2-ctl-tuner.cpp
@@ -45,7 +45,7 @@  void tuner_usage()
 	       );
 }
 
-static const char *audmode2s(int audmode)
+static const char *const audmode2s(int audmode)
 {
 	switch (audmode) {
 		case V4L2_TUNER_MODE_STEREO: return "stereo";
@@ -57,7 +57,7 @@  static const char *audmode2s(int audmode)
 	}
 }
 
-static const char *ttype2s(int type)
+static const char *const ttype2s(int type)
 {
 	switch (type) {
 		case V4L2_TUNER_RADIO: return "radio";
@@ -157,13 +157,8 @@  static void parse_freq_seek(char *optarg, struct v4l2_hw_freq_seek &seek)
 	char *subs = optarg;
 
 	while (*subs != '\0') {
-		static const char *const subopts[] = {
-			"dir",
-			"wrap",
-			"spacing",
-			"low",
-			"high",
-			nullptr
+		static constexpr const char *subopts[] = {
+			"dir", "wrap", "spacing", "low", "high", nullptr,
 		};
 
 		switch (parse_subopt(&subs, subopts, &value)) {
diff --git a/utils/v4l2-ctl/v4l2-ctl-vbi.cpp b/utils/v4l2-ctl/v4l2-ctl-vbi.cpp
index 33191aa64..51508a7b9 100644
--- a/utils/v4l2-ctl/v4l2-ctl-vbi.cpp
+++ b/utils/v4l2-ctl/v4l2-ctl-vbi.cpp
@@ -123,15 +123,9 @@  void vbi_cmd(int ch, char *optarg)
 		subs = optarg;
 		memset(&raw->fmt.vbi, 0, sizeof(raw->fmt.vbi));
 		while (*subs != '\0') {
-			static const char *const subopts[] = {
-				"samplingrate",
-				"offset",
-				"samplesperline",
-				"start0",
-				"start1",
-				"count0",
-				"count1",
-				nullptr
+			static constexpr const char *subopts[] = {
+				"samplingrate", "offset", "samplesperline", "start0",
+				"start1",	"count0", "count1",	    nullptr,
 			};
 
 			switch (parse_subopt(&subs, subopts, &value)) {
diff --git a/utils/v4l2-ctl/v4l2-ctl-vidcap.cpp b/utils/v4l2-ctl/v4l2-ctl-vidcap.cpp
index c66c248a3..b12631b80 100644
--- a/utils/v4l2-ctl/v4l2-ctl-vidcap.cpp
+++ b/utils/v4l2-ctl/v4l2-ctl-vidcap.cpp
@@ -133,11 +133,11 @@  void vidcap_cmd(int ch, char *optarg)
 	case OptListFrameIntervals:
 		subs = optarg;
 		while (*subs != '\0') {
-			static const char *const subopts[] = {
+			static constexpr const char *subopts[] = {
 				"width",
 				"height",
 				"pixelformat",
-				nullptr
+				nullptr,
 			};
 
 			switch (parse_subopt(&subs, subopts, &value)) {
@@ -395,9 +395,8 @@  void vidcap_list(cv4l_fd &fd)
 
 void print_touch_buffer(FILE *f, cv4l_buffer &buf, cv4l_fmt &fmt, cv4l_queue &q)
 {
-	static const char img[16] = {
-		'.', ',', ':', ';', '!', '|', 'i', 'c',
-		'n', 'o', 'm', 'I', 'C', 'N', 'O', 'M',
+	static constexpr char img[16] = {
+		'.', ',', ':', ';', '!', '|', 'i', 'c', 'n', 'o', 'm', 'I', 'C', 'N', 'O', 'M',
 	};
 	auto vbuf = static_cast<__s16 *>(q.g_dataptr(buf.g_index(), 0));
 	__u32 x, y;
diff --git a/utils/v4l2-ctl/v4l2-ctl.cpp b/utils/v4l2-ctl/v4l2-ctl.cpp
index d91577e14..4ddbecce7 100644
--- a/utils/v4l2-ctl/v4l2-ctl.cpp
+++ b/utils/v4l2-ctl/v4l2-ctl.cpp
@@ -523,11 +523,11 @@  void printfmt(int fd, const struct v4l2_format &vfmt)
 
 static std::string frmtype2s(unsigned type)
 {
-	static const char *types[] = {
+	static constexpr const char *types[] = {
 		"Unknown",
 		"Discrete",
 		"Continuous",
-		"Stepwise"
+		"Stepwise",
 	};
 
 	if (type > 3)
@@ -764,20 +764,9 @@  int parse_fmt(char *optarg, __u32 &width, __u32 &height, __u32 &pixelformat,
 	flags = 0;
 	subs = optarg;
 	while (*subs != '\0') {
-		static const char *const subopts[] = {
-			"width",
-			"height",
-			"pixelformat",
-			"field",
-			"colorspace",
-			"ycbcr",
-			"hsv",
-			"bytesperline",
-			"premul-alpha",
-			"quantization",
-			"xfer",
-			"sizeimage",
-			nullptr
+		static constexpr const char *subopts[] = {
+			"width",	"height",	"pixelformat",	"field", "colorspace", "ycbcr", "hsv",
+			"bytesperline", "premul-alpha", "quantization", "xfer",	 "sizeimage",  nullptr,
 		};
 
 		switch (parse_subopt(&subs, subopts, &value)) {
@@ -1032,8 +1021,7 @@  static int open_media_bus_info(const std::string &bus_info)
 	return -1;
 }
 
-static const char *make_devname(const char *device, const char *devname,
-				const std::string &media_bus_info)
+static const char *const make_devname(const char *device, const char *devname, const std::string &media_bus_info)
 {
 	if (device[0] >= '0' && device[0] <= '9' && strlen(device) <= 3) {
 		static char newdev[32];
diff --git a/utils/v4l2-dbg/v4l2-dbg.cpp b/utils/v4l2-dbg/v4l2-dbg.cpp
index 0873c2686..b3eed1de7 100644
--- a/utils/v4l2-dbg/v4l2-dbg.cpp
+++ b/utils/v4l2-dbg/v4l2-dbg.cpp
@@ -302,7 +302,7 @@  static unsigned long long parse_reg(const struct board_list *curr_bd, const std:
 	return strtoull(reg.c_str(), nullptr, 0);
 }
 
-static const char *reg_name(const struct board_list *curr_bd, unsigned long long reg)
+static const char *const reg_name(const struct board_list *curr_bd, unsigned long long reg)
 {
 	if (curr_bd) {
 		for (const auto &curr : curr_bd->regs) {
@@ -317,7 +317,7 @@  static const char *reg_name(const struct board_list *curr_bd, unsigned long long
 	return nullptr;
 }
 
-static const char *binary(unsigned long long val)
+static const char *const binary(unsigned long long val)
 {
 	static char bin[80];
 	char *p = bin;
@@ -494,10 +494,10 @@  int main(int argc, char **argv)
 				break;
 
 			while (*subs != '\0') {
-				static const char * const subopts[] = {
+				static constexpr const char *subopts[] = {
 					"min",
 					"max",
-					nullptr
+					nullptr,
 				};
 
 				switch (parse_subopt(&subs, subopts, &value)) {