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:
Коммит
928487a1ce
|
@ -1,4 +1,4 @@
|
|||
S3C2410 GPIO Control
|
||||
S3C24XX GPIO Control
|
||||
====================
|
||||
|
||||
Introduction
|
||||
|
@ -12,7 +12,7 @@ Introduction
|
|||
of the s3c2410 GPIO system, please read the Samsung provided
|
||||
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
|
||||
|
@ -41,8 +41,8 @@ GPIOLIB
|
|||
GPIOLIB conversion
|
||||
------------------
|
||||
|
||||
If you need to convert your board or driver to use gpiolib from the exiting
|
||||
s3c2410 api, then here are some notes on the process.
|
||||
If you need to convert your board or driver to use gpiolib from the phased
|
||||
out s3c2410 API, then here are some notes on the process.
|
||||
|
||||
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
|
||||
|
@ -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
|
||||
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
|
||||
s3c_gpio_setpull(x, S3C_GPIO_PULL_NONE), the s3c2410_gpio_pullup(x, 0)
|
||||
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
|
||||
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.
|
||||
|
||||
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,
|
||||
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.
|
||||
|
||||
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
|
||||
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);
|
||||
s3c2410_gpio_cfgpin(S3C2410_GPE(8), S3C2410_GPE8_SDDAT1);
|
||||
s3c_gpio_cfgpin(S3C2410_GPA(0), S3C_GPIO_SFN(1));
|
||||
s3c_gpio_cfgpin(S3C2410_GPE(8), S3C_GPIO_SFN(2));
|
||||
|
||||
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.
|
||||
|
||||
The s3c_gpio_cfgpin() call is a functional replacement for this call.
|
||||
|
||||
|
||||
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
|
||||
passed to s3c2410_gpio_cfgpin().
|
||||
|
||||
The s3c_gpio_getcfg() call should be a functional replacement for
|
||||
this call.
|
||||
passed to s3c_gpio_cfgpin().
|
||||
|
||||
|
||||
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
|
||||
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
|
||||
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.
|
||||
Where the to value is S3C_GPIO_PULL_NONE to set the pull-up off,
|
||||
and S3C_GPIO_PULL_UP to enable the specified pull-up. Any other
|
||||
values are currently undefined.
|
||||
|
||||
|
||||
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:
|
||||
|
||||
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
|
||||
These calls are now implemented by the relevant gpiolib calls, convert
|
||||
your board or driver to use gpiolib.
|
||||
|
||||
|
||||
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.
|
||||
|
||||
int s3c2410_gpio_getirq(unsigned int pin);
|
||||
int gpio_to_irq(unsigned int pin);
|
||||
|
||||
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.
|
||||
|
||||
|
||||
Authour
|
||||
Author
|
||||
-------
|
||||
|
||||
|
||||
Ben Dooks, 03 October 2004
|
||||
Copyright 2004 Ben Dooks, Simtec Electronics
|
||||
|
|
|
@ -5,14 +5,14 @@ Introduction
|
|||
------------
|
||||
|
||||
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)
|
||||
----------------
|
||||
|
||||
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.
|
||||
|
||||
|
||||
|
@ -29,7 +29,7 @@ GPIO numbering is synchronised between the Samsung and gpiolib system.
|
|||
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
|
||||
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
|
||||
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);
|
||||
}
|
||||
|
||||
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)
|
||||
{
|
||||
return s5p_gatectrl(EXYNOS5_CLKGATE_IP_MFC, clk, enable);
|
||||
|
@ -671,10 +666,6 @@ static struct clk exynos5_init_clocks_off[] = {
|
|||
.name = "usbotg",
|
||||
.enable = exynos5_clk_ip_fsys_ctrl,
|
||||
.ctrlbit = (1 << 7),
|
||||
}, {
|
||||
.name = "gps",
|
||||
.enable = exynos5_clk_ip_gps_ctrl,
|
||||
.ctrlbit = ((1 << 3) | (1 << 2) | (1 << 0)),
|
||||
}, {
|
||||
.name = "nfcon",
|
||||
.enable = exynos5_clk_ip_fsys_ctrl,
|
||||
|
|
|
@ -131,7 +131,6 @@
|
|||
#define EXYNOS5_PA_SYSMMU_JPEG 0x11F20000
|
||||
#define EXYNOS5_PA_SYSMMU_IOP 0x12360000
|
||||
#define EXYNOS5_PA_SYSMMU_RTIC 0x12370000
|
||||
#define EXYNOS5_PA_SYSMMU_GPS 0x12630000
|
||||
#define EXYNOS5_PA_SYSMMU_ISP 0x13260000
|
||||
#define EXYNOS5_PA_SYSMMU_DRC 0x12370000
|
||||
#define EXYNOS5_PA_SYSMMU_SCALERC 0x13280000
|
||||
|
|
|
@ -138,19 +138,7 @@ static struct platform_driver h1940bt_driver = {
|
|||
.remove = h1940bt_remove,
|
||||
};
|
||||
|
||||
|
||||
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_platform_driver(h1940bt_driver);
|
||||
|
||||
MODULE_AUTHOR("Arnaud Patard <arnaud.patard@rtp-net.org>");
|
||||
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);
|
||||
} else {
|
||||
/* 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");
|
||||
|
||||
s3c2410_gpio_setpin(S3C2410_GPC(5), 1);
|
||||
s3c_gpio_cfgpin(S3C2410_GPC(5), S3C2410_GPIO_OUTPUT);
|
||||
gpio_request_one(S3C2410_GPC(5), GPIOF_OUT_INIT_HIGH, NULL);
|
||||
gpio_free(S3C2410_GPC(5));
|
||||
}
|
||||
|
||||
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_direction_output(S3C2410_GPB(7), 1);
|
||||
|
||||
s3c2410_gpio_setpin(S3C2410_GPB(6), 0);
|
||||
s3c_gpio_cfgpin(S3C2410_GPB(6), S3C2410_GPIO_OUTPUT);
|
||||
gpio_request_one(S3C2410_GPB(6), GPIOF_OUT_INIT_LOW, NULL);
|
||||
gpio_free(S3C2410_GPB(6));
|
||||
|
||||
s3c2410_gpio_setpin(S3C2410_GPG(8), 1);
|
||||
s3c_gpio_cfgpin(S3C2410_GPG(8), S3C2410_GPIO_OUTPUT);
|
||||
gpio_request_one(S3C2410_GPG(8), GPIOF_OUT_INIT_HIGH, NULL);
|
||||
gpio_free(S3C2410_GPG(8));
|
||||
|
||||
/* initialise the WM8750 spi */
|
||||
|
||||
|
|
|
@ -638,9 +638,9 @@ static void __init mini2440_init(void)
|
|||
gpio_free(S3C2410_GPG(4));
|
||||
|
||||
/* 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);
|
||||
s3c2410_gpio_setpin(S3C2410_GPB(1), 0);
|
||||
s3c_gpio_cfgpin(S3C2410_GPB(1), S3C2410_GPIO_INPUT);
|
||||
gpio_free(S3C2410_GPB(1));
|
||||
|
||||
/* mark the key as input, without pullups (there is one on the board) */
|
||||
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)
|
||||
{
|
||||
// Initialize SCCB bus
|
||||
s3c2410_gpio_setpin(S3C2410_GPE(14), 1); // IICSCL
|
||||
s3c_gpio_cfgpin(S3C2410_GPE(14), S3C2410_GPIO_OUTPUT);
|
||||
s3c2410_gpio_setpin(S3C2410_GPE(15), 1); // IICSDA
|
||||
s3c_gpio_cfgpin(S3C2410_GPE(15), S3C2410_GPIO_OUTPUT);
|
||||
/* Initialize SCCB bus */
|
||||
gpio_request_one(S3C2410_GPE(14), GPIOF_OUT_INIT_HIGH, NULL);
|
||||
gpio_free(S3C2410_GPE(14)); /* IICSCL */
|
||||
gpio_request_one(S3C2410_GPE(15), GPIOF_OUT_INIT_HIGH, NULL);
|
||||
gpio_free(S3C2410_GPE(15)); /* IICSDA */
|
||||
|
||||
// Power up the sensor board
|
||||
s3c2410_gpio_setpin(S3C2410_GPF(1), 1);
|
||||
s3c_gpio_cfgpin(S3C2410_GPF(1), S3C2410_GPIO_OUTPUT); // CAM_GPIO7 => nLDO_PWRDN
|
||||
s3c2410_gpio_setpin(S3C2410_GPF(2), 0);
|
||||
s3c_gpio_cfgpin(S3C2410_GPF(2), S3C2410_GPIO_OUTPUT); // CAM_GPIO6 => CAM_PWRDN
|
||||
/* Power up the sensor board */
|
||||
gpio_request_one(S3C2410_GPF(1), GPIOF_OUT_INIT_HIGH, NULL);
|
||||
gpio_free(S3C2410_GPF(1)); /* CAM_GPIO7 => nLDO_PWRDN */
|
||||
gpio_request_one(S3C2410_GPF(2), GPIOF_OUT_INIT_LOW, NULL);
|
||||
gpio_free(S3C2410_GPF(2)); /* CAM_GPIO6 => CAM_PWRDN */
|
||||
}
|
||||
|
||||
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)
|
||||
{
|
||||
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_platform_driver(osiris_dvs_driver);
|
||||
|
||||
MODULE_DESCRIPTION("Simtec OSIRIS DVS support");
|
||||
MODULE_AUTHOR("Ben Dooks <ben@simtec.co.uk>");
|
||||
|
|
|
@ -274,8 +274,8 @@ static int osiris_pm_suspend(void)
|
|||
__raw_writeb(tmp, OSIRIS_VA_CTRL0);
|
||||
|
||||
/* ensure that an nRESET is not generated on resume. */
|
||||
s3c2410_gpio_setpin(S3C2410_GPA(21), 1);
|
||||
s3c_gpio_cfgpin(S3C2410_GPA(21), S3C2410_GPIO_OUTPUT);
|
||||
gpio_request_one(S3C2410_GPA(21), GPIOF_OUT_INIT_HIGH, NULL);
|
||||
gpio_free(S3C2410_GPA(21));
|
||||
|
||||
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);
|
||||
} else {
|
||||
/* 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) */
|
||||
|
|
|
@ -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>
|
||||
|
||||
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);
|
||||
|
||||
/* 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
|
||||
s5p_gpio_drvstr_t s5p_gpio_get_drvstr(unsigned int pin)
|
||||
{
|
||||
|
|
Загрузка…
Ссылка в новой задаче