Lines Matching +full:bit +full:- +full:banging
1 // SPDX-License-Identifier: GPL-2.0-or-later
13 #include <media/rc-core.h>
15 #define DRIVER_NAME "gpio-ir-tx"
16 #define DEVICE_NAME "GPIO IR Bit Banging Transmitter"
25 { .compatible = "gpio-ir-tx", },
32 struct gpio_ir *gpio_ir = dev->priv; in gpio_ir_tx_set_duty_cycle()
34 gpio_ir->duty_cycle = duty_cycle; in gpio_ir_tx_set_duty_cycle()
41 struct gpio_ir *gpio_ir = dev->priv; in gpio_ir_tx_set_carrier()
44 return -EINVAL; in gpio_ir_tx_set_carrier()
46 gpio_ir->carrier = carrier; in gpio_ir_tx_set_carrier()
63 gpiod_set_value(gpio_ir->gpio, !(i % 2)); in gpio_ir_tx_unmodulated()
71 gpiod_set_value(gpio_ir->gpio, 0); in gpio_ir_tx_unmodulated()
86 /* Ensure the dividend fits into 32 bit */ in gpio_ir_tx_modulated()
87 pulse = DIV_ROUND_CLOSEST(gpio_ir->duty_cycle * (NSEC_PER_SEC / 100), in gpio_ir_tx_modulated()
88 gpio_ir->carrier); in gpio_ir_tx_modulated()
89 space = DIV_ROUND_CLOSEST((100 - gpio_ir->duty_cycle) * in gpio_ir_tx_modulated()
90 (NSEC_PER_SEC / 100), gpio_ir->carrier); in gpio_ir_tx_modulated()
108 gpiod_set_value(gpio_ir->gpio, 1); in gpio_ir_tx_modulated()
114 gpiod_set_value(gpio_ir->gpio, 0); in gpio_ir_tx_modulated()
130 struct gpio_ir *gpio_ir = dev->priv; in gpio_ir_tx()
134 if (gpio_ir->carrier) in gpio_ir_tx()
149 gpio_ir = devm_kmalloc(&pdev->dev, sizeof(*gpio_ir), GFP_KERNEL); in gpio_ir_tx_probe()
151 return -ENOMEM; in gpio_ir_tx_probe()
153 rcdev = devm_rc_allocate_device(&pdev->dev, RC_DRIVER_IR_RAW_TX); in gpio_ir_tx_probe()
155 return -ENOMEM; in gpio_ir_tx_probe()
157 gpio_ir->gpio = devm_gpiod_get(&pdev->dev, NULL, GPIOD_OUT_LOW); in gpio_ir_tx_probe()
158 if (IS_ERR(gpio_ir->gpio)) { in gpio_ir_tx_probe()
159 if (PTR_ERR(gpio_ir->gpio) != -EPROBE_DEFER) in gpio_ir_tx_probe()
160 dev_err(&pdev->dev, "Failed to get gpio (%ld)\n", in gpio_ir_tx_probe()
161 PTR_ERR(gpio_ir->gpio)); in gpio_ir_tx_probe()
162 return PTR_ERR(gpio_ir->gpio); in gpio_ir_tx_probe()
165 rcdev->priv = gpio_ir; in gpio_ir_tx_probe()
166 rcdev->driver_name = DRIVER_NAME; in gpio_ir_tx_probe()
167 rcdev->device_name = DEVICE_NAME; in gpio_ir_tx_probe()
168 rcdev->tx_ir = gpio_ir_tx; in gpio_ir_tx_probe()
169 rcdev->s_tx_duty_cycle = gpio_ir_tx_set_duty_cycle; in gpio_ir_tx_probe()
170 rcdev->s_tx_carrier = gpio_ir_tx_set_carrier; in gpio_ir_tx_probe()
172 gpio_ir->carrier = 38000; in gpio_ir_tx_probe()
173 gpio_ir->duty_cycle = 50; in gpio_ir_tx_probe()
175 rc = devm_rc_register_device(&pdev->dev, rcdev); in gpio_ir_tx_probe()
177 dev_err(&pdev->dev, "failed to register rc device\n"); in gpio_ir_tx_probe()
191 MODULE_DESCRIPTION("GPIO IR Bit Banging Transmitter");