aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--arch/sh/boards/mach-ecovec24/setup.c87
-rw-r--r--arch/sh/boards/mach-kfr2r09/setup.c11
-rw-r--r--arch/sh/boards/mach-migor/setup.c9
-rw-r--r--arch/sh/boards/mach-se/7724/setup.c107
-rw-r--r--arch/sh/configs/sh7785lcr_32bit_defconfig273
-rw-r--r--arch/sh/include/asm/dmaengine.h34
-rw-r--r--arch/sh/include/asm/siu.h2
-rw-r--r--arch/sh/include/cpu-sh4/cpu/sh7722.h15
-rw-r--r--arch/sh/include/cpu-sh4/cpu/sh7724.h19
-rw-r--r--arch/sh/kernel/cpu/sh4a/clock-sh7786.c1
-rw-r--r--arch/sh/kernel/cpu/sh4a/setup-sh7722.c11
-rw-r--r--arch/sh/kernel/cpu/sh4a/setup-sh7724.c88
-rw-r--r--arch/sh/kernel/cpu/sh4a/setup-sh7780.c3
-rw-r--r--arch/sh/kernel/cpu/sh4a/setup-sh7785.c2
-rw-r--r--arch/sh/kernel/cpu/sh4a/setup-sh7786.c2
-rw-r--r--arch/sh/kernel/dwarf.c4
-rw-r--r--arch/sh/lib/strlen.S2
-rw-r--r--drivers/dma/shdma.c5
-rw-r--r--drivers/mfd/Kconfig6
-rw-r--r--drivers/mfd/sh_mobile_sdhi.c28
-rw-r--r--drivers/mmc/host/tmio_mmc.c367
-rw-r--r--drivers/mmc/host/tmio_mmc.h13
-rw-r--r--drivers/serial/sh-sci.c5
-rw-r--r--include/linux/mfd/sh_mobile_sdhi.h6
-rw-r--r--include/linux/mfd/tmio.h11
-rw-r--r--sound/soc/sh/siu.h3
-rw-r--r--sound/soc/sh/siu_pcm.c9
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
444static struct sh_mobile_sdhi_info sdhi0_info = { 445static 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
448static struct resource sdhi0_resources[] = { 451static struct resource sdhi0_resources[] = {
@@ -478,7 +481,9 @@ static void sdhi1_set_pwr(struct platform_device *pdev, int state)
478} 481}
479 482
480static struct sh_mobile_sdhi_info sdhi1_info = { 483static 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
484static struct resource sdhi1_resources[] = { 489static 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
780struct ak881x_pdata ak881x_pdata = {
781 .flags = AK881X_IF_MODE_SLAVE,
782};
783
784static struct i2c_board_info ak8813 = {
785 I2C_BOARD_INFO("ak8813", 0x20),
786 .platform_data = &ak881x_pdata,
787};
788
789struct 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
797static 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
809static 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
772static struct platform_device *ecovec_devices[] __initdata = { 822static 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
361static 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
359static struct platform_device kfr2r09_sh_sdhi0_device = { 367static 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
406static 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
405static struct platform_device sdhi_cn9_device = { 411static 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
466static 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
465static struct platform_device sdhi0_cn7_device = { 471static 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
497static 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
488static struct platform_device sdhi1_cn8_device = { 502static 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
538struct ak881x_pdata ak881x_pdata = {
539 .flags = AK881X_IF_MODE_SLAVE,
540};
541
542static 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
548struct 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
556static 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
568static 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
518static struct platform_device *ms7724se_devices[] __initdata = { 581static 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#
6CONFIG_SUPERH=y 6CONFIG_SUPERH=y
7CONFIG_SUPERH32=y 7CONFIG_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
77CONFIG_IKCONFIG=y 77CONFIG_IKCONFIG=y
78CONFIG_IKCONFIG_PROC=y 78CONFIG_IKCONFIG_PROC=y
79CONFIG_LOG_BUF_SHIFT=14 79CONFIG_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#
112CONFIG_PERF_EVENTS=y 112CONFIG_PERF_EVENTS=y
113CONFIG_PERF_COUNTERS=y 113CONFIG_PERF_COUNTERS=y
114# CONFIG_DEBUG_PERF_USE_VMALLOC is not set
114CONFIG_VM_EVENT_COUNTERS=y 115CONFIG_VM_EVENT_COUNTERS=y
115CONFIG_PCI_QUIRKS=y 116CONFIG_PCI_QUIRKS=y
116CONFIG_COMPAT_BRK=y 117# CONFIG_COMPAT_BRK is not set
117CONFIG_SLAB=y 118CONFIG_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
120CONFIG_PROFILING=y 121CONFIG_PROFILING=y
121CONFIG_TRACEPOINTS=y 122# CONFIG_OPROFILE is not set
122CONFIG_OPROFILE=y
123CONFIG_HAVE_OPROFILE=y 123CONFIG_HAVE_OPROFILE=y
124CONFIG_KPROBES=y 124# CONFIG_KPROBES is not set
125CONFIG_KRETPROBES=y
126CONFIG_HAVE_KPROBES=y 125CONFIG_HAVE_KPROBES=y
127CONFIG_HAVE_KRETPROBES=y 126CONFIG_HAVE_KRETPROBES=y
128CONFIG_HAVE_ARCH_TRACEHOOK=y 127CONFIG_HAVE_ARCH_TRACEHOOK=y
@@ -130,6 +129,7 @@ CONFIG_HAVE_DMA_ATTRS=y
130CONFIG_HAVE_CLK=y 129CONFIG_HAVE_CLK=y
131CONFIG_HAVE_DMA_API_DEBUG=y 130CONFIG_HAVE_DMA_API_DEBUG=y
132CONFIG_HAVE_HW_BREAKPOINT=y 131CONFIG_HAVE_HW_BREAKPOINT=y
132CONFIG_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
243CONFIG_FORCE_MAX_ZONEORDER=11 243CONFIG_FORCE_MAX_ZONEORDER=11
244CONFIG_MEMORY_START=0x40000000 244CONFIG_MEMORY_START=0x40000000
245CONFIG_MEMORY_SIZE=0x20000000 245CONFIG_MEMORY_SIZE=0x20000000
246CONFIG_29BIT=y 246# CONFIG_29BIT is not set
247# CONFIG_PMB is not set 247CONFIG_32BIT=y
248CONFIG_PMB=y
248CONFIG_X2TLB=y 249CONFIG_X2TLB=y
249CONFIG_VSYSCALL=y 250CONFIG_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
265CONFIG_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 268CONFIG_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
276CONFIG_HAVE_MEMORY_PRESENT=y 277CONFIG_HAVE_MEMORY_PRESENT=y
277CONFIG_SPARSEMEM_STATIC=y 278CONFIG_SPARSEMEM_STATIC=y
278# CONFIG_MEMORY_HOTPLUG is not set 279# CONFIG_MEMORY_HOTPLUG is not set
279CONFIG_SPLIT_PTLOCK_CPUS=4 280CONFIG_SPLIT_PTLOCK_CPUS=999999
280CONFIG_MIGRATION=y 281CONFIG_MIGRATION=y
281# CONFIG_PHYS_ADDR_T_64BIT is not set 282# CONFIG_PHYS_ADDR_T_64BIT is not set
282CONFIG_ZONE_DMA_FLAG=0 283CONFIG_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
299CONFIG_SH_FPU=y 300CONFIG_SH_FPU=y
300CONFIG_SH_STORE_QUEUES=y 301CONFIG_SH_STORE_QUEUES=y
301# CONFIG_SPECULATIVE_EXECUTION is not set 302CONFIG_SPECULATIVE_EXECUTION=y
302CONFIG_CPU_HAS_INTEVT=y 303CONFIG_CPU_HAS_INTEVT=y
303CONFIG_CPU_HAS_SR_RB=y 304CONFIG_CPU_HAS_SR_RB=y
304CONFIG_CPU_HAS_FPU=y 305CONFIG_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
310CONFIG_SH_SH7785LCR=y 311CONFIG_SH_SH7785LCR=y
311CONFIG_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
372CONFIG_PREEMPT=y 373CONFIG_PREEMPT=y
373CONFIG_GUSA=y 374CONFIG_GUSA=y
374# CONFIG_INTC_USERIMASK is not set 375CONFIG_INTC_USERIMASK=y
375 376
376# 377#
377# Boot options 378# Boot options
@@ -389,6 +390,7 @@ CONFIG_PCI=y
389CONFIG_PCI_DOMAINS=y 390CONFIG_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
393CONFIG_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
515CONFIG_STANDALONE=y 525CONFIG_STANDALONE=y
516CONFIG_PREVENT_FIRMWARE_BUILD=y 526CONFIG_PREVENT_FIRMWARE_BUILD=y
517# CONFIG_FW_LOADER is not set 527CONFIG_FW_LOADER=y
528CONFIG_FIRMWARE_IN_KERNEL=y
529CONFIG_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
520CONFIG_MTD=y 534CONFIG_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
668CONFIG_ATA_VERBOSE_ERROR=y 683CONFIG_ATA_VERBOSE_ERROR=y
669CONFIG_SATA_PMP=y 684CONFIG_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
672CONFIG_ATA_SFF=y 689CONFIG_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
773CONFIG_NET_ETHERNET=y
757CONFIG_MII=y 774CONFIG_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
780CONFIG_NET_VENDOR_3COM=y
781CONFIG_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
758CONFIG_NETDEV_1000=y 802CONFIG_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
836CONFIG_KEYBOARD_ATKBD=y 880CONFIG_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
884CONFIG_VT_HW_CONSOLE_BINDING=y 929CONFIG_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
901CONFIG_SERIAL_CORE_CONSOLE=y 947CONFIG_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
904CONFIG_UNIX98_PTYS=y 952CONFIG_UNIX98_PTYS=y
905CONFIG_DEVPTS_MULTIPLE_INSTANCES=y 953CONFIG_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 1122CONFIG_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#
1098CONFIG_DUMMY_CONSOLE=y 1146CONFIG_DUMMY_CONSOLE=y
1099CONFIG_FRAMEBUFFER_CONSOLE=y 1147CONFIG_FRAMEBUFFER_CONSOLE=y
1100# CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY is not set 1148CONFIG_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
1103CONFIG_FONT_8x8=y 1151CONFIG_FONT_8x8=y
1104CONFIG_FONT_8x16=y 1152CONFIG_FONT_8x16=y
1105CONFIG_LOGO=y 1153CONFIG_LOGO=y
1106# CONFIG_LOGO_LINUX_MONO is not set 1154CONFIG_LOGO_LINUX_MONO=y
1107# CONFIG_LOGO_LINUX_VGA16 is not set 1155CONFIG_LOGO_LINUX_VGA16=y
1108# CONFIG_LOGO_LINUX_CLUT224 is not set 1156CONFIG_LOGO_LINUX_CLUT224=y
1109CONFIG_LOGO_SUPERH_MONO=y 1157CONFIG_LOGO_SUPERH_MONO=y
1110CONFIG_LOGO_SUPERH_VGA16=y 1158CONFIG_LOGO_SUPERH_VGA16=y
1111CONFIG_LOGO_SUPERH_CLUT224=y 1159CONFIG_LOGO_SUPERH_CLUT224=y
@@ -1129,15 +1177,18 @@ CONFIG_SND_SEQ_HRTIMER_DEFAULT=y
1129CONFIG_SND_DYNAMIC_MINORS=y 1177CONFIG_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 1180CONFIG_SND_VERBOSE_PRINTK=y
1133# CONFIG_SND_DEBUG is not set 1181CONFIG_SND_DEBUG=y
1182CONFIG_SND_DEBUG_VERBOSE=y
1183CONFIG_SND_VMASTER=y
1134CONFIG_SND_RAWMIDI_SEQ=y 1184CONFIG_SND_RAWMIDI_SEQ=y
1135CONFIG_SND_OPL3_LIB_SEQ=y 1185CONFIG_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 1188CONFIG_SND_EMU10K1_SEQ=y
1139CONFIG_SND_MPU401_UART=y 1189CONFIG_SND_MPU401_UART=y
1140CONFIG_SND_OPL3_LIB=y 1190CONFIG_SND_OPL3_LIB=y
1191CONFIG_SND_AC97_CODEC=y
1141# CONFIG_SND_DRIVERS is not set 1192# CONFIG_SND_DRIVERS is not set
1142CONFIG_SND_PCI=y 1193CONFIG_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 1226CONFIG_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
1265CONFIG_AC97_BUS=y
1214CONFIG_HID_SUPPORT=y 1266CONFIG_HID_SUPPORT=y
1215CONFIG_HID=y 1267CONFIG_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
1229CONFIG_HID_A4TECH=m 1281# CONFIG_HID_A4TECH is not set
1230CONFIG_HID_APPLE=m 1282# CONFIG_HID_APPLE is not set
1231CONFIG_HID_BELKIN=m 1283# CONFIG_HID_BELKIN is not set
1232CONFIG_HID_CHERRY=m 1284# CONFIG_HID_CANDO is not set
1233CONFIG_HID_CHICONY=m 1285# CONFIG_HID_CHERRY is not set
1234CONFIG_HID_CYPRESS=m 1286# CONFIG_HID_CHICONY is not set
1235CONFIG_HID_DRAGONRISE=m 1287# CONFIG_HID_PRODIKEYS is not set
1236# CONFIG_DRAGONRISE_FF is not set 1288# CONFIG_HID_CYPRESS is not set
1237CONFIG_HID_EZKEY=m 1289# CONFIG_HID_DRAGONRISE is not set
1238CONFIG_HID_KYE=m 1290# CONFIG_HID_EGALAX is not set
1239CONFIG_HID_GYRATION=m 1291# CONFIG_HID_EZKEY is not set
1240CONFIG_HID_TWINHAN=m 1292# CONFIG_HID_KYE is not set
1241CONFIG_HID_KENSINGTON=m 1293# CONFIG_HID_GYRATION is not set
1242CONFIG_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
1246CONFIG_HID_MICROSOFT=m
1247# CONFIG_HID_MOSART is not set 1298# CONFIG_HID_MOSART is not set
1248CONFIG_HID_MONTEREY=m 1299# CONFIG_HID_MONTEREY is not set
1249CONFIG_HID_NTRIG=m 1300# CONFIG_HID_NTRIG is not set
1250# CONFIG_HID_ORTEK is not set 1301# CONFIG_HID_ORTEK is not set
1251CONFIG_HID_PANTHERLORD=m 1302# CONFIG_HID_PANTHERLORD is not set
1252# CONFIG_PANTHERLORD_FF is not set 1303# CONFIG_HID_PETALYNX is not set
1253CONFIG_HID_PETALYNX=m 1304# CONFIG_HID_PICOLCD is not set
1254# CONFIG_HID_QUANTA is not set 1305# CONFIG_HID_QUANTA is not set
1255CONFIG_HID_SAMSUNG=m 1306# CONFIG_HID_ROCCAT_KONE is not set
1256CONFIG_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
1258CONFIG_HID_SUNPLUS=m 1310# CONFIG_HID_SUNPLUS is not set
1259CONFIG_HID_GREENASIA=m 1311# CONFIG_HID_GREENASIA is not set
1260# CONFIG_GREENASIA_FF is not set 1312# CONFIG_HID_SMARTJOYPLUS is not set
1261CONFIG_HID_SMARTJOYPLUS=m 1313# CONFIG_HID_TOPSEED is not set
1262# CONFIG_SMARTJOYPLUS_FF is not set
1263CONFIG_HID_TOPSEED=m
1264# CONFIG_HID_THRUSTMASTER is not set 1314# CONFIG_HID_THRUSTMASTER is not set
1265CONFIG_HID_ZEROPLUS=m 1315# CONFIG_HID_ZEROPLUS is not set
1266# CONFIG_ZEROPLUS_FF is not set 1316# CONFIG_HID_ZYDACRON is not set
1267CONFIG_USB_SUPPORT=y 1317CONFIG_USB_SUPPORT=y
1268CONFIG_USB_ARCH_HAS_HCD=y 1318CONFIG_USB_ARCH_HAS_HCD=y
1269CONFIG_USB_ARCH_HAS_OHCI=y 1319CONFIG_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
1279CONFIG_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
1293CONFIG_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
1468CONFIG_UIO=m 1515CONFIG_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
1654CONFIG_DEBUG_FS=y 1697CONFIG_DEBUG_FS=y
1655# CONFIG_HEADERS_CHECK is not set 1698# CONFIG_HEADERS_CHECK is not set
1656# CONFIG_DEBUG_KERNEL is not set 1699CONFIG_DEBUG_KERNEL=y
1700# CONFIG_DEBUG_SHIRQ is not set
1701CONFIG_DETECT_SOFTLOCKUP=y
1702# CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC is not set
1703CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC_VALUE=0
1704CONFIG_DETECT_HUNG_TASK=y
1705# CONFIG_BOOTPARAM_HUNG_TASK_PANIC is not set
1706CONFIG_BOOTPARAM_HUNG_TASK_PANIC_VALUE=0
1657CONFIG_SCHED_DEBUG=y 1707CONFIG_SCHED_DEBUG=y
1658CONFIG_SCHEDSTATS=y 1708CONFIG_SCHEDSTATS=y
1659CONFIG_TRACE_IRQFLAGS=y 1709# CONFIG_TIMER_STATS is not set
1710# CONFIG_DEBUG_OBJECTS is not set
1711# CONFIG_DEBUG_SLAB is not set
1712CONFIG_DEBUG_KMEMLEAK=y
1713CONFIG_DEBUG_KMEMLEAK_EARLY_LOG_SIZE=400
1714# CONFIG_DEBUG_KMEMLEAK_TEST is not set
1715CONFIG_DEBUG_PREEMPT=y
1716# CONFIG_DEBUG_RT_MUTEXES is not set
1717# CONFIG_RT_MUTEX_TESTER is not set
1718CONFIG_DEBUG_SPINLOCK=y
1719CONFIG_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
1723CONFIG_DEBUG_SPINLOCK_SLEEP=y
1724# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
1660CONFIG_STACKTRACE=y 1725CONFIG_STACKTRACE=y
1726# CONFIG_DEBUG_KOBJECT is not set
1661CONFIG_DEBUG_BUGVERBOSE=y 1727CONFIG_DEBUG_BUGVERBOSE=y
1728CONFIG_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
1663CONFIG_FRAME_POINTER=y 1736CONFIG_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
1666CONFIG_LATENCYTOP=y 1744CONFIG_LATENCYTOP=y
1667CONFIG_SYSCTL_SYSCALL_CHECK=y 1745CONFIG_SYSCTL_SYSCALL_CHECK=y
1668CONFIG_NOP_TRACER=y 1746# CONFIG_PAGE_POISONING is not set
1669CONFIG_HAVE_FTRACE_NMI_ENTER=y
1670CONFIG_HAVE_FUNCTION_TRACER=y 1747CONFIG_HAVE_FUNCTION_TRACER=y
1671CONFIG_HAVE_FUNCTION_GRAPH_TRACER=y 1748CONFIG_HAVE_FUNCTION_GRAPH_TRACER=y
1672CONFIG_HAVE_FUNCTION_TRACE_MCOUNT_TEST=y 1749CONFIG_HAVE_FUNCTION_TRACE_MCOUNT_TEST=y
1673CONFIG_HAVE_DYNAMIC_FTRACE=y 1750CONFIG_HAVE_DYNAMIC_FTRACE=y
1674CONFIG_HAVE_FTRACE_MCOUNT_RECORD=y 1751CONFIG_HAVE_FTRACE_MCOUNT_RECORD=y
1675CONFIG_HAVE_SYSCALL_TRACEPOINTS=y 1752CONFIG_HAVE_SYSCALL_TRACEPOINTS=y
1676CONFIG_TRACER_MAX_TRACE=y
1677CONFIG_RING_BUFFER=y
1678CONFIG_FTRACE_NMI_ENTER=y
1679CONFIG_EVENT_TRACING=y
1680CONFIG_CONTEXT_SWITCH_TRACER=y
1681CONFIG_RING_BUFFER_ALLOW_SWAP=y
1682CONFIG_TRACING=y
1683CONFIG_GENERIC_TRACER=y
1684CONFIG_TRACING_SUPPORT=y 1753CONFIG_TRACING_SUPPORT=y
1685CONFIG_FTRACE=y 1754# CONFIG_FTRACE is not set
1686CONFIG_FUNCTION_TRACER=y
1687CONFIG_FUNCTION_GRAPH_TRACER=y
1688CONFIG_IRQSOFF_TRACER=y
1689# CONFIG_PREEMPT_TRACER is not set
1690CONFIG_SCHED_TRACER=y
1691# CONFIG_FTRACE_SYSCALLS is not set
1692# CONFIG_BOOT_TRACER is not set
1693CONFIG_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
1697CONFIG_STACK_TRACER=y
1698CONFIG_KMEMTRACE=y
1699CONFIG_WORKQUEUE_TRACER=y
1700# CONFIG_BLK_DEV_IO_TRACE is not set
1701CONFIG_DYNAMIC_FTRACE=y
1702# CONFIG_FUNCTION_PROFILER is not set
1703CONFIG_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
1709CONFIG_HAVE_ARCH_KGDB=y 1759CONFIG_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
1711CONFIG_DWARF_UNWINDER=y 1762# CONFIG_STACK_DEBUG is not set
1712CONFIG_MCOUNT=y 1763# CONFIG_DEBUG_STACK_USAGE is not set
1764# CONFIG_4KSTACKS is not set
1765CONFIG_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
1823CONFIG_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
15enum {
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
16struct device; 14struct device;
17 15
18struct siu_platform { 16struct 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
238enum {
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
286enum {
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 */
34static 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
34static const struct sh_dmae_channel sh7724_dmae_channels[] = { 118static 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[] = {
62static const unsigned int ts_shift[] = TS_SHIFT; 146static const unsigned int ts_shift[] = TS_SHIFT;
63 147
64static struct sh_dmae_pdata dma_platform_data = { 148static 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
21static struct plat_sci_port scif0_platform_data = { 20static 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
29static struct plat_sci_port scif0_platform_data = { 29static 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
401: 401:
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
727static void sh_chan_xfer_ld_queue(struct sh_dmae_chan *sh_chan) 731static 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
166config TMIO_MMC_DMA
167 bool
168 select DMA_ENGINE
169 select DMADEVICES
170
165config MFD_T7L66XB 171config 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
30struct sh_mobile_sdhi { 31struct 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
36static struct resource sh_mobile_sdhi_resources[] = { 40static struct resource sh_mobile_sdhi_resources[] = {
@@ -64,6 +68,8 @@ static void sh_mobile_sdhi_set_pwr(struct platform_device *tmio, int state)
64static int __init sh_mobile_sdhi_probe(struct platform_device *pdev) 68static 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 */
163static inline void tmio_mmc_pio_irq(struct tmio_mmc_host *host) 164static 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
201static inline void tmio_mmc_data_irq(struct tmio_mmc_host *host) 202static 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
245static inline void tmio_mmc_cmd_irq(struct tmio_mmc_host *host, 254static 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
282static 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
297static irqreturn_t tmio_mmc_irq(int irq, void *devid) 339static 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
409static 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
417static 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
429static 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
485static 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
539static 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
553static 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
561static 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 */
576static 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
583static 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
622static 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
639static int tmio_mmc_start_dma(struct tmio_mmc_host *host,
640 struct mmc_data *data)
641{
642 return 0;
643}
644
645static 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
652static void tmio_mmc_release_dma(struct tmio_mmc_host *host)
653{
654}
655#endif
656
366static int tmio_mmc_start_data(struct tmio_mmc_host *host, 657static 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)
458static int tmio_mmc_get_ro(struct mmc_host *mmc) 748static 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
465static struct mmc_host_ops tmio_mmc_ops = { 758static 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
4struct sh_mobile_sdhi_info { 6struct 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
53int tmio_core_mmc_enable(void __iomem *cnf, int shift, unsigned long base); 56int tmio_core_mmc_enable(void __iomem *cnf, int shift, unsigned long base);
54int tmio_core_mmc_resume(void __iomem *cnf, int shift, unsigned long base); 57int tmio_core_mmc_resume(void __iomem *cnf, int shift, unsigned long base);
55void tmio_core_mmc_pwr(void __iomem *cnf, int shift, int state); 58void tmio_core_mmc_pwr(void __iomem *cnf, int shift, int state);
56void tmio_core_mmc_clk_div(void __iomem *cnf, int shift, int state); 59void tmio_core_mmc_clk_div(void __iomem *cnf, int shift, int state);
57 60
61struct 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 */
61struct tmio_mmc_data { 69struct 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;