diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2011-07-26 20:41:04 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2011-07-26 20:41:04 -0400 |
commit | 69f1d1a6acbaa7d83ef3f4ee26209c58cd000204 (patch) | |
tree | 12be981f8a123b8361edd64b84fd72f339a9655d /arch/arm/plat-samsung | |
parent | 2d86a3f04e345b03d5e429bfe14985ce26bff4dc (diff) | |
parent | 1e09939bad24df95ddeeeca4fbec64fa94b66def (diff) |
Merge branch 'next/devel' of ssh://master.kernel.org/pub/scm/linux/kernel/git/arm/linux-arm-soc
* 'next/devel' of ssh://master.kernel.org/pub/scm/linux/kernel/git/arm/linux-arm-soc: (128 commits)
ARM: S5P64X0: External Interrupt Support
ARM: EXYNOS4: Enable MFC on Samsung NURI
ARM: EXYNOS4: Enable MFC on universal_c210
ARM: S5PV210: Enable MFC on Goni
ARM: S5P: Add support for MFC device
ARM: EXYNOS4: Add support FIMD on SMDKC210
ARM: EXYNOS4: Add platform device and helper functions for FIMD
ARM: EXYNOS4: Add resource definition for FIMD
ARM: EXYNOS4: Change devname for FIMD clkdev
ARM: SAMSUNG: Add IRQ_I2S0 definition
ARM: SAMSUNG: Add platform device for idma
ARM: EXYNOS4: Add more registers to be saved and restored for PM
ARM: EXYNOS4: Add more register addresses of CMU
ARM: EXYNOS4: Add platform device for dwmci driver
ARM: EXYNOS4: configure rtc-s3c on NURI
ARM: EXYNOS4: configure MAX8903 secondary charger on NURI
ARM: EXYNOS4: configure ADC on NURI
ARM: EXYNOS4: configure MAX17042 fuel gauge on NURI
ARM: EXYNOS4: configure regulators and PMIC(MAX8997) on NURI
ARM: EXYNOS4: Increase NR_IRQS for devices with more IRQs
...
Fix up tons of silly conflicts:
- arch/arm/mach-davinci/include/mach/psc.h
- arch/arm/mach-exynos4/Kconfig
- arch/arm/mach-exynos4/mach-smdkc210.c
- arch/arm/mach-exynos4/pm.c
- arch/arm/mach-imx/mm-imx1.c
- arch/arm/mach-imx/mm-imx21.c
- arch/arm/mach-imx/mm-imx25.c
- arch/arm/mach-imx/mm-imx27.c
- arch/arm/mach-imx/mm-imx31.c
- arch/arm/mach-imx/mm-imx35.c
- arch/arm/mach-mx5/mm.c
- arch/arm/mach-s5pv210/mach-goni.c
- arch/arm/mm/Kconfig
Diffstat (limited to 'arch/arm/plat-samsung')
-rw-r--r-- | arch/arm/plat-samsung/adc.c | 84 | ||||
-rw-r--r-- | arch/arm/plat-samsung/dev-asocdma.c | 10 | ||||
-rw-r--r-- | arch/arm/plat-samsung/include/plat/audio.h | 1 | ||||
-rw-r--r-- | arch/arm/plat-samsung/include/plat/devs.h | 6 | ||||
-rw-r--r-- | arch/arm/plat-samsung/include/plat/fb-core.h | 15 | ||||
-rw-r--r-- | arch/arm/plat-samsung/include/plat/fb.h | 15 | ||||
-rw-r--r-- | arch/arm/plat-samsung/include/plat/regs-adc.h | 1 | ||||
-rw-r--r-- | arch/arm/plat-samsung/irq-uart.c | 7 | ||||
-rw-r--r-- | arch/arm/plat-samsung/pm.c | 2 |
9 files changed, 121 insertions, 20 deletions
diff --git a/arch/arm/plat-samsung/adc.c b/arch/arm/plat-samsung/adc.c index e8f2be2d67f2..ee8deef19481 100644 --- a/arch/arm/plat-samsung/adc.c +++ b/arch/arm/plat-samsung/adc.c | |||
@@ -21,6 +21,7 @@ | |||
21 | #include <linux/clk.h> | 21 | #include <linux/clk.h> |
22 | #include <linux/interrupt.h> | 22 | #include <linux/interrupt.h> |
23 | #include <linux/io.h> | 23 | #include <linux/io.h> |
24 | #include <linux/regulator/consumer.h> | ||
24 | 25 | ||
25 | #include <plat/regs-adc.h> | 26 | #include <plat/regs-adc.h> |
26 | #include <plat/adc.h> | 27 | #include <plat/adc.h> |
@@ -39,8 +40,9 @@ | |||
39 | */ | 40 | */ |
40 | 41 | ||
41 | enum s3c_cpu_type { | 42 | enum s3c_cpu_type { |
42 | TYPE_S3C24XX, | 43 | TYPE_ADCV1, /* S3C24XX */ |
43 | TYPE_S3C64XX | 44 | TYPE_ADCV2, /* S3C64XX, S5P64X0, S5PC100 */ |
45 | TYPE_ADCV3, /* S5PV210, S5PC110, EXYNOS4210 */ | ||
44 | }; | 46 | }; |
45 | 47 | ||
46 | struct s3c_adc_client { | 48 | struct s3c_adc_client { |
@@ -71,6 +73,7 @@ struct adc_device { | |||
71 | unsigned int prescale; | 73 | unsigned int prescale; |
72 | 74 | ||
73 | int irq; | 75 | int irq; |
76 | struct regulator *vdd; | ||
74 | }; | 77 | }; |
75 | 78 | ||
76 | static struct adc_device *adc_dev; | 79 | static struct adc_device *adc_dev; |
@@ -91,6 +94,7 @@ static inline void s3c_adc_select(struct adc_device *adc, | |||
91 | struct s3c_adc_client *client) | 94 | struct s3c_adc_client *client) |
92 | { | 95 | { |
93 | unsigned con = readl(adc->regs + S3C2410_ADCCON); | 96 | unsigned con = readl(adc->regs + S3C2410_ADCCON); |
97 | enum s3c_cpu_type cpu = platform_get_device_id(adc->pdev)->driver_data; | ||
94 | 98 | ||
95 | client->select_cb(client, 1); | 99 | client->select_cb(client, 1); |
96 | 100 | ||
@@ -98,8 +102,12 @@ static inline void s3c_adc_select(struct adc_device *adc, | |||
98 | con &= ~S3C2410_ADCCON_STDBM; | 102 | con &= ~S3C2410_ADCCON_STDBM; |
99 | con &= ~S3C2410_ADCCON_STARTMASK; | 103 | con &= ~S3C2410_ADCCON_STARTMASK; |
100 | 104 | ||
101 | if (!client->is_ts) | 105 | if (!client->is_ts) { |
102 | con |= S3C2410_ADCCON_SELMUX(client->channel); | 106 | if (cpu == TYPE_ADCV3) |
107 | writel(client->channel & 0xf, adc->regs + S5P_ADCMUX); | ||
108 | else | ||
109 | con |= S3C2410_ADCCON_SELMUX(client->channel); | ||
110 | } | ||
103 | 111 | ||
104 | writel(con, adc->regs + S3C2410_ADCCON); | 112 | writel(con, adc->regs + S3C2410_ADCCON); |
105 | } | 113 | } |
@@ -285,8 +293,8 @@ static irqreturn_t s3c_adc_irq(int irq, void *pw) | |||
285 | 293 | ||
286 | client->nr_samples--; | 294 | client->nr_samples--; |
287 | 295 | ||
288 | if (cpu == TYPE_S3C64XX) { | 296 | if (cpu != TYPE_ADCV1) { |
289 | /* S3C64XX ADC resolution is 12-bit */ | 297 | /* S3C64XX/S5P ADC resolution is 12-bit */ |
290 | data0 &= 0xfff; | 298 | data0 &= 0xfff; |
291 | data1 &= 0xfff; | 299 | data1 &= 0xfff; |
292 | } else { | 300 | } else { |
@@ -312,7 +320,7 @@ static irqreturn_t s3c_adc_irq(int irq, void *pw) | |||
312 | } | 320 | } |
313 | 321 | ||
314 | exit: | 322 | exit: |
315 | if (cpu == TYPE_S3C64XX) { | 323 | if (cpu != TYPE_ADCV1) { |
316 | /* Clear ADC interrupt */ | 324 | /* Clear ADC interrupt */ |
317 | writel(0, adc->regs + S3C64XX_ADCCLRINT); | 325 | writel(0, adc->regs + S3C64XX_ADCCLRINT); |
318 | } | 326 | } |
@@ -338,17 +346,24 @@ static int s3c_adc_probe(struct platform_device *pdev) | |||
338 | adc->pdev = pdev; | 346 | adc->pdev = pdev; |
339 | adc->prescale = S3C2410_ADCCON_PRSCVL(49); | 347 | adc->prescale = S3C2410_ADCCON_PRSCVL(49); |
340 | 348 | ||
349 | adc->vdd = regulator_get(dev, "vdd"); | ||
350 | if (IS_ERR(adc->vdd)) { | ||
351 | dev_err(dev, "operating without regulator \"vdd\" .\n"); | ||
352 | ret = PTR_ERR(adc->vdd); | ||
353 | goto err_alloc; | ||
354 | } | ||
355 | |||
341 | adc->irq = platform_get_irq(pdev, 1); | 356 | adc->irq = platform_get_irq(pdev, 1); |
342 | if (adc->irq <= 0) { | 357 | if (adc->irq <= 0) { |
343 | dev_err(dev, "failed to get adc irq\n"); | 358 | dev_err(dev, "failed to get adc irq\n"); |
344 | ret = -ENOENT; | 359 | ret = -ENOENT; |
345 | goto err_alloc; | 360 | goto err_reg; |
346 | } | 361 | } |
347 | 362 | ||
348 | ret = request_irq(adc->irq, s3c_adc_irq, 0, dev_name(dev), adc); | 363 | ret = request_irq(adc->irq, s3c_adc_irq, 0, dev_name(dev), adc); |
349 | if (ret < 0) { | 364 | if (ret < 0) { |
350 | dev_err(dev, "failed to attach adc irq\n"); | 365 | dev_err(dev, "failed to attach adc irq\n"); |
351 | goto err_alloc; | 366 | goto err_reg; |
352 | } | 367 | } |
353 | 368 | ||
354 | adc->clk = clk_get(dev, "adc"); | 369 | adc->clk = clk_get(dev, "adc"); |
@@ -372,10 +387,14 @@ static int s3c_adc_probe(struct platform_device *pdev) | |||
372 | goto err_clk; | 387 | goto err_clk; |
373 | } | 388 | } |
374 | 389 | ||
390 | ret = regulator_enable(adc->vdd); | ||
391 | if (ret) | ||
392 | goto err_ioremap; | ||
393 | |||
375 | clk_enable(adc->clk); | 394 | clk_enable(adc->clk); |
376 | 395 | ||
377 | tmp = adc->prescale | S3C2410_ADCCON_PRSCEN; | 396 | tmp = adc->prescale | S3C2410_ADCCON_PRSCEN; |
378 | if (platform_get_device_id(pdev)->driver_data == TYPE_S3C64XX) { | 397 | if (platform_get_device_id(pdev)->driver_data != TYPE_ADCV1) { |
379 | /* Enable 12-bit ADC resolution */ | 398 | /* Enable 12-bit ADC resolution */ |
380 | tmp |= S3C64XX_ADCCON_RESSEL; | 399 | tmp |= S3C64XX_ADCCON_RESSEL; |
381 | } | 400 | } |
@@ -388,12 +407,15 @@ static int s3c_adc_probe(struct platform_device *pdev) | |||
388 | 407 | ||
389 | return 0; | 408 | return 0; |
390 | 409 | ||
410 | err_ioremap: | ||
411 | iounmap(adc->regs); | ||
391 | err_clk: | 412 | err_clk: |
392 | clk_put(adc->clk); | 413 | clk_put(adc->clk); |
393 | 414 | ||
394 | err_irq: | 415 | err_irq: |
395 | free_irq(adc->irq, adc); | 416 | free_irq(adc->irq, adc); |
396 | 417 | err_reg: | |
418 | regulator_put(adc->vdd); | ||
397 | err_alloc: | 419 | err_alloc: |
398 | kfree(adc); | 420 | kfree(adc); |
399 | return ret; | 421 | return ret; |
@@ -406,6 +428,8 @@ static int __devexit s3c_adc_remove(struct platform_device *pdev) | |||
406 | iounmap(adc->regs); | 428 | iounmap(adc->regs); |
407 | free_irq(adc->irq, adc); | 429 | free_irq(adc->irq, adc); |
408 | clk_disable(adc->clk); | 430 | clk_disable(adc->clk); |
431 | regulator_disable(adc->vdd); | ||
432 | regulator_put(adc->vdd); | ||
409 | clk_put(adc->clk); | 433 | clk_put(adc->clk); |
410 | kfree(adc); | 434 | kfree(adc); |
411 | 435 | ||
@@ -413,8 +437,10 @@ static int __devexit s3c_adc_remove(struct platform_device *pdev) | |||
413 | } | 437 | } |
414 | 438 | ||
415 | #ifdef CONFIG_PM | 439 | #ifdef CONFIG_PM |
416 | static int s3c_adc_suspend(struct platform_device *pdev, pm_message_t state) | 440 | static int s3c_adc_suspend(struct device *dev) |
417 | { | 441 | { |
442 | struct platform_device *pdev = container_of(dev, | ||
443 | struct platform_device, dev); | ||
418 | struct adc_device *adc = platform_get_drvdata(pdev); | 444 | struct adc_device *adc = platform_get_drvdata(pdev); |
419 | unsigned long flags; | 445 | unsigned long flags; |
420 | u32 con; | 446 | u32 con; |
@@ -428,19 +454,30 @@ static int s3c_adc_suspend(struct platform_device *pdev, pm_message_t state) | |||
428 | disable_irq(adc->irq); | 454 | disable_irq(adc->irq); |
429 | spin_unlock_irqrestore(&adc->lock, flags); | 455 | spin_unlock_irqrestore(&adc->lock, flags); |
430 | clk_disable(adc->clk); | 456 | clk_disable(adc->clk); |
457 | regulator_disable(adc->vdd); | ||
431 | 458 | ||
432 | return 0; | 459 | return 0; |
433 | } | 460 | } |
434 | 461 | ||
435 | static int s3c_adc_resume(struct platform_device *pdev) | 462 | static int s3c_adc_resume(struct device *dev) |
436 | { | 463 | { |
464 | struct platform_device *pdev = container_of(dev, | ||
465 | struct platform_device, dev); | ||
437 | struct adc_device *adc = platform_get_drvdata(pdev); | 466 | struct adc_device *adc = platform_get_drvdata(pdev); |
467 | int ret; | ||
468 | unsigned long tmp; | ||
438 | 469 | ||
470 | ret = regulator_enable(adc->vdd); | ||
471 | if (ret) | ||
472 | return ret; | ||
439 | clk_enable(adc->clk); | 473 | clk_enable(adc->clk); |
440 | enable_irq(adc->irq); | 474 | enable_irq(adc->irq); |
441 | 475 | ||
442 | writel(adc->prescale | S3C2410_ADCCON_PRSCEN, | 476 | tmp = adc->prescale | S3C2410_ADCCON_PRSCEN; |
443 | adc->regs + S3C2410_ADCCON); | 477 | /* Enable 12-bit ADC resolution */ |
478 | if (platform_get_device_id(pdev)->driver_data != TYPE_ADCV1) | ||
479 | tmp |= S3C64XX_ADCCON_RESSEL; | ||
480 | writel(tmp, adc->regs + S3C2410_ADCCON); | ||
444 | 481 | ||
445 | return 0; | 482 | return 0; |
446 | } | 483 | } |
@@ -453,25 +490,32 @@ static int s3c_adc_resume(struct platform_device *pdev) | |||
453 | static struct platform_device_id s3c_adc_driver_ids[] = { | 490 | static struct platform_device_id s3c_adc_driver_ids[] = { |
454 | { | 491 | { |
455 | .name = "s3c24xx-adc", | 492 | .name = "s3c24xx-adc", |
456 | .driver_data = TYPE_S3C24XX, | 493 | .driver_data = TYPE_ADCV1, |
457 | }, { | 494 | }, { |
458 | .name = "s3c64xx-adc", | 495 | .name = "s3c64xx-adc", |
459 | .driver_data = TYPE_S3C64XX, | 496 | .driver_data = TYPE_ADCV2, |
497 | }, { | ||
498 | .name = "samsung-adc-v3", | ||
499 | .driver_data = TYPE_ADCV3, | ||
460 | }, | 500 | }, |
461 | { } | 501 | { } |
462 | }; | 502 | }; |
463 | MODULE_DEVICE_TABLE(platform, s3c_adc_driver_ids); | 503 | MODULE_DEVICE_TABLE(platform, s3c_adc_driver_ids); |
464 | 504 | ||
505 | static const struct dev_pm_ops adc_pm_ops = { | ||
506 | .suspend = s3c_adc_suspend, | ||
507 | .resume = s3c_adc_resume, | ||
508 | }; | ||
509 | |||
465 | static struct platform_driver s3c_adc_driver = { | 510 | static struct platform_driver s3c_adc_driver = { |
466 | .id_table = s3c_adc_driver_ids, | 511 | .id_table = s3c_adc_driver_ids, |
467 | .driver = { | 512 | .driver = { |
468 | .name = "s3c-adc", | 513 | .name = "s3c-adc", |
469 | .owner = THIS_MODULE, | 514 | .owner = THIS_MODULE, |
515 | .pm = &adc_pm_ops, | ||
470 | }, | 516 | }, |
471 | .probe = s3c_adc_probe, | 517 | .probe = s3c_adc_probe, |
472 | .remove = __devexit_p(s3c_adc_remove), | 518 | .remove = __devexit_p(s3c_adc_remove), |
473 | .suspend = s3c_adc_suspend, | ||
474 | .resume = s3c_adc_resume, | ||
475 | }; | 519 | }; |
476 | 520 | ||
477 | static int __init adc_init(void) | 521 | static int __init adc_init(void) |
@@ -485,4 +529,4 @@ static int __init adc_init(void) | |||
485 | return ret; | 529 | return ret; |
486 | } | 530 | } |
487 | 531 | ||
488 | arch_initcall(adc_init); | 532 | module_init(adc_init); |
diff --git a/arch/arm/plat-samsung/dev-asocdma.c b/arch/arm/plat-samsung/dev-asocdma.c index a068c4f42d56..97e35d3c064d 100644 --- a/arch/arm/plat-samsung/dev-asocdma.c +++ b/arch/arm/plat-samsung/dev-asocdma.c | |||
@@ -23,3 +23,13 @@ struct platform_device samsung_asoc_dma = { | |||
23 | } | 23 | } |
24 | }; | 24 | }; |
25 | EXPORT_SYMBOL(samsung_asoc_dma); | 25 | EXPORT_SYMBOL(samsung_asoc_dma); |
26 | |||
27 | struct platform_device samsung_asoc_idma = { | ||
28 | .name = "samsung-idma", | ||
29 | .id = -1, | ||
30 | .dev = { | ||
31 | .dma_mask = &audio_dmamask, | ||
32 | .coherent_dma_mask = DMA_BIT_MASK(32), | ||
33 | } | ||
34 | }; | ||
35 | EXPORT_SYMBOL(samsung_asoc_idma); | ||
diff --git a/arch/arm/plat-samsung/include/plat/audio.h b/arch/arm/plat-samsung/include/plat/audio.h index a0826ed2f9fe..aa9875f77c40 100644 --- a/arch/arm/plat-samsung/include/plat/audio.h +++ b/arch/arm/plat-samsung/include/plat/audio.h | |||
@@ -44,6 +44,7 @@ struct samsung_i2s { | |||
44 | * Also corresponds to clocks of I2SMOD[10] | 44 | * Also corresponds to clocks of I2SMOD[10] |
45 | */ | 45 | */ |
46 | const char **src_clk; | 46 | const char **src_clk; |
47 | dma_addr_t idma_addr; | ||
47 | }; | 48 | }; |
48 | 49 | ||
49 | /** | 50 | /** |
diff --git a/arch/arm/plat-samsung/include/plat/devs.h b/arch/arm/plat-samsung/include/plat/devs.h index e3b31c26ac3e..24ebb1e1de41 100644 --- a/arch/arm/plat-samsung/include/plat/devs.h +++ b/arch/arm/plat-samsung/include/plat/devs.h | |||
@@ -40,6 +40,7 @@ extern struct platform_device s3c64xx_device_spi0; | |||
40 | extern struct platform_device s3c64xx_device_spi1; | 40 | extern struct platform_device s3c64xx_device_spi1; |
41 | 41 | ||
42 | extern struct platform_device samsung_asoc_dma; | 42 | extern struct platform_device samsung_asoc_dma; |
43 | extern struct platform_device samsung_asoc_idma; | ||
43 | 44 | ||
44 | extern struct platform_device s3c64xx_device_pcm0; | 45 | extern struct platform_device s3c64xx_device_pcm0; |
45 | extern struct platform_device s3c64xx_device_pcm1; | 46 | extern struct platform_device s3c64xx_device_pcm1; |
@@ -49,6 +50,7 @@ extern struct platform_device s3c64xx_device_ac97; | |||
49 | extern struct platform_device s3c_device_ts; | 50 | extern struct platform_device s3c_device_ts; |
50 | 51 | ||
51 | extern struct platform_device s3c_device_fb; | 52 | extern struct platform_device s3c_device_fb; |
53 | extern struct platform_device s5p_device_fimd0; | ||
52 | extern struct platform_device s3c_device_ohci; | 54 | extern struct platform_device s3c_device_ohci; |
53 | extern struct platform_device s3c_device_lcd; | 55 | extern struct platform_device s3c_device_lcd; |
54 | extern struct platform_device s3c_device_wdt; | 56 | extern struct platform_device s3c_device_wdt; |
@@ -112,6 +114,7 @@ extern struct platform_device exynos4_device_i2s2; | |||
112 | extern struct platform_device exynos4_device_spdif; | 114 | extern struct platform_device exynos4_device_spdif; |
113 | extern struct platform_device exynos4_device_pd[]; | 115 | extern struct platform_device exynos4_device_pd[]; |
114 | extern struct platform_device exynos4_device_ahci; | 116 | extern struct platform_device exynos4_device_ahci; |
117 | extern struct platform_device exynos4_device_dwmci; | ||
115 | 118 | ||
116 | extern struct platform_device s5p6440_device_pcm; | 119 | extern struct platform_device s5p6440_device_pcm; |
117 | extern struct platform_device s5p6440_device_iis; | 120 | extern struct platform_device s5p6440_device_iis; |
@@ -136,6 +139,9 @@ extern struct platform_device s5p_device_fimc1; | |||
136 | extern struct platform_device s5p_device_fimc2; | 139 | extern struct platform_device s5p_device_fimc2; |
137 | extern struct platform_device s5p_device_fimc3; | 140 | extern struct platform_device s5p_device_fimc3; |
138 | 141 | ||
142 | extern struct platform_device s5p_device_mfc; | ||
143 | extern struct platform_device s5p_device_mfc_l; | ||
144 | extern struct platform_device s5p_device_mfc_r; | ||
139 | extern struct platform_device s5p_device_mipi_csis0; | 145 | extern struct platform_device s5p_device_mipi_csis0; |
140 | extern struct platform_device s5p_device_mipi_csis1; | 146 | extern struct platform_device s5p_device_mipi_csis1; |
141 | 147 | ||
diff --git a/arch/arm/plat-samsung/include/plat/fb-core.h b/arch/arm/plat-samsung/include/plat/fb-core.h index bca383efcf6d..6abcbf139cee 100644 --- a/arch/arm/plat-samsung/include/plat/fb-core.h +++ b/arch/arm/plat-samsung/include/plat/fb-core.h | |||
@@ -26,4 +26,19 @@ static inline void s3c_fb_setname(char *name) | |||
26 | #endif | 26 | #endif |
27 | } | 27 | } |
28 | 28 | ||
29 | /* Re-define device name depending on support. */ | ||
30 | static inline void s5p_fb_setname(int id, char *name) | ||
31 | { | ||
32 | switch (id) { | ||
33 | #ifdef CONFIG_S5P_DEV_FIMD0 | ||
34 | case 0: | ||
35 | s5p_device_fimd0.name = name; | ||
36 | break; | ||
37 | #endif | ||
38 | default: | ||
39 | printk(KERN_ERR "%s: invalid device id(%d)\n", __func__, id); | ||
40 | break; | ||
41 | } | ||
42 | } | ||
43 | |||
29 | #endif /* __ASM_PLAT_FB_CORE_H */ | 44 | #endif /* __ASM_PLAT_FB_CORE_H */ |
diff --git a/arch/arm/plat-samsung/include/plat/fb.h b/arch/arm/plat-samsung/include/plat/fb.h index cb3ca3adc685..01f10e4d00c7 100644 --- a/arch/arm/plat-samsung/include/plat/fb.h +++ b/arch/arm/plat-samsung/include/plat/fb.h | |||
@@ -74,6 +74,14 @@ struct s3c_fb_platdata { | |||
74 | extern void s3c_fb_set_platdata(struct s3c_fb_platdata *pd); | 74 | extern void s3c_fb_set_platdata(struct s3c_fb_platdata *pd); |
75 | 75 | ||
76 | /** | 76 | /** |
77 | * s5p_fimd0_set_platdata() - Setup the FB device with platform data. | ||
78 | * @pd: The platform data to set. The data is copied from the passed structure | ||
79 | * so the machine data can mark the data __initdata so that any unused | ||
80 | * machines will end up dumping their data at runtime. | ||
81 | */ | ||
82 | extern void s5p_fimd0_set_platdata(struct s3c_fb_platdata *pd); | ||
83 | |||
84 | /** | ||
77 | * s3c64xx_fb_gpio_setup_24bpp() - S3C64XX setup function for 24bpp LCD | 85 | * s3c64xx_fb_gpio_setup_24bpp() - S3C64XX setup function for 24bpp LCD |
78 | * | 86 | * |
79 | * Initialise the GPIO for an 24bpp LCD display on the RGB interface. | 87 | * Initialise the GPIO for an 24bpp LCD display on the RGB interface. |
@@ -94,4 +102,11 @@ extern void s5pc100_fb_gpio_setup_24bpp(void); | |||
94 | */ | 102 | */ |
95 | extern void s5pv210_fb_gpio_setup_24bpp(void); | 103 | extern void s5pv210_fb_gpio_setup_24bpp(void); |
96 | 104 | ||
105 | /** | ||
106 | * exynos4_fimd0_gpio_setup_24bpp() - Exynos4 setup function for 24bpp LCD0 | ||
107 | * | ||
108 | * Initialise the GPIO for an 24bpp LCD display on the RGB interface 0. | ||
109 | */ | ||
110 | extern void exynos4_fimd0_gpio_setup_24bpp(void); | ||
111 | |||
97 | #endif /* __PLAT_S3C_FB_H */ | 112 | #endif /* __PLAT_S3C_FB_H */ |
diff --git a/arch/arm/plat-samsung/include/plat/regs-adc.h b/arch/arm/plat-samsung/include/plat/regs-adc.h index 7554c4fcddb9..035e8c38d69c 100644 --- a/arch/arm/plat-samsung/include/plat/regs-adc.h +++ b/arch/arm/plat-samsung/include/plat/regs-adc.h | |||
@@ -21,6 +21,7 @@ | |||
21 | #define S3C2410_ADCDAT1 S3C2410_ADCREG(0x10) | 21 | #define S3C2410_ADCDAT1 S3C2410_ADCREG(0x10) |
22 | #define S3C64XX_ADCUPDN S3C2410_ADCREG(0x14) | 22 | #define S3C64XX_ADCUPDN S3C2410_ADCREG(0x14) |
23 | #define S3C64XX_ADCCLRINT S3C2410_ADCREG(0x18) | 23 | #define S3C64XX_ADCCLRINT S3C2410_ADCREG(0x18) |
24 | #define S5P_ADCMUX S3C2410_ADCREG(0x1C) | ||
24 | #define S3C64XX_ADCCLRINTPNDNUP S3C2410_ADCREG(0x20) | 25 | #define S3C64XX_ADCCLRINTPNDNUP S3C2410_ADCREG(0x20) |
25 | 26 | ||
26 | 27 | ||
diff --git a/arch/arm/plat-samsung/irq-uart.c b/arch/arm/plat-samsung/irq-uart.c index 657405c481d0..3014c7226bd1 100644 --- a/arch/arm/plat-samsung/irq-uart.c +++ b/arch/arm/plat-samsung/irq-uart.c | |||
@@ -19,6 +19,8 @@ | |||
19 | #include <linux/irq.h> | 19 | #include <linux/irq.h> |
20 | #include <linux/io.h> | 20 | #include <linux/io.h> |
21 | 21 | ||
22 | #include <asm/mach/irq.h> | ||
23 | |||
22 | #include <mach/map.h> | 24 | #include <mach/map.h> |
23 | #include <plat/irq-uart.h> | 25 | #include <plat/irq-uart.h> |
24 | #include <plat/regs-serial.h> | 26 | #include <plat/regs-serial.h> |
@@ -30,9 +32,12 @@ | |||
30 | static void s3c_irq_demux_uart(unsigned int irq, struct irq_desc *desc) | 32 | static void s3c_irq_demux_uart(unsigned int irq, struct irq_desc *desc) |
31 | { | 33 | { |
32 | struct s3c_uart_irq *uirq = desc->irq_data.handler_data; | 34 | struct s3c_uart_irq *uirq = desc->irq_data.handler_data; |
35 | struct irq_chip *chip = irq_get_chip(irq); | ||
33 | u32 pend = __raw_readl(uirq->regs + S3C64XX_UINTP); | 36 | u32 pend = __raw_readl(uirq->regs + S3C64XX_UINTP); |
34 | int base = uirq->base_irq; | 37 | int base = uirq->base_irq; |
35 | 38 | ||
39 | chained_irq_enter(chip, desc); | ||
40 | |||
36 | if (pend & (1 << 0)) | 41 | if (pend & (1 << 0)) |
37 | generic_handle_irq(base); | 42 | generic_handle_irq(base); |
38 | if (pend & (1 << 1)) | 43 | if (pend & (1 << 1)) |
@@ -41,6 +46,8 @@ static void s3c_irq_demux_uart(unsigned int irq, struct irq_desc *desc) | |||
41 | generic_handle_irq(base + 2); | 46 | generic_handle_irq(base + 2); |
42 | if (pend & (1 << 3)) | 47 | if (pend & (1 << 3)) |
43 | generic_handle_irq(base + 3); | 48 | generic_handle_irq(base + 3); |
49 | |||
50 | chained_irq_exit(chip, desc); | ||
44 | } | 51 | } |
45 | 52 | ||
46 | static void __init s3c_init_uart_irq(struct s3c_uart_irq *uirq) | 53 | static void __init s3c_init_uart_irq(struct s3c_uart_irq *uirq) |
diff --git a/arch/arm/plat-samsung/pm.c b/arch/arm/plat-samsung/pm.c index 5fa1742d019b..ae6f99834cdd 100644 --- a/arch/arm/plat-samsung/pm.c +++ b/arch/arm/plat-samsung/pm.c | |||
@@ -269,6 +269,7 @@ static int s3c_pm_enter(suspend_state_t state) | |||
269 | /* save all necessary core registers not covered by the drivers */ | 269 | /* save all necessary core registers not covered by the drivers */ |
270 | 270 | ||
271 | s3c_pm_save_gpios(); | 271 | s3c_pm_save_gpios(); |
272 | s3c_pm_saved_gpios(); | ||
272 | s3c_pm_save_uarts(); | 273 | s3c_pm_save_uarts(); |
273 | s3c_pm_save_core(); | 274 | s3c_pm_save_core(); |
274 | 275 | ||
@@ -306,6 +307,7 @@ static int s3c_pm_enter(suspend_state_t state) | |||
306 | s3c_pm_restore_core(); | 307 | s3c_pm_restore_core(); |
307 | s3c_pm_restore_uarts(); | 308 | s3c_pm_restore_uarts(); |
308 | s3c_pm_restore_gpios(); | 309 | s3c_pm_restore_gpios(); |
310 | s3c_pm_restored_gpios(); | ||
309 | 311 | ||
310 | s3c_pm_debug_init(); | 312 | s3c_pm_debug_init(); |
311 | 313 | ||