Commit 2cedcc4f authored by Linus Torvalds's avatar Linus Torvalds

Merge branch 'fixes/2637-rc5/s3c24xx' of git://git.fluff.org/bjdooks/linux

* 'fixes/2637-rc5/s3c24xx' of git://git.fluff.org/bjdooks/linux:
  ARM: S3C24XX: Fix mess with gpio {set,get}_pull callbacks
  ARM: mini2440: Fix Kconfig to allow kernel to build
  ARM: S3C2412: Fix typo in CONFIG_CPU_S3C2412_ONLY definition
  ARM: S3C2443: Select properly ARM core type
  ARM: SMDK2416: Select MACH_SMDK, S3C_DEV_NAND, S3C_DEV_USB_HOST
parents 6142e05f 812c4e40
...@@ -16,7 +16,7 @@ config CPU_S3C2412 ...@@ -16,7 +16,7 @@ config CPU_S3C2412
config CPU_S3C2412_ONLY config CPU_S3C2412_ONLY
bool bool
depends on ARCH_S3C2410 && !CPU_S3C2400 && !CPU_S3C2410 && \ depends on ARCH_S3C2410 && !CPU_S3C2400 && !CPU_S3C2410 && \
!CPU_2416 && !CPU_S3C2440 && !CPU_S3C2442 && \ !CPU_S3C2416 && !CPU_S3C2440 && !CPU_S3C2442 && \
!CPU_S3C2443 && CPU_S3C2412 !CPU_S3C2443 && CPU_S3C2412
default y if CPU_S3C2412 default y if CPU_S3C2412
......
...@@ -35,9 +35,12 @@ menu "S3C2416 Machines" ...@@ -35,9 +35,12 @@ menu "S3C2416 Machines"
config MACH_SMDK2416 config MACH_SMDK2416
bool "SMDK2416" bool "SMDK2416"
select CPU_S3C2416 select CPU_S3C2416
select MACH_SMDK
select S3C_DEV_FB select S3C_DEV_FB
select S3C_DEV_HSMMC select S3C_DEV_HSMMC
select S3C_DEV_HSMMC1 select S3C_DEV_HSMMC1
select S3C_DEV_NAND
select S3C_DEV_USB_HOST
select S3C2416_PM if PM select S3C2416_PM if PM
help help
Say Y here if you are using an SMDK2416 Say Y here if you are using an SMDK2416
......
...@@ -18,6 +18,7 @@ config CPU_S3C2440 ...@@ -18,6 +18,7 @@ config CPU_S3C2440
config CPU_S3C2442 config CPU_S3C2442
bool bool
select CPU_ARM920T select CPU_ARM920T
select S3C_GPIO_PULL_DOWN
select S3C2410_CLOCK select S3C2410_CLOCK
select S3C2410_GPIO select S3C2410_GPIO
select S3C2410_PM if PM select S3C2410_PM if PM
...@@ -178,6 +179,9 @@ config MACH_MINI2440 ...@@ -178,6 +179,9 @@ config MACH_MINI2440
bool "MINI2440 development board" bool "MINI2440 development board"
select CPU_S3C2440 select CPU_S3C2440
select EEPROM_AT24 select EEPROM_AT24
select NEW_LEDS
select LEDS_CLASS
select LEDS_TRIGGER
select LEDS_TRIGGER_BACKLIGHT select LEDS_TRIGGER_BACKLIGHT
select S3C_DEV_NAND select S3C_DEV_NAND
select S3C_DEV_USB_HOST select S3C_DEV_USB_HOST
......
...@@ -46,9 +46,6 @@ int __init s3c2440_init(void) ...@@ -46,9 +46,6 @@ int __init s3c2440_init(void)
{ {
printk("S3C2440: Initialising architecture\n"); printk("S3C2440: Initialising architecture\n");
s3c24xx_gpiocfg_default.set_pull = s3c_gpio_setpull_1up;
s3c24xx_gpiocfg_default.get_pull = s3c_gpio_getpull_1up;
/* change irq for watchdog */ /* change irq for watchdog */
s3c_device_wdt.resource[1].start = IRQ_S3C2440_WDT; s3c_device_wdt.resource[1].start = IRQ_S3C2440_WDT;
...@@ -58,3 +55,11 @@ int __init s3c2440_init(void) ...@@ -58,3 +55,11 @@ int __init s3c2440_init(void)
return sysdev_register(&s3c2440_sysdev); return sysdev_register(&s3c2440_sysdev);
} }
void __init s3c2440_map_io(void)
{
s3c244x_map_io();
s3c24xx_gpiocfg_default.set_pull = s3c_gpio_setpull_1up;
s3c24xx_gpiocfg_default.get_pull = s3c_gpio_getpull_1up;
}
...@@ -32,6 +32,7 @@ ...@@ -32,6 +32,7 @@
#include <linux/interrupt.h> #include <linux/interrupt.h>
#include <linux/ioport.h> #include <linux/ioport.h>
#include <linux/mutex.h> #include <linux/mutex.h>
#include <linux/gpio.h>
#include <linux/clk.h> #include <linux/clk.h>
#include <linux/io.h> #include <linux/io.h>
...@@ -43,6 +44,11 @@ ...@@ -43,6 +44,11 @@
#include <plat/clock.h> #include <plat/clock.h>
#include <plat/cpu.h> #include <plat/cpu.h>
#include <plat/s3c244x.h>
#include <plat/gpio-core.h>
#include <plat/gpio-cfg.h>
#include <plat/gpio-cfg-helpers.h>
/* S3C2442 extended clock support */ /* S3C2442 extended clock support */
...@@ -163,3 +169,11 @@ int __init s3c2442_init(void) ...@@ -163,3 +169,11 @@ int __init s3c2442_init(void)
return sysdev_register(&s3c2442_sysdev); return sysdev_register(&s3c2442_sysdev);
} }
void __init s3c2442_map_io(void)
{
s3c244x_map_io();
s3c24xx_gpiocfg_default.set_pull = s3c_gpio_setpull_1down;
s3c24xx_gpiocfg_default.get_pull = s3c_gpio_getpull_1down;
}
...@@ -5,6 +5,7 @@ ...@@ -5,6 +5,7 @@
config CPU_S3C2443 config CPU_S3C2443
bool bool
depends on ARCH_S3C2410 depends on ARCH_S3C2410
select CPU_ARM920T
select S3C2443_DMA if S3C2410_DMA select S3C2443_DMA if S3C2410_DMA
select CPU_LLSERIAL_S3C2440 select CPU_LLSERIAL_S3C2440
select SAMSUNG_CLKSRC select SAMSUNG_CLKSRC
......
...@@ -88,7 +88,7 @@ static struct cpu_table cpu_ids[] __initdata = { ...@@ -88,7 +88,7 @@ static struct cpu_table cpu_ids[] __initdata = {
{ {
.idcode = 0x32440000, .idcode = 0x32440000,
.idmask = 0xffffffff, .idmask = 0xffffffff,
.map_io = s3c244x_map_io, .map_io = s3c2440_map_io,
.init_clocks = s3c244x_init_clocks, .init_clocks = s3c244x_init_clocks,
.init_uarts = s3c244x_init_uarts, .init_uarts = s3c244x_init_uarts,
.init = s3c2440_init, .init = s3c2440_init,
...@@ -97,7 +97,7 @@ static struct cpu_table cpu_ids[] __initdata = { ...@@ -97,7 +97,7 @@ static struct cpu_table cpu_ids[] __initdata = {
{ {
.idcode = 0x32440001, .idcode = 0x32440001,
.idmask = 0xffffffff, .idmask = 0xffffffff,
.map_io = s3c244x_map_io, .map_io = s3c2440_map_io,
.init_clocks = s3c244x_init_clocks, .init_clocks = s3c244x_init_clocks,
.init_uarts = s3c244x_init_uarts, .init_uarts = s3c244x_init_uarts,
.init = s3c2440_init, .init = s3c2440_init,
...@@ -106,7 +106,7 @@ static struct cpu_table cpu_ids[] __initdata = { ...@@ -106,7 +106,7 @@ static struct cpu_table cpu_ids[] __initdata = {
{ {
.idcode = 0x32440aaa, .idcode = 0x32440aaa,
.idmask = 0xffffffff, .idmask = 0xffffffff,
.map_io = s3c244x_map_io, .map_io = s3c2442_map_io,
.init_clocks = s3c244x_init_clocks, .init_clocks = s3c244x_init_clocks,
.init_uarts = s3c244x_init_uarts, .init_uarts = s3c244x_init_uarts,
.init = s3c2442_init, .init = s3c2442_init,
...@@ -115,7 +115,7 @@ static struct cpu_table cpu_ids[] __initdata = { ...@@ -115,7 +115,7 @@ static struct cpu_table cpu_ids[] __initdata = {
{ {
.idcode = 0x32440aab, .idcode = 0x32440aab,
.idmask = 0xffffffff, .idmask = 0xffffffff,
.map_io = s3c244x_map_io, .map_io = s3c2442_map_io,
.init_clocks = s3c244x_init_clocks, .init_clocks = s3c244x_init_clocks,
.init_uarts = s3c244x_init_uarts, .init_uarts = s3c244x_init_uarts,
.init = s3c2442_init, .init = s3c2442_init,
......
...@@ -82,8 +82,6 @@ static struct s3c_gpio_cfg s3c24xx_gpiocfg_banka = { ...@@ -82,8 +82,6 @@ static struct s3c_gpio_cfg s3c24xx_gpiocfg_banka = {
struct s3c_gpio_cfg s3c24xx_gpiocfg_default = { struct s3c_gpio_cfg s3c24xx_gpiocfg_default = {
.set_config = s3c_gpio_setcfg_s3c24xx, .set_config = s3c_gpio_setcfg_s3c24xx,
.get_config = s3c_gpio_getcfg_s3c24xx, .get_config = s3c_gpio_getcfg_s3c24xx,
.set_pull = s3c_gpio_setpull_1up,
.get_pull = s3c_gpio_getpull_1up,
}; };
struct s3c_gpio_chip s3c24xx_gpios[] = { struct s3c_gpio_chip s3c24xx_gpios[] = {
......
...@@ -21,17 +21,22 @@ extern void s3c244x_init_clocks(int xtal); ...@@ -21,17 +21,22 @@ extern void s3c244x_init_clocks(int xtal);
#else #else
#define s3c244x_init_clocks NULL #define s3c244x_init_clocks NULL
#define s3c244x_init_uarts NULL #define s3c244x_init_uarts NULL
#define s3c244x_map_io NULL
#endif #endif
#ifdef CONFIG_CPU_S3C2440 #ifdef CONFIG_CPU_S3C2440
extern int s3c2440_init(void); extern int s3c2440_init(void);
extern void s3c2440_map_io(void);
#else #else
#define s3c2440_init NULL #define s3c2440_init NULL
#define s3c2440_map_io NULL
#endif #endif
#ifdef CONFIG_CPU_S3C2442 #ifdef CONFIG_CPU_S3C2442
extern int s3c2442_init(void); extern int s3c2442_init(void);
extern void s3c2442_map_io(void);
#else #else
#define s3c2442_init NULL #define s3c2442_init NULL
#define s3c2442_map_io NULL
#endif #endif
...@@ -280,18 +280,17 @@ s3c_gpio_pull_t s3c_gpio_getpull_updown(struct s3c_gpio_chip *chip, ...@@ -280,18 +280,17 @@ s3c_gpio_pull_t s3c_gpio_getpull_updown(struct s3c_gpio_chip *chip,
} }
#endif #endif
#ifdef CONFIG_S3C_GPIO_PULL_UP #if defined(CONFIG_S3C_GPIO_PULL_UP) || defined(CONFIG_S3C_GPIO_PULL_DOWN)
int s3c_gpio_setpull_1up(struct s3c_gpio_chip *chip, static int s3c_gpio_setpull_1(struct s3c_gpio_chip *chip,
unsigned int off, s3c_gpio_pull_t pull) unsigned int off, s3c_gpio_pull_t pull,
s3c_gpio_pull_t updown)
{ {
void __iomem *reg = chip->base + 0x08; void __iomem *reg = chip->base + 0x08;
u32 pup = __raw_readl(reg); u32 pup = __raw_readl(reg);
pup = __raw_readl(reg); if (pull == updown)
if (pup == S3C_GPIO_PULL_UP)
pup &= ~(1 << off); pup &= ~(1 << off);
else if (pup == S3C_GPIO_PULL_NONE) else if (pull == S3C_GPIO_PULL_NONE)
pup |= (1 << off); pup |= (1 << off);
else else
return -EINVAL; return -EINVAL;
...@@ -300,17 +299,45 @@ int s3c_gpio_setpull_1up(struct s3c_gpio_chip *chip, ...@@ -300,17 +299,45 @@ int s3c_gpio_setpull_1up(struct s3c_gpio_chip *chip,
return 0; return 0;
} }
s3c_gpio_pull_t s3c_gpio_getpull_1up(struct s3c_gpio_chip *chip, static s3c_gpio_pull_t s3c_gpio_getpull_1(struct s3c_gpio_chip *chip,
unsigned int off) unsigned int off, s3c_gpio_pull_t updown)
{ {
void __iomem *reg = chip->base + 0x08; void __iomem *reg = chip->base + 0x08;
u32 pup = __raw_readl(reg); u32 pup = __raw_readl(reg);
pup &= (1 << off); pup &= (1 << off);
return pup ? S3C_GPIO_PULL_NONE : S3C_GPIO_PULL_UP; return pup ? S3C_GPIO_PULL_NONE : updown;
}
#endif /* CONFIG_S3C_GPIO_PULL_UP || CONFIG_S3C_GPIO_PULL_DOWN */
#ifdef CONFIG_S3C_GPIO_PULL_UP
s3c_gpio_pull_t s3c_gpio_getpull_1up(struct s3c_gpio_chip *chip,
unsigned int off)
{
return s3c_gpio_getpull_1(chip, off, S3C_GPIO_PULL_UP);
}
int s3c_gpio_setpull_1up(struct s3c_gpio_chip *chip,
unsigned int off, s3c_gpio_pull_t pull)
{
return s3c_gpio_setpull_1(chip, off, pull, S3C_GPIO_PULL_UP);
} }
#endif /* CONFIG_S3C_GPIO_PULL_UP */ #endif /* CONFIG_S3C_GPIO_PULL_UP */
#ifdef CONFIG_S3C_GPIO_PULL_DOWN
s3c_gpio_pull_t s3c_gpio_getpull_1down(struct s3c_gpio_chip *chip,
unsigned int off)
{
return s3c_gpio_getpull_1(chip, off, S3C_GPIO_PULL_DOWN);
}
int s3c_gpio_setpull_1down(struct s3c_gpio_chip *chip,
unsigned int off, s3c_gpio_pull_t pull)
{
return s3c_gpio_setpull_1(chip, off, pull, S3C_GPIO_PULL_DOWN);
}
#endif /* CONFIG_S3C_GPIO_PULL_DOWN */
#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)
{ {
......
...@@ -209,6 +209,17 @@ extern s3c_gpio_pull_t s3c_gpio_getpull_updown(struct s3c_gpio_chip *chip, ...@@ -209,6 +209,17 @@ extern s3c_gpio_pull_t s3c_gpio_getpull_updown(struct s3c_gpio_chip *chip,
extern s3c_gpio_pull_t s3c_gpio_getpull_1up(struct s3c_gpio_chip *chip, extern s3c_gpio_pull_t s3c_gpio_getpull_1up(struct s3c_gpio_chip *chip,
unsigned int off); unsigned int off);
/**
* s3c_gpio_getpull_1down() - Get configuration for choice of down or none
* @chip: The gpio chip that the GPIO pin belongs to
* @off: The offset to the pin to get the configuration of.
*
* This helper function reads the state of the pull-down resistor for the
* given GPIO in the same case as s3c_gpio_setpull_1down.
*/
extern s3c_gpio_pull_t s3c_gpio_getpull_1down(struct s3c_gpio_chip *chip,
unsigned int off);
/** /**
* s3c_gpio_setpull_s3c2443() - Pull configuration for s3c2443. * s3c_gpio_setpull_s3c2443() - Pull configuration for s3c2443.
* @chip: The gpio chip that is being configured. * @chip: The gpio chip that is being configured.
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment