From patchwork Wed Jul 15 09:43:57 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Wen-chien Jesse Sung X-Patchwork-Id: 1329342 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (no SPF record) smtp.mailfrom=lists.ubuntu.com (client-ip=91.189.94.19; helo=huckleberry.canonical.com; envelope-from=kernel-team-bounces@lists.ubuntu.com; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=canonical.com Received: from huckleberry.canonical.com (huckleberry.canonical.com [91.189.94.19]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 4B6CC13H1Pz9sTn; Wed, 15 Jul 2020 19:44:13 +1000 (AEST) Received: from localhost ([127.0.0.1] helo=huckleberry.canonical.com) by huckleberry.canonical.com with esmtp (Exim 4.86_2) (envelope-from ) id 1jvdxQ-00024K-I8; Wed, 15 Jul 2020 09:44:08 +0000 Received: from youngberry.canonical.com ([91.189.89.112]) by huckleberry.canonical.com with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.86_2) (envelope-from ) id 1jvdxP-00023t-Hj for kernel-team@lists.ubuntu.com; Wed, 15 Jul 2020 09:44:07 +0000 Received: from 114-34-116-233.hinet-ip.hinet.net ([114.34.116.233] helo=cola.voip.idv.tw) by youngberry.canonical.com with esmtpsa (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.86_2) (envelope-from ) id 1jvdxO-00040x-Ps; Wed, 15 Jul 2020 09:44:07 +0000 From: Wen-chien Jesse Sung To: kernel-team@lists.ubuntu.com Subject: [Bionic][PATCH 1/4] UBUNTU: SAUCE: Revert "xr-usb-serial: fix kbuild" Date: Wed, 15 Jul 2020 17:43:57 +0800 Message-Id: <20200715094400.1214204-2-jesse.sung@canonical.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20200715094400.1214204-1-jesse.sung@canonical.com> References: <20200715094400.1214204-1-jesse.sung@canonical.com> MIME-Version: 1.0 X-BeenThere: kernel-team@lists.ubuntu.com X-Mailman-Version: 2.1.20 Precedence: list List-Id: Kernel team discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: kernel-team-bounces@lists.ubuntu.com Sender: "kernel-team" This reverts commit e8bf446f67cba UBUNTU: SAUCE: xr-usb-serial: fix kbuild Commit e8bf446f67cba is tightly coupled with the implementation of Dell Edge Gateway BIOS and causes issues on other platforms. BugLink: https://launchpad.net/bugs/1885271 Signed-off-by: Wen-chien Jesse Sung --- ubuntu/xr-usb-serial/Kconfig | 11 ----------- ubuntu/xr-usb-serial/Makefile | 15 ++++++++++++++- ubuntu/xr-usb-serial/xr_usb_serial_common.h | 3 --- 3 files changed, 14 insertions(+), 15 deletions(-) delete mode 100644 ubuntu/xr-usb-serial/Kconfig diff --git a/ubuntu/xr-usb-serial/Kconfig b/ubuntu/xr-usb-serial/Kconfig deleted file mode 100644 index d563a28fde6bb..0000000000000 --- a/ubuntu/xr-usb-serial/Kconfig +++ /dev/null @@ -1,11 +0,0 @@ -config USB_SERIAL_EXAR - bool "Exar USB UART (serial port) driver" - depends on X86 || X86_64 - depends on TTY - depends on GPIOLIB - default y - ---help--- - Say Y here if you want to use a Exar USB to Serial device. - - To compile this driver as a module, choose M here: the - module will be called xr_usb_serial diff --git a/ubuntu/xr-usb-serial/Makefile b/ubuntu/xr-usb-serial/Makefile index 75eebc0725f77..533988cede120 100644 --- a/ubuntu/xr-usb-serial/Makefile +++ b/ubuntu/xr-usb-serial/Makefile @@ -1,3 +1,16 @@ obj-m := xr_usb_serial_common.o -obj-$(CONFIG_USB_SERIAL_EXAR) += xr_usb_serial_common.o +#KERNELDIR ?= /lib/modules/$(shell uname -r)/build +KERNELDIR ?=$(shell pwd)/../parts/kernel/build +PWD := $(shell pwd) + +EXTRA_CFLAGS := -DDEBUG=0 + +all: + $(MAKE) -C $(KERNELDIR) M=$(PWD) + +modules_install: + $(MAKE) -C $(KERNELDIR) M=$(PWD) modules_install + +clean: + rm -rf *.o *~ core .depend .*.cmd *.ko *.mod.c .tmp_versions vtty diff --git a/ubuntu/xr-usb-serial/xr_usb_serial_common.h b/ubuntu/xr-usb-serial/xr_usb_serial_common.h index 7e5ccf1da4e28..d462bb5751a4e 100644 --- a/ubuntu/xr-usb-serial/xr_usb_serial_common.h +++ b/ubuntu/xr-usb-serial/xr_usb_serial_common.h @@ -15,9 +15,6 @@ */ #include -#include -#include -#include /* * CMSPAR, some architectures can't have space and mark parity. */ From patchwork Wed Jul 15 09:43:58 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Wen-chien Jesse Sung X-Patchwork-Id: 1329340 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (no SPF record) smtp.mailfrom=lists.ubuntu.com (client-ip=91.189.94.19; helo=huckleberry.canonical.com; envelope-from=kernel-team-bounces@lists.ubuntu.com; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=canonical.com Received: from huckleberry.canonical.com (huckleberry.canonical.com [91.189.94.19]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 4B6CC20Sh5z9sTr; Wed, 15 Jul 2020 19:44:13 +1000 (AEST) Received: from localhost ([127.0.0.1] helo=huckleberry.canonical.com) by huckleberry.canonical.com with esmtp (Exim 4.86_2) (envelope-from ) id 1jvdxS-00025R-Ox; Wed, 15 Jul 2020 09:44:10 +0000 Received: from youngberry.canonical.com ([91.189.89.112]) by huckleberry.canonical.com with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.86_2) (envelope-from ) id 1jvdxR-00024Z-9q for kernel-team@lists.ubuntu.com; Wed, 15 Jul 2020 09:44:09 +0000 Received: from 114-34-116-233.hinet-ip.hinet.net ([114.34.116.233] helo=cola.voip.idv.tw) by youngberry.canonical.com with esmtpsa (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.86_2) (envelope-from ) id 1jvdxQ-00040x-GS; Wed, 15 Jul 2020 09:44:09 +0000 From: Wen-chien Jesse Sung To: kernel-team@lists.ubuntu.com Subject: [Bionic][PATCH 2/4] UBUNTU: SAUCE: Revert "xr-usb-serial: Changes to support updates in struct gpio_chip" Date: Wed, 15 Jul 2020 17:43:58 +0800 Message-Id: <20200715094400.1214204-3-jesse.sung@canonical.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20200715094400.1214204-1-jesse.sung@canonical.com> References: <20200715094400.1214204-1-jesse.sung@canonical.com> MIME-Version: 1.0 X-BeenThere: kernel-team@lists.ubuntu.com X-Mailman-Version: 2.1.20 Precedence: list List-Id: Kernel team discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: kernel-team-bounces@lists.ubuntu.com Sender: "kernel-team" This reverts commit a0b8e0a56c467 UBUNTU: SAUCE: xr-usb-serial: Changes to support updates in struct gpio_chip Commit a0b8e0a56c467 is tightly coupled with the implementation of Dell Edge Gateway BIOS and causes issues on other platforms. BugLink: https://launchpad.net/bugs/1885271 Signed-off-by: Wen-chien Jesse Sung --- ubuntu/xr-usb-serial/xr_usb_serial_common.c | 11 +++++------ ubuntu/xr-usb-serial/xr_usb_serial_common.h | 1 - 2 files changed, 5 insertions(+), 7 deletions(-) diff --git a/ubuntu/xr-usb-serial/xr_usb_serial_common.c b/ubuntu/xr-usb-serial/xr_usb_serial_common.c index 2604177298c1d..09d21e63606e0 100644 --- a/ubuntu/xr-usb-serial/xr_usb_serial_common.c +++ b/ubuntu/xr-usb-serial/xr_usb_serial_common.c @@ -1215,24 +1215,23 @@ static int xr_usb_serial_write_buffers_alloc(struct xr_usb_serial *xr_usb_serial } #ifdef CONFIG_GPIOLIB - static int xr_usb_gpio_get(struct gpio_chip *chip, unsigned offset) { struct xr_usb_serial *xr_usb_serial = container_of(chip, struct xr_usb_serial, xr_usb_gpio); - dev_dbg(chip->parent, "xr_usb_gpio_get offset = %d channel = %d\n",offset,xr_usb_serial->channel); + dev_dbg(chip->dev, "xr_usb_gpio_get offset = %d channel = %d\n",offset,xr_usb_serial->channel); return 0; } static void xr_usb_gpio_set(struct gpio_chip *chip, unsigned offset, int val) { struct xr_usb_serial *xr_usb_serial = container_of(chip, struct xr_usb_serial, xr_usb_gpio); - dev_dbg(chip->parent, "xr_usb_gpio_set offset =%d val=%d channel = %d\n",offset,val,xr_usb_serial->channel); + dev_dbg(chip->dev, "xr_usb_gpio_set offset =%d val=%d channel = %d\n",offset,val,xr_usb_serial->channel); } static int xr_usb_gpio_direction_input(struct gpio_chip *chip,unsigned offset) { struct xr_usb_serial *xr_usb_serial = container_of(chip, struct xr_usb_serial, xr_usb_gpio); - dev_dbg(chip->parent, "xr_usb_gpio_direction_input offset =%d channel = %d\n",offset,xr_usb_serial->channel); + dev_dbg(chip->dev, "xr_usb_gpio_direction_input offset =%d channel = %d\n",offset,xr_usb_serial->channel); return 0; } @@ -1240,7 +1239,7 @@ static int xr_usb_gpio_direction_output(struct gpio_chip *chip, unsigned offset, int val) { struct xr_usb_serial *xr_usb_serial = container_of(chip, struct xr_usb_serial, xr_usb_gpio); - dev_dbg(chip->parent, "xr_usb_gpio_direction_output offset =%d val=%d channel:%d\n",offset,val,xr_usb_serial->channel); + dev_dbg(chip->dev, "xr_usb_gpio_direction_output offset =%d val=%d channel:%d\n",offset,val,xr_usb_serial->channel); return 0; } #endif @@ -1677,7 +1676,7 @@ static int xr_usb_serial_probe(struct usb_interface *intf, #ifdef CONFIG_GPIOLIB /* Setup GPIO cotroller */ xr_usb_serial->xr_usb_gpio.owner = THIS_MODULE; - xr_usb_serial->xr_usb_gpio.parent = &control_interface->dev; + xr_usb_serial->xr_usb_gpio.dev = &control_interface->dev; xr_usb_serial->xr_usb_gpio.label = dev_name(&control_interface->dev); xr_usb_serial->xr_usb_gpio.direction_input = xr_usb_gpio_direction_input; xr_usb_serial->xr_usb_gpio.get = xr_usb_gpio_get; diff --git a/ubuntu/xr-usb-serial/xr_usb_serial_common.h b/ubuntu/xr-usb-serial/xr_usb_serial_common.h index d462bb5751a4e..97e9024257942 100644 --- a/ubuntu/xr-usb-serial/xr_usb_serial_common.h +++ b/ubuntu/xr-usb-serial/xr_usb_serial_common.h @@ -14,7 +14,6 @@ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ -#include /* * CMSPAR, some architectures can't have space and mark parity. */ From patchwork Wed Jul 15 09:43:59 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Wen-chien Jesse Sung X-Patchwork-Id: 1329343 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (no SPF record) smtp.mailfrom=lists.ubuntu.com (client-ip=91.189.94.19; helo=huckleberry.canonical.com; envelope-from=kernel-team-bounces@lists.ubuntu.com; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=canonical.com Received: from huckleberry.canonical.com (huckleberry.canonical.com [91.189.94.19]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 4B6CC35wwNz9sTg; Wed, 15 Jul 2020 19:44:15 +1000 (AEST) Received: from localhost ([127.0.0.1] helo=huckleberry.canonical.com) by huckleberry.canonical.com with esmtp (Exim 4.86_2) (envelope-from ) id 1jvdxU-00027h-BQ; Wed, 15 Jul 2020 09:44:12 +0000 Received: from youngberry.canonical.com ([91.189.89.112]) by huckleberry.canonical.com with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.86_2) (envelope-from ) id 1jvdxT-00025W-6i for kernel-team@lists.ubuntu.com; Wed, 15 Jul 2020 09:44:11 +0000 Received: from 114-34-116-233.hinet-ip.hinet.net ([114.34.116.233] helo=cola.voip.idv.tw) by youngberry.canonical.com with esmtpsa (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.86_2) (envelope-from ) id 1jvdxS-00040x-87; Wed, 15 Jul 2020 09:44:10 +0000 From: Wen-chien Jesse Sung To: kernel-team@lists.ubuntu.com Subject: [Bionic][PATCH 3/4] UBUNTU: SAUCE: Revert "xr-usb-serial: re-initialise baudrate after resume from S3/S4" Date: Wed, 15 Jul 2020 17:43:59 +0800 Message-Id: <20200715094400.1214204-4-jesse.sung@canonical.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20200715094400.1214204-1-jesse.sung@canonical.com> References: <20200715094400.1214204-1-jesse.sung@canonical.com> MIME-Version: 1.0 X-BeenThere: kernel-team@lists.ubuntu.com X-Mailman-Version: 2.1.20 Precedence: list List-Id: Kernel team discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: kernel-team-bounces@lists.ubuntu.com Sender: "kernel-team" This reverts commit ea3d6ff7dc83c UBUNTU: SAUCE: xr-usb-serial: re-initialise baudrate after resume from S3/S4 Commit ea3d6ff7dc83c is tightly coupled with the implementation of Dell Edge Gateway BIOS and causes issues on other platforms. BugLink: https://launchpad.net/bugs/1885271 Signed-off-by: Wen-chien Jesse Sung --- ubuntu/xr-usb-serial/Makefile | 3 +-- ubuntu/xr-usb-serial/xr_usb_serial_common.c | 14 ++------------ 2 files changed, 3 insertions(+), 14 deletions(-) diff --git a/ubuntu/xr-usb-serial/Makefile b/ubuntu/xr-usb-serial/Makefile index 533988cede120..1a323a62b3484 100644 --- a/ubuntu/xr-usb-serial/Makefile +++ b/ubuntu/xr-usb-serial/Makefile @@ -1,7 +1,6 @@ obj-m := xr_usb_serial_common.o -#KERNELDIR ?= /lib/modules/$(shell uname -r)/build -KERNELDIR ?=$(shell pwd)/../parts/kernel/build +KERNELDIR ?= /lib/modules/$(shell uname -r)/build PWD := $(shell pwd) EXTRA_CFLAGS := -DDEBUG=0 diff --git a/ubuntu/xr-usb-serial/xr_usb_serial_common.c b/ubuntu/xr-usb-serial/xr_usb_serial_common.c index 09d21e63606e0..5d049855fb1a1 100644 --- a/ubuntu/xr-usb-serial/xr_usb_serial_common.c +++ b/ubuntu/xr-usb-serial/xr_usb_serial_common.c @@ -1146,7 +1146,7 @@ static void xr_usb_serial_tty_set_termios(struct tty_struct *tty, } - //if (memcmp(&xr_usb_serial->line, &newline, sizeof newline)) + if (memcmp(&xr_usb_serial->line, &newline, sizeof newline)) { memcpy(&xr_usb_serial->line, &newline, sizeof newline); /* @@ -1819,21 +1819,11 @@ static int xr_usb_serial_resume(struct usb_interface *intf) { struct xr_usb_serial *xr_usb_serial = usb_get_intfdata(intf); struct xr_usb_serial_wb *wb; -#if 0 - struct tty_struct *tty = xr_usb_serial->port.tty; -#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 7, 0) - struct ktermios *termios = tty->termios; -#else - struct ktermios *termios = &tty->termios; -#endif -#endif int rv = 0; int cnt; xr_usb_serial_pre_setup(xr_usb_serial); - xr_usb_serial_disable(xr_usb_serial); - xr_usb_serial_set_line(xr_usb_serial, &xr_usb_serial->line); - xr_usb_serial_enable(xr_usb_serial); + spin_lock_irq(&xr_usb_serial->read_lock); xr_usb_serial->susp_count -= 1; cnt = xr_usb_serial->susp_count; From patchwork Wed Jul 15 09:44:00 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Wen-chien Jesse Sung X-Patchwork-Id: 1329344 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (no SPF record) smtp.mailfrom=lists.ubuntu.com (client-ip=91.189.94.19; helo=huckleberry.canonical.com; envelope-from=kernel-team-bounces@lists.ubuntu.com; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=canonical.com Received: from huckleberry.canonical.com (huckleberry.canonical.com [91.189.94.19]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 4B6CCD27NPz9sTZ; Wed, 15 Jul 2020 19:44:24 +1000 (AEST) Received: from localhost ([127.0.0.1] helo=huckleberry.canonical.com) by huckleberry.canonical.com with esmtp (Exim 4.86_2) (envelope-from ) id 1jvdxc-0002D1-W4; Wed, 15 Jul 2020 09:44:21 +0000 Received: from youngberry.canonical.com ([91.189.89.112]) by huckleberry.canonical.com with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.86_2) (envelope-from ) id 1jvdxV-00028h-9l for kernel-team@lists.ubuntu.com; Wed, 15 Jul 2020 09:44:13 +0000 Received: from 114-34-116-233.hinet-ip.hinet.net ([114.34.116.233] helo=cola.voip.idv.tw) by youngberry.canonical.com with esmtpsa (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.86_2) (envelope-from ) id 1jvdxT-00040x-Vl; Wed, 15 Jul 2020 09:44:13 +0000 From: Wen-chien Jesse Sung To: kernel-team@lists.ubuntu.com Subject: [Bionic][PATCH 4/4] UBUNTU: SAUCE: Revert "xr-usb-serial: Update driver for Exar USB serial ports" Date: Wed, 15 Jul 2020 17:44:00 +0800 Message-Id: <20200715094400.1214204-5-jesse.sung@canonical.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20200715094400.1214204-1-jesse.sung@canonical.com> References: <20200715094400.1214204-1-jesse.sung@canonical.com> MIME-Version: 1.0 X-BeenThere: kernel-team@lists.ubuntu.com X-Mailman-Version: 2.1.20 Precedence: list List-Id: Kernel team discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: kernel-team-bounces@lists.ubuntu.com Sender: "kernel-team" This reverts commit 69ffb0b15f177 UBUNTU: SAUCE: xr-usb-serial: Update driver for Exar USB serial ports Commit 69ffb0b15f177 is tightly coupled with the implementation of Dell Edge Gateway BIOS and causes issues on other platforms. BugLink: https://launchpad.net/bugs/1885271 Signed-off-by: Wen-chien Jesse Sung --- ubuntu/xr-usb-serial/README.txt | 3 - ubuntu/xr-usb-serial/xr_get_smbios.c | 350 ----------------- ubuntu/xr-usb-serial/xr_get_smbios.h | 237 ------------ ubuntu/xr-usb-serial/xr_usb_serial_common.c | 392 +++++--------------- ubuntu/xr-usb-serial/xr_usb_serial_common.h | 16 +- ubuntu/xr-usb-serial/xr_usb_serial_hal.c | 244 ++---------- ubuntu/xr-usb-serial/xr_usb_serial_ioctl.h | 7 - 7 files changed, 130 insertions(+), 1119 deletions(-) delete mode 100644 ubuntu/xr-usb-serial/xr_get_smbios.c delete mode 100644 ubuntu/xr-usb-serial/xr_get_smbios.h diff --git a/ubuntu/xr-usb-serial/README.txt b/ubuntu/xr-usb-serial/README.txt index 242c8f368039c..eb88f40f20809 100644 --- a/ubuntu/xr-usb-serial/README.txt +++ b/ubuntu/xr-usb-serial/README.txt @@ -1,8 +1,5 @@ Exar USB Serial Driver ====================== -Version 1B, 11/6/2015 -Fixed Bug: The conditional logic to support kernel 3.9 was incorrect(line 396 in xr_usb_serial_common.c). - Version 1A, 1/9/2015 This driver will work with any USB UART function in these Exar devices: diff --git a/ubuntu/xr-usb-serial/xr_get_smbios.c b/ubuntu/xr-usb-serial/xr_get_smbios.c deleted file mode 100644 index 05a995f1a9579..0000000000000 --- a/ubuntu/xr-usb-serial/xr_get_smbios.c +++ /dev/null @@ -1,350 +0,0 @@ -/* - * 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 - */ - -static void *smbios_base = 0; -/** SM-BIOS entry point structure */ -struct smbios_entry_point_struct *smbios_entry_point = 0; -/** DMI-BIOS entry point structure */ -struct dmibios_entry_point_struct *dmibios_entry_point = 0; -/** SM-BIOS, resp. DMI-BIOS structures base address; starting point */ -void *smbios_structures_base = 0; -/** enumeration of SM-BIOS, resp. DMI-BIOS types that do have subtypes */ -__u8 smbios_types_with_subtypes[] = { TYPES_WITH_SUBTYPES }; -/** contains the SMBIOS Version, e.g. V2.31 */ -char smbios_version_string[32]; -/** \fn unsigned char smbios_check_entry_point (void * addr) - * \brief checks the entry point structure for correct checksum - * \param addr pointer to the entry point structure - * \return the checksum of the entry point structure, should be '0' - * - * This function checks the entry point structure for correct checksum. - * The checksum is calculated with adding every byte of the structure - * to the checksum byte. The entry point structure is considered correct - * if the checksum byte is 0. - * - * \author Markus Lyra - * \author Thomas Bretthauer - * \date October 2000 - */ - -unsigned char smbios_check_entry_point (void *addr) -{ - unsigned char *i; - unsigned char checksum = 0; - unsigned char length =((struct smbios_entry_point_struct *) addr)->entry_point_length; - /* calculate checksum for entry point structure (should be 0) */ - for (i = (unsigned char *) addr; i < (unsigned char *) addr + length; i++) - checksum += *i; - return checksum; -} - -struct smbios_entry_point_struct * smbios_find_entry_point (void *base) -{ - struct smbios_entry_point_struct *entry_point = 0; /** SM-BIOS entry point */ - unsigned int *temp; /** temp. pointer */ - - - /* search for the magic dword - '_SM_� as DWORD formatted - on paragraph boundaries */ - for (temp = base; - !entry_point && temp < (unsigned int *) base + BIOS_MAP_LENGTH; - temp += 4) - { - /* found the identifier ? */ - if (*temp == SMBIOS_MAGIC_DWORD) - { - /* check if entry point valid (build checksum) */ - if (!(smbios_check_entry_point (temp))) - { - entry_point = (struct smbios_entry_point_struct *) temp; - - /* fix display of Bios version string */ - /* SMBios version is known as 2.1, 2.2, 2.3 and 2.3.1, never as 2.01 (JB) */ - SM_BIOS_DEBUG("SM-BIOS V%d.%d entry point found at 0x%x\n", - entry_point->major_version, entry_point->minor_version, (unsigned int) temp); - - SM_BIOS_DEBUG("V%d.%d\n", entry_point->major_version, entry_point->minor_version); - } - } - } - return entry_point; -} -struct dmibios_entry_point_struct *dmibios_find_entry_point (void *base) -{ - struct dmibios_entry_point_struct *entry_point = 0; /** DMI-BIOS entry point */ - unsigned char *temp = 0; /** temp. pointer */ - unsigned char biossignature[] = /** '_DMI20_NT_' */ - { 0x5f, 0x44, 0x4d, 0x49, 0x32, 0x30, 0x5f, 0x4e, 0x54, 0x5f }; - - /* search for the DMI-BIOS signature on character boundary (hm?) */ - for (temp = base; - !entry_point && - temp < (__u8 *) base + BIOS_MAP_LENGTH - sizeof (biossignature) - 32; - temp++) - { - unsigned long *tempdword = (unsigned long *) temp; - - /* found the identifier '_DMI' ? (beginning of signature) */ - if (*tempdword == DMIBIOS_MAGIC_DWORD) - { - entry_point = (struct dmibios_entry_point_struct *) temp; - - SM_BIOS_DEBUG ("DMI-BIOS revision %d entry point at 0x%x\n", - entry_point->revision, (unsigned int) temp); - - sprintf(smbios_version_string, "V%d\n", entry_point->revision); - - if (memcmp (temp, biossignature, sizeof (biossignature)) == 0) - SM_BIOS_DEBUG ("DMI BIOS successfully identified\n"); - } - } - return entry_point; -} -void dump_smbios_hex(unsigned char *p,int len) -{ - int i; - SM_BIOS_DEBUG("dump_smbios_hex length:%d\n",len); - for(i=0;ilength; - - /* search for the end of string list */ - while (ptr[0] != 0x00 || ptr[1] != 0x00) - ptr++; - ptr += 2; /* terminating 0x0000 should be included */ - - return (int) ptr - (int) struct_ptr; -} - -unsigned int smbios_get_readable_name(char *name, struct smbios_struct *struct_ptr) -{ - switch(struct_ptr->type) - { - case 0: return sprintf (name, "%s", RD_BIOS); - case 1: return sprintf (name, "%s", RD_SYSTEM); - case 2: return sprintf (name, "%s", RD_BASEBOARD); - case 3: return sprintf (name, "%s", RD_ENCLOSURE); - case 4: return sprintf (name, "%s", RD_PROCESSOR); - case 5: return sprintf (name, "%s", RD_MEMCTRL); - case 6: return sprintf (name, "%s", RD_MEMMOD); - case 7: return sprintf (name, "%s", RD_CACHE); - case 8: return sprintf (name, "%s", RD_PORT); - case 9: return sprintf (name, "%s", RD_SLOT); - case 10: return sprintf (name, "%s", RD_ONBOARD); - case 11: return sprintf (name, "%s", RD_OEMSTRINGS); - case 12: return sprintf (name, "%s", RD_SYSTEMCONFIG); - case 13: return sprintf (name, "%s", RD_BIOSLANG); - case 14: return sprintf (name, "%s", RD_GROUPASSOC); - case 15: return sprintf (name, "%s", RD_EVENTLOG); - case 16: return sprintf (name, "%s", RD_MEMARRAY); - case 17: return sprintf (name, "%s", RD_MEMDEV); - case 18: return sprintf (name, "%s", RD_32MEMERR); - case 19: return sprintf (name, "%s", RD_MEMMAPPEDADR); - case 20: return sprintf (name, "%s", RD_MEMMAPPEDDEV); - case 21: return sprintf (name, "%s", RD_POINTINGDEV); - case 22: return sprintf (name, "%s", RD_BATTERY); - case 23: return sprintf (name, "%s", RD_RESET); - case 24: return sprintf (name, "%s", RD_SECURITY); - case 25: return sprintf (name, "%s", RD_PWRCTRL); - case 26: return sprintf (name, "%s", RD_VOLTAGE); - case 27: return sprintf (name, "%s", RD_COOLINGDEV); - case 28: return sprintf (name, "%s", RD_TEMP); - case 29: return sprintf (name, "%s", RD_CURRENT); - case 30: return sprintf (name, "%s", RD_RMTACCESS); - case 31: return sprintf (name, "%s", RD_BIS); - case 32: return sprintf (name, "%s", RD_BOOT_INFO); - case 33: return sprintf (name, "%s", RD_64MEMERR); - case 34: return sprintf (name, "%s", RD_MANAGDEV); - case 35: return sprintf (name, "%s", RD_MANAGDEVCOMP); - case 36: return sprintf (name, "%s", RD_MANAGDEVTHRESH); - case 37: return sprintf (name, "%s", RD_MEMCHANNEL); - case 38: return sprintf (name, "%s", RD_IPMI); - case 39: return sprintf (name, "%s", RD_PWRSUP); - case 126: return sprintf (name, "%s", RD_INACTIVE); - case 127: return sprintf (name, "%s", RD_EOT); - default: return sprintf (name, "%d", struct_ptr->type); - } -} -unsigned int smbios_get_readable_name_ext(char *name, struct smbios_struct *struct_ptr) -{ - return sprintf (name, "%d-%d", struct_ptr->type, struct_ptr->subtype); -} - -int smbios_make_dir_entries (void) -{ - int i; - unsigned int raw_name_length = 0; - char raw_name[12]; /* e.g. 0.0 for structure type 0 , first instance */ - unsigned int readable_name_length = 0; - char readable_name[64]; /* e.g. Bios.0 for structure type 0 , first instance */ - struct smbios_struct *struct_ptr = smbios_structures_base; - /* - * for every SMBIOS structure do ... - */ - for (i = 0; i < smbios_entry_point->no_of_structures; i++) - { - memset(raw_name,0,12); - memset(readable_name,0,64); - /* - * generate an unique name for the file: "type[-subtype].count" - */ - if (smbios_type_has_subtype (((struct smbios_struct *) struct_ptr)->type)) - { - /* name will contain the raw file name, it equals the structure type (e.g. 1 for Type 1). - * readable_name contains the interpreted file name (e.g. System for Type 1) - */ - raw_name_length = sprintf (raw_name, "%d-%d", struct_ptr->type, struct_ptr->subtype); - readable_name_length = smbios_get_readable_name_ext(readable_name, struct_ptr); - //printk(KERN_INFO "[%s] smbios_type_has_subtype[%d] length:%d\n",raw_name,struct_ptr->type,struct_ptr->length); - } - else - { - raw_name_length = sprintf (raw_name, "%d", struct_ptr->type); - readable_name_length = smbios_get_readable_name(readable_name, struct_ptr); - //printk(KERN_INFO "[%s] smbios_type_has type:%d length:%d\n",readable_name,struct_ptr->type,struct_ptr->length); - } - - /* - * go to the next structure - */ - struct_ptr =(struct smbios_struct *) ((unsigned char *) struct_ptr + smbios_get_struct_length(struct_ptr)); - } - - return 0; -} - -int smbios_check_if_have_exar_config(unsigned char *config0,unsigned char *config1) -{ - int i; - int result = -1; - unsigned char *p; - smbios_base = ioremap (BIOS_START_ADDRESS, BIOS_MAP_LENGTH); - if(!smbios_base) - { - SM_BIOS_DEBUG ("ioremap() for entry point failed\n"); - result = -ENXIO; - return result; - } - //printk(KERN_INFO "ioremap bios base at 0x%p\n", smbios_base); - if (!(smbios_entry_point = smbios_find_entry_point (smbios_base))) - { - SM_BIOS_DEBUG ("SM-BIOS entry point not found\n"); - iounmap (smbios_base); - result = -ENXIO; - return result; - - } - /* - * for SM-BIOS: - * check if Pointer to DMI structures exist. - * intermediate_string (_DMI_) is not '\0' terminated, - * so strncmp() with sizeof(DMI_STRING) - 1 is needed. - */ - if (smbios_entry_point) - { - if (strncmp((char *) &(smbios_entry_point->intermediate_string), - DMI_STRING, sizeof (DMI_STRING) - 1)) - { - SM_BIOS_DEBUG ("Pointer to DMI structures not found!\n"); - - } - } - - /* - * map the SM-BIOS structures physical address range. - * the 'real' smbios_structures_base contains the starting - * address, where the instances of dmi structures are located. - */ - if (smbios_entry_point) - { - if (!(smbios_structures_base = - ioremap (smbios_entry_point->struct_table_address, - (unsigned long) smbios_entry_point->struct_table_length))) - { - SM_BIOS_DEBUG("ioremap() for structures table failed\n"); - iounmap (smbios_base); - result = -ENXIO; - return result; - } - } - SM_BIOS_DEBUG(KERN_INFO "smbios_structures_base to 0x%p length %d no_of_structures:%d\n", - smbios_structures_base, - smbios_entry_point->struct_table_length, - smbios_entry_point->no_of_structures); - - //dump_smbios_hex((unsigned char *)smbios_structures_base,smbios_entry_point->struct_table_length); - p = (unsigned char *)smbios_structures_base; - for(i=0;istruct_table_length;i++) - { - if((p[i] == 0xc0)&&(p[i+1]==0x06)) - { - SM_BIOS_DEBUG("Found 0xc0 at offset:%d 0x%02x 0x%02x 0x%02x 0x%02x 0x%02x 0x%02x \n\t",i,p[i],p[i+1],p[i+2],p[i+3],p[i+4],p[i+5]); - *config0 = p[i+4]; - *config1 = p[i+5]; - result = 0; - break; - } - } - //smbios_make_dir_entries(); - iounmap (smbios_structures_base); - iounmap (smbios_base); - return result; - -} -/* -void dmi_dump_backup(void) -{ - const char *board_vendor, *board_name,*board_serial; - const struct dmi_device *dmi; - struct dmi_dev_onboard *donboard; - board_vendor = dmi_get_system_info(DMI_BOARD_VENDOR); - board_name = dmi_get_system_info(DMI_BOARD_NAME); - board_serial = dmi_get_system_info(DMI_BOARD_SERIAL); - printk(KERN_INFO "DMI_BOARD_VENDOR:%s\n",board_vendor); - printk(KERN_INFO "DMI_BOARD_NAME:%s\n",board_name); - printk(KERN_INFO "DMI_BOARD_SERIAL:%s\n",board_serial); - for(i=0;i<256;i++) - { - dmi = NULL; - //printk(KERN_INFO "dmi_find_device<%d>\n",i); - while ((dmi = dmi_find_device(i,NULL, dmi)) != NULL) - { - //donboard = dmi->device_data; - printk(KERN_INFO "<%d>Found name:%s type:%d \n",i,dmi->name,dmi->type); - } - } - -} -*/ - diff --git a/ubuntu/xr-usb-serial/xr_get_smbios.h b/ubuntu/xr-usb-serial/xr_get_smbios.h deleted file mode 100644 index f56b33084dab3..0000000000000 --- a/ubuntu/xr-usb-serial/xr_get_smbios.h +++ /dev/null @@ -1,237 +0,0 @@ -/* Copyright (C) 2001-2001 Fujitsu Siemens Computers - Joachim Braeuer - This file is part of smbios - - smbios 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. - - smbios 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 smbios; see the file COPYING. If not, write to the - Free Software Foundation, Inc., 59 Temple Place - Suite 330, - Boston, MA 02111-1307, USA. -*/ - -/* $Id: bios.h,v 1.2 2002/09/03 10:33:12 bretthauert Exp $ - * - * $Log: bios.h,v $ - * Revision 1.2 2002/09/03 10:33:12 bretthauert - * fixed a bug with 2.4 kernels (changed kmalloc parameter from - * GFP_BUFFER to GFP_KERNEL - * - * Revision 1.1 2001/09/15 14:52:43 bretthauert - * initial release - * - */ - -/** \file bios.h - * declarations and prototypes of DMI-BIOS and SM-BIOS stuff - * - * \author Markus Lyra - * \author Thomas Bretthauer - * \author Joachim Braeuer - * \version 0.11 - * \date January 2001 - */ - -#ifndef __SM_BIOS_H__ -#define __SM_BIOS_H__ - -#include -//#define _EN_DEBUG_ 1 -#ifdef _EN_DEBUG_ -# define SM_BIOS_DEBUG(fmt, args...) printk( KERN_DEBUG "smbios: " fmt, ## args) -#else -# define SM_BIOS_DEBUG(fmt, args...) /* not debugging: nothing */ -#endif -/* - * Magic numbers - */ - -/** start address of BIOS segment to scanned for SM-BIOS and DMI-BIOS */ -#define BIOS_START_ADDRESS 0xF0000 -/** length of the scanned BIOS area for SM-BIOS and DMI-BIOS */ -#define BIOS_MAP_LENGTH 0x10000 -/** magic 4 bytes to identify SM-BIOS entry point, paragraph boundary */ -#define SMBIOS_MAGIC_DWORD 0x5F4D535F /* anchor string "_SM_" */ -/** magic 4 bytes to identify DMI-BIOS entry point, byte boundary */ -#define DMIBIOS_MAGIC_DWORD 0x494d445f /* anchor string "_DMI" */ -/** identifier for SM-BIOS structures within SM-BIOS entry point */ -#define DMI_STRING "_DMI_" -/** list of types which are known to have subtyes; expandable! */ -#define TYPES_WITH_SUBTYPES 185, 187, 208, 209, 210, 211, 212, 254 -/** maximum block size for proc read function */ -#define PROC_BLOCK_SIZE (3*1024) - - -/** mode raw/cooked */ -#define FILE_MODE_RAW 0 -#define FILE_MODE_COOKED 1 - -/* - * Structures - */ - -/** SM-BIOS entry point structure - * the SMBIOS Entry Point structure described below can be located by - * application software by searching for the anchor string on paragraph - * (16 byte) boundaries within the physical memory address range 000F0000h to - * 000FFFFFh. This entry point encapsulates an intermediate anchor string - * that is used by some existing DMI browsers. - * - * @note While the SMBIOS Major and Minor Versions (offsets 06h and 07h) - * currently duplicate the information present in the SMBIOS BCD Revision - * (offset 1Dh), they provide a path for future growth in this specification. - * The BCD Revision, for example, provides only a single digit for each of - * the major and minor version numbers. - */ -struct smbios_entry_point_struct -{ - /** "_SM_", specified as four ASCII characters (5F 53 4D 5F) */ - __u32 anchor_string; - /** checksum of the Entry Point Structure (EPS). This value, when added to - * all other bytes in the EPS, will result in the value 00h (using 8 bit - * addition calculations). Values in the EPS are summed starting at offset - * 00h, for Entry Point Length bytes.*/ - __u8 entry_point_checksum; - /** Length of the Entry Point Structure, starting with the Anchor String - * field, in bytes, currently 1Fh. */ - __u8 entry_point_length; - /** identifies the major version of this specification implemented in - * the table structures, e.g. the value will be 0Ah for revision 10.22 - * and 02h for revision 2.1 */ - __u8 major_version; - /** identifies the minor version of this specification implemented in - * the table structures, e.g. the value will be 16h for revision 10.22 - * and 01h for revision 2.1 */ - __u8 minor_version; - /** size of the largest SMBIOS structure, in bytes, and encompasses the - * structure's formatted area and text strings. This is the value returned - * as StructureSize from the Plug-n-Play 'Get SMBIOS Information' function */ - __u16 max_struct_size; - /** identifies the EPS revision implemented in this structure and identifies - * the formatting of offsets 0Bh to 0Fh, one of: - * 00h Entry Point based on SMBIOS 2.1 definition; formatted area is - * reserved and set to all 00h. - * 01h-FFh reserved for assignment via this specification */ - __u8 revision; - /** the value present in the Entry Point Revision field defines the - * interpretation to be placed upon these5 bytes. */ - __u8 formated_area[5]; - /** "_DMI_", specified as five ASCII characters (5F 44 4D 49 5F) */ - __u8 intermediate_string[5]; - /** checksum of the Intermediate Entry Point Structure (IEPS). This value, - * when added to all other bytes in the IEPS, will result in the value 00h - * (using 8 bit addition calculations). Values in the IEPS are summed - * starting at offset 10h, for 0Fh bytes */ - __u8 intermediate_checksum; - /** the 32 bit physical starting address of the read-only SMBIOS Structure - * Table, that can start at any 32 bit address. This area contains all of the - * SMBIOS structures fully packed together. These structures can then be - * parsed to produce exactly the same format as that returned from a 'Get - * SMBIOS Structure' function call. */ - __u16 struct_table_length; - __u32 struct_table_address; - __u16 no_of_structures; - __u8 bcd_revision; -}__attribute__ ((packed)); - -/** SM-BIOS and DMI-BIOS structure header */ -struct smbios_struct -{ - __u8 type ; - __u8 length ; - __u16 handle ; - __u8 subtype; - /* ... other fields are structure dependend ... */ -} __attribute__ ((packed)); - -/** DMI-BIOS structure header */ -struct dmibios_table_entry_struct -{ - __u16 size; - __u16 handle; - __u32 procedure; -}__attribute__ ((packed)); - -/** DMI-BIOS entry point structure */ -struct dmibios_entry_point_struct -{ - __u8 signature[10]; - __u8 revision; - struct dmibios_table_entry_struct entry[1]; -}__attribute__ ((packed)); - -/** readable names for smbios structures, they serve as filenames in the /proc file system */ -#define RD_BIOS "bios" -#define RD_SYSTEM "system" -#define RD_BASEBOARD "baseboard" -#define RD_ENCLOSURE "enclosure" -#define RD_PROCESSOR "processor" -#define RD_MEMCTRL "memory_controller" -#define RD_MEMMOD "memory_module" -#define RD_CACHE "cache" -#define RD_PORT "port_connector" -#define RD_SLOT "system_slot" -#define RD_ONBOARD "onboard_device" -#define RD_OEMSTRINGS "oem_strings" -#define RD_SYSTEMCONFIG "system_configuration" -#define RD_BIOSLANG "bios_language" -#define RD_GROUPASSOC "group_association" -#define RD_EVENTLOG "system_event_log" -#define RD_MEMARRAY "physical_memory_array" -#define RD_MEMDEV "physical_memory_device" -#define RD_32MEMERR "32bit_memory_error_information" -#define RD_MEMMAPPEDADR "memory_array_mapped_address" -#define RD_MEMMAPPEDDEV "memory_device_mapped_address" -#define RD_POINTINGDEV "pointing_device" -#define RD_BATTERY "portable_battery" -#define RD_RESET "system_reset" -#define RD_SECURITY "hardware_security" -#define RD_PWRCTRL "system_power_controls" -#define RD_VOLTAGE "voltage_probe" -#define RD_COOLINGDEV "cooling_device" -#define RD_TEMP "temperature_probe" -#define RD_CURRENT "current_probe" -#define RD_RMTACCESS "out_of_band_remote_access" -#define RD_BIS "boot_integrity_services" -#define RD_BOOT_INFO "system_boot_information" -#define RD_64MEMERR "64bit_memory_error_information" -#define RD_MANAGDEV "management_device" -#define RD_MANAGDEVCOMP "management_device_component" -#define RD_MANAGDEVTHRESH "management_device_thresholds" -#define RD_MEMCHANNEL "memory_channel" -#define RD_IPMI "ipmi_information" -#define RD_PWRSUP "system_power_supply" -#define RD_INACTIVE "inactive" -#define RD_EOT "end_of_table" - - -//extern smbios_entry_point_struct * smbios_entry_point; /* start of SMBIOS within the F-Segment */ -//extern dmibios_entry_point_struct * dmibios_entry_point; /* start of DMIBIOS within the F-Segment */ -extern void * smbios_structures_base; /* base of SMBIOS raw structures */ -extern unsigned char smbios_types_with_subtypes[]; -extern char smbios_version_string[32]; /* e.g. V2.31 */ -/* - * Functions - */ - -/* for the description see the implementation file */ -struct smbios_entry_point_struct * smbios_find_entry_point(void * base); -struct dmibios_entry_point_struct * dmibios_find_entry_point(void * base); -unsigned char smbios_check_entry_point(void * addr); -int smbios_type_has_subtype(unsigned char type); -int smbios_get_struct_length(struct smbios_struct * struct_ptr); -int dmibios_get_struct_length(struct smbios_struct * struct_ptr); -unsigned int smbios_get_readable_name_ext(char *readable_name, struct smbios_struct *struct_ptr); -unsigned int smbios_get_readable_name(char *readable_name, struct smbios_struct *struct_ptr); -int smbios_check_if_have_exar_config(unsigned char *config0,unsigned char *config1); - - -#endif /* __BIOS_H__ */ diff --git a/ubuntu/xr-usb-serial/xr_usb_serial_common.c b/ubuntu/xr-usb-serial/xr_usb_serial_common.c index 5d049855fb1a1..d16f072613b12 100644 --- a/ubuntu/xr-usb-serial/xr_usb_serial_common.c +++ b/ubuntu/xr-usb-serial/xr_usb_serial_common.c @@ -28,12 +28,12 @@ * from www.exar.com that will work with kernel versions 2.6.18 to 3.4.x. * * ChangeLog: - * Version 1B - Initial released version. + * Version 1A - Initial released version. */ -#undef DEBUG +//#undef DEBUG #undef VERBOSE_DEBUG -#include + #include #include #include @@ -47,20 +47,15 @@ #include #include #include -#include #include #include #include -#include -#include /* ioremap() */ #include "linux/version.h" -#include "xr_get_smbios.h" #include "xr_usb_serial_common.h" #include "xr_usb_serial_ioctl.h" - #define DRIVER_AUTHOR "" #define DRIVER_DESC "Exar USB UART (serial port) driver" @@ -70,10 +65,6 @@ static struct xr_usb_serial *xr_usb_serial_table[XR_USB_SERIAL_TTY_MINORS]; static DEFINE_MUTEX(xr_usb_serial_table_lock); - - - - /* * xr_usb_serial_table accessors */ @@ -146,7 +137,6 @@ static int xr_usb_serial_ctrl_msg(struct xr_usb_serial *xr_usb_serial, int reque return retval < 0 ? retval : 0; } -#include "xr_get_smbios.c" #include "xr_usb_serial_hal.c" @@ -259,6 +249,46 @@ static ssize_t show_country_rel_date } static DEVICE_ATTR(iCountryCodeRelDate, S_IRUGO, show_country_rel_date, NULL); + +static ssize_t set_rs485_422_en(struct device *dev, + struct device_attribute *attr, const char *buf, + size_t count) +{ + struct usb_interface *intf = to_usb_interface(dev); + struct xr_usb_serial *xr_usb_serial = usb_get_intfdata(intf); + int error, value = 0; + + error = kstrtoint(buf, 0, &value); + if (error) + return error; + + if (value == 0) { + xr_usb_serial->rs485_422_en = false; + } else if (value == 1) { + // RS485,RS422 HD/FD mode + xr_usb_serial->rs485_422_en = true; + } + + return count; +} + +static ssize_t show_rs485_422_en(struct device *dev, + struct device_attribute *attr, char *buf) +{ + struct usb_interface *intf = to_usb_interface(dev); + struct xr_usb_serial *xr_usb_serial = usb_get_intfdata(intf); + + if (xr_usb_serial->rs485_422_en == false) { + return sprintf(buf, "0"); + } else if (xr_usb_serial->rs485_422_en == true) { + // RS485,RS422 HD/FD mode + return sprintf(buf, "1"); + } + return 0; +} + +static DEVICE_ATTR(bRS485_422_en, 0644, show_rs485_422_en, set_rs485_422_en); + /* * Interrupt handlers for various XR_USB_SERIAL device responses */ @@ -268,10 +298,7 @@ static void xr_usb_serial_ctrl_irq(struct urb *urb) { struct xr_usb_serial *xr_usb_serial = urb->context; struct usb_cdc_notification *dr = urb->transfer_buffer; -#if LINUX_VERSION_CODE > KERNEL_VERSION(3, 9, 0) -#else - struct tty_struct *tty; -#endif + struct tty_struct *tty; unsigned char *data; int newctrl; int retval; @@ -282,11 +309,10 @@ static void xr_usb_serial_ctrl_irq(struct urb *urb) switch (status) { case 0: p = (unsigned char *)(urb->transfer_buffer); - /* for(i=0;iactual_length;i++) { dev_dbg(&xr_usb_serial->control->dev,"0x%02x\n",p[i]); - }*/ + } /* success */ break; case -ECONNRESET: @@ -336,7 +362,7 @@ static void xr_usb_serial_ctrl_irq(struct urb *urb) } #endif xr_usb_serial->ctrlin = newctrl; - #if 0 + dev_dbg(&xr_usb_serial->control->dev, "%s - input control lines: dcd%c dsr%c break%c " "ring%c framing%c parity%c overrun%c\n", @@ -348,7 +374,6 @@ static void xr_usb_serial_ctrl_irq(struct urb *urb) xr_usb_serial->ctrlin & XR_USB_SERIAL_CTRL_FRAMING ? '+' : '-', xr_usb_serial->ctrlin & XR_USB_SERIAL_CTRL_PARITY ? '+' : '-', xr_usb_serial->ctrlin & XR_USB_SERIAL_CTRL_OVERRUN ? '+' : '-'); - #endif break; default: @@ -374,7 +399,7 @@ static int xr_usb_serial_submit_read_urb(struct xr_usb_serial *xr_usb_serial, in if (!test_and_clear_bit(index, &xr_usb_serial->read_urbs_free)) return 0; - //dev_vdbg(&xr_usb_serial->data->dev, "%s - urb %d\n", __func__, index); + dev_vdbg(&xr_usb_serial->data->dev, "%s - urb %d\n", __func__, index); res = usb_submit_urb(xr_usb_serial->read_urbs[index], mem_flags); if (res) { @@ -405,75 +430,10 @@ static int xr_usb_serial_submit_read_urbs(struct xr_usb_serial *xr_usb_serial, g } static void xr_usb_serial_process_read_urb(struct xr_usb_serial *xr_usb_serial, struct urb *urb) { -#if LINUX_VERSION_CODE > KERNEL_VERSION(3, 9, 0) -#else - struct tty_struct *tty; -#endif - int preciseflags = xr_usb_serial->preciseflags; - int have_extra_byte; - int length; - + struct tty_struct *tty; if (!urb->actual_length) return; - - if (preciseflags) - { - char *dp = urb->transfer_buffer; - int i, ch, ch_flags; - - length = urb->actual_length; - length = length + (xr_usb_serial->have_extra_byte ? 1 : 0); - have_extra_byte = (preciseflags && (length & 1)); - length = (preciseflags) ? (length / 2) : length; - for (i = 0; i < length; ++i) - { - char tty_flag; - if (i == 0) - { - if (xr_usb_serial->have_extra_byte) - { - ch = xr_usb_serial->extra_byte; - } - else - { - ch = *dp++; - } - } - else - { - ch = *dp++; - } - ch_flags = *dp++; - if (ch_flags & RAMCTL_BUFFER_PARITY) - tty_flag = TTY_PARITY; - else if (ch_flags & RAMCTL_BUFFER_BREAK) - tty_flag = TTY_BREAK; - else if (ch_flags & RAMCTL_BUFFER_FRAME) - tty_flag = TTY_FRAME; - else if (ch_flags & RAMCTL_BUFFER_OVERRUN) - tty_flag = TTY_OVERRUN; - else - tty_flag = TTY_NORMAL; - - -#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 9, 0) - tty_insert_flip_char(&xr_usb_serial->port, ch, tty_flag); - tty_flip_buffer_push(&xr_usb_serial->port); -#else - tty = tty_port_tty_get(&xr_usb_serial->port); - if (!tty) - return; - tty_insert_flip_char(&xr_usb_serial->port, ch, tty_flag); - tty_flip_buffer_push(tty); - - tty_kref_put(tty); -#endif - - } - } - else - { -#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 9, 0) +#if LINUX_VERSION_CODE > KERNEL_VERSION(3, 9, 0) tty_insert_flip_string(&xr_usb_serial->port, urb->transfer_buffer, urb->actual_length); tty_flip_buffer_push(&xr_usb_serial->port); @@ -486,7 +446,6 @@ static void xr_usb_serial_process_read_urb(struct xr_usb_serial *xr_usb_serial, tty_kref_put(tty); #endif - } } static void xr_usb_serial_read_bulk_callback(struct urb *urb) @@ -494,10 +453,9 @@ static void xr_usb_serial_read_bulk_callback(struct urb *urb) struct xr_usb_serial_rb *rb = urb->context; struct xr_usb_serial *xr_usb_serial = rb->instance; unsigned long flags; - /* + dev_vdbg(&xr_usb_serial->data->dev, "%s - urb %d, len %d\n", __func__, - rb->index, urb->actual_length);*/ - + rb->index, urb->actual_length); set_bit(rb->index, &xr_usb_serial->read_urbs_free); if (!xr_usb_serial->dev) { @@ -509,7 +467,7 @@ static void xr_usb_serial_read_bulk_callback(struct urb *urb) if (urb->status) { dev_dbg(&xr_usb_serial->data->dev, "%s - non-zero urb status: %d\n", __func__, urb->status); - //return; + return; } xr_usb_serial_process_read_urb(xr_usb_serial, urb); @@ -547,13 +505,9 @@ static void xr_usb_serial_write_bulk(struct urb *urb) static void xr_usb_serial_softint(struct work_struct *work) { struct xr_usb_serial *xr_usb_serial = container_of(work, struct xr_usb_serial, work); -#if LINUX_VERSION_CODE > KERNEL_VERSION(3, 9, 0) -#else - struct tty_struct *tty; -#endif - + struct tty_struct *tty; - //dev_vdbg(&xr_usb_serial->data->dev, "%s\n", __func__); + dev_vdbg(&xr_usb_serial->data->dev, "%s\n", __func__); #if LINUX_VERSION_CODE > KERNEL_VERSION(3, 9, 0) tty_port_tty_wakeup(&xr_usb_serial->port); #else @@ -574,7 +528,7 @@ static int xr_usb_serial_tty_install(struct tty_driver *driver, struct tty_struc struct xr_usb_serial *xr_usb_serial; int retval; - //dev_dbg(tty->dev, "%s\n", __func__); + dev_dbg(tty->dev, "%s\n", __func__); xr_usb_serial = xr_usb_serial_get_by_index(tty->index); if (!xr_usb_serial) @@ -596,10 +550,9 @@ static int xr_usb_serial_tty_install(struct tty_driver *driver, struct tty_struc static int xr_usb_serial_tty_open(struct tty_struct *tty, struct file *filp) { struct xr_usb_serial *xr_usb_serial = tty->driver_data; - int result; - result = xr_usb_serial_fifo_reset(xr_usb_serial); - //dev_dbg(tty->dev, "%s\n", __func__); - + + dev_dbg(tty->dev, "%s\n", __func__); + return tty_port_open(&xr_usb_serial->port, tty, filp); } @@ -608,7 +561,7 @@ static int xr_usb_serial_port_activate(struct tty_port *port, struct tty_struct struct xr_usb_serial *xr_usb_serial = container_of(port, struct xr_usb_serial, port); int retval = -ENODEV; - //dev_dbg(&xr_usb_serial->control->dev, "%s\n", __func__); + dev_dbg(&xr_usb_serial->control->dev, "%s\n", __func__); mutex_lock(&xr_usb_serial->mutex); if (xr_usb_serial->disconnected) @@ -671,18 +624,14 @@ static void xr_usb_serial_port_destruct(struct tty_port *port) { struct xr_usb_serial *xr_usb_serial = container_of(port, struct xr_usb_serial, port); - //dev_dbg(&xr_usb_serial->control->dev, "%s\n", __func__); + dev_dbg(&xr_usb_serial->control->dev, "%s\n", __func__); #if LINUX_VERSION_CODE < KERNEL_VERSION(3, 7, 0) tty_unregister_device(xr_usb_serial_tty_driver, xr_usb_serial->minor); #endif -#ifdef CONFIG_GPIOLIB - gpiochip_remove(&xr_usb_serial->xr_usb_gpio); -#endif xr_usb_serial_release_minor(xr_usb_serial); usb_put_intf(xr_usb_serial->control); kfree(xr_usb_serial->country_codes); kfree(xr_usb_serial); - } static void xr_usb_serial_port_shutdown(struct tty_port *port) @@ -690,7 +639,7 @@ static void xr_usb_serial_port_shutdown(struct tty_port *port) struct xr_usb_serial *xr_usb_serial = container_of(port, struct xr_usb_serial, port); int i; - //dev_dbg(&xr_usb_serial->control->dev, "%s\n", __func__); + dev_dbg(&xr_usb_serial->control->dev, "%s\n", __func__); mutex_lock(&xr_usb_serial->mutex); if (!xr_usb_serial->disconnected) { @@ -710,21 +659,21 @@ static void xr_usb_serial_port_shutdown(struct tty_port *port) static void xr_usb_serial_tty_cleanup(struct tty_struct *tty) { struct xr_usb_serial *xr_usb_serial = tty->driver_data; - //dev_dbg(&xr_usb_serial->control->dev, "%s\n", __func__); + dev_dbg(&xr_usb_serial->control->dev, "%s\n", __func__); tty_port_put(&xr_usb_serial->port); } static void xr_usb_serial_tty_hangup(struct tty_struct *tty) { struct xr_usb_serial *xr_usb_serial = tty->driver_data; - //dev_dbg(&xr_usb_serial->control->dev, "%s\n", __func__); + dev_dbg(&xr_usb_serial->control->dev, "%s\n", __func__); tty_port_hangup(&xr_usb_serial->port); } static void xr_usb_serial_tty_close(struct tty_struct *tty, struct file *filp) { struct xr_usb_serial *xr_usb_serial = tty->driver_data; - //dev_dbg(&xr_usb_serial->control->dev, "%s\n", __func__); + dev_dbg(&xr_usb_serial->control->dev, "%s\n", __func__); tty_port_close(&xr_usb_serial->port, tty, filp); } @@ -740,7 +689,7 @@ static int xr_usb_serial_tty_write(struct tty_struct *tty, if (!count) return 0; - //dev_vdbg(&xr_usb_serial->data->dev, "%s - count %d\n", __func__, count); + dev_vdbg(&xr_usb_serial->data->dev, "%s - count %d\n", __func__, count); spin_lock_irqsave(&xr_usb_serial->write_lock, flags); wbn = xr_usb_serial_wb_alloc(xr_usb_serial); @@ -757,7 +706,7 @@ static int xr_usb_serial_tty_write(struct tty_struct *tty, } count = (count > xr_usb_serial->writesize) ? xr_usb_serial->writesize : count; - //dev_vdbg(&xr_usb_serial->data->dev, "%s - write %d\n", __func__, count); + dev_vdbg(&xr_usb_serial->data->dev, "%s - write %d\n", __func__, count); memcpy(wb->buf, buf, count); wb->len = count; @@ -836,7 +785,7 @@ static int xr_usb_serial_tty_break_ctl(struct tty_struct *tty, int state) retval = xr_usb_serial_send_break(xr_usb_serial, state ? 0xffff : 0); if (retval < 0) - dev_err(&xr_usb_serial->control->dev, "%s - send break failed\n", + dev_dbg(&xr_usb_serial->control->dev, "%s - send break failed\n", __func__); return retval; } @@ -844,7 +793,7 @@ static int xr_usb_serial_tty_break_ctl(struct tty_struct *tty, int state) static int xr_usb_serial_tty_tiocmget(struct tty_struct *tty) { struct xr_usb_serial *xr_usb_serial = tty->driver_data; - //dev_dbg(&xr_usb_serial->control->dev, "xr_usb_serial_tty_tiocmget\n"); + dev_dbg(&xr_usb_serial->control->dev, "xr_usb_serial_tty_tiocmget\n"); return xr_usb_serial_tiocmget(xr_usb_serial); } @@ -853,7 +802,7 @@ static int xr_usb_serial_tty_tiocmset(struct tty_struct *tty, unsigned int set, unsigned int clear) { struct xr_usb_serial *xr_usb_serial = tty->driver_data; - //dev_dbg(&xr_usb_serial->control->dev, "xr_usb_serial_tty_tiocmset set=0x%x clear=0x%x\n",set,clear); + dev_dbg(&xr_usb_serial->control->dev, "xr_usb_serial_tty_tiocmset set=0x%x clear=0x%x\n",set,clear); return xr_usb_serial_tiocmset(xr_usb_serial,set,clear); } @@ -916,9 +865,8 @@ static int xr_usb_serial_tty_ioctl(struct tty_struct *tty, { struct xr_usb_serial *xr_usb_serial = tty->driver_data; int rv = -ENOIOCTLCMD; - unsigned int channel, reg, val,preciseflags; - int baud_rate = 0; - struct usb_cdc_line_coding newline; + unsigned int channel, reg, val; + short *data; switch (cmd) { case TIOCGSERIAL: /* gets serial port data */ @@ -947,8 +895,7 @@ static int xr_usb_serial_tty_ioctl(struct tty_struct *tty, { rv = xr_usb_serial_get_reg_ext(xr_usb_serial,channel,reg, data); } - if (rv < 0) - { + if (rv != 1) { dev_err(&xr_usb_serial->control->dev, "Cannot get register (%d)\n", rv); kfree(data); return -EFAULT; @@ -994,93 +941,6 @@ static int xr_usb_serial_tty_ioctl(struct tty_struct *tty, return -EFAULT; rv = 0; break; - case XR_USB_SERIAL_SET_GPIO_MODE_REG: - xr_usb_serial_disable(xr_usb_serial); - if (get_user(channel, (int __user *)arg)) - return -EFAULT; - if (get_user(val, (int __user *)(arg + sizeof(int)))) - return -EFAULT; - if (channel == -1) - { - //block = portdata->block; - rv = xr_usb_serial_set_reg(xr_usb_serial,xr_usb_serial->reg_map.uart_gpio_mode_addr, val); - } - else - { - rv = xr_usb_serial_set_reg_ext(xr_usb_serial,channel,xr_usb_serial->reg_map.uart_gpio_mode_addr, val); - } - - dev_dbg(&xr_usb_serial->control->dev, "XR_USB_SERIAL_SET_GPIO_MODE_REG 0x%x val:0x%x \n", xr_usb_serial->reg_map.uart_gpio_mode_addr,val); - xr_usb_serial_enable(xr_usb_serial); - if (rv < 0) - return -EFAULT; - break; - case XR_USB_SERIAL_GET_GPIO_MODE_REG: - xr_usb_serial_disable(xr_usb_serial); - if (get_user(channel, (int __user *)arg)) - return -EFAULT; - - data = kmalloc(2, GFP_KERNEL); - if (data == NULL) { - dev_err(&xr_usb_serial->control->dev, "%s - Cannot allocate USB buffer.\n", __func__); - return -ENOMEM; - } - - if (channel == -1) - { - rv = xr_usb_serial_get_reg(xr_usb_serial,xr_usb_serial->reg_map.uart_gpio_mode_addr, data); - } - else - { - rv = xr_usb_serial_get_reg_ext(xr_usb_serial,channel,xr_usb_serial->reg_map.uart_gpio_mode_addr,data); - } - - xr_usb_serial_enable(xr_usb_serial); - - dev_dbg(&xr_usb_serial->control->dev, "XR_USB_SERIAL_GET_GPIO_MODE_REG 0x%x val:0x%x \n", xr_usb_serial->reg_map.uart_gpio_mode_addr,*data); - - if (rv < 0 ) { - dev_err(&xr_usb_serial->control->dev, "Cannot get register (%d) channel=%d \n", rv,channel); - kfree(data); - return -EFAULT; - } - - if (put_user(data[0], (int __user *)(arg + sizeof(int)))) { - dev_err(&xr_usb_serial->control->dev, "Cannot put user result\n"); - kfree(data); - return -EFAULT; - } - - kfree(data); - break; - case XRIOC_SET_ANY_BAUD_RATE: - - if (get_user(baud_rate, (int __user *)arg)) { - dev_dbg(&xr_usb_serial->control->dev, "get_user errot \n"); - return -EFAULT; - } - xr_usb_serial->line.dwDTERate = baud_rate; - memcpy(&newline,&(xr_usb_serial->line),sizeof(struct usb_cdc_line_coding)); - xr_usb_serial_disable(xr_usb_serial); - rv = xr_usb_serial_set_line(xr_usb_serial,&newline); - xr_usb_serial_enable(xr_usb_serial); - dev_dbg(&xr_usb_serial->control->dev, "XRIOC_SET_ANY_BAUD_RATE set baud_rate:%d ret=%d\n", baud_rate,rv); - break; - case XRIOC_SET_PRECISE_FLAGS: - preciseflags = arg; - dev_dbg(&xr_usb_serial->control->dev, "%s VIOC_SET_PRECISE_FLAGS %d\n", __func__, preciseflags); - xr_usb_serial_disable(xr_usb_serial); - if (preciseflags) - { - xr_usb_serial->preciseflags = 1; - } - else - { - xr_usb_serial->preciseflags = 0; - } - xr_usb_serial_set_wide_mode(xr_usb_serial,xr_usb_serial->preciseflags); - xr_usb_serial_enable(xr_usb_serial); - break; } @@ -1105,11 +965,9 @@ static void xr_usb_serial_tty_set_termios(struct tty_struct *tty, newline.bParityType = termios->c_cflag & PARENB ? (termios->c_cflag & PARODD ? 1 : 2) + (termios->c_cflag & CMSPAR ? 2 : 0) : 0; - xr_usb_serial->trans9 = 0; switch (termios->c_cflag & CSIZE) { case CS5:/*using CS5 replace of the 9 bit data mode*/ newline.bDataBits = 9; - xr_usb_serial->trans9 =1; break; case CS6: newline.bDataBits = 6; @@ -1135,27 +993,15 @@ static void xr_usb_serial_tty_set_termios(struct tty_struct *tty, xr_usb_serial_set_control(xr_usb_serial, xr_usb_serial->ctrlout = newctrl); xr_usb_serial_set_flow_mode(xr_usb_serial,tty,cflag);/*set the serial flow mode*/ - if (xr_usb_serial->trans9) - { - /* Turn on wide mode if we're 9-bit transparent. */ - xr_usb_serial_set_wide_mode(xr_usb_serial,1); - } - else if (!xr_usb_serial->preciseflags) - { - xr_usb_serial_set_wide_mode(xr_usb_serial,0); - } - - + if (memcmp(&xr_usb_serial->line, &newline, sizeof newline)) { memcpy(&xr_usb_serial->line, &newline, sizeof newline); - /* dev_dbg(&xr_usb_serial->control->dev, "%s - set line: %d %d %d %d\n", __func__, le32_to_cpu(newline.dwDTERate), newline.bCharFormat, newline.bParityType, - newline.bDataBits);*/ - + newline.bDataBits); xr_usb_serial_set_line(xr_usb_serial, &xr_usb_serial->line); } xr_usb_serial_enable(xr_usb_serial); @@ -1214,36 +1060,6 @@ static int xr_usb_serial_write_buffers_alloc(struct xr_usb_serial *xr_usb_serial return 0; } -#ifdef CONFIG_GPIOLIB -static int xr_usb_gpio_get(struct gpio_chip *chip, unsigned offset) -{ - struct xr_usb_serial *xr_usb_serial = container_of(chip, struct xr_usb_serial, xr_usb_gpio); - dev_dbg(chip->dev, "xr_usb_gpio_get offset = %d channel = %d\n",offset,xr_usb_serial->channel); - return 0; -} - -static void xr_usb_gpio_set(struct gpio_chip *chip, unsigned offset, int val) -{ - struct xr_usb_serial *xr_usb_serial = container_of(chip, struct xr_usb_serial, xr_usb_gpio); - dev_dbg(chip->dev, "xr_usb_gpio_set offset =%d val=%d channel = %d\n",offset,val,xr_usb_serial->channel); -} - -static int xr_usb_gpio_direction_input(struct gpio_chip *chip,unsigned offset) -{ - struct xr_usb_serial *xr_usb_serial = container_of(chip, struct xr_usb_serial, xr_usb_gpio); - dev_dbg(chip->dev, "xr_usb_gpio_direction_input offset =%d channel = %d\n",offset,xr_usb_serial->channel); - return 0; -} - -static int xr_usb_gpio_direction_output(struct gpio_chip *chip, - unsigned offset, int val) -{ - struct xr_usb_serial *xr_usb_serial = container_of(chip, struct xr_usb_serial, xr_usb_gpio); - dev_dbg(chip->dev, "xr_usb_gpio_direction_output offset =%d val=%d channel:%d\n",offset,val,xr_usb_serial->channel); - return 0; -} -#endif - static int xr_usb_serial_probe(struct usb_interface *intf, const struct usb_device_id *id) { @@ -1280,7 +1096,7 @@ static int xr_usb_serial_probe(struct usb_interface *intf, num_rx_buf = (quirks == SINGLE_RX_URB) ? 1 : XR_USB_SERIAL_NR; - //dev_dbg(&intf->dev, "USB_device_id idVendor:%04x, idProduct %04x\n",id->idVendor,id->idProduct); + dev_dbg(&intf->dev, "USB_device_id idVendor:%04x, idProduct %04x\n",id->idVendor,id->idProduct); /* handle quirks deadly to normal probing*/ if (quirks == NO_UNION_NORMAL) { @@ -1521,7 +1337,7 @@ static int xr_usb_serial_probe(struct usb_interface *intf, } #else xr_usb_serial->channel = epwrite->bEndpointAddress; - //dev_dbg(&intf->dev, "epwrite->bEndpointAddress =%d\n",epwrite->bEndpointAddress); + dev_dbg(&intf->dev, "epwrite->bEndpointAddress =%d\n",epwrite->bEndpointAddress); #endif buf = usb_alloc_coherent(usb_dev, ctrlsize, GFP_KERNEL, &xr_usb_serial->ctrl_dma); if (!buf) { @@ -1608,10 +1424,15 @@ static int xr_usb_serial_probe(struct usb_interface *intf, usb_set_intfdata(intf, xr_usb_serial); - i = device_create_file(&intf->dev, &dev_attr_bmCapabilities); + xr_usb_serial->rs485_422_en = false; //default enable rs232 + i = device_create_file(&intf->dev, &dev_attr_bRS485_422_en); if (i < 0) goto alloc_fail7; + i = device_create_file(&intf->dev, &dev_attr_bmCapabilities); + if (i < 0) + goto alloc_fail8; + if (cfd) { /* export the country data */ xr_usb_serial->country_codes = kmalloc(cfd->bLength - 4, GFP_KERNEL); if (!xr_usb_serial->country_codes) @@ -1649,7 +1470,7 @@ static int xr_usb_serial_probe(struct usb_interface *intf, xr_usb_serial->ctrlurb->transfer_flags |= URB_NO_TRANSFER_DMA_MAP; xr_usb_serial->ctrlurb->transfer_dma = xr_usb_serial->ctrl_dma; - //dev_info(&intf->dev, "ttyXR_USB_SERIAL%d: USB XR_USB_SERIAL device channel:%d\n", minor,xr_usb_serial->channel); + dev_info(&intf->dev, "ttyXR_USB_SERIAL%d: USB XR_USB_SERIAL device\n", minor); xr_usb_serial_pre_setup(xr_usb_serial); @@ -1670,26 +1491,12 @@ static int xr_usb_serial_probe(struct usb_interface *intf, &control_interface->dev); if (IS_ERR(tty_dev)) { rv = PTR_ERR(tty_dev); - goto alloc_fail8; + goto alloc_fail9; } #endif -#ifdef CONFIG_GPIOLIB - /* Setup GPIO cotroller */ - xr_usb_serial->xr_usb_gpio.owner = THIS_MODULE; - xr_usb_serial->xr_usb_gpio.dev = &control_interface->dev; - xr_usb_serial->xr_usb_gpio.label = dev_name(&control_interface->dev); - xr_usb_serial->xr_usb_gpio.direction_input = xr_usb_gpio_direction_input; - xr_usb_serial->xr_usb_gpio.get = xr_usb_gpio_get; - xr_usb_serial->xr_usb_gpio.direction_output = xr_usb_gpio_direction_output; - xr_usb_serial->xr_usb_gpio.set = xr_usb_gpio_set; - xr_usb_serial->xr_usb_gpio.base = 100 + xr_usb_serial->channel*10; - xr_usb_serial->xr_usb_gpio.ngpio = 4; - xr_usb_serial->xr_usb_gpio.can_sleep = 1; - rv = gpiochip_add(&xr_usb_serial->xr_usb_gpio); - dev_dbg(&xr_usb_serial->control->dev, "gpiochip_add %d\n",rv); -#endif + return 0; -alloc_fail8: +alloc_fail9: if (xr_usb_serial->country_codes) { device_remove_file(&xr_usb_serial->control->dev, &dev_attr_wCountryCodes); @@ -1697,6 +1504,8 @@ static int xr_usb_serial_probe(struct usb_interface *intf, &dev_attr_iCountryCodeRelDate); } device_remove_file(&xr_usb_serial->control->dev, &dev_attr_bmCapabilities); +alloc_fail8: + device_remove_file(&xr_usb_serial->control->dev, &dev_attr_bRS485_422_en); alloc_fail7: usb_set_intfdata(intf, NULL); for (i = 0; i < XR_USB_SERIAL_NW; i++) @@ -1721,7 +1530,7 @@ static void stop_data_traffic(struct xr_usb_serial *xr_usb_serial) { int i; - //dev_dbg(&xr_usb_serial->control->dev, "%s\n", __func__); + dev_dbg(&xr_usb_serial->control->dev, "%s\n", __func__); usb_kill_urb(xr_usb_serial->ctrlurb); for (i = 0; i < XR_USB_SERIAL_NW; i++) @@ -1739,7 +1548,7 @@ static void xr_usb_serial_disconnect(struct usb_interface *intf) struct tty_struct *tty; int i; - //dev_dbg(&intf->dev, "%s\n", __func__); + dev_dbg(&intf->dev, "%s\n", __func__); /* sibling interface is already cleaning up */ if (!xr_usb_serial) @@ -1754,6 +1563,7 @@ static void xr_usb_serial_disconnect(struct usb_interface *intf) &dev_attr_iCountryCodeRelDate); } device_remove_file(&xr_usb_serial->control->dev, &dev_attr_bmCapabilities); + device_remove_file(&xr_usb_serial->control->dev, &dev_attr_bRS485_422_en); usb_set_intfdata(xr_usb_serial->control, NULL); usb_set_intfdata(xr_usb_serial->data, NULL); mutex_unlock(&xr_usb_serial->mutex); @@ -1821,9 +1631,7 @@ static int xr_usb_serial_resume(struct usb_interface *intf) struct xr_usb_serial_wb *wb; int rv = 0; int cnt; - - xr_usb_serial_pre_setup(xr_usb_serial); - + spin_lock_irq(&xr_usb_serial->read_lock); xr_usb_serial->susp_count -= 1; cnt = xr_usb_serial->susp_count; @@ -1862,10 +1670,7 @@ static int xr_usb_serial_resume(struct usb_interface *intf) static int xr_usb_serial_reset_resume(struct usb_interface *intf) { struct xr_usb_serial *xr_usb_serial = usb_get_intfdata(intf); -#if LINUX_VERSION_CODE > KERNEL_VERSION(3, 9, 0) -#else - struct tty_struct *tty; -#endif + struct tty_struct *tty; if (test_bit(ASYNCB_INITIALIZED, &xr_usb_serial->port.flags)){ #if LINUX_VERSION_CODE > KERNEL_VERSION(3, 9, 0) tty_port_tty_hangup(&xr_usb_serial->port, false); @@ -1940,11 +1745,14 @@ static const struct tty_operations xr_usb_serial_ops = { .tiocmget = xr_usb_serial_tty_tiocmget, .tiocmset = xr_usb_serial_tty_tiocmset, }; + +/* + * Init / exit. + */ + static int __init xr_usb_serial_init(void) { int retval; - int i; - xr_usb_serial_tty_driver = alloc_tty_driver(XR_USB_SERIAL_TTY_MINORS); if (!xr_usb_serial_tty_driver) return -ENOMEM; @@ -1972,17 +1780,17 @@ static int __init xr_usb_serial_init(void) put_tty_driver(xr_usb_serial_tty_driver); return retval; } - + printk(KERN_INFO KBUILD_MODNAME ": " DRIVER_DESC "\n"); return 0; } + static void __exit xr_usb_serial_exit(void) { usb_deregister(&xr_usb_serial_driver); tty_unregister_driver(xr_usb_serial_tty_driver); put_tty_driver(xr_usb_serial_tty_driver); - } module_init(xr_usb_serial_init); diff --git a/ubuntu/xr-usb-serial/xr_usb_serial_common.h b/ubuntu/xr-usb-serial/xr_usb_serial_common.h index 97e9024257942..fe3460c57adfe 100644 --- a/ubuntu/xr-usb-serial/xr_usb_serial_common.h +++ b/ubuntu/xr-usb-serial/xr_usb_serial_common.h @@ -70,11 +70,6 @@ #define XR_USB_SERIAL_NW 16 #define XR_USB_SERIAL_NR 16 -#define RAMCTL_BUFFER_PARITY 0x1 -#define RAMCTL_BUFFER_BREAK 0x2 -#define RAMCTL_BUFFER_FRAME 0x4 -#define RAMCTL_BUFFER_OVERRUN 0x8 - struct xr_usb_serial_wb { unsigned char *buf; dma_addr_t dmah; @@ -149,19 +144,10 @@ struct xr_usb_serial { u8 bInterval; struct xr_usb_serial_wb *delayed_wb; /* write queued for a device about to be woken */ unsigned int channel; - int preciseflags; /* USB: wide mode, TTY: flags per character */ - int trans9; /* USB: wide mode, serial 9N1 */ - int have_extra_byte; - int extra_byte; - unsigned short DeviceVendor; unsigned short DeviceProduct; -#ifdef CONFIG_GPIOLIB - struct gpio_chip xr_usb_gpio; -#endif struct reg_addr_map reg_map; - int found_smbios_exar_config; - unsigned char channel_config; + bool rs485_422_en; }; #define CDC_DATA_INTERFACE_TYPE 0x0a diff --git a/ubuntu/xr-usb-serial/xr_usb_serial_hal.c b/ubuntu/xr-usb-serial/xr_usb_serial_hal.c index bf9d2bf136ac4..f449709953680 100644 --- a/ubuntu/xr-usb-serial/xr_usb_serial_hal.c +++ b/ubuntu/xr-usb-serial/xr_usb_serial_hal.c @@ -31,7 +31,7 @@ int xr_usb_serial_set_reg(struct xr_usb_serial *xr_usb_serial,int regnum, int va { int result; int channel = 0; - //dev_info(&xr_usb_serial->control->dev, "%s Channel:%d 0x%02x = 0x%02x\n", __func__,channel,regnum, value); + dev_dbg(&xr_usb_serial->control->dev, "%s Channel:%d 0x%02x = 0x%02x\n", __func__,channel,regnum, value); if((xr_usb_serial->DeviceProduct&0xfff0) == 0x1400) { int XR2280xaddr = XR2280x_FUNC_MGR_OFFSET + regnum; @@ -97,7 +97,7 @@ int xr_usb_serial_set_reg(struct xr_usb_serial *xr_usb_serial,int regnum, int va result = -1; } if(result < 0) - dev_err(&xr_usb_serial->control->dev, "%s Error:%d\n", __func__,result); + dev_dbg(&xr_usb_serial->control->dev, "%s Error:%d\n", __func__,result); return result; @@ -106,7 +106,7 @@ int xr_usb_serial_set_reg_ext(struct xr_usb_serial *xr_usb_serial,int channel,in { int result; int XR2280xaddr = XR2280x_FUNC_MGR_OFFSET + regnum; - //dev_info(&xr_usb_serial->control->dev, "%s channel:%d 0x%02x = 0x%02x\n", __func__,channel,regnum, value); + dev_dbg(&xr_usb_serial->control->dev, "%s channel:%d 0x%02x = 0x%02x\n", __func__,channel,regnum, value); if((xr_usb_serial->DeviceProduct&0xfff0) == 0x1400) { result = usb_control_msg(xr_usb_serial->dev, /* usb device */ @@ -165,7 +165,7 @@ int xr_usb_serial_set_reg_ext(struct xr_usb_serial *xr_usb_serial,int channel,in result = -1; } if(result < 0) - dev_err(&xr_usb_serial->control->dev, "%s Error:%d\n", __func__,result); + dev_dbg(&xr_usb_serial->control->dev, "%s Error:%d\n", __func__,result); return result; @@ -242,9 +242,9 @@ int xr_usb_serial_get_reg(struct xr_usb_serial *xr_usb_serial,int regnum, short } if(result < 0) - dev_err(&xr_usb_serial->control->dev, "%s channel:%d Reg 0x%x Error:%d\n", __func__,channel,regnum,result); - //else - //dev_info(&xr_usb_serial->control->dev, "%s channel:%d 0x%x = 0x%04x\n", __func__,channel,regnum, *value); + dev_dbg(&xr_usb_serial->control->dev, "%s channel:%d Reg 0x%x Error:%d\n", __func__,channel,regnum,result); + else + dev_dbg(&xr_usb_serial->control->dev, "%s channel:%d 0x%x = 0x%04x\n", __func__,channel,regnum, *value); return result; @@ -285,7 +285,7 @@ int xr_usb_serial_get_reg_ext(struct xr_usb_serial *xr_usb_serial,int channel,in ®_value, /* data */ 1, /* size */ 5000); /* timeout */ - //dev_dbg(&xr_usb_serial->control->dev, "xr_usb_serial_get_reg_ext reg:%x\n",reg_value); + dev_dbg(&xr_usb_serial->control->dev, "xr_usb_serial_get_reg_ext reg:%x\n",reg_value); *value = reg_value; } else if(xr_usb_serial->DeviceProduct == 0x1411) @@ -320,9 +320,9 @@ int xr_usb_serial_get_reg_ext(struct xr_usb_serial *xr_usb_serial,int channel,in } if(result < 0) - dev_err(&xr_usb_serial->control->dev, "%s Error:%d\n", __func__,result); - //else - //dev_info(&xr_usb_serial->control->dev, "%s channel:%d 0x%x = 0x%04x\n", __func__,channel,regnum, *value); + dev_dbg(&xr_usb_serial->control->dev, "%s Error:%d\n", __func__,result); + else + dev_dbg(&xr_usb_serial->control->dev, "%s channel:%d 0x%x = 0x%04x\n", __func__,channel,regnum, *value); return result; @@ -384,7 +384,7 @@ static int xr21v141x_set_baud_rate(struct xr_usb_serial *xr_usb_serial, unsigned unsigned int tx_mask = xr21v141x_baud_rates[i].tx; unsigned int rx_mask = (divisor & 1) ? xr21v141x_baud_rates[i].rx1 : xr21v141x_baud_rates[i].rx0; - //dev_info(&xr_usb_serial->control->dev, "Setting baud rate to %d: i=%u div=%u tx=%03x rx=%03x\n", rate, i, divisor, tx_mask, rx_mask); + dev_dbg(&xr_usb_serial->control->dev, "Setting baud rate to %d: i=%u div=%u tx=%03x rx=%03x\n", rate, i, divisor, tx_mask, rx_mask); xr_usb_serial_set_reg(xr_usb_serial,UART_CLOCK_DIVISOR_0, (divisor >> 0) & 0xff); xr_usb_serial_set_reg(xr_usb_serial,UART_CLOCK_DIVISOR_1, (divisor >> 8) & 0xff); @@ -458,7 +458,7 @@ int xr_usb_serial_set_line(struct xr_usb_serial *xr_usb_serial, struct usb_cdc_l if (cflag & CRTSCTS) { - //dev_dbg(&xr_usb_serial->control->dev, "xr_usb_serial_set_flow_mode:hardware\n"); + dev_dbg(&xr_usb_serial->control->dev, "xr_usb_serial_set_flow_mode:hardware\n"); flow = UART_FLOW_MODE_HW; gpio_mode = UART_GPIO_MODE_SEL_RTS_CTS; } @@ -466,7 +466,7 @@ int xr_usb_serial_set_line(struct xr_usb_serial *xr_usb_serial, struct usb_cdc_l { unsigned char start_char = START_CHAR(tty); unsigned char stop_char = STOP_CHAR(tty); - //dev_dbg(&xr_usb_serial->control->dev, "xr_usb_serial_set_flow_mode:software\n"); + dev_dbg(&xr_usb_serial->control->dev, "xr_usb_serial_set_flow_mode:software\n"); flow = UART_FLOW_MODE_SW; gpio_mode = UART_GPIO_MODE_SEL_GPIO; @@ -475,47 +475,23 @@ int xr_usb_serial_set_line(struct xr_usb_serial *xr_usb_serial, struct usb_cdc_l } else { - //dev_dbg(&xr_usb_serial->control->dev, "xr_usb_serial_set_flow_mode:none\n"); + dev_dbg(&xr_usb_serial->control->dev, "xr_usb_serial_set_flow_mode:none\n"); flow = UART_FLOW_MODE_NONE; gpio_mode = UART_GPIO_MODE_SEL_GPIO; } - - if((xr_usb_serial->DeviceProduct == 0x1420)|| - (xr_usb_serial->DeviceProduct == 0x1422)|| - (xr_usb_serial->DeviceProduct == 0x1424)) - {//Add support for the TXT and RXT function for 0x1420, 0x1422, 0x1424, by setting GPIO_MODE [9:8] = '11' - gpio_mode |= 0x300; - } - - if((xr_usb_serial->DeviceProduct == 0x1412)|| - (xr_usb_serial->DeviceProduct == 0x1414)) - { - if(xr_usb_serial->found_smbios_exar_config) - { - if((xr_usb_serial->channel_config == 2) - ||(xr_usb_serial->channel_config == 3)) - //if find the exar channel config in the smbios, the value can not be changed by the application - //dev_info(&xr_usb_serial->control->dev, "Sorry, Application can not change the channel gpio&flow mode,because there are config at SMBIOS\n"); - return 0; - } - } - - xr_usb_serial_set_reg(xr_usb_serial, xr_usb_serial->reg_map.uart_flow_addr, flow); - - if((xr_usb_serial->found_smbios_exar_config == 1)&&(xr_usb_serial->channel_config == 1)) - { - //dev_info(&xr_usb_serial->control->dev, "Sorry, Application can not change the channel gpio mode,because there are config at SMBIOS\n"); + // rs485,rs422 FD/HD mode + if (xr_usb_serial->rs485_422_en) { + xr_usb_serial_set_reg(xr_usb_serial, xr_usb_serial->reg_map.uart_flow_addr, 0x00); + xr_usb_serial_set_reg(xr_usb_serial, xr_usb_serial->reg_map.uart_gpio_mode_addr, 0x0B); + } else { + //rs232, default mode + xr_usb_serial_set_reg(xr_usb_serial, xr_usb_serial->reg_map.uart_flow_addr, flow); + xr_usb_serial_set_reg(xr_usb_serial, xr_usb_serial->reg_map.uart_gpio_mode_addr, gpio_mode); } - else - xr_usb_serial_set_reg(xr_usb_serial, xr_usb_serial->reg_map.uart_gpio_mode_addr, gpio_mode); - return 0; } - - - int xr_usb_serial_send_break(struct xr_usb_serial *xr_usb_serial, int state) { @@ -540,17 +516,11 @@ int xr_usb_serial_send_break(struct xr_usb_serial *xr_usb_serial, int state) #define URM_ENABLE_BASE 0x010 #define URM_ENABLE_0_TX 0x001 #define URM_ENABLE_0_RX 0x002 -#define URM_RESET_RX_FIFO_BASE 0x018 -#define URM_RESET_TX_FIFO_BASE 0x01C - - int xr_usb_serial_enable(struct xr_usb_serial *xr_usb_serial) { int ret = 0; int channel = xr_usb_serial->channel; - //dev_info(&xr_usb_serial->control->dev, "xr_usb_serial_enable channel=%d\n",channel); - if(channel) channel--; if((xr_usb_serial->DeviceProduct == 0x1410)|| (xr_usb_serial->DeviceProduct == 0x1412)|| (xr_usb_serial->DeviceProduct == 0x1414)) @@ -566,31 +536,10 @@ int xr_usb_serial_enable(struct xr_usb_serial *xr_usb_serial) return ret; } -int xr_usb_serial_fifo_reset(struct xr_usb_serial *xr_usb_serial) -{ - int ret = 0; - int channel = xr_usb_serial->channel; - - if(channel) channel--; - if((xr_usb_serial->DeviceProduct == 0x1410)|| - (xr_usb_serial->DeviceProduct == 0x1412)|| - (xr_usb_serial->DeviceProduct == 0x1414)) - { - - ret = xr_usb_serial_set_reg_ext(xr_usb_serial,URM_REG_BLOCK,URM_RESET_RX_FIFO_BASE + channel,0xff); - ret |= xr_usb_serial_set_reg_ext(xr_usb_serial,URM_REG_BLOCK,URM_RESET_TX_FIFO_BASE + channel,0xff); - - } - return ret; -} - - int xr_usb_serial_disable(struct xr_usb_serial *xr_usb_serial) { int ret = 0; int channel = xr_usb_serial->channel; - //dev_info(&xr_usb_serial->control->dev, "xr_usb_serial_disable channel=%d\n",channel); - if(channel) channel--; ret = xr_usb_serial_set_reg(xr_usb_serial,xr_usb_serial->reg_map.uart_enable_addr,0); if((xr_usb_serial->DeviceProduct == 0x1410)|| (xr_usb_serial->DeviceProduct == 0x1412)|| @@ -605,81 +554,12 @@ int xr_usb_serial_set_loopback(struct xr_usb_serial *xr_usb_serial, int channel) { int ret = 0; xr_usb_serial_disable(xr_usb_serial); - - if((xr_usb_serial->DeviceProduct == 0x1410) || - (xr_usb_serial->DeviceProduct == 0x1412) || - (xr_usb_serial->DeviceProduct == 0x1414)) - { - switch (channel) - { - case 0: - ret = xr_usb_serial_set_reg_ext(xr_usb_serial,channel, - xr_usb_serial->reg_map.uart_loopback_addr,0x40); - break; - case 1: - ret = xr_usb_serial_set_reg_ext(xr_usb_serial,channel, - xr_usb_serial->reg_map.uart_loopback_addr,0x41); - break; - case 2: - ret = xr_usb_serial_set_reg_ext(xr_usb_serial,channel, - xr_usb_serial->reg_map.uart_loopback_addr,0x42); - break; - case 3: - ret = xr_usb_serial_set_reg_ext(xr_usb_serial,channel, - xr_usb_serial->reg_map.uart_loopback_addr,0x43); - break; - default: - - break; - } - } - else if((xr_usb_serial->DeviceProduct == 0x1420)|| - (xr_usb_serial->DeviceProduct == 0x1422)|| - (xr_usb_serial->DeviceProduct == 0x1424)) - { - ret = xr_usb_serial_set_reg_ext(xr_usb_serial,channel, + ret = xr_usb_serial_set_reg_ext(xr_usb_serial,channel, xr_usb_serial->reg_map.uart_loopback_addr,0x07); - } xr_usb_serial_enable(xr_usb_serial); return ret; } -#define XR21V1414_WIDE_MODE_OFFSET 3 -#define XR21B142X_WIDE_MODE_TX_OFFSET 0x42 -#define XR21B142X_WIDE_MODE_RX_OFFSET 0x45 -int xr_usb_serial_set_wide_mode(struct xr_usb_serial *xr_usb_serial, int preciseflags) -{ - int ret = 0; - int channel = xr_usb_serial->channel; - xr_usb_serial_disable(xr_usb_serial); - if((xr_usb_serial->DeviceProduct&0xfff0) == 0x1400) - { - - } - else if((xr_usb_serial->DeviceProduct == 0x1410)|| - (xr_usb_serial->DeviceProduct == 0x1412)|| - (xr_usb_serial->DeviceProduct == 0x1414)) - { - - if(channel) channel--; - xr_usb_serial_set_reg_ext(xr_usb_serial, 0x66, channel*8 + XR21V1414_WIDE_MODE_OFFSET, preciseflags); - - } - else if(xr_usb_serial->DeviceProduct == 0x1411) - { - xr_usb_serial_set_reg(xr_usb_serial,0xd02, preciseflags); - } - else if((xr_usb_serial->DeviceProduct == 0x1420)|| - (xr_usb_serial->DeviceProduct == 0x1422)|| - (xr_usb_serial->DeviceProduct == 0x1424)) - { - xr_usb_serial_set_reg(xr_usb_serial, XR21B142X_WIDE_MODE_TX_OFFSET, preciseflags); - xr_usb_serial_set_reg(xr_usb_serial, XR21B142X_WIDE_MODE_RX_OFFSET, preciseflags); - } - xr_usb_serial_enable(xr_usb_serial); - return ret; -} - static int xr_usb_serial_tiocmget(struct xr_usb_serial *xr_usb_serial) @@ -687,7 +567,7 @@ static int xr_usb_serial_tiocmget(struct xr_usb_serial *xr_usb_serial) short data; int result; result = xr_usb_serial_get_reg(xr_usb_serial,xr_usb_serial->reg_map.uart_gpio_status_addr, &data); - //dev_info(&xr_usb_serial->control->dev, "xr_usb_serial_tiocmget uart_gpio_status_addr:0x%04x\n",data); + dev_dbg(&xr_usb_serial->control->dev, "xr_usb_serial_tiocmget uart_gpio_status_addr:0x%04x\n",data); if (result) return ((data & 0x8) ? 0: TIOCM_DTR) | ((data & 0x20) ? 0:TIOCM_RTS ) | ((data & 0x4) ? 0:TIOCM_DSR) | ((data & 0x1) ? 0 : TIOCM_RI) | ((data & 0x2) ? 0:TIOCM_CD) | ((data & 0x10) ? 0 : TIOCM_CTS); else @@ -795,12 +675,11 @@ static void init_xr21b142x_reg_map(void) xr21b140x_reg_map.uart_custom_driver = 0x60; xr21b140x_reg_map.uart_low_latency = 0x46; } -int smbios_check_if_have_exar_config(unsigned char *config0,unsigned char *config1); + int xr_usb_serial_pre_setup(struct xr_usb_serial *xr_usb_serial) { int ret = 0; - unsigned char channel1_config = 255; - unsigned char channel2_config = 255; + init_xr21b140x_reg_map(); init_xr21b1411_reg_map(); init_xr21v141x_reg_map(); @@ -837,74 +716,9 @@ int xr_usb_serial_pre_setup(struct xr_usb_serial *xr_usb_serial) xr_usb_serial_set_reg(xr_usb_serial, xr_usb_serial->reg_map.uart_gpio_dir_addr, 0x28); xr_usb_serial_set_reg(xr_usb_serial, xr_usb_serial->reg_map.uart_gpio_set_addr, UART_GPIO_SET_DTR | UART_GPIO_SET_RTS); - if((xr_usb_serial->DeviceProduct == 0x1412)|| - (xr_usb_serial->DeviceProduct == 0x1414)) - { - xr_usb_serial->found_smbios_exar_config = 0; - if(smbios_check_if_have_exar_config(&channel1_config,&channel2_config) == 0) - { - - if(xr_usb_serial->channel == 1) - { - xr_usb_serial->found_smbios_exar_config = 1; - xr_usb_serial->channel_config = channel1_config; - switch (channel1_config) - { - case 1://for RS232 Mode - //dev_info(&xr_usb_serial->control->dev, "SMBIOS Set Channel Mode to RS232\n"); - xr_usb_serial_set_reg(xr_usb_serial, xr_usb_serial->reg_map.uart_gpio_mode_addr, 0); - - break; - case 2://RS-485 HALF DUPLEX - //dev_info(&xr_usb_serial->control->dev, "SMBIOS Set Channel Mode to RS-485 HALF DUPLEX\n"); - xr_usb_serial_set_reg(xr_usb_serial, xr_usb_serial->reg_map.uart_gpio_mode_addr, 0x0b); - xr_usb_serial_set_reg(xr_usb_serial, xr_usb_serial->reg_map.uart_flow_addr, 0x00); - break; - case 3://RS-485/422 FULL DUPLEX - //dev_info(&xr_usb_serial->control->dev, "SMBIOS Set Channel Mode to RS-485/422 FULL DUPLEX\n"); - xr_usb_serial_set_reg(xr_usb_serial, xr_usb_serial->reg_map.uart_gpio_mode_addr, 0x0b); - xr_usb_serial_set_reg(xr_usb_serial, xr_usb_serial->reg_map.uart_flow_addr, 0x00); - break; - default: - xr_usb_serial->found_smbios_exar_config = 0; - break; - } - - } - else if(xr_usb_serial->channel == 2) - { - xr_usb_serial->found_smbios_exar_config = 1; - xr_usb_serial->channel_config = channel2_config; - switch (channel2_config) - { - case 1://for RS232 Mode - //dev_info(&xr_usb_serial->control->dev, "SMBIOS Set Channel Mode to RS232\n"); - xr_usb_serial_set_reg(xr_usb_serial, xr_usb_serial->reg_map.uart_gpio_mode_addr, 0); - - break; - case 2://RS-485 HALF DUPLEX - //dev_info(&xr_usb_serial->control->dev, "SMBIOS Set Channel Mode to RS-485 HALF DUPLEX\n"); - xr_usb_serial_set_reg(xr_usb_serial, xr_usb_serial->reg_map.uart_gpio_mode_addr, 0x0b); - xr_usb_serial_set_reg(xr_usb_serial, xr_usb_serial->reg_map.uart_flow_addr, 0x00); - break; - case 3://RS-485/422 FULL DUPLEX - //dev_info(&xr_usb_serial->control->dev, "SMBIOS Set Channel Mode to RS-485/422 FULL DUPLEX\n"); - xr_usb_serial_set_reg(xr_usb_serial, xr_usb_serial->reg_map.uart_gpio_mode_addr, 0x0b); - xr_usb_serial_set_reg(xr_usb_serial, xr_usb_serial->reg_map.uart_flow_addr, 0x00); - break; - default: - xr_usb_serial->found_smbios_exar_config = 0; - break; - } - } - else - { - //Nothing to do - } - } - - } return ret; } + + diff --git a/ubuntu/xr-usb-serial/xr_usb_serial_ioctl.h b/ubuntu/xr-usb-serial/xr_usb_serial_ioctl.h index 81394aac32903..c28b6bdc0b16b 100644 --- a/ubuntu/xr-usb-serial/xr_usb_serial_ioctl.h +++ b/ubuntu/xr-usb-serial/xr_usb_serial_ioctl.h @@ -24,13 +24,6 @@ #define XR_USB_SERIAL_SET_PRECISE_FLAGS _IO(XR_USB_SERIAL_IOC_MAGIC, 4) #define XR_USB_SERIAL_TEST_MODE _IO(XR_USB_SERIAL_IOC_MAGIC, 5) #define XR_USB_SERIAL_LOOPBACK _IO(XR_USB_SERIAL_IOC_MAGIC, 6) -#define XR_USB_SERIAL_SET_GPIO_MODE_REG _IO(XR_USB_SERIAL_IOC_MAGIC, 9) -#define XR_USB_SERIAL_GET_GPIO_MODE_REG _IO(XR_USB_SERIAL_IOC_MAGIC, 10) -#define XRIOC_SET_ANY_BAUD_RATE _IO(XR_USB_SERIAL_IOC_MAGIC, 11) -#define XRIOC_SET_PRECISE_FLAGS _IO(XR_USB_SERIAL_IOC_MAGIC, 12) - - - #define VZ_ADDRESS_UNICAST_S 0 #define VZ_ADDRESS_BROADCAST_S 8