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()
84 gpiod_set_value(gpio_ir->gpio, !(i % 2)); in gpio_ir_tx_unmodulated()
90 gpiod_set_value(gpio_ir->gpio, 0); in gpio_ir_tx_unmodulated()
105 /* Ensure the dividend fits into 32 bit */ in gpio_ir_tx_modulated()
106 pulse = DIV_ROUND_CLOSEST(gpio_ir->duty_cycle * (NSEC_PER_SEC / 100), in gpio_ir_tx_modulated()
107 gpio_ir->carrier); in gpio_ir_tx_modulated()
108 space = DIV_ROUND_CLOSEST((100 - gpio_ir->duty_cycle) * in gpio_ir_tx_modulated()
109 (NSEC_PER_SEC / 100), gpio_ir->carrier); in gpio_ir_tx_modulated()
123 gpiod_set_value(gpio_ir->gpio, 1); in gpio_ir_tx_modulated()
129 gpiod_set_value(gpio_ir->gpio, 0); in gpio_ir_tx_modulated()
145 struct gpio_ir *gpio_ir = dev->priv; in gpio_ir_tx()
149 if (gpio_ir->carrier) in gpio_ir_tx()
164 gpio_ir = devm_kmalloc(&pdev->dev, sizeof(*gpio_ir), GFP_KERNEL); in gpio_ir_tx_probe()
166 return -ENOMEM; in gpio_ir_tx_probe()
168 rcdev = devm_rc_allocate_device(&pdev->dev, RC_DRIVER_IR_RAW_TX); in gpio_ir_tx_probe()
170 return -ENOMEM; in gpio_ir_tx_probe()
172 gpio_ir->gpio = devm_gpiod_get(&pdev->dev, NULL, GPIOD_OUT_LOW); in gpio_ir_tx_probe()
173 if (IS_ERR(gpio_ir->gpio)) in gpio_ir_tx_probe()
174 return dev_err_probe(&pdev->dev, PTR_ERR(gpio_ir->gpio), in gpio_ir_tx_probe()
177 rcdev->priv = gpio_ir; in gpio_ir_tx_probe()
178 rcdev->driver_name = DRIVER_NAME; in gpio_ir_tx_probe()
179 rcdev->device_name = DEVICE_NAME; in gpio_ir_tx_probe()
180 rcdev->tx_ir = gpio_ir_tx; in gpio_ir_tx_probe()
181 rcdev->s_tx_duty_cycle = gpio_ir_tx_set_duty_cycle; in gpio_ir_tx_probe()
182 rcdev->s_tx_carrier = gpio_ir_tx_set_carrier; in gpio_ir_tx_probe()
184 gpio_ir->carrier = 38000; in gpio_ir_tx_probe()
185 gpio_ir->duty_cycle = 50; in gpio_ir_tx_probe()
187 rc = devm_rc_register_device(&pdev->dev, rcdev); in gpio_ir_tx_probe()
189 dev_err(&pdev->dev, "failed to register rc device\n"); in gpio_ir_tx_probe()
203 MODULE_DESCRIPTION("GPIO IR Bit Banging Transmitter");