11394f03221790a988afc3e4b3cb79f2e477246a9Bryan Wu/*
296f1050d3df105c9ae6c6ac224f370199ea82fcdRobin Getz * Copyright 2006-2009 Analog Devices Inc.
31394f03221790a988afc3e4b3cb79f2e477246a9Bryan Wu *
496f1050d3df105c9ae6c6ac224f370199ea82fcdRobin Getz * Licensed under the GPL-2 or later.
51394f03221790a988afc3e4b3cb79f2e477246a9Bryan Wu */
61394f03221790a988afc3e4b3cb79f2e477246a9Bryan Wu
71394f03221790a988afc3e4b3cb79f2e477246a9Bryan Wu#ifndef __ARCH_BLACKFIN_GPIO_H__
81394f03221790a988afc3e4b3cb79f2e477246a9Bryan Wu#define __ARCH_BLACKFIN_GPIO_H__
91394f03221790a988afc3e4b3cb79f2e477246a9Bryan Wu
10812ae98f0849fbceb32c6d21bcdda42b40264c82Mike Frysinger#define gpio_bank(x)	((x) >> 4)
11812ae98f0849fbceb32c6d21bcdda42b40264c82Mike Frysinger#define gpio_bit(x)	(1<<((x) & 0xF))
12812ae98f0849fbceb32c6d21bcdda42b40264c82Mike Frysinger#define gpio_sub_n(x)	((x) & 0xF)
131394f03221790a988afc3e4b3cb79f2e477246a9Bryan Wu
14812ae98f0849fbceb32c6d21bcdda42b40264c82Mike Frysinger#define GPIO_BANKSIZE	16
15812ae98f0849fbceb32c6d21bcdda42b40264c82Mike Frysinger#define GPIO_BANK_NUM	DIV_ROUND_UP(MAX_BLACKFIN_GPIOS, GPIO_BANKSIZE)
161394f03221790a988afc3e4b3cb79f2e477246a9Bryan Wu
17983e1016050e3bb9d64bde0f7d4792a6fcb248d8Michael Hennerich#include <mach/gpio.h>
18983e1016050e3bb9d64bde0f7d4792a6fcb248d8Michael Hennerich
191394f03221790a988afc3e4b3cb79f2e477246a9Bryan Wu#define PERIPHERAL_USAGE 1
201394f03221790a988afc3e4b3cb79f2e477246a9Bryan Wu#define GPIO_USAGE 0
211394f03221790a988afc3e4b3cb79f2e477246a9Bryan Wu
2201f8e34c9855e5aa4f56a73b8d5ea8f7613dbb7eMike Frysinger#ifndef BFIN_GPIO_PINT
2301f8e34c9855e5aa4f56a73b8d5ea8f7613dbb7eMike Frysinger# define BFIN_GPIO_PINT 0
2401f8e34c9855e5aa4f56a73b8d5ea8f7613dbb7eMike Frysinger#endif
2501f8e34c9855e5aa4f56a73b8d5ea8f7613dbb7eMike Frysinger
261394f03221790a988afc3e4b3cb79f2e477246a9Bryan Wu#ifndef __ASSEMBLY__
271394f03221790a988afc3e4b3cb79f2e477246a9Bryan Wu
28ffb7fc0f6d2d630cb9e6e37e67993aaa342819f1Sonic Zhang#ifndef CONFIG_PINCTRL
29ffb7fc0f6d2d630cb9e6e37e67993aaa342819f1Sonic Zhang
307f4f69f991146fa976cbc914a50285b2afc0ad93Joachim Eastwood#include <linux/compiler.h>
31ffb7fc0f6d2d630cb9e6e37e67993aaa342819f1Sonic Zhang#include <asm/blackfin.h>
32ffb7fc0f6d2d630cb9e6e37e67993aaa342819f1Sonic Zhang#include <asm/portmux.h>
33ffb7fc0f6d2d630cb9e6e37e67993aaa342819f1Sonic Zhang#include <asm/irq_handler.h>
347f4f69f991146fa976cbc914a50285b2afc0ad93Joachim Eastwood
351394f03221790a988afc3e4b3cb79f2e477246a9Bryan Wu/***********************************************************
361394f03221790a988afc3e4b3cb79f2e477246a9Bryan Wu*
371394f03221790a988afc3e4b3cb79f2e477246a9Bryan Wu* FUNCTIONS: Blackfin General Purpose Ports Access Functions
381394f03221790a988afc3e4b3cb79f2e477246a9Bryan Wu*
391394f03221790a988afc3e4b3cb79f2e477246a9Bryan Wu* INPUTS/OUTPUTS:
401394f03221790a988afc3e4b3cb79f2e477246a9Bryan Wu* gpio - GPIO Number between 0 and MAX_BLACKFIN_GPIOS
411394f03221790a988afc3e4b3cb79f2e477246a9Bryan Wu*
421394f03221790a988afc3e4b3cb79f2e477246a9Bryan Wu*
431394f03221790a988afc3e4b3cb79f2e477246a9Bryan Wu* DESCRIPTION: These functions abstract direct register access
441394f03221790a988afc3e4b3cb79f2e477246a9Bryan Wu*              to Blackfin processor General Purpose
451394f03221790a988afc3e4b3cb79f2e477246a9Bryan Wu*              Ports Regsiters
461394f03221790a988afc3e4b3cb79f2e477246a9Bryan Wu*
471394f03221790a988afc3e4b3cb79f2e477246a9Bryan Wu* CAUTION: These functions do not belong to the GPIO Driver API
481394f03221790a988afc3e4b3cb79f2e477246a9Bryan Wu*************************************************************
491394f03221790a988afc3e4b3cb79f2e477246a9Bryan Wu* MODIFICATION HISTORY :
501394f03221790a988afc3e4b3cb79f2e477246a9Bryan Wu**************************************************************/
511394f03221790a988afc3e4b3cb79f2e477246a9Bryan Wu
52a2c8cfef6abb33ee49d80c58391ebfc4f94221efMichael Hennerichvoid set_gpio_dir(unsigned, unsigned short);
53a2c8cfef6abb33ee49d80c58391ebfc4f94221efMichael Hennerichvoid set_gpio_inen(unsigned, unsigned short);
54a2c8cfef6abb33ee49d80c58391ebfc4f94221efMichael Hennerichvoid set_gpio_polar(unsigned, unsigned short);
55a2c8cfef6abb33ee49d80c58391ebfc4f94221efMichael Hennerichvoid set_gpio_edge(unsigned, unsigned short);
56a2c8cfef6abb33ee49d80c58391ebfc4f94221efMichael Hennerichvoid set_gpio_both(unsigned, unsigned short);
57a2c8cfef6abb33ee49d80c58391ebfc4f94221efMichael Hennerichvoid set_gpio_data(unsigned, unsigned short);
58a2c8cfef6abb33ee49d80c58391ebfc4f94221efMichael Hennerichvoid set_gpio_maska(unsigned, unsigned short);
59a2c8cfef6abb33ee49d80c58391ebfc4f94221efMichael Hennerichvoid set_gpio_maskb(unsigned, unsigned short);
60a2c8cfef6abb33ee49d80c58391ebfc4f94221efMichael Hennerichvoid set_gpio_toggle(unsigned);
61a2c8cfef6abb33ee49d80c58391ebfc4f94221efMichael Hennerichvoid set_gpiop_dir(unsigned, unsigned short);
62a2c8cfef6abb33ee49d80c58391ebfc4f94221efMichael Hennerichvoid set_gpiop_inen(unsigned, unsigned short);
63a2c8cfef6abb33ee49d80c58391ebfc4f94221efMichael Hennerichvoid set_gpiop_polar(unsigned, unsigned short);
64a2c8cfef6abb33ee49d80c58391ebfc4f94221efMichael Hennerichvoid set_gpiop_edge(unsigned, unsigned short);
65a2c8cfef6abb33ee49d80c58391ebfc4f94221efMichael Hennerichvoid set_gpiop_both(unsigned, unsigned short);
66a2c8cfef6abb33ee49d80c58391ebfc4f94221efMichael Hennerichvoid set_gpiop_data(unsigned, unsigned short);
67a2c8cfef6abb33ee49d80c58391ebfc4f94221efMichael Hennerichvoid set_gpiop_maska(unsigned, unsigned short);
68a2c8cfef6abb33ee49d80c58391ebfc4f94221efMichael Hennerichvoid set_gpiop_maskb(unsigned, unsigned short);
69a2c8cfef6abb33ee49d80c58391ebfc4f94221efMichael Hennerichunsigned short get_gpio_dir(unsigned);
70a2c8cfef6abb33ee49d80c58391ebfc4f94221efMichael Hennerichunsigned short get_gpio_inen(unsigned);
71a2c8cfef6abb33ee49d80c58391ebfc4f94221efMichael Hennerichunsigned short get_gpio_polar(unsigned);
72a2c8cfef6abb33ee49d80c58391ebfc4f94221efMichael Hennerichunsigned short get_gpio_edge(unsigned);
73a2c8cfef6abb33ee49d80c58391ebfc4f94221efMichael Hennerichunsigned short get_gpio_both(unsigned);
74a2c8cfef6abb33ee49d80c58391ebfc4f94221efMichael Hennerichunsigned short get_gpio_maska(unsigned);
75a2c8cfef6abb33ee49d80c58391ebfc4f94221efMichael Hennerichunsigned short get_gpio_maskb(unsigned);
76a2c8cfef6abb33ee49d80c58391ebfc4f94221efMichael Hennerichunsigned short get_gpio_data(unsigned);
77a2c8cfef6abb33ee49d80c58391ebfc4f94221efMichael Hennerichunsigned short get_gpiop_dir(unsigned);
78a2c8cfef6abb33ee49d80c58391ebfc4f94221efMichael Hennerichunsigned short get_gpiop_inen(unsigned);
79a2c8cfef6abb33ee49d80c58391ebfc4f94221efMichael Hennerichunsigned short get_gpiop_polar(unsigned);
80a2c8cfef6abb33ee49d80c58391ebfc4f94221efMichael Hennerichunsigned short get_gpiop_edge(unsigned);
81a2c8cfef6abb33ee49d80c58391ebfc4f94221efMichael Hennerichunsigned short get_gpiop_both(unsigned);
82a2c8cfef6abb33ee49d80c58391ebfc4f94221efMichael Hennerichunsigned short get_gpiop_maska(unsigned);
83a2c8cfef6abb33ee49d80c58391ebfc4f94221efMichael Hennerichunsigned short get_gpiop_maskb(unsigned);
84a2c8cfef6abb33ee49d80c58391ebfc4f94221efMichael Hennerichunsigned short get_gpiop_data(unsigned);
851394f03221790a988afc3e4b3cb79f2e477246a9Bryan Wu
861394f03221790a988afc3e4b3cb79f2e477246a9Bryan Wustruct gpio_port_t {
871394f03221790a988afc3e4b3cb79f2e477246a9Bryan Wu	unsigned short data;
881394f03221790a988afc3e4b3cb79f2e477246a9Bryan Wu	unsigned short dummy1;
891394f03221790a988afc3e4b3cb79f2e477246a9Bryan Wu	unsigned short data_clear;
901394f03221790a988afc3e4b3cb79f2e477246a9Bryan Wu	unsigned short dummy2;
911394f03221790a988afc3e4b3cb79f2e477246a9Bryan Wu	unsigned short data_set;
921394f03221790a988afc3e4b3cb79f2e477246a9Bryan Wu	unsigned short dummy3;
931394f03221790a988afc3e4b3cb79f2e477246a9Bryan Wu	unsigned short toggle;
941394f03221790a988afc3e4b3cb79f2e477246a9Bryan Wu	unsigned short dummy4;
951394f03221790a988afc3e4b3cb79f2e477246a9Bryan Wu	unsigned short maska;
961394f03221790a988afc3e4b3cb79f2e477246a9Bryan Wu	unsigned short dummy5;
971394f03221790a988afc3e4b3cb79f2e477246a9Bryan Wu	unsigned short maska_clear;
981394f03221790a988afc3e4b3cb79f2e477246a9Bryan Wu	unsigned short dummy6;
991394f03221790a988afc3e4b3cb79f2e477246a9Bryan Wu	unsigned short maska_set;
1001394f03221790a988afc3e4b3cb79f2e477246a9Bryan Wu	unsigned short dummy7;
1011394f03221790a988afc3e4b3cb79f2e477246a9Bryan Wu	unsigned short maska_toggle;
1021394f03221790a988afc3e4b3cb79f2e477246a9Bryan Wu	unsigned short dummy8;
1031394f03221790a988afc3e4b3cb79f2e477246a9Bryan Wu	unsigned short maskb;
1041394f03221790a988afc3e4b3cb79f2e477246a9Bryan Wu	unsigned short dummy9;
1051394f03221790a988afc3e4b3cb79f2e477246a9Bryan Wu	unsigned short maskb_clear;
1061394f03221790a988afc3e4b3cb79f2e477246a9Bryan Wu	unsigned short dummy10;
1071394f03221790a988afc3e4b3cb79f2e477246a9Bryan Wu	unsigned short maskb_set;
1081394f03221790a988afc3e4b3cb79f2e477246a9Bryan Wu	unsigned short dummy11;
1091394f03221790a988afc3e4b3cb79f2e477246a9Bryan Wu	unsigned short maskb_toggle;
1101394f03221790a988afc3e4b3cb79f2e477246a9Bryan Wu	unsigned short dummy12;
1111394f03221790a988afc3e4b3cb79f2e477246a9Bryan Wu	unsigned short dir;
1121394f03221790a988afc3e4b3cb79f2e477246a9Bryan Wu	unsigned short dummy13;
1131394f03221790a988afc3e4b3cb79f2e477246a9Bryan Wu	unsigned short polar;
1141394f03221790a988afc3e4b3cb79f2e477246a9Bryan Wu	unsigned short dummy14;
1151394f03221790a988afc3e4b3cb79f2e477246a9Bryan Wu	unsigned short edge;
1161394f03221790a988afc3e4b3cb79f2e477246a9Bryan Wu	unsigned short dummy15;
1171394f03221790a988afc3e4b3cb79f2e477246a9Bryan Wu	unsigned short both;
1181394f03221790a988afc3e4b3cb79f2e477246a9Bryan Wu	unsigned short dummy16;
1191394f03221790a988afc3e4b3cb79f2e477246a9Bryan Wu	unsigned short inen;
1201394f03221790a988afc3e4b3cb79f2e477246a9Bryan Wu};
1211394f03221790a988afc3e4b3cb79f2e477246a9Bryan Wu
122621dd2474399237ca556a54037c3b8557e80d021Michael Hennerich#ifdef BFIN_SPECIAL_GPIO_BANKS
123621dd2474399237ca556a54037c3b8557e80d021Michael Hennerichvoid bfin_special_gpio_free(unsigned gpio);
124621dd2474399237ca556a54037c3b8557e80d021Michael Hennerichint bfin_special_gpio_request(unsigned gpio, const char *label);
1259466a0510a5445d81eaf33affc20e2f7e2e718fbMike Frysinger# ifdef CONFIG_PM
1269466a0510a5445d81eaf33affc20e2f7e2e718fbMike Frysingervoid bfin_special_gpio_pm_hibernate_restore(void);
1279466a0510a5445d81eaf33affc20e2f7e2e718fbMike Frysingervoid bfin_special_gpio_pm_hibernate_suspend(void);
1289466a0510a5445d81eaf33affc20e2f7e2e718fbMike Frysinger# endif
129621dd2474399237ca556a54037c3b8557e80d021Michael Hennerich#endif
130621dd2474399237ca556a54037c3b8557e80d021Michael Hennerich
1311394f03221790a988afc3e4b3cb79f2e477246a9Bryan Wu#ifdef CONFIG_PM
132ffb7fc0f6d2d630cb9e6e37e67993aaa342819f1Sonic Zhangvoid bfin_gpio_pm_hibernate_restore(void);
133ffb7fc0f6d2d630cb9e6e37e67993aaa342819f1Sonic Zhangvoid bfin_gpio_pm_hibernate_suspend(void);
134ffb7fc0f6d2d630cb9e6e37e67993aaa342819f1Sonic Zhangint bfin_gpio_pm_wakeup_ctrl(unsigned gpio, unsigned ctrl);
135ffb7fc0f6d2d630cb9e6e37e67993aaa342819f1Sonic Zhangint bfin_gpio_pm_standby_ctrl(unsigned ctrl);
1361efc80b53eb54770139219f99657abd92595fc86Michael Hennerich
137bb84dbf69b0730fcc78c275f900ed74b2b8453a5Michael Hennerichstatic inline int bfin_pm_standby_setup(void)
138bb84dbf69b0730fcc78c275f900ed74b2b8453a5Michael Hennerich{
139ffb7fc0f6d2d630cb9e6e37e67993aaa342819f1Sonic Zhang	return bfin_gpio_pm_standby_ctrl(1);
140bb84dbf69b0730fcc78c275f900ed74b2b8453a5Michael Hennerich}
141bb84dbf69b0730fcc78c275f900ed74b2b8453a5Michael Hennerich
142bb84dbf69b0730fcc78c275f900ed74b2b8453a5Michael Hennerichstatic inline void bfin_pm_standby_restore(void)
143bb84dbf69b0730fcc78c275f900ed74b2b8453a5Michael Hennerich{
144ffb7fc0f6d2d630cb9e6e37e67993aaa342819f1Sonic Zhang	bfin_gpio_pm_standby_ctrl(0);
145bb84dbf69b0730fcc78c275f900ed74b2b8453a5Michael Hennerich}
1461efc80b53eb54770139219f99657abd92595fc86Michael Hennerich
1471394f03221790a988afc3e4b3cb79f2e477246a9Bryan Wu
1481394f03221790a988afc3e4b3cb79f2e477246a9Bryan Wustruct gpio_port_s {
1491394f03221790a988afc3e4b3cb79f2e477246a9Bryan Wu	unsigned short data;
1501394f03221790a988afc3e4b3cb79f2e477246a9Bryan Wu	unsigned short maska;
1511394f03221790a988afc3e4b3cb79f2e477246a9Bryan Wu	unsigned short maskb;
1521394f03221790a988afc3e4b3cb79f2e477246a9Bryan Wu	unsigned short dir;
1531394f03221790a988afc3e4b3cb79f2e477246a9Bryan Wu	unsigned short polar;
1541394f03221790a988afc3e4b3cb79f2e477246a9Bryan Wu	unsigned short edge;
1551394f03221790a988afc3e4b3cb79f2e477246a9Bryan Wu	unsigned short both;
1561394f03221790a988afc3e4b3cb79f2e477246a9Bryan Wu	unsigned short inen;
1571394f03221790a988afc3e4b3cb79f2e477246a9Bryan Wu
1581394f03221790a988afc3e4b3cb79f2e477246a9Bryan Wu	unsigned short fer;
159581d62ab304fb43d2ae4de06527676661b171cf6Michael Hennerich	unsigned short reserved;
1601efc80b53eb54770139219f99657abd92595fc86Michael Hennerich	unsigned short mux;
1611394f03221790a988afc3e4b3cb79f2e477246a9Bryan Wu};
1621394f03221790a988afc3e4b3cb79f2e477246a9Bryan Wu#endif /*CONFIG_PM*/
16301f8e34c9855e5aa4f56a73b8d5ea8f7613dbb7eMike Frysinger
1641394f03221790a988afc3e4b3cb79f2e477246a9Bryan Wu/***********************************************************
1651394f03221790a988afc3e4b3cb79f2e477246a9Bryan Wu*
1661394f03221790a988afc3e4b3cb79f2e477246a9Bryan Wu* FUNCTIONS: Blackfin GPIO Driver
1671394f03221790a988afc3e4b3cb79f2e477246a9Bryan Wu*
1681394f03221790a988afc3e4b3cb79f2e477246a9Bryan Wu* INPUTS/OUTPUTS:
1691394f03221790a988afc3e4b3cb79f2e477246a9Bryan Wu* gpio - GPIO Number between 0 and MAX_BLACKFIN_GPIOS
1701394f03221790a988afc3e4b3cb79f2e477246a9Bryan Wu*
1711394f03221790a988afc3e4b3cb79f2e477246a9Bryan Wu*
1721394f03221790a988afc3e4b3cb79f2e477246a9Bryan Wu* DESCRIPTION: Blackfin GPIO Driver API
1731394f03221790a988afc3e4b3cb79f2e477246a9Bryan Wu*
1741394f03221790a988afc3e4b3cb79f2e477246a9Bryan Wu* CAUTION:
1751394f03221790a988afc3e4b3cb79f2e477246a9Bryan Wu*************************************************************
1761394f03221790a988afc3e4b3cb79f2e477246a9Bryan Wu* MODIFICATION HISTORY :
1771394f03221790a988afc3e4b3cb79f2e477246a9Bryan Wu**************************************************************/
1789570ff4af6920c5992eb91141d71fc94127d864bGraf Yangint bfin_gpio_irq_request(unsigned gpio, const char *label);
1799570ff4af6920c5992eb91141d71fc94127d864bGraf Yangvoid bfin_gpio_irq_free(unsigned gpio);
180ffb7fc0f6d2d630cb9e6e37e67993aaa342819f1Sonic Zhangvoid bfin_gpio_irq_prepare(unsigned gpio);
181ffb7fc0f6d2d630cb9e6e37e67993aaa342819f1Sonic Zhang
182ffb7fc0f6d2d630cb9e6e37e67993aaa342819f1Sonic Zhangstatic inline int irq_to_gpio(unsigned irq)
183ffb7fc0f6d2d630cb9e6e37e67993aaa342819f1Sonic Zhang{
184ffb7fc0f6d2d630cb9e6e37e67993aaa342819f1Sonic Zhang	return irq - GPIO_IRQ_BASE;
185ffb7fc0f6d2d630cb9e6e37e67993aaa342819f1Sonic Zhang}
186ffb7fc0f6d2d630cb9e6e37e67993aaa342819f1Sonic Zhang#endif /* CONFIG_PINCTRL */
1871394f03221790a988afc3e4b3cb79f2e477246a9Bryan Wu
1887f4f69f991146fa976cbc914a50285b2afc0ad93Joachim Eastwood#include <asm/irq.h>
1897f4f69f991146fa976cbc914a50285b2afc0ad93Joachim Eastwood#include <asm/errno.h>
1907f4f69f991146fa976cbc914a50285b2afc0ad93Joachim Eastwood
191a4f0b32c331a3da1dd1336f1691504268c63fc14Michael Hennerich#include <asm-generic/gpio.h>		/* cansleep wrappers */
192a4f0b32c331a3da1dd1336f1691504268c63fc14Michael Hennerich
193a4f0b32c331a3da1dd1336f1691504268c63fc14Michael Hennerichstatic inline int gpio_get_value(unsigned int gpio)
194a4f0b32c331a3da1dd1336f1691504268c63fc14Michael Hennerich{
195ffb7fc0f6d2d630cb9e6e37e67993aaa342819f1Sonic Zhang	return __gpio_get_value(gpio);
196a4f0b32c331a3da1dd1336f1691504268c63fc14Michael Hennerich}
197a4f0b32c331a3da1dd1336f1691504268c63fc14Michael Hennerich
198a4f0b32c331a3da1dd1336f1691504268c63fc14Michael Hennerichstatic inline void gpio_set_value(unsigned int gpio, int value)
199a4f0b32c331a3da1dd1336f1691504268c63fc14Michael Hennerich{
200ffb7fc0f6d2d630cb9e6e37e67993aaa342819f1Sonic Zhang	__gpio_set_value(gpio, value);
201a4f0b32c331a3da1dd1336f1691504268c63fc14Michael Hennerich}
202a4f0b32c331a3da1dd1336f1691504268c63fc14Michael Hennerich
203a4f0b32c331a3da1dd1336f1691504268c63fc14Michael Hennerichstatic inline int gpio_cansleep(unsigned int gpio)
204a4f0b32c331a3da1dd1336f1691504268c63fc14Michael Hennerich{
205a4f0b32c331a3da1dd1336f1691504268c63fc14Michael Hennerich	return __gpio_cansleep(gpio);
206a4f0b32c331a3da1dd1336f1691504268c63fc14Michael Hennerich}
207a4f0b32c331a3da1dd1336f1691504268c63fc14Michael Hennerich
2087f4f69f991146fa976cbc914a50285b2afc0ad93Joachim Eastwoodstatic inline int gpio_to_irq(unsigned gpio)
2097f4f69f991146fa976cbc914a50285b2afc0ad93Joachim Eastwood{
2107f4f69f991146fa976cbc914a50285b2afc0ad93Joachim Eastwood	return __gpio_to_irq(gpio);
2117f4f69f991146fa976cbc914a50285b2afc0ad93Joachim Eastwood}
2121394f03221790a988afc3e4b3cb79f2e477246a9Bryan Wu#endif /* __ASSEMBLY__ */
2131394f03221790a988afc3e4b3cb79f2e477246a9Bryan Wu
2141394f03221790a988afc3e4b3cb79f2e477246a9Bryan Wu#endif /* __ARCH_BLACKFIN_GPIO_H__ */
215