aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
Diffstat (limited to 'drivers')
-rw-r--r--drivers/mmc/host/pxamci.c10
-rw-r--r--drivers/mtd/nand/Kconfig2
-rw-r--r--drivers/mtd/nand/pxa3xx_nand.c82
-rw-r--r--drivers/rtc/Kconfig2
-rw-r--r--drivers/serial/s3c2410.c2
-rw-r--r--drivers/serial/s3c2412.c2
-rw-r--r--drivers/serial/s3c2440.c2
-rw-r--r--drivers/serial/s3c24a0.c2
-rw-r--r--drivers/serial/samsung.c2
-rw-r--r--drivers/serial/samsung.h2
-rw-r--r--drivers/video/Kconfig5
-rw-r--r--drivers/video/backlight/da903x_bl.c7
-rw-r--r--drivers/video/backlight/tdo24m.c1
-rw-r--r--drivers/video/pxa168fb.c1
-rw-r--r--drivers/video/pxafb.c23
15 files changed, 113 insertions, 32 deletions
diff --git a/drivers/mmc/host/pxamci.c b/drivers/mmc/host/pxamci.c
index b00d67319058..c85f6166056e 100644
--- a/drivers/mmc/host/pxamci.c
+++ b/drivers/mmc/host/pxamci.c
@@ -43,6 +43,9 @@
43#define NR_SG 1 43#define NR_SG 1
44#define CLKRT_OFF (~0) 44#define CLKRT_OFF (~0)
45 45
46#define mmc_has_26MHz() (cpu_is_pxa300() || cpu_is_pxa310() \
47 || cpu_is_pxa935())
48
46struct pxamci_host { 49struct pxamci_host {
47 struct mmc_host *mmc; 50 struct mmc_host *mmc;
48 spinlock_t lock; 51 spinlock_t lock;
@@ -457,7 +460,7 @@ static void pxamci_set_ios(struct mmc_host *mmc, struct mmc_ios *ios)
457 clk_enable(host->clk); 460 clk_enable(host->clk);
458 461
459 if (ios->clock == 26000000) { 462 if (ios->clock == 26000000) {
460 /* to support 26MHz on pxa300/pxa310 */ 463 /* to support 26MHz */
461 host->clkrt = 7; 464 host->clkrt = 7;
462 } else { 465 } else {
463 /* to handle (19.5MHz, 26MHz) */ 466 /* to handle (19.5MHz, 26MHz) */
@@ -608,8 +611,7 @@ static int pxamci_probe(struct platform_device *pdev)
608 * Calculate minimum clock rate, rounding up. 611 * Calculate minimum clock rate, rounding up.
609 */ 612 */
610 mmc->f_min = (host->clkrate + 63) / 64; 613 mmc->f_min = (host->clkrate + 63) / 64;
611 mmc->f_max = (cpu_is_pxa300() || cpu_is_pxa310()) ? 26000000 614 mmc->f_max = (mmc_has_26MHz()) ? 26000000 : host->clkrate;
612 : host->clkrate;
613 615
614 pxamci_init_ocr(host); 616 pxamci_init_ocr(host);
615 617
@@ -618,7 +620,7 @@ static int pxamci_probe(struct platform_device *pdev)
618 if (!cpu_is_pxa25x()) { 620 if (!cpu_is_pxa25x()) {
619 mmc->caps |= MMC_CAP_4_BIT_DATA | MMC_CAP_SDIO_IRQ; 621 mmc->caps |= MMC_CAP_4_BIT_DATA | MMC_CAP_SDIO_IRQ;
620 host->cmdat |= CMDAT_SDIO_INT_EN; 622 host->cmdat |= CMDAT_SDIO_INT_EN;
621 if (cpu_is_pxa300() || cpu_is_pxa310()) 623 if (mmc_has_26MHz())
622 mmc->caps |= MMC_CAP_MMC_HIGHSPEED | 624 mmc->caps |= MMC_CAP_MMC_HIGHSPEED |
623 MMC_CAP_SD_HIGHSPEED; 625 MMC_CAP_SD_HIGHSPEED;
624 } 626 }
diff --git a/drivers/mtd/nand/Kconfig b/drivers/mtd/nand/Kconfig
index 2fda0b615246..8f8e87b7ed64 100644
--- a/drivers/mtd/nand/Kconfig
+++ b/drivers/mtd/nand/Kconfig
@@ -358,7 +358,7 @@ endchoice
358 358
359config MTD_NAND_PXA3xx 359config MTD_NAND_PXA3xx
360 tristate "Support for NAND flash devices on PXA3xx" 360 tristate "Support for NAND flash devices on PXA3xx"
361 depends on MTD_NAND && PXA3xx 361 depends on MTD_NAND && (PXA3xx || ARCH_MMP)
362 help 362 help
363 This enables the driver for the NAND flash device found on 363 This enables the driver for the NAND flash device found on
364 PXA3xx processors 364 PXA3xx processors
diff --git a/drivers/mtd/nand/pxa3xx_nand.c b/drivers/mtd/nand/pxa3xx_nand.c
index 6ea520ae2410..1a5a0365c983 100644
--- a/drivers/mtd/nand/pxa3xx_nand.c
+++ b/drivers/mtd/nand/pxa3xx_nand.c
@@ -9,6 +9,7 @@
9 * published by the Free Software Foundation. 9 * published by the Free Software Foundation.
10 */ 10 */
11 11
12#include <linux/kernel.h>
12#include <linux/module.h> 13#include <linux/module.h>
13#include <linux/interrupt.h> 14#include <linux/interrupt.h>
14#include <linux/platform_device.h> 15#include <linux/platform_device.h>
@@ -22,7 +23,7 @@
22#include <linux/irq.h> 23#include <linux/irq.h>
23 24
24#include <mach/dma.h> 25#include <mach/dma.h>
25#include <mach/pxa3xx_nand.h> 26#include <plat/pxa3xx_nand.h>
26 27
27#define CHIP_DELAY_TIMEOUT (2 * HZ/10) 28#define CHIP_DELAY_TIMEOUT (2 * HZ/10)
28 29
@@ -84,10 +85,6 @@
84#define NDCB0_CMD1_MASK (0xff) 85#define NDCB0_CMD1_MASK (0xff)
85#define NDCB0_ADDR_CYC_SHIFT (16) 86#define NDCB0_ADDR_CYC_SHIFT (16)
86 87
87/* dma-able I/O address for the NAND data and commands */
88#define NDCB0_DMA_ADDR (0x43100048)
89#define NDDB_DMA_ADDR (0x43100040)
90
91/* macros for registers read/write */ 88/* macros for registers read/write */
92#define nand_writel(info, off, val) \ 89#define nand_writel(info, off, val) \
93 __raw_writel((val), (info)->mmio_base + (off)) 90 __raw_writel((val), (info)->mmio_base + (off))
@@ -123,6 +120,7 @@ struct pxa3xx_nand_info {
123 120
124 struct clk *clk; 121 struct clk *clk;
125 void __iomem *mmio_base; 122 void __iomem *mmio_base;
123 unsigned long mmio_phys;
126 124
127 unsigned int buf_start; 125 unsigned int buf_start;
128 unsigned int buf_count; 126 unsigned int buf_count;
@@ -228,13 +226,35 @@ static struct pxa3xx_nand_flash samsung512MbX16 = {
228 .chip_id = 0x46ec, 226 .chip_id = 0x46ec,
229}; 227};
230 228
229static struct pxa3xx_nand_flash samsung2GbX8 = {
230 .timing = &samsung512MbX16_timing,
231 .cmdset = &smallpage_cmdset,
232 .page_per_block = 64,
233 .page_size = 2048,
234 .flash_width = 8,
235 .dfc_width = 8,
236 .num_blocks = 2048,
237 .chip_id = 0xdaec,
238};
239
240static struct pxa3xx_nand_flash samsung32GbX8 = {
241 .timing = &samsung512MbX16_timing,
242 .cmdset = &smallpage_cmdset,
243 .page_per_block = 128,
244 .page_size = 4096,
245 .flash_width = 8,
246 .dfc_width = 8,
247 .num_blocks = 8192,
248 .chip_id = 0xd7ec,
249};
250
231static struct pxa3xx_nand_timing micron_timing = { 251static struct pxa3xx_nand_timing micron_timing = {
232 .tCH = 10, 252 .tCH = 10,
233 .tCS = 25, 253 .tCS = 25,
234 .tWH = 15, 254 .tWH = 15,
235 .tWP = 25, 255 .tWP = 25,
236 .tRH = 15, 256 .tRH = 15,
237 .tRP = 25, 257 .tRP = 30,
238 .tR = 25000, 258 .tR = 25000,
239 .tWHR = 60, 259 .tWHR = 60,
240 .tAR = 10, 260 .tAR = 10,
@@ -262,6 +282,28 @@ static struct pxa3xx_nand_flash micron1GbX16 = {
262 .chip_id = 0xb12c, 282 .chip_id = 0xb12c,
263}; 283};
264 284
285static struct pxa3xx_nand_flash micron4GbX8 = {
286 .timing = &micron_timing,
287 .cmdset = &largepage_cmdset,
288 .page_per_block = 64,
289 .page_size = 2048,
290 .flash_width = 8,
291 .dfc_width = 8,
292 .num_blocks = 4096,
293 .chip_id = 0xdc2c,
294};
295
296static struct pxa3xx_nand_flash micron4GbX16 = {
297 .timing = &micron_timing,
298 .cmdset = &largepage_cmdset,
299 .page_per_block = 64,
300 .page_size = 2048,
301 .flash_width = 16,
302 .dfc_width = 16,
303 .num_blocks = 4096,
304 .chip_id = 0xcc2c,
305};
306
265static struct pxa3xx_nand_timing stm2GbX16_timing = { 307static struct pxa3xx_nand_timing stm2GbX16_timing = {
266 .tCH = 10, 308 .tCH = 10,
267 .tCS = 35, 309 .tCS = 35,
@@ -287,8 +329,12 @@ static struct pxa3xx_nand_flash stm2GbX16 = {
287 329
288static struct pxa3xx_nand_flash *builtin_flash_types[] = { 330static struct pxa3xx_nand_flash *builtin_flash_types[] = {
289 &samsung512MbX16, 331 &samsung512MbX16,
332 &samsung2GbX8,
333 &samsung32GbX8,
290 &micron1GbX8, 334 &micron1GbX8,
291 &micron1GbX16, 335 &micron1GbX16,
336 &micron4GbX8,
337 &micron4GbX16,
292 &stm2GbX16, 338 &stm2GbX16,
293}; 339};
294#endif /* CONFIG_MTD_NAND_PXA3xx_BUILTIN */ 340#endif /* CONFIG_MTD_NAND_PXA3xx_BUILTIN */
@@ -489,7 +535,7 @@ static int handle_data_pio(struct pxa3xx_nand_info *info)
489 switch (info->state) { 535 switch (info->state) {
490 case STATE_PIO_WRITING: 536 case STATE_PIO_WRITING:
491 __raw_writesl(info->mmio_base + NDDB, info->data_buff, 537 __raw_writesl(info->mmio_base + NDDB, info->data_buff,
492 info->data_size << 2); 538 DIV_ROUND_UP(info->data_size, 4));
493 539
494 enable_int(info, NDSR_CS0_BBD | NDSR_CS0_CMDD); 540 enable_int(info, NDSR_CS0_BBD | NDSR_CS0_CMDD);
495 541
@@ -501,7 +547,7 @@ static int handle_data_pio(struct pxa3xx_nand_info *info)
501 break; 547 break;
502 case STATE_PIO_READING: 548 case STATE_PIO_READING:
503 __raw_readsl(info->mmio_base + NDDB, info->data_buff, 549 __raw_readsl(info->mmio_base + NDDB, info->data_buff,
504 info->data_size << 2); 550 DIV_ROUND_UP(info->data_size, 4));
505 break; 551 break;
506 default: 552 default:
507 printk(KERN_ERR "%s: invalid state %d\n", __func__, 553 printk(KERN_ERR "%s: invalid state %d\n", __func__,
@@ -523,11 +569,11 @@ static void start_data_dma(struct pxa3xx_nand_info *info, int dir_out)
523 569
524 if (dir_out) { 570 if (dir_out) {
525 desc->dsadr = info->data_buff_phys; 571 desc->dsadr = info->data_buff_phys;
526 desc->dtadr = NDDB_DMA_ADDR; 572 desc->dtadr = info->mmio_phys + NDDB;
527 desc->dcmd |= DCMD_INCSRCADDR | DCMD_FLOWTRG; 573 desc->dcmd |= DCMD_INCSRCADDR | DCMD_FLOWTRG;
528 } else { 574 } else {
529 desc->dtadr = info->data_buff_phys; 575 desc->dtadr = info->data_buff_phys;
530 desc->dsadr = NDDB_DMA_ADDR; 576 desc->dsadr = info->mmio_phys + NDDB;
531 desc->dcmd |= DCMD_INCTRGADDR | DCMD_FLOWSRC; 577 desc->dcmd |= DCMD_INCTRGADDR | DCMD_FLOWSRC;
532 } 578 }
533 579
@@ -669,6 +715,7 @@ static void pxa3xx_nand_cmdfunc(struct mtd_info *mtd, unsigned command,
669 /* disable HW ECC to get all the OOB data */ 715 /* disable HW ECC to get all the OOB data */
670 info->buf_count = mtd->writesize + mtd->oobsize; 716 info->buf_count = mtd->writesize + mtd->oobsize;
671 info->buf_start = mtd->writesize + column; 717 info->buf_start = mtd->writesize + column;
718 memset(info->data_buff, 0xFF, info->buf_count);
672 719
673 if (prepare_read_prog_cmd(info, cmdset->read1, column, page_addr)) 720 if (prepare_read_prog_cmd(info, cmdset->read1, column, page_addr))
674 break; 721 break;
@@ -1239,13 +1286,17 @@ static int pxa3xx_nand_probe(struct platform_device *pdev)
1239 ret = -ENODEV; 1286 ret = -ENODEV;
1240 goto fail_free_res; 1287 goto fail_free_res;
1241 } 1288 }
1289 info->mmio_phys = r->start;
1242 1290
1243 ret = pxa3xx_nand_init_buff(info); 1291 ret = pxa3xx_nand_init_buff(info);
1244 if (ret) 1292 if (ret)
1245 goto fail_free_io; 1293 goto fail_free_io;
1246 1294
1247 ret = request_irq(IRQ_NAND, pxa3xx_nand_irq, IRQF_DISABLED, 1295 /* initialize all interrupts to be disabled */
1248 pdev->name, info); 1296 disable_int(info, NDSR_MASK);
1297
1298 ret = request_irq(irq, pxa3xx_nand_irq, IRQF_DISABLED,
1299 pdev->name, info);
1249 if (ret < 0) { 1300 if (ret < 0) {
1250 dev_err(&pdev->dev, "failed to request IRQ\n"); 1301 dev_err(&pdev->dev, "failed to request IRQ\n");
1251 goto fail_free_buf; 1302 goto fail_free_buf;
@@ -1271,7 +1322,7 @@ static int pxa3xx_nand_probe(struct platform_device *pdev)
1271 return add_mtd_partitions(mtd, pdata->parts, pdata->nr_parts); 1322 return add_mtd_partitions(mtd, pdata->parts, pdata->nr_parts);
1272 1323
1273fail_free_irq: 1324fail_free_irq:
1274 free_irq(IRQ_NAND, info); 1325 free_irq(irq, info);
1275fail_free_buf: 1326fail_free_buf:
1276 if (use_dma) { 1327 if (use_dma) {
1277 pxa_free_dma(info->data_dma_ch); 1328 pxa_free_dma(info->data_dma_ch);
@@ -1296,12 +1347,15 @@ static int pxa3xx_nand_remove(struct platform_device *pdev)
1296 struct mtd_info *mtd = platform_get_drvdata(pdev); 1347 struct mtd_info *mtd = platform_get_drvdata(pdev);
1297 struct pxa3xx_nand_info *info = mtd->priv; 1348 struct pxa3xx_nand_info *info = mtd->priv;
1298 struct resource *r; 1349 struct resource *r;
1350 int irq;
1299 1351
1300 platform_set_drvdata(pdev, NULL); 1352 platform_set_drvdata(pdev, NULL);
1301 1353
1302 del_mtd_device(mtd); 1354 del_mtd_device(mtd);
1303 del_mtd_partitions(mtd); 1355 del_mtd_partitions(mtd);
1304 free_irq(IRQ_NAND, info); 1356 irq = platform_get_irq(pdev, 0);
1357 if (irq >= 0)
1358 free_irq(irq, info);
1305 if (use_dma) { 1359 if (use_dma) {
1306 pxa_free_dma(info->data_dma_ch); 1360 pxa_free_dma(info->data_dma_ch);
1307 dma_free_writecombine(&pdev->dev, info->data_buff_size, 1361 dma_free_writecombine(&pdev->dev, info->data_buff_size,
diff --git a/drivers/rtc/Kconfig b/drivers/rtc/Kconfig
index 3c20dae43ce2..e11e1cda4ba2 100644
--- a/drivers/rtc/Kconfig
+++ b/drivers/rtc/Kconfig
@@ -780,7 +780,7 @@ config RTC_DRV_TX4939
780 780
781config RTC_DRV_MV 781config RTC_DRV_MV
782 tristate "Marvell SoC RTC" 782 tristate "Marvell SoC RTC"
783 depends on ARCH_KIRKWOOD 783 depends on ARCH_KIRKWOOD || ARCH_DOVE
784 help 784 help
785 If you say yes here you will get support for the in-chip RTC 785 If you say yes here you will get support for the in-chip RTC
786 that can be found in some of Marvell's SoC devices, such as 786 that can be found in some of Marvell's SoC devices, such as
diff --git a/drivers/serial/s3c2410.c b/drivers/serial/s3c2410.c
index c99f0821cae3..73f089d3efd6 100644
--- a/drivers/serial/s3c2410.c
+++ b/drivers/serial/s3c2410.c
@@ -2,7 +2,7 @@
2 * 2 *
3 * Driver for Samsung S3C2410 SoC onboard UARTs. 3 * Driver for Samsung S3C2410 SoC onboard UARTs.
4 * 4 *
5 * Ben Dooks, Copyright (c) 2003-2005,2008 Simtec Electronics 5 * Ben Dooks, Copyright (c) 2003-2008 Simtec Electronics
6 * http://armlinux.simtec.co.uk/ 6 * http://armlinux.simtec.co.uk/
7 * 7 *
8 * This program is free software; you can redistribute it and/or modify 8 * This program is free software; you can redistribute it and/or modify
diff --git a/drivers/serial/s3c2412.c b/drivers/serial/s3c2412.c
index 6e057d8809d3..ce75e28e36ef 100644
--- a/drivers/serial/s3c2412.c
+++ b/drivers/serial/s3c2412.c
@@ -2,7 +2,7 @@
2 * 2 *
3 * Driver for Samsung S3C2412 and S3C2413 SoC onboard UARTs. 3 * Driver for Samsung S3C2412 and S3C2413 SoC onboard UARTs.
4 * 4 *
5 * Ben Dooks, Copyright (c) 2003-2005,2008 Simtec Electronics 5 * Ben Dooks, Copyright (c) 2003-2008 Simtec Electronics
6 * http://armlinux.simtec.co.uk/ 6 * http://armlinux.simtec.co.uk/
7 * 7 *
8 * This program is free software; you can redistribute it and/or modify 8 * This program is free software; you can redistribute it and/or modify
diff --git a/drivers/serial/s3c2440.c b/drivers/serial/s3c2440.c
index 69ff5d340f04..094cc3904b13 100644
--- a/drivers/serial/s3c2440.c
+++ b/drivers/serial/s3c2440.c
@@ -2,7 +2,7 @@
2 * 2 *
3 * Driver for Samsung S3C2440 and S3C2442 SoC onboard UARTs. 3 * Driver for Samsung S3C2440 and S3C2442 SoC onboard UARTs.
4 * 4 *
5 * Ben Dooks, Copyright (c) 2003-2005,2008 Simtec Electronics 5 * Ben Dooks, Copyright (c) 2003-2008 Simtec Electronics
6 * http://armlinux.simtec.co.uk/ 6 * http://armlinux.simtec.co.uk/
7 * 7 *
8 * This program is free software; you can redistribute it and/or modify 8 * This program is free software; you can redistribute it and/or modify
diff --git a/drivers/serial/s3c24a0.c b/drivers/serial/s3c24a0.c
index 26c49e18bdd1..fad6083ca427 100644
--- a/drivers/serial/s3c24a0.c
+++ b/drivers/serial/s3c24a0.c
@@ -6,7 +6,7 @@
6 * 6 *
7 * Author: Sandeep Patil <sandeep.patil@azingo.com> 7 * Author: Sandeep Patil <sandeep.patil@azingo.com>
8 * 8 *
9 * Ben Dooks, Copyright (c) 2003-2005,2008 Simtec Electronics 9 * Ben Dooks, Copyright (c) 2003-2008 Simtec Electronics
10 * http://armlinux.simtec.co.uk/ 10 * http://armlinux.simtec.co.uk/
11 * 11 *
12 * This program is free software; you can redistribute it and/or modify 12 * This program is free software; you can redistribute it and/or modify
diff --git a/drivers/serial/samsung.c b/drivers/serial/samsung.c
index 1523e8d9ae77..52e3df113ec0 100644
--- a/drivers/serial/samsung.c
+++ b/drivers/serial/samsung.c
@@ -2,7 +2,7 @@
2 * 2 *
3 * Driver core for Samsung SoC onboard UARTs. 3 * Driver core for Samsung SoC onboard UARTs.
4 * 4 *
5 * Ben Dooks, Copyright (c) 2003-2005,2008 Simtec Electronics 5 * Ben Dooks, Copyright (c) 2003-2008 Simtec Electronics
6 * http://armlinux.simtec.co.uk/ 6 * http://armlinux.simtec.co.uk/
7 * 7 *
8 * This program is free software; you can redistribute it and/or modify 8 * This program is free software; you can redistribute it and/or modify
diff --git a/drivers/serial/samsung.h b/drivers/serial/samsung.h
index d3fe315969f6..1fb22343df42 100644
--- a/drivers/serial/samsung.h
+++ b/drivers/serial/samsung.h
@@ -2,7 +2,7 @@
2 * 2 *
3 * Driver for Samsung SoC onboard UARTs. 3 * Driver for Samsung SoC onboard UARTs.
4 * 4 *
5 * Ben Dooks, Copyright (c) 2003-2005,2008 Simtec Electronics 5 * Ben Dooks, Copyright (c) 2003-2008 Simtec Electronics
6 * http://armlinux.simtec.co.uk/ 6 * http://armlinux.simtec.co.uk/
7 * 7 *
8 * This program is free software; you can redistribute it and/or modify 8 * This program is free software; you can redistribute it and/or modify
diff --git a/drivers/video/Kconfig b/drivers/video/Kconfig
index 188e1ba3b69f..6b89eb55ed32 100644
--- a/drivers/video/Kconfig
+++ b/drivers/video/Kconfig
@@ -5,6 +5,9 @@
5menu "Graphics support" 5menu "Graphics support"
6 depends on HAS_IOMEM 6 depends on HAS_IOMEM
7 7
8config HAVE_FB_ATMEL
9 bool
10
8source "drivers/char/agp/Kconfig" 11source "drivers/char/agp/Kconfig"
9 12
10source "drivers/gpu/vga/Kconfig" 13source "drivers/gpu/vga/Kconfig"
@@ -937,7 +940,7 @@ config FB_S1D13XXX
937 940
938config FB_ATMEL 941config FB_ATMEL
939 tristate "AT91/AT32 LCD Controller support" 942 tristate "AT91/AT32 LCD Controller support"
940 depends on FB && (ARCH_AT91SAM9261 || ARCH_AT91SAM9G10 || ARCH_AT91SAM9263 || ARCH_AT91SAM9RL || ARCH_AT91SAM9G45 || ARCH_AT91CAP9 || AVR32) 943 depends on FB && HAVE_FB_ATMEL
941 select FB_CFB_FILLRECT 944 select FB_CFB_FILLRECT
942 select FB_CFB_COPYAREA 945 select FB_CFB_COPYAREA
943 select FB_CFB_IMAGEBLIT 946 select FB_CFB_IMAGEBLIT
diff --git a/drivers/video/backlight/da903x_bl.c b/drivers/video/backlight/da903x_bl.c
index 701a1081e199..7fcb0eb54c60 100644
--- a/drivers/video/backlight/da903x_bl.c
+++ b/drivers/video/backlight/da903x_bl.c
@@ -25,6 +25,7 @@
25 25
26#define DA9034_WLED_CONTROL1 0x3C 26#define DA9034_WLED_CONTROL1 0x3C
27#define DA9034_WLED_CONTROL2 0x3D 27#define DA9034_WLED_CONTROL2 0x3D
28#define DA9034_WLED_ISET(x) ((x) & 0x1f)
28 29
29#define DA9034_WLED_BOOST_EN (1 << 5) 30#define DA9034_WLED_BOOST_EN (1 << 5)
30 31
@@ -101,6 +102,7 @@ static struct backlight_ops da903x_backlight_ops = {
101 102
102static int da903x_backlight_probe(struct platform_device *pdev) 103static int da903x_backlight_probe(struct platform_device *pdev)
103{ 104{
105 struct da9034_backlight_pdata *pdata = pdev->dev.platform_data;
104 struct da903x_backlight_data *data; 106 struct da903x_backlight_data *data;
105 struct backlight_device *bl; 107 struct backlight_device *bl;
106 int max_brightness; 108 int max_brightness;
@@ -127,6 +129,11 @@ static int da903x_backlight_probe(struct platform_device *pdev)
127 data->da903x_dev = pdev->dev.parent; 129 data->da903x_dev = pdev->dev.parent;
128 data->current_brightness = 0; 130 data->current_brightness = 0;
129 131
132 /* adjust the WLED output current */
133 if (pdata)
134 da903x_write(data->da903x_dev, DA9034_WLED_CONTROL2,
135 DA9034_WLED_ISET(pdata->output_current));
136
130 bl = backlight_device_register(pdev->name, data->da903x_dev, 137 bl = backlight_device_register(pdev->name, data->da903x_dev,
131 data, &da903x_backlight_ops); 138 data, &da903x_backlight_ops);
132 if (IS_ERR(bl)) { 139 if (IS_ERR(bl)) {
diff --git a/drivers/video/backlight/tdo24m.c b/drivers/video/backlight/tdo24m.c
index bbfb502add67..4a3d46e08016 100644
--- a/drivers/video/backlight/tdo24m.c
+++ b/drivers/video/backlight/tdo24m.c
@@ -367,6 +367,7 @@ static int __devinit tdo24m_probe(struct spi_device *spi)
367 367
368 spi_message_init(m); 368 spi_message_init(m);
369 369
370 x->cs_change = 1;
370 x->tx_buf = &lcd->buf[0]; 371 x->tx_buf = &lcd->buf[0];
371 spi_message_add_tail(x, m); 372 spi_message_add_tail(x, m);
372 373
diff --git a/drivers/video/pxa168fb.c b/drivers/video/pxa168fb.c
index 84d8327e47db..75285d3f393c 100644
--- a/drivers/video/pxa168fb.c
+++ b/drivers/video/pxa168fb.c
@@ -687,6 +687,7 @@ static int __init pxa168fb_probe(struct platform_device *pdev)
687 } 687 }
688 688
689 info->fix.smem_start = (unsigned long)fbi->fb_start_dma; 689 info->fix.smem_start = (unsigned long)fbi->fb_start_dma;
690 set_graphics_start(info, 0, 0);
690 691
691 /* 692 /*
692 * Set video mode according to platform data. 693 * Set video mode according to platform data.
diff --git a/drivers/video/pxafb.c b/drivers/video/pxafb.c
index 1820c4a24434..f58a3aae6ea6 100644
--- a/drivers/video/pxafb.c
+++ b/drivers/video/pxafb.c
@@ -80,7 +80,8 @@
80static int pxafb_activate_var(struct fb_var_screeninfo *var, 80static int pxafb_activate_var(struct fb_var_screeninfo *var,
81 struct pxafb_info *); 81 struct pxafb_info *);
82static void set_ctrlr_state(struct pxafb_info *fbi, u_int state); 82static void set_ctrlr_state(struct pxafb_info *fbi, u_int state);
83static void setup_base_frame(struct pxafb_info *fbi, int branch); 83static void setup_base_frame(struct pxafb_info *fbi,
84 struct fb_var_screeninfo *var, int branch);
84static int setup_frame_dma(struct pxafb_info *fbi, int dma, int pal, 85static int setup_frame_dma(struct pxafb_info *fbi, int dma, int pal,
85 unsigned long offset, size_t size); 86 unsigned long offset, size_t size);
86 87
@@ -397,6 +398,7 @@ static void pxafb_setmode(struct fb_var_screeninfo *var,
397 var->lower_margin = mode->lower_margin; 398 var->lower_margin = mode->lower_margin;
398 var->sync = mode->sync; 399 var->sync = mode->sync;
399 var->grayscale = mode->cmap_greyscale; 400 var->grayscale = mode->cmap_greyscale;
401 var->transp.length = mode->transparency;
400 402
401 /* set the initial RGBA bitfields */ 403 /* set the initial RGBA bitfields */
402 pxafb_set_pixfmt(var, mode->depth); 404 pxafb_set_pixfmt(var, mode->depth);
@@ -531,12 +533,22 @@ static int pxafb_pan_display(struct fb_var_screeninfo *var,
531 struct fb_info *info) 533 struct fb_info *info)
532{ 534{
533 struct pxafb_info *fbi = (struct pxafb_info *)info; 535 struct pxafb_info *fbi = (struct pxafb_info *)info;
536 struct fb_var_screeninfo newvar;
534 int dma = DMA_MAX + DMA_BASE; 537 int dma = DMA_MAX + DMA_BASE;
535 538
536 if (fbi->state != C_ENABLE) 539 if (fbi->state != C_ENABLE)
537 return 0; 540 return 0;
538 541
539 setup_base_frame(fbi, 1); 542 /* Only take .xoffset, .yoffset and .vmode & FB_VMODE_YWRAP from what
543 * was passed in and copy the rest from the old screeninfo.
544 */
545 memcpy(&newvar, &fbi->fb.var, sizeof(newvar));
546 newvar.xoffset = var->xoffset;
547 newvar.yoffset = var->yoffset;
548 newvar.vmode &= ~FB_VMODE_YWRAP;
549 newvar.vmode |= var->vmode & FB_VMODE_YWRAP;
550
551 setup_base_frame(fbi, &newvar, 1);
540 552
541 if (fbi->lccr0 & LCCR0_SDS) 553 if (fbi->lccr0 & LCCR0_SDS)
542 lcd_writel(fbi, FBR1, fbi->fdadr[dma + 1] | 0x1); 554 lcd_writel(fbi, FBR1, fbi->fdadr[dma + 1] | 0x1);
@@ -1052,9 +1064,10 @@ static int setup_frame_dma(struct pxafb_info *fbi, int dma, int pal,
1052 return 0; 1064 return 0;
1053} 1065}
1054 1066
1055static void setup_base_frame(struct pxafb_info *fbi, int branch) 1067static void setup_base_frame(struct pxafb_info *fbi,
1068 struct fb_var_screeninfo *var,
1069 int branch)
1056{ 1070{
1057 struct fb_var_screeninfo *var = &fbi->fb.var;
1058 struct fb_fix_screeninfo *fix = &fbi->fb.fix; 1071 struct fb_fix_screeninfo *fix = &fbi->fb.fix;
1059 int nbytes, dma, pal, bpp = var->bits_per_pixel; 1072 int nbytes, dma, pal, bpp = var->bits_per_pixel;
1060 unsigned long offset; 1073 unsigned long offset;
@@ -1332,7 +1345,7 @@ static int pxafb_activate_var(struct fb_var_screeninfo *var,
1332#endif 1345#endif
1333 setup_parallel_timing(fbi, var); 1346 setup_parallel_timing(fbi, var);
1334 1347
1335 setup_base_frame(fbi, 0); 1348 setup_base_frame(fbi, var, 0);
1336 1349
1337 fbi->reg_lccr0 = fbi->lccr0 | 1350 fbi->reg_lccr0 = fbi->lccr0 |
1338 (LCCR0_LDM | LCCR0_SFM | LCCR0_IUM | LCCR0_EFM | 1351 (LCCR0_LDM | LCCR0_SFM | LCCR0_IUM | LCCR0_EFM |