RE: [PATCH 01/12] Blackfin arch: add peripheral resource allocation support

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Wed, 2007-08-08 at 08:18 +0100, Hennerich, Michael wrote:
> 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)
> 

Yes, I got all changes in my local git-tree.
Actually I send out the patches ordered by time, next time I will send
out patch based on Joe's idea.

Please don't worry about this, I'll try my best to make sure never
missing the changes.

Thanks
- Bryan Wu

> -Michael
> 
> >-----Original Message-----
> >From: Bryan Wu [mailto:[email protected]]
> >Sent: Mittwoch, 8. August 2007 05:35
> >To: [email protected]; [email protected];
> >[email protected]
> >Cc: [email protected]; Michael Hennerich; Bryan Wu
> >Subject: [PATCH 01/12] Blackfin arch: add peripheral resource allocation
> >support
> >
> >From: Michael Hennerich <[email protected]>
> >
> >Signed-off-by: Michael Hennerich <[email protected]>
> >Signed-off-by: Bryan Wu <[email protected]>
> >---
> > 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 [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

[Index of Archives]     [Kernel Newbies]     [Netfilter]     [Bugtraq]     [Photo]     [Stuff]     [Gimp]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Video 4 Linux]     [Linux for the blind]     [Linux Resources]
  Powered by Linux