Various rc-loopback fixes
Subsystems (4)
Sean Young
maintainercover Various rc-loopback fixes
Sean Young (4):
media: rc-loopback: return set of valid emitters rather error
media: rc-loopback: use dev_dbg() rather than handrolled debug
media: rc-loopback: send carrier reports
media: rc: rename s_learning_mode() to s_wideband_receiver()
drivers/media/rc/ene_ir.c | 2 +- drivers/media/rc/lirc_dev.c | 6 +-- drivers/media/rc/mceusb.c | 2 +- drivers/media/rc/rc-loopback.c | 78 +++++++++++++++++----------------- include/media/rc-core.h | 4 +- 5 files changed, 46 insertions(+), 46 deletions(-)
Signature · 1 line
2.31.1
Sean Young
maintainerPATCH 1/4 media: rc-loopback: return set of valid emitters rather error
The LIRC_SET_TRANSMITTER_MASK ioctl should return a list valid emitters if an invalid list was passed.
--- drivers/media/rc/rc-loopback.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/media/rc/rc-loopback.c +1 -1
@@ -42,7 +42,7 @@ static int loop_set_tx_mask(struct rc_dev *dev, u32 mask)if ((mask & (RXMASK_REGULAR |RXMASK_LEARNING )) != mask) {dprintk ("invalid tx mask: %u\n" , mask); -return -EINVAL ; +return RXMASK_REGULAR |RXMASK_LEARNING ; }dprintk ("setting tx mask: %u\n" , mask);
Signature · 1 line
2.31.1
Sean Young
maintainerPATCH 2/4 media: rc-loopback: use dev_dbg() rather than handrolled debug
In reply to Sean Young--- drivers/media/rc/rc-loopback.c | 36 +++++++++++++--------------------- 1 file changed, 14 insertions(+), 22 deletions(-)
drivers/media/rc/rc-loopback.c +14 -22
@@ -16,12 +16,9 @@#include <media/rc-core.h> #define DRIVER_NAME "rc-loopback" -#define dprintk(x...) if (debug) printk(KERN_INFO DRIVER_NAME ": " x)#define RXMASK_REGULAR 0x1#define RXMASK_LEARNING 0x2 -static bool debug; -struct loopback_dev {struct rc_dev *dev;u32 txmask;
@@ -41,11 +38,11 @@ static int loop_set_tx_mask(struct rc_dev *dev, u32 mask)struct loopback_dev *lodev = dev->priv;if ((mask & (RXMASK_REGULAR |RXMASK_LEARNING )) != mask) { -dprintk ("invalid tx mask: %u\n" , mask); +dev_dbg (&dev->dev,"invalid tx mask: %u\n" , mask);return RXMASK_REGULAR |RXMASK_LEARNING ; } -dprintk ("setting tx mask: %u\n" , mask); +dev_dbg (&dev->dev,"setting tx mask: %u\n" , mask); lodev->txmask = mask;return 0 ; }
@@ -54,7 +51,7 @@ static int loop_set_tx_carrier(struct rc_dev *dev, u32 carrier) {struct loopback_dev *lodev = dev->priv; -dprintk ("setting tx carrier: %u\n" , carrier); +dev_dbg (&dev->dev,"setting tx carrier: %u\n" , carrier); lodev->txcarrier = carrier;return 0 ; }
@@ -64,11 +61,11 @@ static int loop_set_tx_duty_cycle(struct rc_dev *dev, u32 duty_cycle)struct loopback_dev *lodev = dev->priv;if (duty_cycle <1 || duty_cycle >99 ) { -dprintk ("invalid duty cycle: %u\n" , duty_cycle); +dev_dbg (&dev->dev,"invalid duty cycle: %u\n" , duty_cycle);return -EINVAL ; } -dprintk ("setting duty cycle: %u\n" , duty_cycle); +dev_dbg (&dev->dev,"setting duty cycle: %u\n" , duty_cycle); lodev->txduty = duty_cycle;return 0 ; }
@@ -78,11 +75,11 @@ static int loop_set_rx_carrier_range(struct rc_dev *dev, u32 min, u32 max)struct loopback_dev *lodev = dev->priv;if (min <1 || min > max) { -dprintk ("invalid rx carrier range %u to %u\n" , min, max); +dev_dbg (&dev->dev,"invalid rx carrier range %u to %u\n" , min, max);return -EINVAL ; } -dprintk ("setting rx carrier range %u to %u\n" , min, max); +dev_dbg (&dev->dev,"setting rx carrier range %u to %u\n" , min, max); lodev->rxcarriermin = min; lodev->rxcarriermax = max;return 0 ;
@@ -97,7 +94,7 @@ static int loop_tx_ir(struct rc_dev *dev, unsigned *txbuf, unsigned count)if (lodev->txcarrier < lodev->rxcarriermin || lodev->txcarrier > lodev->rxcarriermax) { -dprintk ("ignoring tx, carrier out of range\n" ); +dev_dbg (&dev->dev,"ignoring tx, carrier out of range\n" ); goto out; }
@@ -107,7 +104,7 @@ static int loop_tx_ir(struct rc_dev *dev, unsigned *txbuf, unsigned count) rxmask =RXMASK_REGULAR ;if (!(rxmask & lodev->txmask)) { -dprintk ("ignoring tx, rx mask mismatch\n" ); +dev_dbg (&dev->dev,"ignoring tx, rx mask mismatch\n" ); goto out; }
@@ -134,7 +131,7 @@ static void loop_set_idle(struct rc_dev *dev, bool enable)struct loopback_dev *lodev = dev->priv;if (lodev->idle != enable) { -dprintk ("%sing idle mode\n" , enable ?"enter" :"exit" ); +dev_dbg (&dev->dev,"%sing idle mode\n" , enable ?"enter" :"exit" ); lodev->idle = enable; } }
@@ -144,7 +141,7 @@ static int loop_set_learning_mode(struct rc_dev *dev, int enable)struct loopback_dev *lodev = dev->priv;if (lodev->learning != enable) { -dprintk ("%sing learning mode\n" , enable ?"enter" :"exit" ); +dev_dbg (&dev->dev,"%sing learning mode\n" , enable ?"enter" :"exit" ); lodev->learning = !!enable; }
@@ -156,7 +153,7 @@ static int loop_set_carrier_report(struct rc_dev *dev, int enable)struct loopback_dev *lodev = dev->priv;if (lodev->carrierreport != enable) { -dprintk ("%sabling carrier reports\n" , enable ?"en" :"dis" ); +dev_dbg (&dev->dev,"%sabling carrier reports\n" , enable ?"en" :"dis" ); lodev->carrierreport = !!enable; }
@@ -204,10 +201,8 @@ static int __init loop_init(void)int ret; rc =rc_allocate_device (RC_DRIVER_IR_RAW ); -if (!rc) { - printk(KERN_ERR DRIVER_NAME ": rc_dev allocation failed\n"); +if (!rc)return -ENOMEM ; - } rc->device_name ="rc-core loopback device" ; rc->input_phys ="rc-core/virtual" ;
@@ -245,7 +240,7 @@ static int __init loop_init(void) ret =rc_register_device (rc);if (ret <0 ) { - printk(KERN_ERR DRIVER_NAME ": rc_dev registration failed\n"); +dev_err (&rc->dev,"rc_dev registration failed\n" );rc_free_device (rc);return ret; }
@@ -262,9 +257,6 @@ static void __exit loop_exit(void)module_init (loop_init);module_exit (loop_exit); -module_param (debug, bool,S_IRUGO |S_IWUSR ); -MODULE_PARM_DESC (debug,"Enable debug messages" ); -MODULE_DESCRIPTION ("Loopback device for rc-core debugging" );MODULE_AUTHOR ("David Härdeman <[email protected]>" );MODULE_LICENSE ("GPL" );
Signature · 1 line
2.31.1
Sean Young
maintainerPATCH 3/4 media: rc-loopback: send carrier reports
In reply to Sean YoungWhen carrier reports are enabled, send them over loopback.
--- drivers/media/rc/rc-loopback.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-)
drivers/media/rc/rc-loopback.c +10 -2
@@ -111,8 +111,16 @@ static int loop_tx_ir(struct rc_dev *dev, unsigned *txbuf, unsigned count)for (i =0 ; i < count; i++) { rawir.pulse = i %2 ? false : true; rawir.duration = txbuf[i]; -if (rawir.duration) -ir_raw_event_store_with_filter (dev, &rawir); + +ir_raw_event_store_with_filter (dev, &rawir); + } + +if (lodev->carrierreport) { + rawir.pulse = false; + rawir.carrier_report = true; + rawir.carrier = lodev->txcarrier; + +ir_raw_event_store (dev, &rawir); }/* Fake a silence long enough to cause us to go idle */
Signature · 1 line
2.31.1
Sean Young
maintainerPATCH 4/4 media: rc: rename s_learning_mode() to s_wideband_receiver()
In reply to Sean YoungLearning mode is when both wideband receiver is turned on and the carrier reports are enabled. This function should only enable the wideband receiver.
--- drivers/media/rc/ene_ir.c | 2 +- drivers/media/rc/lirc_dev.c | 6 +++--- drivers/media/rc/mceusb.c | 2 +- drivers/media/rc/rc-loopback.c | 30 +++++++++++++++--------------- include/media/rc-core.h | 4 ++-- 5 files changed, 22 insertions(+), 22 deletions(-)
drivers/media/rc/ene_ir.c +1 -1
@@ -1052,7 +1052,7 @@ static int ene_probe(struct pnp_dev *pnp_dev, const struct pnp_device_id *id) rdev->device_name ="ENE eHome Infrared Remote Receiver" ;if (dev->hw_learning_and_tx_capable) { - rdev->s_learning_mode = ene_set_learning_mode; + rdev->s_wideband_receiver = ene_set_learning_mode;init_completion (&dev->tx_complete); rdev->tx_ir = ene_transmit; rdev->s_tx_mask = ene_set_tx_mask;
drivers/media/rc/lirc_dev.c +3 -3
@@ -412,7 +412,7 @@ static long lirc_ioctl(struct file *file, unsigned int cmd, unsigned long arg) val |=LIRC_CAN_SET_REC_CARRIER |LIRC_CAN_SET_REC_CARRIER_RANGE ; -if (dev->s_learning_mode) +if (dev->s_wideband_receiver) val |=LIRC_CAN_USE_WIDEBAND_RECEIVER ;if (dev->s_carrier_report)
@@ -519,10 +519,10 @@ static long lirc_ioctl(struct file *file, unsigned int cmd, unsigned long arg)break ;case LIRC_SET_WIDEBAND_RECEIVER : -if (!dev->s_learning_mode) +if (!dev->s_wideband_receiver) ret = -ENOTTY ;else - ret = dev->s_learning_mode (dev, !!val); + ret = dev->s_wideband_receiver (dev, !!val);break ;case LIRC_SET_MEASURE_CARRIER_MODE :
drivers/media/rc/mceusb.c +1 -1
@@ -1630,7 +1630,7 @@ static struct rc_dev *mceusb_init_rc_dev(struct mceusb_dev *ir) rc->tx_ir = mceusb_tx_ir; }if (ir->flags.rx2 >0 ) { - rc->s_learning_mode = mceusb_set_rx_wideband; + rc->s_wideband_receiver = mceusb_set_rx_wideband; rc->s_carrier_report = mceusb_set_rx_carrier_report; } rc->driver_name =DRIVER_NAME ;
drivers/media/rc/rc-loopback.c +15 -15
@@ -15,9 +15,9 @@#include <linux/slab.h> #include <media/rc-core.h> -#define DRIVER_NAME "rc-loopback" -#define RXMASK_REGULAR 0x1 -#define RXMASK_LEARNING 0x2 +#define DRIVER_NAME "rc-loopback" +#define RXMASK_NARROWBAND 0x1 +#define RXMASK_WIDEBAND 0x2struct loopback_dev {struct rc_dev *dev;
@@ -25,7 +25,7 @@ struct loopback_dev {u32 txcarrier;u32 txduty;bool idle; -bool learning; +bool wideband;bool carrierreport;u32 rxcarriermin;u32 rxcarriermax;
@@ -37,9 +37,9 @@ static int loop_set_tx_mask(struct rc_dev *dev, u32 mask) {struct loopback_dev *lodev = dev->priv; -if ((mask & (RXMASK_REGULAR |RXMASK_LEARNING )) != mask) { +if ((mask & (RXMASK_NARROWBAND |RXMASK_WIDEBAND )) != mask) {dev_dbg (&dev->dev,"invalid tx mask: %u\n" , mask); -return RXMASK_REGULAR |RXMASK_LEARNING ; +return RXMASK_NARROWBAND |RXMASK_WIDEBAND ; }dev_dbg (&dev->dev,"setting tx mask: %u\n" , mask);
@@ -98,10 +98,10 @@ static int loop_tx_ir(struct rc_dev *dev, unsigned *txbuf, unsigned count) goto out; } -if (lodev->learning) - rxmask =RXMASK_LEARNING ; +if (lodev->wideband) + rxmask =RXMASK_WIDEBAND ;else - rxmask =RXMASK_REGULAR ; + rxmask =RXMASK_NARROWBAND ;if (!(rxmask & lodev->txmask)) {dev_dbg (&dev->dev,"ignoring tx, rx mask mismatch\n" );
@@ -144,13 +144,13 @@ static void loop_set_idle(struct rc_dev *dev, bool enable) } } -static int loop_set_learning_mode (struct rc_dev *dev,int enable) +static int loop_set_wideband_receiver (struct rc_dev *dev,int enable) {struct loopback_dev *lodev = dev->priv; -if (lodev->learning != enable) { +if (lodev->wideband != enable) {dev_dbg (&dev->dev,"%sing learning mode\n" , enable ?"enter" :"exit" ); - lodev->learning = !!enable; + lodev->wideband = !!enable; }return 0 ;
@@ -233,17 +233,17 @@ static int __init loop_init(void) rc->s_rx_carrier_range = loop_set_rx_carrier_range; rc->tx_ir = loop_tx_ir; rc->s_idle = loop_set_idle; - rc->s_learning_mode = loop_set_learning_mode; + rc->s_wideband_receiver = loop_set_wideband_receiver; rc->s_carrier_report = loop_set_carrier_report; rc->s_wakeup_filter = loop_set_wakeup_filter; - loopdev.txmask =RXMASK_REGULAR ; + loopdev.txmask =RXMASK_NARROWBAND ; loopdev.txcarrier =36000 ; loopdev.txduty =50 ; loopdev.rxcarriermin =1 ; loopdev.rxcarriermax = ~0 ; loopdev.idle = true; - loopdev.learning = false; + loopdev.wideband = false; loopdev.carrierreport = false; ret =rc_register_device (rc);
include/media/rc-core.h +2 -2
@@ -151,7 +151,7 @@ struct lirc_fh {* @tx_ir: transmit IR * @s_idle: enable/disable hardware idle mode, upon which, * device doesn't interrupt host until it sees IR pulses -* @s_learning_mode: enable wide band receiver used for learning +* @s_wideband_receiver: enable wide band receiver used for learning * @s_carrier_report: enable carrier reports * @s_filter: set the scancode filter * @s_wakeup_filter: set the wakeup scancode filter. If the mask is zero
@@ -218,7 +218,7 @@ struct rc_dev {int (*s_rx_carrier_range)(struct rc_dev *dev,u32 min,u32 max);int (*tx_ir)(struct rc_dev *dev,unsigned *txbuf,unsigned n);void (*s_idle)(struct rc_dev *dev,bool enable); -int (*s_learning_mode)(struct rc_dev *dev,int enable); +int (*s_wideband_receiver)(struct rc_dev *dev,int enable);int (*s_carrier_report) (struct rc_dev *dev,int enable);int (*s_filter)(struct rc_dev *dev,struct rc_scancode_filter *filter);
Signature · 1 line
2.31.1