1bd4aed0eSJiong Wang // SPDX-License-Identifier: GPL-2.0
2bd4aed0eSJiong Wang // test ir decoder
3bd4aed0eSJiong Wang //
4bd4aed0eSJiong Wang // Copyright (C) 2018 Sean Young <sean@mess.org>
5bd4aed0eSJiong Wang 
6bd4aed0eSJiong Wang #include <linux/bpf.h>
7bd4aed0eSJiong Wang #include <linux/lirc.h>
83e689141SToke Høiland-Jørgensen #include <bpf/bpf_helpers.h>
9bd4aed0eSJiong Wang 
10bd4aed0eSJiong Wang SEC("lirc_mode2")
bpf_decoder(unsigned int * sample)11bd4aed0eSJiong Wang int bpf_decoder(unsigned int *sample)
12bd4aed0eSJiong Wang {
13bd4aed0eSJiong Wang 	if (LIRC_IS_PULSE(*sample)) {
14bd4aed0eSJiong Wang 		unsigned int duration = LIRC_VALUE(*sample);
15bd4aed0eSJiong Wang 
16bd4aed0eSJiong Wang 		if (duration & 0x10000)
17bd4aed0eSJiong Wang 			bpf_rc_keydown(sample, 0x40, duration & 0xffff, 0);
18bd4aed0eSJiong Wang 		if (duration & 0x20000)
19bd4aed0eSJiong Wang 			bpf_rc_pointer_rel(sample, (duration >> 8) & 0xff,
20bd4aed0eSJiong Wang 					   duration & 0xff);
21bd4aed0eSJiong Wang 	}
22bd4aed0eSJiong Wang 
23bd4aed0eSJiong Wang 	return 0;
24bd4aed0eSJiong Wang }
25bd4aed0eSJiong Wang 
26bd4aed0eSJiong Wang char _license[] SEC("license") = "GPL";
27