Go to:
Gentoo Home
Documentation
Forums
Lists
Bugs
Planet
Store
Wiki
Get Gentoo!
Gentoo's Bugzilla – Attachment 419128 Details for
Bug 568180
app-misc/lirc-0.9.0-r5 using lirc_serial doesn't compile with kernel 4.1.12
Home
|
New
–
[Ex]
|
Browse
|
Search
|
Privacy Policy
|
[?]
|
Reports
|
Requests
|
Help
|
New Account
|
Log In
[x]
|
Forgot Password
Login:
[x]
[patch]
Patch for lirc-0.9.0-r5 lirc_serial for 4.1.12
0002-lirc.patch (text/plain), 19.56 KB, created by
Tom Dexter
on 2015-12-13 16:58:57 UTC
(
hide
)
Description:
Patch for lirc-0.9.0-r5 lirc_serial for 4.1.12
Filename:
MIME Type:
Creator:
Tom Dexter
Created:
2015-12-13 16:58:57 UTC
Size:
19.56 KB
patch
obsolete
>--- drivers/lirc_serial/lirc_serial.c 2015-12-13 11:02:13.000000000 -0500 >+++ drivers/lirc_serial/lirc_serial.c 2015-12-13 10:58:36.000000000 -0500 >@@ -48,6 +48,8 @@ > * Steve Davies <steve@daviesfam.org> July 2001 > */ > >+#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt >+ > #include <linux/module.h> > #include <linux/errno.h> > #include <linux/signal.h> >@@ -65,33 +67,19 @@ > #include <linux/delay.h> > #include <linux/poll.h> > #include <linux/platform_device.h> >- >-#include "drivers/kcompat.h" >-#if LINUX_VERSION_CODE > KERNEL_VERSION(3, 3, 0) >-#include <asm/switch_to.h> >-#else >-#include <asm/system.h> >-#endif >+#include <linux/gpio.h> > #include <linux/io.h> > #include <linux/irq.h> > #include <linux/fcntl.h> > #include <linux/spinlock.h> > >-#ifdef CONFIG_LIRC_SERIAL_NSLU2 >-#include <asm/hardware.h> >-#endif > /* From Intel IXP42X Developer's Manual (#252480-005): */ > /* ftp://download.intel.com/design/network/manuals/25248005.pdf */ > #define UART_IE_IXP42X_UUE 0x40 /* IXP42X UART Unit enable */ > #define UART_IE_IXP42X_RTOIE 0x10 /* IXP42X Receiver Data Timeout int.enable */ > >-#if LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 35) > #include <media/lirc.h> > #include <media/lirc_dev.h> >-#else >-#include "drivers/lirc.h" >-#include "drivers/lirc_dev/lirc_dev.h" >-#endif > > #define LIRC_DRIVER_NAME "lirc_serial" > >@@ -117,13 +105,13 @@ > static int type; > static int io; > static int irq; >-static int iommap; >+static bool iommap; > static int ioshift; >-static int softcarrier = 1; >-static int share_irq; >-static int debug; >+static bool softcarrier = true; >+static bool share_irq; >+static bool debug; > static int sense = -1; /* -1 = auto, 0 = active high, 1 = active low */ >-static int txsense; /* 0 = active high, 1 = active low */ >+static bool txsense; /* 0 = active high, 1 = active low */ > > #define dprintk(fmt, args...) \ > do { \ >@@ -140,6 +128,7 @@ > > static struct lirc_serial hardware[] = { > [LIRC_HOMEBREW] = { >+ .lock = __SPIN_LOCK_UNLOCKED(hardware[LIRC_HOMEBREW].lock), > .signal_pin = UART_MSR_DCD, > .signal_pin_change = UART_MSR_DDCD, > .on = (UART_MCR_RTS | UART_MCR_OUT2 | UART_MCR_DTR), >@@ -156,6 +145,7 @@ > }, > > [LIRC_IRDEO] = { >+ .lock = __SPIN_LOCK_UNLOCKED(hardware[LIRC_IRDEO].lock), > .signal_pin = UART_MSR_DSR, > .signal_pin_change = UART_MSR_DDSR, > .on = UART_MCR_OUT2, >@@ -167,6 +157,7 @@ > }, > > [LIRC_IRDEO_REMOTE] = { >+ .lock = __SPIN_LOCK_UNLOCKED(hardware[LIRC_IRDEO_REMOTE].lock), > .signal_pin = UART_MSR_DSR, > .signal_pin_change = UART_MSR_DDSR, > .on = (UART_MCR_RTS | UART_MCR_DTR | UART_MCR_OUT2), >@@ -178,6 +169,7 @@ > }, > > [LIRC_ANIMAX] = { >+ .lock = __SPIN_LOCK_UNLOCKED(hardware[LIRC_ANIMAX].lock), > .signal_pin = UART_MSR_DCD, > .signal_pin_change = UART_MSR_DDCD, > .on = 0, >@@ -188,6 +180,7 @@ > }, > > [LIRC_IGOR] = { >+ .lock = __SPIN_LOCK_UNLOCKED(hardware[LIRC_IGOR].lock), > .signal_pin = UART_MSR_DSR, > .signal_pin_change = UART_MSR_DDSR, > .on = (UART_MCR_RTS | UART_MCR_OUT2 | UART_MCR_DTR), >@@ -202,32 +195,6 @@ > .features = LIRC_CAN_REC_MODE2 > #endif > }, >- >-#ifdef CONFIG_LIRC_SERIAL_NSLU2 >- /* >- * Modified Linksys Network Storage Link USB 2.0 (NSLU2): >- * We receive on CTS of the 2nd serial port (R142,LHS), we >- * transmit with a IR diode between GPIO[1] (green status LED), >- * and ground (Matthias Goebl <matthias.goebl@goebl.net>). >- * See also http://www.nslu2-linux.org for this device >- */ >- [LIRC_NSLU2] = { >- .signal_pin = UART_MSR_CTS, >- .signal_pin_change = UART_MSR_DCTS, >- .on = (UART_MCR_RTS | UART_MCR_OUT2 | UART_MCR_DTR), >- .off = (UART_MCR_RTS | UART_MCR_OUT2), >- .send_pulse = send_pulse_homebrew, >- .send_space = send_space_homebrew, >-#ifdef CONFIG_LIRC_SERIAL_TRANSMITTER >- .features = (LIRC_CAN_SET_SEND_DUTY_CYCLE | >- LIRC_CAN_SET_SEND_CARRIER | >- LIRC_CAN_SEND_PULSE | LIRC_CAN_REC_MODE2) >-#else >- .features = LIRC_CAN_REC_MODE2 >-#endif >- }, >-#endif >- > }; > > #define RS_ISR_PASS_LIMIT 256 >@@ -299,7 +266,7 @@ > /* fetch serial input packet (1 byte) from register offset */ > static u8 sinp(int offset) > { >- if (iommap != 0) >+ if (iommap) > /* the register is memory-mapped */ > offset <<= ioshift; > >@@ -309,7 +276,7 @@ > /* write serial output packet (1 byte) of value to register offset */ > static void soutp(int offset, u8 value) > { >- if (iommap != 0) >+ if (iommap) > /* the register is memory-mapped */ > offset <<= ioshift; > >@@ -318,16 +285,6 @@ > > static void on(void) > { >-#ifdef CONFIG_LIRC_SERIAL_NSLU2 >- /* >- * On NSLU2, we put the transmit diode between the output of the green >- * status LED and ground >- */ >- if (type == LIRC_NSLU2) { >- gpio_line_set(NSLU2_LED_GRN, IXP4XX_GPIO_LOW); >- return; >- } >-#endif > if (txsense) > soutp(UART_MCR, hardware[type].off); > else >@@ -336,12 +293,6 @@ > > static void off(void) > { >-#ifdef CONFIG_LIRC_SERIAL_NSLU2 >- if (type == LIRC_NSLU2) { >- gpio_line_set(NSLU2_LED_GRN, IXP4XX_GPIO_HIGH); >- return; >- } >-#endif > if (txsense) > soutp(UART_MCR, hardware[type].on); > else >@@ -387,13 +338,13 @@ > duty_cycle = new_duty_cycle; > freq = new_freq; > >- loops_per_sec = current_cpu_data.loops_per_jiffy; >+ loops_per_sec = __this_cpu_read(cpu.info.loops_per_jiffy); > loops_per_sec *= HZ; > > /* How many clocks in a microsecond?, avoiding long long divide */ > work = loops_per_sec; > work *= 4295; /* 4295 = 2^32 / 1e6 */ >- conv_us_to_clocks = (work >> 32); >+ conv_us_to_clocks = work >> 32; > > /* > * Carrier period in clocks, approach good up to 32GHz clock, >@@ -408,7 +359,7 @@ > dprintk("in init_timing_params, freq=%d, duty_cycle=%d, " > "clk/jiffy=%ld, pulse=%ld, space=%ld, " > "conv_us_to_clocks=%ld\n", >- freq, duty_cycle, current_cpu_data.loops_per_jiffy, >+ freq, duty_cycle, __this_cpu_read(cpu_info.loops_per_jiffy), > pulse_width, space_width, conv_us_to_clocks); > return 0; > } >@@ -431,8 +382,8 @@ > period = 256 * 1000000L / freq; > pulse_width = period * duty_cycle / 100; > space_width = period - pulse_width; >- dprintk("in init_timing_params, freq=%d pulse=%ld, " >- "space=%ld\n", freq, pulse_width, space_width); >+ dprintk("in init_timing_params, freq=%d pulse=%ld, space=%ld\n", >+ freq, pulse_width, space_width); > return 0; > } > #endif /* USE_RDTSC */ >@@ -545,6 +496,7 @@ > { > int flag; > unsigned long actual, target, d; >+ > length <<= 8; > > actual = 0; target = 0; flag = 0; >@@ -577,11 +529,10 @@ > > if (softcarrier) > return send_pulse_homebrew_softcarrier(length); >- else { >- on(); >- safe_udelay(length); >- return 0; >- } >+ >+ on(); >+ safe_udelay(length); >+ return 0; > } > > static void send_space_irdeo(long length) >@@ -653,11 +604,7 @@ > rbwrite(l); > } > >-#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 19) >-static irqreturn_t irq_handler(int i, void *blah) >-#else >-static irqreturn_t irq_handler(int i, void *blah, struct pt_regs *regs) >-#endif >+static irqreturn_t lirc_irq_handler(int i, void *blah) > { > struct timeval tv; > int counter, dcd; >@@ -676,8 +623,7 @@ > counter++; > status = sinp(UART_MSR); > if (counter > RS_ISR_PASS_LIMIT) { >- printk(KERN_WARNING LIRC_DRIVER_NAME ": AIEEEE: " >- "We're caught!\n"); >+ pr_warn("AIEEEE: We're caught!\n"); > break; > } > if ((status & hardware[type].signal_pin_change) >@@ -712,11 +658,11 @@ > dcd = (status & hardware[type].signal_pin) ? 1 : 0; > > if (dcd == last_dcd) { >- printk(KERN_WARNING LIRC_DRIVER_NAME >- ": ignoring spike: %d %d %lx %lx %lx %lx\n", >- dcd, sense, >- tv.tv_sec, lasttv.tv_sec, >- tv.tv_usec, lasttv.tv_usec); >+ pr_warn("ignoring spike: %d %d %lx %lx %lx %lx\n", >+ dcd, sense, >+ tv.tv_sec, lasttv.tv_sec, >+ (unsigned long)tv.tv_usec, >+ (unsigned long)lasttv.tv_usec); > continue; > } > >@@ -724,25 +670,22 @@ > if (tv.tv_sec < lasttv.tv_sec || > (tv.tv_sec == lasttv.tv_sec && > tv.tv_usec < lasttv.tv_usec)) { >- printk(KERN_WARNING LIRC_DRIVER_NAME >- ": AIEEEE: your clock just jumped " >- "backwards\n"); >- printk(KERN_WARNING LIRC_DRIVER_NAME >- ": %d %d %lx %lx %lx %lx\n", >- dcd, sense, >- tv.tv_sec, lasttv.tv_sec, >- tv.tv_usec, lasttv.tv_usec); >+ pr_warn("AIEEEE: your clock just jumped backwards\n"); >+ pr_warn("%d %d %lx %lx %lx %lx\n", >+ dcd, sense, >+ tv.tv_sec, lasttv.tv_sec, >+ (unsigned long)tv.tv_usec, >+ (unsigned long)lasttv.tv_usec); > data = PULSE_MASK; > } else if (deltv > 15) { > data = PULSE_MASK; /* really long time */ > if (!(dcd^sense)) { > /* sanity check */ >- printk(KERN_WARNING LIRC_DRIVER_NAME >- ": AIEEEE: " >- "%d %d %lx %lx %lx %lx\n", >- dcd, sense, >- tv.tv_sec, lasttv.tv_sec, >- tv.tv_usec, lasttv.tv_usec); >+ pr_warn("AIEEEE: %d %d %lx %lx %lx %lx\n", >+ dcd, sense, >+ tv.tv_sec, lasttv.tv_sec, >+ (unsigned long)tv.tv_usec, >+ (unsigned long)lasttv.tv_usec); > /* > * detecting pulse while this > * MUST be a space! >@@ -785,9 +728,8 @@ > soutp(UART_IER, scratch); > if (scratch2 != 0 || scratch3 != 0x0f) { > /* we fail, there's nothing here */ >- printk(KERN_ERR LIRC_DRIVER_NAME ": port existence test " >- "failed, cannot continue\n"); >- return -EINVAL; >+ pr_err("port existence test failed, cannot continue\n"); >+ return -ENODEV; > } > > >@@ -805,20 +747,6 @@ > sinp(UART_IIR); > sinp(UART_MSR); > >-#ifdef CONFIG_LIRC_SERIAL_NSLU2 >- if (type == LIRC_NSLU2) { >- /* Setup NSLU2 UART */ >- >- /* Enable UART */ >- soutp(UART_IER, sinp(UART_IER) | UART_IE_IXP42X_UUE); >- /* Disable Receiver data Time out interrupt */ >- soutp(UART_IER, sinp(UART_IER) & ~UART_IE_IXP42X_RTOIE); >- /* set out2 = interrupt unmask; off() doesn't set MCR >- on NSLU2 */ >- soutp(UART_MCR, UART_MCR_RTS|UART_MCR_OUT2); >- } >-#endif >- > /* Set line for power source */ > off(); > >@@ -850,9 +778,20 @@ > return 0; > } > >-static int init_port(void) >+static int lirc_serial_probe(struct platform_device *dev) > { >- int i, nlow, nhigh; >+ int i, nlow, nhigh, result; >+ >+ result = devm_request_irq(&dev->dev, irq, lirc_irq_handler, >+ (share_irq ? IRQF_SHARED : 0), >+ LIRC_DRIVER_NAME, &hardware); >+ if (result < 0) { >+ if (result == -EBUSY) >+ dev_err(&dev->dev, "IRQ %d busy\n", irq); >+ else if (result == -EINVAL) >+ dev_err(&dev->dev, "Bad irq number or handler\n"); >+ return result; >+ } > > /* Reserve io region. */ > /* >@@ -860,24 +799,23 @@ > * For memory mapped I/O you *might* need to use ioremap() first, > * for the NSLU2 it's done in boot code. > */ >- if (((iommap != 0) >- && (request_mem_region(iommap, 8 << ioshift, >- LIRC_DRIVER_NAME) == NULL)) >- || ((iommap == 0) >- && (request_region(io, 8, LIRC_DRIVER_NAME) == NULL))) { >- printk(KERN_ERR LIRC_DRIVER_NAME >- ": port %04x already in use\n", io); >- printk(KERN_WARNING LIRC_DRIVER_NAME >- ": use 'setserial /dev/ttySX uart none'\n"); >- printk(KERN_WARNING LIRC_DRIVER_NAME >- ": or compile the serial port driver as module and\n"); >- printk(KERN_WARNING LIRC_DRIVER_NAME >- ": make sure this module is loaded first\n"); >+ if (((iommap) >+ && (devm_request_mem_region(&dev->dev, iommap, 8 << ioshift, >+ LIRC_DRIVER_NAME) == NULL)) >+ || ((!iommap) >+ && (devm_request_region(&dev->dev, io, 8, >+ LIRC_DRIVER_NAME) == NULL))) { >+ dev_err(&dev->dev, "port %04x already in use\n", io); >+ dev_warn(&dev->dev, "use 'setserial /dev/ttySX uart none'\n"); >+ dev_warn(&dev->dev, >+ "or compile the serial port driver as module and\n"); >+ dev_warn(&dev->dev, "make sure this module is loaded first\n"); > return -EBUSY; > } > >- if (hardware_init_port() < 0) >- return -EINVAL; >+ result = hardware_init_port(); >+ if (result < 0) >+ return result; > > /* Initialize pulse/space widths */ > init_timing_params(duty_cycle, freq); >@@ -900,41 +838,24 @@ > nhigh++; > msleep(40); > } >- sense = (nlow >= nhigh ? 1 : 0); >- printk(KERN_INFO LIRC_DRIVER_NAME ": auto-detected active " >- "%s receiver\n", sense ? "low" : "high"); >+ sense = nlow >= nhigh ? 1 : 0; >+ dev_info(&dev->dev, "auto-detected active %s receiver\n", >+ sense ? "low" : "high"); > } else >- printk(KERN_INFO LIRC_DRIVER_NAME ": Manually using active " >- "%s receiver\n", sense ? "low" : "high"); >+ dev_info(&dev->dev, "Manually using active %s receiver\n", >+ sense ? "low" : "high"); > >+ dprintk("Interrupt %d, port %04x obtained\n", irq, io); > return 0; > } > > static int set_use_inc(void *data) > { >- int result; > unsigned long flags; > > /* initialize timestamp */ > do_gettimeofday(&lasttv); > >- result = request_irq(irq, irq_handler, >- IRQF_DISABLED | (share_irq ? IRQF_SHARED : 0), >- LIRC_DRIVER_NAME, (void *)&hardware); >- >- switch (result) { >- case -EBUSY: >- printk(KERN_ERR LIRC_DRIVER_NAME ": IRQ %d busy\n", irq); >- return -EBUSY; >- case -EINVAL: >- printk(KERN_ERR LIRC_DRIVER_NAME >- ": Bad irq number or handler\n"); >- return -EINVAL; >- default: >- dprintk("Interrupt %d, port %04x obtained\n", irq, io); >- break; >- }; >- > spin_lock_irqsave(&hardware[type].lock, flags); > > /* Set DLAB 0. */ >@@ -959,13 +880,9 @@ > soutp(UART_IER, sinp(UART_IER) & > (~(UART_IER_MSI|UART_IER_RLSI|UART_IER_THRI|UART_IER_RDI))); > spin_unlock_irqrestore(&hardware[type].lock, flags); >- >- free_irq(irq, (void *)&hardware); >- >- dprintk("freed IRQ %d\n", irq); > } > >-static ssize_t lirc_write(struct file *file, const char *buf, >+static ssize_t lirc_write(struct file *file, const char __user *buf, > size_t n, loff_t *ppos) > { > int i, count; >@@ -974,7 +891,7 @@ > int *wbuf; > > if (!(hardware[type].features & LIRC_CAN_SEND_PULSE)) >- return -EBADF; >+ return -EPERM; > > count = n / sizeof(int); > if (n % sizeof(int) || count % 2 == 0) >@@ -999,15 +916,11 @@ > return n; > } > >-#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 35) >-static int lirc_ioctl(struct inode *node, struct file *filep, unsigned int cmd, >- unsigned long arg) >-#else > static long lirc_ioctl(struct file *filep, unsigned int cmd, unsigned long arg) >-#endif > { > int result; >- __u32 value; >+ u32 __user *uptr = (u32 __user *)arg; >+ u32 value; > > switch (cmd) { > case LIRC_GET_SEND_MODE: >@@ -1016,7 +929,7 @@ > > result = put_user(LIRC_SEND2MODE > (hardware[type].features&LIRC_CAN_SEND_MASK), >- (__u32 *) arg); >+ uptr); > if (result) > return result; > break; >@@ -1025,50 +938,43 @@ > if (!(hardware[type].features&LIRC_CAN_SEND_MASK)) > return -ENOIOCTLCMD; > >- result = get_user(value, (__u32 *) arg); >+ result = get_user(value, uptr); > if (result) > return result; > /* only LIRC_MODE_PULSE supported */ > if (value != LIRC_MODE_PULSE) >- return -ENOSYS; >+ return -EINVAL; > break; > > case LIRC_GET_LENGTH: >- return -ENOSYS; >- break; >+ return -ENOIOCTLCMD; > > case LIRC_SET_SEND_DUTY_CYCLE: > dprintk("SET_SEND_DUTY_CYCLE\n"); > if (!(hardware[type].features&LIRC_CAN_SET_SEND_DUTY_CYCLE)) > return -ENOIOCTLCMD; > >- result = get_user(value, (__u32 *) arg); >+ result = get_user(value, uptr); > if (result) > return result; > if (value <= 0 || value > 100) > return -EINVAL; > return init_timing_params(value, freq); >- break; > > case LIRC_SET_SEND_CARRIER: > dprintk("SET_SEND_CARRIER\n"); > if (!(hardware[type].features&LIRC_CAN_SET_SEND_CARRIER)) > return -ENOIOCTLCMD; > >- result = get_user(value, (__u32 *) arg); >+ result = get_user(value, uptr); > if (result) > return result; > if (value > 500000 || value < 20000) > return -EINVAL; > return init_timing_params(duty_cycle, value); >- break; > > default: >-#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 35) >- return lirc_dev_fop_ioctl(node, filep, cmd, arg); >-#else > return lirc_dev_fop_ioctl(filep, cmd, arg); >-#endif > } > return 0; > } >@@ -1076,18 +982,15 @@ > static const struct file_operations lirc_fops = { > .owner = THIS_MODULE, > .write = lirc_write, >-#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 35) >- .ioctl = lirc_ioctl, >-#else > .unlocked_ioctl = lirc_ioctl, > #ifdef CONFIG_COMPAT > .compat_ioctl = lirc_ioctl, > #endif >-#endif > .read = lirc_dev_fop_read, > .poll = lirc_dev_fop_poll, > .open = lirc_dev_fop_open, > .release = lirc_dev_fop_close, >+ .llseek = no_llseek, > }; > > static struct lirc_driver driver = { >@@ -1107,16 +1010,6 @@ > > static struct platform_device *lirc_serial_dev; > >-static int lirc_serial_probe(struct platform_device *dev) >-{ >- return 0; >-} >- >-static int lirc_serial_remove(struct platform_device *dev) >-{ >- return 0; >-} >- > static int lirc_serial_suspend(struct platform_device *dev, > pm_message_t state) > { >@@ -1142,11 +1035,11 @@ > static int lirc_serial_resume(struct platform_device *dev) > { > unsigned long flags; >+ int result; > >- if (hardware_init_port() < 0) { >- lirc_serial_exit(); >- return -EINVAL; >- } >+ result = hardware_init_port(); >+ if (result < 0) >+ return result; > > spin_lock_irqsave(&hardware[type].lock, flags); > /* Enable Interrupt */ >@@ -1163,12 +1056,10 @@ > > static struct platform_driver lirc_serial_driver = { > .probe = lirc_serial_probe, >- .remove = lirc_serial_remove, > .suspend = lirc_serial_suspend, > .resume = lirc_serial_resume, > .driver = { > .name = "lirc_serial", >- .owner = THIS_MODULE, > }, > }; > >@@ -1179,7 +1070,7 @@ > /* Init read buffer. */ > result = lirc_buffer_init(&rbuf, sizeof(int), RBUF_LEN); > if (result < 0) >- return -ENOMEM; >+ return result; > > result = platform_driver_register(&lirc_serial_driver); > if (result) { >@@ -1219,10 +1110,6 @@ > { > int result; > >- result = lirc_serial_init(); >- if (result) >- return result; >- > switch (type) { > case LIRC_HOMEBREW: > case LIRC_IRDEO: >@@ -1233,25 +1120,13 @@ > io = io ? io : 0x3f8; > irq = irq ? irq : 4; > break; >-#ifdef CONFIG_LIRC_SERIAL_NSLU2 >- case LIRC_NSLU2: >- io = io ? io : IRQ_IXP4XX_UART2; >- irq = irq ? irq : (IXP4XX_UART2_BASE_VIRT + REG_OFFSET); >- iommap = iommap ? iommap : IXP4XX_UART2_BASE_PHYS; >- ioshift = ioshift ? ioshift : 2; >- break; >-#endif > default: >- result = -EINVAL; >- goto exit_serial_exit; >+ return -EINVAL; > } > if (!softcarrier) { > switch (type) { > case LIRC_HOMEBREW: > case LIRC_IGOR: >-#ifdef CONFIG_LIRC_SERIAL_NSLU2 >- case LIRC_NSLU2: >-#endif > hardware[type].features &= > ~(LIRC_CAN_SET_SEND_DUTY_CYCLE| > LIRC_CAN_SET_SEND_CARRIER); >@@ -1259,34 +1134,29 @@ > } > } > >- result = init_port(); >- if (result < 0) >- goto exit_serial_exit; >+ /* make sure sense is either -1, 0, or 1 */ >+ if (sense != -1) >+ sense = !!sense; >+ >+ result = lirc_serial_init(); >+ if (result) >+ return result; >+ > driver.features = hardware[type].features; > driver.dev = &lirc_serial_dev->dev; > driver.minor = lirc_register_driver(&driver); > if (driver.minor < 0) { >- printk(KERN_ERR LIRC_DRIVER_NAME >- ": register_chrdev failed!\n"); >- result = -EIO; >- goto exit_release; >+ pr_err("register_chrdev failed!\n"); >+ lirc_serial_exit(); >+ return driver.minor; > } > return 0; >-exit_release: >- release_region(io, 8); >-exit_serial_exit: >- lirc_serial_exit(); >- return result; > } > > static void __exit lirc_serial_exit_module(void) > { >- lirc_serial_exit(); >- if (iommap != 0) >- release_mem_region(iommap, 8 << ioshift); >- else >- release_region(io, 8); > lirc_unregister_driver(driver.minor); >+ lirc_serial_exit(); > dprintk("cleaned up module\n"); > } > >@@ -1315,7 +1185,7 @@ > /* > * some architectures (e.g. intel xscale) align the 8bit serial registers > * on 32bit word boundaries. >- * See linux-kernel/serial/8250.c serial_in()/out() >+ * See linux-kernel/drivers/tty/serial/8250/8250.c serial_in()/out() > */ > module_param(ioshift, int, S_IRUGO); > MODULE_PARM_DESC(ioshift, "shift I/O register offset (0 = no shift)"); >@@ -1326,7 +1196,7 @@ > module_param(share_irq, bool, S_IRUGO); > MODULE_PARM_DESC(share_irq, "Share interrupts (0 = off, 1 = on)"); > >-module_param(sense, bool, S_IRUGO); >+module_param(sense, int, S_IRUGO); > MODULE_PARM_DESC(sense, "Override autodetection of IR receiver circuit" > " (0 = active high, 1 = active low )"); >
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
Attachments on
bug 568180
: 419128 |
419130
|
420780