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:[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