Merge branch 'samsung/cleanup' into next/cleanup
From Kukjin Kim: Here, there are cleanup patches for Samsung v3.7 and most of them are related to cleanup Samsung specific gpio API. * samsung/cleanup: gpio: samsung: Update documentation ARM: S3C24XX: Use module_platform_driver macro in mach-osiris-dvs.c ARM: S3C24XX: Use module_platform_driver macro in h1940-bluetooth.c gpio-samsung: Remove now unused s3c2410_gpio* API ARM: S3C24XX: Remove obsolete GPIO API declarations ARM: S3C24XX: Convert users of s3c2410_gpio_setpin to gpiolib API ARM: EXYNOS: cleanup unused code related to GPS
This commit is contained in:
commit
928487a1ce
|
@ -1,4 +1,4 @@
|
||||||
S3C2410 GPIO Control
|
S3C24XX GPIO Control
|
||||||
====================
|
====================
|
||||||
|
|
||||||
Introduction
|
Introduction
|
||||||
|
@ -12,7 +12,7 @@ Introduction
|
||||||
of the s3c2410 GPIO system, please read the Samsung provided
|
of the s3c2410 GPIO system, please read the Samsung provided
|
||||||
data-sheet/users manual to find out the complete list.
|
data-sheet/users manual to find out the complete list.
|
||||||
|
|
||||||
See Documentation/arm/Samsung/GPIO.txt for the core implemetation.
|
See Documentation/arm/Samsung/GPIO.txt for the core implementation.
|
||||||
|
|
||||||
|
|
||||||
GPIOLIB
|
GPIOLIB
|
||||||
|
@ -41,8 +41,8 @@ GPIOLIB
|
||||||
GPIOLIB conversion
|
GPIOLIB conversion
|
||||||
------------------
|
------------------
|
||||||
|
|
||||||
If you need to convert your board or driver to use gpiolib from the exiting
|
If you need to convert your board or driver to use gpiolib from the phased
|
||||||
s3c2410 api, then here are some notes on the process.
|
out s3c2410 API, then here are some notes on the process.
|
||||||
|
|
||||||
1) If your board is exclusively using an GPIO, say to control peripheral
|
1) If your board is exclusively using an GPIO, say to control peripheral
|
||||||
power, then it will require to claim the gpio with gpio_request() before
|
power, then it will require to claim the gpio with gpio_request() before
|
||||||
|
@ -55,7 +55,7 @@ s3c2410 api, then here are some notes on the process.
|
||||||
as they have the same arguments, and can either take the pin specific
|
as they have the same arguments, and can either take the pin specific
|
||||||
values, or the more generic special-function-number arguments.
|
values, or the more generic special-function-number arguments.
|
||||||
|
|
||||||
3) s3c2410_gpio_pullup() changs have the problem that whilst the
|
3) s3c2410_gpio_pullup() changes have the problem that whilst the
|
||||||
s3c2410_gpio_pullup(x, 1) can be easily translated to the
|
s3c2410_gpio_pullup(x, 1) can be easily translated to the
|
||||||
s3c_gpio_setpull(x, S3C_GPIO_PULL_NONE), the s3c2410_gpio_pullup(x, 0)
|
s3c_gpio_setpull(x, S3C_GPIO_PULL_NONE), the s3c2410_gpio_pullup(x, 0)
|
||||||
are not so easy.
|
are not so easy.
|
||||||
|
@ -74,7 +74,7 @@ s3c2410 api, then here are some notes on the process.
|
||||||
when using gpio_get_value() on an output pin (s3c2410_gpio_getpin
|
when using gpio_get_value() on an output pin (s3c2410_gpio_getpin
|
||||||
would return the value the pin is supposed to be outputting).
|
would return the value the pin is supposed to be outputting).
|
||||||
|
|
||||||
6) s3c2410_gpio_getirq() should be directly replacable with the
|
6) s3c2410_gpio_getirq() should be directly replaceable with the
|
||||||
gpio_to_irq() call.
|
gpio_to_irq() call.
|
||||||
|
|
||||||
The s3c2410_gpio and gpio_ calls have always operated on the same gpio
|
The s3c2410_gpio and gpio_ calls have always operated on the same gpio
|
||||||
|
@ -105,7 +105,7 @@ PIN Numbers
|
||||||
-----------
|
-----------
|
||||||
|
|
||||||
Each pin has an unique number associated with it in regs-gpio.h,
|
Each pin has an unique number associated with it in regs-gpio.h,
|
||||||
eg S3C2410_GPA(0) or S3C2410_GPF(1). These defines are used to tell
|
e.g. S3C2410_GPA(0) or S3C2410_GPF(1). These defines are used to tell
|
||||||
the GPIO functions which pin is to be used.
|
the GPIO functions which pin is to be used.
|
||||||
|
|
||||||
With the conversion to gpiolib, there is no longer a direct conversion
|
With the conversion to gpiolib, there is no longer a direct conversion
|
||||||
|
@ -120,31 +120,27 @@ Configuring a pin
|
||||||
The following function allows the configuration of a given pin to
|
The following function allows the configuration of a given pin to
|
||||||
be changed.
|
be changed.
|
||||||
|
|
||||||
void s3c2410_gpio_cfgpin(unsigned int pin, unsigned int function);
|
void s3c_gpio_cfgpin(unsigned int pin, unsigned int function);
|
||||||
|
|
||||||
Eg:
|
e.g.:
|
||||||
|
|
||||||
s3c2410_gpio_cfgpin(S3C2410_GPA(0), S3C2410_GPA0_ADDR0);
|
s3c_gpio_cfgpin(S3C2410_GPA(0), S3C_GPIO_SFN(1));
|
||||||
s3c2410_gpio_cfgpin(S3C2410_GPE(8), S3C2410_GPE8_SDDAT1);
|
s3c_gpio_cfgpin(S3C2410_GPE(8), S3C_GPIO_SFN(2));
|
||||||
|
|
||||||
which would turn GPA(0) into the lowest Address line A0, and set
|
which would turn GPA(0) into the lowest Address line A0, and set
|
||||||
GPE(8) to be connected to the SDIO/MMC controller's SDDAT1 line.
|
GPE(8) to be connected to the SDIO/MMC controller's SDDAT1 line.
|
||||||
|
|
||||||
The s3c_gpio_cfgpin() call is a functional replacement for this call.
|
|
||||||
|
|
||||||
|
|
||||||
Reading the current configuration
|
Reading the current configuration
|
||||||
---------------------------------
|
---------------------------------
|
||||||
|
|
||||||
The current configuration of a pin can be read by using:
|
The current configuration of a pin can be read by using standard
|
||||||
|
gpiolib function:
|
||||||
|
|
||||||
s3c2410_gpio_getcfg(unsigned int pin);
|
s3c_gpio_getcfg(unsigned int pin);
|
||||||
|
|
||||||
The return value will be from the same set of values which can be
|
The return value will be from the same set of values which can be
|
||||||
passed to s3c2410_gpio_cfgpin().
|
passed to s3c_gpio_cfgpin().
|
||||||
|
|
||||||
The s3c_gpio_getcfg() call should be a functional replacement for
|
|
||||||
this call.
|
|
||||||
|
|
||||||
|
|
||||||
Configuring a pull-up resistor
|
Configuring a pull-up resistor
|
||||||
|
@ -154,61 +150,33 @@ Configuring a pull-up resistor
|
||||||
pull-up resistors enabled. This can be configured by the following
|
pull-up resistors enabled. This can be configured by the following
|
||||||
function:
|
function:
|
||||||
|
|
||||||
void s3c2410_gpio_pullup(unsigned int pin, unsigned int to);
|
void s3c_gpio_setpull(unsigned int pin, unsigned int to);
|
||||||
|
|
||||||
Where the to value is zero to set the pull-up off, and 1 to enable
|
Where the to value is S3C_GPIO_PULL_NONE to set the pull-up off,
|
||||||
the specified pull-up. Any other values are currently undefined.
|
and S3C_GPIO_PULL_UP to enable the specified pull-up. Any other
|
||||||
|
values are currently undefined.
|
||||||
The s3c_gpio_setpull() offers similar functionality, but with the
|
|
||||||
ability to encode whether the pull is up or down. Currently there
|
|
||||||
is no 'just on' state, so up or down must be selected.
|
|
||||||
|
|
||||||
|
|
||||||
Getting the state of a PIN
|
Getting and setting the state of a PIN
|
||||||
--------------------------
|
--------------------------------------
|
||||||
|
|
||||||
The state of a pin can be read by using the function:
|
These calls are now implemented by the relevant gpiolib calls, convert
|
||||||
|
|
||||||
unsigned int s3c2410_gpio_getpin(unsigned int pin);
|
|
||||||
|
|
||||||
This will return either zero or non-zero. Do not count on this
|
|
||||||
function returning 1 if the pin is set.
|
|
||||||
|
|
||||||
This call is now implemented by the relevant gpiolib calls, convert
|
|
||||||
your board or driver to use gpiolib.
|
|
||||||
|
|
||||||
|
|
||||||
Setting the state of a PIN
|
|
||||||
--------------------------
|
|
||||||
|
|
||||||
The value an pin is outputing can be modified by using the following:
|
|
||||||
|
|
||||||
void s3c2410_gpio_setpin(unsigned int pin, unsigned int to);
|
|
||||||
|
|
||||||
Which sets the given pin to the value. Use 0 to write 0, and 1 to
|
|
||||||
set the output to 1.
|
|
||||||
|
|
||||||
This call is now implemented by the relevant gpiolib calls, convert
|
|
||||||
your board or driver to use gpiolib.
|
your board or driver to use gpiolib.
|
||||||
|
|
||||||
|
|
||||||
Getting the IRQ number associated with a PIN
|
Getting the IRQ number associated with a PIN
|
||||||
--------------------------------------------
|
--------------------------------------------
|
||||||
|
|
||||||
The following function can map the given pin number to an IRQ
|
A standard gpiolib function can map the given pin number to an IRQ
|
||||||
number to pass to the IRQ system.
|
number to pass to the IRQ system.
|
||||||
|
|
||||||
int s3c2410_gpio_getirq(unsigned int pin);
|
int gpio_to_irq(unsigned int pin);
|
||||||
|
|
||||||
Note, not all pins have an IRQ.
|
Note, not all pins have an IRQ.
|
||||||
|
|
||||||
This call is now implemented by the relevant gpiolib calls, convert
|
|
||||||
your board or driver to use gpiolib.
|
|
||||||
|
|
||||||
|
Author
|
||||||
Authour
|
|
||||||
-------
|
-------
|
||||||
|
|
||||||
|
|
||||||
Ben Dooks, 03 October 2004
|
Ben Dooks, 03 October 2004
|
||||||
Copyright 2004 Ben Dooks, Simtec Electronics
|
Copyright 2004 Ben Dooks, Simtec Electronics
|
||||||
|
|
|
@ -5,14 +5,14 @@ Introduction
|
||||||
------------
|
------------
|
||||||
|
|
||||||
This outlines the Samsung GPIO implementation and the architecture
|
This outlines the Samsung GPIO implementation and the architecture
|
||||||
specific calls provided alongisde the drivers/gpio core.
|
specific calls provided alongside the drivers/gpio core.
|
||||||
|
|
||||||
|
|
||||||
S3C24XX (Legacy)
|
S3C24XX (Legacy)
|
||||||
----------------
|
----------------
|
||||||
|
|
||||||
See Documentation/arm/Samsung-S3C24XX/GPIO.txt for more information
|
See Documentation/arm/Samsung-S3C24XX/GPIO.txt for more information
|
||||||
about these devices. Their implementation is being brought into line
|
about these devices. Their implementation has been brought into line
|
||||||
with the core samsung implementation described in this document.
|
with the core samsung implementation described in this document.
|
||||||
|
|
||||||
|
|
||||||
|
@ -29,7 +29,7 @@ GPIO numbering is synchronised between the Samsung and gpiolib system.
|
||||||
PIN configuration
|
PIN configuration
|
||||||
-----------------
|
-----------------
|
||||||
|
|
||||||
Pin configuration is specific to the Samsung architecutre, with each SoC
|
Pin configuration is specific to the Samsung architecture, with each SoC
|
||||||
registering the necessary information for the core gpio configuration
|
registering the necessary information for the core gpio configuration
|
||||||
implementation to configure pins as necessary.
|
implementation to configure pins as necessary.
|
||||||
|
|
||||||
|
@ -38,5 +38,3 @@ driver or machine to change gpio configuration.
|
||||||
|
|
||||||
See arch/arm/plat-samsung/include/plat/gpio-cfg.h for more information
|
See arch/arm/plat-samsung/include/plat/gpio-cfg.h for more information
|
||||||
on these functions.
|
on these functions.
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -166,11 +166,6 @@ static int exynos5_clk_ip_gen_ctrl(struct clk *clk, int enable)
|
||||||
return s5p_gatectrl(EXYNOS5_CLKGATE_IP_GEN, clk, enable);
|
return s5p_gatectrl(EXYNOS5_CLKGATE_IP_GEN, clk, enable);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int exynos5_clk_ip_gps_ctrl(struct clk *clk, int enable)
|
|
||||||
{
|
|
||||||
return s5p_gatectrl(EXYNOS5_CLKGATE_IP_GPS, clk, enable);
|
|
||||||
}
|
|
||||||
|
|
||||||
static int exynos5_clk_ip_mfc_ctrl(struct clk *clk, int enable)
|
static int exynos5_clk_ip_mfc_ctrl(struct clk *clk, int enable)
|
||||||
{
|
{
|
||||||
return s5p_gatectrl(EXYNOS5_CLKGATE_IP_MFC, clk, enable);
|
return s5p_gatectrl(EXYNOS5_CLKGATE_IP_MFC, clk, enable);
|
||||||
|
@ -671,10 +666,6 @@ static struct clk exynos5_init_clocks_off[] = {
|
||||||
.name = "usbotg",
|
.name = "usbotg",
|
||||||
.enable = exynos5_clk_ip_fsys_ctrl,
|
.enable = exynos5_clk_ip_fsys_ctrl,
|
||||||
.ctrlbit = (1 << 7),
|
.ctrlbit = (1 << 7),
|
||||||
}, {
|
|
||||||
.name = "gps",
|
|
||||||
.enable = exynos5_clk_ip_gps_ctrl,
|
|
||||||
.ctrlbit = ((1 << 3) | (1 << 2) | (1 << 0)),
|
|
||||||
}, {
|
}, {
|
||||||
.name = "nfcon",
|
.name = "nfcon",
|
||||||
.enable = exynos5_clk_ip_fsys_ctrl,
|
.enable = exynos5_clk_ip_fsys_ctrl,
|
||||||
|
|
|
@ -131,7 +131,6 @@
|
||||||
#define EXYNOS5_PA_SYSMMU_JPEG 0x11F20000
|
#define EXYNOS5_PA_SYSMMU_JPEG 0x11F20000
|
||||||
#define EXYNOS5_PA_SYSMMU_IOP 0x12360000
|
#define EXYNOS5_PA_SYSMMU_IOP 0x12360000
|
||||||
#define EXYNOS5_PA_SYSMMU_RTIC 0x12370000
|
#define EXYNOS5_PA_SYSMMU_RTIC 0x12370000
|
||||||
#define EXYNOS5_PA_SYSMMU_GPS 0x12630000
|
|
||||||
#define EXYNOS5_PA_SYSMMU_ISP 0x13260000
|
#define EXYNOS5_PA_SYSMMU_ISP 0x13260000
|
||||||
#define EXYNOS5_PA_SYSMMU_DRC 0x12370000
|
#define EXYNOS5_PA_SYSMMU_DRC 0x12370000
|
||||||
#define EXYNOS5_PA_SYSMMU_SCALERC 0x13280000
|
#define EXYNOS5_PA_SYSMMU_SCALERC 0x13280000
|
||||||
|
|
|
@ -138,19 +138,7 @@ static struct platform_driver h1940bt_driver = {
|
||||||
.remove = h1940bt_remove,
|
.remove = h1940bt_remove,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
module_platform_driver(h1940bt_driver);
|
||||||
static int __init h1940bt_init(void)
|
|
||||||
{
|
|
||||||
return platform_driver_register(&h1940bt_driver);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void __exit h1940bt_exit(void)
|
|
||||||
{
|
|
||||||
platform_driver_unregister(&h1940bt_driver);
|
|
||||||
}
|
|
||||||
|
|
||||||
module_init(h1940bt_init);
|
|
||||||
module_exit(h1940bt_exit);
|
|
||||||
|
|
||||||
MODULE_AUTHOR("Arnaud Patard <arnaud.patard@rtp-net.org>");
|
MODULE_AUTHOR("Arnaud Patard <arnaud.patard@rtp-net.org>");
|
||||||
MODULE_DESCRIPTION("Driver for the iPAQ H1940 bluetooth chip");
|
MODULE_DESCRIPTION("Driver for the iPAQ H1940 bluetooth chip");
|
||||||
|
|
|
@ -424,7 +424,8 @@ static void __init anubis_map_io(void)
|
||||||
anubis_nand_sets[0].nr_partitions = ARRAY_SIZE(anubis_default_nand_part_large);
|
anubis_nand_sets[0].nr_partitions = ARRAY_SIZE(anubis_default_nand_part_large);
|
||||||
} else {
|
} else {
|
||||||
/* ensure that the GPIO is setup */
|
/* ensure that the GPIO is setup */
|
||||||
s3c2410_gpio_setpin(S3C2410_GPA(0), 1);
|
gpio_request_one(S3C2410_GPA(0), GPIOF_OUT_INIT_HIGH, NULL);
|
||||||
|
gpio_free(S3C2410_GPA(0));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -512,8 +512,8 @@ static void jive_power_off(void)
|
||||||
{
|
{
|
||||||
printk(KERN_INFO "powering system down...\n");
|
printk(KERN_INFO "powering system down...\n");
|
||||||
|
|
||||||
s3c2410_gpio_setpin(S3C2410_GPC(5), 1);
|
gpio_request_one(S3C2410_GPC(5), GPIOF_OUT_INIT_HIGH, NULL);
|
||||||
s3c_gpio_cfgpin(S3C2410_GPC(5), S3C2410_GPIO_OUTPUT);
|
gpio_free(S3C2410_GPC(5));
|
||||||
}
|
}
|
||||||
|
|
||||||
static void __init jive_machine_init(void)
|
static void __init jive_machine_init(void)
|
||||||
|
@ -623,11 +623,11 @@ static void __init jive_machine_init(void)
|
||||||
gpio_request(S3C2410_GPB(7), "jive spi");
|
gpio_request(S3C2410_GPB(7), "jive spi");
|
||||||
gpio_direction_output(S3C2410_GPB(7), 1);
|
gpio_direction_output(S3C2410_GPB(7), 1);
|
||||||
|
|
||||||
s3c2410_gpio_setpin(S3C2410_GPB(6), 0);
|
gpio_request_one(S3C2410_GPB(6), GPIOF_OUT_INIT_LOW, NULL);
|
||||||
s3c_gpio_cfgpin(S3C2410_GPB(6), S3C2410_GPIO_OUTPUT);
|
gpio_free(S3C2410_GPB(6));
|
||||||
|
|
||||||
s3c2410_gpio_setpin(S3C2410_GPG(8), 1);
|
gpio_request_one(S3C2410_GPG(8), GPIOF_OUT_INIT_HIGH, NULL);
|
||||||
s3c_gpio_cfgpin(S3C2410_GPG(8), S3C2410_GPIO_OUTPUT);
|
gpio_free(S3C2410_GPG(8));
|
||||||
|
|
||||||
/* initialise the WM8750 spi */
|
/* initialise the WM8750 spi */
|
||||||
|
|
||||||
|
|
|
@ -638,9 +638,9 @@ static void __init mini2440_init(void)
|
||||||
gpio_free(S3C2410_GPG(4));
|
gpio_free(S3C2410_GPG(4));
|
||||||
|
|
||||||
/* remove pullup on optional PWM backlight -- unused on 3.5 and 7"s */
|
/* remove pullup on optional PWM backlight -- unused on 3.5 and 7"s */
|
||||||
|
gpio_request_one(S3C2410_GPB(1), GPIOF_IN, NULL);
|
||||||
s3c_gpio_setpull(S3C2410_GPB(1), S3C_GPIO_PULL_UP);
|
s3c_gpio_setpull(S3C2410_GPB(1), S3C_GPIO_PULL_UP);
|
||||||
s3c2410_gpio_setpin(S3C2410_GPB(1), 0);
|
gpio_free(S3C2410_GPB(1));
|
||||||
s3c_gpio_cfgpin(S3C2410_GPB(1), S3C2410_GPIO_INPUT);
|
|
||||||
|
|
||||||
/* mark the key as input, without pullups (there is one on the board) */
|
/* mark the key as input, without pullups (there is one on the board) */
|
||||||
for (i = 0; i < ARRAY_SIZE(mini2440_buttons); i++) {
|
for (i = 0; i < ARRAY_SIZE(mini2440_buttons); i++) {
|
||||||
|
|
|
@ -119,17 +119,17 @@ static struct platform_device *nexcoder_devices[] __initdata = {
|
||||||
|
|
||||||
static void __init nexcoder_sensorboard_init(void)
|
static void __init nexcoder_sensorboard_init(void)
|
||||||
{
|
{
|
||||||
// Initialize SCCB bus
|
/* Initialize SCCB bus */
|
||||||
s3c2410_gpio_setpin(S3C2410_GPE(14), 1); // IICSCL
|
gpio_request_one(S3C2410_GPE(14), GPIOF_OUT_INIT_HIGH, NULL);
|
||||||
s3c_gpio_cfgpin(S3C2410_GPE(14), S3C2410_GPIO_OUTPUT);
|
gpio_free(S3C2410_GPE(14)); /* IICSCL */
|
||||||
s3c2410_gpio_setpin(S3C2410_GPE(15), 1); // IICSDA
|
gpio_request_one(S3C2410_GPE(15), GPIOF_OUT_INIT_HIGH, NULL);
|
||||||
s3c_gpio_cfgpin(S3C2410_GPE(15), S3C2410_GPIO_OUTPUT);
|
gpio_free(S3C2410_GPE(15)); /* IICSDA */
|
||||||
|
|
||||||
// Power up the sensor board
|
/* Power up the sensor board */
|
||||||
s3c2410_gpio_setpin(S3C2410_GPF(1), 1);
|
gpio_request_one(S3C2410_GPF(1), GPIOF_OUT_INIT_HIGH, NULL);
|
||||||
s3c_gpio_cfgpin(S3C2410_GPF(1), S3C2410_GPIO_OUTPUT); // CAM_GPIO7 => nLDO_PWRDN
|
gpio_free(S3C2410_GPF(1)); /* CAM_GPIO7 => nLDO_PWRDN */
|
||||||
s3c2410_gpio_setpin(S3C2410_GPF(2), 0);
|
gpio_request_one(S3C2410_GPF(2), GPIOF_OUT_INIT_LOW, NULL);
|
||||||
s3c_gpio_cfgpin(S3C2410_GPF(2), S3C2410_GPIO_OUTPUT); // CAM_GPIO6 => CAM_PWRDN
|
gpio_free(S3C2410_GPF(2)); /* CAM_GPIO6 => CAM_PWRDN */
|
||||||
}
|
}
|
||||||
|
|
||||||
static void __init nexcoder_map_io(void)
|
static void __init nexcoder_map_io(void)
|
||||||
|
|
|
@ -175,18 +175,7 @@ static struct platform_driver osiris_dvs_driver = {
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
static int __init osiris_dvs_init(void)
|
module_platform_driver(osiris_dvs_driver);
|
||||||
{
|
|
||||||
return platform_driver_register(&osiris_dvs_driver);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void __exit osiris_dvs_exit(void)
|
|
||||||
{
|
|
||||||
platform_driver_unregister(&osiris_dvs_driver);
|
|
||||||
}
|
|
||||||
|
|
||||||
module_init(osiris_dvs_init);
|
|
||||||
module_exit(osiris_dvs_exit);
|
|
||||||
|
|
||||||
MODULE_DESCRIPTION("Simtec OSIRIS DVS support");
|
MODULE_DESCRIPTION("Simtec OSIRIS DVS support");
|
||||||
MODULE_AUTHOR("Ben Dooks <ben@simtec.co.uk>");
|
MODULE_AUTHOR("Ben Dooks <ben@simtec.co.uk>");
|
||||||
|
|
|
@ -274,8 +274,8 @@ static int osiris_pm_suspend(void)
|
||||||
__raw_writeb(tmp, OSIRIS_VA_CTRL0);
|
__raw_writeb(tmp, OSIRIS_VA_CTRL0);
|
||||||
|
|
||||||
/* ensure that an nRESET is not generated on resume. */
|
/* ensure that an nRESET is not generated on resume. */
|
||||||
s3c2410_gpio_setpin(S3C2410_GPA(21), 1);
|
gpio_request_one(S3C2410_GPA(21), GPIOF_OUT_INIT_HIGH, NULL);
|
||||||
s3c_gpio_cfgpin(S3C2410_GPA(21), S3C2410_GPIO_OUTPUT);
|
gpio_free(S3C2410_GPA(21));
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -396,7 +396,8 @@ static void __init osiris_map_io(void)
|
||||||
osiris_nand_sets[0].nr_partitions = ARRAY_SIZE(osiris_default_nand_part_large);
|
osiris_nand_sets[0].nr_partitions = ARRAY_SIZE(osiris_default_nand_part_large);
|
||||||
} else {
|
} else {
|
||||||
/* write-protect line to the NAND */
|
/* write-protect line to the NAND */
|
||||||
s3c2410_gpio_setpin(S3C2410_GPA(0), 1);
|
gpio_request_one(S3C2410_GPA(0), GPIOF_OUT_INIT_HIGH, NULL);
|
||||||
|
gpio_free(S3C2410_GPA(0));
|
||||||
}
|
}
|
||||||
|
|
||||||
/* fix bus configuration (nBE settings wrong on ABLE pre v2.20) */
|
/* fix bus configuration (nBE settings wrong on ABLE pre v2.20) */
|
||||||
|
|
|
@ -1,98 +1 @@
|
||||||
/* arch/arm/mach-s3c2410/include/mach/gpio-fns.h
|
|
||||||
*
|
|
||||||
* Copyright (c) 2003-2009 Simtec Electronics
|
|
||||||
* Ben Dooks <ben@simtec.co.uk>
|
|
||||||
*
|
|
||||||
* S3C2410 - hardware
|
|
||||||
*
|
|
||||||
* This program is free software; you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License version 2 as
|
|
||||||
* published by the Free Software Foundation.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef __MACH_GPIO_FNS_H
|
|
||||||
#define __MACH_GPIO_FNS_H __FILE__
|
|
||||||
|
|
||||||
/* These functions are in the to-be-removed category and it is strongly
|
|
||||||
* encouraged not to use these in new code. They will be marked deprecated
|
|
||||||
* very soon.
|
|
||||||
*
|
|
||||||
* Most of the functionality can be either replaced by the gpiocfg calls
|
|
||||||
* for the s3c platform or by the generic GPIOlib API.
|
|
||||||
*
|
|
||||||
* As of 2.6.35-rc, these will be removed, with the few drivers using them
|
|
||||||
* either replaced or given a wrapper until the calls can be removed.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <plat/gpio-cfg.h>
|
#include <plat/gpio-cfg.h>
|
||||||
|
|
||||||
static inline void s3c2410_gpio_cfgpin(unsigned int pin, unsigned int cfg)
|
|
||||||
{
|
|
||||||
/* 1:1 mapping between cfgpin and setcfg calls at the moment */
|
|
||||||
s3c_gpio_cfgpin(pin, cfg);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* external functions for GPIO support
|
|
||||||
*
|
|
||||||
* These allow various different clients to access the same GPIO
|
|
||||||
* registers without conflicting. If your driver only owns the entire
|
|
||||||
* GPIO register, then it is safe to ioremap/__raw_{read|write} to it.
|
|
||||||
*/
|
|
||||||
|
|
||||||
extern unsigned int s3c2410_gpio_getcfg(unsigned int pin);
|
|
||||||
|
|
||||||
/* s3c2410_gpio_getirq
|
|
||||||
*
|
|
||||||
* turn the given pin number into the corresponding IRQ number
|
|
||||||
*
|
|
||||||
* returns:
|
|
||||||
* < 0 = no interrupt for this pin
|
|
||||||
* >=0 = interrupt number for the pin
|
|
||||||
*/
|
|
||||||
|
|
||||||
extern int s3c2410_gpio_getirq(unsigned int pin);
|
|
||||||
|
|
||||||
/* s3c2410_gpio_irqfilter
|
|
||||||
*
|
|
||||||
* set the irq filtering on the given pin
|
|
||||||
*
|
|
||||||
* on = 0 => disable filtering
|
|
||||||
* 1 => enable filtering
|
|
||||||
*
|
|
||||||
* config = S3C2410_EINTFLT_PCLK or S3C2410_EINTFLT_EXTCLK orred with
|
|
||||||
* width of filter (0 through 63)
|
|
||||||
*
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
extern int s3c2410_gpio_irqfilter(unsigned int pin, unsigned int on,
|
|
||||||
unsigned int config);
|
|
||||||
|
|
||||||
/* s3c2410_gpio_pullup
|
|
||||||
*
|
|
||||||
* This call should be replaced with s3c_gpio_setpull().
|
|
||||||
*
|
|
||||||
* As a note, there is currently no distinction between pull-up and pull-down
|
|
||||||
* in the s3c24xx series devices with only an on/off configuration.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/* s3c2410_gpio_pullup
|
|
||||||
*
|
|
||||||
* configure the pull-up control on the given pin
|
|
||||||
*
|
|
||||||
* to = 1 => disable the pull-up
|
|
||||||
* 0 => enable the pull-up
|
|
||||||
*
|
|
||||||
* eg;
|
|
||||||
*
|
|
||||||
* s3c2410_gpio_pullup(S3C2410_GPB(0), 0);
|
|
||||||
* s3c2410_gpio_pullup(S3C2410_GPE(8), 0);
|
|
||||||
*/
|
|
||||||
|
|
||||||
extern void s3c2410_gpio_pullup(unsigned int pin, unsigned int to);
|
|
||||||
|
|
||||||
extern void s3c2410_gpio_setpin(unsigned int pin, unsigned int to);
|
|
||||||
|
|
||||||
extern unsigned int s3c2410_gpio_getpin(unsigned int pin);
|
|
||||||
|
|
||||||
#endif /* __MACH_GPIO_FNS_H */
|
|
||||||
|
|
|
@ -3131,46 +3131,6 @@ samsung_gpio_pull_t s3c_gpio_getpull(unsigned int pin)
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(s3c_gpio_getpull);
|
EXPORT_SYMBOL(s3c_gpio_getpull);
|
||||||
|
|
||||||
/* gpiolib wrappers until these are totally eliminated */
|
|
||||||
|
|
||||||
void s3c2410_gpio_pullup(unsigned int pin, unsigned int to)
|
|
||||||
{
|
|
||||||
int ret;
|
|
||||||
|
|
||||||
WARN_ON(to); /* should be none of these left */
|
|
||||||
|
|
||||||
if (!to) {
|
|
||||||
/* if pull is enabled, try first with up, and if that
|
|
||||||
* fails, try using down */
|
|
||||||
|
|
||||||
ret = s3c_gpio_setpull(pin, S3C_GPIO_PULL_UP);
|
|
||||||
if (ret)
|
|
||||||
s3c_gpio_setpull(pin, S3C_GPIO_PULL_DOWN);
|
|
||||||
} else {
|
|
||||||
s3c_gpio_setpull(pin, S3C_GPIO_PULL_NONE);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
EXPORT_SYMBOL(s3c2410_gpio_pullup);
|
|
||||||
|
|
||||||
void s3c2410_gpio_setpin(unsigned int pin, unsigned int to)
|
|
||||||
{
|
|
||||||
/* do this via gpiolib until all users removed */
|
|
||||||
|
|
||||||
gpio_request(pin, "temporary");
|
|
||||||
gpio_set_value(pin, to);
|
|
||||||
gpio_free(pin);
|
|
||||||
}
|
|
||||||
EXPORT_SYMBOL(s3c2410_gpio_setpin);
|
|
||||||
|
|
||||||
unsigned int s3c2410_gpio_getpin(unsigned int pin)
|
|
||||||
{
|
|
||||||
struct samsung_gpio_chip *chip = samsung_gpiolib_getchip(pin);
|
|
||||||
unsigned long offs = pin - chip->chip.base;
|
|
||||||
|
|
||||||
return __raw_readl(chip->base + 0x04) & (1 << offs);
|
|
||||||
}
|
|
||||||
EXPORT_SYMBOL(s3c2410_gpio_getpin);
|
|
||||||
|
|
||||||
#ifdef CONFIG_S5P_GPIO_DRVSTR
|
#ifdef CONFIG_S5P_GPIO_DRVSTR
|
||||||
s5p_gpio_drvstr_t s5p_gpio_get_drvstr(unsigned int pin)
|
s5p_gpio_drvstr_t s5p_gpio_get_drvstr(unsigned int pin)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in a new issue