Quantcast

ENE0100: patch against lirc CVS

classic Classic list List threaded Threaded
2 messages Options
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

ENE0100: patch against lirc CVS

maximlevitsky (Bugzilla)
Hi,

This patch against lirc CVS that adds ENE0100 support.

From: Maxim Levitsky <[hidden email]>
Date: Mon, 10 Aug 2009 18:06:48 +0300
Subject: [PATCH] Add ENE0100 driver

---
 configure.ac                        |   16 +-
 drivers/lirc_dev/lirc_dev.h         |   28 +++
 drivers/lirc_ene0100/Makefile.am    |   12 +
 drivers/lirc_ene0100/lirc_ene0100.c |  420 +++++++++++++++++++++++++++++++++++
 drivers/lirc_ene0100/lirc_ene0100.h |   97 ++++++++
 setup.data                          |   10 +-
 6 files changed, 577 insertions(+), 6 deletions(-)
 create mode 100644 drivers/lirc_ene0100/Makefile.am
 create mode 100644 drivers/lirc_ene0100/lirc_ene0100.c
 create mode 100644 drivers/lirc_ene0100/lirc_ene0100.h

diff --git a/configure.ac b/configure.ac
index f2c36e9..f2534de 100644
--- a/configure.ac
+++ b/configure.ac
@@ -173,7 +173,8 @@ if test x${no_kernel} != xyes; then
  (lirc_dev lirc_serial) \
  (lirc_dev lirc_sir) \
  (lirc_dev lirc_streamzap) \
- (lirc_dev lirc_wpc8769l)"
+ (lirc_dev lirc_wpc8769l) \
+ (lirc_dev lirc_ene0100)"
 fi
 
 AH_TEMPLATE([DAEMONIZE],
@@ -455,7 +456,7 @@ AC_ARG_WITH(driver,
                           sasem, sb0540, serial, silitek, sir, slinke,
                           streamzap, tekram, tekram_bt829, tira,
   ttusbir, tuxbox, tvbox, udp, uirt2,
-  uirt2_raw, usb_uirt_raw, usbx, wpc8769l],
+  uirt2_raw, usb_uirt_raw, usbx, wpc8769l, ene0100],
 driver=${withval},
 driver="unset"
 )
@@ -617,6 +618,8 @@ if test "$driver" = "userspace" -o "$driver" = "all"; then
  ;;
  lirc_dev-lirc_wpc8769l)
  ;;
+ lirc_dev-lirc_ene0100)
+ ;;
  lirc_flyvideo)
  ;;
  livedrive_midi)
@@ -1388,6 +1391,11 @@ if test "$driver" = "wpc8769l"; then
   lircd_conf="acer/lircd.conf.Aspire_6530G"
 fi
 
+if test "$driver" = "ene0100"; then
+  lirc_driver="lirc_dev lirc_ene0100"
+fi
+
+
 #END HARDWARE HEURISTIC
 
 AC_DEFINE_UNQUOTED(HW_DEFAULT, ${HW_DEFAULT})
@@ -1497,7 +1505,8 @@ elif test "$lirc_driver" = "all"; then
  lirc_sir \
  lirc_streamzap \
  lirc_ttusbir \
- lirc_wpc8769l"
+ lirc_wpc8769l \
+ lirc_ene0100"
 fi
 if kernel_module=$(expr "$lirc_driver" : 'lirc_dev \(.*\)'); then
   :
@@ -1780,6 +1789,7 @@ AC_CONFIG_FILES([
   drivers/lirc_sir/Makefile
   drivers/lirc_streamzap/Makefile
   drivers/lirc_wpc8769l/Makefile
+  drivers/lirc_ene0100/Makefile
   daemons/Makefile
   tools/Makefile
   doc/Makefile
diff --git a/drivers/lirc_dev/lirc_dev.h b/drivers/lirc_dev/lirc_dev.h
index 87f18e5..680fa00 100644
--- a/drivers/lirc_dev/lirc_dev.h
+++ b/drivers/lirc_dev/lirc_dev.h
@@ -42,6 +42,8 @@ struct lirc_buffer {
  int head, tail;    /* in chunks */
  unsigned char *data;
 #endif
+ /* support for long spaces */
+ struct timeval gap_start;
 };
 #ifndef LIRC_HAVE_KFIFO
 static inline void lirc_buffer_lock(struct lirc_buffer *buf,
@@ -247,6 +249,32 @@ static inline void lirc_buffer_write_n(struct lirc_buffer *buf,
 #endif
 }
 
+static inline void lirc_buffer_stop_recieve(struct lirc_buffer *buf)
+{
+ do_gettimeofday(&buf->gap_start);
+}
+
+static inline void lirc_buffer_start_recieve(struct lirc_buffer *buf,
+ int sample)
+{
+ struct timeval now;
+ unsigned int result;
+ do_gettimeofday(&now);
+
+ if (now.tv_sec - buf->gap_start.tv_sec > 16)
+ result = PULSE_MASK;
+ else
+ result = 1000000ull * (now.tv_sec - buf->gap_start.tv_sec)
+ + (now.tv_usec - buf->gap_start.tv_usec) + sample;
+
+ if (result > PULSE_MASK)
+ result = PULSE_MASK;
+
+ if (!lirc_buffer_full(buf))
+ lirc_buffer_write(buf, (void *) &result);
+}
+
+
 struct lirc_driver {
  char name[40];
  int minor;
diff --git a/drivers/lirc_ene0100/Makefile.am b/drivers/lirc_ene0100/Makefile.am
new file mode 100644
index 0000000..31b57a3
--- /dev/null
+++ b/drivers/lirc_ene0100/Makefile.am
@@ -0,0 +1,12 @@
+
+## Process this file with automake to produce Makefile.in
+
+## this is so that Automake includes the C compiling definitions, and
+## includes the source files in the distribution.
+EXTRA_PROGRAMS = automake_dummy
+automake_dummy_SOURCES = lirc_ene0100.c
+
+## there is no *just* object file support in automake.  This is close enough
+module_DATA = lirc_ene0100.o
+
+include ../Makefile.common
diff --git a/drivers/lirc_ene0100/lirc_ene0100.c b/drivers/lirc_ene0100/lirc_ene0100.c
new file mode 100644
index 0000000..3a693c5
--- /dev/null
+++ b/drivers/lirc_ene0100/lirc_ene0100.c
@@ -0,0 +1,420 @@
+/*
+ * driver for ENE KB3924 CIR (also known as ENE0100)
+ *
+ * Copyright (C) 2009 Maxim Levitsky <[hidden email]>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+ * USA
+ */
+
+
+#include <linux/kernel.h>
+#include <linux/module.h>
+#include <linux/pnp.h>
+#include <linux/io.h>
+#include <linux/interrupt.h>
+#include "lirc_ene0100.h"
+
+
+static int sample_period = 50;
+static int enable_idle = 1;
+
+
+/* read a hardware register */
+static u8 ene_hw_read_reg(struct ene_device *dev, u16 reg)
+{
+ outb(reg >> 8   , dev->hw_io + ENE_ADDR_HI);
+ outb(reg & 0xFF , dev->hw_io + ENE_ADDR_LO);
+ return inb(dev->hw_io + ENE_IO);
+}
+
+/* write a hardware register */
+static void ene_hw_write_reg(struct ene_device *dev, u16 reg, u8 value)
+{
+ outb(reg >> 8   , dev->hw_io + ENE_ADDR_HI);
+ outb(reg & 0xFF , dev->hw_io + ENE_ADDR_LO);
+ outb(value, dev->hw_io + ENE_IO);
+}
+
+/* change specific bits in hardware register */
+static void ene_hw_write_reg_mask(struct ene_device *dev,
+ u16 reg, u8 value, u8 mask)
+{
+ u8 regvalue;
+
+ outb(reg >> 8   , dev->hw_io + ENE_ADDR_HI);
+ outb(reg & 0xFF , dev->hw_io + ENE_ADDR_LO);
+
+ regvalue = inb(dev->hw_io + ENE_IO) & ~mask;
+ regvalue |= (value & mask);
+ outb(regvalue, dev->hw_io + ENE_IO);
+}
+
+
+/* which half of hardware buffer we read now ?*/
+static int hw_get_buf_pointer(struct ene_device *dev)
+{
+ return 4 * (ene_hw_read_reg(dev, ENE_FW_BUFFER_POINTER)
+ & ENE_FW_BUFFER_POINTER_HIGH);
+}
+
+
+/* read irq status and ack it */
+static int ene_hw_irq_status(struct ene_device *dev)
+{
+ u8 irq_status = ene_hw_read_reg(dev, ENE_IRQ_STATUS);
+
+ if (!irq_status & ENE_IRQ_STATUS_IR)
+ return 0;
+
+ ene_hw_write_reg(dev, ENE_IRQ_STATUS, irq_status & ~ENE_IRQ_STATUS_IR);
+ return 1;
+}
+
+
+/* enable or disable idle mode */
+static void ene_set_idle(struct ene_device *dev, int idle)
+{
+ dev->idle = idle;
+
+ ene_hw_write_reg_mask(dev, ENE_ADC_SAMPLE_PERIOD,
+ idle & enable_idle ? 0 : ENE_ADC_SAMPLE_OVERFLOW,
+ ENE_ADC_SAMPLE_OVERFLOW);
+
+ if (idle)
+ lirc_buffer_stop_recieve(dev->lirc_driver->rbuf);
+ else {
+ lirc_buffer_start_recieve(dev->lirc_driver->rbuf,
+ dev->sample);
+ dev->sample = 0;
+ }
+}
+
+
+/* hardware initialization */
+static int ene_hw_init(void *data)
+{
+ struct ene_device *dev = (struct ene_device *)data;
+ dev->in_use = 1;
+
+ ene_hw_write_reg(dev, ENE_IRQ, dev->irq << 1);
+ ene_hw_write_reg(dev, ENE_ADC_UNK2, 0x00);
+ ene_hw_write_reg(dev, ENE_ADC_SAMPLE_PERIOD, sample_period);
+ ene_hw_write_reg(dev, ENE_ADC_UNK1, 0x07);
+ ene_hw_write_reg(dev, ENE_UNK1, 0x01);
+ ene_hw_write_reg_mask(dev, ENE_FW_SETTINGS, ENE_FW_ENABLE | ENE_FW_IRQ,
+ ENE_FW_ENABLE | ENE_FW_IRQ);
+
+ /* ack any pending irqs - just in case */
+ ene_hw_irq_status(dev);
+
+ /* enter idle mode */
+ ene_set_idle(dev, 1);
+
+ /* clear stats */
+ dev->sample = 0;
+ return 0;
+}
+
+/* deinitialization */
+static void ene_hw_deinit(void *data)
+{
+ struct ene_device *dev = (struct ene_device *)data;
+
+ /* disable hardware IRQ and firmware flag */
+ ene_hw_write_reg_mask(dev, ENE_FW_SETTINGS, 0,
+ ENE_FW_ENABLE | ENE_FW_IRQ);
+
+ ene_set_idle(dev, 1);
+ dev->in_use = 0;
+}
+
+/*  sends current sample to userspace */
+static void send_sample(struct ene_device *dev)
+{
+ int value = abs(dev->sample) & PULSE_MASK;
+
+ if (dev->sample > 0)
+ value |= PULSE_BIT;
+
+ if (!lirc_buffer_full(dev->lirc_driver->rbuf)) {
+ lirc_buffer_write(dev->lirc_driver->rbuf, (void *) &value);
+ wake_up(&dev->lirc_driver->rbuf->wait_poll);
+ }
+ dev->sample = 0;
+}
+
+/*  this updates current sample */
+static void update_sample(struct ene_device *dev, int sample)
+{
+ if (!dev->sample)
+ dev->sample = sample;
+ else if (same_sign(dev->sample, sample))
+ dev->sample += sample;
+ else {
+ send_sample(dev);
+ dev->sample = sample;
+ }
+}
+
+/* interrupt handler */
+static irqreturn_t ene_hw_irq(int irq, void *data)
+{
+ u16 hw_address;
+ u8 hw_value;
+ int i, hw_sample;
+
+ struct ene_device *dev = (struct ene_device *)data;
+
+ if (!ene_hw_irq_status(dev))
+ return IRQ_NONE;
+
+ hw_address = ENE_SAMPLE_BUFFER + hw_get_buf_pointer(dev);
+
+ for (i = 0 ; i < ENE_SAMPLES_SIZE ; i++) {
+
+ hw_value = ene_hw_read_reg(dev, hw_address + i);
+
+ /* no more data */
+ if (!hw_value)
+ break;
+
+ /* calculate hw sample */
+ hw_sample = (hw_value & ENE_SAMPLE_VALUE_MASK) * sample_period;
+
+ if (hw_value & ENE_SAMPLE_LOW_MASK)
+ hw_sample *= -1;
+
+ /* overflow sample recieved, handle it */
+ if ((hw_value & ENE_SAMPLE_VALUE_MASK) == ENE_SAMPLE_OVERFLOW) {
+
+ if (dev->idle)
+ continue;
+
+ if (abs(dev->sample) <= ENE_MAXGAP)
+ update_sample(dev, hw_sample);
+ else
+ ene_set_idle(dev, 1);
+
+ continue;
+ }
+
+ /* normal first sample recieved*/
+ if (dev->idle) {
+ ene_set_idle(dev, 0);
+
+ /* discard first recieved value, its random since its
+ the time signal was off before first pulse
+ if idle mode is enabled, HW does that for us*/
+
+ if (!enable_idle)
+ continue;
+ }
+
+ update_sample(dev, hw_sample);
+ send_sample(dev);
+ }
+ return IRQ_HANDLED;
+}
+
+static int ene_probe(struct pnp_dev *pnp_dev,
+ const struct pnp_device_id *dev_id)
+{
+ struct resource *res;
+ struct ene_device *dev;
+ struct lirc_driver *lirc_driver;
+ int error = -ENOMEM;
+
+ dev = kzalloc(sizeof(struct ene_device), GFP_KERNEL);
+
+ if (!dev)
+ goto err1;
+
+ dev->pnp_dev = pnp_dev;
+ pnp_set_drvdata(pnp_dev, dev);
+
+ /* validate and read resources */
+ error = -ENODEV;
+ res = pnp_get_resource(pnp_dev, IORESOURCE_IO, 0);
+ if (!pnp_resource_valid(res))
+ goto err2;
+
+ dev->hw_io = res->start;
+
+ if (pnp_resource_len(res) < ENE_MAX_IO)
+ goto err2;
+
+
+ res = pnp_get_resource(pnp_dev, IORESOURCE_IRQ, 0);
+ if (!pnp_resource_valid(res))
+ goto err2;
+
+ dev->irq = res->start;
+
+ /* prepare lirc interface */
+ error = -ENOMEM;
+ lirc_driver = kzalloc(sizeof(struct lirc_driver), GFP_KERNEL);
+
+ if (!lirc_driver)
+ goto err2;
+
+ dev->lirc_driver = lirc_driver;
+
+ strcpy(lirc_driver->name, DRIVER_NAME);
+ lirc_driver->minor = -1;
+ lirc_driver->code_length = sizeof(int) * 8;
+ lirc_driver->features = LIRC_CAN_REC_MODE2;
+ lirc_driver->data = dev;
+ lirc_driver->set_use_inc = ene_hw_init;
+ lirc_driver->set_use_dec = ene_hw_deinit;
+ lirc_driver->dev = &pnp_dev->dev;
+ lirc_driver->owner = THIS_MODULE;
+
+ lirc_driver->rbuf = kzalloc(sizeof(struct lirc_buffer), GFP_KERNEL);
+
+ if (!lirc_driver->rbuf)
+ goto err3;
+
+ if (lirc_buffer_init(lirc_driver->rbuf,
+ sizeof(int), sizeof(int) * 256))
+ goto err4;
+
+ error = -ENODEV;
+ if (lirc_register_driver(lirc_driver))
+ goto err5;
+
+ /* claim the resources */
+ error = -EBUSY;
+ if (!request_region(dev->hw_io, ENE_MAX_IO, DRIVER_NAME))
+ goto err6;
+
+ if (request_irq(dev->irq, ene_hw_irq,
+ IRQF_SHARED, DRIVER_NAME, (void *)dev))
+ goto err7;
+
+
+ /* check firmware version */
+ error = -ENODEV;
+ if (ene_hw_read_reg(dev, ENE_FW_VERSION) != ENE_FW_VER_SUPP) {
+ printk(KERN_WARNING
+ "ENECIR: unsupported firmware found, aborting\n");
+ goto err8;
+ }
+
+ printk(KERN_NOTICE "ENECIR: driver has been succesfully loaded\n");
+ return 0;
+
+err8:
+ free_irq(dev->irq, dev);
+err7:
+ release_region(dev->hw_io, ENE_MAX_IO);
+err6:
+ lirc_unregister_driver(lirc_driver->minor);
+err5:
+ lirc_buffer_free(lirc_driver->rbuf);
+err4:
+ kfree(lirc_driver->rbuf);
+err3:
+ kfree(lirc_driver);
+err2:
+ kfree(dev);
+err1:
+ return error;
+}
+
+
+static void ene_remove(struct pnp_dev *pnp_dev)
+{
+ struct ene_device *dev = pnp_get_drvdata(pnp_dev);
+ ene_hw_deinit(dev);
+ free_irq(dev->irq, dev);
+ release_region(dev->hw_io, ENE_MAX_IO);
+ lirc_unregister_driver(dev->lirc_driver->minor);
+ lirc_buffer_free(dev->lirc_driver->rbuf);
+ kfree(dev->lirc_driver);
+ kfree(dev);
+}
+
+
+#ifdef CONFIG_PM
+static int ene_suspend(struct pnp_dev *pnp_dev, pm_message_t state)
+{
+ struct ene_device *dev = pnp_get_drvdata(pnp_dev);
+ ene_hw_write_reg_mask(dev, ENE_FW_SETTINGS, ENE_FW_WAKE, ENE_FW_WAKE);
+ return 0;
+}
+
+
+static int ene_resume(struct pnp_dev *pnp_dev)
+{
+ struct ene_device *dev = pnp_get_drvdata(pnp_dev);
+ if (dev->in_use)
+ ene_hw_init(dev);
+
+ ene_hw_write_reg_mask(dev, ENE_FW_SETTINGS, 0, ENE_FW_WAKE);
+ return 0;
+}
+
+#endif
+
+
+static const struct pnp_device_id ene_ids[] = {
+ { .id = "ENE0100", },
+ { },
+};
+
+static struct pnp_driver ene_driver = {
+ .name = DRIVER_NAME,
+ .id_table = ene_ids,
+ .flags = PNP_DRIVER_RES_DO_NOT_CHANGE,
+
+ .probe = ene_probe,
+ .remove = __devexit_p(ene_remove),
+
+#ifdef CONFIG_PM
+ .suspend = ene_suspend,
+ .resume = ene_resume,
+#endif
+};
+
+
+static int __init ene_init(void)
+{
+ return pnp_register_driver(&ene_driver);
+}
+
+static void ene_exit(void)
+{
+ pnp_unregister_driver(&ene_driver);
+}
+
+
+module_param(sample_period, int, S_IRUGO | S_IWUSR);
+MODULE_PARM_DESC(sample_period, "Hardware sample period (50 us default)");
+
+
+module_param(enable_idle, bool, S_IRUGO | S_IWUSR);
+MODULE_PARM_DESC(enable_idle,
+"Allow hardware to signal when IR pulse starts, disable if your remote"
+"doesn't send a sync pulse");
+
+
+MODULE_DEVICE_TABLE(pnp, ene_ids);
+MODULE_DESCRIPTION("LIRC driver for KB3924/ENE0100 CIR port");
+MODULE_AUTHOR("Maxim Levitsky");
+MODULE_LICENSE("GPL");
+
+module_init(ene_init);
+module_exit(ene_exit);
diff --git a/drivers/lirc_ene0100/lirc_ene0100.h b/drivers/lirc_ene0100/lirc_ene0100.h
new file mode 100644
index 0000000..78913e3
--- /dev/null
+++ b/drivers/lirc_ene0100/lirc_ene0100.h
@@ -0,0 +1,97 @@
+/*
+ * driver for ENE KB3924 CIR (also known as ENE0100)
+ *
+ * Copyright (C) 2008 Maxim Levitsky <[hidden email]>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+ * USA
+ */
+
+#include "drivers/kcompat.h"
+#include "drivers/lirc.h"
+#include "drivers/lirc_dev/lirc_dev.h"
+
+
+
+/* hardware address */
+#define ENE_STATUS 0 /* hardware status - unused */
+#define ENE_ADDR_HI 1 /* hi byte of register address */
+#define ENE_ADDR_LO 2 /* low byte of register address */
+#define ENE_IO 3 /* read/write window */
+#define ENE_MAX_IO 3
+
+
+/* 8 bytes of samples, divided in 2 halfs*/
+#define ENE_SAMPLE_BUFFER 0xF8F0
+#define ENE_SAMPLE_LOW_MASK (1 << 7)
+#define ENE_SAMPLE_VALUE_MASK 0x7F
+#define ENE_SAMPLE_OVERFLOW 0x7F
+#define ENE_SAMPLES_SIZE 4
+
+
+/* firmware settings */
+#define ENE_FW_SETTINGS 0xF8F8
+#define ENE_FW_ENABLE (1 << 0) /* enable fw processing */
+#define ENE_FW_WAKE (1 << 6) /* enable wake from S3 */
+#define ENE_FW_IRQ (1 << 7) /* enable interrupt */
+
+
+/* buffer pointer, tells which half of ENE_SAMPLE_BUFFER to read */
+#define ENE_FW_BUFFER_POINTER 0xF8F9
+#define ENE_FW_BUFFER_POINTER_HIGH (1 << 0)
+
+
+/* IRQ registers block */
+#define ENE_IRQ 0xFD09 /* IRQ number */
+#define ENE_UNK1 0xFD17   /* unknown setting = 1 */
+#define ENE_IRQ_STATUS 0xFD80   /* irq status */
+#define ENE_IRQ_STATUS_IR (1 << 5) /* IR irq */
+
+
+/* ADC settings */
+#define ENE_ADC_UNK1 0xFEC0 /* unknown setting = 7 */
+#define ENE_ADC_UNK2 0xFEC1   /* unknown setting = 0 */
+#define ENE_ADC_SAMPLE_PERIOD 0xFEC8   /* sample period in us */
+#define ENE_ADC_SAMPLE_OVERFLOW (1 << 7) /* interrupt on overflows if*/
+ /* set */
+
+/* fimware version */
+#define ENE_FW_VERSION 0xFF00
+#define ENE_FW_VER_SUPP 0xC0
+
+
+#define same_sign(a, b) ((((a) > 0) && (b) > 0) || ((a) < 0 && (b) < 0))
+
+#define DRIVER_NAME "enecir"
+
+#define ENE_MAXGAP 150000 /* this is amount of time */
+ /*we wait before turning the */
+ /* sampler, chosen arbitry */
+
+
+struct ene_device {
+ struct pnp_dev *pnp_dev;
+ struct lirc_driver *lirc_driver;
+
+ /* hw settings */
+ unsigned long hw_io;
+ int irq;
+
+ /* device data */
+ int idle;
+ int sample;
+ int in_use;
+};
+
diff --git a/setup.data b/setup.data
index 2b8fa1e..f1e6ec8 100644
--- a/setup.data
+++ b/setup.data
@@ -107,6 +107,7 @@ hw_menu_entry: @hw-irda
  act200l: "Actisys Act200L SIR driver support"
  act220l: "Actisys Act220L(+) SIR driver support"
  wpc8769l: "Winbond 8769L CIR port (e.g. Acer Aspire 6530G)"
+ ene0100: "ENE KB3924/ENE0100 CIR port (e.g. Acer Aspire 5720G)"
 
 hw_menu_entry: @hw-pda
  sa1100: "HP iPAQ"
@@ -260,7 +261,8 @@ param_type: \
  ttusbir \
  tvbox \
  udp \
- wpc8769l
+ wpc8769l \
+ ene0100
  none:
 
 default_param: \
@@ -331,7 +333,8 @@ default_param: \
  ttusbir \
  tvbox \
  udp \
- wpc8769l
+ wpc8769l \
+ ene0100
  none:
 
 default_param: \
@@ -427,7 +430,8 @@ remote: \
  uirt2_raw \
  udp \
  usb_uirt_raw \
- wpc8769l
+ wpc8769l \
+ ene0100
  any:
 
 remote: \
--
1.6.0.4




------------------------------------------------------------------------------
Let Crystal Reports handle the reporting - Free Crystal Reports 2008 30-Day
trial. Simplify your report design, integration and deployment - and focus on
what you do best, core application coding. Discover what's new with
Crystal Reports now.  http://p.sf.net/sfu/bobj-july
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: ENE0100: patch against lirc CVS

Christoph Bartelmus
Hi!

Maxim Levitsky "[hidden email]" wrote:
[...]
> This patch against lirc CVS that adds ENE0100 support.
[...]

> diff --git a/configure.ac b/configure.ac
> index f2c36e9..f2534de 100644
> -+- a/configure.ac
> +++ b/configure.ac
> @@ -173,7 +173,8 @@ if test x${no_kernel} != xyes; then
>   (lirc_dev lirc_serial) \
>   (lirc_dev lirc_sir) \
>   (lirc_dev lirc_streamzap) \
> - (lirc_dev lirc_wpc8769l)"
> + (lirc_dev lirc_wpc8769l) \
> + (lirc_dev lirc_ene0100)"

This stuff should be sorted alphabetically.

[...]
> -+- a/setup.data
> +++ b/setup.data
> @@ -107,6 +107,7 @@ hw_menu_entry: @hw-irda
>   act200l: "Actisys Act200L SIR driver support"
>   act220l: "Actisys Act220L(+) SIR driver support"
>   wpc8769l: "Winbond 8769L CIR port (e.g. Acer Aspire 6530G)"
> + ene0100: "ENE KB3924/ENE0100 CIR port (e.g. Acer Aspire 5720G)"

This too.

Christoph

------------------------------------------------------------------------------
Let Crystal Reports handle the reporting - Free Crystal Reports 2008 30-Day
trial. Simplify your report design, integration and deployment - and focus on
what you do best, core application coding. Discover what's new with
Crystal Reports now.  http://p.sf.net/sfu/bobj-july
Loading...