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