Re: [PATCHv3 1/1] Add ir-rcmm-driver
Hi Patrick, Thank you for the patch! Perhaps something to improve: [auto build test WARNING on linuxtv-media/master] [also build test WARNING on v4.20-rc5 next-20181207] [if your patch is applied to the wrong git tree, please drop us a note to help improve the system] url: https://github.com/0day-ci/linux/commits/Patrick-LERDA/Add-ir-rcmm-driver/20181208-02 base: git://linuxtv.org/media_tree.git master reproduce: make htmldocs All warnings (new ones prefixed by >>): include/net/mac80211.h:477: warning: cannot understand function prototype: 'struct ieee80211_ftm_responder_params ' include/net/mac80211.h:477: warning: cannot understand function prototype: 'struct ieee80211_ftm_responder_params ' include/net/mac80211.h:477: warning: cannot understand function prototype: 'struct ieee80211_ftm_responder_params ' include/net/mac80211.h:477: warning: cannot understand function prototype: 'struct ieee80211_ftm_responder_params ' include/net/mac80211.h:477: warning: cannot understand function prototype: 'struct ieee80211_ftm_responder_params ' include/net/mac80211.h:477: warning: cannot understand function prototype: 'struct ieee80211_ftm_responder_params ' include/net/mac80211.h:477: warning: cannot understand function prototype: 'struct ieee80211_ftm_responder_params ' include/net/mac80211.h:477: warning: cannot understand function prototype: 'struct ieee80211_ftm_responder_params ' include/net/mac80211.h:477: warning: cannot understand function prototype: 'struct ieee80211_ftm_responder_params ' net/mac80211/sta_info.h:588: warning: Function parameter or member 'rx_stats_avg' not described in 'sta_info' net/mac80211/sta_info.h:588: warning: Function parameter or member 'rx_stats_avg.signal' not described in 'sta_info' net/mac80211/sta_info.h:588: warning: Function parameter or member 'rx_stats_avg.chain_signal' not described in 'sta_info' net/mac80211/sta_info.h:588: warning: Function parameter or member 'status_stats.filtered' not described in 'sta_info' net/mac80211/sta_info.h:588: warning: Function parameter or member 'status_stats.retry_failed' not described in 'sta_info' net/mac80211/sta_info.h:588: warning: Function parameter or member 'status_stats.retry_count' not described in 'sta_info' net/mac80211/sta_info.h:588: warning: Function parameter or member 'status_stats.lost_packets' not described in 'sta_info' net/mac80211/sta_info.h:588: warning: Function parameter or member 'status_stats.last_tdls_pkt_time' not described in 'sta_info' net/mac80211/sta_info.h:588: warning: Function parameter or member 'status_stats.msdu_retries' not described in 'sta_info' net/mac80211/sta_info.h:588: warning: Function parameter or member 'status_stats.msdu_failed' not described in 'sta_info' net/mac80211/sta_info.h:588: warning: Function parameter or member 'status_stats.last_ack' not described in 'sta_info' net/mac80211/sta_info.h:588: warning: Function parameter or member 'status_stats.last_ack_signal' not described in 'sta_info' net/mac80211/sta_info.h:588: warning: Function parameter or member 'status_stats.ack_signal_filled' not described in 'sta_info' net/mac80211/sta_info.h:588: warning: Function parameter or member 'status_stats.avg_ack_signal' not described in 'sta_info' net/mac80211/sta_info.h:588: warning: Function parameter or member 'tx_stats.packets' not described in 'sta_info' net/mac80211/sta_info.h:588: warning: Function parameter or member 'tx_stats.bytes' not described in 'sta_info' net/mac80211/sta_info.h:588: warning: Function parameter or member 'tx_stats.last_rate' not described in 'sta_info' net/mac80211/sta_info.h:588: warning: Function parameter or member 'tx_stats.msdu' not described in 'sta_info' kernel/rcu/tree.c:685: warning: Excess function parameter 'irq' description in 'rcu_nmi_exit' include/linux/dma-buf.h:304: warning: Function parameter or member 'cb_excl.cb' not described in 'dma_buf' include/linux/dma-buf.h:304: warning: Function parameter or member 'cb_excl.poll' not described in 'dma_buf' include/linux/dma-buf.h:304: warning: Function parameter or member 'cb_excl.active' not described in 'dma_buf' include/linux/dma-buf.h:304: warning: Function parameter or member 'cb_shared.cb' not described in 'dma_buf' include/linux/dma-buf.h:304: warning: Function parameter or member 'cb_shared.poll' not described in 'dma_buf' include/linux/dma-buf.h:304: warning: Function parameter or member 'cb_shared.active' not described in 'dma_buf' include/linux/dma-fence-array.h:54: warning: Function parameter or member 'work' not described in 'dma_fence_array' include/linux/gpio/driver.h:375: warning: Function parameter or member 'init_valid_mask' not described in 'gpio_chip' include/linux/iio/hw-consumer.h:1: warning: no structured comments found include/linux/input/sparse-keymap.h:46: warning: Function parameter or member 'sw' not describ
Re: [PATCHv3 1/1] Add ir-rcmm-driver
Hi Sean, Sorry, I just checked the first paragraph. I will send you a new release. Thanks, Patrick. On 07/12/2018 11:12, Sean Young wrote: Hi Patrick, On Fri, Dec 07, 2018 at 10:57:21AM +0100, Patrick LERDA wrote: Add support for RCMM infrared remote controls. Signed-off-by: Patrick Lerda Other than the Signed-off-by this looks exactly like the v2 version; did you see my other comments on the v2 patch? Thanks Sean --- drivers/media/rc/Kconfig | 10 ++ drivers/media/rc/Makefile | 1 + drivers/media/rc/ir-rcmm-decoder.c | 185 + drivers/media/rc/rc-core-priv.h| 5 + drivers/media/rc/rc-main.c | 3 + include/media/rc-map.h | 6 +- include/uapi/linux/lirc.h | 1 + tools/include/uapi/linux/lirc.h| 1 + 8 files changed, 210 insertions(+), 2 deletions(-) create mode 100644 drivers/media/rc/ir-rcmm-decoder.c diff --git a/drivers/media/rc/Kconfig b/drivers/media/rc/Kconfig index 1021c08a9ba4..b7e08324b874 100644 --- a/drivers/media/rc/Kconfig +++ b/drivers/media/rc/Kconfig @@ -133,6 +133,16 @@ config IR_IMON_DECODER remote control and you would like to use it with a raw IR receiver, or if you wish to use an encoder to transmit this IR. +config IR_RCMM_DECODER + tristate "Enable IR raw decoder for the RC-MM protocol" + depends on RC_CORE + select BITREVERSE + default y + + ---help--- + Enable this option if you have IR with RC-MM protocol, and + if the IR is decoded in software + endif #RC_DECODERS menuconfig RC_DEVICES diff --git a/drivers/media/rc/Makefile b/drivers/media/rc/Makefile index e0340d043fe8..fc4058013234 100644 --- a/drivers/media/rc/Makefile +++ b/drivers/media/rc/Makefile @@ -16,6 +16,7 @@ obj-$(CONFIG_IR_SHARP_DECODER) += ir-sharp-decoder.o obj-$(CONFIG_IR_MCE_KBD_DECODER) += ir-mce_kbd-decoder.o obj-$(CONFIG_IR_XMP_DECODER) += ir-xmp-decoder.o obj-$(CONFIG_IR_IMON_DECODER) += ir-imon-decoder.o +obj-$(CONFIG_IR_RCMM_DECODER) += ir-rcmm-decoder.o # stand-alone IR receivers/transmitters obj-$(CONFIG_RC_ATI_REMOTE) += ati_remote.o diff --git a/drivers/media/rc/ir-rcmm-decoder.c b/drivers/media/rc/ir-rcmm-decoder.c new file mode 100644 index ..94d5b70f7a0f --- /dev/null +++ b/drivers/media/rc/ir-rcmm-decoder.c @@ -0,0 +1,185 @@ +/* ir-rcmm-decoder.c - A decoder for the RCMM IR protocol + * + * Copyright (C) 2016 by Patrick Lerda + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + */ + +#include "rc-core-priv.h" +#include +#include + + +#define RCMM_UNIT 17 /* nanosecs */ +#define RCMM_0_NBITS 64 +#define RCMM_PREFIX_PULSE 41 /* 16.6*2.5 */ +#define RCMM_PULSE_027 /* 16.6*(1+2/3) */ +#define RCMM_PULSE_144 /* 16.6*(2+2/3) */ +#define RCMM_PULSE_261 /* 16.6*(3+2/3) */ +#define RCMM_PULSE_378 /* 16.6*(4+2/3) */ +#define RCMM_MODE_MASK 0x + +enum rcmm_state { + STATE_INACTIVE, + STATE_LOW, + STATE_BUMP, + STATE_VALUE, + STATE_FINISHED, +}; + +static bool rcmm_mode(struct rcmm_dec *data) +{ +return !((0x000c & data->bits) == 0x000c); +} + +/** + * ir_rcmm_decode() - Decode one RCMM pulse or space + * @dev: the struct rc_dev descriptor of the device + * @ev:the struct ir_raw_event descriptor of the pulse/space + * + * This function returns -EINVAL if the pulse violates the state machine + */ +static int ir_rcmm_decode(struct rc_dev *dev, struct ir_raw_event ev) +{ + struct rcmm_dec *data = &dev->raw->rcmm; + u32 scancode; + u8 toggle; + + if (!(dev->enabled_protocols & RC_PROTO_BIT_RCMM)) + return 0; + + if (!is_timing_event(ev)) { + if (ev.reset) + data->state = STATE_INACTIVE; + return 0; + } + + if (ev.duration > RCMM_PULSE_3 + RCMM_UNIT) + goto out; + + switch (data->state) { + + case STATE_INACTIVE: + if (!ev.pulse) + break; + + /* Note: larger margin on first pulse since each RCMM_UNIT + is quite short and some hardware takes some time to + adjust to the signal */ + if (!eq_margin(ev.duration, RCMM_PREFIX_PULSE, RCMM_UNIT/2)) + break; + + data->state = STATE_LOW; +
Re: [PATCHv3 1/1] Add ir-rcmm-driver
Hi Patrick, On Fri, Dec 07, 2018 at 10:57:21AM +0100, Patrick LERDA wrote: > Add support for RCMM infrared remote controls. > > Signed-off-by: Patrick Lerda Other than the Signed-off-by this looks exactly like the v2 version; did you see my other comments on the v2 patch? Thanks Sean > --- > drivers/media/rc/Kconfig | 10 ++ > drivers/media/rc/Makefile | 1 + > drivers/media/rc/ir-rcmm-decoder.c | 185 + > drivers/media/rc/rc-core-priv.h| 5 + > drivers/media/rc/rc-main.c | 3 + > include/media/rc-map.h | 6 +- > include/uapi/linux/lirc.h | 1 + > tools/include/uapi/linux/lirc.h| 1 + > 8 files changed, 210 insertions(+), 2 deletions(-) > create mode 100644 drivers/media/rc/ir-rcmm-decoder.c > > diff --git a/drivers/media/rc/Kconfig b/drivers/media/rc/Kconfig > index 1021c08a9ba4..b7e08324b874 100644 > --- a/drivers/media/rc/Kconfig > +++ b/drivers/media/rc/Kconfig > @@ -133,6 +133,16 @@ config IR_IMON_DECODER > remote control and you would like to use it with a raw IR > receiver, or if you wish to use an encoder to transmit this IR. > > +config IR_RCMM_DECODER > + tristate "Enable IR raw decoder for the RC-MM protocol" > + depends on RC_CORE > + select BITREVERSE > + default y > + > + ---help--- > +Enable this option if you have IR with RC-MM protocol, and > +if the IR is decoded in software > + > endif #RC_DECODERS > > menuconfig RC_DEVICES > diff --git a/drivers/media/rc/Makefile b/drivers/media/rc/Makefile > index e0340d043fe8..fc4058013234 100644 > --- a/drivers/media/rc/Makefile > +++ b/drivers/media/rc/Makefile > @@ -16,6 +16,7 @@ obj-$(CONFIG_IR_SHARP_DECODER) += ir-sharp-decoder.o > obj-$(CONFIG_IR_MCE_KBD_DECODER) += ir-mce_kbd-decoder.o > obj-$(CONFIG_IR_XMP_DECODER) += ir-xmp-decoder.o > obj-$(CONFIG_IR_IMON_DECODER) += ir-imon-decoder.o > +obj-$(CONFIG_IR_RCMM_DECODER) += ir-rcmm-decoder.o > > # stand-alone IR receivers/transmitters > obj-$(CONFIG_RC_ATI_REMOTE) += ati_remote.o > diff --git a/drivers/media/rc/ir-rcmm-decoder.c > b/drivers/media/rc/ir-rcmm-decoder.c > new file mode 100644 > index ..94d5b70f7a0f > --- /dev/null > +++ b/drivers/media/rc/ir-rcmm-decoder.c > @@ -0,0 +1,185 @@ > +/* ir-rcmm-decoder.c - A decoder for the RCMM IR protocol > + * > + * Copyright (C) 2016 by Patrick Lerda > + * > + * This program is free software; you can redistribute it and/or modify > + * it under the terms of the GNU General Public License as published by > + * the Free Software Foundation version 2 of the License. > + * > + * This program is distributed in the hope that it will be useful, > + * but WITHOUT ANY WARRANTY; without even the implied warranty of > + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the > + * GNU General Public License for more details. > + */ > + > +#include "rc-core-priv.h" > +#include > +#include > + > + > +#define RCMM_UNIT17 /* nanosecs */ > +#define RCMM_0_NBITS 64 > +#define RCMM_PREFIX_PULSE41 /* 16.6*2.5 */ > +#define RCMM_PULSE_027 /* 16.6*(1+2/3) */ > +#define RCMM_PULSE_144 /* 16.6*(2+2/3) */ > +#define RCMM_PULSE_261 /* 16.6*(3+2/3) */ > +#define RCMM_PULSE_378 /* 16.6*(4+2/3) */ > +#define RCMM_MODE_MASK 0x > + > +enum rcmm_state { > + STATE_INACTIVE, > + STATE_LOW, > + STATE_BUMP, > + STATE_VALUE, > + STATE_FINISHED, > +}; > + > +static bool rcmm_mode(struct rcmm_dec *data) > +{ > +return !((0x000c & data->bits) == 0x000c); > +} > + > +/** > + * ir_rcmm_decode() - Decode one RCMM pulse or space > + * @dev: the struct rc_dev descriptor of the device > + * @ev: the struct ir_raw_event descriptor of the pulse/space > + * > + * This function returns -EINVAL if the pulse violates the state machine > + */ > +static int ir_rcmm_decode(struct rc_dev *dev, struct ir_raw_event ev) > +{ > + struct rcmm_dec *data = &dev->raw->rcmm; > + u32 scancode; > + u8 toggle; > + > + if (!(dev->enabled_protocols & RC_PROTO_BIT_RCMM)) > + return 0; > + > + if (!is_timing_event(ev)) { > + if (ev.reset) > + data->state = STATE_INACTIVE; > + return 0; > + } > + > + if (ev.duration > RCMM_PULSE_3 + RCMM_UNIT) > + goto out; > + > + switch (data->state) { > + > + case STATE_INACTIVE: > + if (!ev.pulse) > + break; > + > + /* Note: larger margin on first pulse since each RCMM_UNIT > +is quite short and some hardware takes some time to > +adjust to the signal */ > + if (!eq_margin(ev.duration, RCMM_PREFIX_PULSE, RCMM_UNIT/2)) > + break; > + > + data->sta
[PATCHv3 1/1] Add ir-rcmm-driver
Add support for RCMM infrared remote controls. Signed-off-by: Patrick Lerda --- drivers/media/rc/Kconfig | 10 ++ drivers/media/rc/Makefile | 1 + drivers/media/rc/ir-rcmm-decoder.c | 185 + drivers/media/rc/rc-core-priv.h| 5 + drivers/media/rc/rc-main.c | 3 + include/media/rc-map.h | 6 +- include/uapi/linux/lirc.h | 1 + tools/include/uapi/linux/lirc.h| 1 + 8 files changed, 210 insertions(+), 2 deletions(-) create mode 100644 drivers/media/rc/ir-rcmm-decoder.c diff --git a/drivers/media/rc/Kconfig b/drivers/media/rc/Kconfig index 1021c08a9ba4..b7e08324b874 100644 --- a/drivers/media/rc/Kconfig +++ b/drivers/media/rc/Kconfig @@ -133,6 +133,16 @@ config IR_IMON_DECODER remote control and you would like to use it with a raw IR receiver, or if you wish to use an encoder to transmit this IR. +config IR_RCMM_DECODER + tristate "Enable IR raw decoder for the RC-MM protocol" + depends on RC_CORE + select BITREVERSE + default y + + ---help--- + Enable this option if you have IR with RC-MM protocol, and + if the IR is decoded in software + endif #RC_DECODERS menuconfig RC_DEVICES diff --git a/drivers/media/rc/Makefile b/drivers/media/rc/Makefile index e0340d043fe8..fc4058013234 100644 --- a/drivers/media/rc/Makefile +++ b/drivers/media/rc/Makefile @@ -16,6 +16,7 @@ obj-$(CONFIG_IR_SHARP_DECODER) += ir-sharp-decoder.o obj-$(CONFIG_IR_MCE_KBD_DECODER) += ir-mce_kbd-decoder.o obj-$(CONFIG_IR_XMP_DECODER) += ir-xmp-decoder.o obj-$(CONFIG_IR_IMON_DECODER) += ir-imon-decoder.o +obj-$(CONFIG_IR_RCMM_DECODER) += ir-rcmm-decoder.o # stand-alone IR receivers/transmitters obj-$(CONFIG_RC_ATI_REMOTE) += ati_remote.o diff --git a/drivers/media/rc/ir-rcmm-decoder.c b/drivers/media/rc/ir-rcmm-decoder.c new file mode 100644 index ..94d5b70f7a0f --- /dev/null +++ b/drivers/media/rc/ir-rcmm-decoder.c @@ -0,0 +1,185 @@ +/* ir-rcmm-decoder.c - A decoder for the RCMM IR protocol + * + * Copyright (C) 2016 by Patrick Lerda + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + */ + +#include "rc-core-priv.h" +#include +#include + + +#define RCMM_UNIT 17 /* nanosecs */ +#define RCMM_0_NBITS 64 +#define RCMM_PREFIX_PULSE 41 /* 16.6*2.5 */ +#define RCMM_PULSE_027 /* 16.6*(1+2/3) */ +#define RCMM_PULSE_144 /* 16.6*(2+2/3) */ +#define RCMM_PULSE_261 /* 16.6*(3+2/3) */ +#define RCMM_PULSE_378 /* 16.6*(4+2/3) */ +#define RCMM_MODE_MASK 0x + +enum rcmm_state { + STATE_INACTIVE, + STATE_LOW, + STATE_BUMP, + STATE_VALUE, + STATE_FINISHED, +}; + +static bool rcmm_mode(struct rcmm_dec *data) +{ +return !((0x000c & data->bits) == 0x000c); +} + +/** + * ir_rcmm_decode() - Decode one RCMM pulse or space + * @dev: the struct rc_dev descriptor of the device + * @ev:the struct ir_raw_event descriptor of the pulse/space + * + * This function returns -EINVAL if the pulse violates the state machine + */ +static int ir_rcmm_decode(struct rc_dev *dev, struct ir_raw_event ev) +{ + struct rcmm_dec *data = &dev->raw->rcmm; + u32 scancode; + u8 toggle; + + if (!(dev->enabled_protocols & RC_PROTO_BIT_RCMM)) + return 0; + + if (!is_timing_event(ev)) { + if (ev.reset) + data->state = STATE_INACTIVE; + return 0; + } + + if (ev.duration > RCMM_PULSE_3 + RCMM_UNIT) + goto out; + + switch (data->state) { + + case STATE_INACTIVE: + if (!ev.pulse) + break; + + /* Note: larger margin on first pulse since each RCMM_UNIT + is quite short and some hardware takes some time to + adjust to the signal */ + if (!eq_margin(ev.duration, RCMM_PREFIX_PULSE, RCMM_UNIT/2)) + break; + + data->state = STATE_LOW; + data->count = 0; + data->bits = 0; + return 0; + + case STATE_LOW: + if (ev.pulse) + break; + + /* Note: larger margin on first pulse since each RCMM_UNIT + is quite short and some hardware takes some time to + adjust to the signal */ +