summaryrefslogtreecommitdiff
path: root/multitech/recipes/vizzini
diff options
context:
space:
mode:
authorJesse Gilles <jgilles@multitech.com>2013-02-19 10:10:43 -0600
committerJesse Gilles <jgilles@multitech.com>2013-02-19 10:10:43 -0600
commit9d84b9847fa970a06605d1a156223c1184774a80 (patch)
tree3fbbf5cce7ed2c0c0c8abf2873b2af04e882b2f5 /multitech/recipes/vizzini
parent1871acdd0583885429e50f63cef8b2ea7f5a3dea (diff)
add Exar vizzini driver version 0.76 with RS485 support patch
Diffstat (limited to 'multitech/recipes/vizzini')
-rw-r--r--multitech/recipes/vizzini/files/vizzini.init22
-rw-r--r--multitech/recipes/vizzini/vizzini-0.76/vizzini-0.76-rs485.patch97
-rw-r--r--multitech/recipes/vizzini/vizzini-0.76/xr21v141x-lnx-3.0-pak.tar.gzbin0 -> 14691 bytes
-rw-r--r--multitech/recipes/vizzini/vizzini.inc52
-rw-r--r--multitech/recipes/vizzini/vizzini_0.76.bb10
5 files changed, 181 insertions, 0 deletions
diff --git a/multitech/recipes/vizzini/files/vizzini.init b/multitech/recipes/vizzini/files/vizzini.init
new file mode 100644
index 0000000..b49473f
--- /dev/null
+++ b/multitech/recipes/vizzini/files/vizzini.init
@@ -0,0 +1,22 @@
+#!/bin/sh
+
+exit
+
+case $1 in
+ start)
+ echo "Loading vizzini module"
+ modprobe vizzini
+ ;;
+
+ stop)
+ echo "Unloading vizzini module"
+ modprobe -r vizzini
+ ;;
+
+ *)
+ echo "Usage: $0 {start|stop}"
+ exit 2
+ ;;
+esac
+
+
diff --git a/multitech/recipes/vizzini/vizzini-0.76/vizzini-0.76-rs485.patch b/multitech/recipes/vizzini/vizzini-0.76/vizzini-0.76-rs485.patch
new file mode 100644
index 0000000..e299b81
--- /dev/null
+++ b/multitech/recipes/vizzini/vizzini-0.76/vizzini-0.76-rs485.patch
@@ -0,0 +1,97 @@
+--- a/vizzini.c 2013-01-22 15:37:32.345592809 -0600
++++ b/vizzini.c 2013-01-29 14:27:04.550051817 -0600
+@@ -186,6 +186,7 @@
+ #ifdef VIZZINI_IWA
+ int iwa;
+ #endif
++ struct serial_rs485 rs485;
+ };
+
+
+@@ -428,7 +429,41 @@
+ return -EINVAL;
+ }
+
++static int vizzini_set_rs485(struct usb_serial_port *port, struct serial_rs485 *rs485conf)
++{
++ struct vizzini_port_private *portdata = usb_get_serial_port_data(port);
++ int block = portdata->block;
++ int result = 0;
++ unsigned int gpio_mode, flow = 0;
++
++ portdata->rs485 = *rs485conf;
++
++ if (portdata->rs485.flags & SER_RS485_ENABLED) {
++ dev_info(&port->dev, "Enabling RS485");
++
++ /* enable auto tranceiver enable on transmit, TX active high */
++ gpio_mode = UART_GPIO_MODE_SEL_XCVR_EN_ACT | UART_GPIO_MODE_XCVR_EN_POL;
++
++ result = vizzini_set_reg(port, block, UART_GPIO_MODE, gpio_mode);
+
++ if (result < 0)
++ dev_err(&port->dev, "Error setting auto trans enable");
++
++ /* half duplex rs485 */
++ flow = UART_FLOW_HALF_DUPLEX;
++ result = vizzini_set_reg(port, block, UART_FLOW, flow);
++
++ if (result < 0)
++ dev_err(&port->dev, "Error setting half duplex");
++ }
++ else {
++ dev_info(&port->dev, "Disabling RS485 - flow control off");
++ vizzini_set_reg(port, block, UART_GPIO_MODE, UART_GPIO_MODE_SEL_GPIO);
++ vizzini_set_reg(port, block, UART_FLOW, UART_FLOW_MODE_NONE);
++ }
++
++ return 0;
++}
+
+ static void vizzini_set_termios(struct tty_struct *tty_param,
+ struct usb_serial_port *port,
+@@ -604,6 +639,7 @@
+ char *data;
+ int result;
+ struct serial_struct ss;
++ struct serial_rs485 rs485conf;
+
+ if (debug) dev_dbg(&port->dev, "%s %08x\n", __func__, cmd);
+
+@@ -636,6 +672,36 @@
+ /* mutex_unlock(&config_mutex); */
+ break;
+
++ case TIOCGRS485:
++ if (!arg) {
++ dev_err(&port->dev, "%s - TIOCGRS485 arg invalid\n", __func__);
++ return -EFAULT;
++ }
++ if (copy_to_user((struct serial_rs485 *) arg,
++ &(portdata->rs485),
++ sizeof(struct serial_rs485))) {
++ dev_err(&port->dev, "%s - TIOCGRS485 copy_to_user fail\n", __func__);
++ return -EFAULT;
++ }
++ break;
++
++ case TIOCSRS485:
++ dev_dbg(&port->dev, "%s TIOCSRS485\n", __func__);
++ if (!arg) {
++ return -EFAULT;
++ dev_err(&port->dev, "%s - TIOCSRS485 arg invalid\n", __func__);
++ }
++ if (copy_from_user(&rs485conf, (struct serial_rs485 *) arg,
++ sizeof(rs485conf))) {
++ dev_err(&port->dev, "%s - TIOCSRS485 copy_from_user fail\n", __func__);
++ return -EFAULT;
++ }
++
++ vizzini_disable(port);
++ vizzini_set_rs485(port, &rs485conf);
++ vizzini_enable(port);
++ break;
++
+ case VZIOC_GET_REG:
+ if (get_user(block, (int __user *)arg))
+ return -EFAULT;
diff --git a/multitech/recipes/vizzini/vizzini-0.76/xr21v141x-lnx-3.0-pak.tar.gz b/multitech/recipes/vizzini/vizzini-0.76/xr21v141x-lnx-3.0-pak.tar.gz
new file mode 100644
index 0000000..3d10bac
--- /dev/null
+++ b/multitech/recipes/vizzini/vizzini-0.76/xr21v141x-lnx-3.0-pak.tar.gz
Binary files differ
diff --git a/multitech/recipes/vizzini/vizzini.inc b/multitech/recipes/vizzini/vizzini.inc
new file mode 100644
index 0000000..6ceaeb9
--- /dev/null
+++ b/multitech/recipes/vizzini/vizzini.inc
@@ -0,0 +1,52 @@
+DESCRIPTION = "USB Driver for Exar USB UARTs"
+HOMEPAGE = "http://www.exar.com/connectivity/uart-and-bridging-solutions/usb-uarts/xr21v1414"
+SECTION = "base"
+PRIORITY = "optional"
+LICENSE = "GPL"
+DEPENDS = "virtual/kernel"
+RDEPENDS = "kernel (${KERNEL_VERSION})"
+INC_PR = "r1"
+
+SRC_URI = " \
+ file://vizzini.init \
+"
+
+inherit module-base
+inherit update-rc.d
+
+EXTRA_OEMAKE = " -C ${STAGING_KERNEL_DIR} \
+ M=${S} \
+ modules \
+ "
+
+do_configure () {
+ echo "Nothing to configure for vizzini"
+}
+
+do_compile () {
+ unset CFLAGS CPPFLAGS CXXFLAGS LDFLAGS
+ oe_runmake
+}
+
+PACKAGES = "${PN}"
+
+FILES_${PN} = "${base_libdir}/modules/${KERNEL_VERSION}/extra/vizzini.ko"
+FILES_${PN} += "${sysconfdir}/init.d/vizzini"
+
+INITSCRIPT_NAME = "vizzini"
+INITSCRIPT_PARAMS = "start 90 S ."
+
+PARALLEL_MAKE = ""
+
+fakeroot do_install () {
+ install -m 0755 -d ${D}${base_libdir}/modules/${KERNEL_VERSION}/extra
+ # use cp instead of install so the driver doesn't get stripped
+ cp ${S}/vizzini.ko ${D}${base_libdir}/modules/${KERNEL_VERSION}/extra
+ cp ${S}/vizzini.h ${STAGING_KERNEL_DIR}/include/linux/
+ cp ${S}/vizzini.h ${STAGING_INCDIR}/linux/
+ cp ${S}/vzioctl.h ${STAGING_KERNEL_DIR}/include/linux/
+ cp ${S}/vzioctl.h ${STAGING_INCDIR}/linux/
+
+ install -d ${D}${sysconfdir}/init.d
+ install -m 0755 ${WORKDIR}/vizzini.init ${D}${sysconfdir}/init.d/vizzini
+}
diff --git a/multitech/recipes/vizzini/vizzini_0.76.bb b/multitech/recipes/vizzini/vizzini_0.76.bb
new file mode 100644
index 0000000..ff1f421
--- /dev/null
+++ b/multitech/recipes/vizzini/vizzini_0.76.bb
@@ -0,0 +1,10 @@
+require vizzini.inc
+
+LOCAL_PR = "${INC_PR}.0"
+MACHINE_KERNEL_PR_append = "${LOCAL_PR}"
+
+SRC_URI += "file://xr21v141x-lnx-3.0-pak.tar.gz \
+ file://vizzini-0.76-rs485.patch \
+ "
+S = "${WORKDIR}/xr21v141x-lnx-3.0-pak"
+