Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S933145AbXHHHuz (ORCPT ); Wed, 8 Aug 2007 03:50:55 -0400 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S1759363AbXHHHun (ORCPT ); Wed, 8 Aug 2007 03:50:43 -0400 Received: from nwd2mail11.analog.com ([137.71.25.57]:16960 "EHLO nwd2mail11.analog.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1757876AbXHHHul (ORCPT ); Wed, 8 Aug 2007 03:50:41 -0400 X-IronPort-AV: i="4.19,233,1183348800"; d="scan'208"; a="36655629:sNHT35699895" Subject: RE: [PATCH 01/12] Blackfin arch: add peripheral resource allocation support From: Bryan Wu Reply-To: bryan.wu@analog.com To: "Hennerich, Michael" Cc: Bryan Wu , torvalds@linux-foundation.org, linux-kernel@vger.kernel.org, akpm@linux-foundation.org, dbrownell@users.sourceforge.net, Michael Hennerich In-Reply-To: <600D5CB4DFD93545BF61FF01473D11AC0D404B49@limkexm2.ad.analog.com> References: <600D5CB4DFD93545BF61FF01473D11AC0D404B49@limkexm2.ad.analog.com> Content-Type: text/plain Content-Transfer-Encoding: 7bit Organization: Analog Devices, Inc. Date: Wed, 08 Aug 2007 15:49:53 +0800 Message-Id: <1186559393.32221.3.camel@roc-desktop> Mime-Version: 1.0 X-Mailer: Evolution 2.10.1 X-OriginalArrivalTime: 08 Aug 2007 07:50:36.0618 (UTC) FILETIME=[CE7D3AA0:01C7D990] Sender: linux-kernel-owner@vger.kernel.org X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 19350 Lines: 631 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:bryan.wu@analog.com] > >Sent: Mittwoch, 8. August 2007 05:35 > >To: torvalds@linux-foundation.org; linux-kernel@vger.kernel.org; > >akpm@linux-foundation.org > >Cc: dbrownell@users.sourceforge.net; Michael Hennerich; Bryan Wu > >Subject: [PATCH 01/12] Blackfin arch: add peripheral resource allocation > >support > > > >From: Michael Hennerich > > > >Signed-off-by: Michael Hennerich > >Signed-off-by: Bryan Wu > >--- > > 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 > > #include > > #include > >+#include > > #include > > > > #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 > > #include > >+#include > > > > #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 > > #include > >+#include > > > > #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 > > #include > >+#include > > > > #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@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/