diff options
| author | Greg Kroah-Hartman <gregkh@suse.de> | 2010-07-23 05:36:14 -0700 |
|---|---|---|
| committer | Greg Kroah-Hartman <gregkh@suse.de> | 2010-07-23 05:36:14 -0700 |
| commit | 6d3ced1bdcc40ce0bcdaa597aa89fdcba0a160d4 (patch) | |
| tree | 884a136f4e5578b6a1b9a7b3886b882e430d546f | |
| parent | 6bbbb136e761db39158852c9b42619c2438e9d45 (diff) | |
| download | patches-6d3ced1bdcc40ce0bcdaa597aa89fdcba0a160d4.tar.gz | |
delete a serial patch and disable the sysfs deprecated patch for now
| -rw-r--r-- | series | 5 | ||||
| -rw-r--r-- | tty/u6715-8250-serial-like-driver.patch | 340 |
2 files changed, 2 insertions, 343 deletions
@@ -69,8 +69,8 @@ driver-core/sysfs-fix-one-more-signature-discrepancy-between-sysfs-implementatio driver-core/debugfs-no-longer-needs-to-depend-on-sysfs.patch driver-core/driver-core-fix-memory-leak-one-one-error-path-in-bus_register.patch -# can we really drop it? -driver-core/driver-core-remove-config_sysfs_deprecated.patch +# can we really drop it? (nope, not yet...) +#driver-core/driver-core-remove-config_sysfs_deprecated.patch ##################################### # TTY patches for after 2.6.35 is out @@ -129,7 +129,6 @@ tty/serial-max3107-abstract-out-the-platform-specific-bits.patch tty/tty_io-remove-casts-from-void.patch tty/vt-fix-warning-statement-with-no-effect-due-to-vt_kern.h.patch tty/serial-crisv10-formatting-of-pointers-in-printk.patch -tty/u6715-8250-serial-like-driver.patch tty/serial-altera_uart-simplify-altera_uart_console_putc-checkpatch-fixes.patch tty/serial-fix-missing-bit-coverage-of-async_flags.patch tty/serial-general-fixes-in-the-serial_rs485-structure.patch diff --git a/tty/u6715-8250-serial-like-driver.patch b/tty/u6715-8250-serial-like-driver.patch deleted file mode 100644 index a6a45bd69f9ee5..00000000000000 --- a/tty/u6715-8250-serial-like-driver.patch +++ /dev/null @@ -1,340 +0,0 @@ -From philippe.langlais@stericsson.com Thu Jul 22 15:53:24 2010 -From: Philippe Langlais <philippe.langlais@stericsson.com> -To: <linux-kernel@vger.kernel.org> -Cc: <gregkh@suse.de>, <ludovic.barre@stericsson.com>, - Philippe Langlais <philippe.langlais@stericsson.com> -Subject: U6715 8250 serial like driver -Date: Mon, 19 Jul 2010 11:27:40 +0200 -Message-ID: <1279531660-16317-1-git-send-email-philippe.langlais@stericsson.com> - -UART Features extract from STEricsson U6715 datasheet (arm926 SoC for mobile phone): -* Fully compatible with industry standard 16C550 and 16C450 from various -manufacturers -* RX and TX 64 byte FIFO reduces CPU interrupts -* Full double buffering -* Modem control signals include CTS, RTS, (and DSR, DTR on UART1 only) -* Automatic baud rate selection -* Manual or automatic RTS/CTS smart hardware flow control -* Programmable serial characteristics: -– Baud rate generation (50 to 3.25M baud) -– 5, 6, 7 or 8-bit characters -– Even, odd or no-parity bit generation and detection -– 1, 1.5 or 2 stop bit generation -* Independent control of transmit, receive, line status, data set interrupts and FIFOs -* Full status-reporting capabilities -* Separate DMA signalling for RX and TX -* Timed interrupt to spread receive interrupt on known duration -* DMA time-out interrupt to allow detection of end of reception -* Carkit pulse coding and decoding compliant with USB carkit control interface [40] - -This UART IP is auto-detected as a 16550A type - -Clock specificities: - It's parent clock depend on baud rate. - The UART port can be used before u6xxx clock framework initialization - -Signed-off-by: Philippe Langlais <philippe.langlais@stericsson.com> -Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> - ---- - drivers/serial/8250.c | 26 ++++++ - drivers/serial/8250_u6.c | 179 ++++++++++++++++++++++++++++++++++++++++++++ - drivers/serial/Kconfig | 19 ++++ - drivers/serial/Makefile | 1 - include/linux/serial_8250.h | 8 + - 5 files changed, 232 insertions(+), 1 deletion(-) - ---- a/drivers/serial/8250.c -+++ b/drivers/serial/8250.c -@@ -199,10 +199,16 @@ static const struct serial8250_config ua - }, - [PORT_16550A] = { - .name = "16550A", -+#if defined(CONFIG_SERIAL_8250_U6XXX) -+ .fifo_size = 64, -+ .tx_loadsz = 64, -+ .flags = UART_CAP_FIFO | UART_CAP_AFE, -+#else - .fifo_size = 16, - .tx_loadsz = 16, -- .fcr = UART_FCR_ENABLE_FIFO | UART_FCR_R_TRIG_10, - .flags = UART_CAP_FIFO, -+#endif -+ .fcr = UART_FCR_ENABLE_FIFO | UART_FCR_R_TRIG_10, - }, - [PORT_CIRRUS] = { - .name = "Cirrus", -@@ -2268,6 +2274,13 @@ serial8250_set_termios(struct uart_port - /* - * Ask the core to calculate the divisor for us. - */ -+#ifdef CONFIG_SERIAL_8250_CUSTOM_CLOCK -+ baud = uart_get_baud_rate(port, termios, old, 0, -+ CONFIG_SERIAL_8250_CUSTOM_MAX_BAUDRATE); -+ /* Calculate the new uart clock frequency if it is tunable */ -+ port->uartclk = serial8250_get_custom_clock(port, baud); -+#endif -+ - baud = uart_get_baud_rate(port, termios, old, - port->uartclk / 16 / 0xffff, - port->uartclk / 16); -@@ -2298,6 +2311,13 @@ serial8250_set_termios(struct uart_port - up->mcr &= ~UART_MCR_AFE; - if (termios->c_cflag & CRTSCTS) - up->mcr |= UART_MCR_AFE; -+#if defined(CONFIG_SERIAL_8250_U6XXX) -+ /** -+ * When AFE is active, let the HW handle the stop/restart TX -+ * upon CTS change. It reacts much quicker than the SW driver. -+ */ -+ port->flags &= ~ASYNC_CTS_FLOW; -+#endif - } - - /* -@@ -2383,6 +2403,10 @@ serial8250_set_termios(struct uart_port - serial_outp(up, UART_LCR, cval | UART_LCR_DLAB);/* set DLAB */ - } - -+#ifdef CONFIG_SERIAL_8250_CUSTOM_CLOCK -+ /* set the new uart clock frequency if it is tunable */ -+ serial8250_set_custom_clock(port); -+#endif - serial_dl_write(up, quot); - - /* ---- /dev/null -+++ b/drivers/serial/8250_u6.c -@@ -0,0 +1,179 @@ -+/* -+ * linux/drivers/serial/8250_pnx.c -+ * -+ * Copyright (C) ST-Ericsson SA 2010 -+ * Author: Ludovic Barre <ludovic.barre@stericsson.com> for ST-Ericsson. -+ * License terms: GNU General Public License (GPL), version 2 -+ */ -+ -+#include <linux/serial_core.h> -+#include <linux/io.h> -+#include <linux/clk.h> -+#include <linux/interrupt.h> -+#include <linux/irq.h> -+ -+#include <mach/serial.h> -+#include <mach/hardware.h> -+#include <mach/clock.h> -+ -+/* Register description for FDIV_CTRL */ -+/* UART FDIV_CTRL Register (8 bits) */ -+#define UARTX_FDIV_CTRL_OFFSET 0xC00 -+/* UART FDIV_M Register (16 bits) */ -+#define UARTX_FDIV_M_OFFSET 0xC04 -+/* UART FDIV_N Register (16 bits) */ -+#define UARTX_FDIV_N_OFFSET 0xC08 -+ -+/* Bits definition for register UARTX_FDIV_CTRL */ -+#define UARTX_FDIV_ENABLE_SHIFT 7 -+#define UARTX_FDIV_ENABLE_FIELD (0xFFFFFFFF - (0x1UL<<UARTX_FDIV_ENABLE_SHIFT)) -+#define UARTX_FDIV_ENABLE_OFF (0x0UL<<UARTX_FDIV_ENABLE_SHIFT) -+#define UARTX_FDIV_ENABLE_ON (0x1UL<<UARTX_FDIV_ENABLE_SHIFT) -+#define UARTX_FDIV_ENABLE (0x1UL<<UARTX_FDIV_ENABLE_SHIFT) -+#define UARTX_CLKSEL_SHIFT 0 -+#define UARTX_CLKSEL_FIELD (0xFFFFFFFF - (0x3UL<<UARTX_CLKSEL_SHIFT)) -+#define UARTX_CLKSEL_PCLK (0x0UL<<UARTX_CLKSEL_SHIFT) -+#define UARTX_CLKSEL_13M (0x1UL<<UARTX_CLKSEL_SHIFT) -+#define UARTX_CLKSEL_26M (0x2UL<<UARTX_CLKSEL_SHIFT) -+#define UARTX_CLKSEL_3 (0x3UL<<UARTX_CLKSEL_SHIFT) -+ -+/* -+ * console and pctools has needed to start before serial_init -+ * (with cgu interface) -+ */ -+static int uart_enable_clock(struct uart_port *port) -+{ -+ u32 v; -+ v = readl(CGU_GATESC1_REG); -+ -+ if (port->irq == IRQ_UART1) -+ v |= CGU_UART1EN_1; -+ else if (port->irq == IRQ_UART2) -+ v |= CGU_UART2EN_1; -+ -+ writel(v, CGU_GATESC1_REG); -+ -+ return 0; -+} -+ -+static int uart_disable_clock(struct uart_port *port) -+{ -+ u32 v; -+ v = readl(CGU_GATESC1_REG); -+ -+ if (port->irq == IRQ_UART1) -+ v &= ~CGU_UART1EN_0; -+ else if (port->irq == IRQ_UART2) -+ v &= ~CGU_UART2EN_0; -+ -+ writel(v, CGU_GATESC1_REG); -+ -+ return 0; -+} -+ -+unsigned int serial8250_enable_clock(struct uart_port *port) -+{ -+ struct u6_uart *uart_u6 = port->private_data; -+ -+ if (!uart_u6) -+ return uart_enable_clock(port); -+ -+ if (IS_ERR(uart_u6->uartClk)) { -+ printk(KERN_WARNING "%s - uart clock failed error:%ld\n", -+ __func__, PTR_ERR(uart_u6->uartClk)); -+ return PTR_ERR(uart_u6->uartClk); -+ } -+ -+ if (clk_get_usecount(uart_u6->uartClk) == 0) -+ clk_enable(uart_u6->uartClk); -+ return 0; -+} -+ -+unsigned int serial8250_disable_clock(struct uart_port *port) -+{ -+ struct u6_uart *uart_u6 = port->private_data; -+ -+ if (!uart_u6) -+ return uart_disable_clock(port); -+ -+ if (IS_ERR(uart_u6->uartClk)) { -+ printk(KERN_WARNING "%s - uart clk error :%ld\n", __func__, -+ PTR_ERR(uart_u6->uartClk)); -+ return PTR_ERR(uart_u6->uartClk); -+ } -+ if (clk_get_usecount(uart_u6->uartClk) >= 1) -+ clk_disable(uart_u6->uartClk); -+ -+ return 0; -+} -+ -+unsigned int serial8250_get_custom_clock(struct uart_port *port, -+ unsigned int baud) -+{ -+ switch (baud) { -+ case 3250000: -+ return 52000000; -+ case 2000000: -+ return 32000000; -+ case 1843200: -+ return 29491200; -+ case 921600: -+ return 14745600; -+ default: -+ return 7372800; -+ } -+} -+ -+void serial8250_set_custom_clock(struct uart_port *port) -+{ -+ u32 fdiv_m = 0x5F37; -+ u32 fdiv_n = 0x3600; -+ u32 fdiv_ctrl = UARTX_FDIV_ENABLE_ON; -+ struct u6_uart *uart_u6 = port->private_data; -+ -+ switch (port->uartclk) { -+ case 7372800: /* clk=13MHz */ -+ fdiv_ctrl |= UARTX_CLKSEL_13M; -+ break; -+ case 14745600: /* clk=26MHz */ -+ fdiv_ctrl |= UARTX_CLKSEL_26M; -+ break; -+ case 29491200: /* clk=pclk */ -+ fdiv_ctrl |= UARTX_CLKSEL_PCLK; -+ break; -+ case 32000000: /* clk=pclk */ -+ fdiv_n = 0x3A98; -+ fdiv_ctrl |= UARTX_CLKSEL_PCLK; -+ break; -+ case 52000000: /* clk=pclk */ -+ fdiv_n = 0x5F37; -+ fdiv_ctrl |= UARTX_CLKSEL_PCLK; -+ break; -+ } -+ -+ if (uart_u6 != NULL && !IS_ERR(uart_u6->uartClk)) { -+ /* if cgu interface is ready and u6_serial_init */ -+ struct clk *parentClk; -+ -+ if (fdiv_ctrl & UARTX_CLKSEL_26M) -+ parentClk = clk_get(NULL, "clk26m_ck"); -+ else if (fdiv_ctrl & UARTX_CLKSEL_PCLK) -+ parentClk = clk_get(NULL, "pclk2_ck"); -+ else -+ parentClk = clk_get(NULL, "clk13m_ck"); -+ -+ if (!IS_ERR(parentClk)) { -+ serial8250_disable_clock(port); -+ -+ if (clk_set_parent(uart_u6->uartClk, parentClk) != 0) -+ printk(KERN_WARNING "%s: set parent failed\n", __func__); -+ -+ serial8250_enable_clock(port); -+ clk_put(parentClk); -+ } -+ } -+ -+ writel(fdiv_m, port->membase + UARTX_FDIV_M_OFFSET); -+ writel(fdiv_n, port->membase + UARTX_FDIV_N_OFFSET); -+ writel(fdiv_ctrl, port->membase + UARTX_FDIV_CTRL_OFFSET); -+} ---- a/drivers/serial/Kconfig -+++ b/drivers/serial/Kconfig -@@ -163,6 +163,25 @@ config SERIAL_8250_MANY_PORTS - say N here to save some memory. You can also say Y if you have an - "intelligent" multiport card such as Cyclades, Digiboards, etc. - -+config SERIAL_8250_U6XXX -+ bool -+ depends on SERIAL_8250_EXTENDED && PLAT_U6XXX -+ default y -+ -+config SERIAL_8250_CUSTOM_CLOCK -+ bool "Support serial ports with tunable input clock frequency" -+ depends on SERIAL_8250_EXTENDED && SERIAL_8250_U6XXX -+ default y -+ help -+ Say Y here if your platform has specific registers to change UART clock frequency. -+ -+config SERIAL_8250_CUSTOM_MAX_BAUDRATE -+ int "Maximal reachable baudrate" -+ depends on SERIAL_8250_CUSTOM_CLOCK -+ default "3250000" -+ help -+ The value of the maximal reachable baudrate when tuning UART clock frequency (default value: 3.25MBds). -+ - # - # Multi-port serial cards - # ---- a/drivers/serial/Makefile -+++ b/drivers/serial/Makefile -@@ -28,6 +28,7 @@ obj-$(CONFIG_SERIAL_8250_BOCA) += 8250_b - obj-$(CONFIG_SERIAL_8250_EXAR_ST16C554) += 8250_exar_st16c554.o - obj-$(CONFIG_SERIAL_8250_HUB6) += 8250_hub6.o - obj-$(CONFIG_SERIAL_8250_MCA) += 8250_mca.o -+obj-$(CONFIG_SERIAL_8250_U6XXX) += 8250_u6.o - obj-$(CONFIG_SERIAL_AMBA_PL010) += amba-pl010.o - obj-$(CONFIG_SERIAL_AMBA_PL011) += amba-pl011.o - obj-$(CONFIG_SERIAL_CLPS711X) += clps711x.o ---- a/include/linux/serial_8250.h -+++ b/include/linux/serial_8250.h -@@ -72,4 +72,12 @@ extern int serial8250_find_port(struct u - extern int serial8250_find_port_for_earlycon(void); - extern int setup_early_serial8250_console(char *cmdline); - -+#ifdef CONFIG_SERIAL_8250_CUSTOM_CLOCK -+unsigned int serial8250_enable_clock(struct uart_port *port); -+unsigned int serial8250_disable_clock(struct uart_port *port); -+unsigned int serial8250_get_custom_clock(struct uart_port *port, -+ unsigned int baud); -+void serial8250_set_custom_clock(struct uart_port *port); -+#endif -+ - #endif |
