Lines Matching +full:static +full:- +full:enable

1 // SPDX-License-Identifier: GPL-2.0-or-later
3 * Loopback driver for rc-core,
8 * which is useful for (scripted) debugging of rc-core without
16 #include <media/rc-core.h>
18 #define DRIVER_NAME "rc-loopback"
34 static struct loopback_dev loopdev;
36 static int loop_set_tx_mask(struct rc_dev *dev, u32 mask) in loop_set_tx_mask()
38 struct loopback_dev *lodev = dev->priv; in loop_set_tx_mask()
41 dev_dbg(&dev->dev, "invalid tx mask: %u\n", mask); in loop_set_tx_mask()
45 dev_dbg(&dev->dev, "setting tx mask: %u\n", mask); in loop_set_tx_mask()
46 lodev->txmask = mask; in loop_set_tx_mask()
50 static int loop_set_tx_carrier(struct rc_dev *dev, u32 carrier) in loop_set_tx_carrier()
52 struct loopback_dev *lodev = dev->priv; in loop_set_tx_carrier()
54 dev_dbg(&dev->dev, "setting tx carrier: %u\n", carrier); in loop_set_tx_carrier()
55 lodev->txcarrier = carrier; in loop_set_tx_carrier()
59 static int loop_set_tx_duty_cycle(struct rc_dev *dev, u32 duty_cycle) in loop_set_tx_duty_cycle()
61 struct loopback_dev *lodev = dev->priv; in loop_set_tx_duty_cycle()
64 dev_dbg(&dev->dev, "invalid duty cycle: %u\n", duty_cycle); in loop_set_tx_duty_cycle()
65 return -EINVAL; in loop_set_tx_duty_cycle()
68 dev_dbg(&dev->dev, "setting duty cycle: %u\n", duty_cycle); in loop_set_tx_duty_cycle()
69 lodev->txduty = duty_cycle; in loop_set_tx_duty_cycle()
73 static int loop_set_rx_carrier_range(struct rc_dev *dev, u32 min, u32 max) in loop_set_rx_carrier_range()
75 struct loopback_dev *lodev = dev->priv; in loop_set_rx_carrier_range()
78 dev_dbg(&dev->dev, "invalid rx carrier range %u to %u\n", min, max); in loop_set_rx_carrier_range()
79 return -EINVAL; in loop_set_rx_carrier_range()
82 dev_dbg(&dev->dev, "setting rx carrier range %u to %u\n", min, max); in loop_set_rx_carrier_range()
83 lodev->rxcarriermin = min; in loop_set_rx_carrier_range()
84 lodev->rxcarriermax = max; in loop_set_rx_carrier_range()
88 static int loop_tx_ir(struct rc_dev *dev, unsigned *txbuf, unsigned count) in loop_tx_ir()
90 struct loopback_dev *lodev = dev->priv; in loop_tx_ir()
95 if (lodev->txcarrier < lodev->rxcarriermin || in loop_tx_ir()
96 lodev->txcarrier > lodev->rxcarriermax) { in loop_tx_ir()
97 dev_dbg(&dev->dev, "ignoring tx, carrier out of range\n"); in loop_tx_ir()
101 if (lodev->wideband) in loop_tx_ir()
106 if (!(rxmask & lodev->txmask)) { in loop_tx_ir()
107 dev_dbg(&dev->dev, "ignoring tx, rx mask mismatch\n"); in loop_tx_ir()
122 if (lodev->carrierreport) { in loop_tx_ir()
125 rawir.carrier = lodev->txcarrier; in loop_tx_ir()
132 rawir.duration = dev->timeout; in loop_tx_ir()
141 static void loop_set_idle(struct rc_dev *dev, bool enable) in loop_set_idle() argument
143 struct loopback_dev *lodev = dev->priv; in loop_set_idle()
145 if (lodev->idle != enable) { in loop_set_idle()
146 dev_dbg(&dev->dev, "%sing idle mode\n", enable ? "enter" : "exit"); in loop_set_idle()
147 lodev->idle = enable; in loop_set_idle()
151 static int loop_set_wideband_receiver(struct rc_dev *dev, int enable) in loop_set_wideband_receiver() argument
153 struct loopback_dev *lodev = dev->priv; in loop_set_wideband_receiver()
155 if (lodev->wideband != enable) { in loop_set_wideband_receiver()
156 dev_dbg(&dev->dev, "using %sband receiver\n", enable ? "wide" : "narrow"); in loop_set_wideband_receiver()
157 lodev->wideband = !!enable; in loop_set_wideband_receiver()
163 static int loop_set_carrier_report(struct rc_dev *dev, int enable) in loop_set_carrier_report() argument
165 struct loopback_dev *lodev = dev->priv; in loop_set_carrier_report()
167 if (lodev->carrierreport != enable) { in loop_set_carrier_report()
168 dev_dbg(&dev->dev, "%sabling carrier reports\n", enable ? "en" : "dis"); in loop_set_carrier_report()
169 lodev->carrierreport = !!enable; in loop_set_carrier_report()
175 static int loop_set_wakeup_filter(struct rc_dev *dev, in loop_set_wakeup_filter()
178 static const unsigned int max = 512; in loop_set_wakeup_filter()
184 if (!sc->mask) in loop_set_wakeup_filter()
190 return -ENOMEM; in loop_set_wakeup_filter()
192 ret = ir_raw_encode_scancode(dev->wakeup_protocol, sc->data, raw, max); in loop_set_wakeup_filter()
194 if (ret == -ENOBUFS) in loop_set_wakeup_filter()
210 static int __init loop_init(void) in loop_init()
217 return -ENOMEM; in loop_init()
219 rc->device_name = "rc-core loopback device"; in loop_init()
220 rc->input_phys = "rc-core/virtual"; in loop_init()
221 rc->input_id.bustype = BUS_VIRTUAL; in loop_init()
222 rc->input_id.version = 1; in loop_init()
223 rc->driver_name = DRIVER_NAME; in loop_init()
224 rc->map_name = RC_MAP_EMPTY; in loop_init()
225 rc->priv = &loopdev; in loop_init()
226 rc->allowed_protocols = RC_PROTO_BIT_ALL_IR_DECODER; in loop_init()
227 rc->allowed_wakeup_protocols = RC_PROTO_BIT_ALL_IR_ENCODER; in loop_init()
228 rc->encode_wakeup = true; in loop_init()
229 rc->timeout = IR_DEFAULT_TIMEOUT; in loop_init()
230 rc->min_timeout = 1; in loop_init()
231 rc->max_timeout = IR_MAX_TIMEOUT; in loop_init()
232 rc->rx_resolution = 1; in loop_init()
233 rc->tx_resolution = 1; in loop_init()
234 rc->s_tx_mask = loop_set_tx_mask; in loop_init()
235 rc->s_tx_carrier = loop_set_tx_carrier; in loop_init()
236 rc->s_tx_duty_cycle = loop_set_tx_duty_cycle; in loop_init()
237 rc->s_rx_carrier_range = loop_set_rx_carrier_range; in loop_init()
238 rc->tx_ir = loop_tx_ir; in loop_init()
239 rc->s_idle = loop_set_idle; in loop_init()
240 rc->s_wideband_receiver = loop_set_wideband_receiver; in loop_init()
241 rc->s_carrier_report = loop_set_carrier_report; in loop_init()
242 rc->s_wakeup_filter = loop_set_wakeup_filter; in loop_init()
255 dev_err(&rc->dev, "rc_dev registration failed\n"); in loop_init()
264 static void __exit loop_exit(void) in loop_exit()
272 MODULE_DESCRIPTION("Loopback device for rc-core debugging");