• Home
  • Raw
  • Download

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()
81 gpiod_set_value(gpio_ir->gpio, !(i % 2)); in gpio_ir_tx_unmodulated()
87 gpiod_set_value(gpio_ir->gpio, 0); in gpio_ir_tx_unmodulated()
102 /* Ensure the dividend fits into 32 bit */ in gpio_ir_tx_modulated()
103 pulse = DIV_ROUND_CLOSEST(gpio_ir->duty_cycle * (NSEC_PER_SEC / 100), in gpio_ir_tx_modulated()
104 gpio_ir->carrier); in gpio_ir_tx_modulated()
105 space = DIV_ROUND_CLOSEST((100 - gpio_ir->duty_cycle) * in gpio_ir_tx_modulated()
106 (NSEC_PER_SEC / 100), gpio_ir->carrier); in gpio_ir_tx_modulated()
122 gpiod_set_value(gpio_ir->gpio, 1); in gpio_ir_tx_modulated()
128 gpiod_set_value(gpio_ir->gpio, 0); in gpio_ir_tx_modulated()
144 struct gpio_ir *gpio_ir = dev->priv; in gpio_ir_tx()
148 if (gpio_ir->carrier) in gpio_ir_tx()
163 gpio_ir = devm_kmalloc(&pdev->dev, sizeof(*gpio_ir), GFP_KERNEL); in gpio_ir_tx_probe()
165 return -ENOMEM; in gpio_ir_tx_probe()
167 rcdev = devm_rc_allocate_device(&pdev->dev, RC_DRIVER_IR_RAW_TX); in gpio_ir_tx_probe()
169 return -ENOMEM; in gpio_ir_tx_probe()
171 gpio_ir->gpio = devm_gpiod_get(&pdev->dev, NULL, GPIOD_OUT_LOW); in gpio_ir_tx_probe()
172 if (IS_ERR(gpio_ir->gpio)) { in gpio_ir_tx_probe()
173 if (PTR_ERR(gpio_ir->gpio) != -EPROBE_DEFER) in gpio_ir_tx_probe()
174 dev_err(&pdev->dev, "Failed to get gpio (%ld)\n", in gpio_ir_tx_probe()
175 PTR_ERR(gpio_ir->gpio)); in gpio_ir_tx_probe()
176 return PTR_ERR(gpio_ir->gpio); in gpio_ir_tx_probe()
179 rcdev->priv = gpio_ir; in gpio_ir_tx_probe()
180 rcdev->driver_name = DRIVER_NAME; in gpio_ir_tx_probe()
181 rcdev->device_name = DEVICE_NAME; in gpio_ir_tx_probe()
182 rcdev->tx_ir = gpio_ir_tx; in gpio_ir_tx_probe()
183 rcdev->s_tx_duty_cycle = gpio_ir_tx_set_duty_cycle; in gpio_ir_tx_probe()
184 rcdev->s_tx_carrier = gpio_ir_tx_set_carrier; in gpio_ir_tx_probe()
186 gpio_ir->carrier = 38000; in gpio_ir_tx_probe()
187 gpio_ir->duty_cycle = 50; in gpio_ir_tx_probe()
189 rc = devm_rc_register_device(&pdev->dev, rcdev); in gpio_ir_tx_probe()
191 dev_err(&pdev->dev, "failed to register rc device\n"); in gpio_ir_tx_probe()
205 MODULE_DESCRIPTION("GPIO IR Bit Banging Transmitter");