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]; linux-kernel@vger.kernel.org;
> >[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/

Reply via email to