Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 8382e556 authored by Mauro Carvalho Chehab's avatar Mauro Carvalho Chehab
Browse files

Simplify major/minor non-dynamic logic



changeset 6bbf7a85 ("media: dvbdev: convert DVB device types into an enum")
added a new warning on gcc 6:

>> drivers/media/dvb-core/dvbdev.c:86:1: warning: control reaches end of non-void function [-Wreturn-type]

That's because gcc is not smart enough to see that all types are
present at the switch. Also, the current code is not too optimized.

So, replace it to a more optimized one, based on a static table.

Reported-by: default avatarkbuild test robot <fengguang.wu@intel.com>
Fixes: 6bbf7a85 ("media: dvbdev: convert DVB device types into an enum")
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@s-opensource.com>
parent 01153bf0
Loading
Loading
Loading
Loading
+13 −15
Original line number Diff line number Diff line
@@ -68,22 +68,20 @@ static const char * const dnames[] = {
#else
#define DVB_MAX_IDS		4

static int nums2minor(int num, enum dvb_device_type type, int id)
{
	int n = (num << 6) | (id << 4);
static const u8 minor_type[] = {
       [DVB_DEVICE_VIDEO]      = 0,
       [DVB_DEVICE_AUDIO]      = 1,
       [DVB_DEVICE_SEC]        = 2,
       [DVB_DEVICE_FRONTEND]   = 3,
       [DVB_DEVICE_DEMUX]      = 4,
       [DVB_DEVICE_DVR]        = 5,
       [DVB_DEVICE_CA]         = 6,
       [DVB_DEVICE_NET]        = 7,
       [DVB_DEVICE_OSD]        = 8,
};

	switch (type) {
	case DVB_DEVICE_VIDEO:		return n;
	case DVB_DEVICE_AUDIO:		return n | 1;
	case DVB_DEVICE_SEC:		return n | 2;
	case DVB_DEVICE_FRONTEND:	return n | 3;
	case DVB_DEVICE_DEMUX:		return n | 4;
	case DVB_DEVICE_DVR:		return n | 5;
	case DVB_DEVICE_CA:		return n | 6;
	case DVB_DEVICE_NET:		return n | 7;
	case DVB_DEVICE_OSD:		return n | 8;
	}
}
#define nums2minor(num, type, id) \
       (((num) << 6) | ((id) << 4) | minor_type[type])

#define MAX_DVB_MINORS		(DVB_MAX_ADAPTERS*64)
#endif