Commit c488637c authored by Arnd Bergmann's avatar Arnd Bergmann

Merge branch 'samsung-fixes-2' of git://github.com/kgene/linux-samsung into HEAD

parents 72cc2056 d03c3593
...@@ -1160,7 +1160,7 @@ void __init_or_cpufreq exynos4_setup_clocks(void) ...@@ -1160,7 +1160,7 @@ void __init_or_cpufreq exynos4_setup_clocks(void)
vpllsrc = clk_get_rate(&clk_vpllsrc.clk); vpllsrc = clk_get_rate(&clk_vpllsrc.clk);
vpll = s5p_get_pll46xx(vpllsrc, __raw_readl(S5P_VPLL_CON0), vpll = s5p_get_pll46xx(vpllsrc, __raw_readl(S5P_VPLL_CON0),
__raw_readl(S5P_VPLL_CON1), pll_4650); __raw_readl(S5P_VPLL_CON1), pll_4650c);
clk_fout_apll.ops = &exynos4_fout_apll_ops; clk_fout_apll.ops = &exynos4_fout_apll_ops;
clk_fout_mpll.rate = mpll; clk_fout_mpll.rate = mpll;
......
...@@ -132,12 +132,18 @@ static cycle_t exynos4_frc_read(struct clocksource *cs) ...@@ -132,12 +132,18 @@ static cycle_t exynos4_frc_read(struct clocksource *cs)
return ((cycle_t)hi << 32) | lo; return ((cycle_t)hi << 32) | lo;
} }
static void exynos4_frc_resume(struct clocksource *cs)
{
exynos4_mct_frc_start(0, 0);
}
struct clocksource mct_frc = { struct clocksource mct_frc = {
.name = "mct-frc", .name = "mct-frc",
.rating = 400, .rating = 400,
.read = exynos4_frc_read, .read = exynos4_frc_read,
.mask = CLOCKSOURCE_MASK(64), .mask = CLOCKSOURCE_MASK(64),
.flags = CLOCK_SOURCE_IS_CONTINUOUS, .flags = CLOCK_SOURCE_IS_CONTINUOUS,
.resume = exynos4_frc_resume,
}; };
static void __init exynos4_clocksource_init(void) static void __init exynos4_clocksource_init(void)
...@@ -389,9 +395,11 @@ static void exynos4_mct_tick_init(struct clock_event_device *evt) ...@@ -389,9 +395,11 @@ static void exynos4_mct_tick_init(struct clock_event_device *evt)
} }
/* Setup the local clock events for a CPU */ /* Setup the local clock events for a CPU */
void __cpuinit local_timer_setup(struct clock_event_device *evt) int __cpuinit local_timer_setup(struct clock_event_device *evt)
{ {
exynos4_mct_tick_init(evt); exynos4_mct_tick_init(evt);
return 0;
} }
int local_timer_ack(void) int local_timer_ack(void)
......
...@@ -106,6 +106,8 @@ void __cpuinit platform_secondary_init(unsigned int cpu) ...@@ -106,6 +106,8 @@ void __cpuinit platform_secondary_init(unsigned int cpu)
*/ */
spin_lock(&boot_lock); spin_lock(&boot_lock);
spin_unlock(&boot_lock); spin_unlock(&boot_lock);
set_cpu_online(cpu, true);
} }
int __cpuinit boot_secondary(unsigned int cpu, struct task_struct *idle) int __cpuinit boot_secondary(unsigned int cpu, struct task_struct *idle)
......
...@@ -19,15 +19,16 @@ void samsung_keypad_cfg_gpio(unsigned int rows, unsigned int cols) ...@@ -19,15 +19,16 @@ void samsung_keypad_cfg_gpio(unsigned int rows, unsigned int cols)
if (rows > 8) { if (rows > 8) {
/* Set all the necessary GPX2 pins: KP_ROW[0~7] */ /* Set all the necessary GPX2 pins: KP_ROW[0~7] */
s3c_gpio_cfgrange_nopull(EXYNOS4_GPX2(0), 8, S3C_GPIO_SFN(3)); s3c_gpio_cfgall_range(EXYNOS4_GPX2(0), 8, S3C_GPIO_SFN(3),
S3C_GPIO_PULL_UP);
/* Set all the necessary GPX3 pins: KP_ROW[8~] */ /* Set all the necessary GPX3 pins: KP_ROW[8~] */
s3c_gpio_cfgrange_nopull(EXYNOS4_GPX3(0), (rows - 8), s3c_gpio_cfgall_range(EXYNOS4_GPX3(0), (rows - 8),
S3C_GPIO_SFN(3)); S3C_GPIO_SFN(3), S3C_GPIO_PULL_UP);
} else { } else {
/* Set all the necessary GPX2 pins: KP_ROW[x] */ /* Set all the necessary GPX2 pins: KP_ROW[x] */
s3c_gpio_cfgrange_nopull(EXYNOS4_GPX2(0), rows, s3c_gpio_cfgall_range(EXYNOS4_GPX2(0), rows, S3C_GPIO_SFN(3),
S3C_GPIO_SFN(3)); S3C_GPIO_PULL_UP);
} }
/* Set all the necessary GPX1 pins to special-function 3: KP_COL[x] */ /* Set all the necessary GPX1 pins to special-function 3: KP_COL[x] */
......
...@@ -262,45 +262,6 @@ static struct samsung_keypad_platdata smdk6410_keypad_data __initdata = { ...@@ -262,45 +262,6 @@ static struct samsung_keypad_platdata smdk6410_keypad_data __initdata = {
.cols = 8, .cols = 8,
}; };
static int smdk6410_backlight_init(struct device *dev)
{
int ret;
ret = gpio_request(S3C64XX_GPF(15), "Backlight");
if (ret) {
printk(KERN_ERR "failed to request GPF for PWM-OUT1\n");
return ret;
}
/* Configure GPIO pin with S3C64XX_GPF15_PWM_TOUT1 */
s3c_gpio_cfgpin(S3C64XX_GPF(15), S3C_GPIO_SFN(2));
return 0;
}
static void smdk6410_backlight_exit(struct device *dev)
{
s3c_gpio_cfgpin(S3C64XX_GPF(15), S3C_GPIO_OUTPUT);
gpio_free(S3C64XX_GPF(15));
}
static struct platform_pwm_backlight_data smdk6410_backlight_data = {
.pwm_id = 1,
.max_brightness = 255,
.dft_brightness = 255,
.pwm_period_ns = 78770,
.init = smdk6410_backlight_init,
.exit = smdk6410_backlight_exit,
};
static struct platform_device smdk6410_backlight_device = {
.name = "pwm-backlight",
.dev = {
.parent = &s3c_device_timer[1].dev,
.platform_data = &smdk6410_backlight_data,
},
};
static struct map_desc smdk6410_iodesc[] = {}; static struct map_desc smdk6410_iodesc[] = {};
static struct platform_device *smdk6410_devices[] __initdata = { static struct platform_device *smdk6410_devices[] __initdata = {
......
...@@ -64,6 +64,17 @@ static LIST_HEAD(clocks); ...@@ -64,6 +64,17 @@ static LIST_HEAD(clocks);
*/ */
DEFINE_SPINLOCK(clocks_lock); DEFINE_SPINLOCK(clocks_lock);
/* Global watchdog clock used by arch_wtd_reset() callback */
struct clk *s3c2410_wdtclk;
static int __init s3c_wdt_reset_init(void)
{
s3c2410_wdtclk = clk_get(NULL, "watchdog");
if (IS_ERR(s3c2410_wdtclk))
printk(KERN_WARNING "%s: warning: cannot get watchdog clock\n", __func__);
return 0;
}
arch_initcall(s3c_wdt_reset_init);
/* enable and disable calls for use with the clk struct */ /* enable and disable calls for use with the clk struct */
static int clk_null_enable(struct clk *clk, int enable) static int clk_null_enable(struct clk *clk, int enable)
......
...@@ -9,6 +9,9 @@ ...@@ -9,6 +9,9 @@
* published by the Free Software Foundation. * published by the Free Software Foundation.
*/ */
#ifndef __ASM_PLAT_CLOCK_H
#define __ASM_PLAT_CLOCK_H __FILE__
#include <linux/spinlock.h> #include <linux/spinlock.h>
#include <linux/clkdev.h> #include <linux/clkdev.h>
...@@ -121,3 +124,8 @@ extern int s3c64xx_sclk_ctrl(struct clk *clk, int enable); ...@@ -121,3 +124,8 @@ extern int s3c64xx_sclk_ctrl(struct clk *clk, int enable);
extern void s3c_pwmclk_init(void); extern void s3c_pwmclk_init(void);
/* Global watchdog clock used by arch_wtd_reset() callback */
extern struct clk *s3c2410_wdtclk;
#endif /* __ASM_PLAT_CLOCK_H */
...@@ -10,6 +10,7 @@ ...@@ -10,6 +10,7 @@
* published by the Free Software Foundation. * published by the Free Software Foundation.
*/ */
#include <plat/clock.h>
#include <plat/regs-watchdog.h> #include <plat/regs-watchdog.h>
#include <mach/map.h> #include <mach/map.h>
...@@ -19,17 +20,12 @@ ...@@ -19,17 +20,12 @@
static inline void arch_wdt_reset(void) static inline void arch_wdt_reset(void)
{ {
struct clk *wdtclk;
printk("arch_reset: attempting watchdog reset\n"); printk("arch_reset: attempting watchdog reset\n");
__raw_writel(0, S3C2410_WTCON); /* disable watchdog, to be safe */ __raw_writel(0, S3C2410_WTCON); /* disable watchdog, to be safe */
wdtclk = clk_get(NULL, "watchdog"); if (s3c2410_wdtclk)
if (!IS_ERR(wdtclk)) { clk_enable(s3c2410_wdtclk);
clk_enable(wdtclk);
} else
printk(KERN_WARNING "%s: warning: cannot get watchdog clock\n", __func__);
/* put initial values into count and data */ /* put initial values into count and data */
__raw_writel(0x80, S3C2410_WTCNT); __raw_writel(0x80, S3C2410_WTCNT);
......
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