Lines Matching +full:gpio +full:- +full:ir +full:- +full:tx
1 // SPDX-License-Identifier: GPL-2.0-or-later
8 #include <linux/gpio/consumer.h>
13 #include <media/rc-core.h>
15 #define DRIVER_NAME "gpio-ir-tx"
16 #define DEVICE_NAME "GPIO IR Bit Banging Transmitter"
19 struct gpio_desc *gpio; member
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()
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 return dev_err_probe(&pdev->dev, PTR_ERR(gpio_ir->gpio), in gpio_ir_tx_probe()
179 "Failed to get gpio\n"); in gpio_ir_tx_probe()
181 rcdev->priv = gpio_ir; in gpio_ir_tx_probe()
182 rcdev->driver_name = DRIVER_NAME; in gpio_ir_tx_probe()
183 rcdev->device_name = DEVICE_NAME; in gpio_ir_tx_probe()
184 rcdev->tx_ir = gpio_ir_tx; in gpio_ir_tx_probe()
185 rcdev->s_tx_duty_cycle = gpio_ir_tx_set_duty_cycle; in gpio_ir_tx_probe()
186 rcdev->s_tx_carrier = gpio_ir_tx_set_carrier; in gpio_ir_tx_probe()
188 gpio_ir->carrier = 38000; in gpio_ir_tx_probe()
189 gpio_ir->duty_cycle = 50; in gpio_ir_tx_probe()
191 rc = devm_rc_register_device(&pdev->dev, rcdev); in gpio_ir_tx_probe()
193 dev_err(&pdev->dev, "failed to register rc device\n"); in gpio_ir_tx_probe()
207 MODULE_DESCRIPTION("GPIO IR Bit Banging Transmitter");