diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2010-05-24 10:58:28 -0400 |
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2010-05-24 10:58:28 -0400 |
| commit | 0fed2b5cb4c04336b26b0cbf6f9a8c07081f79a6 (patch) | |
| tree | a9be0f082d3c2f53eb2d5f9de9ad900c31236b34 | |
| parent | 0163916f1db7f345963dad1af78b7628c759c6ee (diff) | |
| parent | 41ec7ebee14189a0424176279c227168960c28ad (diff) | |
Merge git://git.kernel.org/pub/scm/linux/kernel/git/lethal/sh-2.6
* git://git.kernel.org/pub/scm/linux/kernel/git/lethal/sh-2.6: (25 commits)
sh: fix up sh7785lcr_32bit_defconfig.
arch/sh/lib/strlen.S: Checkpatch cleanup
sh: fix up sh7786 dmaengine build.
sh: guard cookie consistency across termination in the DMA driver
sh: prevent the DMA driver from unloading, while in use
sh: fix Oops in the serial SCI driver
sh: allow platforms to specify SD-card supported voltages
mmc: let MFD's provide supported Vdd card voltages to tmio_mmc
sh: disable SD-card write-protection detection on kfr2r09
mfd: pass platform flags down to the tmio_mmc driver
tmio: add a platform flag to disable card write-protection detection
sh: Add SDHI DMA support to migor
sh: Add SDHI DMA support to kfr2r09
sh: Add SDHI DMA support to ms7724se
sh: Add SDHI DMA support to ecovec
mmc: add DMA support to tmio_mmc driver, when used on SuperH
sh: prepare the SDHI MFD driver to pass DMA configuration to tmio_mmc.c
mmc: prepare tmio_mmc for passing of DMA configuration from the MFD cell
sh: add DMA slave definitions to sh7724
sh: add DMA slaves for two SDHI controllers to sh7722
...
27 files changed, 916 insertions, 207 deletions
diff --git a/arch/sh/boards/mach-ecovec24/setup.c b/arch/sh/boards/mach-ecovec24/setup.c index 62123885a6fa..49714258732e 100644 --- a/arch/sh/boards/mach-ecovec24/setup.c +++ b/arch/sh/boards/mach-ecovec24/setup.c | |||
| @@ -11,6 +11,7 @@ | |||
| 11 | #include <linux/init.h> | 11 | #include <linux/init.h> |
| 12 | #include <linux/device.h> | 12 | #include <linux/device.h> |
| 13 | #include <linux/platform_device.h> | 13 | #include <linux/platform_device.h> |
| 14 | #include <linux/mfd/sh_mobile_sdhi.h> | ||
| 14 | #include <linux/mtd/physmap.h> | 15 | #include <linux/mtd/physmap.h> |
| 15 | #include <linux/gpio.h> | 16 | #include <linux/gpio.h> |
| 16 | #include <linux/interrupt.h> | 17 | #include <linux/interrupt.h> |
| @@ -442,7 +443,9 @@ static void sdhi0_set_pwr(struct platform_device *pdev, int state) | |||
| 442 | } | 443 | } |
| 443 | 444 | ||
| 444 | static struct sh_mobile_sdhi_info sdhi0_info = { | 445 | static struct sh_mobile_sdhi_info sdhi0_info = { |
| 445 | .set_pwr = sdhi0_set_pwr, | 446 | .dma_slave_tx = SHDMA_SLAVE_SDHI0_TX, |
| 447 | .dma_slave_rx = SHDMA_SLAVE_SDHI0_RX, | ||
| 448 | .set_pwr = sdhi0_set_pwr, | ||
| 446 | }; | 449 | }; |
| 447 | 450 | ||
| 448 | static struct resource sdhi0_resources[] = { | 451 | static struct resource sdhi0_resources[] = { |
| @@ -478,7 +481,9 @@ static void sdhi1_set_pwr(struct platform_device *pdev, int state) | |||
| 478 | } | 481 | } |
| 479 | 482 | ||
| 480 | static struct sh_mobile_sdhi_info sdhi1_info = { | 483 | static struct sh_mobile_sdhi_info sdhi1_info = { |
| 481 | .set_pwr = sdhi1_set_pwr, | 484 | .dma_slave_tx = SHDMA_SLAVE_SDHI1_TX, |
| 485 | .dma_slave_rx = SHDMA_SLAVE_SDHI1_RX, | ||
| 486 | .set_pwr = sdhi1_set_pwr, | ||
| 482 | }; | 487 | }; |
| 483 | 488 | ||
| 484 | static struct resource sdhi1_resources[] = { | 489 | static struct resource sdhi1_resources[] = { |
| @@ -769,6 +774,51 @@ static struct platform_device irda_device = { | |||
| 769 | .resource = irda_resources, | 774 | .resource = irda_resources, |
| 770 | }; | 775 | }; |
| 771 | 776 | ||
| 777 | #include <media/ak881x.h> | ||
| 778 | #include <media/sh_vou.h> | ||
| 779 | |||
| 780 | struct ak881x_pdata ak881x_pdata = { | ||
| 781 | .flags = AK881X_IF_MODE_SLAVE, | ||
| 782 | }; | ||
| 783 | |||
| 784 | static struct i2c_board_info ak8813 = { | ||
| 785 | I2C_BOARD_INFO("ak8813", 0x20), | ||
| 786 | .platform_data = &ak881x_pdata, | ||
| 787 | }; | ||
| 788 | |||
| 789 | struct sh_vou_pdata sh_vou_pdata = { | ||
| 790 | .bus_fmt = SH_VOU_BUS_8BIT, | ||
| 791 | .flags = SH_VOU_HSYNC_LOW | SH_VOU_VSYNC_LOW, | ||
| 792 | .board_info = &ak8813, | ||
| 793 | .i2c_adap = 0, | ||
| 794 | .module_name = "ak881x", | ||
| 795 | }; | ||
| 796 | |||
| 797 | static struct resource sh_vou_resources[] = { | ||
| 798 | [0] = { | ||
| 799 | .start = 0xfe960000, | ||
| 800 | .end = 0xfe962043, | ||
| 801 | .flags = IORESOURCE_MEM, | ||
| 802 | }, | ||
| 803 | [1] = { | ||
| 804 | .start = 55, | ||
| 805 | .flags = IORESOURCE_IRQ, | ||
| 806 | }, | ||
| 807 | }; | ||
| 808 | |||
| 809 | static struct platform_device vou_device = { | ||
| 810 | .name = "sh-vou", | ||
| 811 | .id = -1, | ||
| 812 | .num_resources = ARRAY_SIZE(sh_vou_resources), | ||
| 813 | .resource = sh_vou_resources, | ||
| 814 | .dev = { | ||
| 815 | .platform_data = &sh_vou_pdata, | ||
| 816 | }, | ||
| 817 | .archdata = { | ||
| 818 | .hwblk_id = HWBLK_VOU, | ||
| 819 | }, | ||
| 820 | }; | ||
| 821 | |||
| 772 | static struct platform_device *ecovec_devices[] __initdata = { | 822 | static struct platform_device *ecovec_devices[] __initdata = { |
| 773 | &heartbeat_device, | 823 | &heartbeat_device, |
| 774 | &nor_flash_device, | 824 | &nor_flash_device, |
| @@ -790,6 +840,7 @@ static struct platform_device *ecovec_devices[] __initdata = { | |||
| 790 | &camera_devices[2], | 840 | &camera_devices[2], |
| 791 | &fsi_device, | 841 | &fsi_device, |
| 792 | &irda_device, | 842 | &irda_device, |
| 843 | &vou_device, | ||
| 793 | }; | 844 | }; |
| 794 | 845 | ||
| 795 | #ifdef CONFIG_I2C | 846 | #ifdef CONFIG_I2C |
| @@ -1179,6 +1230,38 @@ static int __init arch_setup(void) | |||
| 1179 | i2c_register_board_info(1, i2c1_devices, | 1230 | i2c_register_board_info(1, i2c1_devices, |
| 1180 | ARRAY_SIZE(i2c1_devices)); | 1231 | ARRAY_SIZE(i2c1_devices)); |
| 1181 | 1232 | ||
| 1233 | /* VOU */ | ||
| 1234 | gpio_request(GPIO_FN_DV_D15, NULL); | ||
| 1235 | gpio_request(GPIO_FN_DV_D14, NULL); | ||
| 1236 | gpio_request(GPIO_FN_DV_D13, NULL); | ||
| 1237 | gpio_request(GPIO_FN_DV_D12, NULL); | ||
| 1238 | gpio_request(GPIO_FN_DV_D11, NULL); | ||
| 1239 | gpio_request(GPIO_FN_DV_D10, NULL); | ||
| 1240 | gpio_request(GPIO_FN_DV_D9, NULL); | ||
| 1241 | gpio_request(GPIO_FN_DV_D8, NULL); | ||
| 1242 | gpio_request(GPIO_FN_DV_CLKI, NULL); | ||
| 1243 | gpio_request(GPIO_FN_DV_CLK, NULL); | ||
| 1244 | gpio_request(GPIO_FN_DV_VSYNC, NULL); | ||
| 1245 | gpio_request(GPIO_FN_DV_HSYNC, NULL); | ||
| 1246 | |||
| 1247 | /* AK8813 power / reset sequence */ | ||
| 1248 | gpio_request(GPIO_PTG4, NULL); | ||
| 1249 | gpio_request(GPIO_PTU3, NULL); | ||
| 1250 | /* Reset */ | ||
| 1251 | gpio_direction_output(GPIO_PTG4, 0); | ||
| 1252 | /* Power down */ | ||
| 1253 | gpio_direction_output(GPIO_PTU3, 1); | ||
| 1254 | |||
| 1255 | udelay(10); | ||
| 1256 | |||
| 1257 | /* Power up, reset */ | ||
| 1258 | gpio_set_value(GPIO_PTU3, 0); | ||
| 1259 | |||
| 1260 | udelay(10); | ||
| 1261 | |||
| 1262 | /* Remove reset */ | ||
| 1263 | gpio_set_value(GPIO_PTG4, 1); | ||
| 1264 | |||
| 1182 | return platform_add_devices(ecovec_devices, | 1265 | return platform_add_devices(ecovec_devices, |
| 1183 | ARRAY_SIZE(ecovec_devices)); | 1266 | ARRAY_SIZE(ecovec_devices)); |
| 1184 | } | 1267 | } |
diff --git a/arch/sh/boards/mach-kfr2r09/setup.c b/arch/sh/boards/mach-kfr2r09/setup.c index b2cd0ed8664e..68994a163f6c 100644 --- a/arch/sh/boards/mach-kfr2r09/setup.c +++ b/arch/sh/boards/mach-kfr2r09/setup.c | |||
| @@ -10,6 +10,8 @@ | |||
| 10 | #include <linux/init.h> | 10 | #include <linux/init.h> |
| 11 | #include <linux/platform_device.h> | 11 | #include <linux/platform_device.h> |
| 12 | #include <linux/interrupt.h> | 12 | #include <linux/interrupt.h> |
| 13 | #include <linux/mfd/sh_mobile_sdhi.h> | ||
| 14 | #include <linux/mfd/tmio.h> | ||
| 13 | #include <linux/mtd/physmap.h> | 15 | #include <linux/mtd/physmap.h> |
| 14 | #include <linux/mtd/onenand.h> | 16 | #include <linux/mtd/onenand.h> |
| 15 | #include <linux/delay.h> | 17 | #include <linux/delay.h> |
| @@ -356,10 +358,19 @@ static struct resource kfr2r09_sh_sdhi0_resources[] = { | |||
| 356 | }, | 358 | }, |
| 357 | }; | 359 | }; |
| 358 | 360 | ||
| 361 | static struct sh_mobile_sdhi_info sh7724_sdhi0_data = { | ||
| 362 | .dma_slave_tx = SHDMA_SLAVE_SDHI0_TX, | ||
| 363 | .dma_slave_rx = SHDMA_SLAVE_SDHI0_RX, | ||
| 364 | .tmio_flags = TMIO_MMC_WRPROTECT_DISABLE, | ||
| 365 | }; | ||
| 366 | |||
| 359 | static struct platform_device kfr2r09_sh_sdhi0_device = { | 367 | static struct platform_device kfr2r09_sh_sdhi0_device = { |
| 360 | .name = "sh_mobile_sdhi", | 368 | .name = "sh_mobile_sdhi", |
| 361 | .num_resources = ARRAY_SIZE(kfr2r09_sh_sdhi0_resources), | 369 | .num_resources = ARRAY_SIZE(kfr2r09_sh_sdhi0_resources), |
| 362 | .resource = kfr2r09_sh_sdhi0_resources, | 370 | .resource = kfr2r09_sh_sdhi0_resources, |
| 371 | .dev = { | ||
| 372 | .platform_data = &sh7724_sdhi0_data, | ||
| 373 | }, | ||
| 363 | .archdata = { | 374 | .archdata = { |
| 364 | .hwblk_id = HWBLK_SDHI0, | 375 | .hwblk_id = HWBLK_SDHI0, |
| 365 | }, | 376 | }, |
diff --git a/arch/sh/boards/mach-migor/setup.c b/arch/sh/boards/mach-migor/setup.c index 7da0fc94a01e..87185de20446 100644 --- a/arch/sh/boards/mach-migor/setup.c +++ b/arch/sh/boards/mach-migor/setup.c | |||
| @@ -12,6 +12,7 @@ | |||
| 12 | #include <linux/interrupt.h> | 12 | #include <linux/interrupt.h> |
| 13 | #include <linux/input.h> | 13 | #include <linux/input.h> |
| 14 | #include <linux/input/sh_keysc.h> | 14 | #include <linux/input/sh_keysc.h> |
| 15 | #include <linux/mfd/sh_mobile_sdhi.h> | ||
| 15 | #include <linux/mtd/physmap.h> | 16 | #include <linux/mtd/physmap.h> |
| 16 | #include <linux/mtd/nand.h> | 17 | #include <linux/mtd/nand.h> |
| 17 | #include <linux/i2c.h> | 18 | #include <linux/i2c.h> |
| @@ -402,10 +403,18 @@ static struct resource sdhi_cn9_resources[] = { | |||
| 402 | }, | 403 | }, |
| 403 | }; | 404 | }; |
| 404 | 405 | ||
| 406 | static struct sh_mobile_sdhi_info sh7724_sdhi_data = { | ||
| 407 | .dma_slave_tx = SHDMA_SLAVE_SDHI0_TX, | ||
| 408 | .dma_slave_rx = SHDMA_SLAVE_SDHI0_RX, | ||
| 409 | }; | ||
| 410 | |||
| 405 | static struct platform_device sdhi_cn9_device = { | 411 | static struct platform_device sdhi_cn9_device = { |
| 406 | .name = "sh_mobile_sdhi", | 412 | .name = "sh_mobile_sdhi", |
| 407 | .num_resources = ARRAY_SIZE(sdhi_cn9_resources), | 413 | .num_resources = ARRAY_SIZE(sdhi_cn9_resources), |
| 408 | .resource = sdhi_cn9_resources, | 414 | .resource = sdhi_cn9_resources, |
| 415 | .dev = { | ||
| 416 | .platform_data = &sh7724_sdhi_data, | ||
| 417 | }, | ||
| 409 | .archdata = { | 418 | .archdata = { |
| 410 | .hwblk_id = HWBLK_SDHI, | 419 | .hwblk_id = HWBLK_SDHI, |
| 411 | }, | 420 | }, |
diff --git a/arch/sh/boards/mach-se/7724/setup.c b/arch/sh/boards/mach-se/7724/setup.c index e74ae7b0d8bf..f9b82546c2df 100644 --- a/arch/sh/boards/mach-se/7724/setup.c +++ b/arch/sh/boards/mach-se/7724/setup.c | |||
| @@ -14,6 +14,7 @@ | |||
| 14 | #include <linux/device.h> | 14 | #include <linux/device.h> |
| 15 | #include <linux/interrupt.h> | 15 | #include <linux/interrupt.h> |
| 16 | #include <linux/platform_device.h> | 16 | #include <linux/platform_device.h> |
| 17 | #include <linux/mfd/sh_mobile_sdhi.h> | ||
| 17 | #include <linux/mtd/physmap.h> | 18 | #include <linux/mtd/physmap.h> |
| 18 | #include <linux/delay.h> | 19 | #include <linux/delay.h> |
| 19 | #include <linux/smc91x.h> | 20 | #include <linux/smc91x.h> |
| @@ -462,11 +463,19 @@ static struct resource sdhi0_cn7_resources[] = { | |||
| 462 | }, | 463 | }, |
| 463 | }; | 464 | }; |
| 464 | 465 | ||
| 466 | static struct sh_mobile_sdhi_info sh7724_sdhi0_data = { | ||
| 467 | .dma_slave_tx = SHDMA_SLAVE_SDHI0_TX, | ||
| 468 | .dma_slave_rx = SHDMA_SLAVE_SDHI0_RX, | ||
| 469 | }; | ||
| 470 | |||
| 465 | static struct platform_device sdhi0_cn7_device = { | 471 | static struct platform_device sdhi0_cn7_device = { |
| 466 | .name = "sh_mobile_sdhi", | 472 | .name = "sh_mobile_sdhi", |
| 467 | .id = 0, | 473 | .id = 0, |
| 468 | .num_resources = ARRAY_SIZE(sdhi0_cn7_resources), | 474 | .num_resources = ARRAY_SIZE(sdhi0_cn7_resources), |
| 469 | .resource = sdhi0_cn7_resources, | 475 | .resource = sdhi0_cn7_resources, |
| 476 | .dev = { | ||
| 477 | .platform_data = &sh7724_sdhi0_data, | ||
| 478 | }, | ||
| 470 | .archdata = { | 479 | .archdata = { |
| 471 | .hwblk_id = HWBLK_SDHI0, | 480 | .hwblk_id = HWBLK_SDHI0, |
| 472 | }, | 481 | }, |
| @@ -485,11 +494,19 @@ static struct resource sdhi1_cn8_resources[] = { | |||
| 485 | }, | 494 | }, |
| 486 | }; | 495 | }; |
| 487 | 496 | ||
| 497 | static struct sh_mobile_sdhi_info sh7724_sdhi1_data = { | ||
| 498 | .dma_slave_tx = SHDMA_SLAVE_SDHI1_TX, | ||
| 499 | .dma_slave_rx = SHDMA_SLAVE_SDHI1_RX, | ||
| 500 | }; | ||
| 501 | |||
| 488 | static struct platform_device sdhi1_cn8_device = { | 502 | static struct platform_device sdhi1_cn8_device = { |
| 489 | .name = "sh_mobile_sdhi", | 503 | .name = "sh_mobile_sdhi", |
| 490 | .id = 1, | 504 | .id = 1, |
| 491 | .num_resources = ARRAY_SIZE(sdhi1_cn8_resources), | 505 | .num_resources = ARRAY_SIZE(sdhi1_cn8_resources), |
| 492 | .resource = sdhi1_cn8_resources, | 506 | .resource = sdhi1_cn8_resources, |
| 507 | .dev = { | ||
| 508 | .platform_data = &sh7724_sdhi1_data, | ||
| 509 | }, | ||
| 493 | .archdata = { | 510 | .archdata = { |
| 494 | .hwblk_id = HWBLK_SDHI1, | 511 | .hwblk_id = HWBLK_SDHI1, |
| 495 | }, | 512 | }, |
| @@ -515,6 +532,52 @@ static struct platform_device irda_device = { | |||
| 515 | .resource = irda_resources, | 532 | .resource = irda_resources, |
| 516 | }; | 533 | }; |
| 517 | 534 | ||
| 535 | #include <media/ak881x.h> | ||
| 536 | #include <media/sh_vou.h> | ||
| 537 | |||
| 538 | struct ak881x_pdata ak881x_pdata = { | ||
| 539 | .flags = AK881X_IF_MODE_SLAVE, | ||
| 540 | }; | ||
| 541 | |||
| 542 | static struct i2c_board_info ak8813 = { | ||
| 543 | /* With open J18 jumper address is 0x21 */ | ||
| 544 | I2C_BOARD_INFO("ak8813", 0x20), | ||
| 545 | .platform_data = &ak881x_pdata, | ||
| 546 | }; | ||
| 547 | |||
| 548 | struct sh_vou_pdata sh_vou_pdata = { | ||
| 549 | .bus_fmt = SH_VOU_BUS_8BIT, | ||
| 550 | .flags = SH_VOU_HSYNC_LOW | SH_VOU_VSYNC_LOW, | ||
| 551 | .board_info = &ak8813, | ||
| 552 | .i2c_adap = 0, | ||
| 553 | .module_name = "ak881x", | ||
| 554 | }; | ||
| 555 | |||
| 556 | static struct resource sh_vou_resources[] = { | ||
| 557 | [0] = { | ||
| 558 | .start = 0xfe960000, | ||
| 559 | .end = 0xfe962043, | ||
| 560 | .flags = IORESOURCE_MEM, | ||
| 561 | }, | ||
| 562 | [1] = { | ||
| 563 | .start = 55, | ||
| 564 | .flags = IORESOURCE_IRQ, | ||
| 565 | }, | ||
| 566 | }; | ||
| 567 | |||
| 568 | static struct platform_device vou_device = { | ||
| 569 | .name = "sh-vou", | ||
| 570 | .id = -1, | ||
| 571 | .num_resources = ARRAY_SIZE(sh_vou_resources), | ||
| 572 | .resource = sh_vou_resources, | ||
| 573 | .dev = { | ||
| 574 | .platform_data = &sh_vou_pdata, | ||
| 575 | }, | ||
| 576 | .archdata = { | ||
| 577 | .hwblk_id = HWBLK_VOU, | ||
| 578 | }, | ||
| 579 | }; | ||
| 580 | |||
| 518 | static struct platform_device *ms7724se_devices[] __initdata = { | 581 | static struct platform_device *ms7724se_devices[] __initdata = { |
| 519 | &heartbeat_device, | 582 | &heartbeat_device, |
| 520 | &smc91x_eth_device, | 583 | &smc91x_eth_device, |
| @@ -530,6 +593,7 @@ static struct platform_device *ms7724se_devices[] __initdata = { | |||
| 530 | &sdhi0_cn7_device, | 593 | &sdhi0_cn7_device, |
| 531 | &sdhi1_cn8_device, | 594 | &sdhi1_cn8_device, |
| 532 | &irda_device, | 595 | &irda_device, |
| 596 | &vou_device, | ||
| 533 | }; | 597 | }; |
| 534 | 598 | ||
| 535 | /* I2C device */ | 599 | /* I2C device */ |
| @@ -614,6 +678,7 @@ static int __init devices_setup(void) | |||
| 614 | { | 678 | { |
| 615 | u16 sw = __raw_readw(SW4140); /* select camera, monitor */ | 679 | u16 sw = __raw_readw(SW4140); /* select camera, monitor */ |
| 616 | struct clk *clk; | 680 | struct clk *clk; |
| 681 | u16 fpga_out; | ||
| 617 | 682 | ||
| 618 | /* register board specific self-refresh code */ | 683 | /* register board specific self-refresh code */ |
| 619 | sh_mobile_register_self_refresh(SUSP_SH_STANDBY | SUSP_SH_SF | | 684 | sh_mobile_register_self_refresh(SUSP_SH_STANDBY | SUSP_SH_SF | |
| @@ -623,14 +688,26 @@ static int __init devices_setup(void) | |||
| 623 | &ms7724se_sdram_leave_start, | 688 | &ms7724se_sdram_leave_start, |
| 624 | &ms7724se_sdram_leave_end); | 689 | &ms7724se_sdram_leave_end); |
| 625 | /* Reset Release */ | 690 | /* Reset Release */ |
| 626 | __raw_writew(__raw_readw(FPGA_OUT) & | 691 | fpga_out = __raw_readw(FPGA_OUT); |
| 627 | ~((1 << 1) | /* LAN */ | 692 | /* bit4: NTSC_PDN, bit5: NTSC_RESET */ |
| 628 | (1 << 6) | /* VIDEO DAC */ | 693 | fpga_out &= ~((1 << 1) | /* LAN */ |
| 629 | (1 << 7) | /* AK4643 */ | 694 | (1 << 4) | /* AK8813 PDN */ |
| 630 | (1 << 8) | /* IrDA */ | 695 | (1 << 5) | /* AK8813 RESET */ |
| 631 | (1 << 12) | /* USB0 */ | 696 | (1 << 6) | /* VIDEO DAC */ |
| 632 | (1 << 14)), /* RMII */ | 697 | (1 << 7) | /* AK4643 */ |
| 633 | FPGA_OUT); | 698 | (1 << 8) | /* IrDA */ |
| 699 | (1 << 12) | /* USB0 */ | ||
| 700 | (1 << 14)); /* RMII */ | ||
| 701 | __raw_writew(fpga_out | (1 << 4), FPGA_OUT); | ||
| 702 | |||
| 703 | udelay(10); | ||
| 704 | |||
| 705 | /* AK8813 RESET */ | ||
| 706 | __raw_writew(fpga_out | (1 << 5), FPGA_OUT); | ||
| 707 | |||
| 708 | udelay(10); | ||
| 709 | |||
| 710 | __raw_writew(fpga_out, FPGA_OUT); | ||
| 634 | 711 | ||
| 635 | /* turn on USB clocks, use external clock */ | 712 | /* turn on USB clocks, use external clock */ |
| 636 | __raw_writew((__raw_readw(PORT_MSELCRB) & ~0xc000) | 0x8000, PORT_MSELCRB); | 713 | __raw_writew((__raw_readw(PORT_MSELCRB) & ~0xc000) | 0x8000, PORT_MSELCRB); |
| @@ -862,6 +939,20 @@ static int __init devices_setup(void) | |||
| 862 | lcdc_info.ch[0].flags = LCDC_FLAGS_DWPOL; | 939 | lcdc_info.ch[0].flags = LCDC_FLAGS_DWPOL; |
| 863 | } | 940 | } |
| 864 | 941 | ||
| 942 | /* VOU */ | ||
| 943 | gpio_request(GPIO_FN_DV_D15, NULL); | ||
| 944 | gpio_request(GPIO_FN_DV_D14, NULL); | ||
| 945 | gpio_request(GPIO_FN_DV_D13, NULL); | ||
| 946 | gpio_request(GPIO_FN_DV_D12, NULL); | ||
| 947 | gpio_request(GPIO_FN_DV_D11, NULL); | ||
| 948 | gpio_request(GPIO_FN_DV_D10, NULL); | ||
| 949 | gpio_request(GPIO_FN_DV_D9, NULL); | ||
| 950 | gpio_request(GPIO_FN_DV_D8, NULL); | ||
| 951 | gpio_request(GPIO_FN_DV_CLKI, NULL); | ||
| 952 | gpio_request(GPIO_FN_DV_CLK, NULL); | ||
| 953 | gpio_request(GPIO_FN_DV_VSYNC, NULL); | ||
| 954 | gpio_request(GPIO_FN_DV_HSYNC, NULL); | ||
| 955 | |||
| 865 | return platform_add_devices(ms7724se_devices, | 956 | return platform_add_devices(ms7724se_devices, |
| 866 | ARRAY_SIZE(ms7724se_devices)); | 957 | ARRAY_SIZE(ms7724se_devices)); |
| 867 | } | 958 | } |
diff --git a/arch/sh/configs/sh7785lcr_32bit_defconfig b/arch/sh/configs/sh7785lcr_32bit_defconfig index e9af616b2160..71f39c71b04b 100644 --- a/arch/sh/configs/sh7785lcr_32bit_defconfig +++ b/arch/sh/configs/sh7785lcr_32bit_defconfig | |||
| @@ -1,7 +1,7 @@ | |||
| 1 | # | 1 | # |
| 2 | # Automatically generated make config: don't edit | 2 | # Automatically generated make config: don't edit |
| 3 | # Linux kernel version: 2.6.34-rc5 | 3 | # Linux kernel version: 2.6.34 |
| 4 | # Tue May 18 17:22:09 2010 | 4 | # Mon May 24 08:33:02 2010 |
| 5 | # | 5 | # |
| 6 | CONFIG_SUPERH=y | 6 | CONFIG_SUPERH=y |
| 7 | CONFIG_SUPERH32=y | 7 | CONFIG_SUPERH32=y |
| @@ -76,7 +76,7 @@ CONFIG_RCU_FANOUT=32 | |||
| 76 | # CONFIG_TREE_RCU_TRACE is not set | 76 | # CONFIG_TREE_RCU_TRACE is not set |
| 77 | CONFIG_IKCONFIG=y | 77 | CONFIG_IKCONFIG=y |
| 78 | CONFIG_IKCONFIG_PROC=y | 78 | CONFIG_IKCONFIG_PROC=y |
| 79 | CONFIG_LOG_BUF_SHIFT=14 | 79 | CONFIG_LOG_BUF_SHIFT=16 |
| 80 | # CONFIG_CGROUPS is not set | 80 | # CONFIG_CGROUPS is not set |
| 81 | # CONFIG_SYSFS_DEPRECATED_V2 is not set | 81 | # CONFIG_SYSFS_DEPRECATED_V2 is not set |
| 82 | # CONFIG_RELAY is not set | 82 | # CONFIG_RELAY is not set |
| @@ -111,18 +111,17 @@ CONFIG_PERF_USE_VMALLOC=y | |||
| 111 | # | 111 | # |
| 112 | CONFIG_PERF_EVENTS=y | 112 | CONFIG_PERF_EVENTS=y |
| 113 | CONFIG_PERF_COUNTERS=y | 113 | CONFIG_PERF_COUNTERS=y |
| 114 | # CONFIG_DEBUG_PERF_USE_VMALLOC is not set | ||
| 114 | CONFIG_VM_EVENT_COUNTERS=y | 115 | CONFIG_VM_EVENT_COUNTERS=y |
| 115 | CONFIG_PCI_QUIRKS=y | 116 | CONFIG_PCI_QUIRKS=y |
| 116 | CONFIG_COMPAT_BRK=y | 117 | # CONFIG_COMPAT_BRK is not set |
| 117 | CONFIG_SLAB=y | 118 | CONFIG_SLAB=y |
| 118 | # CONFIG_SLUB is not set | 119 | # CONFIG_SLUB is not set |
| 119 | # CONFIG_SLOB is not set | 120 | # CONFIG_SLOB is not set |
| 120 | CONFIG_PROFILING=y | 121 | CONFIG_PROFILING=y |
| 121 | CONFIG_TRACEPOINTS=y | 122 | # CONFIG_OPROFILE is not set |
| 122 | CONFIG_OPROFILE=y | ||
| 123 | CONFIG_HAVE_OPROFILE=y | 123 | CONFIG_HAVE_OPROFILE=y |
| 124 | CONFIG_KPROBES=y | 124 | # CONFIG_KPROBES is not set |
| 125 | CONFIG_KRETPROBES=y | ||
| 126 | CONFIG_HAVE_KPROBES=y | 125 | CONFIG_HAVE_KPROBES=y |
| 127 | CONFIG_HAVE_KRETPROBES=y | 126 | CONFIG_HAVE_KRETPROBES=y |
| 128 | CONFIG_HAVE_ARCH_TRACEHOOK=y | 127 | CONFIG_HAVE_ARCH_TRACEHOOK=y |
| @@ -130,6 +129,7 @@ CONFIG_HAVE_DMA_ATTRS=y | |||
| 130 | CONFIG_HAVE_CLK=y | 129 | CONFIG_HAVE_CLK=y |
| 131 | CONFIG_HAVE_DMA_API_DEBUG=y | 130 | CONFIG_HAVE_DMA_API_DEBUG=y |
| 132 | CONFIG_HAVE_HW_BREAKPOINT=y | 131 | CONFIG_HAVE_HW_BREAKPOINT=y |
| 132 | CONFIG_HAVE_MIXED_BREAKPOINTS_REGS=y | ||
| 133 | 133 | ||
| 134 | # | 134 | # |
| 135 | # GCOV-based kernel profiling | 135 | # GCOV-based kernel profiling |
| @@ -243,8 +243,9 @@ CONFIG_PAGE_OFFSET=0x80000000 | |||
| 243 | CONFIG_FORCE_MAX_ZONEORDER=11 | 243 | CONFIG_FORCE_MAX_ZONEORDER=11 |
| 244 | CONFIG_MEMORY_START=0x40000000 | 244 | CONFIG_MEMORY_START=0x40000000 |
| 245 | CONFIG_MEMORY_SIZE=0x20000000 | 245 | CONFIG_MEMORY_SIZE=0x20000000 |
| 246 | CONFIG_29BIT=y | 246 | # CONFIG_29BIT is not set |
| 247 | # CONFIG_PMB is not set | 247 | CONFIG_32BIT=y |
| 248 | CONFIG_PMB=y | ||
| 248 | CONFIG_X2TLB=y | 249 | CONFIG_X2TLB=y |
| 249 | CONFIG_VSYSCALL=y | 250 | CONFIG_VSYSCALL=y |
| 250 | # CONFIG_NUMA is not set | 251 | # CONFIG_NUMA is not set |
| @@ -262,9 +263,9 @@ CONFIG_PAGE_SIZE_4KB=y | |||
| 262 | # CONFIG_PAGE_SIZE_8KB is not set | 263 | # CONFIG_PAGE_SIZE_8KB is not set |
| 263 | # CONFIG_PAGE_SIZE_16KB is not set | 264 | # CONFIG_PAGE_SIZE_16KB is not set |
| 264 | # CONFIG_PAGE_SIZE_64KB is not set | 265 | # CONFIG_PAGE_SIZE_64KB is not set |
| 265 | CONFIG_HUGETLB_PAGE_SIZE_64K=y | 266 | # CONFIG_HUGETLB_PAGE_SIZE_64K is not set |
| 266 | # CONFIG_HUGETLB_PAGE_SIZE_256K is not set | 267 | # CONFIG_HUGETLB_PAGE_SIZE_256K is not set |
| 267 | # CONFIG_HUGETLB_PAGE_SIZE_1MB is not set | 268 | CONFIG_HUGETLB_PAGE_SIZE_1MB=y |
| 268 | # CONFIG_HUGETLB_PAGE_SIZE_4MB is not set | 269 | # CONFIG_HUGETLB_PAGE_SIZE_4MB is not set |
| 269 | # CONFIG_HUGETLB_PAGE_SIZE_64MB is not set | 270 | # CONFIG_HUGETLB_PAGE_SIZE_64MB is not set |
| 270 | # CONFIG_HUGETLB_PAGE_SIZE_512MB is not set | 271 | # CONFIG_HUGETLB_PAGE_SIZE_512MB is not set |
| @@ -276,7 +277,7 @@ CONFIG_SPARSEMEM=y | |||
| 276 | CONFIG_HAVE_MEMORY_PRESENT=y | 277 | CONFIG_HAVE_MEMORY_PRESENT=y |
| 277 | CONFIG_SPARSEMEM_STATIC=y | 278 | CONFIG_SPARSEMEM_STATIC=y |
| 278 | # CONFIG_MEMORY_HOTPLUG is not set | 279 | # CONFIG_MEMORY_HOTPLUG is not set |
| 279 | CONFIG_SPLIT_PTLOCK_CPUS=4 | 280 | CONFIG_SPLIT_PTLOCK_CPUS=999999 |
| 280 | CONFIG_MIGRATION=y | 281 | CONFIG_MIGRATION=y |
| 281 | # CONFIG_PHYS_ADDR_T_64BIT is not set | 282 | # CONFIG_PHYS_ADDR_T_64BIT is not set |
| 282 | CONFIG_ZONE_DMA_FLAG=0 | 283 | CONFIG_ZONE_DMA_FLAG=0 |
| @@ -298,7 +299,7 @@ CONFIG_CPU_LITTLE_ENDIAN=y | |||
| 298 | # CONFIG_CPU_BIG_ENDIAN is not set | 299 | # CONFIG_CPU_BIG_ENDIAN is not set |
| 299 | CONFIG_SH_FPU=y | 300 | CONFIG_SH_FPU=y |
| 300 | CONFIG_SH_STORE_QUEUES=y | 301 | CONFIG_SH_STORE_QUEUES=y |
| 301 | # CONFIG_SPECULATIVE_EXECUTION is not set | 302 | CONFIG_SPECULATIVE_EXECUTION=y |
| 302 | CONFIG_CPU_HAS_INTEVT=y | 303 | CONFIG_CPU_HAS_INTEVT=y |
| 303 | CONFIG_CPU_HAS_SR_RB=y | 304 | CONFIG_CPU_HAS_SR_RB=y |
| 304 | CONFIG_CPU_HAS_FPU=y | 305 | CONFIG_CPU_HAS_FPU=y |
| @@ -308,7 +309,7 @@ CONFIG_CPU_HAS_FPU=y | |||
| 308 | # | 309 | # |
| 309 | # CONFIG_SH_HIGHLANDER is not set | 310 | # CONFIG_SH_HIGHLANDER is not set |
| 310 | CONFIG_SH_SH7785LCR=y | 311 | CONFIG_SH_SH7785LCR=y |
| 311 | CONFIG_SH_SH7785LCR_29BIT_PHYSMAPS=y | 312 | # CONFIG_SH_SH7785LCR_PT is not set |
| 312 | 313 | ||
| 313 | # | 314 | # |
| 314 | # Timer and clock configuration | 315 | # Timer and clock configuration |
| @@ -371,7 +372,7 @@ CONFIG_SECCOMP=y | |||
| 371 | # CONFIG_PREEMPT_VOLUNTARY is not set | 372 | # CONFIG_PREEMPT_VOLUNTARY is not set |
| 372 | CONFIG_PREEMPT=y | 373 | CONFIG_PREEMPT=y |
| 373 | CONFIG_GUSA=y | 374 | CONFIG_GUSA=y |
| 374 | # CONFIG_INTC_USERIMASK is not set | 375 | CONFIG_INTC_USERIMASK=y |
| 375 | 376 | ||
| 376 | # | 377 | # |
| 377 | # Boot options | 378 | # Boot options |
| @@ -389,6 +390,7 @@ CONFIG_PCI=y | |||
| 389 | CONFIG_PCI_DOMAINS=y | 390 | CONFIG_PCI_DOMAINS=y |
| 390 | # CONFIG_PCIEPORTBUS is not set | 391 | # CONFIG_PCIEPORTBUS is not set |
| 391 | # CONFIG_ARCH_SUPPORTS_MSI is not set | 392 | # CONFIG_ARCH_SUPPORTS_MSI is not set |
| 393 | CONFIG_PCI_DEBUG=y | ||
| 392 | # CONFIG_PCI_STUB is not set | 394 | # CONFIG_PCI_STUB is not set |
| 393 | # CONFIG_PCI_IOV is not set | 395 | # CONFIG_PCI_IOV is not set |
| 394 | # CONFIG_PCCARD is not set | 396 | # CONFIG_PCCARD is not set |
| @@ -465,6 +467,7 @@ CONFIG_DEFAULT_TCP_CONG="cubic" | |||
| 465 | # CONFIG_RDS is not set | 467 | # CONFIG_RDS is not set |
| 466 | # CONFIG_TIPC is not set | 468 | # CONFIG_TIPC is not set |
| 467 | # CONFIG_ATM is not set | 469 | # CONFIG_ATM is not set |
| 470 | # CONFIG_L2TP is not set | ||
| 468 | # CONFIG_BRIDGE is not set | 471 | # CONFIG_BRIDGE is not set |
| 469 | # CONFIG_NET_DSA is not set | 472 | # CONFIG_NET_DSA is not set |
| 470 | # CONFIG_VLAN_8021Q is not set | 473 | # CONFIG_VLAN_8021Q is not set |
| @@ -485,8 +488,6 @@ CONFIG_DEFAULT_TCP_CONG="cubic" | |||
| 485 | # Network testing | 488 | # Network testing |
| 486 | # | 489 | # |
| 487 | # CONFIG_NET_PKTGEN is not set | 490 | # CONFIG_NET_PKTGEN is not set |
| 488 | # CONFIG_NET_TCPPROBE is not set | ||
| 489 | # CONFIG_NET_DROP_MONITOR is not set | ||
| 490 | # CONFIG_HAMRADIO is not set | 491 | # CONFIG_HAMRADIO is not set |
| 491 | # CONFIG_CAN is not set | 492 | # CONFIG_CAN is not set |
| 492 | # CONFIG_IRDA is not set | 493 | # CONFIG_IRDA is not set |
| @@ -499,11 +500,20 @@ CONFIG_WIRELESS=y | |||
| 499 | # | 500 | # |
| 500 | # CFG80211 needs to be enabled for MAC80211 | 501 | # CFG80211 needs to be enabled for MAC80211 |
| 501 | # | 502 | # |
| 503 | |||
| 504 | # | ||
| 505 | # Some wireless drivers require a rate control algorithm | ||
| 506 | # | ||
| 502 | # CONFIG_WIMAX is not set | 507 | # CONFIG_WIMAX is not set |
| 503 | # CONFIG_RFKILL is not set | 508 | # CONFIG_RFKILL is not set |
| 504 | # CONFIG_NET_9P is not set | 509 | # CONFIG_NET_9P is not set |
| 505 | 510 | ||
| 506 | # | 511 | # |
| 512 | # CAIF Support | ||
| 513 | # | ||
| 514 | # CONFIG_CAIF is not set | ||
| 515 | |||
| 516 | # | ||
| 507 | # Device Drivers | 517 | # Device Drivers |
| 508 | # | 518 | # |
| 509 | 519 | ||
| @@ -514,7 +524,11 @@ CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" | |||
| 514 | # CONFIG_DEVTMPFS is not set | 524 | # CONFIG_DEVTMPFS is not set |
| 515 | CONFIG_STANDALONE=y | 525 | CONFIG_STANDALONE=y |
| 516 | CONFIG_PREVENT_FIRMWARE_BUILD=y | 526 | CONFIG_PREVENT_FIRMWARE_BUILD=y |
| 517 | # CONFIG_FW_LOADER is not set | 527 | CONFIG_FW_LOADER=y |
| 528 | CONFIG_FIRMWARE_IN_KERNEL=y | ||
| 529 | CONFIG_EXTRA_FIRMWARE="" | ||
| 530 | # CONFIG_DEBUG_DRIVER is not set | ||
| 531 | # CONFIG_DEBUG_DEVRES is not set | ||
| 518 | # CONFIG_SYS_HYPERVISOR is not set | 532 | # CONFIG_SYS_HYPERVISOR is not set |
| 519 | # CONFIG_CONNECTOR is not set | 533 | # CONFIG_CONNECTOR is not set |
| 520 | CONFIG_MTD=y | 534 | CONFIG_MTD=y |
| @@ -537,6 +551,7 @@ CONFIG_MTD_BLOCK=y | |||
| 537 | # CONFIG_INFTL is not set | 551 | # CONFIG_INFTL is not set |
| 538 | # CONFIG_RFD_FTL is not set | 552 | # CONFIG_RFD_FTL is not set |
| 539 | # CONFIG_SSFDC is not set | 553 | # CONFIG_SSFDC is not set |
| 554 | # CONFIG_SM_FTL is not set | ||
| 540 | # CONFIG_MTD_OOPS is not set | 555 | # CONFIG_MTD_OOPS is not set |
| 541 | 556 | ||
| 542 | # | 557 | # |
| @@ -668,7 +683,9 @@ CONFIG_ATA=y | |||
| 668 | CONFIG_ATA_VERBOSE_ERROR=y | 683 | CONFIG_ATA_VERBOSE_ERROR=y |
| 669 | CONFIG_SATA_PMP=y | 684 | CONFIG_SATA_PMP=y |
| 670 | # CONFIG_SATA_AHCI is not set | 685 | # CONFIG_SATA_AHCI is not set |
| 686 | # CONFIG_SATA_AHCI_PLATFORM is not set | ||
| 671 | # CONFIG_SATA_SIL24 is not set | 687 | # CONFIG_SATA_SIL24 is not set |
| 688 | # CONFIG_SATA_INIC162X is not set | ||
| 672 | CONFIG_ATA_SFF=y | 689 | CONFIG_ATA_SFF=y |
| 673 | # CONFIG_SATA_SVW is not set | 690 | # CONFIG_SATA_SVW is not set |
| 674 | # CONFIG_ATA_PIIX is not set | 691 | # CONFIG_ATA_PIIX is not set |
| @@ -683,7 +700,6 @@ CONFIG_SATA_SIL=y | |||
| 683 | # CONFIG_SATA_ULI is not set | 700 | # CONFIG_SATA_ULI is not set |
| 684 | # CONFIG_SATA_VIA is not set | 701 | # CONFIG_SATA_VIA is not set |
| 685 | # CONFIG_SATA_VITESSE is not set | 702 | # CONFIG_SATA_VITESSE is not set |
| 686 | # CONFIG_SATA_INIC162X is not set | ||
| 687 | # CONFIG_PATA_ALI is not set | 703 | # CONFIG_PATA_ALI is not set |
| 688 | # CONFIG_PATA_AMD is not set | 704 | # CONFIG_PATA_AMD is not set |
| 689 | # CONFIG_PATA_ARTOP is not set | 705 | # CONFIG_PATA_ARTOP is not set |
| @@ -753,8 +769,36 @@ CONFIG_NETDEVICES=y | |||
| 753 | # CONFIG_TUN is not set | 769 | # CONFIG_TUN is not set |
| 754 | # CONFIG_VETH is not set | 770 | # CONFIG_VETH is not set |
| 755 | # CONFIG_ARCNET is not set | 771 | # CONFIG_ARCNET is not set |
| 756 | # CONFIG_NET_ETHERNET is not set | 772 | # CONFIG_PHYLIB is not set |
| 773 | CONFIG_NET_ETHERNET=y | ||
| 757 | CONFIG_MII=y | 774 | CONFIG_MII=y |
| 775 | # CONFIG_AX88796 is not set | ||
| 776 | # CONFIG_STNIC is not set | ||
| 777 | # CONFIG_HAPPYMEAL is not set | ||
| 778 | # CONFIG_SUNGEM is not set | ||
| 779 | # CONFIG_CASSINI is not set | ||
| 780 | CONFIG_NET_VENDOR_3COM=y | ||
| 781 | CONFIG_VORTEX=y | ||
| 782 | # CONFIG_TYPHOON is not set | ||
| 783 | # CONFIG_SMC91X is not set | ||
| 784 | # CONFIG_ETHOC is not set | ||
| 785 | # CONFIG_SMC911X is not set | ||
| 786 | # CONFIG_SMSC911X is not set | ||
| 787 | # CONFIG_DNET is not set | ||
| 788 | # CONFIG_NET_TULIP is not set | ||
| 789 | # CONFIG_HP100 is not set | ||
| 790 | # CONFIG_IBM_NEW_EMAC_ZMII is not set | ||
| 791 | # CONFIG_IBM_NEW_EMAC_RGMII is not set | ||
| 792 | # CONFIG_IBM_NEW_EMAC_TAH is not set | ||
| 793 | # CONFIG_IBM_NEW_EMAC_EMAC4 is not set | ||
| 794 | # CONFIG_IBM_NEW_EMAC_NO_FLOW_CTRL is not set | ||
| 795 | # CONFIG_IBM_NEW_EMAC_MAL_CLR_ICINTSTAT is not set | ||
| 796 | # CONFIG_IBM_NEW_EMAC_MAL_COMMON_ERR is not set | ||
| 797 | # CONFIG_NET_PCI is not set | ||
| 798 | # CONFIG_B44 is not set | ||
| 799 | # CONFIG_KS8842 is not set | ||
| 800 | # CONFIG_KS8851_MLL is not set | ||
| 801 | # CONFIG_ATL2 is not set | ||
| 758 | CONFIG_NETDEV_1000=y | 802 | CONFIG_NETDEV_1000=y |
| 759 | # CONFIG_ACENIC is not set | 803 | # CONFIG_ACENIC is not set |
| 760 | # CONFIG_DL2K is not set | 804 | # CONFIG_DL2K is not set |
| @@ -836,6 +880,7 @@ CONFIG_INPUT_KEYBOARD=y | |||
| 836 | CONFIG_KEYBOARD_ATKBD=y | 880 | CONFIG_KEYBOARD_ATKBD=y |
| 837 | # CONFIG_QT2160 is not set | 881 | # CONFIG_QT2160 is not set |
| 838 | # CONFIG_KEYBOARD_LKKBD is not set | 882 | # CONFIG_KEYBOARD_LKKBD is not set |
| 883 | # CONFIG_KEYBOARD_TCA6416 is not set | ||
| 839 | # CONFIG_KEYBOARD_MAX7359 is not set | 884 | # CONFIG_KEYBOARD_MAX7359 is not set |
| 840 | # CONFIG_KEYBOARD_NEWTON is not set | 885 | # CONFIG_KEYBOARD_NEWTON is not set |
| 841 | # CONFIG_KEYBOARD_OPENCORES is not set | 886 | # CONFIG_KEYBOARD_OPENCORES is not set |
| @@ -884,6 +929,7 @@ CONFIG_HW_CONSOLE=y | |||
| 884 | CONFIG_VT_HW_CONSOLE_BINDING=y | 929 | CONFIG_VT_HW_CONSOLE_BINDING=y |
| 885 | # CONFIG_DEVKMEM is not set | 930 | # CONFIG_DEVKMEM is not set |
| 886 | # CONFIG_SERIAL_NONSTANDARD is not set | 931 | # CONFIG_SERIAL_NONSTANDARD is not set |
| 932 | # CONFIG_N_GSM is not set | ||
| 887 | # CONFIG_NOZOMI is not set | 933 | # CONFIG_NOZOMI is not set |
| 888 | 934 | ||
| 889 | # | 935 | # |
| @@ -901,6 +947,8 @@ CONFIG_SERIAL_CORE=y | |||
| 901 | CONFIG_SERIAL_CORE_CONSOLE=y | 947 | CONFIG_SERIAL_CORE_CONSOLE=y |
| 902 | # CONFIG_SERIAL_JSM is not set | 948 | # CONFIG_SERIAL_JSM is not set |
| 903 | # CONFIG_SERIAL_TIMBERDALE is not set | 949 | # CONFIG_SERIAL_TIMBERDALE is not set |
| 950 | # CONFIG_SERIAL_ALTERA_JTAGUART is not set | ||
| 951 | # CONFIG_SERIAL_ALTERA_UART is not set | ||
| 904 | CONFIG_UNIX98_PTYS=y | 952 | CONFIG_UNIX98_PTYS=y |
| 905 | CONFIG_DEVPTS_MULTIPLE_INSTANCES=y | 953 | CONFIG_DEVPTS_MULTIPLE_INSTANCES=y |
| 906 | # CONFIG_LEGACY_PTYS is not set | 954 | # CONFIG_LEGACY_PTYS is not set |
| @@ -1071,7 +1119,7 @@ CONFIG_FB_CFB_IMAGEBLIT=y | |||
| 1071 | # CONFIG_FB_SIS is not set | 1119 | # CONFIG_FB_SIS is not set |
| 1072 | # CONFIG_FB_VIA is not set | 1120 | # CONFIG_FB_VIA is not set |
| 1073 | # CONFIG_FB_NEOMAGIC is not set | 1121 | # CONFIG_FB_NEOMAGIC is not set |
| 1074 | # CONFIG_FB_KYRO is not set | 1122 | CONFIG_FB_KYRO=y |
| 1075 | # CONFIG_FB_3DFX is not set | 1123 | # CONFIG_FB_3DFX is not set |
| 1076 | # CONFIG_FB_VOODOO1 is not set | 1124 | # CONFIG_FB_VOODOO1 is not set |
| 1077 | # CONFIG_FB_VT8623 is not set | 1125 | # CONFIG_FB_VT8623 is not set |
| @@ -1097,15 +1145,15 @@ CONFIG_FB_SM501=y | |||
| 1097 | # | 1145 | # |
| 1098 | CONFIG_DUMMY_CONSOLE=y | 1146 | CONFIG_DUMMY_CONSOLE=y |
| 1099 | CONFIG_FRAMEBUFFER_CONSOLE=y | 1147 | CONFIG_FRAMEBUFFER_CONSOLE=y |
| 1100 | # CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY is not set | 1148 | CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY=y |
| 1101 | # CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set | 1149 | # CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set |
| 1102 | # CONFIG_FONTS is not set | 1150 | # CONFIG_FONTS is not set |
| 1103 | CONFIG_FONT_8x8=y | 1151 | CONFIG_FONT_8x8=y |
| 1104 | CONFIG_FONT_8x16=y | 1152 | CONFIG_FONT_8x16=y |
| 1105 | CONFIG_LOGO=y | 1153 | CONFIG_LOGO=y |
| 1106 | # CONFIG_LOGO_LINUX_MONO is not set | 1154 | CONFIG_LOGO_LINUX_MONO=y |
| 1107 | # CONFIG_LOGO_LINUX_VGA16 is not set | 1155 | CONFIG_LOGO_LINUX_VGA16=y |
| 1108 | # CONFIG_LOGO_LINUX_CLUT224 is not set | 1156 | CONFIG_LOGO_LINUX_CLUT224=y |
| 1109 | CONFIG_LOGO_SUPERH_MONO=y | 1157 | CONFIG_LOGO_SUPERH_MONO=y |
| 1110 | CONFIG_LOGO_SUPERH_VGA16=y | 1158 | CONFIG_LOGO_SUPERH_VGA16=y |
| 1111 | CONFIG_LOGO_SUPERH_CLUT224=y | 1159 | CONFIG_LOGO_SUPERH_CLUT224=y |
| @@ -1129,15 +1177,18 @@ CONFIG_SND_SEQ_HRTIMER_DEFAULT=y | |||
| 1129 | CONFIG_SND_DYNAMIC_MINORS=y | 1177 | CONFIG_SND_DYNAMIC_MINORS=y |
| 1130 | # CONFIG_SND_SUPPORT_OLD_API is not set | 1178 | # CONFIG_SND_SUPPORT_OLD_API is not set |
| 1131 | # CONFIG_SND_VERBOSE_PROCFS is not set | 1179 | # CONFIG_SND_VERBOSE_PROCFS is not set |
| 1132 | # CONFIG_SND_VERBOSE_PRINTK is not set | 1180 | CONFIG_SND_VERBOSE_PRINTK=y |
| 1133 | # CONFIG_SND_DEBUG is not set | 1181 | CONFIG_SND_DEBUG=y |
| 1182 | CONFIG_SND_DEBUG_VERBOSE=y | ||
| 1183 | CONFIG_SND_VMASTER=y | ||
| 1134 | CONFIG_SND_RAWMIDI_SEQ=y | 1184 | CONFIG_SND_RAWMIDI_SEQ=y |
| 1135 | CONFIG_SND_OPL3_LIB_SEQ=y | 1185 | CONFIG_SND_OPL3_LIB_SEQ=y |
| 1136 | # CONFIG_SND_OPL4_LIB_SEQ is not set | 1186 | # CONFIG_SND_OPL4_LIB_SEQ is not set |
| 1137 | # CONFIG_SND_SBAWE_SEQ is not set | 1187 | # CONFIG_SND_SBAWE_SEQ is not set |
| 1138 | # CONFIG_SND_EMU10K1_SEQ is not set | 1188 | CONFIG_SND_EMU10K1_SEQ=y |
| 1139 | CONFIG_SND_MPU401_UART=y | 1189 | CONFIG_SND_MPU401_UART=y |
| 1140 | CONFIG_SND_OPL3_LIB=y | 1190 | CONFIG_SND_OPL3_LIB=y |
| 1191 | CONFIG_SND_AC97_CODEC=y | ||
| 1141 | # CONFIG_SND_DRIVERS is not set | 1192 | # CONFIG_SND_DRIVERS is not set |
| 1142 | CONFIG_SND_PCI=y | 1193 | CONFIG_SND_PCI=y |
| 1143 | # CONFIG_SND_AD1889 is not set | 1194 | # CONFIG_SND_AD1889 is not set |
| @@ -1172,7 +1223,7 @@ CONFIG_SND_CMIPCI=y | |||
| 1172 | # CONFIG_SND_INDIGODJ is not set | 1223 | # CONFIG_SND_INDIGODJ is not set |
| 1173 | # CONFIG_SND_INDIGOIOX is not set | 1224 | # CONFIG_SND_INDIGOIOX is not set |
| 1174 | # CONFIG_SND_INDIGODJX is not set | 1225 | # CONFIG_SND_INDIGODJX is not set |
| 1175 | # CONFIG_SND_EMU10K1 is not set | 1226 | CONFIG_SND_EMU10K1=y |
| 1176 | # CONFIG_SND_EMU10K1X is not set | 1227 | # CONFIG_SND_EMU10K1X is not set |
| 1177 | # CONFIG_SND_ENS1370 is not set | 1228 | # CONFIG_SND_ENS1370 is not set |
| 1178 | # CONFIG_SND_ENS1371 is not set | 1229 | # CONFIG_SND_ENS1371 is not set |
| @@ -1211,6 +1262,7 @@ CONFIG_SND_USB=y | |||
| 1211 | # CONFIG_SND_USB_CAIAQ is not set | 1262 | # CONFIG_SND_USB_CAIAQ is not set |
| 1212 | # CONFIG_SND_SOC is not set | 1263 | # CONFIG_SND_SOC is not set |
| 1213 | # CONFIG_SOUND_PRIME is not set | 1264 | # CONFIG_SOUND_PRIME is not set |
| 1265 | CONFIG_AC97_BUS=y | ||
| 1214 | CONFIG_HID_SUPPORT=y | 1266 | CONFIG_HID_SUPPORT=y |
| 1215 | CONFIG_HID=y | 1267 | CONFIG_HID=y |
| 1216 | # CONFIG_HIDRAW is not set | 1268 | # CONFIG_HIDRAW is not set |
| @@ -1226,44 +1278,42 @@ CONFIG_USB_HID=y | |||
| 1226 | # Special HID drivers | 1278 | # Special HID drivers |
| 1227 | # | 1279 | # |
| 1228 | # CONFIG_HID_3M_PCT is not set | 1280 | # CONFIG_HID_3M_PCT is not set |
| 1229 | CONFIG_HID_A4TECH=m | 1281 | # CONFIG_HID_A4TECH is not set |
| 1230 | CONFIG_HID_APPLE=m | 1282 | # CONFIG_HID_APPLE is not set |
| 1231 | CONFIG_HID_BELKIN=m | 1283 | # CONFIG_HID_BELKIN is not set |
| 1232 | CONFIG_HID_CHERRY=m | 1284 | # CONFIG_HID_CANDO is not set |
| 1233 | CONFIG_HID_CHICONY=m | 1285 | # CONFIG_HID_CHERRY is not set |
| 1234 | CONFIG_HID_CYPRESS=m | 1286 | # CONFIG_HID_CHICONY is not set |
| 1235 | CONFIG_HID_DRAGONRISE=m | 1287 | # CONFIG_HID_PRODIKEYS is not set |
| 1236 | # CONFIG_DRAGONRISE_FF is not set | 1288 | # CONFIG_HID_CYPRESS is not set |
| 1237 | CONFIG_HID_EZKEY=m | 1289 | # CONFIG_HID_DRAGONRISE is not set |
| 1238 | CONFIG_HID_KYE=m | 1290 | # CONFIG_HID_EGALAX is not set |
| 1239 | CONFIG_HID_GYRATION=m | 1291 | # CONFIG_HID_EZKEY is not set |
| 1240 | CONFIG_HID_TWINHAN=m | 1292 | # CONFIG_HID_KYE is not set |
| 1241 | CONFIG_HID_KENSINGTON=m | 1293 | # CONFIG_HID_GYRATION is not set |
| 1242 | CONFIG_HID_LOGITECH=m | 1294 | # CONFIG_HID_TWINHAN is not set |
| 1243 | # CONFIG_LOGITECH_FF is not set | 1295 | # CONFIG_HID_KENSINGTON is not set |
| 1244 | # CONFIG_LOGIRUMBLEPAD2_FF is not set | 1296 | # CONFIG_HID_LOGITECH is not set |
| 1245 | # CONFIG_LOGIG940_FF is not set | 1297 | # CONFIG_HID_MICROSOFT is not set |
| 1246 | CONFIG_HID_MICROSOFT=m | ||
| 1247 | # CONFIG_HID_MOSART is not set | 1298 | # CONFIG_HID_MOSART is not set |
| 1248 | CONFIG_HID_MONTEREY=m | 1299 | # CONFIG_HID_MONTEREY is not set |
| 1249 | CONFIG_HID_NTRIG=m | 1300 | # CONFIG_HID_NTRIG is not set |
| 1250 | # CONFIG_HID_ORTEK is not set | 1301 | # CONFIG_HID_ORTEK is not set |
| 1251 | CONFIG_HID_PANTHERLORD=m | 1302 | # CONFIG_HID_PANTHERLORD is not set |
| 1252 | # CONFIG_PANTHERLORD_FF is not set | 1303 | # CONFIG_HID_PETALYNX is not set |
| 1253 | CONFIG_HID_PETALYNX=m | 1304 | # CONFIG_HID_PICOLCD is not set |
| 1254 | # CONFIG_HID_QUANTA is not set | 1305 | # CONFIG_HID_QUANTA is not set |
| 1255 | CONFIG_HID_SAMSUNG=m | 1306 | # CONFIG_HID_ROCCAT_KONE is not set |
| 1256 | CONFIG_HID_SONY=m | 1307 | # CONFIG_HID_SAMSUNG is not set |
| 1308 | # CONFIG_HID_SONY is not set | ||
| 1257 | # CONFIG_HID_STANTUM is not set | 1309 | # CONFIG_HID_STANTUM is not set |
| 1258 | CONFIG_HID_SUNPLUS=m | 1310 | # CONFIG_HID_SUNPLUS is not set |
| 1259 | CONFIG_HID_GREENASIA=m | 1311 | # CONFIG_HID_GREENASIA is not set |
| 1260 | # CONFIG_GREENASIA_FF is not set | 1312 | # CONFIG_HID_SMARTJOYPLUS is not set |
| 1261 | CONFIG_HID_SMARTJOYPLUS=m | 1313 | # CONFIG_HID_TOPSEED is not set |
| 1262 | # CONFIG_SMARTJOYPLUS_FF is not set | ||
| 1263 | CONFIG_HID_TOPSEED=m | ||
| 1264 | # CONFIG_HID_THRUSTMASTER is not set | 1314 | # CONFIG_HID_THRUSTMASTER is not set |
| 1265 | CONFIG_HID_ZEROPLUS=m | 1315 | # CONFIG_HID_ZEROPLUS is not set |
| 1266 | # CONFIG_ZEROPLUS_FF is not set | 1316 | # CONFIG_HID_ZYDACRON is not set |
| 1267 | CONFIG_USB_SUPPORT=y | 1317 | CONFIG_USB_SUPPORT=y |
| 1268 | CONFIG_USB_ARCH_HAS_HCD=y | 1318 | CONFIG_USB_ARCH_HAS_HCD=y |
| 1269 | CONFIG_USB_ARCH_HAS_OHCI=y | 1319 | CONFIG_USB_ARCH_HAS_OHCI=y |
| @@ -1276,9 +1326,8 @@ CONFIG_USB=y | |||
| 1276 | # Miscellaneous USB options | 1326 | # Miscellaneous USB options |
| 1277 | # | 1327 | # |
| 1278 | # CONFIG_USB_DEVICEFS is not set | 1328 | # CONFIG_USB_DEVICEFS is not set |
| 1279 | CONFIG_USB_DEVICE_CLASS=y | 1329 | # CONFIG_USB_DEVICE_CLASS is not set |
| 1280 | # CONFIG_USB_DYNAMIC_MINORS is not set | 1330 | # CONFIG_USB_DYNAMIC_MINORS is not set |
| 1281 | # CONFIG_USB_OTG is not set | ||
| 1282 | # CONFIG_USB_OTG_WHITELIST is not set | 1331 | # CONFIG_USB_OTG_WHITELIST is not set |
| 1283 | # CONFIG_USB_OTG_BLACKLIST_HUB is not set | 1332 | # CONFIG_USB_OTG_BLACKLIST_HUB is not set |
| 1284 | # CONFIG_USB_MON is not set | 1333 | # CONFIG_USB_MON is not set |
| @@ -1290,9 +1339,7 @@ CONFIG_USB_DEVICE_CLASS=y | |||
| 1290 | # | 1339 | # |
| 1291 | # CONFIG_USB_C67X00_HCD is not set | 1340 | # CONFIG_USB_C67X00_HCD is not set |
| 1292 | # CONFIG_USB_XHCI_HCD is not set | 1341 | # CONFIG_USB_XHCI_HCD is not set |
| 1293 | CONFIG_USB_EHCI_HCD=m | 1342 | # CONFIG_USB_EHCI_HCD is not set |
| 1294 | # CONFIG_USB_EHCI_ROOT_HUB_TT is not set | ||
| 1295 | # CONFIG_USB_EHCI_TT_NEWSCHED is not set | ||
| 1296 | # CONFIG_USB_OXU210HP_HCD is not set | 1343 | # CONFIG_USB_OXU210HP_HCD is not set |
| 1297 | # CONFIG_USB_ISP116X_HCD is not set | 1344 | # CONFIG_USB_ISP116X_HCD is not set |
| 1298 | # CONFIG_USB_ISP1760_HCD is not set | 1345 | # CONFIG_USB_ISP1760_HCD is not set |
| @@ -1361,7 +1408,6 @@ CONFIG_USB_STORAGE=y | |||
| 1361 | # CONFIG_USB_IDMOUSE is not set | 1408 | # CONFIG_USB_IDMOUSE is not set |
| 1362 | # CONFIG_USB_FTDI_ELAN is not set | 1409 | # CONFIG_USB_FTDI_ELAN is not set |
| 1363 | # CONFIG_USB_APPLEDISPLAY is not set | 1410 | # CONFIG_USB_APPLEDISPLAY is not set |
| 1364 | # CONFIG_USB_SISUSBVGA is not set | ||
| 1365 | # CONFIG_USB_LD is not set | 1411 | # CONFIG_USB_LD is not set |
| 1366 | # CONFIG_USB_TRANCEVIBRATOR is not set | 1412 | # CONFIG_USB_TRANCEVIBRATOR is not set |
| 1367 | # CONFIG_USB_IOWARRIOR is not set | 1413 | # CONFIG_USB_IOWARRIOR is not set |
| @@ -1464,6 +1510,7 @@ CONFIG_DMADEVICES=y | |||
| 1464 | # | 1510 | # |
| 1465 | # DMA Devices | 1511 | # DMA Devices |
| 1466 | # | 1512 | # |
| 1513 | # CONFIG_TIMB_DMA is not set | ||
| 1467 | # CONFIG_AUXDISPLAY is not set | 1514 | # CONFIG_AUXDISPLAY is not set |
| 1468 | CONFIG_UIO=m | 1515 | CONFIG_UIO=m |
| 1469 | # CONFIG_UIO_CIF is not set | 1516 | # CONFIG_UIO_CIF is not set |
| @@ -1473,10 +1520,6 @@ CONFIG_UIO=m | |||
| 1473 | # CONFIG_UIO_SERCOS3 is not set | 1520 | # CONFIG_UIO_SERCOS3 is not set |
| 1474 | # CONFIG_UIO_PCI_GENERIC is not set | 1521 | # CONFIG_UIO_PCI_GENERIC is not set |
| 1475 | # CONFIG_UIO_NETX is not set | 1522 | # CONFIG_UIO_NETX is not set |
| 1476 | |||
| 1477 | # | ||
| 1478 | # TI VLYNQ | ||
| 1479 | # | ||
| 1480 | # CONFIG_STAGING is not set | 1523 | # CONFIG_STAGING is not set |
| 1481 | 1524 | ||
| 1482 | # | 1525 | # |
| @@ -1653,63 +1696,75 @@ CONFIG_MAGIC_SYSRQ=y | |||
| 1653 | # CONFIG_UNUSED_SYMBOLS is not set | 1696 | # CONFIG_UNUSED_SYMBOLS is not set |
| 1654 | CONFIG_DEBUG_FS=y | 1697 | CONFIG_DEBUG_FS=y |
| 1655 | # CONFIG_HEADERS_CHECK is not set | 1698 | # CONFIG_HEADERS_CHECK is not set |
| 1656 | # CONFIG_DEBUG_KERNEL is not set | 1699 | CONFIG_DEBUG_KERNEL=y |
| 1700 | # CONFIG_DEBUG_SHIRQ is not set | ||
| 1701 | CONFIG_DETECT_SOFTLOCKUP=y | ||
| 1702 | # CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC is not set | ||
| 1703 | CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC_VALUE=0 | ||
| 1704 | CONFIG_DETECT_HUNG_TASK=y | ||
| 1705 | # CONFIG_BOOTPARAM_HUNG_TASK_PANIC is not set | ||
| 1706 | CONFIG_BOOTPARAM_HUNG_TASK_PANIC_VALUE=0 | ||
| 1657 | CONFIG_SCHED_DEBUG=y | 1707 | CONFIG_SCHED_DEBUG=y |
| 1658 | CONFIG_SCHEDSTATS=y | 1708 | CONFIG_SCHEDSTATS=y |
| 1659 | CONFIG_TRACE_IRQFLAGS=y | 1709 | # CONFIG_TIMER_STATS is not set |
| 1710 | # CONFIG_DEBUG_OBJECTS is not set | ||
| 1711 | # CONFIG_DEBUG_SLAB is not set | ||
| 1712 | CONFIG_DEBUG_KMEMLEAK=y | ||
| 1713 | CONFIG_DEBUG_KMEMLEAK_EARLY_LOG_SIZE=400 | ||
| 1714 | # CONFIG_DEBUG_KMEMLEAK_TEST is not set | ||
| 1715 | CONFIG_DEBUG_PREEMPT=y | ||
| 1716 | # CONFIG_DEBUG_RT_MUTEXES is not set | ||
| 1717 | # CONFIG_RT_MUTEX_TESTER is not set | ||
| 1718 | CONFIG_DEBUG_SPINLOCK=y | ||
| 1719 | CONFIG_DEBUG_MUTEXES=y | ||
| 1720 | # CONFIG_DEBUG_LOCK_ALLOC is not set | ||
| 1721 | # CONFIG_PROVE_LOCKING is not set | ||
| 1722 | # CONFIG_LOCK_STAT is not set | ||
| 1723 | CONFIG_DEBUG_SPINLOCK_SLEEP=y | ||
| 1724 | # CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set | ||
| 1660 | CONFIG_STACKTRACE=y | 1725 | CONFIG_STACKTRACE=y |
| 1726 | # CONFIG_DEBUG_KOBJECT is not set | ||
| 1661 | CONFIG_DEBUG_BUGVERBOSE=y | 1727 | CONFIG_DEBUG_BUGVERBOSE=y |
| 1728 | CONFIG_DEBUG_INFO=y | ||
| 1729 | # CONFIG_DEBUG_VM is not set | ||
| 1730 | # CONFIG_DEBUG_WRITECOUNT is not set | ||
| 1662 | # CONFIG_DEBUG_MEMORY_INIT is not set | 1731 | # CONFIG_DEBUG_MEMORY_INIT is not set |
| 1732 | # CONFIG_DEBUG_LIST is not set | ||
| 1733 | # CONFIG_DEBUG_SG is not set | ||
| 1734 | # CONFIG_DEBUG_NOTIFIERS is not set | ||
| 1735 | # CONFIG_DEBUG_CREDENTIALS is not set | ||
| 1663 | CONFIG_FRAME_POINTER=y | 1736 | CONFIG_FRAME_POINTER=y |
| 1737 | # CONFIG_RCU_TORTURE_TEST is not set | ||
| 1664 | # CONFIG_RCU_CPU_STALL_DETECTOR is not set | 1738 | # CONFIG_RCU_CPU_STALL_DETECTOR is not set |
| 1739 | # CONFIG_BACKTRACE_SELF_TEST is not set | ||
| 1740 | # CONFIG_DEBUG_BLOCK_EXT_DEVT is not set | ||
| 1741 | # CONFIG_DEBUG_FORCE_WEAK_PER_CPU is not set | ||
| 1665 | # CONFIG_LKDTM is not set | 1742 | # CONFIG_LKDTM is not set |
| 1743 | # CONFIG_FAULT_INJECTION is not set | ||
| 1666 | CONFIG_LATENCYTOP=y | 1744 | CONFIG_LATENCYTOP=y |
| 1667 | CONFIG_SYSCTL_SYSCALL_CHECK=y | 1745 | CONFIG_SYSCTL_SYSCALL_CHECK=y |
| 1668 | CONFIG_NOP_TRACER=y | 1746 | # CONFIG_PAGE_POISONING is not set |
| 1669 | CONFIG_HAVE_FTRACE_NMI_ENTER=y | ||
| 1670 | CONFIG_HAVE_FUNCTION_TRACER=y | 1747 | CONFIG_HAVE_FUNCTION_TRACER=y |
| 1671 | CONFIG_HAVE_FUNCTION_GRAPH_TRACER=y | 1748 | CONFIG_HAVE_FUNCTION_GRAPH_TRACER=y |
| 1672 | CONFIG_HAVE_FUNCTION_TRACE_MCOUNT_TEST=y | 1749 | CONFIG_HAVE_FUNCTION_TRACE_MCOUNT_TEST=y |
| 1673 | CONFIG_HAVE_DYNAMIC_FTRACE=y | 1750 | CONFIG_HAVE_DYNAMIC_FTRACE=y |
| 1674 | CONFIG_HAVE_FTRACE_MCOUNT_RECORD=y | 1751 | CONFIG_HAVE_FTRACE_MCOUNT_RECORD=y |
| 1675 | CONFIG_HAVE_SYSCALL_TRACEPOINTS=y | 1752 | CONFIG_HAVE_SYSCALL_TRACEPOINTS=y |
| 1676 | CONFIG_TRACER_MAX_TRACE=y | ||
| 1677 | CONFIG_RING_BUFFER=y | ||
| 1678 | CONFIG_FTRACE_NMI_ENTER=y | ||
| 1679 | CONFIG_EVENT_TRACING=y | ||
| 1680 | CONFIG_CONTEXT_SWITCH_TRACER=y | ||
| 1681 | CONFIG_RING_BUFFER_ALLOW_SWAP=y | ||
| 1682 | CONFIG_TRACING=y | ||
| 1683 | CONFIG_GENERIC_TRACER=y | ||
| 1684 | CONFIG_TRACING_SUPPORT=y | 1753 | CONFIG_TRACING_SUPPORT=y |
| 1685 | CONFIG_FTRACE=y | 1754 | # CONFIG_FTRACE is not set |
| 1686 | CONFIG_FUNCTION_TRACER=y | ||
| 1687 | CONFIG_FUNCTION_GRAPH_TRACER=y | ||
| 1688 | CONFIG_IRQSOFF_TRACER=y | ||
| 1689 | # CONFIG_PREEMPT_TRACER is not set | ||
| 1690 | CONFIG_SCHED_TRACER=y | ||
| 1691 | # CONFIG_FTRACE_SYSCALLS is not set | ||
| 1692 | # CONFIG_BOOT_TRACER is not set | ||
| 1693 | CONFIG_BRANCH_PROFILE_NONE=y | ||
| 1694 | # CONFIG_PROFILE_ANNOTATED_BRANCHES is not set | ||
| 1695 | # CONFIG_PROFILE_ALL_BRANCHES is not set | ||
| 1696 | # CONFIG_KSYM_TRACER is not set | ||
| 1697 | CONFIG_STACK_TRACER=y | ||
| 1698 | CONFIG_KMEMTRACE=y | ||
| 1699 | CONFIG_WORKQUEUE_TRACER=y | ||
| 1700 | # CONFIG_BLK_DEV_IO_TRACE is not set | ||
| 1701 | CONFIG_DYNAMIC_FTRACE=y | ||
| 1702 | # CONFIG_FUNCTION_PROFILER is not set | ||
| 1703 | CONFIG_FTRACE_MCOUNT_RECORD=y | ||
| 1704 | # CONFIG_FTRACE_STARTUP_TEST is not set | ||
| 1705 | # CONFIG_RING_BUFFER_BENCHMARK is not set | ||
| 1706 | # CONFIG_DYNAMIC_DEBUG is not set | 1755 | # CONFIG_DYNAMIC_DEBUG is not set |
| 1707 | # CONFIG_DMA_API_DEBUG is not set | 1756 | # CONFIG_DMA_API_DEBUG is not set |
| 1757 | # CONFIG_ATOMIC64_SELFTEST is not set | ||
| 1708 | # CONFIG_SAMPLES is not set | 1758 | # CONFIG_SAMPLES is not set |
| 1709 | CONFIG_HAVE_ARCH_KGDB=y | 1759 | CONFIG_HAVE_ARCH_KGDB=y |
| 1760 | # CONFIG_KGDB is not set | ||
| 1710 | # CONFIG_SH_STANDARD_BIOS is not set | 1761 | # CONFIG_SH_STANDARD_BIOS is not set |
| 1711 | CONFIG_DWARF_UNWINDER=y | 1762 | # CONFIG_STACK_DEBUG is not set |
| 1712 | CONFIG_MCOUNT=y | 1763 | # CONFIG_DEBUG_STACK_USAGE is not set |
| 1764 | # CONFIG_4KSTACKS is not set | ||
| 1765 | CONFIG_DUMP_CODE=y | ||
| 1766 | # CONFIG_DWARF_UNWINDER is not set | ||
| 1767 | # CONFIG_SH_NO_BSS_INIT is not set | ||
| 1713 | 1768 | ||
| 1714 | # | 1769 | # |
| 1715 | # Security options | 1770 | # Security options |
| @@ -1820,7 +1875,7 @@ CONFIG_CRYPTO_DES=y | |||
| 1820 | # CONFIG_CRYPTO_ANSI_CPRNG is not set | 1875 | # CONFIG_CRYPTO_ANSI_CPRNG is not set |
| 1821 | # CONFIG_CRYPTO_HW is not set | 1876 | # CONFIG_CRYPTO_HW is not set |
| 1822 | # CONFIG_VIRTUALIZATION is not set | 1877 | # CONFIG_VIRTUALIZATION is not set |
| 1823 | CONFIG_BINARY_PRINTF=y | 1878 | # CONFIG_BINARY_PRINTF is not set |
| 1824 | 1879 | ||
| 1825 | # | 1880 | # |
| 1826 | # Library routines | 1881 | # Library routines |
diff --git a/arch/sh/include/asm/dmaengine.h b/arch/sh/include/asm/dmaengine.h deleted file mode 100644 index 2a02b611a9ad..000000000000 --- a/arch/sh/include/asm/dmaengine.h +++ /dev/null | |||
| @@ -1,34 +0,0 @@ | |||
| 1 | /* | ||
| 2 | * Header for the new SH dmaengine driver | ||
| 3 | * | ||
| 4 | * Copyright (C) 2010 Guennadi Liakhovetski <g.liakhovetski@gmx.de> | ||
| 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 | #ifndef ASM_DMAENGINE_H | ||
| 11 | #define ASM_DMAENGINE_H | ||
| 12 | |||
| 13 | #include <linux/sh_dma.h> | ||
| 14 | |||
| 15 | enum { | ||
| 16 | SHDMA_SLAVE_SCIF0_TX, | ||
| 17 | SHDMA_SLAVE_SCIF0_RX, | ||
| 18 | SHDMA_SLAVE_SCIF1_TX, | ||
| 19 | SHDMA_SLAVE_SCIF1_RX, | ||
| 20 | SHDMA_SLAVE_SCIF2_TX, | ||
| 21 | SHDMA_SLAVE_SCIF2_RX, | ||
| 22 | SHDMA_SLAVE_SCIF3_TX, | ||
| 23 | SHDMA_SLAVE_SCIF3_RX, | ||
| 24 | SHDMA_SLAVE_SCIF4_TX, | ||
| 25 | SHDMA_SLAVE_SCIF4_RX, | ||
| 26 | SHDMA_SLAVE_SCIF5_TX, | ||
| 27 | SHDMA_SLAVE_SCIF5_RX, | ||
| 28 | SHDMA_SLAVE_SIUA_TX, | ||
| 29 | SHDMA_SLAVE_SIUA_RX, | ||
| 30 | SHDMA_SLAVE_SIUB_TX, | ||
| 31 | SHDMA_SLAVE_SIUB_RX, | ||
| 32 | }; | ||
| 33 | |||
| 34 | #endif | ||
diff --git a/arch/sh/include/asm/siu.h b/arch/sh/include/asm/siu.h index e8d4142baf59..1d95c78808d1 100644 --- a/arch/sh/include/asm/siu.h +++ b/arch/sh/include/asm/siu.h | |||
| @@ -11,8 +11,6 @@ | |||
| 11 | #ifndef ASM_SIU_H | 11 | #ifndef ASM_SIU_H |
| 12 | #define ASM_SIU_H | 12 | #define ASM_SIU_H |
| 13 | 13 | ||
| 14 | #include <asm/dmaengine.h> | ||
| 15 | |||
| 16 | struct device; | 14 | struct device; |
| 17 | 15 | ||
| 18 | struct siu_platform { | 16 | struct siu_platform { |
diff --git a/arch/sh/include/cpu-sh4/cpu/sh7722.h b/arch/sh/include/cpu-sh4/cpu/sh7722.h index 48560407cbe1..7a5b8a331b4a 100644 --- a/arch/sh/include/cpu-sh4/cpu/sh7722.h +++ b/arch/sh/include/cpu-sh4/cpu/sh7722.h | |||
| @@ -235,4 +235,19 @@ enum { | |||
| 235 | HWBLK_NR, | 235 | HWBLK_NR, |
| 236 | }; | 236 | }; |
| 237 | 237 | ||
| 238 | enum { | ||
| 239 | SHDMA_SLAVE_SCIF0_TX, | ||
| 240 | SHDMA_SLAVE_SCIF0_RX, | ||
| 241 | SHDMA_SLAVE_SCIF1_TX, | ||
| 242 | SHDMA_SLAVE_SCIF1_RX, | ||
| 243 | SHDMA_SLAVE_SCIF2_TX, | ||
| 244 | SHDMA_SLAVE_SCIF2_RX, | ||
| 245 | SHDMA_SLAVE_SIUA_TX, | ||
| 246 | SHDMA_SLAVE_SIUA_RX, | ||
| 247 | SHDMA_SLAVE_SIUB_TX, | ||
| 248 | SHDMA_SLAVE_SIUB_RX, | ||
| 249 | SHDMA_SLAVE_SDHI0_TX, | ||
| 250 | SHDMA_SLAVE_SDHI0_RX, | ||
| 251 | }; | ||
| 252 | |||
| 238 | #endif /* __ASM_SH7722_H__ */ | 253 | #endif /* __ASM_SH7722_H__ */ |
diff --git a/arch/sh/include/cpu-sh4/cpu/sh7724.h b/arch/sh/include/cpu-sh4/cpu/sh7724.h index 0cd1f71a1116..fbbf550cc529 100644 --- a/arch/sh/include/cpu-sh4/cpu/sh7724.h +++ b/arch/sh/include/cpu-sh4/cpu/sh7724.h | |||
| @@ -283,4 +283,23 @@ enum { | |||
| 283 | HWBLK_NR, | 283 | HWBLK_NR, |
| 284 | }; | 284 | }; |
| 285 | 285 | ||
| 286 | enum { | ||
| 287 | SHDMA_SLAVE_SCIF0_TX, | ||
| 288 | SHDMA_SLAVE_SCIF0_RX, | ||
| 289 | SHDMA_SLAVE_SCIF1_TX, | ||
| 290 | SHDMA_SLAVE_SCIF1_RX, | ||
| 291 | SHDMA_SLAVE_SCIF2_TX, | ||
| 292 | SHDMA_SLAVE_SCIF2_RX, | ||
| 293 | SHDMA_SLAVE_SCIF3_TX, | ||
| 294 | SHDMA_SLAVE_SCIF3_RX, | ||
| 295 | SHDMA_SLAVE_SCIF4_TX, | ||
| 296 | SHDMA_SLAVE_SCIF4_RX, | ||
| 297 | SHDMA_SLAVE_SCIF5_TX, | ||
| 298 | SHDMA_SLAVE_SCIF5_RX, | ||
| 299 | SHDMA_SLAVE_SDHI0_TX, | ||
| 300 | SHDMA_SLAVE_SDHI0_RX, | ||
| 301 | SHDMA_SLAVE_SDHI1_TX, | ||
| 302 | SHDMA_SLAVE_SDHI1_RX, | ||
| 303 | }; | ||
| 304 | |||
| 286 | #endif /* __ASM_SH7724_H__ */ | 305 | #endif /* __ASM_SH7724_H__ */ |
diff --git a/arch/sh/kernel/cpu/sh4a/clock-sh7786.c b/arch/sh/kernel/cpu/sh4a/clock-sh7786.c index 105a6d41b569..597c9fbe49c6 100644 --- a/arch/sh/kernel/cpu/sh4a/clock-sh7786.c +++ b/arch/sh/kernel/cpu/sh4a/clock-sh7786.c | |||
| @@ -13,7 +13,6 @@ | |||
| 13 | #include <linux/kernel.h> | 13 | #include <linux/kernel.h> |
| 14 | #include <linux/clk.h> | 14 | #include <linux/clk.h> |
| 15 | #include <linux/io.h> | 15 | #include <linux/io.h> |
| 16 | #include <linux/clk.h> | ||
| 17 | #include <asm/clkdev.h> | 16 | #include <asm/clkdev.h> |
| 18 | #include <asm/clock.h> | 17 | #include <asm/clock.h> |
| 19 | #include <asm/freq.h> | 18 | #include <asm/freq.h> |
diff --git a/arch/sh/kernel/cpu/sh4a/setup-sh7722.c b/arch/sh/kernel/cpu/sh4a/setup-sh7722.c index 24c6167a7181..156ccc960015 100644 --- a/arch/sh/kernel/cpu/sh4a/setup-sh7722.c +++ b/arch/sh/kernel/cpu/sh4a/setup-sh7722.c | |||
| @@ -17,7 +17,6 @@ | |||
| 17 | #include <linux/usb/m66592.h> | 17 | #include <linux/usb/m66592.h> |
| 18 | 18 | ||
| 19 | #include <asm/clock.h> | 19 | #include <asm/clock.h> |
| 20 | #include <asm/dmaengine.h> | ||
| 21 | #include <asm/mmzone.h> | 20 | #include <asm/mmzone.h> |
| 22 | #include <asm/siu.h> | 21 | #include <asm/siu.h> |
| 23 | 22 | ||
| @@ -75,6 +74,16 @@ static const struct sh_dmae_slave_config sh7722_dmae_slaves[] = { | |||
| 75 | .addr = 0xa454c094, | 74 | .addr = 0xa454c094, |
| 76 | .chcr = DM_INC | SM_FIX | 0x800 | TS_INDEX2VAL(XMIT_SZ_32BIT), | 75 | .chcr = DM_INC | SM_FIX | 0x800 | TS_INDEX2VAL(XMIT_SZ_32BIT), |
| 77 | .mid_rid = 0xb6, | 76 | .mid_rid = 0xb6, |
| 77 | }, { | ||
| 78 | .slave_id = SHDMA_SLAVE_SDHI0_TX, | ||
| 79 | .addr = 0x04ce0030, | ||
| 80 | .chcr = DM_FIX | SM_INC | 0x800 | TS_INDEX2VAL(XMIT_SZ_16BIT), | ||
| 81 | .mid_rid = 0xc1, | ||
| 82 | }, { | ||
| 83 | .slave_id = SHDMA_SLAVE_SDHI0_RX, | ||
| 84 | .addr = 0x04ce0030, | ||
| 85 | .chcr = DM_INC | SM_FIX | 0x800 | TS_INDEX2VAL(XMIT_SZ_16BIT), | ||
| 86 | .mid_rid = 0xc2, | ||
| 78 | }, | 87 | }, |
| 79 | }; | 88 | }; |
| 80 | 89 | ||
diff --git a/arch/sh/kernel/cpu/sh4a/setup-sh7724.c b/arch/sh/kernel/cpu/sh4a/setup-sh7724.c index 89fe16d20fdb..79c556e56262 100644 --- a/arch/sh/kernel/cpu/sh4a/setup-sh7724.c +++ b/arch/sh/kernel/cpu/sh4a/setup-sh7724.c | |||
| @@ -18,19 +18,103 @@ | |||
| 18 | #include <linux/mm.h> | 18 | #include <linux/mm.h> |
| 19 | #include <linux/serial_sci.h> | 19 | #include <linux/serial_sci.h> |
| 20 | #include <linux/uio_driver.h> | 20 | #include <linux/uio_driver.h> |
| 21 | #include <linux/sh_dma.h> | ||
| 21 | #include <linux/sh_timer.h> | 22 | #include <linux/sh_timer.h> |
| 22 | #include <linux/io.h> | 23 | #include <linux/io.h> |
| 23 | #include <linux/notifier.h> | 24 | #include <linux/notifier.h> |
| 24 | 25 | ||
| 25 | #include <asm/suspend.h> | 26 | #include <asm/suspend.h> |
| 26 | #include <asm/clock.h> | 27 | #include <asm/clock.h> |
| 27 | #include <asm/dmaengine.h> | ||
| 28 | #include <asm/mmzone.h> | 28 | #include <asm/mmzone.h> |
| 29 | 29 | ||
| 30 | #include <cpu/dma-register.h> | 30 | #include <cpu/dma-register.h> |
| 31 | #include <cpu/sh7724.h> | 31 | #include <cpu/sh7724.h> |
| 32 | 32 | ||
| 33 | /* DMA */ | 33 | /* DMA */ |
| 34 | static const struct sh_dmae_slave_config sh7724_dmae_slaves[] = { | ||
| 35 | { | ||
| 36 | .slave_id = SHDMA_SLAVE_SCIF0_TX, | ||
| 37 | .addr = 0xffe0000c, | ||
| 38 | .chcr = DM_FIX | SM_INC | 0x800 | TS_INDEX2VAL(XMIT_SZ_8BIT), | ||
| 39 | .mid_rid = 0x21, | ||
| 40 | }, { | ||
| 41 | .slave_id = SHDMA_SLAVE_SCIF0_RX, | ||
| 42 | .addr = 0xffe00014, | ||
| 43 | .chcr = DM_INC | SM_FIX | 0x800 | TS_INDEX2VAL(XMIT_SZ_8BIT), | ||
| 44 | .mid_rid = 0x22, | ||
| 45 | }, { | ||
| 46 | .slave_id = SHDMA_SLAVE_SCIF1_TX, | ||
| 47 | .addr = 0xffe1000c, | ||
| 48 | .chcr = DM_FIX | SM_INC | 0x800 | TS_INDEX2VAL(XMIT_SZ_8BIT), | ||
| 49 | .mid_rid = 0x25, | ||
| 50 | }, { | ||
| 51 | .slave_id = SHDMA_SLAVE_SCIF1_RX, | ||
| 52 | .addr = 0xffe10014, | ||
| 53 | .chcr = DM_INC | SM_FIX | 0x800 | TS_INDEX2VAL(XMIT_SZ_8BIT), | ||
| 54 | .mid_rid = 0x26, | ||
| 55 | }, { | ||
| 56 | .slave_id = SHDMA_SLAVE_SCIF2_TX, | ||
| 57 | .addr = 0xffe2000c, | ||
| 58 | .chcr = DM_FIX | SM_INC | 0x800 | TS_INDEX2VAL(XMIT_SZ_8BIT), | ||
| 59 | .mid_rid = 0x29, | ||
| 60 | }, { | ||
| 61 | .slave_id = SHDMA_SLAVE_SCIF2_RX, | ||
| 62 | .addr = 0xffe20014, | ||
| 63 | .chcr = DM_INC | SM_FIX | 0x800 | TS_INDEX2VAL(XMIT_SZ_8BIT), | ||
| 64 | .mid_rid = 0x2a, | ||
| 65 | }, { | ||
| 66 | .slave_id = SHDMA_SLAVE_SCIF3_TX, | ||
| 67 | .addr = 0xa4e30020, | ||
| 68 | .chcr = DM_FIX | SM_INC | 0x800 | TS_INDEX2VAL(XMIT_SZ_8BIT), | ||
| 69 | .mid_rid = 0x2d, | ||
| 70 | }, { | ||
| 71 | .slave_id = SHDMA_SLAVE_SCIF3_RX, | ||
| 72 | .addr = 0xa4e30024, | ||
| 73 | .chcr = DM_INC | SM_FIX | 0x800 | TS_INDEX2VAL(XMIT_SZ_8BIT), | ||
| 74 | .mid_rid = 0x2e, | ||
| 75 | }, { | ||
| 76 | .slave_id = SHDMA_SLAVE_SCIF4_TX, | ||
| 77 | .addr = 0xa4e40020, | ||
| 78 | .chcr = DM_FIX | SM_INC | 0x800 | TS_INDEX2VAL(XMIT_SZ_8BIT), | ||
| 79 | .mid_rid = 0x31, | ||
| 80 | }, { | ||
| 81 | .slave_id = SHDMA_SLAVE_SCIF4_RX, | ||
| 82 | .addr = 0xa4e40024, | ||
| 83 | .chcr = DM_INC | SM_FIX | 0x800 | TS_INDEX2VAL(XMIT_SZ_8BIT), | ||
| 84 | .mid_rid = 0x32, | ||
| 85 | }, { | ||
| 86 | .slave_id = SHDMA_SLAVE_SCIF5_TX, | ||
| 87 | .addr = 0xa4e50020, | ||
| 88 | .chcr = DM_FIX | SM_INC | 0x800 | TS_INDEX2VAL(XMIT_SZ_8BIT), | ||
| 89 | .mid_rid = 0x35, | ||
| 90 | }, { | ||
| 91 | .slave_id = SHDMA_SLAVE_SCIF5_RX, | ||
| 92 | .addr = 0xa4e50024, | ||
| 93 | .chcr = DM_INC | SM_FIX | 0x800 | TS_INDEX2VAL(XMIT_SZ_8BIT), | ||
| 94 | .mid_rid = 0x36, | ||
| 95 | }, { | ||
| 96 | .slave_id = SHDMA_SLAVE_SDHI0_TX, | ||
| 97 | .addr = 0x04ce0030, | ||
| 98 | .chcr = DM_FIX | SM_INC | 0x800 | TS_INDEX2VAL(XMIT_SZ_16BIT), | ||
| 99 | .mid_rid = 0xc1, | ||
| 100 | }, { | ||
| 101 | .slave_id = SHDMA_SLAVE_SDHI0_RX, | ||
| 102 | .addr = 0x04ce0030, | ||
| 103 | .chcr = DM_INC | SM_FIX | 0x800 | TS_INDEX2VAL(XMIT_SZ_16BIT), | ||
| 104 | .mid_rid = 0xc2, | ||
| 105 | }, { | ||
| 106 | .slave_id = SHDMA_SLAVE_SDHI1_TX, | ||
| 107 | .addr = 0x04cf0030, | ||
| 108 | .chcr = DM_FIX | SM_INC | 0x800 | TS_INDEX2VAL(XMIT_SZ_16BIT), | ||
| 109 | .mid_rid = 0xc9, | ||
| 110 | }, { | ||
| 111 | .slave_id = SHDMA_SLAVE_SDHI1_RX, | ||
| 112 | .addr = 0x04cf0030, | ||
| 113 | .chcr = DM_INC | SM_FIX | 0x800 | TS_INDEX2VAL(XMIT_SZ_16BIT), | ||
| 114 | .mid_rid = 0xca, | ||
| 115 | }, | ||
| 116 | }; | ||
| 117 | |||
| 34 | static const struct sh_dmae_channel sh7724_dmae_channels[] = { | 118 | static const struct sh_dmae_channel sh7724_dmae_channels[] = { |
| 35 | { | 119 | { |
| 36 | .offset = 0, | 120 | .offset = 0, |
| @@ -62,6 +146,8 @@ static const struct sh_dmae_channel sh7724_dmae_channels[] = { | |||
| 62 | static const unsigned int ts_shift[] = TS_SHIFT; | 146 | static const unsigned int ts_shift[] = TS_SHIFT; |
| 63 | 147 | ||
| 64 | static struct sh_dmae_pdata dma_platform_data = { | 148 | static struct sh_dmae_pdata dma_platform_data = { |
| 149 | .slave = sh7724_dmae_slaves, | ||
| 150 | .slave_num = ARRAY_SIZE(sh7724_dmae_slaves), | ||
| 65 | .channel = sh7724_dmae_channels, | 151 | .channel = sh7724_dmae_channels, |
| 66 | .channel_num = ARRAY_SIZE(sh7724_dmae_channels), | 152 | .channel_num = ARRAY_SIZE(sh7724_dmae_channels), |
| 67 | .ts_low_shift = CHCR_TS_LOW_SHIFT, | 153 | .ts_low_shift = CHCR_TS_LOW_SHIFT, |
diff --git a/arch/sh/kernel/cpu/sh4a/setup-sh7780.c b/arch/sh/kernel/cpu/sh4a/setup-sh7780.c index b12f537e4dde..0f414864f76b 100644 --- a/arch/sh/kernel/cpu/sh4a/setup-sh7780.c +++ b/arch/sh/kernel/cpu/sh4a/setup-sh7780.c | |||
| @@ -12,10 +12,9 @@ | |||
| 12 | #include <linux/serial.h> | 12 | #include <linux/serial.h> |
| 13 | #include <linux/io.h> | 13 | #include <linux/io.h> |
| 14 | #include <linux/serial_sci.h> | 14 | #include <linux/serial_sci.h> |
| 15 | #include <linux/sh_dma.h> | ||
| 15 | #include <linux/sh_timer.h> | 16 | #include <linux/sh_timer.h> |
| 16 | 17 | ||
| 17 | #include <asm/dmaengine.h> | ||
| 18 | |||
| 19 | #include <cpu/dma-register.h> | 18 | #include <cpu/dma-register.h> |
| 20 | 19 | ||
| 21 | static struct plat_sci_port scif0_platform_data = { | 20 | static struct plat_sci_port scif0_platform_data = { |
diff --git a/arch/sh/kernel/cpu/sh4a/setup-sh7785.c b/arch/sh/kernel/cpu/sh4a/setup-sh7785.c index f3e3ea0ce050..c9a572bc6dc8 100644 --- a/arch/sh/kernel/cpu/sh4a/setup-sh7785.c +++ b/arch/sh/kernel/cpu/sh4a/setup-sh7785.c | |||
| @@ -13,9 +13,9 @@ | |||
| 13 | #include <linux/serial_sci.h> | 13 | #include <linux/serial_sci.h> |
| 14 | #include <linux/io.h> | 14 | #include <linux/io.h> |
| 15 | #include <linux/mm.h> | 15 | #include <linux/mm.h> |
| 16 | #include <linux/sh_dma.h> | ||
| 16 | #include <linux/sh_timer.h> | 17 | #include <linux/sh_timer.h> |
| 17 | 18 | ||
| 18 | #include <asm/dmaengine.h> | ||
| 19 | #include <asm/mmzone.h> | 19 | #include <asm/mmzone.h> |
| 20 | 20 | ||
| 21 | #include <cpu/dma-register.h> | 21 | #include <cpu/dma-register.h> |
diff --git a/arch/sh/kernel/cpu/sh4a/setup-sh7786.c b/arch/sh/kernel/cpu/sh4a/setup-sh7786.c index 81657091da46..8797723231ea 100644 --- a/arch/sh/kernel/cpu/sh4a/setup-sh7786.c +++ b/arch/sh/kernel/cpu/sh4a/setup-sh7786.c | |||
| @@ -21,10 +21,10 @@ | |||
| 21 | #include <linux/mm.h> | 21 | #include <linux/mm.h> |
| 22 | #include <linux/dma-mapping.h> | 22 | #include <linux/dma-mapping.h> |
| 23 | #include <linux/sh_timer.h> | 23 | #include <linux/sh_timer.h> |
| 24 | #include <linux/sh_dma.h> | ||
| 24 | #include <linux/sh_intc.h> | 25 | #include <linux/sh_intc.h> |
| 25 | #include <cpu/dma-register.h> | 26 | #include <cpu/dma-register.h> |
| 26 | #include <asm/mmzone.h> | 27 | #include <asm/mmzone.h> |
| 27 | #include <asm/dmaengine.h> | ||
| 28 | 28 | ||
| 29 | static struct plat_sci_port scif0_platform_data = { | 29 | static struct plat_sci_port scif0_platform_data = { |
| 30 | .mapbase = 0xffea0000, | 30 | .mapbase = 0xffea0000, |
diff --git a/arch/sh/kernel/dwarf.c b/arch/sh/kernel/dwarf.c index 5ec1d1818691..886d7d83ace3 100644 --- a/arch/sh/kernel/dwarf.c +++ b/arch/sh/kernel/dwarf.c | |||
| @@ -845,8 +845,10 @@ static int dwarf_parse_cie(void *entry, void *p, unsigned long len, | |||
| 845 | rb_link_node(&cie->node, parent, rb_node); | 845 | rb_link_node(&cie->node, parent, rb_node); |
| 846 | rb_insert_color(&cie->node, &cie_root); | 846 | rb_insert_color(&cie->node, &cie_root); |
| 847 | 847 | ||
| 848 | #ifdef CONFIG_MODULES | ||
| 848 | if (mod != NULL) | 849 | if (mod != NULL) |
| 849 | list_add_tail(&cie->link, &mod->arch.cie_list); | 850 | list_add_tail(&cie->link, &mod->arch.cie_list); |
| 851 | #endif | ||
| 850 | 852 | ||
| 851 | spin_unlock_irqrestore(&dwarf_cie_lock, flags); | 853 | spin_unlock_irqrestore(&dwarf_cie_lock, flags); |
| 852 | 854 | ||
| @@ -935,8 +937,10 @@ static int dwarf_parse_fde(void *entry, u32 entry_type, | |||
| 935 | rb_link_node(&fde->node, parent, rb_node); | 937 | rb_link_node(&fde->node, parent, rb_node); |
| 936 | rb_insert_color(&fde->node, &fde_root); | 938 | rb_insert_color(&fde->node, &fde_root); |
| 937 | 939 | ||
| 940 | #ifdef CONFIG_MODULES | ||
| 938 | if (mod != NULL) | 941 | if (mod != NULL) |
| 939 | list_add_tail(&fde->link, &mod->arch.fde_list); | 942 | list_add_tail(&fde->link, &mod->arch.fde_list); |
| 943 | #endif | ||
| 940 | 944 | ||
| 941 | spin_unlock_irqrestore(&dwarf_fde_lock, flags); | 945 | spin_unlock_irqrestore(&dwarf_fde_lock, flags); |
| 942 | 946 | ||
diff --git a/arch/sh/lib/strlen.S b/arch/sh/lib/strlen.S index f8ab296047b3..1bcc13f05962 100644 --- a/arch/sh/lib/strlen.S +++ b/arch/sh/lib/strlen.S | |||
| @@ -35,7 +35,7 @@ ENTRY(strlen) | |||
| 35 | mov.b @r4+,r1 | 35 | mov.b @r4+,r1 |
| 36 | tst r1,r1 | 36 | tst r1,r1 |
| 37 | bt 8f | 37 | bt 8f |
| 38 | add #1,r2 | 38 | add #1,r2 |
| 39 | 39 | ||
| 40 | 1: | 40 | 1: |
| 41 | mov #0,r3 | 41 | mov #0,r3 |
diff --git a/drivers/dma/shdma.c b/drivers/dma/shdma.c index a1727522343e..a2a519fd2a24 100644 --- a/drivers/dma/shdma.c +++ b/drivers/dma/shdma.c | |||
| @@ -722,6 +722,10 @@ static void sh_dmae_chan_ld_cleanup(struct sh_dmae_chan *sh_chan, bool all) | |||
| 722 | { | 722 | { |
| 723 | while (__ld_cleanup(sh_chan, all)) | 723 | while (__ld_cleanup(sh_chan, all)) |
| 724 | ; | 724 | ; |
| 725 | |||
| 726 | if (all) | ||
| 727 | /* Terminating - forgive uncompleted cookies */ | ||
| 728 | sh_chan->completed_cookie = sh_chan->common.cookie; | ||
| 725 | } | 729 | } |
| 726 | 730 | ||
| 727 | static void sh_chan_xfer_ld_queue(struct sh_dmae_chan *sh_chan) | 731 | static void sh_chan_xfer_ld_queue(struct sh_dmae_chan *sh_chan) |
| @@ -1188,6 +1192,7 @@ static struct platform_driver sh_dmae_driver = { | |||
| 1188 | .remove = __exit_p(sh_dmae_remove), | 1192 | .remove = __exit_p(sh_dmae_remove), |
| 1189 | .shutdown = sh_dmae_shutdown, | 1193 | .shutdown = sh_dmae_shutdown, |
| 1190 | .driver = { | 1194 | .driver = { |
| 1195 | .owner = THIS_MODULE, | ||
| 1191 | .name = "sh-dma-engine", | 1196 | .name = "sh-dma-engine", |
| 1192 | }, | 1197 | }, |
| 1193 | }; | 1198 | }; |
diff --git a/drivers/mfd/Kconfig b/drivers/mfd/Kconfig index de3e74cde51c..3c6a9860dd9c 100644 --- a/drivers/mfd/Kconfig +++ b/drivers/mfd/Kconfig | |||
| @@ -49,6 +49,7 @@ config MFD_SH_MOBILE_SDHI | |||
| 49 | bool "Support for SuperH Mobile SDHI" | 49 | bool "Support for SuperH Mobile SDHI" |
| 50 | depends on SUPERH || ARCH_SHMOBILE | 50 | depends on SUPERH || ARCH_SHMOBILE |
| 51 | select MFD_CORE | 51 | select MFD_CORE |
| 52 | select TMIO_MMC_DMA | ||
| 52 | ---help--- | 53 | ---help--- |
| 53 | This driver supports the SDHI hardware block found in many | 54 | This driver supports the SDHI hardware block found in many |
| 54 | SuperH Mobile SoCs. | 55 | SuperH Mobile SoCs. |
| @@ -162,6 +163,11 @@ config MFD_TMIO | |||
| 162 | bool | 163 | bool |
| 163 | default n | 164 | default n |
| 164 | 165 | ||
| 166 | config TMIO_MMC_DMA | ||
| 167 | bool | ||
| 168 | select DMA_ENGINE | ||
| 169 | select DMADEVICES | ||
| 170 | |||
| 165 | config MFD_T7L66XB | 171 | config MFD_T7L66XB |
| 166 | bool "Support Toshiba T7L66XB" | 172 | bool "Support Toshiba T7L66XB" |
| 167 | depends on ARM && HAVE_CLK | 173 | depends on ARM && HAVE_CLK |
diff --git a/drivers/mfd/sh_mobile_sdhi.c b/drivers/mfd/sh_mobile_sdhi.c index 497f91b6138e..cd164595f08a 100644 --- a/drivers/mfd/sh_mobile_sdhi.c +++ b/drivers/mfd/sh_mobile_sdhi.c | |||
| @@ -26,11 +26,15 @@ | |||
| 26 | #include <linux/mfd/core.h> | 26 | #include <linux/mfd/core.h> |
| 27 | #include <linux/mfd/tmio.h> | 27 | #include <linux/mfd/tmio.h> |
| 28 | #include <linux/mfd/sh_mobile_sdhi.h> | 28 | #include <linux/mfd/sh_mobile_sdhi.h> |
| 29 | #include <linux/sh_dma.h> | ||
| 29 | 30 | ||
| 30 | struct sh_mobile_sdhi { | 31 | struct sh_mobile_sdhi { |
| 31 | struct clk *clk; | 32 | struct clk *clk; |
| 32 | struct tmio_mmc_data mmc_data; | 33 | struct tmio_mmc_data mmc_data; |
| 33 | struct mfd_cell cell_mmc; | 34 | struct mfd_cell cell_mmc; |
| 35 | struct sh_dmae_slave param_tx; | ||
| 36 | struct sh_dmae_slave param_rx; | ||
| 37 | struct tmio_mmc_dma dma_priv; | ||
| 34 | }; | 38 | }; |
| 35 | 39 | ||
| 36 | static struct resource sh_mobile_sdhi_resources[] = { | 40 | static struct resource sh_mobile_sdhi_resources[] = { |
| @@ -64,6 +68,8 @@ static void sh_mobile_sdhi_set_pwr(struct platform_device *tmio, int state) | |||
| 64 | static int __init sh_mobile_sdhi_probe(struct platform_device *pdev) | 68 | static int __init sh_mobile_sdhi_probe(struct platform_device *pdev) |
| 65 | { | 69 | { |
| 66 | struct sh_mobile_sdhi *priv; | 70 | struct sh_mobile_sdhi *priv; |
| 71 | struct tmio_mmc_data *mmc_data; | ||
| 72 | struct sh_mobile_sdhi_info *p = pdev->dev.platform_data; | ||
| 67 | struct resource *mem; | 73 | struct resource *mem; |
| 68 | char clk_name[8]; | 74 | char clk_name[8]; |
| 69 | int ret, irq; | 75 | int ret, irq; |
| @@ -85,6 +91,8 @@ static int __init sh_mobile_sdhi_probe(struct platform_device *pdev) | |||
| 85 | return -ENOMEM; | 91 | return -ENOMEM; |
| 86 | } | 92 | } |
| 87 | 93 | ||
| 94 | mmc_data = &priv->mmc_data; | ||
| 95 | |||
| 88 | snprintf(clk_name, sizeof(clk_name), "sdhi%d", pdev->id); | 96 | snprintf(clk_name, sizeof(clk_name), "sdhi%d", pdev->id); |
| 89 | priv->clk = clk_get(&pdev->dev, clk_name); | 97 | priv->clk = clk_get(&pdev->dev, clk_name); |
| 90 | if (IS_ERR(priv->clk)) { | 98 | if (IS_ERR(priv->clk)) { |
| @@ -96,12 +104,24 @@ static int __init sh_mobile_sdhi_probe(struct platform_device *pdev) | |||
| 96 | 104 | ||
| 97 | clk_enable(priv->clk); | 105 | clk_enable(priv->clk); |
| 98 | 106 | ||
| 99 | priv->mmc_data.hclk = clk_get_rate(priv->clk); | 107 | mmc_data->hclk = clk_get_rate(priv->clk); |
| 100 | priv->mmc_data.set_pwr = sh_mobile_sdhi_set_pwr; | 108 | mmc_data->set_pwr = sh_mobile_sdhi_set_pwr; |
| 101 | priv->mmc_data.capabilities = MMC_CAP_MMC_HIGHSPEED; | 109 | mmc_data->capabilities = MMC_CAP_MMC_HIGHSPEED; |
| 110 | if (p) { | ||
| 111 | mmc_data->flags = p->tmio_flags; | ||
| 112 | mmc_data->ocr_mask = p->tmio_ocr_mask; | ||
| 113 | } | ||
| 114 | |||
| 115 | if (p && p->dma_slave_tx >= 0 && p->dma_slave_rx >= 0) { | ||
| 116 | priv->param_tx.slave_id = p->dma_slave_tx; | ||
| 117 | priv->param_rx.slave_id = p->dma_slave_rx; | ||
| 118 | priv->dma_priv.chan_priv_tx = &priv->param_tx; | ||
| 119 | priv->dma_priv.chan_priv_rx = &priv->param_rx; | ||
| 120 | mmc_data->dma = &priv->dma_priv; | ||
| 121 | } | ||
| 102 | 122 | ||
| 103 | memcpy(&priv->cell_mmc, &sh_mobile_sdhi_cell, sizeof(priv->cell_mmc)); | 123 | memcpy(&priv->cell_mmc, &sh_mobile_sdhi_cell, sizeof(priv->cell_mmc)); |
| 104 | priv->cell_mmc.driver_data = &priv->mmc_data; | 124 | priv->cell_mmc.driver_data = mmc_data; |
| 105 | priv->cell_mmc.platform_data = &priv->cell_mmc; | 125 | priv->cell_mmc.platform_data = &priv->cell_mmc; |
| 106 | priv->cell_mmc.data_size = sizeof(priv->cell_mmc); | 126 | priv->cell_mmc.data_size = sizeof(priv->cell_mmc); |
| 107 | 127 | ||
diff --git a/drivers/mmc/host/tmio_mmc.c b/drivers/mmc/host/tmio_mmc.c index b2b577f6afd4..883fcac21004 100644 --- a/drivers/mmc/host/tmio_mmc.c +++ b/drivers/mmc/host/tmio_mmc.c | |||
| @@ -29,6 +29,7 @@ | |||
| 29 | #include <linux/irq.h> | 29 | #include <linux/irq.h> |
| 30 | #include <linux/device.h> | 30 | #include <linux/device.h> |
| 31 | #include <linux/delay.h> | 31 | #include <linux/delay.h> |
| 32 | #include <linux/dmaengine.h> | ||
| 32 | #include <linux/mmc/host.h> | 33 | #include <linux/mmc/host.h> |
| 33 | #include <linux/mfd/core.h> | 34 | #include <linux/mfd/core.h> |
| 34 | #include <linux/mfd/tmio.h> | 35 | #include <linux/mfd/tmio.h> |
| @@ -131,8 +132,8 @@ tmio_mmc_start_command(struct tmio_mmc_host *host, struct mmc_command *cmd) | |||
| 131 | 132 | ||
| 132 | host->cmd = cmd; | 133 | host->cmd = cmd; |
| 133 | 134 | ||
| 134 | /* FIXME - this seems to be ok comented out but the spec suggest this bit should | 135 | /* FIXME - this seems to be ok commented out but the spec suggest this bit |
| 135 | * be set when issuing app commands. | 136 | * should be set when issuing app commands. |
| 136 | * if(cmd->flags & MMC_FLAG_ACMD) | 137 | * if(cmd->flags & MMC_FLAG_ACMD) |
| 137 | * c |= APP_CMD; | 138 | * c |= APP_CMD; |
| 138 | */ | 139 | */ |
| @@ -155,12 +156,12 @@ tmio_mmc_start_command(struct tmio_mmc_host *host, struct mmc_command *cmd) | |||
| 155 | return 0; | 156 | return 0; |
| 156 | } | 157 | } |
| 157 | 158 | ||
| 158 | /* This chip always returns (at least?) as much data as you ask for. | 159 | /* |
| 160 | * This chip always returns (at least?) as much data as you ask for. | ||
| 159 | * I'm unsure what happens if you ask for less than a block. This should be | 161 | * I'm unsure what happens if you ask for less than a block. This should be |
| 160 | * looked into to ensure that a funny length read doesnt hose the controller. | 162 | * looked into to ensure that a funny length read doesnt hose the controller. |
| 161 | * | ||
| 162 | */ | 163 | */ |
| 163 | static inline void tmio_mmc_pio_irq(struct tmio_mmc_host *host) | 164 | static void tmio_mmc_pio_irq(struct tmio_mmc_host *host) |
| 164 | { | 165 | { |
| 165 | struct mmc_data *data = host->data; | 166 | struct mmc_data *data = host->data; |
| 166 | unsigned short *buf; | 167 | unsigned short *buf; |
| @@ -180,7 +181,7 @@ static inline void tmio_mmc_pio_irq(struct tmio_mmc_host *host) | |||
| 180 | count = data->blksz; | 181 | count = data->blksz; |
| 181 | 182 | ||
| 182 | pr_debug("count: %08x offset: %08x flags %08x\n", | 183 | pr_debug("count: %08x offset: %08x flags %08x\n", |
| 183 | count, host->sg_off, data->flags); | 184 | count, host->sg_off, data->flags); |
| 184 | 185 | ||
| 185 | /* Transfer the data */ | 186 | /* Transfer the data */ |
| 186 | if (data->flags & MMC_DATA_READ) | 187 | if (data->flags & MMC_DATA_READ) |
| @@ -198,7 +199,7 @@ static inline void tmio_mmc_pio_irq(struct tmio_mmc_host *host) | |||
| 198 | return; | 199 | return; |
| 199 | } | 200 | } |
| 200 | 201 | ||
| 201 | static inline void tmio_mmc_data_irq(struct tmio_mmc_host *host) | 202 | static void tmio_mmc_do_data_irq(struct tmio_mmc_host *host) |
| 202 | { | 203 | { |
| 203 | struct mmc_data *data = host->data; | 204 | struct mmc_data *data = host->data; |
| 204 | struct mmc_command *stop; | 205 | struct mmc_command *stop; |
| @@ -206,7 +207,7 @@ static inline void tmio_mmc_data_irq(struct tmio_mmc_host *host) | |||
| 206 | host->data = NULL; | 207 | host->data = NULL; |
| 207 | 208 | ||
| 208 | if (!data) { | 209 | if (!data) { |
| 209 | pr_debug("Spurious data end IRQ\n"); | 210 | dev_warn(&host->pdev->dev, "Spurious data end IRQ\n"); |
| 210 | return; | 211 | return; |
| 211 | } | 212 | } |
| 212 | stop = data->stop; | 213 | stop = data->stop; |
| @@ -219,7 +220,8 @@ static inline void tmio_mmc_data_irq(struct tmio_mmc_host *host) | |||
| 219 | 220 | ||
| 220 | pr_debug("Completed data request\n"); | 221 | pr_debug("Completed data request\n"); |
| 221 | 222 | ||
| 222 | /*FIXME - other drivers allow an optional stop command of any given type | 223 | /* |
| 224 | * FIXME: other drivers allow an optional stop command of any given type | ||
| 223 | * which we dont do, as the chip can auto generate them. | 225 | * which we dont do, as the chip can auto generate them. |
| 224 | * Perhaps we can be smarter about when to use auto CMD12 and | 226 | * Perhaps we can be smarter about when to use auto CMD12 and |
| 225 | * only issue the auto request when we know this is the desired | 227 | * only issue the auto request when we know this is the desired |
| @@ -227,10 +229,17 @@ static inline void tmio_mmc_data_irq(struct tmio_mmc_host *host) | |||
| 227 | * upper layers expect. For now, we do what works. | 229 | * upper layers expect. For now, we do what works. |
| 228 | */ | 230 | */ |
| 229 | 231 | ||
| 230 | if (data->flags & MMC_DATA_READ) | 232 | if (data->flags & MMC_DATA_READ) { |
| 231 | disable_mmc_irqs(host, TMIO_MASK_READOP); | 233 | if (!host->chan_rx) |
| 232 | else | 234 | disable_mmc_irqs(host, TMIO_MASK_READOP); |
| 233 | disable_mmc_irqs(host, TMIO_MASK_WRITEOP); | 235 | dev_dbg(&host->pdev->dev, "Complete Rx request %p\n", |
| 236 | host->mrq); | ||
| 237 | } else { | ||
| 238 | if (!host->chan_tx) | ||
| 239 | disable_mmc_irqs(host, TMIO_MASK_WRITEOP); | ||
| 240 | dev_dbg(&host->pdev->dev, "Complete Tx request %p\n", | ||
| 241 | host->mrq); | ||
| 242 | } | ||
| 234 | 243 | ||
| 235 | if (stop) { | 244 | if (stop) { |
| 236 | if (stop->opcode == 12 && !stop->arg) | 245 | if (stop->opcode == 12 && !stop->arg) |
| @@ -242,7 +251,35 @@ static inline void tmio_mmc_data_irq(struct tmio_mmc_host *host) | |||
| 242 | tmio_mmc_finish_request(host); | 251 | tmio_mmc_finish_request(host); |
| 243 | } | 252 | } |
| 244 | 253 | ||
| 245 | static inline void tmio_mmc_cmd_irq(struct tmio_mmc_host *host, | 254 | static void tmio_mmc_data_irq(struct tmio_mmc_host *host) |
| 255 | { | ||
| 256 | struct mmc_data *data = host->data; | ||
| 257 | |||
| 258 | if (!data) | ||
| 259 | return; | ||
| 260 | |||
| 261 | if (host->chan_tx && (data->flags & MMC_DATA_WRITE)) { | ||
| 262 | /* | ||
| 263 | * Has all data been written out yet? Testing on SuperH showed, | ||
| 264 | * that in most cases the first interrupt comes already with the | ||
| 265 | * BUSY status bit clear, but on some operations, like mount or | ||
| 266 | * in the beginning of a write / sync / umount, there is one | ||
| 267 | * DATAEND interrupt with the BUSY bit set, in this cases | ||
| 268 | * waiting for one more interrupt fixes the problem. | ||
| 269 | */ | ||
| 270 | if (!(sd_ctrl_read32(host, CTL_STATUS) & TMIO_STAT_CMD_BUSY)) { | ||
| 271 | disable_mmc_irqs(host, TMIO_STAT_DATAEND); | ||
| 272 | tasklet_schedule(&host->dma_complete); | ||
| 273 | } | ||
| 274 | } else if (host->chan_rx && (data->flags & MMC_DATA_READ)) { | ||
| 275 | disable_mmc_irqs(host, TMIO_STAT_DATAEND); | ||
| 276 | tasklet_schedule(&host->dma_complete); | ||
| 277 | } else { | ||
| 278 | tmio_mmc_do_data_irq(host); | ||
| 279 | } | ||
| 280 | } | ||
| 281 | |||
| 282 | static void tmio_mmc_cmd_irq(struct tmio_mmc_host *host, | ||
| 246 | unsigned int stat) | 283 | unsigned int stat) |
| 247 | { | 284 | { |
| 248 | struct mmc_command *cmd = host->cmd; | 285 | struct mmc_command *cmd = host->cmd; |
| @@ -282,10 +319,16 @@ static inline void tmio_mmc_cmd_irq(struct tmio_mmc_host *host, | |||
| 282 | * If theres no data or we encountered an error, finish now. | 319 | * If theres no data or we encountered an error, finish now. |
| 283 | */ | 320 | */ |
| 284 | if (host->data && !cmd->error) { | 321 | if (host->data && !cmd->error) { |
| 285 | if (host->data->flags & MMC_DATA_READ) | 322 | if (host->data->flags & MMC_DATA_READ) { |
| 286 | enable_mmc_irqs(host, TMIO_MASK_READOP); | 323 | if (!host->chan_rx) |
| 287 | else | 324 | enable_mmc_irqs(host, TMIO_MASK_READOP); |
| 288 | enable_mmc_irqs(host, TMIO_MASK_WRITEOP); | 325 | } else { |
| 326 | struct dma_chan *chan = host->chan_tx; | ||
| 327 | if (!chan) | ||
| 328 | enable_mmc_irqs(host, TMIO_MASK_WRITEOP); | ||
| 329 | else | ||
| 330 | tasklet_schedule(&host->dma_issue); | ||
| 331 | } | ||
| 289 | } else { | 332 | } else { |
| 290 | tmio_mmc_finish_request(host); | 333 | tmio_mmc_finish_request(host); |
| 291 | } | 334 | } |
| @@ -293,7 +336,6 @@ static inline void tmio_mmc_cmd_irq(struct tmio_mmc_host *host, | |||
| 293 | return; | 336 | return; |
| 294 | } | 337 | } |
| 295 | 338 | ||
| 296 | |||
| 297 | static irqreturn_t tmio_mmc_irq(int irq, void *devid) | 339 | static irqreturn_t tmio_mmc_irq(int irq, void *devid) |
| 298 | { | 340 | { |
| 299 | struct tmio_mmc_host *host = devid; | 341 | struct tmio_mmc_host *host = devid; |
| @@ -311,7 +353,7 @@ static irqreturn_t tmio_mmc_irq(int irq, void *devid) | |||
| 311 | if (!ireg) { | 353 | if (!ireg) { |
| 312 | disable_mmc_irqs(host, status & ~irq_mask); | 354 | disable_mmc_irqs(host, status & ~irq_mask); |
| 313 | 355 | ||
| 314 | pr_debug("tmio_mmc: Spurious irq, disabling! " | 356 | pr_warning("tmio_mmc: Spurious irq, disabling! " |
| 315 | "0x%08x 0x%08x 0x%08x\n", status, irq_mask, ireg); | 357 | "0x%08x 0x%08x 0x%08x\n", status, irq_mask, ireg); |
| 316 | pr_debug_status(status); | 358 | pr_debug_status(status); |
| 317 | 359 | ||
| @@ -363,16 +405,265 @@ out: | |||
| 363 | return IRQ_HANDLED; | 405 | return IRQ_HANDLED; |
| 364 | } | 406 | } |
| 365 | 407 | ||
| 408 | #ifdef CONFIG_TMIO_MMC_DMA | ||
| 409 | static void tmio_mmc_enable_dma(struct tmio_mmc_host *host, bool enable) | ||
| 410 | { | ||
| 411 | #if defined(CONFIG_SUPERH) || defined(CONFIG_ARCH_SHMOBILE) | ||
| 412 | /* Switch DMA mode on or off - SuperH specific? */ | ||
| 413 | sd_ctrl_write16(host, 0xd8, enable ? 2 : 0); | ||
| 414 | #endif | ||
| 415 | } | ||
| 416 | |||
| 417 | static void tmio_dma_complete(void *arg) | ||
| 418 | { | ||
| 419 | struct tmio_mmc_host *host = arg; | ||
| 420 | |||
| 421 | dev_dbg(&host->pdev->dev, "Command completed\n"); | ||
| 422 | |||
| 423 | if (!host->data) | ||
| 424 | dev_warn(&host->pdev->dev, "NULL data in DMA completion!\n"); | ||
| 425 | else | ||
| 426 | enable_mmc_irqs(host, TMIO_STAT_DATAEND); | ||
| 427 | } | ||
| 428 | |||
| 429 | static int tmio_mmc_start_dma_rx(struct tmio_mmc_host *host) | ||
| 430 | { | ||
| 431 | struct scatterlist *sg = host->sg_ptr; | ||
| 432 | struct dma_async_tx_descriptor *desc = NULL; | ||
| 433 | struct dma_chan *chan = host->chan_rx; | ||
| 434 | int ret; | ||
| 435 | |||
| 436 | ret = dma_map_sg(&host->pdev->dev, sg, host->sg_len, DMA_FROM_DEVICE); | ||
| 437 | if (ret > 0) { | ||
| 438 | host->dma_sglen = ret; | ||
| 439 | desc = chan->device->device_prep_slave_sg(chan, sg, ret, | ||
| 440 | DMA_FROM_DEVICE, DMA_PREP_INTERRUPT | DMA_CTRL_ACK); | ||
| 441 | } | ||
| 442 | |||
| 443 | if (desc) { | ||
| 444 | host->desc = desc; | ||
| 445 | desc->callback = tmio_dma_complete; | ||
| 446 | desc->callback_param = host; | ||
| 447 | host->cookie = desc->tx_submit(desc); | ||
| 448 | if (host->cookie < 0) { | ||
| 449 | host->desc = NULL; | ||
| 450 | ret = host->cookie; | ||
| 451 | } else { | ||
| 452 | chan->device->device_issue_pending(chan); | ||
| 453 | } | ||
| 454 | } | ||
| 455 | dev_dbg(&host->pdev->dev, "%s(): mapped %d -> %d, cookie %d, rq %p\n", | ||
| 456 | __func__, host->sg_len, ret, host->cookie, host->mrq); | ||
| 457 | |||
| 458 | if (!host->desc) { | ||
| 459 | /* DMA failed, fall back to PIO */ | ||
| 460 | if (ret >= 0) | ||
| 461 | ret = -EIO; | ||
| 462 | host->chan_rx = NULL; | ||
| 463 | dma_release_channel(chan); | ||
| 464 | /* Free the Tx channel too */ | ||
| 465 | chan = host->chan_tx; | ||
| 466 | if (chan) { | ||
| 467 | host->chan_tx = NULL; | ||
| 468 | dma_release_channel(chan); | ||
| 469 | } | ||
| 470 | dev_warn(&host->pdev->dev, | ||
| 471 | "DMA failed: %d, falling back to PIO\n", ret); | ||
| 472 | tmio_mmc_enable_dma(host, false); | ||
| 473 | reset(host); | ||
| 474 | /* Fail this request, let above layers recover */ | ||
| 475 | host->mrq->cmd->error = ret; | ||
| 476 | tmio_mmc_finish_request(host); | ||
| 477 | } | ||
| 478 | |||
| 479 | dev_dbg(&host->pdev->dev, "%s(): desc %p, cookie %d, sg[%d]\n", __func__, | ||
| 480 | desc, host->cookie, host->sg_len); | ||
| 481 | |||
| 482 | return ret > 0 ? 0 : ret; | ||
| 483 | } | ||
| 484 | |||
| 485 | static int tmio_mmc_start_dma_tx(struct tmio_mmc_host *host) | ||
| 486 | { | ||
| 487 | struct scatterlist *sg = host->sg_ptr; | ||
| 488 | struct dma_async_tx_descriptor *desc = NULL; | ||
| 489 | struct dma_chan *chan = host->chan_tx; | ||
| 490 | int ret; | ||
| 491 | |||
| 492 | ret = dma_map_sg(&host->pdev->dev, sg, host->sg_len, DMA_TO_DEVICE); | ||
| 493 | if (ret > 0) { | ||
| 494 | host->dma_sglen = ret; | ||
| 495 | desc = chan->device->device_prep_slave_sg(chan, sg, ret, | ||
| 496 | DMA_TO_DEVICE, DMA_PREP_INTERRUPT | DMA_CTRL_ACK); | ||
| 497 | } | ||
| 498 | |||
| 499 | if (desc) { | ||
| 500 | host->desc = desc; | ||
| 501 | desc->callback = tmio_dma_complete; | ||
| 502 | desc->callback_param = host; | ||
| 503 | host->cookie = desc->tx_submit(desc); | ||
| 504 | if (host->cookie < 0) { | ||
| 505 | host->desc = NULL; | ||
| 506 | ret = host->cookie; | ||
| 507 | } | ||
| 508 | } | ||
| 509 | dev_dbg(&host->pdev->dev, "%s(): mapped %d -> %d, cookie %d, rq %p\n", | ||
| 510 | __func__, host->sg_len, ret, host->cookie, host->mrq); | ||
| 511 | |||
| 512 | if (!host->desc) { | ||
| 513 | /* DMA failed, fall back to PIO */ | ||
| 514 | if (ret >= 0) | ||
| 515 | ret = -EIO; | ||
| 516 | host->chan_tx = NULL; | ||
| 517 | dma_release_channel(chan); | ||
| 518 | /* Free the Rx channel too */ | ||
| 519 | chan = host->chan_rx; | ||
| 520 | if (chan) { | ||
| 521 | host->chan_rx = NULL; | ||
| 522 | dma_release_channel(chan); | ||
| 523 | } | ||
| 524 | dev_warn(&host->pdev->dev, | ||
| 525 | "DMA failed: %d, falling back to PIO\n", ret); | ||
| 526 | tmio_mmc_enable_dma(host, false); | ||
| 527 | reset(host); | ||
| 528 | /* Fail this request, let above layers recover */ | ||
| 529 | host->mrq->cmd->error = ret; | ||
| 530 | tmio_mmc_finish_request(host); | ||
| 531 | } | ||
| 532 | |||
| 533 | dev_dbg(&host->pdev->dev, "%s(): desc %p, cookie %d\n", __func__, | ||
| 534 | desc, host->cookie); | ||
| 535 | |||
| 536 | return ret > 0 ? 0 : ret; | ||
| 537 | } | ||
| 538 | |||
| 539 | static int tmio_mmc_start_dma(struct tmio_mmc_host *host, | ||
| 540 | struct mmc_data *data) | ||
| 541 | { | ||
| 542 | if (data->flags & MMC_DATA_READ) { | ||
| 543 | if (host->chan_rx) | ||
| 544 | return tmio_mmc_start_dma_rx(host); | ||
| 545 | } else { | ||
| 546 | if (host->chan_tx) | ||
| 547 | return tmio_mmc_start_dma_tx(host); | ||
| 548 | } | ||
| 549 | |||
| 550 | return 0; | ||
| 551 | } | ||
| 552 | |||
| 553 | static void tmio_issue_tasklet_fn(unsigned long priv) | ||
| 554 | { | ||
| 555 | struct tmio_mmc_host *host = (struct tmio_mmc_host *)priv; | ||
| 556 | struct dma_chan *chan = host->chan_tx; | ||
| 557 | |||
| 558 | chan->device->device_issue_pending(chan); | ||
| 559 | } | ||
| 560 | |||
| 561 | static void tmio_tasklet_fn(unsigned long arg) | ||
| 562 | { | ||
| 563 | struct tmio_mmc_host *host = (struct tmio_mmc_host *)arg; | ||
| 564 | |||
| 565 | if (host->data->flags & MMC_DATA_READ) | ||
| 566 | dma_unmap_sg(&host->pdev->dev, host->sg_ptr, host->dma_sglen, | ||
| 567 | DMA_FROM_DEVICE); | ||
| 568 | else | ||
| 569 | dma_unmap_sg(&host->pdev->dev, host->sg_ptr, host->dma_sglen, | ||
| 570 | DMA_TO_DEVICE); | ||
| 571 | |||
| 572 | tmio_mmc_do_data_irq(host); | ||
| 573 | } | ||
| 574 | |||
| 575 | /* It might be necessary to make filter MFD specific */ | ||
| 576 | static bool tmio_mmc_filter(struct dma_chan *chan, void *arg) | ||
| 577 | { | ||
| 578 | dev_dbg(chan->device->dev, "%s: slave data %p\n", __func__, arg); | ||
| 579 | chan->private = arg; | ||
| 580 | return true; | ||
| 581 | } | ||
| 582 | |||
| 583 | static void tmio_mmc_request_dma(struct tmio_mmc_host *host, | ||
| 584 | struct tmio_mmc_data *pdata) | ||
| 585 | { | ||
| 586 | host->cookie = -EINVAL; | ||
| 587 | host->desc = NULL; | ||
| 588 | |||
| 589 | /* We can only either use DMA for both Tx and Rx or not use it at all */ | ||
| 590 | if (pdata->dma) { | ||
| 591 | dma_cap_mask_t mask; | ||
| 592 | |||
| 593 | dma_cap_zero(mask); | ||
| 594 | dma_cap_set(DMA_SLAVE, mask); | ||
| 595 | |||
| 596 | host->chan_tx = dma_request_channel(mask, tmio_mmc_filter, | ||
| 597 | pdata->dma->chan_priv_tx); | ||
| 598 | dev_dbg(&host->pdev->dev, "%s: TX: got channel %p\n", __func__, | ||
| 599 | host->chan_tx); | ||
| 600 | |||
| 601 | if (!host->chan_tx) | ||
| 602 | return; | ||
| 603 | |||
| 604 | host->chan_rx = dma_request_channel(mask, tmio_mmc_filter, | ||
| 605 | pdata->dma->chan_priv_rx); | ||
| 606 | dev_dbg(&host->pdev->dev, "%s: RX: got channel %p\n", __func__, | ||
| 607 | host->chan_rx); | ||
| 608 | |||
| 609 | if (!host->chan_rx) { | ||
| 610 | dma_release_channel(host->chan_tx); | ||
| 611 | host->chan_tx = NULL; | ||
| 612 | return; | ||
| 613 | } | ||
| 614 | |||
| 615 | tasklet_init(&host->dma_complete, tmio_tasklet_fn, (unsigned long)host); | ||
| 616 | tasklet_init(&host->dma_issue, tmio_issue_tasklet_fn, (unsigned long)host); | ||
| 617 | |||
| 618 | tmio_mmc_enable_dma(host, true); | ||
| 619 | } | ||
| 620 | } | ||
| 621 | |||
| 622 | static void tmio_mmc_release_dma(struct tmio_mmc_host *host) | ||
| 623 | { | ||
| 624 | if (host->chan_tx) { | ||
| 625 | struct dma_chan *chan = host->chan_tx; | ||
| 626 | host->chan_tx = NULL; | ||
| 627 | dma_release_channel(chan); | ||
| 628 | } | ||
| 629 | if (host->chan_rx) { | ||
| 630 | struct dma_chan *chan = host->chan_rx; | ||
| 631 | host->chan_rx = NULL; | ||
| 632 | dma_release_channel(chan); | ||
| 633 | } | ||
| 634 | |||
| 635 | host->cookie = -EINVAL; | ||
| 636 | host->desc = NULL; | ||
| 637 | } | ||
| 638 | #else | ||
| 639 | static int tmio_mmc_start_dma(struct tmio_mmc_host *host, | ||
| 640 | struct mmc_data *data) | ||
| 641 | { | ||
| 642 | return 0; | ||
| 643 | } | ||
| 644 | |||
| 645 | static void tmio_mmc_request_dma(struct tmio_mmc_host *host, | ||
| 646 | struct tmio_mmc_data *pdata) | ||
| 647 | { | ||
| 648 | host->chan_tx = NULL; | ||
| 649 | host->chan_rx = NULL; | ||
| 650 | } | ||
| 651 | |||
| 652 | static void tmio_mmc_release_dma(struct tmio_mmc_host *host) | ||
| 653 | { | ||
| 654 | } | ||
| 655 | #endif | ||
| 656 | |||
| 366 | static int tmio_mmc_start_data(struct tmio_mmc_host *host, | 657 | static int tmio_mmc_start_data(struct tmio_mmc_host *host, |
| 367 | struct mmc_data *data) | 658 | struct mmc_data *data) |
| 368 | { | 659 | { |
| 369 | pr_debug("setup data transfer: blocksize %08x nr_blocks %d\n", | 660 | pr_debug("setup data transfer: blocksize %08x nr_blocks %d\n", |
| 370 | data->blksz, data->blocks); | 661 | data->blksz, data->blocks); |
| 371 | 662 | ||
| 372 | /* Hardware cannot perform 1 and 2 byte requests in 4 bit mode */ | 663 | /* Hardware cannot perform 1 and 2 byte requests in 4 bit mode */ |
| 373 | if (data->blksz < 4 && host->mmc->ios.bus_width == MMC_BUS_WIDTH_4) { | 664 | if (data->blksz < 4 && host->mmc->ios.bus_width == MMC_BUS_WIDTH_4) { |
| 374 | printk(KERN_ERR "%s: %d byte block unsupported in 4 bit mode\n", | 665 | pr_err("%s: %d byte block unsupported in 4 bit mode\n", |
| 375 | mmc_hostname(host->mmc), data->blksz); | 666 | mmc_hostname(host->mmc), data->blksz); |
| 376 | return -EINVAL; | 667 | return -EINVAL; |
| 377 | } | 668 | } |
| 378 | 669 | ||
| @@ -383,7 +674,7 @@ static int tmio_mmc_start_data(struct tmio_mmc_host *host, | |||
| 383 | sd_ctrl_write16(host, CTL_SD_XFER_LEN, data->blksz); | 674 | sd_ctrl_write16(host, CTL_SD_XFER_LEN, data->blksz); |
| 384 | sd_ctrl_write16(host, CTL_XFER_BLK_COUNT, data->blocks); | 675 | sd_ctrl_write16(host, CTL_XFER_BLK_COUNT, data->blocks); |
| 385 | 676 | ||
| 386 | return 0; | 677 | return tmio_mmc_start_dma(host, data); |
| 387 | } | 678 | } |
| 388 | 679 | ||
| 389 | /* Process requests from the MMC layer */ | 680 | /* Process requests from the MMC layer */ |
| @@ -404,7 +695,6 @@ static void tmio_mmc_request(struct mmc_host *mmc, struct mmc_request *mrq) | |||
| 404 | } | 695 | } |
| 405 | 696 | ||
| 406 | ret = tmio_mmc_start_command(host, mrq->cmd); | 697 | ret = tmio_mmc_start_command(host, mrq->cmd); |
| 407 | |||
| 408 | if (!ret) | 698 | if (!ret) |
| 409 | return; | 699 | return; |
| 410 | 700 | ||
| @@ -458,11 +748,14 @@ static void tmio_mmc_set_ios(struct mmc_host *mmc, struct mmc_ios *ios) | |||
| 458 | static int tmio_mmc_get_ro(struct mmc_host *mmc) | 748 | static int tmio_mmc_get_ro(struct mmc_host *mmc) |
| 459 | { | 749 | { |
| 460 | struct tmio_mmc_host *host = mmc_priv(mmc); | 750 | struct tmio_mmc_host *host = mmc_priv(mmc); |
| 751 | struct mfd_cell *cell = host->pdev->dev.platform_data; | ||
| 752 | struct tmio_mmc_data *pdata = cell->driver_data; | ||
| 461 | 753 | ||
| 462 | return (sd_ctrl_read16(host, CTL_STATUS) & TMIO_STAT_WRPROTECT) ? 0 : 1; | 754 | return ((pdata->flags & TMIO_MMC_WRPROTECT_DISABLE) || |
| 755 | (sd_ctrl_read32(host, CTL_STATUS) & TMIO_STAT_WRPROTECT)) ? 0 : 1; | ||
| 463 | } | 756 | } |
| 464 | 757 | ||
| 465 | static struct mmc_host_ops tmio_mmc_ops = { | 758 | static const struct mmc_host_ops tmio_mmc_ops = { |
| 466 | .request = tmio_mmc_request, | 759 | .request = tmio_mmc_request, |
| 467 | .set_ios = tmio_mmc_set_ios, | 760 | .set_ios = tmio_mmc_set_ios, |
| 468 | .get_ro = tmio_mmc_get_ro, | 761 | .get_ro = tmio_mmc_get_ro, |
| @@ -515,6 +808,7 @@ static int __devinit tmio_mmc_probe(struct platform_device *dev) | |||
| 515 | struct tmio_mmc_host *host; | 808 | struct tmio_mmc_host *host; |
| 516 | struct mmc_host *mmc; | 809 | struct mmc_host *mmc; |
| 517 | int ret = -EINVAL; | 810 | int ret = -EINVAL; |
| 811 | u32 irq_mask = TMIO_MASK_CMD; | ||
| 518 | 812 | ||
| 519 | if (dev->num_resources != 2) | 813 | if (dev->num_resources != 2) |
| 520 | goto out; | 814 | goto out; |
| @@ -553,7 +847,10 @@ static int __devinit tmio_mmc_probe(struct platform_device *dev) | |||
| 553 | mmc->caps |= pdata->capabilities; | 847 | mmc->caps |= pdata->capabilities; |
| 554 | mmc->f_max = pdata->hclk; | 848 | mmc->f_max = pdata->hclk; |
| 555 | mmc->f_min = mmc->f_max / 512; | 849 | mmc->f_min = mmc->f_max / 512; |
| 556 | mmc->ocr_avail = MMC_VDD_32_33 | MMC_VDD_33_34; | 850 | if (pdata->ocr_mask) |
| 851 | mmc->ocr_avail = pdata->ocr_mask; | ||
| 852 | else | ||
| 853 | mmc->ocr_avail = MMC_VDD_32_33 | MMC_VDD_33_34; | ||
| 557 | 854 | ||
| 558 | /* Tell the MFD core we are ready to be enabled */ | 855 | /* Tell the MFD core we are ready to be enabled */ |
| 559 | if (cell->enable) { | 856 | if (cell->enable) { |
| @@ -578,13 +875,20 @@ static int __devinit tmio_mmc_probe(struct platform_device *dev) | |||
| 578 | if (ret) | 875 | if (ret) |
| 579 | goto cell_disable; | 876 | goto cell_disable; |
| 580 | 877 | ||
| 878 | /* See if we also get DMA */ | ||
| 879 | tmio_mmc_request_dma(host, pdata); | ||
| 880 | |||
| 581 | mmc_add_host(mmc); | 881 | mmc_add_host(mmc); |
| 582 | 882 | ||
| 583 | printk(KERN_INFO "%s at 0x%08lx irq %d\n", mmc_hostname(host->mmc), | 883 | pr_info("%s at 0x%08lx irq %d\n", mmc_hostname(host->mmc), |
| 584 | (unsigned long)host->ctl, host->irq); | 884 | (unsigned long)host->ctl, host->irq); |
| 585 | 885 | ||
| 586 | /* Unmask the IRQs we want to know about */ | 886 | /* Unmask the IRQs we want to know about */ |
| 587 | enable_mmc_irqs(host, TMIO_MASK_IRQ); | 887 | if (!host->chan_rx) |
| 888 | irq_mask |= TMIO_MASK_READOP; | ||
| 889 | if (!host->chan_tx) | ||
| 890 | irq_mask |= TMIO_MASK_WRITEOP; | ||
| 891 | enable_mmc_irqs(host, irq_mask); | ||
| 588 | 892 | ||
| 589 | return 0; | 893 | return 0; |
| 590 | 894 | ||
| @@ -609,6 +913,7 @@ static int __devexit tmio_mmc_remove(struct platform_device *dev) | |||
| 609 | if (mmc) { | 913 | if (mmc) { |
| 610 | struct tmio_mmc_host *host = mmc_priv(mmc); | 914 | struct tmio_mmc_host *host = mmc_priv(mmc); |
| 611 | mmc_remove_host(mmc); | 915 | mmc_remove_host(mmc); |
| 916 | tmio_mmc_release_dma(host); | ||
| 612 | free_irq(host->irq, host); | 917 | free_irq(host->irq, host); |
| 613 | if (cell->disable) | 918 | if (cell->disable) |
| 614 | cell->disable(dev); | 919 | cell->disable(dev); |
diff --git a/drivers/mmc/host/tmio_mmc.h b/drivers/mmc/host/tmio_mmc.h index dafecfbcd91a..64f7d5dfc106 100644 --- a/drivers/mmc/host/tmio_mmc.h +++ b/drivers/mmc/host/tmio_mmc.h | |||
| @@ -10,6 +10,8 @@ | |||
| 10 | */ | 10 | */ |
| 11 | 11 | ||
| 12 | #include <linux/highmem.h> | 12 | #include <linux/highmem.h> |
| 13 | #include <linux/interrupt.h> | ||
| 14 | #include <linux/dmaengine.h> | ||
| 13 | 15 | ||
| 14 | #define CTL_SD_CMD 0x00 | 16 | #define CTL_SD_CMD 0x00 |
| 15 | #define CTL_ARG_REG 0x04 | 17 | #define CTL_ARG_REG 0x04 |
| @@ -106,6 +108,17 @@ struct tmio_mmc_host { | |||
| 106 | unsigned int sg_off; | 108 | unsigned int sg_off; |
| 107 | 109 | ||
| 108 | struct platform_device *pdev; | 110 | struct platform_device *pdev; |
| 111 | |||
| 112 | /* DMA support */ | ||
| 113 | struct dma_chan *chan_rx; | ||
| 114 | struct dma_chan *chan_tx; | ||
| 115 | struct tasklet_struct dma_complete; | ||
| 116 | struct tasklet_struct dma_issue; | ||
| 117 | #ifdef CONFIG_TMIO_MMC_DMA | ||
| 118 | struct dma_async_tx_descriptor *desc; | ||
| 119 | unsigned int dma_sglen; | ||
| 120 | dma_cookie_t cookie; | ||
| 121 | #endif | ||
| 109 | }; | 122 | }; |
| 110 | 123 | ||
| 111 | #include <linux/io.h> | 124 | #include <linux/io.h> |
diff --git a/drivers/serial/sh-sci.c b/drivers/serial/sh-sci.c index 4f73fb756745..5f90fcd7d107 100644 --- a/drivers/serial/sh-sci.c +++ b/drivers/serial/sh-sci.c | |||
| @@ -1004,8 +1004,9 @@ static void sci_rx_dma_release(struct sci_port *s, bool enable_pio) | |||
| 1004 | s->chan_rx = NULL; | 1004 | s->chan_rx = NULL; |
| 1005 | s->cookie_rx[0] = s->cookie_rx[1] = -EINVAL; | 1005 | s->cookie_rx[0] = s->cookie_rx[1] = -EINVAL; |
| 1006 | dma_release_channel(chan); | 1006 | dma_release_channel(chan); |
| 1007 | dma_free_coherent(port->dev, s->buf_len_rx * 2, | 1007 | if (sg_dma_address(&s->sg_rx[0])) |
| 1008 | sg_virt(&s->sg_rx[0]), sg_dma_address(&s->sg_rx[0])); | 1008 | dma_free_coherent(port->dev, s->buf_len_rx * 2, |
| 1009 | sg_virt(&s->sg_rx[0]), sg_dma_address(&s->sg_rx[0])); | ||
| 1009 | if (enable_pio) | 1010 | if (enable_pio) |
| 1010 | sci_start_rx(port); | 1011 | sci_start_rx(port); |
| 1011 | } | 1012 | } |
diff --git a/include/linux/mfd/sh_mobile_sdhi.h b/include/linux/mfd/sh_mobile_sdhi.h index 3bcd7163485c..49067802a6d7 100644 --- a/include/linux/mfd/sh_mobile_sdhi.h +++ b/include/linux/mfd/sh_mobile_sdhi.h | |||
| @@ -1,7 +1,13 @@ | |||
| 1 | #ifndef __SH_MOBILE_SDHI_H__ | 1 | #ifndef __SH_MOBILE_SDHI_H__ |
| 2 | #define __SH_MOBILE_SDHI_H__ | 2 | #define __SH_MOBILE_SDHI_H__ |
| 3 | 3 | ||
| 4 | #include <linux/types.h> | ||
| 5 | |||
| 4 | struct sh_mobile_sdhi_info { | 6 | struct sh_mobile_sdhi_info { |
| 7 | int dma_slave_tx; | ||
| 8 | int dma_slave_rx; | ||
| 9 | unsigned long tmio_flags; | ||
| 10 | u32 tmio_ocr_mask; /* available MMC voltages */ | ||
| 5 | void (*set_pwr)(struct platform_device *pdev, int state); | 11 | void (*set_pwr)(struct platform_device *pdev, int state); |
| 6 | }; | 12 | }; |
| 7 | 13 | ||
diff --git a/include/linux/mfd/tmio.h b/include/linux/mfd/tmio.h index c3f7dff8effc..f07425bc3dcd 100644 --- a/include/linux/mfd/tmio.h +++ b/include/linux/mfd/tmio.h | |||
| @@ -50,17 +50,28 @@ | |||
| 50 | tmio_iowrite16((val) >> 16, (base) + ((reg + 2) << (shift))); \ | 50 | tmio_iowrite16((val) >> 16, (base) + ((reg + 2) << (shift))); \ |
| 51 | } while (0) | 51 | } while (0) |
| 52 | 52 | ||
| 53 | /* tmio MMC platform flags */ | ||
| 54 | #define TMIO_MMC_WRPROTECT_DISABLE (1 << 0) | ||
| 55 | |||
| 53 | int tmio_core_mmc_enable(void __iomem *cnf, int shift, unsigned long base); | 56 | int tmio_core_mmc_enable(void __iomem *cnf, int shift, unsigned long base); |
| 54 | int tmio_core_mmc_resume(void __iomem *cnf, int shift, unsigned long base); | 57 | int tmio_core_mmc_resume(void __iomem *cnf, int shift, unsigned long base); |
| 55 | void tmio_core_mmc_pwr(void __iomem *cnf, int shift, int state); | 58 | void tmio_core_mmc_pwr(void __iomem *cnf, int shift, int state); |
| 56 | void tmio_core_mmc_clk_div(void __iomem *cnf, int shift, int state); | 59 | void tmio_core_mmc_clk_div(void __iomem *cnf, int shift, int state); |
| 57 | 60 | ||
| 61 | struct tmio_mmc_dma { | ||
| 62 | void *chan_priv_tx; | ||
| 63 | void *chan_priv_rx; | ||
| 64 | }; | ||
| 65 | |||
| 58 | /* | 66 | /* |
| 59 | * data for the MMC controller | 67 | * data for the MMC controller |
| 60 | */ | 68 | */ |
| 61 | struct tmio_mmc_data { | 69 | struct tmio_mmc_data { |
| 62 | unsigned int hclk; | 70 | unsigned int hclk; |
| 63 | unsigned long capabilities; | 71 | unsigned long capabilities; |
| 72 | unsigned long flags; | ||
| 73 | u32 ocr_mask; /* available voltages */ | ||
| 74 | struct tmio_mmc_dma *dma; | ||
| 64 | void (*set_pwr)(struct platform_device *host, int state); | 75 | void (*set_pwr)(struct platform_device *host, int state); |
| 65 | void (*set_clk_div)(struct platform_device *host, int state); | 76 | void (*set_clk_div)(struct platform_device *host, int state); |
| 66 | }; | 77 | }; |
diff --git a/sound/soc/sh/siu.h b/sound/soc/sh/siu.h index c0bfab8fed3d..492b1cae24cc 100644 --- a/sound/soc/sh/siu.h +++ b/sound/soc/sh/siu.h | |||
| @@ -71,8 +71,7 @@ struct siu_firmware { | |||
| 71 | #include <linux/dmaengine.h> | 71 | #include <linux/dmaengine.h> |
| 72 | #include <linux/interrupt.h> | 72 | #include <linux/interrupt.h> |
| 73 | #include <linux/io.h> | 73 | #include <linux/io.h> |
| 74 | 74 | #include <linux/sh_dma.h> | |
| 75 | #include <asm/dmaengine.h> | ||
| 76 | 75 | ||
| 77 | #include <sound/core.h> | 76 | #include <sound/core.h> |
| 78 | #include <sound/pcm.h> | 77 | #include <sound/pcm.h> |
diff --git a/sound/soc/sh/siu_pcm.c b/sound/soc/sh/siu_pcm.c index 8f85719212f9..36170be15aa7 100644 --- a/sound/soc/sh/siu_pcm.c +++ b/sound/soc/sh/siu_pcm.c | |||
| @@ -31,7 +31,6 @@ | |||
| 31 | #include <sound/pcm_params.h> | 31 | #include <sound/pcm_params.h> |
| 32 | #include <sound/soc-dai.h> | 32 | #include <sound/soc-dai.h> |
| 33 | 33 | ||
| 34 | #include <asm/dmaengine.h> | ||
| 35 | #include <asm/siu.h> | 34 | #include <asm/siu.h> |
| 36 | 35 | ||
| 37 | #include "siu.h" | 36 | #include "siu.h" |
| @@ -358,13 +357,13 @@ static int siu_pcm_open(struct snd_pcm_substream *ss) | |||
| 358 | if (ss->stream == SNDRV_PCM_STREAM_PLAYBACK) { | 357 | if (ss->stream == SNDRV_PCM_STREAM_PLAYBACK) { |
| 359 | siu_stream = &port_info->playback; | 358 | siu_stream = &port_info->playback; |
| 360 | param = &siu_stream->param; | 359 | param = &siu_stream->param; |
| 361 | param->slave_id = port ? SHDMA_SLAVE_SIUB_TX : | 360 | param->slave_id = port ? pdata->dma_slave_tx_b : |
| 362 | SHDMA_SLAVE_SIUA_TX; | 361 | pdata->dma_slave_tx_a; |
| 363 | } else { | 362 | } else { |
| 364 | siu_stream = &port_info->capture; | 363 | siu_stream = &port_info->capture; |
| 365 | param = &siu_stream->param; | 364 | param = &siu_stream->param; |
| 366 | param->slave_id = port ? SHDMA_SLAVE_SIUB_RX : | 365 | param->slave_id = port ? pdata->dma_slave_rx_b : |
| 367 | SHDMA_SLAVE_SIUA_RX; | 366 | pdata->dma_slave_rx_a; |
| 368 | } | 367 | } |
| 369 | 368 | ||
| 370 | param->dma_dev = pdata->dma_dev; | 369 | param->dma_dev = pdata->dma_dev; |
