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()
86 gpiod_set_value(gpio_ir->gpio, !(i % 2)); in gpio_ir_tx_unmodulated()
92 gpiod_set_value(gpio_ir->gpio, 0); in gpio_ir_tx_unmodulated()
107 /* Ensure the dividend fits into 32 bit */ in gpio_ir_tx_modulated()
108 pulse = DIV_ROUND_CLOSEST(gpio_ir->duty_cycle * (NSEC_PER_SEC / 100), in gpio_ir_tx_modulated()
109 gpio_ir->carrier); in gpio_ir_tx_modulated()
110 space = DIV_ROUND_CLOSEST((100 - gpio_ir->duty_cycle) * in gpio_ir_tx_modulated()
111 (NSEC_PER_SEC / 100), gpio_ir->carrier); in gpio_ir_tx_modulated()
127 gpiod_set_value(gpio_ir->gpio, 1); in gpio_ir_tx_modulated()
133 gpiod_set_value(gpio_ir->gpio, 0); in gpio_ir_tx_modulated()
149 struct gpio_ir *gpio_ir = dev->priv; in gpio_ir_tx()
153 if (gpio_ir->carrier) in gpio_ir_tx()
168 gpio_ir = devm_kmalloc(&pdev->dev, sizeof(*gpio_ir), GFP_KERNEL); in gpio_ir_tx_probe()
170 return -ENOMEM; in gpio_ir_tx_probe()
172 rcdev = devm_rc_allocate_device(&pdev->dev, RC_DRIVER_IR_RAW_TX); in gpio_ir_tx_probe()
174 return -ENOMEM; in gpio_ir_tx_probe()
176 gpio_ir->gpio = devm_gpiod_get(&pdev->dev, NULL, GPIOD_OUT_LOW); in gpio_ir_tx_probe()
177 if (IS_ERR(gpio_ir->gpio)) { in gpio_ir_tx_probe()
178 if (PTR_ERR(gpio_ir->gpio) != -EPROBE_DEFER) in gpio_ir_tx_probe()
179 dev_err(&pdev->dev, "Failed to get gpio (%ld)\n", in gpio_ir_tx_probe()
180 PTR_ERR(gpio_ir->gpio)); in gpio_ir_tx_probe()
181 return PTR_ERR(gpio_ir->gpio); in gpio_ir_tx_probe()
184 rcdev->priv = gpio_ir; in gpio_ir_tx_probe()
185 rcdev->driver_name = DRIVER_NAME; in gpio_ir_tx_probe()
186 rcdev->device_name = DEVICE_NAME; in gpio_ir_tx_probe()
187 rcdev->tx_ir = gpio_ir_tx; in gpio_ir_tx_probe()
188 rcdev->s_tx_duty_cycle = gpio_ir_tx_set_duty_cycle; in gpio_ir_tx_probe()
189 rcdev->s_tx_carrier = gpio_ir_tx_set_carrier; in gpio_ir_tx_probe()
191 gpio_ir->carrier = 38000; in gpio_ir_tx_probe()
192 gpio_ir->duty_cycle = 50; in gpio_ir_tx_probe()
194 rc = devm_rc_register_device(&pdev->dev, rcdev); in gpio_ir_tx_probe()
196 dev_err(&pdev->dev, "failed to register rc device\n"); in gpio_ir_tx_probe()
210 MODULE_DESCRIPTION("GPIO IR Bit Banging Transmitter");