lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Date:	Wed, 8 Aug 2007 08:18:22 +0100
From:	"Hennerich, Michael" <Michael.Hennerich@...log.com>
To:	"Bryan Wu" <bryan.wu@...log.com>, <torvalds@...ux-foundation.org>,
	<linux-kernel@...r.kernel.org>, <akpm@...ux-foundation.org>
Cc:	<dbrownell@...rs.sourceforge.net>,
	"Michael Hennerich" <michael.hennerich@...log.com>
Subject: RE: [PATCH 01/12] Blackfin arch: add peripheral resource allocation support

Bryan,

This patch doesn't seem to be up to date.
It doesn't include the changes made based on feedback from Joe Perches.

Please see our SVN:
Modified: trunk/arch/blackfin/kernel/bfin_gpio.c (3489 => 3490)

-Michael

>-----Original Message-----
>From: Bryan Wu [mailto:bryan.wu@...log.com]
>Sent: Mittwoch, 8. August 2007 05:35
>To: torvalds@...ux-foundation.org; linux-kernel@...r.kernel.org;
>akpm@...ux-foundation.org
>Cc: dbrownell@...rs.sourceforge.net; Michael Hennerich; Bryan Wu
>Subject: [PATCH 01/12] Blackfin arch: add peripheral resource
allocation
>support
>
>From: Michael Hennerich <michael.hennerich@...log.com>
>
>Signed-off-by: Michael Hennerich <michael.hennerich@...log.com>
>Signed-off-by: Bryan Wu <bryan.wu@...log.com>
>---
> arch/blackfin/kernel/bfin_gpio.c                  |  272
>++++++++++++++++++---
> include/asm-blackfin/mach-bf533/bfin_serial_5xx.h |   11 +-
> include/asm-blackfin/mach-bf537/bfin_serial_5xx.h |   23 +-
> include/asm-blackfin/mach-bf537/portmux.h         |    2 +-
> include/asm-blackfin/mach-bf561/bfin_serial_5xx.h |   11 +-
> 5 files changed, 274 insertions(+), 45 deletions(-)
>
>diff --git a/arch/blackfin/kernel/bfin_gpio.c
>b/arch/blackfin/kernel/bfin_gpio.c
>index bafcfa5..9f30948 100644
>--- a/arch/blackfin/kernel/bfin_gpio.c
>+++ b/arch/blackfin/kernel/bfin_gpio.c
>@@ -84,6 +84,7 @@
> #include <linux/err.h>
> #include <asm/blackfin.h>
> #include <asm/gpio.h>
>+#include <asm/portmux.h>
> #include <linux/irq.h>
>
> #ifdef BF533_FAMILY
>@@ -115,7 +116,11 @@ static struct gpio_port_t
>*gpio_bankb[gpio_bank(MAX_BLACKFIN_GPIOS)] = {
> };
> #endif
>
>-static unsigned short reserved_map[gpio_bank(MAX_BLACKFIN_GPIOS)];
>+static unsigned short
reserved_gpio_map[gpio_bank(MAX_BLACKFIN_GPIOS)];
>+static unsigned short reserved_peri_map[gpio_bank(MAX_BLACKFIN_GPIOS +
>16)];
>+char *str_ident = NULL;
>+
>+#define RESOURCE_LABEL_SIZE 16
>
> #ifdef CONFIG_PM
> static unsigned short wakeup_map[gpio_bank(MAX_BLACKFIN_GPIOS)];
>@@ -143,13 +148,39 @@ inline int check_gpio(unsigned short gpio)
> 	return 0;
> }
>
>+static void set_label(unsigned short ident, const char *label)
>+{
>+
>+	if (label && str_ident) {
>+		strncpy(str_ident + ident * RESOURCE_LABEL_SIZE, label,
>+			 RESOURCE_LABEL_SIZE);
>+		str_ident[ident * RESOURCE_LABEL_SIZE +
>+			 RESOURCE_LABEL_SIZE - 1] = 0;
>+	}
>+}
>+
>+static char *get_label(unsigned short ident)
>+{
>+	if (!str_ident)
>+		return "UNKNOWN";
>+
>+	return (str_ident[ident * RESOURCE_LABEL_SIZE] ?
>+		(str_ident + ident * RESOURCE_LABEL_SIZE) : "UNKNOWN");
>+}
>+
>+static int cmp_label(unsigned short ident, const char *label)
>+{
>+	if (label && str_ident)
>+		return strncmp(str_ident + ident * RESOURCE_LABEL_SIZE,
>+				 label, strlen(label));
>+	else
>+		return -EINVAL;
>+}
>+
> #ifdef BF537_FAMILY
> static void port_setup(unsigned short gpio, unsigned short usage)
> {
> 	if (usage == GPIO_USAGE) {
>-		if (*port_fer[gpio_bank(gpio)] & gpio_bit(gpio))
>-			printk(KERN_WARNING "bfin-gpio: Possible
Conflict with
>Peripheral "
>-			       "usage and GPIO %d detected!\n", gpio);
> 		*port_fer[gpio_bank(gpio)] &= ~gpio_bit(gpio);
> 	} else
> 		*port_fer[gpio_bank(gpio)] |= gpio_bit(gpio);
>@@ -159,6 +190,56 @@ static void port_setup(unsigned short gpio,
unsigned
>short usage)
> # define port_setup(...)  do { } while (0)
> #endif
>
>+#ifdef BF537_FAMILY
>+
>+#define PMUX_LUT_RES		0
>+#define PMUX_LUT_OFFSET		1
>+#define PMUX_LUT_ENTRIES	41
>+#define PMUX_LUT_SIZE		2
>+
>+static unsigned short port_mux_lut[PMUX_LUT_ENTRIES][PMUX_LUT_SIZE] =
{
>+	{P_PPI0_D13, 11}, {P_PPI0_D14, 11}, {P_PPI0_D15, 11},
>+	{P_SPORT1_TFS, 11}, {P_SPORT1_TSCLK, 11}, {P_SPORT1_DTPRI, 11},
>+	{P_PPI0_D10, 10}, {P_PPI0_D11, 10}, {P_PPI0_D12, 10},
>+	{P_SPORT1_RSCLK, 10}, {P_SPORT1_RFS, 10}, {P_SPORT1_DRPRI, 10},
>+	{P_PPI0_D8, 9}, {P_PPI0_D9, 9}, {P_SPORT1_DRSEC, 9},
>+	{P_SPORT1_DTSEC, 9}, {P_TMR2, 8}, {P_PPI0_FS3, 8}, {P_TMR3, 7},
>+	{P_SPI0_SSEL4, 7}, {P_TMR4, 6}, {P_SPI0_SSEL5, 6}, {P_TMR5, 5},
>+	{P_SPI0_SSEL6, 5}, {P_UART1_RX, 4}, {P_UART1_TX, 4}, {P_TMR6,
4},
>+	{P_TMR7, 4}, {P_UART0_RX, 3}, {P_UART0_TX, 3}, {P_DMAR0, 3},
>+	{P_DMAR1, 3}, {P_SPORT0_DTSEC, 1}, {P_SPORT0_DRSEC, 1},
>+	{P_CAN0_RX, 1}, {P_CAN0_TX, 1}, {P_SPI0_SSEL7, 1},
>+	{P_SPORT0_TFS, 0}, {P_SPORT0_DTPRI, 0}, {P_SPI0_SSEL2, 0},
>+	{P_SPI0_SSEL3, 0}
>+};
>+
>+static void portmux_setup(unsigned short per, unsigned short function)
>+{
>+	u16 y, muxreg, offset;
>+
>+	for (y = 0; y < PMUX_LUT_ENTRIES; y++) {
>+		if (port_mux_lut[y][PMUX_LUT_RES] == per) {
>+
>+			/* SET PORTMUX REG */
>+
>+			offset = port_mux_lut[y][PMUX_LUT_OFFSET];
>+			muxreg = bfin_read_PORT_MUX();
>+
>+			if (offset != 1) {
>+				muxreg &= ~(1 << offset);
>+			} else {
>+				muxreg &= ~(3 << 1);
>+			}
>+
>+			muxreg |= (function << offset);
>+			bfin_write_PORT_MUX(muxreg);
>+		}
>+	}
>+}
>+
>+#else
>+# define portmux_setup(...)  do { } while (0)
>+#endif
>
> static void default_gpio(unsigned short gpio)
> {
>@@ -179,22 +260,15 @@ static void default_gpio(unsigned short gpio)
>
> static int __init bfin_gpio_init(void)
> {
>-	int i;
>-
>-	printk(KERN_INFO "Blackfin GPIO Controller\n");
>
>-	for (i = 0; i < MAX_BLACKFIN_GPIOS; i += GPIO_BANKSIZE)
>-		reserved_map[gpio_bank(i)] = 0;
>+	str_ident = kzalloc(RESOURCE_LABEL_SIZE * 256, GFP_KERNEL);
>+	if (!str_ident)
>+		return -ENOMEM;
>
>-#if defined(BF537_FAMILY) && (defined(CONFIG_BFIN_MAC) ||
>defined(CONFIG_BFIN_MAC_MODULE))
>-# if defined(CONFIG_BFIN_MAC_RMII)
>-	reserved_map[gpio_bank(PORT_H)] = 0xC373;
>-# else
>-	reserved_map[gpio_bank(PORT_H)] = 0xFFFF;
>-# endif
>-#endif
>+	printk(KERN_INFO "Blackfin GPIO Controller\n");
>
> 	return 0;
>+
> }
>
> arch_initcall(bfin_gpio_init);
>@@ -223,7 +297,7 @@ arch_initcall(bfin_gpio_init);
> void set_gpio_ ## name(unsigned short gpio, unsigned short arg) \
> { \
> 	unsigned long flags; \
>-	BUG_ON(!(reserved_map[gpio_bank(gpio)] & gpio_bit(gpio))); \
>+	BUG_ON(!(reserved_gpio_map[gpio_bank(gpio)] & gpio_bit(gpio)));
\
> 	local_irq_save(flags); \
> 	if (arg) \
> 		gpio_bankb[gpio_bank(gpio)]->name |= gpio_bit(gpio); \
>@@ -243,7 +317,7 @@ SET_GPIO(both)
> #define SET_GPIO_SC(name) \
> void set_gpio_ ## name(unsigned short gpio, unsigned short arg) \
> { \
>-	BUG_ON(!(reserved_map[gpio_bank(gpio)] & gpio_bit(gpio))); \
>+	BUG_ON(!(reserved_gpio_map[gpio_bank(gpio)] & gpio_bit(gpio)));
\
> 	if (arg) \
> 		gpio_bankb[gpio_bank(gpio)]->name ## _set =
gpio_bit(gpio); \
> 	else \
>@@ -258,7 +332,7 @@ SET_GPIO_SC(maskb)
> void set_gpio_data(unsigned short gpio, unsigned short arg)
> {
> 	unsigned long flags;
>-	BUG_ON(!(reserved_map[gpio_bank(gpio)] & gpio_bit(gpio)));
>+	BUG_ON(!(reserved_gpio_map[gpio_bank(gpio)] & gpio_bit(gpio)));
> 	local_irq_save(flags);
> 	if (arg)
> 		gpio_bankb[gpio_bank(gpio)]->data_set = gpio_bit(gpio);
>@@ -277,7 +351,7 @@ SET_GPIO_SC(data)
> void set_gpio_toggle(unsigned short gpio)
> {
> 	unsigned long flags;
>-	BUG_ON(!(reserved_map[gpio_bank(gpio)] & gpio_bit(gpio)));
>+	BUG_ON(!(reserved_gpio_map[gpio_bank(gpio)] & gpio_bit(gpio)));
> 	local_irq_save(flags);
> 	gpio_bankb[gpio_bank(gpio)]->toggle = gpio_bit(gpio);
> 	bfin_read_CHIPID();
>@@ -286,7 +360,7 @@ void set_gpio_toggle(unsigned short gpio)
> #else
> void set_gpio_toggle(unsigned short gpio)
> {
>-	BUG_ON(!(reserved_map[gpio_bank(gpio)] & gpio_bit(gpio)));
>+	BUG_ON(!(reserved_gpio_map[gpio_bank(gpio)] & gpio_bit(gpio)));
> 	gpio_bankb[gpio_bank(gpio)]->toggle = gpio_bit(gpio);
> }
> #endif
>@@ -350,7 +424,7 @@ unsigned short get_gpio_data(unsigned short gpio)
> {
> 	unsigned long flags;
> 	unsigned short ret;
>-	BUG_ON(!(reserved_map[gpio_bank(gpio)] & gpio_bit(gpio)));
>+	BUG_ON(!(reserved_gpio_map[gpio_bank(gpio)] & gpio_bit(gpio)));
> 	local_irq_save(flags);
> 	ret = 0x01 & (gpio_bankb[gpio_bank(gpio)]->data >>
gpio_sub_n(gpio));
> 	bfin_read_CHIPID();
>@@ -494,13 +568,14 @@ u32 gpio_pm_setup(void)
> 			gpio_bank_saved[bank].dir   =
gpio_bankb[bank]->dir;
> 			gpio_bank_saved[bank].edge  =
gpio_bankb[bank]->edge;
> 			gpio_bank_saved[bank].both  =
gpio_bankb[bank]->both;
>-			gpio_bank_saved[bank].reserved =
reserved_map[bank];
>+			gpio_bank_saved[bank].reserved =
>+						reserved_gpio_map[bank];
>
> 			gpio = i;
>
> 			while (mask) {
> 				if (mask & 1) {
>-					reserved_map[gpio_bank(gpio)] |=
>+
reserved_gpio_map[gpio_bank(gpio)] |=
> 							gpio_bit(gpio);
> 					bfin_gpio_wakeup_type(gpio,
> 						wakeup_flags_map[gpio]);
>@@ -540,7 +615,8 @@ void gpio_pm_restore(void)
> 			gpio_bankb[bank]->edge  =
gpio_bank_saved[bank].edge;
> 			gpio_bankb[bank]->both  =
gpio_bank_saved[bank].both;
>
>-			reserved_map[bank] =
gpio_bank_saved[bank].reserved;
>+			reserved_gpio_map[bank] =
>+					gpio_bank_saved[bank].reserved;
>
> 		}
>
>@@ -550,6 +626,140 @@ void gpio_pm_restore(void)
>
> #endif
>
>+
>+
>+
>+int peripheral_request(unsigned short per, const char *label)
>+{
>+	unsigned long flags;
>+	unsigned short ident = P_IDENT(per);
>+
>+	/*
>+	 * Don't cares are pins with only one dedicated function
>+	 */
>+
>+	if (per & P_DONTCARE)
>+		return 0;
>+
>+	if (!(per & P_DEFINED))
>+		return -ENODEV;
>+
>+	if (check_gpio(ident) < 0)
>+		return -EINVAL;
>+
>+	local_irq_save(flags);
>+
>+	if (unlikely(reserved_gpio_map[gpio_bank(ident)] &
gpio_bit(ident)))
>{
>+		printk(KERN_ERR
>+		       "%s: Peripheral %d is already reserved as GPIO by
%s
>!\n",
>+		       __FUNCTION__, ident, get_label(ident));
>+		dump_stack();
>+		local_irq_restore(flags);
>+		return -EBUSY;
>+	}
>+
>+	if (unlikely(reserved_peri_map[gpio_bank(ident)] &
gpio_bit(ident)))
>{
>+
>+	/*
>+	 * Pin functions like AMC address strobes my
>+	 * be requested and used by several drivers
>+	 */
>+
>+	if (!(per & P_MAYSHARE)) {
>+
>+	/*
>+	 * Allow that the identical pin function can
>+	 * be requested from the same driver twice
>+	 */
>+
>+		if (cmp_label(ident, label) == 0)
>+			goto anyway;
>+
>+			printk(KERN_ERR
>+			       "%s: Peripheral %d function %d is
already"
>+			       "reserved by %s !\n",
>+			       __FUNCTION__, ident, P_FUNCT2MUX(per),
>+				get_label(ident));
>+			dump_stack();
>+			local_irq_restore(flags);
>+			return -EBUSY;
>+		}
>+
>+	}
>+
>+anyway:
>+
>+
>+	portmux_setup(per, P_FUNCT2MUX(per));
>+
>+	port_setup(ident, PERIPHERAL_USAGE);
>+
>+	reserved_peri_map[gpio_bank(ident)] |= gpio_bit(ident);
>+	local_irq_restore(flags);
>+	set_label(ident, label);
>+
>+	return 0;
>+}
>+EXPORT_SYMBOL(peripheral_request);
>+
>+int peripheral_request_list(unsigned short per[], const char *label)
>+{
>+	u16 cnt;
>+	int ret;
>+
>+	for (cnt = 0; per[cnt] != 0; cnt++) {
>+		ret = peripheral_request(per[cnt], label);
>+		if (ret < 0)
>+			return ret;
>+	}
>+
>+	return 0;
>+}
>+EXPORT_SYMBOL(peripheral_request_list);
>+
>+void peripheral_free(unsigned short per)
>+{
>+	unsigned long flags;
>+	unsigned short ident = P_IDENT(per);
>+
>+	if (per & P_DONTCARE)
>+		return;
>+
>+	if (!(per & P_DEFINED))
>+		return;
>+
>+	if (check_gpio(ident) < 0)
>+		return;
>+
>+	local_irq_save(flags);
>+
>+	if (unlikely(!(reserved_peri_map[gpio_bank(ident)]
>+			 & gpio_bit(ident)))) {
>+		local_irq_restore(flags);
>+		return;
>+	}
>+
>+	if (!(per & P_MAYSHARE)) {
>+		port_setup(ident, GPIO_USAGE);
>+	}
>+
>+	reserved_peri_map[gpio_bank(ident)] &= ~gpio_bit(ident);
>+
>+	local_irq_restore(flags);
>+}
>+EXPORT_SYMBOL(peripheral_free);
>+
>+void peripheral_free_list(unsigned short per[])
>+{
>+	u16 cnt;
>+
>+	for (cnt = 0; per[cnt] != 0; cnt++) {
>+		peripheral_free(per[cnt]);
>+	}
>+
>+}
>+EXPORT_SYMBOL(peripheral_free_list);
>+
> /***********************************************************
> *
> * FUNCTIONS: Blackfin GPIO Driver
>@@ -574,13 +784,13 @@ int gpio_request(unsigned short gpio, const char
>*label)
>
> 	local_irq_save(flags);
>
>-	if (unlikely(reserved_map[gpio_bank(gpio)] & gpio_bit(gpio))) {
>+	if (unlikely(reserved_gpio_map[gpio_bank(gpio)] &
gpio_bit(gpio))) {
> 		printk(KERN_ERR "bfin-gpio: GPIO %d is already
reserved!\n",
>gpio);
> 		dump_stack();
> 		local_irq_restore(flags);
> 		return -EBUSY;
> 	}
>-	reserved_map[gpio_bank(gpio)] |= gpio_bit(gpio);
>+	reserved_gpio_map[gpio_bank(gpio)] |= gpio_bit(gpio);
>
> 	local_irq_restore(flags);
>
>@@ -599,7 +809,7 @@ void gpio_free(unsigned short gpio)
>
> 	local_irq_save(flags);
>
>-	if (unlikely(!(reserved_map[gpio_bank(gpio)] & gpio_bit(gpio))))
{
>+	if (unlikely(!(reserved_gpio_map[gpio_bank(gpio)] &
gpio_bit(gpio))))
>{
> 		printk(KERN_ERR "bfin-gpio: GPIO %d wasn't reserved!\n",
gpio);
> 		dump_stack();
> 		local_irq_restore(flags);
>@@ -608,7 +818,7 @@ void gpio_free(unsigned short gpio)
>
> 	default_gpio(gpio);
>
>-	reserved_map[gpio_bank(gpio)] &= ~gpio_bit(gpio);
>+	reserved_gpio_map[gpio_bank(gpio)] &= ~gpio_bit(gpio);
>
> 	local_irq_restore(flags);
> }
>@@ -618,7 +828,7 @@ void gpio_direction_input(unsigned short gpio)
> {
> 	unsigned long flags;
>
>-	BUG_ON(!(reserved_map[gpio_bank(gpio)] & gpio_bit(gpio)));
>+	BUG_ON(!(reserved_gpio_map[gpio_bank(gpio)] & gpio_bit(gpio)));
>
> 	local_irq_save(flags);
> 	gpio_bankb[gpio_bank(gpio)]->dir &= ~gpio_bit(gpio);
>@@ -631,7 +841,7 @@ void gpio_direction_output(unsigned short gpio)
> {
> 	unsigned long flags;
>
>-	BUG_ON(!(reserved_map[gpio_bank(gpio)] & gpio_bit(gpio)));
>+	BUG_ON(!(reserved_gpio_map[gpio_bank(gpio)] & gpio_bit(gpio)));
>
> 	local_irq_save(flags);
> 	gpio_bankb[gpio_bank(gpio)]->inen &= ~gpio_bit(gpio);
>diff --git a/include/asm-blackfin/mach-bf533/bfin_serial_5xx.h
>b/include/asm-blackfin/mach-bf533/bfin_serial_5xx.h
>index e043caf..69b9f8e 100644
>--- a/include/asm-blackfin/mach-bf533/bfin_serial_5xx.h
>+++ b/include/asm-blackfin/mach-bf533/bfin_serial_5xx.h
>@@ -1,5 +1,6 @@
> #include <linux/serial.h>
> #include <asm/dma.h>
>+#include <asm/portmux.h>
>
> #define NR_PORTS                1
>
>@@ -92,18 +93,24 @@ struct bfin_serial_res bfin_serial_resource[] = {
> 	}
> };
>
>+#define DRIVER_NAME "bfin-uart"
>
> int nr_ports = NR_PORTS;
> static void bfin_serial_hw_init(struct bfin_serial_port *uart)
> {
>
>+#ifdef CONFIG_SERIAL_BFIN_UART0
>+	peripheral_request(P_UART0_TX, DRIVER_NAME);
>+	peripheral_request(P_UART0_RX, DRIVER_NAME);
>+#endif
>+
> #ifdef CONFIG_SERIAL_BFIN_CTSRTS
> 	if (uart->cts_pin >= 0) {
>-		gpio_request(uart->cts_pin, NULL);
>+		gpio_request(uart->cts_pin, DRIVER_NAME);
> 		gpio_direction_input(uart->cts_pin);
> 	}
> 	if (uart->rts_pin >= 0) {
>-		gpio_request(uart->rts_pin, NULL);
>+		gpio_request(uart->rts_pin, DRIVER_NAME);
> 		gpio_direction_input(uart->rts_pin);
> 	}
> #endif
>diff --git a/include/asm-blackfin/mach-bf537/bfin_serial_5xx.h
>b/include/asm-blackfin/mach-bf537/bfin_serial_5xx.h
>index 8f5d9c4..6fb328f 100644
>--- a/include/asm-blackfin/mach-bf537/bfin_serial_5xx.h
>+++ b/include/asm-blackfin/mach-bf537/bfin_serial_5xx.h
>@@ -1,5 +1,6 @@
> #include <linux/serial.h>
> #include <asm/dma.h>
>+#include <asm/portmux.h>
>
> #define NR_PORTS		2
>
>@@ -122,25 +123,29 @@ struct bfin_serial_res bfin_serial_resource[] = {
>
> int nr_ports = ARRAY_SIZE(bfin_serial_resource);
>
>+#define DRIVER_NAME "bfin-uart"
>+
> static void bfin_serial_hw_init(struct bfin_serial_port *uart)
> {
>-	unsigned short val;
>-	val = bfin_read16(BFIN_PORT_MUX);
>-	val &= ~(PFDE | PFTE);
>-	bfin_write16(BFIN_PORT_MUX, val);
>
>-	val = bfin_read16(PORTF_FER);
>-	val |= 0xF;
>-	bfin_write16(PORTF_FER, val);
>+#ifdef CONFIG_SERIAL_BFIN_UART0
>+	peripheral_request(P_UART0_TX, DRIVER_NAME);
>+	peripheral_request(P_UART0_RX, DRIVER_NAME);
>+#endif
>+
>+#ifdef CONFIG_SERIAL_BFIN_UART1
>+	peripheral_request(P_UART1_TX, DRIVER_NAME);
>+	peripheral_request(P_UART1_RX, DRIVER_NAME);
>+#endif
>
> #ifdef CONFIG_SERIAL_BFIN_CTSRTS
> 	if (uart->cts_pin >= 0) {
>-		gpio_request(uart->cts_pin, NULL);
>+		gpio_request(uart->cts_pin, DRIVER_NAME);
> 		gpio_direction_input(uart->cts_pin);
> 	}
>
> 	if (uart->rts_pin >= 0) {
>-		gpio_request(uart->rts_pin, NULL);
>+		gpio_request(uart->rts_pin, DRIVER_NAME);
> 		gpio_direction_output(uart->rts_pin);
> 	}
> #endif
>diff --git a/include/asm-blackfin/mach-bf537/portmux.h b/include/asm-
>blackfin/mach-bf537/portmux.h
>index 23e13c5..7daa247 100644
>--- a/include/asm-blackfin/mach-bf537/portmux.h
>+++ b/include/asm-blackfin/mach-bf537/portmux.h
>@@ -106,4 +106,4 @@
> #define P_SPI0_SSEL2	(P_DEFINED | P_IDENT(PORT_PJ11) | P_FUNCT(1))
> #define P_SPI0_SSEL7	(P_DEFINED | P_IDENT(PORT_PJ5) | P_FUNCT(2))
>
>-#endif /* _MACH_PORTMUX_H_ */
>+#endif				/* _MACH_PORTMUX_H_ */
>diff --git a/include/asm-blackfin/mach-bf561/bfin_serial_5xx.h
>b/include/asm-blackfin/mach-bf561/bfin_serial_5xx.h
>index e043caf..69b9f8e 100644
>--- a/include/asm-blackfin/mach-bf561/bfin_serial_5xx.h
>+++ b/include/asm-blackfin/mach-bf561/bfin_serial_5xx.h
>@@ -1,5 +1,6 @@
> #include <linux/serial.h>
> #include <asm/dma.h>
>+#include <asm/portmux.h>
>
> #define NR_PORTS                1
>
>@@ -92,18 +93,24 @@ struct bfin_serial_res bfin_serial_resource[] = {
> 	}
> };
>
>+#define DRIVER_NAME "bfin-uart"
>
> int nr_ports = NR_PORTS;
> static void bfin_serial_hw_init(struct bfin_serial_port *uart)
> {
>
>+#ifdef CONFIG_SERIAL_BFIN_UART0
>+	peripheral_request(P_UART0_TX, DRIVER_NAME);
>+	peripheral_request(P_UART0_RX, DRIVER_NAME);
>+#endif
>+
> #ifdef CONFIG_SERIAL_BFIN_CTSRTS
> 	if (uart->cts_pin >= 0) {
>-		gpio_request(uart->cts_pin, NULL);
>+		gpio_request(uart->cts_pin, DRIVER_NAME);
> 		gpio_direction_input(uart->cts_pin);
> 	}
> 	if (uart->rts_pin >= 0) {
>-		gpio_request(uart->rts_pin, NULL);
>+		gpio_request(uart->rts_pin, DRIVER_NAME);
> 		gpio_direction_input(uart->rts_pin);
> 	}
> #endif
>--
>1.5.2
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ