diff options
Diffstat (limited to 'arch/arm/plat-samsung')
28 files changed, 296 insertions, 208 deletions
diff --git a/arch/arm/plat-samsung/Kconfig b/arch/arm/plat-samsung/Kconfig index 4d79519d19a4..b3e10659e4b8 100644 --- a/arch/arm/plat-samsung/Kconfig +++ b/arch/arm/plat-samsung/Kconfig | |||
@@ -280,6 +280,12 @@ config SAMSUNG_DEV_PWM | |||
280 | help | 280 | help |
281 | Compile in platform device definition for PWM Timer | 281 | Compile in platform device definition for PWM Timer |
282 | 282 | ||
283 | config SAMSUNG_DEV_BACKLIGHT | ||
284 | bool | ||
285 | depends on SAMSUNG_DEV_PWM | ||
286 | help | ||
287 | Compile in platform device definition LCD backlight with PWM Timer | ||
288 | |||
283 | config S3C24XX_PWM | 289 | config S3C24XX_PWM |
284 | bool "PWM device support" | 290 | bool "PWM device support" |
285 | select HAVE_PWM | 291 | select HAVE_PWM |
diff --git a/arch/arm/plat-samsung/Makefile b/arch/arm/plat-samsung/Makefile index 53eb15b0a07d..853764ba8cc5 100644 --- a/arch/arm/plat-samsung/Makefile +++ b/arch/arm/plat-samsung/Makefile | |||
@@ -59,6 +59,7 @@ obj-$(CONFIG_SAMSUNG_DEV_IDE) += dev-ide.o | |||
59 | obj-$(CONFIG_SAMSUNG_DEV_TS) += dev-ts.o | 59 | obj-$(CONFIG_SAMSUNG_DEV_TS) += dev-ts.o |
60 | obj-$(CONFIG_SAMSUNG_DEV_KEYPAD) += dev-keypad.o | 60 | obj-$(CONFIG_SAMSUNG_DEV_KEYPAD) += dev-keypad.o |
61 | obj-$(CONFIG_SAMSUNG_DEV_PWM) += dev-pwm.o | 61 | obj-$(CONFIG_SAMSUNG_DEV_PWM) += dev-pwm.o |
62 | obj-$(CONFIG_SAMSUNG_DEV_BACKLIGHT) += dev-backlight.o | ||
62 | 63 | ||
63 | # DMA support | 64 | # DMA support |
64 | 65 | ||
diff --git a/arch/arm/plat-samsung/clock.c b/arch/arm/plat-samsung/clock.c index aecf9e90d4fc..302c42670bd1 100644 --- a/arch/arm/plat-samsung/clock.c +++ b/arch/arm/plat-samsung/clock.c | |||
@@ -375,7 +375,7 @@ static struct dentry *clk_debugfs_root; | |||
375 | static int clk_debugfs_register_one(struct clk *c) | 375 | static int clk_debugfs_register_one(struct clk *c) |
376 | { | 376 | { |
377 | int err; | 377 | int err; |
378 | struct dentry *d, *child, *child_tmp; | 378 | struct dentry *d; |
379 | struct clk *pa = c->parent; | 379 | struct clk *pa = c->parent; |
380 | char s[255]; | 380 | char s[255]; |
381 | char *p = s; | 381 | char *p = s; |
@@ -402,10 +402,7 @@ static int clk_debugfs_register_one(struct clk *c) | |||
402 | return 0; | 402 | return 0; |
403 | 403 | ||
404 | err_out: | 404 | err_out: |
405 | d = c->dent; | 405 | debugfs_remove_recursive(c->dent); |
406 | list_for_each_entry_safe(child, child_tmp, &d->d_subdirs, d_u.d_child) | ||
407 | debugfs_remove(child); | ||
408 | debugfs_remove(c->dent); | ||
409 | return err; | 406 | return err; |
410 | } | 407 | } |
411 | 408 | ||
diff --git a/arch/arm/plat-samsung/dev-backlight.c b/arch/arm/plat-samsung/dev-backlight.c new file mode 100644 index 000000000000..3cedd4c407af --- /dev/null +++ b/arch/arm/plat-samsung/dev-backlight.c | |||
@@ -0,0 +1,149 @@ | |||
1 | /* linux/arch/arm/plat-samsung/dev-backlight.c | ||
2 | * | ||
3 | * Copyright (c) 2011 Samsung Electronics Co., Ltd. | ||
4 | * http://www.samsung.com | ||
5 | * | ||
6 | * Common infrastructure for PWM Backlight for Samsung boards | ||
7 | * | ||
8 | * This program is free software; you can redistribute it and/or modify | ||
9 | * it under the terms of the GNU General Public License version 2 as | ||
10 | * published by the Free Software Foundation. | ||
11 | */ | ||
12 | |||
13 | #include <linux/gpio.h> | ||
14 | #include <linux/platform_device.h> | ||
15 | #include <linux/io.h> | ||
16 | #include <linux/pwm_backlight.h> | ||
17 | |||
18 | #include <plat/devs.h> | ||
19 | #include <plat/gpio-cfg.h> | ||
20 | #include <plat/backlight.h> | ||
21 | |||
22 | static int samsung_bl_init(struct device *dev) | ||
23 | { | ||
24 | int ret = 0; | ||
25 | struct platform_device *timer_dev = | ||
26 | container_of(dev->parent, struct platform_device, dev); | ||
27 | struct samsung_bl_gpio_info *bl_gpio_info = | ||
28 | timer_dev->dev.platform_data; | ||
29 | |||
30 | ret = gpio_request(bl_gpio_info->no, "Backlight"); | ||
31 | if (ret) { | ||
32 | printk(KERN_ERR "failed to request GPIO for LCD Backlight\n"); | ||
33 | return ret; | ||
34 | } | ||
35 | |||
36 | /* Configure GPIO pin with specific GPIO function for PWM timer */ | ||
37 | s3c_gpio_cfgpin(bl_gpio_info->no, bl_gpio_info->func); | ||
38 | |||
39 | return 0; | ||
40 | } | ||
41 | |||
42 | static void samsung_bl_exit(struct device *dev) | ||
43 | { | ||
44 | struct platform_device *timer_dev = | ||
45 | container_of(dev->parent, struct platform_device, dev); | ||
46 | struct samsung_bl_gpio_info *bl_gpio_info = | ||
47 | timer_dev->dev.platform_data; | ||
48 | |||
49 | s3c_gpio_cfgpin(bl_gpio_info->no, S3C_GPIO_OUTPUT); | ||
50 | gpio_free(bl_gpio_info->no); | ||
51 | } | ||
52 | |||
53 | /* Initialize few important fields of platform_pwm_backlight_data | ||
54 | * structure with default values. These fields can be overridden by | ||
55 | * board-specific values sent from machine file. | ||
56 | * For ease of operation, these fields are initialized with values | ||
57 | * used by most samsung boards. | ||
58 | * Users has the option of sending info about other parameters | ||
59 | * for their specific boards | ||
60 | */ | ||
61 | |||
62 | static struct platform_pwm_backlight_data samsung_dfl_bl_data __initdata = { | ||
63 | .max_brightness = 255, | ||
64 | .dft_brightness = 255, | ||
65 | .pwm_period_ns = 78770, | ||
66 | .init = samsung_bl_init, | ||
67 | .exit = samsung_bl_exit, | ||
68 | }; | ||
69 | |||
70 | static struct platform_device samsung_dfl_bl_device __initdata = { | ||
71 | .name = "pwm-backlight", | ||
72 | }; | ||
73 | |||
74 | /* samsung_bl_set - Set board specific data (if any) provided by user for | ||
75 | * PWM Backlight control and register specific PWM and backlight device. | ||
76 | * @gpio_info: structure containing GPIO info for PWM timer | ||
77 | * @bl_data: structure containing Backlight control data | ||
78 | */ | ||
79 | void samsung_bl_set(struct samsung_bl_gpio_info *gpio_info, | ||
80 | struct platform_pwm_backlight_data *bl_data) | ||
81 | { | ||
82 | int ret = 0; | ||
83 | struct platform_device *samsung_bl_device; | ||
84 | struct platform_pwm_backlight_data *samsung_bl_data; | ||
85 | |||
86 | samsung_bl_device = kmemdup(&samsung_dfl_bl_device, | ||
87 | sizeof(struct platform_device), GFP_KERNEL); | ||
88 | if (!samsung_bl_device) { | ||
89 | printk(KERN_ERR "%s: no memory for platform dev\n", __func__); | ||
90 | return; | ||
91 | } | ||
92 | |||
93 | samsung_bl_data = s3c_set_platdata(&samsung_dfl_bl_data, | ||
94 | sizeof(struct platform_pwm_backlight_data), samsung_bl_device); | ||
95 | if (!samsung_bl_data) { | ||
96 | printk(KERN_ERR "%s: no memory for platform dev\n", __func__); | ||
97 | goto err_data; | ||
98 | } | ||
99 | |||
100 | /* Copy board specific data provided by user */ | ||
101 | samsung_bl_data->pwm_id = bl_data->pwm_id; | ||
102 | samsung_bl_device->dev.parent = | ||
103 | &s3c_device_timer[samsung_bl_data->pwm_id].dev; | ||
104 | |||
105 | if (bl_data->max_brightness) | ||
106 | samsung_bl_data->max_brightness = bl_data->max_brightness; | ||
107 | if (bl_data->dft_brightness) | ||
108 | samsung_bl_data->dft_brightness = bl_data->dft_brightness; | ||
109 | if (bl_data->lth_brightness) | ||
110 | samsung_bl_data->lth_brightness = bl_data->lth_brightness; | ||
111 | if (bl_data->pwm_period_ns) | ||
112 | samsung_bl_data->pwm_period_ns = bl_data->pwm_period_ns; | ||
113 | if (bl_data->init) | ||
114 | samsung_bl_data->init = bl_data->init; | ||
115 | if (bl_data->notify) | ||
116 | samsung_bl_data->notify = bl_data->notify; | ||
117 | if (bl_data->exit) | ||
118 | samsung_bl_data->exit = bl_data->exit; | ||
119 | if (bl_data->check_fb) | ||
120 | samsung_bl_data->check_fb = bl_data->check_fb; | ||
121 | |||
122 | /* Keep the GPIO info for future use */ | ||
123 | s3c_device_timer[samsung_bl_data->pwm_id].dev.platform_data = gpio_info; | ||
124 | |||
125 | /* Register the specific PWM timer dev for Backlight control */ | ||
126 | ret = platform_device_register( | ||
127 | &s3c_device_timer[samsung_bl_data->pwm_id]); | ||
128 | if (ret) { | ||
129 | printk(KERN_ERR "failed to register pwm timer for backlight: %d\n", ret); | ||
130 | goto err_plat_reg1; | ||
131 | } | ||
132 | |||
133 | /* Register the Backlight dev */ | ||
134 | ret = platform_device_register(samsung_bl_device); | ||
135 | if (ret) { | ||
136 | printk(KERN_ERR "failed to register backlight device: %d\n", ret); | ||
137 | goto err_plat_reg2; | ||
138 | } | ||
139 | |||
140 | return; | ||
141 | |||
142 | err_plat_reg2: | ||
143 | platform_device_unregister(&s3c_device_timer[samsung_bl_data->pwm_id]); | ||
144 | err_plat_reg1: | ||
145 | kfree(samsung_bl_data); | ||
146 | err_data: | ||
147 | kfree(samsung_bl_device); | ||
148 | return; | ||
149 | } | ||
diff --git a/arch/arm/plat-samsung/dev-fb.c b/arch/arm/plat-samsung/dev-fb.c index bf60204c6297..49a1362fd25b 100644 --- a/arch/arm/plat-samsung/dev-fb.c +++ b/arch/arm/plat-samsung/dev-fb.c | |||
@@ -58,16 +58,6 @@ struct platform_device s3c_device_fb = { | |||
58 | 58 | ||
59 | void __init s3c_fb_set_platdata(struct s3c_fb_platdata *pd) | 59 | void __init s3c_fb_set_platdata(struct s3c_fb_platdata *pd) |
60 | { | 60 | { |
61 | struct s3c_fb_platdata *npd; | 61 | s3c_set_platdata(pd, sizeof(struct s3c_fb_platdata), |
62 | 62 | &s3c_device_fb); | |
63 | if (!pd) { | ||
64 | printk(KERN_ERR "%s: no platform data\n", __func__); | ||
65 | return; | ||
66 | } | ||
67 | |||
68 | npd = kmemdup(pd, sizeof(struct s3c_fb_platdata), GFP_KERNEL); | ||
69 | if (!npd) | ||
70 | printk(KERN_ERR "%s: no memory for platform data\n", __func__); | ||
71 | |||
72 | s3c_device_fb.dev.platform_data = npd; | ||
73 | } | 63 | } |
diff --git a/arch/arm/plat-samsung/dev-hwmon.c b/arch/arm/plat-samsung/dev-hwmon.c index b3ffb9587250..c91a79ce8f39 100644 --- a/arch/arm/plat-samsung/dev-hwmon.c +++ b/arch/arm/plat-samsung/dev-hwmon.c | |||
@@ -27,16 +27,6 @@ struct platform_device s3c_device_hwmon = { | |||
27 | 27 | ||
28 | void __init s3c_hwmon_set_platdata(struct s3c_hwmon_pdata *pd) | 28 | void __init s3c_hwmon_set_platdata(struct s3c_hwmon_pdata *pd) |
29 | { | 29 | { |
30 | struct s3c_hwmon_pdata *npd; | 30 | s3c_set_platdata(pd, sizeof(struct s3c_hwmon_pdata), |
31 | 31 | &s3c_device_hwmon); | |
32 | if (!pd) { | ||
33 | printk(KERN_ERR "%s: no platform data\n", __func__); | ||
34 | return; | ||
35 | } | ||
36 | |||
37 | npd = kmemdup(pd, sizeof(struct s3c_hwmon_pdata), GFP_KERNEL); | ||
38 | if (!npd) | ||
39 | printk(KERN_ERR "%s: no memory for platform data\n", __func__); | ||
40 | |||
41 | s3c_device_hwmon.dev.platform_data = npd; | ||
42 | } | 32 | } |
diff --git a/arch/arm/plat-samsung/dev-i2c0.c b/arch/arm/plat-samsung/dev-i2c0.c index 3a601c16f03c..f8251f5098bd 100644 --- a/arch/arm/plat-samsung/dev-i2c0.c +++ b/arch/arm/plat-samsung/dev-i2c0.c | |||
@@ -48,7 +48,7 @@ struct platform_device s3c_device_i2c0 = { | |||
48 | .resource = s3c_i2c_resource, | 48 | .resource = s3c_i2c_resource, |
49 | }; | 49 | }; |
50 | 50 | ||
51 | static struct s3c2410_platform_i2c default_i2c_data0 __initdata = { | 51 | struct s3c2410_platform_i2c default_i2c_data __initdata = { |
52 | .flags = 0, | 52 | .flags = 0, |
53 | .slave_addr = 0x10, | 53 | .slave_addr = 0x10, |
54 | .frequency = 100*1000, | 54 | .frequency = 100*1000, |
@@ -60,13 +60,11 @@ void __init s3c_i2c0_set_platdata(struct s3c2410_platform_i2c *pd) | |||
60 | struct s3c2410_platform_i2c *npd; | 60 | struct s3c2410_platform_i2c *npd; |
61 | 61 | ||
62 | if (!pd) | 62 | if (!pd) |
63 | pd = &default_i2c_data0; | 63 | pd = &default_i2c_data; |
64 | 64 | ||
65 | npd = kmemdup(pd, sizeof(struct s3c2410_platform_i2c), GFP_KERNEL); | 65 | npd = s3c_set_platdata(pd, sizeof(struct s3c2410_platform_i2c), |
66 | if (!npd) | 66 | &s3c_device_i2c0); |
67 | printk(KERN_ERR "%s: no memory for platform data\n", __func__); | ||
68 | else if (!npd->cfg_gpio) | ||
69 | npd->cfg_gpio = s3c_i2c0_cfg_gpio; | ||
70 | 67 | ||
71 | s3c_device_i2c0.dev.platform_data = npd; | 68 | if (!npd->cfg_gpio) |
69 | npd->cfg_gpio = s3c_i2c0_cfg_gpio; | ||
72 | } | 70 | } |
diff --git a/arch/arm/plat-samsung/dev-i2c1.c b/arch/arm/plat-samsung/dev-i2c1.c index 858ee2a0414c..3b7c7bec1cf9 100644 --- a/arch/arm/plat-samsung/dev-i2c1.c +++ b/arch/arm/plat-samsung/dev-i2c1.c | |||
@@ -44,26 +44,18 @@ struct platform_device s3c_device_i2c1 = { | |||
44 | .resource = s3c_i2c_resource, | 44 | .resource = s3c_i2c_resource, |
45 | }; | 45 | }; |
46 | 46 | ||
47 | static struct s3c2410_platform_i2c default_i2c_data1 __initdata = { | ||
48 | .flags = 0, | ||
49 | .bus_num = 1, | ||
50 | .slave_addr = 0x10, | ||
51 | .frequency = 100*1000, | ||
52 | .sda_delay = 100, | ||
53 | }; | ||
54 | |||
55 | void __init s3c_i2c1_set_platdata(struct s3c2410_platform_i2c *pd) | 47 | void __init s3c_i2c1_set_platdata(struct s3c2410_platform_i2c *pd) |
56 | { | 48 | { |
57 | struct s3c2410_platform_i2c *npd; | 49 | struct s3c2410_platform_i2c *npd; |
58 | 50 | ||
59 | if (!pd) | 51 | if (!pd) { |
60 | pd = &default_i2c_data1; | 52 | pd = &default_i2c_data; |
53 | pd->bus_num = 1; | ||
54 | } | ||
61 | 55 | ||
62 | npd = kmemdup(pd, sizeof(struct s3c2410_platform_i2c), GFP_KERNEL); | 56 | npd = s3c_set_platdata(pd, sizeof(struct s3c2410_platform_i2c), |
63 | if (!npd) | 57 | &s3c_device_i2c1); |
64 | printk(KERN_ERR "%s: no memory for platform data\n", __func__); | ||
65 | else if (!npd->cfg_gpio) | ||
66 | npd->cfg_gpio = s3c_i2c1_cfg_gpio; | ||
67 | 58 | ||
68 | s3c_device_i2c1.dev.platform_data = npd; | 59 | if (!npd->cfg_gpio) |
60 | npd->cfg_gpio = s3c_i2c1_cfg_gpio; | ||
69 | } | 61 | } |
diff --git a/arch/arm/plat-samsung/dev-i2c2.c b/arch/arm/plat-samsung/dev-i2c2.c index ff4ba69b6830..07e9fd0b1b8b 100644 --- a/arch/arm/plat-samsung/dev-i2c2.c +++ b/arch/arm/plat-samsung/dev-i2c2.c | |||
@@ -45,26 +45,18 @@ struct platform_device s3c_device_i2c2 = { | |||
45 | .resource = s3c_i2c_resource, | 45 | .resource = s3c_i2c_resource, |
46 | }; | 46 | }; |
47 | 47 | ||
48 | static struct s3c2410_platform_i2c default_i2c_data2 __initdata = { | ||
49 | .flags = 0, | ||
50 | .bus_num = 2, | ||
51 | .slave_addr = 0x10, | ||
52 | .frequency = 100*1000, | ||
53 | .sda_delay = 100, | ||
54 | }; | ||
55 | |||
56 | void __init s3c_i2c2_set_platdata(struct s3c2410_platform_i2c *pd) | 48 | void __init s3c_i2c2_set_platdata(struct s3c2410_platform_i2c *pd) |
57 | { | 49 | { |
58 | struct s3c2410_platform_i2c *npd; | 50 | struct s3c2410_platform_i2c *npd; |
59 | 51 | ||
60 | if (!pd) | 52 | if (!pd) { |
61 | pd = &default_i2c_data2; | 53 | pd = &default_i2c_data; |
54 | pd->bus_num = 2; | ||
55 | } | ||
62 | 56 | ||
63 | npd = kmemdup(pd, sizeof(struct s3c2410_platform_i2c), GFP_KERNEL); | 57 | npd = s3c_set_platdata(pd, sizeof(struct s3c2410_platform_i2c), |
64 | if (!npd) | 58 | &s3c_device_i2c2); |
65 | printk(KERN_ERR "%s: no memory for platform data\n", __func__); | ||
66 | else if (!npd->cfg_gpio) | ||
67 | npd->cfg_gpio = s3c_i2c2_cfg_gpio; | ||
68 | 59 | ||
69 | s3c_device_i2c2.dev.platform_data = npd; | 60 | if (!npd->cfg_gpio) |
61 | npd->cfg_gpio = s3c_i2c2_cfg_gpio; | ||
70 | } | 62 | } |
diff --git a/arch/arm/plat-samsung/dev-i2c3.c b/arch/arm/plat-samsung/dev-i2c3.c index 8586a10014b7..d48efa93c6e7 100644 --- a/arch/arm/plat-samsung/dev-i2c3.c +++ b/arch/arm/plat-samsung/dev-i2c3.c | |||
@@ -43,26 +43,18 @@ struct platform_device s3c_device_i2c3 = { | |||
43 | .resource = s3c_i2c_resource, | 43 | .resource = s3c_i2c_resource, |
44 | }; | 44 | }; |
45 | 45 | ||
46 | static struct s3c2410_platform_i2c default_i2c_data3 __initdata = { | ||
47 | .flags = 0, | ||
48 | .bus_num = 3, | ||
49 | .slave_addr = 0x10, | ||
50 | .frequency = 100*1000, | ||
51 | .sda_delay = 100, | ||
52 | }; | ||
53 | |||
54 | void __init s3c_i2c3_set_platdata(struct s3c2410_platform_i2c *pd) | 46 | void __init s3c_i2c3_set_platdata(struct s3c2410_platform_i2c *pd) |
55 | { | 47 | { |
56 | struct s3c2410_platform_i2c *npd; | 48 | struct s3c2410_platform_i2c *npd; |
57 | 49 | ||
58 | if (!pd) | 50 | if (!pd) { |
59 | pd = &default_i2c_data3; | 51 | pd = &default_i2c_data; |
52 | pd->bus_num = 3; | ||
53 | } | ||
60 | 54 | ||
61 | npd = kmemdup(pd, sizeof(struct s3c2410_platform_i2c), GFP_KERNEL); | 55 | npd = s3c_set_platdata(pd, sizeof(struct s3c2410_platform_i2c), |
62 | if (!npd) | 56 | &s3c_device_i2c3); |
63 | printk(KERN_ERR "%s: no memory for platform data\n", __func__); | ||
64 | else if (!npd->cfg_gpio) | ||
65 | npd->cfg_gpio = s3c_i2c3_cfg_gpio; | ||
66 | 57 | ||
67 | s3c_device_i2c3.dev.platform_data = npd; | 58 | if (!npd->cfg_gpio) |
59 | npd->cfg_gpio = s3c_i2c3_cfg_gpio; | ||
68 | } | 60 | } |
diff --git a/arch/arm/plat-samsung/dev-i2c4.c b/arch/arm/plat-samsung/dev-i2c4.c index df2159e2daa6..07e26444efe6 100644 --- a/arch/arm/plat-samsung/dev-i2c4.c +++ b/arch/arm/plat-samsung/dev-i2c4.c | |||
@@ -43,26 +43,18 @@ struct platform_device s3c_device_i2c4 = { | |||
43 | .resource = s3c_i2c_resource, | 43 | .resource = s3c_i2c_resource, |
44 | }; | 44 | }; |
45 | 45 | ||
46 | static struct s3c2410_platform_i2c default_i2c_data4 __initdata = { | ||
47 | .flags = 0, | ||
48 | .bus_num = 4, | ||
49 | .slave_addr = 0x10, | ||
50 | .frequency = 100*1000, | ||
51 | .sda_delay = 100, | ||
52 | }; | ||
53 | |||
54 | void __init s3c_i2c4_set_platdata(struct s3c2410_platform_i2c *pd) | 46 | void __init s3c_i2c4_set_platdata(struct s3c2410_platform_i2c *pd) |
55 | { | 47 | { |
56 | struct s3c2410_platform_i2c *npd; | 48 | struct s3c2410_platform_i2c *npd; |
57 | 49 | ||
58 | if (!pd) | 50 | if (!pd) { |
59 | pd = &default_i2c_data4; | 51 | pd = &default_i2c_data; |
52 | pd->bus_num = 4; | ||
53 | } | ||
60 | 54 | ||
61 | npd = kmemdup(pd, sizeof(struct s3c2410_platform_i2c), GFP_KERNEL); | 55 | npd = s3c_set_platdata(pd, sizeof(struct s3c2410_platform_i2c), |
62 | if (!npd) | 56 | &s3c_device_i2c4); |
63 | printk(KERN_ERR "%s: no memory for platform data\n", __func__); | ||
64 | else if (!npd->cfg_gpio) | ||
65 | npd->cfg_gpio = s3c_i2c4_cfg_gpio; | ||
66 | 57 | ||
67 | s3c_device_i2c4.dev.platform_data = npd; | 58 | if (!npd->cfg_gpio) |
59 | npd->cfg_gpio = s3c_i2c4_cfg_gpio; | ||
68 | } | 60 | } |
diff --git a/arch/arm/plat-samsung/dev-i2c5.c b/arch/arm/plat-samsung/dev-i2c5.c index 0499c2c3877b..f49655784563 100644 --- a/arch/arm/plat-samsung/dev-i2c5.c +++ b/arch/arm/plat-samsung/dev-i2c5.c | |||
@@ -43,26 +43,18 @@ struct platform_device s3c_device_i2c5 = { | |||
43 | .resource = s3c_i2c_resource, | 43 | .resource = s3c_i2c_resource, |
44 | }; | 44 | }; |
45 | 45 | ||
46 | static struct s3c2410_platform_i2c default_i2c_data5 __initdata = { | ||
47 | .flags = 0, | ||
48 | .bus_num = 5, | ||
49 | .slave_addr = 0x10, | ||
50 | .frequency = 100*1000, | ||
51 | .sda_delay = 100, | ||
52 | }; | ||
53 | |||
54 | void __init s3c_i2c5_set_platdata(struct s3c2410_platform_i2c *pd) | 46 | void __init s3c_i2c5_set_platdata(struct s3c2410_platform_i2c *pd) |
55 | { | 47 | { |
56 | struct s3c2410_platform_i2c *npd; | 48 | struct s3c2410_platform_i2c *npd; |
57 | 49 | ||
58 | if (!pd) | 50 | if (!pd) { |
59 | pd = &default_i2c_data5; | 51 | pd = &default_i2c_data; |
52 | pd->bus_num = 5; | ||
53 | } | ||
60 | 54 | ||
61 | npd = kmemdup(pd, sizeof(struct s3c2410_platform_i2c), GFP_KERNEL); | 55 | npd = s3c_set_platdata(pd, sizeof(struct s3c2410_platform_i2c), |
62 | if (!npd) | 56 | &s3c_device_i2c5); |
63 | printk(KERN_ERR "%s: no memory for platform data\n", __func__); | ||
64 | else if (!npd->cfg_gpio) | ||
65 | npd->cfg_gpio = s3c_i2c5_cfg_gpio; | ||
66 | 57 | ||
67 | s3c_device_i2c5.dev.platform_data = npd; | 58 | if (!npd->cfg_gpio) |
59 | npd->cfg_gpio = s3c_i2c5_cfg_gpio; | ||
68 | } | 60 | } |
diff --git a/arch/arm/plat-samsung/dev-i2c6.c b/arch/arm/plat-samsung/dev-i2c6.c index 4083108908a8..141d799944e2 100644 --- a/arch/arm/plat-samsung/dev-i2c6.c +++ b/arch/arm/plat-samsung/dev-i2c6.c | |||
@@ -43,26 +43,18 @@ struct platform_device s3c_device_i2c6 = { | |||
43 | .resource = s3c_i2c_resource, | 43 | .resource = s3c_i2c_resource, |
44 | }; | 44 | }; |
45 | 45 | ||
46 | static struct s3c2410_platform_i2c default_i2c_data6 __initdata = { | ||
47 | .flags = 0, | ||
48 | .bus_num = 6, | ||
49 | .slave_addr = 0x10, | ||
50 | .frequency = 100*1000, | ||
51 | .sda_delay = 100, | ||
52 | }; | ||
53 | |||
54 | void __init s3c_i2c6_set_platdata(struct s3c2410_platform_i2c *pd) | 46 | void __init s3c_i2c6_set_platdata(struct s3c2410_platform_i2c *pd) |
55 | { | 47 | { |
56 | struct s3c2410_platform_i2c *npd; | 48 | struct s3c2410_platform_i2c *npd; |
57 | 49 | ||
58 | if (!pd) | 50 | if (!pd) { |
59 | pd = &default_i2c_data6; | 51 | pd = &default_i2c_data; |
52 | pd->bus_num = 6; | ||
53 | } | ||
60 | 54 | ||
61 | npd = kmemdup(pd, sizeof(struct s3c2410_platform_i2c), GFP_KERNEL); | 55 | npd = s3c_set_platdata(pd, sizeof(struct s3c2410_platform_i2c), |
62 | if (!npd) | 56 | &s3c_device_i2c6); |
63 | printk(KERN_ERR "%s: no memory for platform data\n", __func__); | ||
64 | else if (!npd->cfg_gpio) | ||
65 | npd->cfg_gpio = s3c_i2c6_cfg_gpio; | ||
66 | 57 | ||
67 | s3c_device_i2c6.dev.platform_data = npd; | 58 | if (!npd->cfg_gpio) |
59 | npd->cfg_gpio = s3c_i2c6_cfg_gpio; | ||
68 | } | 60 | } |
diff --git a/arch/arm/plat-samsung/dev-i2c7.c b/arch/arm/plat-samsung/dev-i2c7.c index 1182451d7dce..9dddcd1665b5 100644 --- a/arch/arm/plat-samsung/dev-i2c7.c +++ b/arch/arm/plat-samsung/dev-i2c7.c | |||
@@ -43,26 +43,18 @@ struct platform_device s3c_device_i2c7 = { | |||
43 | .resource = s3c_i2c_resource, | 43 | .resource = s3c_i2c_resource, |
44 | }; | 44 | }; |
45 | 45 | ||
46 | static struct s3c2410_platform_i2c default_i2c_data7 __initdata = { | ||
47 | .flags = 0, | ||
48 | .bus_num = 7, | ||
49 | .slave_addr = 0x10, | ||
50 | .frequency = 100*1000, | ||
51 | .sda_delay = 100, | ||
52 | }; | ||
53 | |||
54 | void __init s3c_i2c7_set_platdata(struct s3c2410_platform_i2c *pd) | 46 | void __init s3c_i2c7_set_platdata(struct s3c2410_platform_i2c *pd) |
55 | { | 47 | { |
56 | struct s3c2410_platform_i2c *npd; | 48 | struct s3c2410_platform_i2c *npd; |
57 | 49 | ||
58 | if (!pd) | 50 | if (!pd) { |
59 | pd = &default_i2c_data7; | 51 | pd = &default_i2c_data; |
52 | pd->bus_num = 7; | ||
53 | } | ||
60 | 54 | ||
61 | npd = kmemdup(pd, sizeof(struct s3c2410_platform_i2c), GFP_KERNEL); | 55 | npd = s3c_set_platdata(pd, sizeof(struct s3c2410_platform_i2c), |
62 | if (!npd) | 56 | &s3c_device_i2c7); |
63 | printk(KERN_ERR "%s: no memory for platform data\n", __func__); | ||
64 | else if (!npd->cfg_gpio) | ||
65 | npd->cfg_gpio = s3c_i2c7_cfg_gpio; | ||
66 | 57 | ||
67 | s3c_device_i2c7.dev.platform_data = npd; | 58 | if (!npd->cfg_gpio) |
59 | npd->cfg_gpio = s3c_i2c7_cfg_gpio; | ||
68 | } | 60 | } |
diff --git a/arch/arm/plat-samsung/dev-nand.c b/arch/arm/plat-samsung/dev-nand.c index 6927ae8fd118..b8e30ec6ac26 100644 --- a/arch/arm/plat-samsung/dev-nand.c +++ b/arch/arm/plat-samsung/dev-nand.c | |||
@@ -91,11 +91,10 @@ void __init s3c_nand_set_platdata(struct s3c2410_platform_nand *nand) | |||
91 | * time then there is little chance the system is going to run. | 91 | * time then there is little chance the system is going to run. |
92 | */ | 92 | */ |
93 | 93 | ||
94 | npd = kmemdup(nand, sizeof(struct s3c2410_platform_nand), GFP_KERNEL); | 94 | npd = s3c_set_platdata(nand, sizeof(struct s3c2410_platform_nand), |
95 | if (!npd) { | 95 | &s3c_device_nand); |
96 | printk(KERN_ERR "%s: failed copying platform data\n", __func__); | 96 | if (!npd) |
97 | return; | 97 | return; |
98 | } | ||
99 | 98 | ||
100 | /* now see if we need to copy any of the nand set data */ | 99 | /* now see if we need to copy any of the nand set data */ |
101 | 100 | ||
@@ -123,6 +122,4 @@ void __init s3c_nand_set_platdata(struct s3c2410_platform_nand *nand) | |||
123 | to++; | 122 | to++; |
124 | } | 123 | } |
125 | } | 124 | } |
126 | |||
127 | s3c_device_nand.dev.platform_data = npd; | ||
128 | } | 125 | } |
diff --git a/arch/arm/plat-samsung/dev-ts.c b/arch/arm/plat-samsung/dev-ts.c index 3e4bd8147bf4..82543f0248ac 100644 --- a/arch/arm/plat-samsung/dev-ts.c +++ b/arch/arm/plat-samsung/dev-ts.c | |||
@@ -45,16 +45,6 @@ struct platform_device s3c_device_ts = { | |||
45 | 45 | ||
46 | void __init s3c24xx_ts_set_platdata(struct s3c2410_ts_mach_info *pd) | 46 | void __init s3c24xx_ts_set_platdata(struct s3c2410_ts_mach_info *pd) |
47 | { | 47 | { |
48 | struct s3c2410_ts_mach_info *npd; | 48 | s3c_set_platdata(pd, sizeof(struct s3c2410_ts_mach_info), |
49 | 49 | &s3c_device_ts); | |
50 | if (!pd) { | ||
51 | printk(KERN_ERR "%s: no platform data\n", __func__); | ||
52 | return; | ||
53 | } | ||
54 | |||
55 | npd = kmemdup(pd, sizeof(struct s3c2410_ts_mach_info), GFP_KERNEL); | ||
56 | if (!npd) | ||
57 | printk(KERN_ERR "%s: no memory for platform data\n", __func__); | ||
58 | |||
59 | s3c_device_ts.dev.platform_data = npd; | ||
60 | } | 50 | } |
diff --git a/arch/arm/plat-samsung/dev-usb.c b/arch/arm/plat-samsung/dev-usb.c index 0e0a3bf5c982..33fbaa967700 100644 --- a/arch/arm/plat-samsung/dev-usb.c +++ b/arch/arm/plat-samsung/dev-usb.c | |||
@@ -60,11 +60,6 @@ EXPORT_SYMBOL(s3c_device_ohci); | |||
60 | */ | 60 | */ |
61 | void __init s3c_ohci_set_platdata(struct s3c2410_hcd_info *info) | 61 | void __init s3c_ohci_set_platdata(struct s3c2410_hcd_info *info) |
62 | { | 62 | { |
63 | struct s3c2410_hcd_info *npd; | 63 | s3c_set_platdata(info, sizeof(struct s3c2410_hcd_info), |
64 | 64 | &s3c_device_ohci); | |
65 | npd = kmemdup(info, sizeof(struct s3c2410_hcd_info), GFP_KERNEL); | ||
66 | if (!npd) | ||
67 | printk(KERN_ERR "%s: no memory for platform data\n", __func__); | ||
68 | |||
69 | s3c_device_ohci.dev.platform_data = npd; | ||
70 | } | 65 | } |
diff --git a/arch/arm/plat-samsung/dma.c b/arch/arm/plat-samsung/dma.c index cb459dd95459..6143aa147688 100644 --- a/arch/arm/plat-samsung/dma.c +++ b/arch/arm/plat-samsung/dma.c | |||
@@ -41,7 +41,7 @@ struct s3c2410_dma_chan *s3c_dma_lookup_channel(unsigned int channel) | |||
41 | * irq? | 41 | * irq? |
42 | */ | 42 | */ |
43 | 43 | ||
44 | int s3c2410_dma_set_opfn(unsigned int channel, s3c2410_dma_opfn_t rtn) | 44 | int s3c2410_dma_set_opfn(enum dma_ch channel, s3c2410_dma_opfn_t rtn) |
45 | { | 45 | { |
46 | struct s3c2410_dma_chan *chan = s3c_dma_lookup_channel(channel); | 46 | struct s3c2410_dma_chan *chan = s3c_dma_lookup_channel(channel); |
47 | 47 | ||
@@ -56,7 +56,7 @@ int s3c2410_dma_set_opfn(unsigned int channel, s3c2410_dma_opfn_t rtn) | |||
56 | } | 56 | } |
57 | EXPORT_SYMBOL(s3c2410_dma_set_opfn); | 57 | EXPORT_SYMBOL(s3c2410_dma_set_opfn); |
58 | 58 | ||
59 | int s3c2410_dma_set_buffdone_fn(unsigned int channel, s3c2410_dma_cbfn_t rtn) | 59 | int s3c2410_dma_set_buffdone_fn(enum dma_ch channel, s3c2410_dma_cbfn_t rtn) |
60 | { | 60 | { |
61 | struct s3c2410_dma_chan *chan = s3c_dma_lookup_channel(channel); | 61 | struct s3c2410_dma_chan *chan = s3c_dma_lookup_channel(channel); |
62 | 62 | ||
@@ -71,7 +71,7 @@ int s3c2410_dma_set_buffdone_fn(unsigned int channel, s3c2410_dma_cbfn_t rtn) | |||
71 | } | 71 | } |
72 | EXPORT_SYMBOL(s3c2410_dma_set_buffdone_fn); | 72 | EXPORT_SYMBOL(s3c2410_dma_set_buffdone_fn); |
73 | 73 | ||
74 | int s3c2410_dma_setflags(unsigned int channel, unsigned int flags) | 74 | int s3c2410_dma_setflags(enum dma_ch channel, unsigned int flags) |
75 | { | 75 | { |
76 | struct s3c2410_dma_chan *chan = s3c_dma_lookup_channel(channel); | 76 | struct s3c2410_dma_chan *chan = s3c_dma_lookup_channel(channel); |
77 | 77 | ||
diff --git a/arch/arm/plat-samsung/include/plat/backlight.h b/arch/arm/plat-samsung/include/plat/backlight.h new file mode 100644 index 000000000000..51d8da846a62 --- /dev/null +++ b/arch/arm/plat-samsung/include/plat/backlight.h | |||
@@ -0,0 +1,26 @@ | |||
1 | /* linux/arch/arm/plat-samsung/include/plat/backlight.h | ||
2 | * | ||
3 | * Copyright (c) 2011 Samsung Electronics Co., Ltd. | ||
4 | * http://www.samsung.com | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License version 2 as | ||
8 | * published by the Free Software Foundation. | ||
9 | */ | ||
10 | |||
11 | #ifndef __ASM_PLAT_BACKLIGHT_H | ||
12 | #define __ASM_PLAT_BACKLIGHT_H __FILE__ | ||
13 | |||
14 | /* samsung_bl_gpio_info - GPIO info for PWM Backlight control | ||
15 | * @no: GPIO number for PWM timer out | ||
16 | * @func: Special function of GPIO line for PWM timer | ||
17 | */ | ||
18 | struct samsung_bl_gpio_info { | ||
19 | int no; | ||
20 | int func; | ||
21 | }; | ||
22 | |||
23 | extern void samsung_bl_set(struct samsung_bl_gpio_info *gpio_info, | ||
24 | struct platform_pwm_backlight_data *bl_data); | ||
25 | |||
26 | #endif /* __ASM_PLAT_BACKLIGHT_H */ | ||
diff --git a/arch/arm/plat-samsung/include/plat/dma.h b/arch/arm/plat-samsung/include/plat/dma.h index 2e8f8c6560d7..8c273b7a6f56 100644 --- a/arch/arm/plat-samsung/include/plat/dma.h +++ b/arch/arm/plat-samsung/include/plat/dma.h | |||
@@ -42,6 +42,7 @@ struct s3c2410_dma_client { | |||
42 | }; | 42 | }; |
43 | 43 | ||
44 | struct s3c2410_dma_chan; | 44 | struct s3c2410_dma_chan; |
45 | enum dma_ch; | ||
45 | 46 | ||
46 | /* s3c2410_dma_cbfn_t | 47 | /* s3c2410_dma_cbfn_t |
47 | * | 48 | * |
@@ -62,7 +63,7 @@ typedef int (*s3c2410_dma_opfn_t)(struct s3c2410_dma_chan *, | |||
62 | * request a dma channel exclusivley | 63 | * request a dma channel exclusivley |
63 | */ | 64 | */ |
64 | 65 | ||
65 | extern int s3c2410_dma_request(unsigned int channel, | 66 | extern int s3c2410_dma_request(enum dma_ch channel, |
66 | struct s3c2410_dma_client *, void *dev); | 67 | struct s3c2410_dma_client *, void *dev); |
67 | 68 | ||
68 | 69 | ||
@@ -71,14 +72,14 @@ extern int s3c2410_dma_request(unsigned int channel, | |||
71 | * change the state of the dma channel | 72 | * change the state of the dma channel |
72 | */ | 73 | */ |
73 | 74 | ||
74 | extern int s3c2410_dma_ctrl(unsigned int channel, enum s3c2410_chan_op op); | 75 | extern int s3c2410_dma_ctrl(enum dma_ch channel, enum s3c2410_chan_op op); |
75 | 76 | ||
76 | /* s3c2410_dma_setflags | 77 | /* s3c2410_dma_setflags |
77 | * | 78 | * |
78 | * set the channel's flags to a given state | 79 | * set the channel's flags to a given state |
79 | */ | 80 | */ |
80 | 81 | ||
81 | extern int s3c2410_dma_setflags(unsigned int channel, | 82 | extern int s3c2410_dma_setflags(enum dma_ch channel, |
82 | unsigned int flags); | 83 | unsigned int flags); |
83 | 84 | ||
84 | /* s3c2410_dma_free | 85 | /* s3c2410_dma_free |
@@ -86,7 +87,7 @@ extern int s3c2410_dma_setflags(unsigned int channel, | |||
86 | * free the dma channel (will also abort any outstanding operations) | 87 | * free the dma channel (will also abort any outstanding operations) |
87 | */ | 88 | */ |
88 | 89 | ||
89 | extern int s3c2410_dma_free(unsigned int channel, struct s3c2410_dma_client *); | 90 | extern int s3c2410_dma_free(enum dma_ch channel, struct s3c2410_dma_client *); |
90 | 91 | ||
91 | /* s3c2410_dma_enqueue | 92 | /* s3c2410_dma_enqueue |
92 | * | 93 | * |
@@ -95,7 +96,7 @@ extern int s3c2410_dma_free(unsigned int channel, struct s3c2410_dma_client *); | |||
95 | * drained before the buffer is given to the DMA system. | 96 | * drained before the buffer is given to the DMA system. |
96 | */ | 97 | */ |
97 | 98 | ||
98 | extern int s3c2410_dma_enqueue(unsigned int channel, void *id, | 99 | extern int s3c2410_dma_enqueue(enum dma_ch channel, void *id, |
99 | dma_addr_t data, int size); | 100 | dma_addr_t data, int size); |
100 | 101 | ||
101 | /* s3c2410_dma_config | 102 | /* s3c2410_dma_config |
@@ -103,14 +104,14 @@ extern int s3c2410_dma_enqueue(unsigned int channel, void *id, | |||
103 | * configure the dma channel | 104 | * configure the dma channel |
104 | */ | 105 | */ |
105 | 106 | ||
106 | extern int s3c2410_dma_config(unsigned int channel, int xferunit); | 107 | extern int s3c2410_dma_config(enum dma_ch channel, int xferunit); |
107 | 108 | ||
108 | /* s3c2410_dma_devconfig | 109 | /* s3c2410_dma_devconfig |
109 | * | 110 | * |
110 | * configure the device we're talking to | 111 | * configure the device we're talking to |
111 | */ | 112 | */ |
112 | 113 | ||
113 | extern int s3c2410_dma_devconfig(unsigned int channel, | 114 | extern int s3c2410_dma_devconfig(enum dma_ch channel, |
114 | enum s3c2410_dmasrc source, unsigned long devaddr); | 115 | enum s3c2410_dmasrc source, unsigned long devaddr); |
115 | 116 | ||
116 | /* s3c2410_dma_getposition | 117 | /* s3c2410_dma_getposition |
@@ -118,10 +119,10 @@ extern int s3c2410_dma_devconfig(unsigned int channel, | |||
118 | * get the position that the dma transfer is currently at | 119 | * get the position that the dma transfer is currently at |
119 | */ | 120 | */ |
120 | 121 | ||
121 | extern int s3c2410_dma_getposition(unsigned int channel, | 122 | extern int s3c2410_dma_getposition(enum dma_ch channel, |
122 | dma_addr_t *src, dma_addr_t *dest); | 123 | dma_addr_t *src, dma_addr_t *dest); |
123 | 124 | ||
124 | extern int s3c2410_dma_set_opfn(unsigned int, s3c2410_dma_opfn_t rtn); | 125 | extern int s3c2410_dma_set_opfn(enum dma_ch, s3c2410_dma_opfn_t rtn); |
125 | extern int s3c2410_dma_set_buffdone_fn(unsigned int, s3c2410_dma_cbfn_t rtn); | 126 | extern int s3c2410_dma_set_buffdone_fn(enum dma_ch, s3c2410_dma_cbfn_t rtn); |
126 | 127 | ||
127 | 128 | ||
diff --git a/arch/arm/plat-samsung/include/plat/gpio-cfg-helpers.h b/arch/arm/plat-samsung/include/plat/gpio-cfg-helpers.h index 3ad8386599c3..9a4e53d52967 100644 --- a/arch/arm/plat-samsung/include/plat/gpio-cfg-helpers.h +++ b/arch/arm/plat-samsung/include/plat/gpio-cfg-helpers.h | |||
@@ -140,7 +140,7 @@ extern unsigned s3c_gpio_getcfg_s3c64xx_4bit(struct s3c_gpio_chip *chip, | |||
140 | 140 | ||
141 | /* Pull-{up,down} resistor controls. | 141 | /* Pull-{up,down} resistor controls. |
142 | * | 142 | * |
143 | * S3C2410,S3C2440,S3C24A0 = Pull-UP, | 143 | * S3C2410,S3C2440 = Pull-UP, |
144 | * S3C2412,S3C2413 = Pull-Down | 144 | * S3C2412,S3C2413 = Pull-Down |
145 | * S3C6400,S3C6410 = Pull-Both [None,Down,Up,Undef] | 145 | * S3C6400,S3C6410 = Pull-Both [None,Down,Up,Undef] |
146 | * S3C2443 = Pull-Both [not same as S3C6400] | 146 | * S3C2443 = Pull-Both [not same as S3C6400] |
diff --git a/arch/arm/plat-samsung/include/plat/iic.h b/arch/arm/plat-samsung/include/plat/iic.h index 1543da8f85c1..56b0059439e1 100644 --- a/arch/arm/plat-samsung/include/plat/iic.h +++ b/arch/arm/plat-samsung/include/plat/iic.h | |||
@@ -71,4 +71,6 @@ extern void s3c_i2c5_cfg_gpio(struct platform_device *dev); | |||
71 | extern void s3c_i2c6_cfg_gpio(struct platform_device *dev); | 71 | extern void s3c_i2c6_cfg_gpio(struct platform_device *dev); |
72 | extern void s3c_i2c7_cfg_gpio(struct platform_device *dev); | 72 | extern void s3c_i2c7_cfg_gpio(struct platform_device *dev); |
73 | 73 | ||
74 | extern struct s3c2410_platform_i2c default_i2c_data; | ||
75 | |||
74 | #endif /* __ASM_ARCH_IIC_H */ | 76 | #endif /* __ASM_ARCH_IIC_H */ |
diff --git a/arch/arm/plat-samsung/include/plat/pm.h b/arch/arm/plat-samsung/include/plat/pm.h index 7fb6f6be8c81..f6749916d194 100644 --- a/arch/arm/plat-samsung/include/plat/pm.h +++ b/arch/arm/plat-samsung/include/plat/pm.h | |||
@@ -42,7 +42,7 @@ extern unsigned long s3c_irqwake_eintallow; | |||
42 | /* per-cpu sleep functions */ | 42 | /* per-cpu sleep functions */ |
43 | 43 | ||
44 | extern void (*pm_cpu_prep)(void); | 44 | extern void (*pm_cpu_prep)(void); |
45 | extern void (*pm_cpu_sleep)(void); | 45 | extern int (*pm_cpu_sleep)(unsigned long); |
46 | 46 | ||
47 | /* Flags for PM Control */ | 47 | /* Flags for PM Control */ |
48 | 48 | ||
@@ -52,10 +52,9 @@ extern unsigned char pm_uart_udivslot; /* true to save UART UDIVSLOT */ | |||
52 | 52 | ||
53 | /* from sleep.S */ | 53 | /* from sleep.S */ |
54 | 54 | ||
55 | extern int s3c_cpu_save(unsigned long *saveblk, long); | ||
56 | extern void s3c_cpu_resume(void); | 55 | extern void s3c_cpu_resume(void); |
57 | 56 | ||
58 | extern void s3c2410_cpu_suspend(void); | 57 | extern int s3c2410_cpu_suspend(unsigned long); |
59 | 58 | ||
60 | /* sleep save info */ | 59 | /* sleep save info */ |
61 | 60 | ||
diff --git a/arch/arm/plat-samsung/include/plat/regs-serial.h b/arch/arm/plat-samsung/include/plat/regs-serial.h index 116edfe120b9..bac36fa3becb 100644 --- a/arch/arm/plat-samsung/include/plat/regs-serial.h +++ b/arch/arm/plat-samsung/include/plat/regs-serial.h | |||
@@ -155,14 +155,6 @@ | |||
155 | #define S3C2410_UFSTAT_RXMASK (15<<0) | 155 | #define S3C2410_UFSTAT_RXMASK (15<<0) |
156 | #define S3C2410_UFSTAT_RXSHIFT (0) | 156 | #define S3C2410_UFSTAT_RXSHIFT (0) |
157 | 157 | ||
158 | /* UFSTAT S3C24A0 */ | ||
159 | #define S3C24A0_UFSTAT_TXFULL (1 << 14) | ||
160 | #define S3C24A0_UFSTAT_RXFULL (1 << 6) | ||
161 | #define S3C24A0_UFSTAT_TXMASK (63 << 8) | ||
162 | #define S3C24A0_UFSTAT_TXSHIFT (8) | ||
163 | #define S3C24A0_UFSTAT_RXMASK (63) | ||
164 | #define S3C24A0_UFSTAT_RXSHIFT (0) | ||
165 | |||
166 | /* UFSTAT S3C2443 same as S3C2440 */ | 158 | /* UFSTAT S3C2443 same as S3C2440 */ |
167 | #define S3C2440_UFSTAT_TXFULL (1<<14) | 159 | #define S3C2440_UFSTAT_TXFULL (1<<14) |
168 | #define S3C2440_UFSTAT_RXFULL (1<<6) | 160 | #define S3C2440_UFSTAT_RXFULL (1<<6) |
diff --git a/arch/arm/plat-samsung/irq-uart.c b/arch/arm/plat-samsung/irq-uart.c index 8960eaf8bb22..3014c7226bd1 100644 --- a/arch/arm/plat-samsung/irq-uart.c +++ b/arch/arm/plat-samsung/irq-uart.c | |||
@@ -61,8 +61,15 @@ static void __init s3c_init_uart_irq(struct s3c_uart_irq *uirq) | |||
61 | 61 | ||
62 | gc = irq_alloc_generic_chip("s3c-uart", 1, uirq->base_irq, reg_base, | 62 | gc = irq_alloc_generic_chip("s3c-uart", 1, uirq->base_irq, reg_base, |
63 | handle_level_irq); | 63 | handle_level_irq); |
64 | |||
65 | if (!gc) { | ||
66 | pr_err("%s: irq_alloc_generic_chip for IRQ %u failed\n", | ||
67 | __func__, uirq->base_irq); | ||
68 | return; | ||
69 | } | ||
70 | |||
64 | ct = gc->chip_types; | 71 | ct = gc->chip_types; |
65 | ct->chip.irq_ack = irq_gc_ack; | 72 | ct->chip.irq_ack = irq_gc_ack_set_bit; |
66 | ct->chip.irq_mask = irq_gc_mask_set_bit; | 73 | ct->chip.irq_mask = irq_gc_mask_set_bit; |
67 | ct->chip.irq_unmask = irq_gc_mask_clr_bit; | 74 | ct->chip.irq_unmask = irq_gc_mask_clr_bit; |
68 | ct->regs.ack = S3C64XX_UINTP; | 75 | ct->regs.ack = S3C64XX_UINTP; |
diff --git a/arch/arm/plat-samsung/irq-vic-timer.c b/arch/arm/plat-samsung/irq-vic-timer.c index a607546ddbd0..f714d060370d 100644 --- a/arch/arm/plat-samsung/irq-vic-timer.c +++ b/arch/arm/plat-samsung/irq-vic-timer.c | |||
@@ -54,6 +54,13 @@ void __init s3c_init_vic_timer_irq(unsigned int num, unsigned int timer_irq) | |||
54 | 54 | ||
55 | s3c_tgc = irq_alloc_generic_chip("s3c-timer", 1, timer_irq, | 55 | s3c_tgc = irq_alloc_generic_chip("s3c-timer", 1, timer_irq, |
56 | S3C64XX_TINT_CSTAT, handle_level_irq); | 56 | S3C64XX_TINT_CSTAT, handle_level_irq); |
57 | |||
58 | if (!s3c_tgc) { | ||
59 | pr_err("%s: irq_alloc_generic_chip for IRQ %d failed\n", | ||
60 | __func__, timer_irq); | ||
61 | return; | ||
62 | } | ||
63 | |||
57 | ct = s3c_tgc->chip_types; | 64 | ct = s3c_tgc->chip_types; |
58 | ct->chip.irq_mask = irq_gc_mask_clr_bit; | 65 | ct->chip.irq_mask = irq_gc_mask_clr_bit; |
59 | ct->chip.irq_unmask = irq_gc_mask_set_bit; | 66 | ct->chip.irq_unmask = irq_gc_mask_set_bit; |
diff --git a/arch/arm/plat-samsung/pm-check.c b/arch/arm/plat-samsung/pm-check.c index 6b733fafe7cd..3cbd62666b1e 100644 --- a/arch/arm/plat-samsung/pm-check.c +++ b/arch/arm/plat-samsung/pm-check.c | |||
@@ -72,7 +72,7 @@ static void s3c_pm_run_sysram(run_fn_t fn, u32 *arg) | |||
72 | 72 | ||
73 | static u32 *s3c_pm_countram(struct resource *res, u32 *val) | 73 | static u32 *s3c_pm_countram(struct resource *res, u32 *val) |
74 | { | 74 | { |
75 | u32 size = (u32)(res->end - res->start)+1; | 75 | u32 size = (u32)resource_size(res); |
76 | 76 | ||
77 | size += CHECK_CHUNKSIZE-1; | 77 | size += CHECK_CHUNKSIZE-1; |
78 | size /= CHECK_CHUNKSIZE; | 78 | size /= CHECK_CHUNKSIZE; |
diff --git a/arch/arm/plat-samsung/pm.c b/arch/arm/plat-samsung/pm.c index 4f9a9515beae..ae6f99834cdd 100644 --- a/arch/arm/plat-samsung/pm.c +++ b/arch/arm/plat-samsung/pm.c | |||
@@ -20,6 +20,7 @@ | |||
20 | #include <linux/io.h> | 20 | #include <linux/io.h> |
21 | 21 | ||
22 | #include <asm/cacheflush.h> | 22 | #include <asm/cacheflush.h> |
23 | #include <asm/suspend.h> | ||
23 | #include <mach/hardware.h> | 24 | #include <mach/hardware.h> |
24 | #include <mach/map.h> | 25 | #include <mach/map.h> |
25 | 26 | ||
@@ -231,7 +232,7 @@ static void __maybe_unused s3c_pm_show_resume_irqs(int start, | |||
231 | 232 | ||
232 | 233 | ||
233 | void (*pm_cpu_prep)(void); | 234 | void (*pm_cpu_prep)(void); |
234 | void (*pm_cpu_sleep)(void); | 235 | int (*pm_cpu_sleep)(unsigned long); |
235 | 236 | ||
236 | #define any_allowed(mask, allow) (((mask) & (allow)) != (allow)) | 237 | #define any_allowed(mask, allow) (((mask) & (allow)) != (allow)) |
237 | 238 | ||
@@ -295,15 +296,11 @@ static int s3c_pm_enter(suspend_state_t state) | |||
295 | 296 | ||
296 | s3c_pm_arch_stop_clocks(); | 297 | s3c_pm_arch_stop_clocks(); |
297 | 298 | ||
298 | /* s3c_cpu_save will also act as our return point from when | 299 | /* this will also act as our return point from when |
299 | * we resume as it saves its own register state and restores it | 300 | * we resume as it saves its own register state and restores it |
300 | * during the resume. */ | 301 | * during the resume. */ |
301 | 302 | ||
302 | s3c_cpu_save(0, PLAT_PHYS_OFFSET - PAGE_OFFSET); | 303 | cpu_suspend(0, pm_cpu_sleep); |
303 | |||
304 | /* restore the cpu state using the kernel's cpu init code. */ | ||
305 | |||
306 | cpu_init(); | ||
307 | 304 | ||
308 | /* restore the system state */ | 305 | /* restore the system state */ |
309 | 306 | ||