Loading drivers/media/rc/serial_ir.c +14 −20 Original line number Diff line number Diff line Loading @@ -139,10 +139,8 @@ struct serial_ir { struct platform_device *pdev; struct timer_list timeout_timer; unsigned int freq; unsigned int carrier; unsigned int duty_cycle; unsigned int pulse_width, space_width; }; static struct serial_ir serial_ir; Loading Loading @@ -183,18 +181,6 @@ static void off(void) soutp(UART_MCR, hardware[type].off); } static void init_timing_params(unsigned int new_duty_cycle, unsigned int new_freq) { serial_ir.duty_cycle = new_duty_cycle; serial_ir.freq = new_freq; serial_ir.pulse_width = DIV_ROUND_CLOSEST( new_duty_cycle * NSEC_PER_SEC, new_freq * 100l); serial_ir.space_width = DIV_ROUND_CLOSEST( (100l - new_duty_cycle) * NSEC_PER_SEC, new_freq * 100l); } static void send_pulse_irdeo(unsigned int length, ktime_t target) { long rawbits; Loading Loading @@ -241,13 +227,20 @@ static void send_pulse_homebrew_softcarrier(unsigned int length, ktime_t edge) * ndelay(s64) does not compile; so use s32 rather than s64. */ s32 delta; unsigned int pulse, space; /* Ensure the dividend fits into 32 bit */ pulse = DIV_ROUND_CLOSEST(serial_ir.duty_cycle * (NSEC_PER_SEC / 100), serial_ir.carrier); space = DIV_ROUND_CLOSEST((100 - serial_ir.duty_cycle) * (NSEC_PER_SEC / 100), serial_ir.carrier); for (;;) { now = ktime_get(); if (ktime_compare(now, target) >= 0) break; on(); edge = ktime_add_ns(edge, serial_ir.pulse_width); edge = ktime_add_ns(edge, pulse); delta = ktime_to_ns(ktime_sub(edge, now)); if (delta > 0) ndelay(delta); Loading @@ -255,7 +248,7 @@ static void send_pulse_homebrew_softcarrier(unsigned int length, ktime_t edge) off(); if (ktime_compare(now, target) >= 0) break; edge = ktime_add_ns(edge, serial_ir.space_width); edge = ktime_add_ns(edge, space); delta = ktime_to_ns(ktime_sub(edge, now)); if (delta > 0) ndelay(delta); Loading Loading @@ -580,7 +573,8 @@ static int serial_ir_probe(struct platform_device *dev) return result; /* Initialize pulse/space widths */ init_timing_params(50, 38000); serial_ir.duty_cycle = 50; serial_ir.carrier = 38000; /* If pin is high, then this must be an active low receiver. */ if (sense == -1) { Loading Loading @@ -684,7 +678,7 @@ static int serial_ir_tx(struct rc_dev *dev, unsigned int *txbuf, static int serial_ir_tx_duty_cycle(struct rc_dev *dev, u32 cycle) { init_timing_params(cycle, serial_ir.freq); serial_ir.duty_cycle = cycle; return 0; } Loading @@ -693,7 +687,7 @@ static int serial_ir_tx_carrier(struct rc_dev *dev, u32 carrier) if (carrier > 500000 || carrier < 20000) return -EINVAL; init_timing_params(serial_ir.duty_cycle, carrier); serial_ir.carrier = carrier; return 0; } Loading Loading
drivers/media/rc/serial_ir.c +14 −20 Original line number Diff line number Diff line Loading @@ -139,10 +139,8 @@ struct serial_ir { struct platform_device *pdev; struct timer_list timeout_timer; unsigned int freq; unsigned int carrier; unsigned int duty_cycle; unsigned int pulse_width, space_width; }; static struct serial_ir serial_ir; Loading Loading @@ -183,18 +181,6 @@ static void off(void) soutp(UART_MCR, hardware[type].off); } static void init_timing_params(unsigned int new_duty_cycle, unsigned int new_freq) { serial_ir.duty_cycle = new_duty_cycle; serial_ir.freq = new_freq; serial_ir.pulse_width = DIV_ROUND_CLOSEST( new_duty_cycle * NSEC_PER_SEC, new_freq * 100l); serial_ir.space_width = DIV_ROUND_CLOSEST( (100l - new_duty_cycle) * NSEC_PER_SEC, new_freq * 100l); } static void send_pulse_irdeo(unsigned int length, ktime_t target) { long rawbits; Loading Loading @@ -241,13 +227,20 @@ static void send_pulse_homebrew_softcarrier(unsigned int length, ktime_t edge) * ndelay(s64) does not compile; so use s32 rather than s64. */ s32 delta; unsigned int pulse, space; /* Ensure the dividend fits into 32 bit */ pulse = DIV_ROUND_CLOSEST(serial_ir.duty_cycle * (NSEC_PER_SEC / 100), serial_ir.carrier); space = DIV_ROUND_CLOSEST((100 - serial_ir.duty_cycle) * (NSEC_PER_SEC / 100), serial_ir.carrier); for (;;) { now = ktime_get(); if (ktime_compare(now, target) >= 0) break; on(); edge = ktime_add_ns(edge, serial_ir.pulse_width); edge = ktime_add_ns(edge, pulse); delta = ktime_to_ns(ktime_sub(edge, now)); if (delta > 0) ndelay(delta); Loading @@ -255,7 +248,7 @@ static void send_pulse_homebrew_softcarrier(unsigned int length, ktime_t edge) off(); if (ktime_compare(now, target) >= 0) break; edge = ktime_add_ns(edge, serial_ir.space_width); edge = ktime_add_ns(edge, space); delta = ktime_to_ns(ktime_sub(edge, now)); if (delta > 0) ndelay(delta); Loading Loading @@ -580,7 +573,8 @@ static int serial_ir_probe(struct platform_device *dev) return result; /* Initialize pulse/space widths */ init_timing_params(50, 38000); serial_ir.duty_cycle = 50; serial_ir.carrier = 38000; /* If pin is high, then this must be an active low receiver. */ if (sense == -1) { Loading Loading @@ -684,7 +678,7 @@ static int serial_ir_tx(struct rc_dev *dev, unsigned int *txbuf, static int serial_ir_tx_duty_cycle(struct rc_dev *dev, u32 cycle) { init_timing_params(cycle, serial_ir.freq); serial_ir.duty_cycle = cycle; return 0; } Loading @@ -693,7 +687,7 @@ static int serial_ir_tx_carrier(struct rc_dev *dev, u32 carrier) if (carrier > 500000 || carrier < 20000) return -EINVAL; init_timing_params(serial_ir.duty_cycle, carrier); serial_ir.carrier = carrier; return 0; } Loading