Lines Matching defs:ir_rx51

19 struct ir_rx51 {
33 static inline void ir_rx51_on(struct ir_rx51 *ir_rx51)
35 pwm_enable(ir_rx51->pwm);
38 static inline void ir_rx51_off(struct ir_rx51 *ir_rx51)
40 pwm_disable(ir_rx51->pwm);
43 static int init_timing_params(struct ir_rx51 *ir_rx51)
45 struct pwm_device *pwm = ir_rx51->pwm;
46 int duty, period = DIV_ROUND_CLOSEST(NSEC_PER_SEC, ir_rx51->freq);
48 duty = DIV_ROUND_CLOSEST(ir_rx51->duty_cycle * period, 100);
57 struct ir_rx51 *ir_rx51 = container_of(timer, struct ir_rx51, timer);
60 if (ir_rx51->wbuf_index < 0) {
61 dev_err_ratelimited(ir_rx51->dev,
63 ir_rx51->wbuf_index);
74 if (ir_rx51->wbuf_index >= WBUF_LEN)
76 if (ir_rx51->wbuf[ir_rx51->wbuf_index] == -1)
79 if (ir_rx51->wbuf_index % 2)
80 ir_rx51_off(ir_rx51);
82 ir_rx51_on(ir_rx51);
84 ns = US_TO_NS(ir_rx51->wbuf[ir_rx51->wbuf_index]);
87 ir_rx51->wbuf_index++;
96 ir_rx51_off(ir_rx51);
97 ir_rx51->wbuf_index = -1;
99 wake_up_interruptible(&ir_rx51->wqueue);
107 struct ir_rx51 *ir_rx51 = dev->priv;
112 memcpy(ir_rx51->wbuf, buffer, count * sizeof(unsigned int));
115 wait_event_interruptible(ir_rx51->wqueue, ir_rx51->wbuf_index < 0);
117 init_timing_params(ir_rx51);
119 ir_rx51->wbuf[count] = -1; /* Insert termination mark */
126 ir_rx51_on(ir_rx51);
127 ir_rx51->wbuf_index = 1;
128 hrtimer_start(&ir_rx51->timer,
129 ns_to_ktime(US_TO_NS(ir_rx51->wbuf[0])),
135 wait_event_interruptible(ir_rx51->wqueue, ir_rx51->wbuf_index < 0);
144 struct ir_rx51 *ir_rx51 = dev->priv;
146 if (test_and_set_bit(1, &ir_rx51->device_is_open))
149 ir_rx51->pwm = pwm_get(ir_rx51->dev, NULL);
150 if (IS_ERR(ir_rx51->pwm)) {
151 int res = PTR_ERR(ir_rx51->pwm);
153 dev_err(ir_rx51->dev, "pwm_get failed: %d\n", res);
162 struct ir_rx51 *ir_rx51 = dev->priv;
164 hrtimer_cancel(&ir_rx51->timer);
165 ir_rx51_off(ir_rx51);
166 pwm_put(ir_rx51->pwm);
168 clear_bit(1, &ir_rx51->device_is_open);
171 static struct ir_rx51 ir_rx51 = {
178 struct ir_rx51 *ir_rx51 = dev->priv;
180 ir_rx51->duty_cycle = duty;
187 struct ir_rx51 *ir_rx51 = dev->priv;
192 ir_rx51->freq = carrier;
209 if (test_and_set_bit(1, &ir_rx51.device_is_open))
212 clear_bit(1, &ir_rx51.device_is_open);
244 ir_rx51.freq = DIV_ROUND_CLOSEST_ULL(pwm_get_period(pwm), NSEC_PER_SEC);
247 hrtimer_init(&ir_rx51.timer, CLOCK_MONOTONIC, HRTIMER_MODE_REL);
248 ir_rx51.timer.function = ir_rx51_timer_cb;
250 ir_rx51.dev = &dev->dev;
256 rcdev->priv = &ir_rx51;
264 ir_rx51.rcdev = rcdev;
266 return devm_rc_register_device(&dev->dev, ir_rx51.rcdev);