Browse Source

omap: remove 3.12 kernel patches

Signed-off-by: Felix Fietkau <[email protected]>

SVN-Revision: 42401
Felix Fietkau 11 years ago
parent
commit
366007c3d8
51 changed files with 0 additions and 4956 deletions
  1. 0 57
      target/linux/omap/patches-3.12/002-ARM-dts-AM33xx-Correct-gpio-interrupt-cells-property.patch
  2. 0 203
      target/linux/omap/patches-3.12/0334-video-da8xx-fb-adding-dt-support.patch
  3. 0 91
      target/linux/omap/patches-3.12/0343-video-da8xx-fb-Add-API-to-register-wait-for-vsync-ca.patch
  4. 0 38
      target/linux/omap/patches-3.12/0752-video-da8xx-fb-fix-defect-with-vsync-callback-invoca.patch
  5. 0 36
      target/linux/omap/patches-3.12/100-ARM-dts-add-AM33XX-EDMA-support.patch
  6. 0 35
      target/linux/omap/patches-3.12/101-ARM-dts-add-AM33XX-SPI-DMA-support.patch
  7. 0 166
      target/linux/omap/patches-3.12/103-ARM-dts-add-AM33XX-MMC-support-and-documentation.patch
  8. 0 159
      target/linux/omap/patches-3.12/200-ARM-OMAP2-hwmod-cleanup-HWMOD_INIT_NO_RESET-usage.patch
  9. 0 97
      target/linux/omap/patches-3.12/201-ARM-dts-omap-Add-new-bindings-for-OMAP.patch
  10. 0 85
      target/linux/omap/patches-3.12/202-ARM-OMAP2-hwmod-Extract-no-idle-and-no-reset-info-from-DT.patch
  11. 0 86
      target/linux/omap/patches-3.12/203-ARM-OMAP2-hwmod-Cleanup-usag~RESET-and-HWMOD_INIT_NO_IDLE.patch
  12. 0 22
      target/linux/omap/patches-3.12/204-ARM-dts-AM335x-evmsk-Do-not-reset-gpio0.patch
  13. 0 97
      target/linux/omap/patches-3.12/300-ARM-dts-AM33XX-Add-SHAM-data-and-documentation.patch
  14. 0 101
      target/linux/omap/patches-3.12/301-ARM-dts-AM33XX-Add-AES-data-and-documentation.patch
  15. 0 21
      target/linux/omap/patches-3.12/302-ARM-dts-AM33XX-Fix-AES-interrupt-number.patch
  16. 0 62
      target/linux/omap/patches-3.12/350-ARM-AM33xx-hwmod-Add-RNG-module-data.patch
  17. 0 145
      target/linux/omap/patches-3.12/400-ASoC-davinci-evm-Move-sysclk-logic-away-from-evm_hw_.patch
  18. 0 253
      target/linux/omap/patches-3.12/401-ASoC-davinci-evm-Add-device-tree-binding.patch
  19. 0 171
      target/linux/omap/patches-3.12/402-ASoC-davinci-mcasp-Add-DMA-register-locations-to-DT.patch
  20. 0 128
      target/linux/omap/patches-3.12/403-ASoC-davinci-mcasp-Extract-DMA-channels-directly-fro.patch
  21. 0 42
      target/linux/omap/patches-3.12/404-ASoC-davinci-mcasp-Interrupts-property-to-optional-a.patch
  22. 0 60
      target/linux/omap/patches-3.12/405-ASoC-davinci-Add-support-for-AM33xx-SoC-Audio.patch
  23. 0 33
      target/linux/omap/patches-3.12/406-ASoC-tlv320aic3x-Add-regulators-to-DT-bindings-docum.patch
  24. 0 41
      target/linux/omap/patches-3.12/407-ASoC-tlv320aic3x-Add-codec-pins-to-DT-bindings-docum.patch
  25. 0 42
      target/linux/omap/patches-3.12/408-ARM-dts-am33xx-Add-mcasp0-and-mcasp1-device-tree-ent.patch
  26. 0 51
      target/linux/omap/patches-3.12/409-ARM-dts-am33xx-mcasp-Add-new-dma-register-location-t.patch
  27. 0 101
      target/linux/omap/patches-3.12/410-ARM-dts-am335x-evm-Add-audio-support-for-am335x-evm.patch
  28. 0 30
      target/linux/omap/patches-3.12/411-ARM-dts-am335x-evm-Remove-blank-lines.patch
  29. 0 35
      target/linux/omap/patches-3.12/412-ARM-dts-am335x-evm-Clarify-the-audio-codec-node.patch
  30. 0 27
      target/linux/omap/patches-3.12/413-ARM-dts-am335x-evm-Add-unique-name-for-the-sound-car.patch
  31. 0 95
      target/linux/omap/patches-3.12/414-ARM-dts-am335x-evmsk-Audio-support.patch
  32. 0 90
      target/linux/omap/patches-3.12/415-ASoC-davinci-mcasp-Remove-redundant-num-serializer-D.patch
  33. 0 24
      target/linux/omap/patches-3.12/416-ARM-dts-am335x-evm-Remove-num-serializer-property-fo.patch
  34. 0 24
      target/linux/omap/patches-3.12/417-ARM-dts-am335x-evmsk-Remove-num-serializer-property.patch
  35. 0 18
      target/linux/omap/patches-3.12/500-ARM-dts-AM33XX-Add-LCDC-info-into-am335x-evm.patch
  36. 0 1230
      target/linux/omap/patches-3.12/600-crypto-omap-des-Add-omap-des-driver-for-OMAP4-AM43xx.patch
  37. 0 57
      target/linux/omap/patches-3.12/601-crypto-omap-des-Add-config-and-build-options.patch
  38. 0 111
      target/linux/omap/patches-3.12/602-crypto-omap-des-Add-triple-DES-des3_ede-support-to-driver.patch
  39. 0 26
      target/linux/omap/patches-3.12/797-ARM_dts_omap4-panda-es_Do_not_reset_gpio1.patch
  40. 0 40
      target/linux/omap/patches-3.12/801-ARM_dts_am33xx_change_usb_ctrl_module_label.patch
  41. 0 36
      target/linux/omap/patches-3.12/802-ARM_OMAP3plus_do_not_register_non-dt_OPP_tables_for_device_tree_boot.patch
  42. 0 127
      target/linux/omap/patches-3.12/803-ARM_OMAP2plus_add_missing_lateinit_hook_for_calling_pm_late_init.patch
  43. 0 46
      target/linux/omap/patches-3.12/804-ARM_OMAP3plus_use_cpu0-cpufreq_driver_in_device_tree_supported_boot.patch
  44. 0 78
      target/linux/omap/patches-3.12/805-ARM_dts_TWL4030_Add_missing_regulators.patch
  45. 0 22
      target/linux/omap/patches-3.12/806-ARM_dts_TWL4030_Add_power_button_support.patch
  46. 0 26
      target/linux/omap/patches-3.12/807-ARM_dts_AM33XX_Add_hwspinlock_node.patch
  47. 0 52
      target/linux/omap/patches-3.12/808-ARM_dts_AM33xx_Add_RNG_node.patch
  48. 0 155
      target/linux/omap/patches-3.12/900-wlcore-Add-support-for-DT-platform-data.patch
  49. 0 81
      target/linux/omap/patches-3.12/920-arm-dts-am335x-evmsk-add-support-for-lcd-panel.patch
  50. 0 32
      target/linux/omap/patches-3.12/921-arm-dts-am335x-sk-add-touchscreen-support.patch
  51. 0 71
      target/linux/omap/patches-3.12/950-am335x-evmsk-wilink-dts.patch

+ 0 - 57
target/linux/omap/patches-3.12/002-ARM-dts-AM33xx-Correct-gpio-interrupt-cells-property.patch

@@ -1,57 +0,0 @@
-From 29f3723bf62d46c238dcc5436787a8ad6b25a385 Mon Sep 17 00:00:00 2001
-From: Lars Poeschel <[email protected]>
-Date: Wed, 7 Aug 2013 13:06:32 +0200
-Subject: [PATCH 02/14] ARM: dts: AM33xx: Correct gpio #interrupt-cells
- property
-
-Following commit ff5c9059 and therefore other omap platforms using
-the gpio-omap driver correct the #interrupt-cells property on am33xx
-too. The omap gpio binding documentaion also states that
-the #interrupt-cells property should be 2.
-
-Signed-off-by: Lars Poeschel <[email protected]>
-Reviewed-by: Javier Martinez Canillas <[email protected]>
-Acked-by: Mark Rutland <[email protected]>
-Signed-off-by: Benoit Cousson <[email protected]>
----
- arch/arm/boot/dts/am33xx.dtsi | 8 ++++----
- 1 file changed, 4 insertions(+), 4 deletions(-)
-
---- a/arch/arm/boot/dts/am33xx.dtsi
-+++ b/arch/arm/boot/dts/am33xx.dtsi
-@@ -106,7 +106,7 @@
- 			gpio-controller;
- 			#gpio-cells = <2>;
- 			interrupt-controller;
--			#interrupt-cells = <1>;
-+			#interrupt-cells = <2>;
- 			reg = <0x44e07000 0x1000>;
- 			interrupts = <96>;
- 		};
-@@ -117,7 +117,7 @@
- 			gpio-controller;
- 			#gpio-cells = <2>;
- 			interrupt-controller;
--			#interrupt-cells = <1>;
-+			#interrupt-cells = <2>;
- 			reg = <0x4804c000 0x1000>;
- 			interrupts = <98>;
- 		};
-@@ -128,7 +128,7 @@
- 			gpio-controller;
- 			#gpio-cells = <2>;
- 			interrupt-controller;
--			#interrupt-cells = <1>;
-+			#interrupt-cells = <2>;
- 			reg = <0x481ac000 0x1000>;
- 			interrupts = <32>;
- 		};
-@@ -139,7 +139,7 @@
- 			gpio-controller;
- 			#gpio-cells = <2>;
- 			interrupt-controller;
--			#interrupt-cells = <1>;
-+			#interrupt-cells = <2>;
- 			reg = <0x481ae000 0x1000>;
- 			interrupts = <62>;
- 		};

+ 0 - 203
target/linux/omap/patches-3.12/0334-video-da8xx-fb-adding-dt-support.patch

@@ -1,203 +0,0 @@
-From 884d3962ef4787c8cf0b8a7a673531c623d1dff8 Mon Sep 17 00:00:00 2001
-From: Darren Etheridge <[email protected]>
-Date: Fri, 2 Aug 2013 15:35:36 -0500
-Subject: [PATCH 334/752] video: da8xx-fb: adding dt support
-
-Enhancing driver to enable probe triggered by a corresponding dt entry.
-
-Add da8xx-fb.txt documentation to devicetree section.
-
-Obtain fb_videomode details for the connected lcd panel using the
-display timing details present in DT.
-
-Ensure that platform data is present before checking whether platform
-callback is present (the one used to control backlight). So far this
-was not an issue as driver was purely non-DT triggered, but now DT
-support has been added this check must be performed.
-
-v2: squashing multiple commits from Afzal Mohammed ([email protected])
-v3: remove superfluous cast
-v4: expose both ti,am3352-lcdc and ti,da830-lcdc for .compatible
-	as driver can use enhanced features of all version of the
-	silicon block.
-v5: addressed review comments from Prabhakar Lad
-v6: Changed the .compatible naming to match the existing drm bindings
-	for am33xx devices
-v7: clarify which compatible to use in the documentation for DA850
-
-Acked-by: Lad, Prabhakar <[email protected]>
-Signed-off-by: Darren Etheridge <[email protected]>
----
- .../devicetree/bindings/video/da8xx-fb.txt         |   42 +++++++++++++
- drivers/video/da8xx-fb.c                           |   66 +++++++++++++++++++-
- 2 files changed, 105 insertions(+), 3 deletions(-)
- create mode 100644 Documentation/devicetree/bindings/video/da8xx-fb.txt
-
---- /dev/null
-+++ b/Documentation/devicetree/bindings/video/da8xx-fb.txt
-@@ -0,0 +1,42 @@
-+TI LCD Controller on DA830/DA850/AM335x SoC's
-+
-+Required properties:
-+- compatible:
-+	DA830, DA850 - "ti,da8xx-tilcdc"
-+	AM335x SoC's - "ti,am33xx-tilcdc"
-+- reg: Address range of lcdc register set
-+- interrupts: lcdc interrupt
-+- display-timings: typical videomode of lcd panel, represented as child.
-+  Refer Documentation/devicetree/bindings/video/display-timing.txt for
-+  display timing binding details. If multiple videomodes are mentioned
-+  in display timings node, typical videomode has to be mentioned as the
-+  native mode or it has to be first child (driver cares only for native
-+  videomode).
-+
-+Recommended properties:
-+- ti,hwmods: Name of the hwmod associated to the LCDC
-+
-+Example for am335x SoC's:
-+
-+lcdc@4830e000 {
-+	compatible = "ti,am33xx-tilcdc";
-+	reg =  <0x4830e000 0x1000>;
-+	interrupts = <36>;
-+	ti,hwmods = "lcdc";
-+	status = "okay";
-+	display-timings {
-+		800x480p62 {
-+			clock-frequency = <30000000>;
-+			hactive = <800>;
-+			vactive = <480>;
-+			hfront-porch = <39>;
-+			hback-porch = <39>;
-+			hsync-len = <47>;
-+			vback-porch = <29>;
-+			vfront-porch = <13>;
-+			vsync-len = <2>;
-+			hsync-active = <1>;
-+			vsync-active = <1>;
-+		};
-+	};
-+};
---- a/drivers/video/da8xx-fb.c
-+++ b/drivers/video/da8xx-fb.c
-@@ -36,6 +36,7 @@
- #include <linux/slab.h>
- #include <linux/delay.h>
- #include <linux/lcm.h>
-+#include <video/of_display_timing.h>
- #include <video/da8xx-fb.h>
- #include <asm/div64.h>
- 
-@@ -1312,12 +1313,54 @@ static struct fb_ops da8xx_fb_ops = {
- 	.fb_blank = cfb_blank,
- };
- 
-+static struct lcd_ctrl_config *da8xx_fb_create_cfg(struct platform_device *dev)
-+{
-+	struct lcd_ctrl_config *cfg;
-+
-+	cfg = devm_kzalloc(&dev->dev, sizeof(struct fb_videomode), GFP_KERNEL);
-+	if (!cfg)
-+		return NULL;
-+
-+	/* default values */
-+
-+	if (lcd_revision == LCD_VERSION_1)
-+		cfg->bpp = 16;
-+	else
-+		cfg->bpp = 32;
-+
-+	/*
-+	 * For panels so far used with this LCDC, below statement is sufficient.
-+	 * For new panels, if required, struct lcd_ctrl_cfg fields to be updated
-+	 * with additional/modified values. Those values would have to be then
-+	 * obtained from dt(requiring new dt bindings).
-+	 */
-+
-+	cfg->panel_shade = COLOR_ACTIVE;
-+
-+	return cfg;
-+}
-+
- static struct fb_videomode *da8xx_fb_get_videomode(struct platform_device *dev)
- {
- 	struct da8xx_lcdc_platform_data *fb_pdata = dev->dev.platform_data;
- 	struct fb_videomode *lcdc_info;
-+	struct device_node *np = dev->dev.of_node;
- 	int i;
- 
-+	if (np) {
-+		lcdc_info = devm_kzalloc(&dev->dev,
-+					 sizeof(struct fb_videomode),
-+					 GFP_KERNEL);
-+		if (!lcdc_info)
-+			return NULL;
-+
-+		if (of_get_fb_videomode(np, lcdc_info, OF_USE_NATIVE_MODE)) {
-+			dev_err(&dev->dev, "timings not available in DT\n");
-+			return NULL;
-+		}
-+		return lcdc_info;
-+	}
-+
- 	for (i = 0, lcdc_info = known_lcd_panels;
- 		i < ARRAY_SIZE(known_lcd_panels); i++, lcdc_info++) {
- 		if (strcmp(fb_pdata->type, lcdc_info->name) == 0)
-@@ -1346,7 +1389,7 @@ static int fb_probe(struct platform_devi
- 	int ret;
- 	unsigned long ulcm;
- 
--	if (fb_pdata == NULL) {
-+	if (fb_pdata == NULL && !device->dev.of_node) {
- 		dev_err(&device->dev, "Can not get platform data\n");
- 		return -ENOENT;
- 	}
-@@ -1386,7 +1429,10 @@ static int fb_probe(struct platform_devi
- 		break;
- 	}
- 
--	lcd_cfg = (struct lcd_ctrl_config *)fb_pdata->controller_data;
-+	if (device->dev.of_node)
-+		lcd_cfg = da8xx_fb_create_cfg(device);
-+	else
-+		lcd_cfg = fb_pdata->controller_data;
- 
- 	if (!lcd_cfg) {
- 		ret = -EINVAL;
-@@ -1405,7 +1451,7 @@ static int fb_probe(struct platform_devi
- 	par->dev = &device->dev;
- 	par->lcdc_clk = tmp_lcdc_clk;
- 	par->lcdc_clk_rate = clk_get_rate(par->lcdc_clk);
--	if (fb_pdata->panel_power_ctrl) {
-+	if (fb_pdata && fb_pdata->panel_power_ctrl) {
- 		par->panel_power_ctrl = fb_pdata->panel_power_ctrl;
- 		par->panel_power_ctrl(1);
- 	}
-@@ -1653,6 +1699,19 @@ static int fb_resume(struct platform_dev
- #define fb_resume NULL
- #endif
- 
-+#if IS_ENABLED(CONFIG_OF)
-+static const struct of_device_id da8xx_fb_of_match[] = {
-+	/*
-+	 * this driver supports version 1 and version 2 of the
-+	 * Texas Instruments lcd controller (lcdc) hardware block
-+	 */
-+	{.compatible = "ti,da8xx-tilcdc", },
-+	{.compatible = "ti,am33xx-tilcdc", },
-+	{},
-+};
-+MODULE_DEVICE_TABLE(of, da8xx_fb_of_match);
-+#endif
-+
- static struct platform_driver da8xx_fb_driver = {
- 	.probe = fb_probe,
- 	.remove = fb_remove,
-@@ -1661,6 +1720,7 @@ static struct platform_driver da8xx_fb_d
- 	.driver = {
- 		   .name = DRIVER_NAME,
- 		   .owner = THIS_MODULE,
-+		   .of_match_table = of_match_ptr(da8xx_fb_of_match),
- 		   },
- };
- 

+ 0 - 91
target/linux/omap/patches-3.12/0343-video-da8xx-fb-Add-API-to-register-wait-for-vsync-ca.patch

@@ -1,91 +0,0 @@
-From 9a1a810516ae9cb3259b898b6879901c5b44fa90 Mon Sep 17 00:00:00 2001
-From: Prathap M S <[email protected]>
-Date: Mon, 2 Sep 2013 12:05:23 +0530
-Subject: [PATCH 343/752] video: da8xx-fb: Add API to register wait for vsync
- callback
-
-This patch adds APIs to register and unregister wait for vsync callback.
-This is derived from commit id 2d44302545da24fd22912d964102bc31a7489e97
-This commit id was part of 3.2 kernel sources.
-
-Signed-off-by: Prathap M S <[email protected]>
----
- drivers/video/da8xx-fb.c |   33 +++++++++++++++++++++++++++++++++
- include/video/da8xx-fb.h |    4 ++++
- 2 files changed, 37 insertions(+)
-
---- a/drivers/video/da8xx-fb.c
-+++ b/drivers/video/da8xx-fb.c
-@@ -198,6 +198,9 @@ static struct fb_fix_screeninfo da8xx_fb
- 	.accel = FB_ACCEL_NONE
- };
- 
-+static vsync_callback_t vsync_cb_handler;
-+static void *vsync_cb_arg;
-+
- static struct fb_videomode known_lcd_panels[] = {
- 	/* Sharp LCD035Q3DG01 */
- 	[0] = {
-@@ -826,6 +829,32 @@ static int lcd_init(struct da8xx_fb_par
- 	return 0;
- }
- 
-+int register_vsync_cb(vsync_callback_t handler, void *arg, int idx)
-+{
-+	if ((vsync_cb_handler == NULL) && (vsync_cb_arg == NULL)) {
-+		vsync_cb_arg = arg;
-+		vsync_cb_handler = handler;
-+	} else {
-+		return -EEXIST;
-+	}
-+
-+	return 0;
-+}
-+EXPORT_SYMBOL(register_vsync_cb);
-+
-+int unregister_vsync_cb(vsync_callback_t handler, void *arg, int idx)
-+{
-+	if ((vsync_cb_handler == handler) && (vsync_cb_arg == arg)) {
-+		vsync_cb_handler = NULL;
-+		vsync_cb_arg = NULL;
-+	} else {
-+		return -ENXIO;
-+	}
-+
-+	return 0;
-+}
-+EXPORT_SYMBOL(unregister_vsync_cb);
-+
- /* IRQ handler for version 2 of LCDC */
- static irqreturn_t lcdc_irq_handler_rev02(int irq, void *arg)
- {
-@@ -863,6 +892,8 @@ static irqreturn_t lcdc_irq_handler_rev0
- 				   LCD_DMA_FRM_BUF_CEILING_ADDR_0_REG);
- 			par->vsync_flag = 1;
- 			wake_up_interruptible(&par->vsync_wait);
-+			if (vsync_cb_handler)
-+				vsync_cb_handler(vsync_cb_arg);
- 		}
- 
- 		if (stat & LCD_END_OF_FRAME1) {
-@@ -938,6 +969,8 @@ static irqreturn_t lcdc_irq_handler_rev0
- 				   LCD_DMA_FRM_BUF_CEILING_ADDR_1_REG);
- 			par->vsync_flag = 1;
- 			wake_up_interruptible(&par->vsync_wait);
-+			if (vsync_cb_handler)
-+				vsync_cb_handler(vsync_cb_arg);
- 		}
- 	}
- 
---- a/include/video/da8xx-fb.h
-+++ b/include/video/da8xx-fb.h
-@@ -91,5 +91,9 @@ struct lcd_sync_arg {
- /* Proprietary FB_SYNC_ flags */
- #define FB_SYNC_CLK_INVERT 0x40000000
- 
-+typedef void (*vsync_callback_t)(void *arg);
-+int register_vsync_cb(vsync_callback_t handler, void *arg, int idx);
-+int unregister_vsync_cb(vsync_callback_t handler, void *arg, int idx);
-+
- #endif  /* ifndef DA8XX_FB_H */
- 

+ 0 - 38
target/linux/omap/patches-3.12/0752-video-da8xx-fb-fix-defect-with-vsync-callback-invoca.patch

@@ -1,38 +0,0 @@
-From c99bd415829ef29adf71bb1e1b577650f10e93f5 Mon Sep 17 00:00:00 2001
-From: Darren Etheridge <[email protected]>
-Date: Mon, 4 Nov 2013 12:27:40 -0600
-Subject: [PATCH 752/752] video/da8xx-fb fix defect with vsync callback
- invocation
-
-Fix defect where SGX is running at half of the expected framerate.
-The original patch (@ commit ID 9a1a810516ae9cb3259b898b6879901c5b44fa90)
-seems to have a mistake where it only calls the callback
-for the even or the odd frames depending on the revision of the LCD controller
-This patch corrects this and invokes the callback for both odd and even frame
-for just the Rev02 version of the LCDC (won't find an SGX GPU on a Rev01).
-
-Signed-off-by: Darren Etheridge <[email protected]>
----
- drivers/video/da8xx-fb.c |    4 ++--
- 1 file changed, 2 insertions(+), 2 deletions(-)
-
---- a/drivers/video/da8xx-fb.c
-+++ b/drivers/video/da8xx-fb.c
-@@ -904,6 +904,8 @@ static irqreturn_t lcdc_irq_handler_rev0
- 				   LCD_DMA_FRM_BUF_CEILING_ADDR_1_REG);
- 			par->vsync_flag = 1;
- 			wake_up_interruptible(&par->vsync_wait);
-+			if (vsync_cb_handler)
-+				vsync_cb_handler(vsync_cb_arg);
- 		}
- 
- 		/* Set only when controller is disabled and at the end of
-@@ -969,8 +971,6 @@ static irqreturn_t lcdc_irq_handler_rev0
- 				   LCD_DMA_FRM_BUF_CEILING_ADDR_1_REG);
- 			par->vsync_flag = 1;
- 			wake_up_interruptible(&par->vsync_wait);
--			if (vsync_cb_handler)
--				vsync_cb_handler(vsync_cb_arg);
- 		}
- 	}
- 

+ 0 - 36
target/linux/omap/patches-3.12/100-ARM-dts-add-AM33XX-EDMA-support.patch

@@ -1,36 +0,0 @@
-Adds AM33XX EDMA support to the am33xx.dtsi as documented in
-Documentation/devicetree/bindings/dma/ti-edma.txt
-
-[Joel Fernandes <[email protected]>]
-Drop DT entries that are non-hardware-description as discussed in [1]
-
-[1] https://patchwork.kernel.org/patch/2226761/
-
-Signed-off-by: Matt Porter <[email protected]>
-Signed-off-by: Joel A Fernandes <[email protected]>
-
----
-arch/arm/boot/dts/am33xx.dtsi | 12 ++++++++++++
- 1 file changed, 12 insertions(+)
-
---- a/arch/arm/boot/dts/am33xx.dtsi
-+++ b/arch/arm/boot/dts/am33xx.dtsi
-@@ -100,6 +100,18 @@
- 			reg = <0x48200000 0x1000>;
- 		};
- 
-+		edma: edma@49000000 {
-+			compatible = "ti,edma3";
-+			ti,hwmods = "tpcc", "tptc0", "tptc1", "tptc2";
-+			reg =	<0x49000000 0x10000>,
-+				<0x44e10f90 0x10>;
-+			interrupts = <12 13 14>;
-+			#dma-cells = <1>;
-+			dma-channels = <64>;
-+			ti,edma-regions = <4>;
-+			ti,edma-slots = <256>;
-+		};
-+
- 		gpio0: gpio@44e07000 {
- 			compatible = "ti,omap4-gpio";
- 			ti,hwmods = "gpio1";

+ 0 - 35
target/linux/omap/patches-3.12/101-ARM-dts-add-AM33XX-SPI-DMA-support.patch

@@ -1,35 +0,0 @@
-Adds DMA resources to the AM33XX SPI nodes.
-
-Signed-off-by: Matt Porter <[email protected]>
-Signed-off-by: Joel A Fernandes <[email protected]>
-
----
-arch/arm/boot/dts/am33xx.dtsi | 10 ++++++++++
- 1 file changed, 10 insertions(+)
-
---- a/arch/arm/boot/dts/am33xx.dtsi
-+++ b/arch/arm/boot/dts/am33xx.dtsi
-@@ -335,6 +335,11 @@
- 			interrupts = <65>;
- 			ti,spi-num-cs = <2>;
- 			ti,hwmods = "spi0";
-+			dmas = <&edma 16
-+				&edma 17
-+				&edma 18
-+				&edma 19>;
-+			dma-names = "tx0", "rx0", "tx1", "rx1";
- 			status = "disabled";
- 		};
- 
-@@ -346,6 +351,11 @@
- 			interrupts = <125>;
- 			ti,spi-num-cs = <2>;
- 			ti,hwmods = "spi1";
-+			dmas = <&edma 42
-+				&edma 43
-+				&edma 44
-+				&edma 45>;
-+			dma-names = "tx0", "rx0", "tx1", "rx1";
- 			status = "disabled";
- 		};
- 

+ 0 - 166
target/linux/omap/patches-3.12/103-ARM-dts-add-AM33XX-MMC-support-and-documentation.patch

@@ -1,166 +0,0 @@
-Adds AM33XX MMC support for am335x-bone, am335x-evm and am335x-evmsk boards.
-
-Also added is the DMA binding definitions based on the generic DMA request
-binding.
-
-Additional changes made to DTS:
-* Interrupt, reg and compatible properties added
-* ti,needs-special-hs-handling added
-
-Signed-off-by: Matt Porter <[email protected]>
-Acked-by: Tony Lindgren <[email protected]>
-Signed-off-by: Joel Fernandes <[email protected]>
-
----
-.../devicetree/bindings/mmc/ti-omap-hsmmc.txt      | 26 ++++++++++++++-
- arch/arm/boot/dts/am335x-bone.dts                  | 11 +++++++
- arch/arm/boot/dts/am335x-evm.dts                   |  7 ++++
- arch/arm/boot/dts/am335x-evmsk.dts                 |  7 ++++
- arch/arm/boot/dts/am33xx.dtsi                      | 38 ++++++++++++++++++++++
- 5 files changed, 88 insertions(+), 1 deletion(-)
-
---- a/Documentation/devicetree/bindings/mmc/ti-omap-hsmmc.txt
-+++ b/Documentation/devicetree/bindings/mmc/ti-omap-hsmmc.txt
-@@ -20,8 +20,29 @@ ti,dual-volt: boolean, supports dual vol
- ti,non-removable: non-removable slot (like eMMC)
- ti,needs-special-reset: Requires a special softreset sequence
- ti,needs-special-hs-handling: HSMMC IP needs special setting for handling High Speed
-+dmas: List of DMA specifiers with the controller specific format
-+as described in the generic DMA client binding. A tx and rx
-+specifier is required.
-+dma-names: List of DMA request names. These strings correspond
-+1:1 with the DMA specifiers listed in dmas. The string naming is
-+to be "rx" and "tx" for RX and TX DMA requests, respectively.
-+
-+Examples:
-+
-+[hwmod populated DMA resources]
-+
-+	mmc1: mmc@0x4809c000 {
-+		compatible = "ti,omap4-hsmmc";
-+		reg = <0x4809c000 0x400>;
-+		ti,hwmods = "mmc1";
-+		ti,dual-volt;
-+		bus-width = <4>;
-+		vmmc-supply = <&vmmc>; /* phandle to regulator node */
-+		ti,non-removable;
-+	};
-+
-+[generic DMA request binding]
- 
--Example:
- 	mmc1: mmc@0x4809c000 {
- 		compatible = "ti,omap4-hsmmc";
- 		reg = <0x4809c000 0x400>;
-@@ -30,4 +51,7 @@ Example:
- 		bus-width = <4>;
- 		vmmc-supply = <&vmmc>; /* phandle to regulator node */
- 		ti,non-removable;
-+		dmas = <&edma 24
-+			&edma 25>;
-+		dma-names = "tx", "rx";
- 	};
---- a/arch/arm/boot/dts/am335x-bone.dts
-+++ b/arch/arm/boot/dts/am335x-bone.dts
-@@ -9,3 +9,14 @@
- 
- #include "am33xx.dtsi"
- #include "am335x-bone-common.dtsi"
-+
-+&ldo3_reg {
-+	regulator-min-microvolt = <1800000>;
-+	regulator-max-microvolt = <3300000>;
-+	regulator-always-on;
-+};
-+
-+&mmc1 {
-+	status = "okay";
-+	vmmc-supply = <&ldo3_reg>;
-+};
---- a/arch/arm/boot/dts/am335x-evm.dts
-+++ b/arch/arm/boot/dts/am335x-evm.dts
-@@ -477,6 +477,8 @@
- 		};
- 
- 		vmmc_reg: regulator@12 {
-+			regulator-min-microvolt = <1800000>;
-+			regulator-max-microvolt = <3300000>;
- 			regulator-always-on;
- 		};
- 	};
-@@ -517,3 +519,8 @@
- 		ti,adc-channels = <4 5 6 7>;
- 	};
- };
-+
-+&mmc1 {
-+	status = "okay";
-+	vmmc-supply = <&vmmc_reg>;
-+};
---- a/arch/arm/boot/dts/am335x-evmsk.dts
-+++ b/arch/arm/boot/dts/am335x-evmsk.dts
-@@ -393,6 +393,8 @@
- 		};
- 
- 		vmmc_reg: regulator@12 {
-+			regulator-min-microvolt = <1800000>;
-+			regulator-max-microvolt = <3300000>;
- 			regulator-always-on;
- 		};
- 	};
-@@ -419,3 +421,8 @@
- 	phy_id = <&davinci_mdio>, <1>;
- 	phy-mode = "rgmii-txid";
- };
-+
-+&mmc1 {
-+	status = "okay";
-+	vmmc-supply = <&vmmc_reg>;
-+};
---- a/arch/arm/boot/dts/am33xx.dtsi
-+++ b/arch/arm/boot/dts/am33xx.dtsi
-@@ -240,6 +240,44 @@
- 			status = "disabled";
- 		};
- 
-+		mmc1: mmc@48060000 {
-+			compatible = "ti,omap4-hsmmc";
-+			ti,hwmods = "mmc1";
-+			ti,dual-volt;
-+			ti,needs-special-reset;
-+			ti,needs-special-hs-handling;
-+			dmas = <&edma 24
-+				&edma 25>;
-+			dma-names = "tx", "rx";
-+			interrupts = <64>;
-+			interrupt-parent = <&intc>;
-+			reg = <0x48060000 0x1000>;
-+			status = "disabled";
-+		};
-+
-+		mmc2: mmc@481d8000 {
-+			compatible = "ti,omap4-hsmmc";
-+			ti,hwmods = "mmc2";
-+			ti,needs-special-reset;
-+			dmas = <&edma 2
-+				&edma 3>;
-+			dma-names = "tx", "rx";
-+			interrupts = <28>;
-+			interrupt-parent = <&intc>;
-+			reg = <0x481d8000 0x1000>;
-+			status = "disabled";
-+		};
-+
-+		mmc3: mmc@47810000 {
-+			compatible = "ti,omap4-hsmmc";
-+			ti,hwmods = "mmc3";
-+			ti,needs-special-reset;
-+			interrupts = <29>;
-+			interrupt-parent = <&intc>;
-+			reg = <0x47810000 0x1000>;
-+			status = "disabled";
-+		};
-+
- 		wdt2: wdt@44e35000 {
- 			compatible = "ti,omap3-wdt";
- 			ti,hwmods = "wd_timer2";

+ 0 - 159
target/linux/omap/patches-3.12/200-ARM-OMAP2-hwmod-cleanup-HWMOD_INIT_NO_RESET-usage.patch

@@ -1,159 +0,0 @@
-For modules/IPs/hwmods which do not have
--1- sys->class->reset()
-and
--2- hardreset lines
-and
--3- No way to do an ocp reset (no sysc control)
-the flag 'HWMOD_INIT_NO_RESET' is not much useful.
-
-Cleanup all such instances across various hwmod data files.
-
-Signed-off-by: Rajendra Nayak <[email protected]>
-
----
-arch/arm/mach-omap2/omap_hwmod_33xx_data.c |   18 +++++++++---------
- arch/arm/mach-omap2/omap_hwmod_44xx_data.c |    6 +++---
- arch/arm/mach-omap2/omap_hwmod_54xx_data.c |    6 +++---
- 3 files changed, 15 insertions(+), 15 deletions(-)
-
---- a/arch/arm/mach-omap2/omap_hwmod_33xx_data.c
-+++ b/arch/arm/mach-omap2/omap_hwmod_33xx_data.c
-@@ -52,7 +52,7 @@ static struct omap_hwmod am33xx_emif_hwm
- 	.name		= "emif",
- 	.class		= &am33xx_emif_hwmod_class,
- 	.clkdm_name	= "l3_clkdm",
--	.flags		= (HWMOD_INIT_NO_IDLE | HWMOD_INIT_NO_RESET),
-+	.flags		= HWMOD_INIT_NO_IDLE,
- 	.main_clk	= "dpll_ddr_m2_div2_ck",
- 	.prcm		= {
- 		.omap4	= {
-@@ -74,7 +74,7 @@ static struct omap_hwmod am33xx_l3_main_
- 	.name		= "l3_main",
- 	.class		= &am33xx_l3_hwmod_class,
- 	.clkdm_name	= "l3_clkdm",
--	.flags		= (HWMOD_INIT_NO_IDLE | HWMOD_INIT_NO_RESET),
-+	.flags		= HWMOD_INIT_NO_IDLE,
- 	.main_clk	= "l3_gclk",
- 	.prcm		= {
- 		.omap4	= {
-@@ -96,7 +96,7 @@ static struct omap_hwmod am33xx_l3_instr
- 	.name		= "l3_instr",
- 	.class		= &am33xx_l3_hwmod_class,
- 	.clkdm_name	= "l3_clkdm",
--	.flags		= (HWMOD_INIT_NO_IDLE | HWMOD_INIT_NO_RESET),
-+	.flags		= HWMOD_INIT_NO_IDLE,
- 	.main_clk	= "l3_gclk",
- 	.prcm		= {
- 		.omap4	= {
-@@ -119,7 +119,7 @@ static struct omap_hwmod am33xx_l4_ls_hw
- 	.name		= "l4_ls",
- 	.class		= &am33xx_l4_hwmod_class,
- 	.clkdm_name	= "l4ls_clkdm",
--	.flags		= (HWMOD_INIT_NO_IDLE | HWMOD_INIT_NO_RESET),
-+	.flags		= HWMOD_INIT_NO_IDLE,
- 	.main_clk	= "l4ls_gclk",
- 	.prcm		= {
- 		.omap4	= {
-@@ -134,7 +134,7 @@ static struct omap_hwmod am33xx_l4_hs_hw
- 	.name		= "l4_hs",
- 	.class		= &am33xx_l4_hwmod_class,
- 	.clkdm_name	= "l4hs_clkdm",
--	.flags		= (HWMOD_INIT_NO_IDLE | HWMOD_INIT_NO_RESET),
-+	.flags		= HWMOD_INIT_NO_IDLE,
- 	.main_clk	= "l4hs_gclk",
- 	.prcm		= {
- 		.omap4	= {
-@@ -150,7 +150,7 @@ static struct omap_hwmod am33xx_l4_wkup_
- 	.name		= "l4_wkup",
- 	.class		= &am33xx_l4_hwmod_class,
- 	.clkdm_name	= "l4_wkup_clkdm",
--	.flags		= (HWMOD_INIT_NO_IDLE | HWMOD_INIT_NO_RESET),
-+	.flags		= HWMOD_INIT_NO_IDLE,
- 	.prcm		= {
- 		.omap4	= {
- 			.clkctrl_offs	= AM33XX_CM_WKUP_L4WKUP_CLKCTRL_OFFSET,
-@@ -170,7 +170,7 @@ static struct omap_hwmod am33xx_mpu_hwmo
- 	.name		= "mpu",
- 	.class		= &am33xx_mpu_hwmod_class,
- 	.clkdm_name	= "mpu_clkdm",
--	.flags		= (HWMOD_INIT_NO_IDLE | HWMOD_INIT_NO_RESET),
-+	.flags		= HWMOD_INIT_NO_IDLE,
- 	.main_clk	= "dpll_mpu_m2_ck",
- 	.prcm		= {
- 		.omap4	= {
-@@ -450,7 +450,7 @@ static struct omap_hwmod am33xx_ocmcram_
- 	.name		= "ocmcram",
- 	.class		= &am33xx_ocmcram_hwmod_class,
- 	.clkdm_name	= "l3_clkdm",
--	.flags		= (HWMOD_INIT_NO_IDLE | HWMOD_INIT_NO_RESET),
-+	.flags		= HWMOD_INIT_NO_IDLE,
- 	.main_clk	= "l3_gclk",
- 	.prcm		= {
- 		.omap4	= {
-@@ -532,7 +532,7 @@ static struct omap_hwmod am33xx_control_
- 	.name		= "control",
- 	.class		= &am33xx_control_hwmod_class,
- 	.clkdm_name	= "l4_wkup_clkdm",
--	.flags		= (HWMOD_INIT_NO_IDLE | HWMOD_INIT_NO_RESET),
-+	.flags		= HWMOD_INIT_NO_IDLE,
- 	.main_clk	= "dpll_core_m4_div2_ck",
- 	.prcm		= {
- 		.omap4	= {
---- a/arch/arm/mach-omap2/omap_hwmod_44xx_data.c
-+++ b/arch/arm/mach-omap2/omap_hwmod_44xx_data.c
-@@ -914,7 +914,7 @@ static struct omap_hwmod omap44xx_emif1_
- 	.name		= "emif1",
- 	.class		= &omap44xx_emif_hwmod_class,
- 	.clkdm_name	= "l3_emif_clkdm",
--	.flags		= HWMOD_INIT_NO_IDLE | HWMOD_INIT_NO_RESET,
-+	.flags		= HWMOD_INIT_NO_IDLE,
- 	.main_clk	= "ddrphy_ck",
- 	.prcm = {
- 		.omap4 = {
-@@ -930,7 +930,7 @@ static struct omap_hwmod omap44xx_emif2_
- 	.name		= "emif2",
- 	.class		= &omap44xx_emif_hwmod_class,
- 	.clkdm_name	= "l3_emif_clkdm",
--	.flags		= HWMOD_INIT_NO_IDLE | HWMOD_INIT_NO_RESET,
-+	.flags		= HWMOD_INIT_NO_IDLE,
- 	.main_clk	= "ddrphy_ck",
- 	.prcm = {
- 		.omap4 = {
-@@ -2193,7 +2193,7 @@ static struct omap_hwmod omap44xx_mpu_hw
- 	.name		= "mpu",
- 	.class		= &omap44xx_mpu_hwmod_class,
- 	.clkdm_name	= "mpuss_clkdm",
--	.flags		= HWMOD_INIT_NO_IDLE | HWMOD_INIT_NO_RESET,
-+	.flags		= HWMOD_INIT_NO_IDLE,
- 	.main_clk	= "dpll_mpu_m2_ck",
- 	.prcm = {
- 		.omap4 = {
---- a/arch/arm/mach-omap2/omap_hwmod_54xx_data.c
-+++ b/arch/arm/mach-omap2/omap_hwmod_54xx_data.c
-@@ -352,7 +352,7 @@ static struct omap_hwmod omap54xx_emif1_
- 	.name		= "emif1",
- 	.class		= &omap54xx_emif_hwmod_class,
- 	.clkdm_name	= "emif_clkdm",
--	.flags		= HWMOD_INIT_NO_IDLE | HWMOD_INIT_NO_RESET,
-+	.flags		= HWMOD_INIT_NO_IDLE,
- 	.main_clk	= "dpll_core_h11x2_ck",
- 	.prcm = {
- 		.omap4 = {
-@@ -368,7 +368,7 @@ static struct omap_hwmod omap54xx_emif2_
- 	.name		= "emif2",
- 	.class		= &omap54xx_emif_hwmod_class,
- 	.clkdm_name	= "emif_clkdm",
--	.flags		= HWMOD_INIT_NO_IDLE | HWMOD_INIT_NO_RESET,
-+	.flags		= HWMOD_INIT_NO_IDLE,
- 	.main_clk	= "dpll_core_h11x2_ck",
- 	.prcm = {
- 		.omap4 = {
-@@ -1135,7 +1135,7 @@ static struct omap_hwmod omap54xx_mpu_hw
- 	.name		= "mpu",
- 	.class		= &omap54xx_mpu_hwmod_class,
- 	.clkdm_name	= "mpu_clkdm",
--	.flags		= HWMOD_INIT_NO_IDLE | HWMOD_INIT_NO_RESET,
-+	.flags		= HWMOD_INIT_NO_IDLE,
- 	.main_clk	= "dpll_mpu_m2_ck",
- 	.prcm = {
- 		.omap4 = {

+ 0 - 97
target/linux/omap/patches-3.12/201-ARM-dts-omap-Add-new-bindings-for-OMAP.patch

@@ -1,97 +0,0 @@
-On OMAP we have co-processor IPs, memory controllers,
-GPIOs which control regulators and power switches to
-PMIC, and SoC internal Bus IPs, some or most of which
-should either not be reset or idled or both at init.
-(In some cases there are erratas which prevent an IP
-from being reset)
-Have a way to pass this information from DT.
-
-Update the am33xx/omap4 and omap5 dtsi files with the
-new bindings for modules which either should not be
-idled. reset or both. A later patch would cleanup the
-same information that exists today as part of the hwmod
-data files.
-
-Signed-off-by: Rajendra Nayak <[email protected]>
-
----
-.../devicetree/bindings/arm/omap/omap.txt          |    3 ++-
- arch/arm/boot/dts/am33xx.dtsi                      |    2 ++
- arch/arm/boot/dts/omap4.dtsi                       |    3 +++
- arch/arm/boot/dts/omap5.dtsi                       |    2 ++
- 4 files changed, 9 insertions(+), 1 deletion(-)
-
---- a/Documentation/devicetree/bindings/arm/omap/omap.txt
-+++ b/Documentation/devicetree/bindings/arm/omap/omap.txt
-@@ -21,7 +21,8 @@ Required properties:
- Optional properties:
- - ti,no_idle_on_suspend: When present, it prevents the PM to idle the module
-   during suspend.
--
-+- ti,no-reset-on-init: When present, the module should not be reset at init
-+- ti,no-idle-on-init: When present, the module should not be idled at init
- 
- Example:
- 
---- a/arch/arm/boot/dts/am33xx.dtsi
-+++ b/arch/arm/boot/dts/am33xx.dtsi
-@@ -667,6 +667,7 @@
- 			reg = <0x44d00000 0x4000	/* M3 UMEM */
- 			       0x44d80000 0x2000>;	/* M3 DMEM */
- 			ti,hwmods = "wkup_m3";
-+			ti,no-reset-on-init;
- 		};
- 
- 		elm: elm@48080000 {
-@@ -697,6 +698,7 @@
- 		gpmc: gpmc@50000000 {
- 			compatible = "ti,am3352-gpmc";
- 			ti,hwmods = "gpmc";
-+			ti,no-idle-on-init;
- 			reg = <0x50000000 0x2000>;
- 			interrupts = <100>;
- 			gpmc,num-cs = <7>;
---- a/arch/arm/boot/dts/omap4.dtsi
-+++ b/arch/arm/boot/dts/omap4.dtsi
-@@ -214,6 +214,7 @@
- 			gpmc,num-cs = <8>;
- 			gpmc,num-waitpins = <4>;
- 			ti,hwmods = "gpmc";
-+			ti,no-idle-on-init;
- 		};
- 
- 		uart1: serial@4806a000 {
-@@ -492,6 +493,7 @@
- 			reg = <0x4c000000 0x100>;
- 			interrupts = <GIC_SPI 110 IRQ_TYPE_LEVEL_HIGH>;
- 			ti,hwmods = "emif1";
-+			ti,no-idle-on-init;
- 			phy-type = <1>;
- 			hw-caps-read-idle-ctrl;
- 			hw-caps-ll-interface;
-@@ -503,6 +505,7 @@
- 			reg = <0x4d000000 0x100>;
- 			interrupts = <GIC_SPI 111 IRQ_TYPE_LEVEL_HIGH>;
- 			ti,hwmods = "emif2";
-+			ti,no-idle-on-init;
- 			phy-type = <1>;
- 			hw-caps-read-idle-ctrl;
- 			hw-caps-ll-interface;
---- a/arch/arm/boot/dts/omap5.dtsi
-+++ b/arch/arm/boot/dts/omap5.dtsi
-@@ -607,6 +607,7 @@
- 		emif1: emif@0x4c000000 {
- 			compatible	= "ti,emif-4d5";
- 			ti,hwmods	= "emif1";
-+			ti,no-idle-on-init;
- 			phy-type	= <2>; /* DDR PHY type: Intelli PHY */
- 			reg = <0x4c000000 0x400>;
- 			interrupts = <GIC_SPI 110 IRQ_TYPE_LEVEL_HIGH>;
-@@ -618,6 +619,7 @@
- 		emif2: emif@0x4d000000 {
- 			compatible	= "ti,emif-4d5";
- 			ti,hwmods	= "emif2";
-+			ti,no-idle-on-init;
- 			phy-type	= <2>; /* DDR PHY type: Intelli PHY */
- 			reg = <0x4d000000 0x400>;
- 			interrupts = <GIC_SPI 111 IRQ_TYPE_LEVEL_HIGH>;

+ 0 - 85
target/linux/omap/patches-3.12/202-ARM-OMAP2-hwmod-Extract-no-idle-and-no-reset-info-from-DT.patch

@@ -1,85 +0,0 @@
-From f92d9597f781f6a5a39c73dc71604bd8a21c5299 Mon Sep 17 00:00:00 2001
-From: Rajendra Nayak <[email protected]>
-Date: Wed, 09 Oct 2013 07:26:55 +0000
-Subject: ARM: OMAP2+: hwmod: Extract no-idle and no-reset info from DT
-
-Now that we have DT bindings to specify which devices should not
-be reset and idled during init, make hwmod extract the information
-(and store them in internal flags) from Device tree.
-
-Signed-off-by: Rajendra Nayak <[email protected]>
-[[email protected]: updated to apply]
-Signed-off-by: Paul Walmsley <[email protected]>
-
----
---- a/arch/arm/mach-omap2/omap_hwmod.c
-+++ b/arch/arm/mach-omap2/omap_hwmod.c
-@@ -2393,6 +2393,8 @@ static struct device_node *of_dev_hwmod_
- /**
-  * _init_mpu_rt_base - populate the virtual address for a hwmod
-  * @oh: struct omap_hwmod * to locate the virtual address
-+ * @data: (unused, caller should pass NULL)
-+ * @np: struct device_node * of the IP block's device node in the DT data
-  *
-  * Cache the virtual address used by the MPU to access this IP block's
-  * registers.  This address is needed early so the OCP registers that
-@@ -2401,11 +2403,11 @@ static struct device_node *of_dev_hwmod_
-  * Returns 0 on success, -EINVAL if an invalid hwmod is passed, and
-  * -ENXIO on absent or invalid register target address space.
-  */
--static int __init _init_mpu_rt_base(struct omap_hwmod *oh, void *data)
-+static int __init _init_mpu_rt_base(struct omap_hwmod *oh, void *data,
-+				    struct device_node *np)
- {
- 	struct omap_hwmod_addr_space *mem;
- 	void __iomem *va_start = NULL;
--	struct device_node *np;
- 
- 	if (!oh)
- 		return -EINVAL;
-@@ -2421,12 +2423,10 @@ static int __init _init_mpu_rt_base(stru
- 			 oh->name);
- 
- 		/* Extract the IO space from device tree blob */
--		if (!of_have_populated_dt())
-+		if (!np)
- 			return -ENXIO;
- 
--		np = of_dev_hwmod_lookup(of_find_node_by_name(NULL, "ocp"), oh);
--		if (np)
--			va_start = of_iomap(np, oh->mpu_rt_idx);
-+		va_start = of_iomap(np, oh->mpu_rt_idx);
- 	} else {
- 		va_start = ioremap(mem->pa_start, mem->pa_end - mem->pa_start);
- 	}
-@@ -2459,12 +2459,16 @@ static int __init _init_mpu_rt_base(stru
- static int __init _init(struct omap_hwmod *oh, void *data)
- {
- 	int r;
-+	struct device_node *np = NULL;
- 
- 	if (oh->_state != _HWMOD_STATE_REGISTERED)
- 		return 0;
- 
-+	if (of_have_populated_dt())
-+		np = of_dev_hwmod_lookup(of_find_node_by_name(NULL, "ocp"), oh);
-+
- 	if (oh->class->sysc) {
--		r = _init_mpu_rt_base(oh, NULL);
-+		r = _init_mpu_rt_base(oh, NULL, np);
- 		if (r < 0) {
- 			WARN(1, "omap_hwmod: %s: doesn't have mpu register target base\n",
- 			     oh->name);
-@@ -2478,6 +2482,12 @@ static int __init _init(struct omap_hwmo
- 		return -EINVAL;
- 	}
- 
-+	if (np)
-+		if (of_find_property(np, "ti,no-reset-on-init", NULL))
-+			oh->flags |= HWMOD_INIT_NO_RESET;
-+		if (of_find_property(np, "ti,no-idle-on-init", NULL))
-+			oh->flags |= HWMOD_INIT_NO_IDLE;
-+
- 	oh->_state = _HWMOD_STATE_INITIALIZED;
- 
- 	return 0;

+ 0 - 86
target/linux/omap/patches-3.12/203-ARM-OMAP2-hwmod-Cleanup-usag~RESET-and-HWMOD_INIT_NO_IDLE.patch

@@ -1,86 +0,0 @@
-With DT bindings to specify which devices should not be idled and reset
-at init being in place, and the corresponding dtsi files for am33xx/omap4
-and omap5 updated using those bindings, we can now clean up hwmod internal
-flags for HWMOD_INIT_NO_RESET and HWMOD_INIT_NO_IDLE which were infact used
-to specify the exact same information.
-
-For GPMC, the HWMOD_INIT_NO_RESET flag seems to be added in hwmod not due to
-any errata around the GPMC IP, but rather because any timings
-set by the bootloader are not being correctly programmed by the kernel.
-This seems like something that needs to be fixed as part of GPMC driver
-in the kernel, and hence the flag is left as is in hwmod, which can be
-removed once the driver does what its expected to.
-
-Signed-off-by: Rajendra Nayak <[email protected]>
-
----
-arch/arm/mach-omap2/omap_hwmod_33xx_data.c |    4 ++--
- arch/arm/mach-omap2/omap_hwmod_44xx_data.c |    4 +---
- arch/arm/mach-omap2/omap_hwmod_54xx_data.c |    2 --
- 3 files changed, 3 insertions(+), 7 deletions(-)
-
---- a/arch/arm/mach-omap2/omap_hwmod_33xx_data.c
-+++ b/arch/arm/mach-omap2/omap_hwmod_33xx_data.c
-@@ -198,7 +198,7 @@ static struct omap_hwmod am33xx_wkup_m3_
- 	.class		= &am33xx_wkup_m3_hwmod_class,
- 	.clkdm_name	= "l4_wkup_aon_clkdm",
- 	/* Keep hardreset asserted */
--	.flags		= HWMOD_INIT_NO_RESET | HWMOD_NO_IDLEST,
-+	.flags		= HWMOD_NO_IDLEST,
- 	.main_clk	= "dpll_core_m4_div2_ck",
- 	.prcm		= {
- 		.omap4	= {
-@@ -932,7 +932,7 @@ static struct omap_hwmod am33xx_gpmc_hwm
- 	.name		= "gpmc",
- 	.class		= &am33xx_gpmc_hwmod_class,
- 	.clkdm_name	= "l3s_clkdm",
--	.flags		= (HWMOD_INIT_NO_IDLE | HWMOD_INIT_NO_RESET),
-+	.flags		= HWMOD_INIT_NO_RESET,
- 	.main_clk	= "l3s_gclk",
- 	.prcm		= {
- 		.omap4	= {
---- a/arch/arm/mach-omap2/omap_hwmod_44xx_data.c
-+++ b/arch/arm/mach-omap2/omap_hwmod_44xx_data.c
-@@ -914,7 +914,6 @@ static struct omap_hwmod omap44xx_emif1_
- 	.name		= "emif1",
- 	.class		= &omap44xx_emif_hwmod_class,
- 	.clkdm_name	= "l3_emif_clkdm",
--	.flags		= HWMOD_INIT_NO_IDLE,
- 	.main_clk	= "ddrphy_ck",
- 	.prcm = {
- 		.omap4 = {
-@@ -930,7 +929,6 @@ static struct omap_hwmod omap44xx_emif2_
- 	.name		= "emif2",
- 	.class		= &omap44xx_emif_hwmod_class,
- 	.clkdm_name	= "l3_emif_clkdm",
--	.flags		= HWMOD_INIT_NO_IDLE,
- 	.main_clk	= "ddrphy_ck",
- 	.prcm = {
- 		.omap4 = {
-@@ -1184,7 +1182,7 @@ static struct omap_hwmod omap44xx_gpmc_h
- 	 * the kernel from the board file or DT data.
- 	 * HWMOD_INIT_NO_RESET should be removed ASAP.
- 	 */
--	.flags		= HWMOD_INIT_NO_IDLE | HWMOD_INIT_NO_RESET,
-+	.flags		= HWMOD_INIT_NO_RESET,
- 	.prcm = {
- 		.omap4 = {
- 			.clkctrl_offs = OMAP4_CM_L3_2_GPMC_CLKCTRL_OFFSET,
---- a/arch/arm/mach-omap2/omap_hwmod_54xx_data.c
-+++ b/arch/arm/mach-omap2/omap_hwmod_54xx_data.c
-@@ -352,7 +352,6 @@ static struct omap_hwmod omap54xx_emif1_
- 	.name		= "emif1",
- 	.class		= &omap54xx_emif_hwmod_class,
- 	.clkdm_name	= "emif_clkdm",
--	.flags		= HWMOD_INIT_NO_IDLE,
- 	.main_clk	= "dpll_core_h11x2_ck",
- 	.prcm = {
- 		.omap4 = {
-@@ -368,7 +367,6 @@ static struct omap_hwmod omap54xx_emif2_
- 	.name		= "emif2",
- 	.class		= &omap54xx_emif_hwmod_class,
- 	.clkdm_name	= "emif_clkdm",
--	.flags		= HWMOD_INIT_NO_IDLE,
- 	.main_clk	= "dpll_core_h11x2_ck",
- 	.prcm = {
- 		.omap4 = {

+ 0 - 22
target/linux/omap/patches-3.12/204-ARM-dts-AM335x-evmsk-Do-not-reset-gpio0.patch

@@ -1,22 +0,0 @@
-Do not reset GPIO0 at  boot-up because GPIO0 is used
-on AM335x EVM-SK to control VTT regulators on DDR3.
-
-Without this EVM-SK boards fail to boot-up because
-of DDR3 corruption.
-
-Signed-off-by: Rajendra Nayak <[email protected]>
-
----
-arch/arm/boot/dts/am335x-evmsk.dts |    4 ++++
- 1 file changed, 4 insertions(+)
-
---- a/arch/arm/boot/dts/am335x-evmsk.dts
-+++ b/arch/arm/boot/dts/am335x-evmsk.dts
-@@ -426,3 +426,7 @@
- 	status = "okay";
- 	vmmc-supply = <&vmmc_reg>;
- };
-+
-+&gpio0 {
-+	ti,no-reset-on-init;
-+};

+ 0 - 97
target/linux/omap/patches-3.12/300-ARM-dts-AM33XX-Add-SHAM-data-and-documentation.patch

@@ -1,97 +0,0 @@
-Add the generic AM33XX SHAM module's device tree data and
-enable it for the am335x-evm, am335x-evmsk, and am335x-bone
-platforms.  Also add Documentation file describing the data
-for the SHAM module.
-
-[[email protected]: Dropped interrupt-parrent property, documentation fixups]
-CC: Paul Walmsley <[email protected]>
-Signed-off-by: Mark A. Greer <[email protected]>
-Acked-by: Mark Rutland <[email protected]>
-
----
-.../devicetree/bindings/crypto/omap-sham.txt       | 28 ++++++++++++++++++++++
- arch/arm/boot/dts/am335x-bone.dts                  |  4 ++++
- arch/arm/boot/dts/am335x-evm.dts                   |  4 ++++
- arch/arm/boot/dts/am335x-evmsk.dts                 |  4 ++++
- arch/arm/boot/dts/am33xx.dtsi                      |  9 +++++++
- 5 files changed, 49 insertions(+)
- create mode 100644 Documentation/devicetree/bindings/crypto/omap-sham.txt
-
---- /dev/null
-+++ b/Documentation/devicetree/bindings/crypto/omap-sham.txt
-@@ -0,0 +1,28 @@
-+OMAP SoC SHA crypto Module
-+
-+Required properties:
-+
-+- compatible : Should contain entries for this and backward compatible
-+  SHAM versions:
-+  - "ti,omap2-sham" for OMAP2 & OMAP3.
-+  - "ti,omap4-sham" for OMAP4 and AM33XX.
-+  Note that these two versions are incompatible.
-+- ti,hwmods: Name of the hwmod associated with the SHAM module
-+- reg : Offset and length of the register set for the module
-+- interrupts : the interrupt-specifier for the SHAM module.
-+
-+Optional properties:
-+- dmas: DMA specifiers for the rx dma. See the DMA client binding,
-+	Documentation/devicetree/bindings/dma/dma.txt
-+- dma-names: DMA request name. Should be "rx" if a dma is present.
-+
-+Example:
-+	/* AM335x */
-+	sham: sham@53100000 {
-+		compatible = "ti,omap4-sham";
-+		ti,hwmods = "sham";
-+		reg = <0x53100000 0x200>;
-+		interrupts = <109>;
-+		dmas = <&edma 36>;
-+		dma-names = "rx";
-+	};
---- a/arch/arm/boot/dts/am335x-bone.dts
-+++ b/arch/arm/boot/dts/am335x-bone.dts
-@@ -20,3 +20,7 @@
- 	status = "okay";
- 	vmmc-supply = <&ldo3_reg>;
- };
-+
-+&sham {
-+	status = "okay";
-+};
---- a/arch/arm/boot/dts/am335x-evm.dts
-+++ b/arch/arm/boot/dts/am335x-evm.dts
-@@ -524,3 +524,7 @@
- 	status = "okay";
- 	vmmc-supply = <&vmmc_reg>;
- };
-+
-+&sham {
-+	status = "okay";
-+};
---- a/arch/arm/boot/dts/am335x-evmsk.dts
-+++ b/arch/arm/boot/dts/am335x-evmsk.dts
-@@ -430,3 +430,7 @@
- &gpio0 {
- 	ti,no-reset-on-init;
- };
-+
-+&sham {
-+	status = "okay";
-+};
---- a/arch/arm/boot/dts/am33xx.dtsi
-+++ b/arch/arm/boot/dts/am33xx.dtsi
-@@ -707,5 +707,14 @@
- 			#size-cells = <1>;
- 			status = "disabled";
- 		};
-+
-+		sham: sham@53100000 {
-+			compatible = "ti,omap4-sham";
-+			ti,hwmods = "sham";
-+			reg = <0x53100000 0x200>;
-+			interrupts = <109>;
-+			dmas = <&edma 36>;
-+			dma-names = "rx";
-+		};
- 	};
- };

+ 0 - 101
target/linux/omap/patches-3.12/301-ARM-dts-AM33XX-Add-AES-data-and-documentation.patch

@@ -1,101 +0,0 @@
-Add the generic AM33XX AES module's device tree data and
-enable it for the am335x-evm, am335x-evmsk, and am335x-bone
-platforms.  Also add Documentation file describing the data
-for the AES module.
-
-[[email protected]: Dropped interrupt-parent propert, documentation fixups]
-
-CC: Paul Walmsley <[email protected]>
-Signed-off-by: Mark A. Greer <[email protected]>
-
----
-.../devicetree/bindings/crypto/omap-aes.txt        | 31 ++++++++++++++++++++++
- arch/arm/boot/dts/am335x-bone.dts                  |  4 +++
- arch/arm/boot/dts/am335x-evm.dts                   |  4 +++
- arch/arm/boot/dts/am335x-evmsk.dts                 |  4 +++
- arch/arm/boot/dts/am33xx.dtsi                      | 10 +++++++
- 5 files changed, 53 insertions(+)
- create mode 100644 Documentation/devicetree/bindings/crypto/omap-aes.txt
-
---- /dev/null
-+++ b/Documentation/devicetree/bindings/crypto/omap-aes.txt
-@@ -0,0 +1,31 @@
-+OMAP SoC AES crypto Module
-+
-+Required properties:
-+
-+- compatible : Should contain entries for this and backward compatible
-+  AES versions:
-+  - "ti,omap2-aes" for OMAP2.
-+  - "ti,omap3-aes" for OMAP3.
-+  - "ti,omap4-aes" for OMAP4 and AM33XX.
-+  Note that the OMAP2 and 3 versions are compatible (OMAP3 supports
-+  more algorithms) but they are incompatible with OMAP4.
-+- ti,hwmods: Name of the hwmod associated with the AES module
-+- reg : Offset and length of the register set for the module
-+- interrupts : the interrupt-specifier for the AES module.
-+
-+Optional properties:
-+- dmas: DMA specifiers for tx and rx dma. See the DMA client binding,
-+	Documentation/devicetree/bindings/dma/dma.txt
-+- dma-names: DMA request names should include "tx" and "rx" if present.
-+
-+Example:
-+	/* AM335x */
-+	aes: aes@53500000 {
-+		compatible = "ti,omap4-aes";
-+		ti,hwmods = "aes";
-+		reg = <0x53500000 0xa0>;
-+		interrupts = <102>;
-+		dmas = <&edma 6>,
-+		       <&edma 5>;
-+		dma-names = "tx", "rx";
-+	};
---- a/arch/arm/boot/dts/am335x-bone.dts
-+++ b/arch/arm/boot/dts/am335x-bone.dts
-@@ -24,3 +24,7 @@
- &sham {
- 	status = "okay";
- };
-+
-+&aes {
-+	status = "okay";
-+};
---- a/arch/arm/boot/dts/am335x-evm.dts
-+++ b/arch/arm/boot/dts/am335x-evm.dts
-@@ -528,3 +528,7 @@
- &sham {
- 	status = "okay";
- };
-+
-+&aes {
-+	status = "okay";
-+};
---- a/arch/arm/boot/dts/am335x-evmsk.dts
-+++ b/arch/arm/boot/dts/am335x-evmsk.dts
-@@ -434,3 +434,7 @@
- &sham {
- 	status = "okay";
- };
-+
-+&aes {
-+	status = "okay";
-+};
---- a/arch/arm/boot/dts/am33xx.dtsi
-+++ b/arch/arm/boot/dts/am33xx.dtsi
-@@ -716,5 +716,15 @@
- 			dmas = <&edma 36>;
- 			dma-names = "rx";
- 		};
-+
-+		aes: aes@53500000 {
-+			compatible = "ti,omap4-aes";
-+			ti,hwmods = "aes";
-+			reg = <0x53500000 0xa0>;
-+			interrupts = <102>;
-+			dmas = <&edma 6>,
-+			       <&edma 5>;
-+			dma-names = "tx", "rx";
-+		};
- 	};
- };

+ 0 - 21
target/linux/omap/patches-3.12/302-ARM-dts-AM33XX-Fix-AES-interrupt-number.patch

@@ -1,21 +0,0 @@
-AES interrupts were previously not used, but after recent changes to omap-aes
-driver, its being used. We correct the interrupt number to have working PIO
-mode.
-
-Signed-off-by: Joel Fernandes <[email protected]>
-
----
-arch/arm/boot/dts/am33xx.dtsi | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
---- a/arch/arm/boot/dts/am33xx.dtsi
-+++ b/arch/arm/boot/dts/am33xx.dtsi
-@@ -721,7 +721,7 @@
- 			compatible = "ti,omap4-aes";
- 			ti,hwmods = "aes";
- 			reg = <0x53500000 0xa0>;
--			interrupts = <102>;
-+			interrupts = <103>;
- 			dmas = <&edma 6>,
- 			       <&edma 5>;
- 			dma-names = "tx", "rx";

+ 0 - 62
target/linux/omap/patches-3.12/350-ARM-AM33xx-hwmod-Add-RNG-module-data.patch

@@ -1,62 +0,0 @@
-Add RNG hwmod data for AM33xx SoC.
-
-Signed-off-by: Lokesh Vutla <[email protected]>
-
----
-* Made am33xx_l4_per__rng structure as static to fix sparse warning
-
- arch/arm/mach-omap2/omap_hwmod_33xx_data.c |   36 ++++++++++++++++++++++++++++
- 1 file changed, 36 insertions(+)
-
---- a/arch/arm/mach-omap2/omap_hwmod_33xx_data.c
-+++ b/arch/arm/mach-omap2/omap_hwmod_33xx_data.c
-@@ -2480,6 +2480,41 @@ static struct omap_hwmod_ocp_if am33xx_l
- 	.user		= OCP_USER_MPU | OCP_USER_SDMA,
- };
- 
-+/* rng */
-+static struct omap_hwmod_class_sysconfig am33xx_rng_sysc = {
-+	.rev_offs	= 0x1fe0,
-+	.sysc_offs	= 0x1fe4,
-+	.sysc_flags	= SYSC_HAS_AUTOIDLE | SYSC_HAS_SIDLEMODE,
-+	.idlemodes	= SIDLE_FORCE | SIDLE_NO,
-+	.sysc_fields	= &omap_hwmod_sysc_type1,
-+};
-+
-+static struct omap_hwmod_class am33xx_rng_hwmod_class = {
-+	.name		= "rng",
-+	.sysc		= &am33xx_rng_sysc,
-+};
-+
-+static struct omap_hwmod am33xx_rng_hwmod = {
-+	.name		= "rng",
-+	.class		= &am33xx_rng_hwmod_class,
-+	.clkdm_name	= "l4ls_clkdm",
-+	.flags		= HWMOD_SWSUP_SIDLE,
-+	.main_clk	= "rng_fck",
-+	.prcm		= {
-+		.omap4	= {
-+			.clkctrl_offs	= AM33XX_CM_PER_RNG_CLKCTRL_OFFSET,
-+			.modulemode	= MODULEMODE_SWCTRL,
-+		},
-+	},
-+};
-+
-+static struct omap_hwmod_ocp_if am33xx_l4_per__rng = {
-+	.master		= &am33xx_l4_ls_hwmod,
-+	.slave		= &am33xx_rng_hwmod,
-+	.clk		= "rng_fck",
-+	.user		= OCP_USER_MPU,
-+};
-+
- static struct omap_hwmod_ocp_if *am33xx_hwmod_ocp_ifs[] __initdata = {
- 	&am33xx_l3_main__emif,
- 	&am33xx_mpu__l3_main,
-@@ -2559,6 +2594,7 @@ static struct omap_hwmod_ocp_if *am33xx_
- 	&am33xx_cpgmac0__mdio,
- 	&am33xx_l3_main__sha0,
- 	&am33xx_l3_main__aes0,
-+	&am33xx_l4_per__rng,
- 	NULL,
- };
- 

+ 0 - 145
target/linux/omap/patches-3.12/400-ASoC-davinci-evm-Move-sysclk-logic-away-from-evm_hw_.patch

@@ -1,145 +0,0 @@
-From 13254d51149ce1a0fdbb38fa229c6cc91bcbe6ec Mon Sep 17 00:00:00 2001
-From: Jyri Sarha <[email protected]>
-Date: Fri, 13 Sep 2013 17:43:18 +0300
-Subject: [PATCH 211/752] ASoC: davinci-evm: Move sysclk logic away from
- evm_hw_params
-
-The sysclk rate does not change runtime so it should be initialized at
-init time.
-
-Signed-off-by: Jyri Sarha <[email protected]>
----
- sound/soc/davinci/davinci-evm.c |   64 +++++++++++++++++++++++++++------------
- 1 file changed, 44 insertions(+), 20 deletions(-)
-
---- a/sound/soc/davinci/davinci-evm.c
-+++ b/sound/soc/davinci/davinci-evm.c
-@@ -27,6 +27,10 @@
- #include "davinci-i2s.h"
- #include "davinci-mcasp.h"
- 
-+struct snd_soc_card_drvdata_davinci {
-+	unsigned sysclk;
-+};
-+
- #define AUDIO_FORMAT (SND_SOC_DAIFMT_DSP_B | \
- 		SND_SOC_DAIFMT_CBM_CFM | SND_SOC_DAIFMT_IB_NF)
- static int evm_hw_params(struct snd_pcm_substream *substream,
-@@ -35,27 +39,11 @@ static int evm_hw_params(struct snd_pcm_
- 	struct snd_soc_pcm_runtime *rtd = substream->private_data;
- 	struct snd_soc_dai *codec_dai = rtd->codec_dai;
- 	struct snd_soc_dai *cpu_dai = rtd->cpu_dai;
-+	struct snd_soc_codec *codec = rtd->codec;
-+	struct snd_soc_card *soc_card = codec->card;
- 	int ret = 0;
--	unsigned sysclk;
--
--	/* ASP1 on DM355 EVM is clocked by an external oscillator */
--	if (machine_is_davinci_dm355_evm() || machine_is_davinci_dm6467_evm() ||
--	    machine_is_davinci_dm365_evm())
--		sysclk = 27000000;
--
--	/* ASP0 in DM6446 EVM is clocked by U55, as configured by
--	 * board-dm644x-evm.c using GPIOs from U18.  There are six
--	 * options; here we "know" we use a 48 KHz sample rate.
--	 */
--	else if (machine_is_davinci_evm())
--		sysclk = 12288000;
--
--	else if (machine_is_davinci_da830_evm() ||
--				machine_is_davinci_da850_evm())
--		sysclk = 24576000;
--
--	else
--		return -EINVAL;
-+	unsigned sysclk = ((struct snd_soc_card_drvdata_davinci *)
-+			   snd_soc_card_get_drvdata(soc_card))->sysclk;
- 
- 	/* set codec DAI configuration */
- 	ret = snd_soc_dai_set_fmt(codec_dai, AUDIO_FORMAT);
-@@ -243,35 +231,65 @@ static struct snd_soc_dai_link da850_evm
- };
- 
- /* davinci dm6446 evm audio machine driver */
-+/*
-+ * ASP0 in DM6446 EVM is clocked by U55, as configured by
-+ * board-dm644x-evm.c using GPIOs from U18.  There are six
-+ * options; here we "know" we use a 48 KHz sample rate.
-+ */
-+static struct snd_soc_card_drvdata_davinci dm6446_snd_soc_card_drvdata = {
-+	.sysclk = 12288000,
-+};
-+
- static struct snd_soc_card dm6446_snd_soc_card_evm = {
- 	.name = "DaVinci DM6446 EVM",
- 	.owner = THIS_MODULE,
- 	.dai_link = &dm6446_evm_dai,
- 	.num_links = 1,
-+	.drvdata = &dm6446_snd_soc_card_drvdata,
- };
- 
- /* davinci dm355 evm audio machine driver */
-+/* ASP1 on DM355 EVM is clocked by an external oscillator */
-+static struct snd_soc_card_drvdata_davinci dm355_snd_soc_card_drvdata = {
-+	.sysclk = 27000000,
-+};
-+
- static struct snd_soc_card dm355_snd_soc_card_evm = {
- 	.name = "DaVinci DM355 EVM",
- 	.owner = THIS_MODULE,
- 	.dai_link = &dm355_evm_dai,
- 	.num_links = 1,
-+	.drvdata = &dm355_snd_soc_card_drvdata,
- };
- 
- /* davinci dm365 evm audio machine driver */
-+static struct snd_soc_card_drvdata_davinci dm365_snd_soc_card_drvdata = {
-+	.sysclk = 27000000,
-+};
-+
- static struct snd_soc_card dm365_snd_soc_card_evm = {
- 	.name = "DaVinci DM365 EVM",
- 	.owner = THIS_MODULE,
- 	.dai_link = &dm365_evm_dai,
- 	.num_links = 1,
-+	.drvdata = &dm365_snd_soc_card_drvdata,
- };
- 
- /* davinci dm6467 evm audio machine driver */
-+static struct snd_soc_card_drvdata_davinci dm6467_snd_soc_card_drvdata = {
-+	.sysclk = 27000000,
-+};
-+
- static struct snd_soc_card dm6467_snd_soc_card_evm = {
- 	.name = "DaVinci DM6467 EVM",
- 	.owner = THIS_MODULE,
- 	.dai_link = dm6467_evm_dai,
- 	.num_links = ARRAY_SIZE(dm6467_evm_dai),
-+	.drvdata = &dm6467_snd_soc_card_drvdata,
-+};
-+
-+static struct snd_soc_card_drvdata_davinci da830_snd_soc_card_drvdata = {
-+	.sysclk = 24576000,
- };
- 
- static struct snd_soc_card da830_snd_soc_card = {
-@@ -279,6 +297,11 @@ static struct snd_soc_card da830_snd_soc
- 	.owner = THIS_MODULE,
- 	.dai_link = &da830_evm_dai,
- 	.num_links = 1,
-+	.drvdata = &da830_snd_soc_card_drvdata,
-+};
-+
-+static struct snd_soc_card_drvdata_davinci da850_snd_soc_card_drvdata = {
-+	.sysclk = 24576000,
- };
- 
- static struct snd_soc_card da850_snd_soc_card = {
-@@ -286,6 +309,7 @@ static struct snd_soc_card da850_snd_soc
- 	.owner = THIS_MODULE,
- 	.dai_link = &da850_evm_dai,
- 	.num_links = 1,
-+	.drvdata = &da850_snd_soc_card_drvdata,
- };
- 
- static struct platform_device *evm_snd_device;

+ 0 - 253
target/linux/omap/patches-3.12/401-ASoC-davinci-evm-Add-device-tree-binding.patch

@@ -1,253 +0,0 @@
-From af9ef849e8700327b807361344427a43c38e823a Mon Sep 17 00:00:00 2001
-From: "Hebbar, Gururaja" <[email protected]>
-Date: Tue, 31 Jul 2012 21:25:38 +0530
-Subject: [PATCH 212/752] ASoC: davinci-evm: Add device tree binding
-
-Device tree support for Davinci Machine driver
-
-When the board boots with device tree, the driver will receive card,
-codec, dai interface details (like the card name, DAPM routing map,
-phandle for the audio components described in the dts file, codec mclk
-speed). The card will be set up based on this information. Since the
-routing is provided via DT we can mark the card fully routed so core
-can take care of disconnecting the unused pins.
-
-Signed-off-by: Hebbar, Gururaja <[email protected]>
-Signed-off-by: Darren Etheridge <[email protected]>
-Signed-off-by: Jyri Sarha <[email protected]>
----
- .../bindings/sound/davinci-evm-audio.txt           |   58 ++++++++++
- sound/soc/davinci/davinci-evm.c                    |  120 +++++++++++++++++++-
- 2 files changed, 176 insertions(+), 2 deletions(-)
- create mode 100644 Documentation/devicetree/bindings/sound/davinci-evm-audio.txt
-
---- /dev/null
-+++ b/Documentation/devicetree/bindings/sound/davinci-evm-audio.txt
-@@ -0,0 +1,58 @@
-+* Texas Instruments SoC audio setups with TLV320AIC3X Codec
-+
-+Required properties:
-+- compatible : "ti,da830-evm-audio" : forDM365/DA8xx/OMAPL1x/AM33xx
-+- ti,model : The user-visible name of this sound complex.
-+- ti,audio-codec : The phandle of the TLV320AIC3x audio codec
-+- ti,mcasp-controller : The phandle of the McASP controller
-+- ti,codec-clock-rate : The Codec Clock rate (in Hz) applied to the Codec
-+- ti,audio-routing : A list of the connections between audio components.
-+  Each entry is a pair of strings, the first being the connection's sink,
-+  the second being the connection's source. Valid names for sources and
-+  sinks are the codec's pins, and the jacks on the board:
-+
-+  TLV320AIC3X pins:
-+
-+  * LLOUT
-+  * RLOUT
-+  * MONO_LOUT
-+  * HPLOUT
-+  * HPROUT
-+  * HPLCOM
-+  * HPRCOM
-+  * MIC3L
-+  * MIC3R
-+  * LINE1L
-+  * LINE2L
-+  * LINE1R
-+  * LINE2R
-+
-+  Board connectors:
-+
-+  * Headphone Jack
-+  * Line Out
-+  * Mic Jack
-+  * Line In
-+
-+
-+Example:
-+
-+sound {
-+	compatible = "ti,da830-evm-audio";
-+	ti,model = "DA830 EVM";
-+	ti,audio-codec = <&tlv320aic3x>;
-+	ti,mcasp-controller = <&mcasp1>;
-+	ti,codec-clock-rate = <12000000>;
-+	ti,audio-routing =
-+		"Headphone Jack",       "HPLOUT",
-+		"Headphone Jack",       "HPROUT",
-+		"Line Out",             "LLOUT",
-+		"Line Out",             "RLOUT",
-+		"MIC3L",                "Mic Bias 2V",
-+		"MIC3R",                "Mic Bias 2V",
-+		"Mic Bias 2V",          "Mic Jack",
-+		"LINE1L",               "Line In",
-+		"LINE2L",               "Line In",
-+		"LINE1R",               "Line In",
-+		"LINE2R",               "Line In";
-+};
---- a/sound/soc/davinci/davinci-evm.c
-+++ b/sound/soc/davinci/davinci-evm.c
-@@ -16,6 +16,7 @@
- #include <linux/platform_device.h>
- #include <linux/platform_data/edma.h>
- #include <linux/i2c.h>
-+#include <linux/of_platform.h>
- #include <sound/core.h>
- #include <sound/pcm.h>
- #include <sound/soc.h>
-@@ -23,6 +24,8 @@
- #include <asm/dma.h>
- #include <asm/mach-types.h>
- 
-+#include <linux/edma.h>
-+
- #include "davinci-pcm.h"
- #include "davinci-i2s.h"
- #include "davinci-mcasp.h"
-@@ -121,13 +124,22 @@ static int evm_aic3x_init(struct snd_soc
- {
- 	struct snd_soc_codec *codec = rtd->codec;
- 	struct snd_soc_dapm_context *dapm = &codec->dapm;
-+	struct device_node *np = codec->card->dev->of_node;
-+	int ret;
- 
- 	/* Add davinci-evm specific widgets */
- 	snd_soc_dapm_new_controls(dapm, aic3x_dapm_widgets,
- 				  ARRAY_SIZE(aic3x_dapm_widgets));
- 
--	/* Set up davinci-evm specific audio path audio_map */
--	snd_soc_dapm_add_routes(dapm, audio_map, ARRAY_SIZE(audio_map));
-+	if (np) {
-+		ret = snd_soc_of_parse_audio_routing(codec->card,
-+							"ti,audio-routing");
-+		if (ret)
-+			return ret;
-+	} else {
-+		/* Set up davinci-evm specific audio path audio_map */
-+		snd_soc_dapm_add_routes(dapm, audio_map, ARRAY_SIZE(audio_map));
-+	}
- 
- 	/* not connected */
- 	snd_soc_dapm_disable_pin(dapm, "MONO_LOUT");
-@@ -312,6 +324,98 @@ static struct snd_soc_card da850_snd_soc
- 	.drvdata = &da850_snd_soc_card_drvdata,
- };
- 
-+#if defined(CONFIG_OF)
-+
-+/*
-+ * The struct is used as place holder. It will be completely
-+ * filled with data from dt node.
-+ */
-+static struct snd_soc_dai_link evm_dai_tlv320aic3x = {
-+	.name		= "TLV320AIC3X",
-+	.stream_name	= "AIC3X",
-+	.codec_dai_name	= "tlv320aic3x-hifi",
-+	.ops            = &evm_ops,
-+	.init           = evm_aic3x_init,
-+};
-+
-+static const struct of_device_id davinci_evm_dt_ids[] = {
-+	{
-+		.compatible = "ti,da830-evm-audio",
-+		.data = (void *) &evm_dai_tlv320aic3x,
-+	},
-+	{ /* sentinel */ }
-+};
-+MODULE_DEVICE_TABLE(of, davinci_evm_dt_ids);
-+
-+/* davinci evm audio machine driver */
-+static struct snd_soc_card evm_soc_card = {
-+	.owner = THIS_MODULE,
-+	.num_links = 1,
-+};
-+
-+static int davinci_evm_probe(struct platform_device *pdev)
-+{
-+	struct device_node *np = pdev->dev.of_node;
-+	const struct of_device_id *match =
-+		of_match_device(of_match_ptr(davinci_evm_dt_ids), &pdev->dev);
-+	struct snd_soc_dai_link *dai = (struct snd_soc_dai_link *) match->data;
-+	struct snd_soc_card_drvdata_davinci *drvdata = NULL;
-+	int ret = 0;
-+
-+	evm_soc_card.dai_link = dai;
-+
-+	dai->codec_of_node = of_parse_phandle(np, "ti,audio-codec", 0);
-+	if (!dai->codec_of_node)
-+		return -EINVAL;
-+
-+	dai->cpu_of_node = of_parse_phandle(np, "ti,mcasp-controller", 0);
-+	if (!dai->cpu_of_node)
-+		return -EINVAL;
-+
-+	dai->platform_of_node = dai->cpu_of_node;
-+
-+	evm_soc_card.dev = &pdev->dev;
-+	ret = snd_soc_of_parse_card_name(&evm_soc_card, "ti,model");
-+	if (ret)
-+		return ret;
-+
-+	drvdata = devm_kzalloc(&pdev->dev, sizeof(*drvdata), GFP_KERNEL);
-+	if (!drvdata)
-+		return -ENOMEM;
-+
-+	ret = of_property_read_u32(np, "ti,codec-clock-rate", &drvdata->sysclk);
-+	if (ret < 0)
-+		return -EINVAL;
-+
-+	snd_soc_card_set_drvdata(&evm_soc_card, drvdata);
-+	ret = snd_soc_register_card(&evm_soc_card);
-+
-+	if (ret)
-+		dev_err(&pdev->dev, "snd_soc_register_card failed (%d)\n", ret);
-+
-+	return ret;
-+}
-+
-+static int davinci_evm_remove(struct platform_device *pdev)
-+{
-+	struct snd_soc_card *card = platform_get_drvdata(pdev);
-+
-+	snd_soc_unregister_card(card);
-+
-+	return 0;
-+}
-+
-+static struct platform_driver davinci_evm_driver = {
-+	.probe		= davinci_evm_probe,
-+	.remove		= davinci_evm_remove,
-+	.driver		= {
-+		.name	= "davinci_evm",
-+		.owner	= THIS_MODULE,
-+		.of_match_table = of_match_ptr(davinci_evm_dt_ids),
-+	},
-+};
-+#endif
-+
- static struct platform_device *evm_snd_device;
- 
- static int __init evm_init(void)
-@@ -320,6 +424,13 @@ static int __init evm_init(void)
- 	int index;
- 	int ret;
- 
-+	/*
-+	 * If dtb is there, the devices will be created dynamically.
-+	 * Only register platfrom driver structure.
-+	 */
-+	if (of_have_populated_dt())
-+		return platform_driver_register(&davinci_evm_driver);
-+
- 	if (machine_is_davinci_evm()) {
- 		evm_snd_dev_data = &dm6446_snd_soc_card_evm;
- 		index = 0;
-@@ -355,6 +466,11 @@ static int __init evm_init(void)
- 
- static void __exit evm_exit(void)
- {
-+	if (of_have_populated_dt()) {
-+		platform_driver_unregister(&davinci_evm_driver);
-+		return;
-+	}
-+
- 	platform_device_unregister(evm_snd_device);
- }
- 

+ 0 - 171
target/linux/omap/patches-3.12/402-ASoC-davinci-mcasp-Add-DMA-register-locations-to-DT.patch

@@ -1,171 +0,0 @@
-From fb2002dbc326d2e408698038b668b19741567a48 Mon Sep 17 00:00:00 2001
-From: Jyri Sarha <[email protected]>
-Date: Fri, 6 Sep 2013 12:15:00 +0300
-Subject: [PATCH 213/752] ASoC: davinci-mcasp: Add DMA register locations to
- DT
-
-This patch adds DMA register location to mcasp DT bindings. On am33xx
-SoCs the McASP registers are mapped trough L4 interconnect, which is
-not accessible by the DMA controller, so McASP data port is mapped
-trough L3 to a different location.
-
-Signed-off-by: Hebbar, Gururaja <[email protected]>
-Signed-off-by: Darren Etheridge <[email protected]>
-Signed-off-by: Jyri Sarha <[email protected]>
----
- .../bindings/sound/davinci-mcasp-audio.txt         |    8 ++-
- sound/soc/davinci/davinci-mcasp.c                  |   59 +++++++++++++-------
- 2 files changed, 46 insertions(+), 21 deletions(-)
-
---- a/Documentation/devicetree/bindings/sound/davinci-mcasp-audio.txt
-+++ b/Documentation/devicetree/bindings/sound/davinci-mcasp-audio.txt
-@@ -6,7 +6,11 @@ Required properties:
- 	"ti,da830-mcasp-audio"	: for both DA830 & DA850 platforms
- 	"ti,omap2-mcasp-audio"	: for OMAP2 platforms (TI81xx, AM33xx)
- 
--- reg : Should contain McASP registers offset and length
-+- reg : Should contain McASP registers address and length for mpu and
-+	optionally for dma controller access.
-+- reg-names : The mandatory reg-range must be named "mpu" and the optional DMA
-+	      reg-range must be named "dma". For backward compatibility it is
-+	      good to keep "mpu" first in the list.
- - interrupts : Interrupt number for McASP
- - op-mode : I2S/DIT ops mode.
- - tdm-slots : Slots for TDM operation.
-@@ -15,7 +19,6 @@ Required properties:
- 		to "num-serializer" parameter. Each entry is a number indication
- 		serializer pin direction. (0 - INACTIVE, 1 - TX, 2 - RX)
- 
--
- Optional properties:
- 
- - ti,hwmods : Must be "mcasp<n>", n is controller instance starting 0
-@@ -31,6 +34,7 @@ mcasp0: mcasp0@1d00000 {
- 	#address-cells = <1>;
- 	#size-cells = <0>;
- 	reg = <0x100000 0x3000>;
-+	reg-names "mpu";
- 	interrupts = <82 83>;
- 	op-mode = <0>;		/* MCASP_IIS_MODE */
- 	tdm-slots = <2>;
---- a/sound/soc/davinci/davinci-mcasp.c
-+++ b/sound/soc/davinci/davinci-mcasp.c
-@@ -1001,18 +1001,40 @@ static const struct snd_soc_component_dr
- 	.name		= "davinci-mcasp",
- };
- 
-+/* Some HW specific values and defaults. The rest is filled in from DT. */
-+static struct snd_platform_data dm646x_mcasp_pdata = {
-+	.tx_dma_offset = 0x400,
-+	.rx_dma_offset = 0x400,
-+	.asp_chan_q = EVENTQ_0,
-+	.version = MCASP_VERSION_1,
-+};
-+
-+static struct snd_platform_data da830_mcasp_pdata = {
-+	.tx_dma_offset = 0x2000,
-+	.rx_dma_offset = 0x2000,
-+	.asp_chan_q = EVENTQ_0,
-+	.version = MCASP_VERSION_2,
-+};
-+
-+static struct snd_platform_data omap2_mcasp_pdata = {
-+	.tx_dma_offset = 0,
-+	.rx_dma_offset = 0,
-+	.asp_chan_q = EVENTQ_0,
-+	.version = MCASP_VERSION_3,
-+};
-+
- static const struct of_device_id mcasp_dt_ids[] = {
- 	{
- 		.compatible = "ti,dm646x-mcasp-audio",
--		.data = (void *)MCASP_VERSION_1,
-+		.data = &dm646x_mcasp_pdata,
- 	},
- 	{
- 		.compatible = "ti,da830-mcasp-audio",
--		.data = (void *)MCASP_VERSION_2,
-+		.data = &da830_mcasp_pdata,
- 	},
- 	{
- 		.compatible = "ti,omap2-mcasp-audio",
--		.data = (void *)MCASP_VERSION_3,
-+		.data = &omap2_mcasp_pdata,
- 	},
- 	{ /* sentinel */ }
- };
-@@ -1035,20 +1057,13 @@ static struct snd_platform_data *davinci
- 		pdata = pdev->dev.platform_data;
- 		return pdata;
- 	} else if (match) {
--		pdata = devm_kzalloc(&pdev->dev, sizeof(*pdata), GFP_KERNEL);
--		if (!pdata) {
--			ret = -ENOMEM;
--			goto nodata;
--		}
-+		pdata = (struct snd_platform_data *) match->data;
- 	} else {
- 		/* control shouldn't reach here. something is wrong */
- 		ret = -EINVAL;
- 		goto nodata;
- 	}
- 
--	if (match->data)
--		pdata->version = (u8)((int)match->data);
--
- 	ret = of_property_read_u32(np, "op-mode", &val);
- 	if (ret >= 0)
- 		pdata->op_mode = val;
-@@ -1145,10 +1160,15 @@ static int davinci_mcasp_probe(struct pl
- 		return -EINVAL;
- 	}
- 
--	mem = platform_get_resource(pdev, IORESOURCE_MEM, 0);
-+	mem = platform_get_resource_byname(pdev, IORESOURCE_MEM, "mpu");
- 	if (!mem) {
--		dev_err(&pdev->dev, "no mem resource?\n");
--		return -ENODEV;
-+		dev_warn(dev->dev,
-+			 "\"mpu\" mem resource not found, using index 0\n");
-+		mem = platform_get_resource(pdev, IORESOURCE_MEM, 0);
-+		if (!mem) {
-+			dev_err(&pdev->dev, "no mem resource?\n");
-+			return -ENODEV;
-+		}
- 	}
- 
- 	ioarea = devm_request_mem_region(&pdev->dev, mem->start,
-@@ -1182,13 +1202,16 @@ static int davinci_mcasp_probe(struct pl
- 	dev->rxnumevt = pdata->rxnumevt;
- 	dev->dev = &pdev->dev;
- 
-+	dma = platform_get_resource_byname(pdev, IORESOURCE_MEM, "dma");
-+	if (!dma)
-+		dma = mem;
-+
- 	dma_data = &dev->dma_params[SNDRV_PCM_STREAM_PLAYBACK];
- 	dma_data->asp_chan_q = pdata->asp_chan_q;
- 	dma_data->ram_chan_q = pdata->ram_chan_q;
- 	dma_data->sram_pool = pdata->sram_pool;
- 	dma_data->sram_size = pdata->sram_size_playback;
--	dma_data->dma_addr = (dma_addr_t) (pdata->tx_dma_offset +
--							mem->start);
-+	dma_data->dma_addr = dma->start + pdata->tx_dma_offset;
- 
- 	/* first TX, then RX */
- 	res = platform_get_resource(pdev, IORESOURCE_DMA, 0);
-@@ -1205,8 +1228,7 @@ static int davinci_mcasp_probe(struct pl
- 	dma_data->ram_chan_q = pdata->ram_chan_q;
- 	dma_data->sram_pool = pdata->sram_pool;
- 	dma_data->sram_size = pdata->sram_size_capture;
--	dma_data->dma_addr = (dma_addr_t)(pdata->rx_dma_offset +
--							mem->start);
-+	dma_data->dma_addr = dma->start + pdata->rx_dma_offset;
- 
- 	res = platform_get_resource(pdev, IORESOURCE_DMA, 1);
- 	if (!res) {
-@@ -1266,4 +1288,3 @@ module_platform_driver(davinci_mcasp_dri
- MODULE_AUTHOR("Steve Chen");
- MODULE_DESCRIPTION("TI DAVINCI McASP SoC Interface");
- MODULE_LICENSE("GPL");
--

+ 0 - 128
target/linux/omap/patches-3.12/403-ASoC-davinci-mcasp-Extract-DMA-channels-directly-fro.patch

@@ -1,128 +0,0 @@
-From ad5d3e5a1218a599ec02c81a3bd599acedeea00f Mon Sep 17 00:00:00 2001
-From: Jyri Sarha <[email protected]>
-Date: Tue, 17 Sep 2013 12:09:30 +0300
-Subject: [PATCH 214/752] ASoC: davinci-mcasp: Extract DMA channels directly
- from DT
-
-Extract DMA channels directly from DT as they can not be found from
-platform resources anymore. This is a work-around until davinci audio
-driver is updated to use dmaengine.
-
-Signed-off-by: Jyri Sarha <[email protected]>
----
- .../bindings/sound/davinci-mcasp-audio.txt         |    5 +++
- include/linux/platform_data/davinci_asp.h          |    2 +
- sound/soc/davinci/davinci-mcasp.c                  |   47 +++++++++++++-------
- 3 files changed, 39 insertions(+), 15 deletions(-)
-
---- a/Documentation/devicetree/bindings/sound/davinci-mcasp-audio.txt
-+++ b/Documentation/devicetree/bindings/sound/davinci-mcasp-audio.txt
-@@ -18,6 +18,11 @@ Required properties:
- - serial-dir : A list of serializer pin mode. The list number should be equal
- 		to "num-serializer" parameter. Each entry is a number indication
- 		serializer pin direction. (0 - INACTIVE, 1 - TX, 2 - RX)
-+- dmas: two element list of DMA controller phandles and DMA request line
-+        ordered pairs.
-+- dma-names: identifier string for each DMA request line in the dmas property.
-+	     These strings correspond 1:1 with the ordered pairs in dmas. The dma
-+	     identifiers must be "rx" and "tx".
- 
- Optional properties:
- 
---- a/include/linux/platform_data/davinci_asp.h
-+++ b/include/linux/platform_data/davinci_asp.h
-@@ -84,6 +84,8 @@ struct snd_platform_data {
- 	u8 version;
- 	u8 txnumevt;
- 	u8 rxnumevt;
-+	int tx_dma_channel;
-+	int rx_dma_channel;
- };
- 
- enum {
---- a/sound/soc/davinci/davinci-mcasp.c
-+++ b/sound/soc/davinci/davinci-mcasp.c
-@@ -1047,6 +1047,7 @@ static struct snd_platform_data *davinci
- 	struct snd_platform_data *pdata = NULL;
- 	const struct of_device_id *match =
- 			of_match_device(mcasp_dt_ids, &pdev->dev);
-+	struct of_phandle_args dma_spec;
- 
- 	const u32 *of_serial_dir32;
- 	u8 *of_serial_dir;
-@@ -1109,6 +1110,28 @@ static struct snd_platform_data *davinci
- 		pdata->serial_dir = of_serial_dir;
- 	}
- 
-+	ret = of_property_match_string(np, "dma-names", "tx");
-+	if (ret < 0)
-+		goto nodata;
-+
-+	ret = of_parse_phandle_with_args(np, "dmas", "#dma-cells", ret,
-+					 &dma_spec);
-+	if (ret < 0)
-+		goto nodata;
-+
-+	pdata->tx_dma_channel = dma_spec.args[0];
-+
-+	ret = of_property_match_string(np, "dma-names", "rx");
-+	if (ret < 0)
-+		goto nodata;
-+
-+	ret = of_parse_phandle_with_args(np, "dmas", "#dma-cells", ret,
-+					 &dma_spec);
-+	if (ret < 0)
-+		goto nodata;
-+
-+	pdata->rx_dma_channel = dma_spec.args[0];
-+
- 	ret = of_property_read_u32(np, "tx-num-evt", &val);
- 	if (ret >= 0)
- 		pdata->txnumevt = val;
-@@ -1139,7 +1162,7 @@ nodata:
- static int davinci_mcasp_probe(struct platform_device *pdev)
- {
- 	struct davinci_pcm_dma_params *dma_data;
--	struct resource *mem, *ioarea, *res;
-+	struct resource *mem, *ioarea, *res, *dma;
- 	struct snd_platform_data *pdata;
- 	struct davinci_audio_dev *dev;
- 	int ret;
-@@ -1213,15 +1236,11 @@ static int davinci_mcasp_probe(struct pl
- 	dma_data->sram_size = pdata->sram_size_playback;
- 	dma_data->dma_addr = dma->start + pdata->tx_dma_offset;
- 
--	/* first TX, then RX */
- 	res = platform_get_resource(pdev, IORESOURCE_DMA, 0);
--	if (!res) {
--		dev_err(&pdev->dev, "no DMA resource\n");
--		ret = -ENODEV;
--		goto err_release_clk;
--	}
--
--	dma_data->channel = res->start;
-+	if (res)
-+		dma_data->channel = res->start;
-+	else
-+		dma_data->channel = pdata->tx_dma_channel;
- 
- 	dma_data = &dev->dma_params[SNDRV_PCM_STREAM_CAPTURE];
- 	dma_data->asp_chan_q = pdata->asp_chan_q;
-@@ -1231,13 +1250,11 @@ static int davinci_mcasp_probe(struct pl
- 	dma_data->dma_addr = dma->start + pdata->rx_dma_offset;
- 
- 	res = platform_get_resource(pdev, IORESOURCE_DMA, 1);
--	if (!res) {
--		dev_err(&pdev->dev, "no DMA resource\n");
--		ret = -ENODEV;
--		goto err_release_clk;
--	}
-+	if (res)
-+		dma_data->channel = res->start;
-+	else
-+		dma_data->channel = pdata->rx_dma_channel;
- 
--	dma_data->channel = res->start;
- 	dev_set_drvdata(&pdev->dev, dev);
- 	ret = snd_soc_register_component(&pdev->dev, &davinci_mcasp_component,
- 					 &davinci_mcasp_dai[pdata->op_mode], 1);

+ 0 - 42
target/linux/omap/patches-3.12/404-ASoC-davinci-mcasp-Interrupts-property-to-optional-a.patch

@@ -1,42 +0,0 @@
-From 0ecb275625447180dd615256d0c324a0c0c6e76a Mon Sep 17 00:00:00 2001
-From: Jyri Sarha <[email protected]>
-Date: Thu, 19 Sep 2013 13:20:26 +0300
-Subject: [PATCH 215/752] ASoC: davinci-mcasp: Interrupts property to optional
- and add interrupt-names
-
-Makes interrupts property optional as the interrupts are not currently
-used by the driver and adds interrupt-names property to name listed
-interrupts. Currently know interrupt names are "tx" and "rx".
-
-Signed-off-by: Jyri Sarha <[email protected]>
----
- Documentation/devicetree/bindings/sound/davinci-mcasp-audio.txt |    4 +++-
- 1 file changed, 3 insertions(+), 1 deletion(-)
-
---- a/Documentation/devicetree/bindings/sound/davinci-mcasp-audio.txt
-+++ b/Documentation/devicetree/bindings/sound/davinci-mcasp-audio.txt
-@@ -11,7 +11,6 @@ Required properties:
- - reg-names : The mandatory reg-range must be named "mpu" and the optional DMA
- 	      reg-range must be named "dma". For backward compatibility it is
- 	      good to keep "mpu" first in the list.
--- interrupts : Interrupt number for McASP
- - op-mode : I2S/DIT ops mode.
- - tdm-slots : Slots for TDM operation.
- - num-serializer : Serializers used by McASP.
-@@ -31,6 +30,8 @@ Optional properties:
- - rx-num-evt : FIFO levels.
- - sram-size-playback : size of sram to be allocated during playback
- - sram-size-capture  : size of sram to be allocated during capture
-+- interrupts : Interrupt numbers for McASP, currently not used by the driver
-+- interrupt-names : Known interrupt names are "tx" and "rx"
- 
- Example:
- 
-@@ -41,6 +42,7 @@ mcasp0: mcasp0@1d00000 {
- 	reg = <0x100000 0x3000>;
- 	reg-names "mpu";
- 	interrupts = <82 83>;
-+	interrupts-names = "tx", "rx";
- 	op-mode = <0>;		/* MCASP_IIS_MODE */
- 	tdm-slots = <2>;
- 	num-serializer = <16>;

+ 0 - 60
target/linux/omap/patches-3.12/405-ASoC-davinci-Add-support-for-AM33xx-SoC-Audio.patch

@@ -1,60 +0,0 @@
-From 8f3e1fa024017a6b3d7fd8c2a75ee6ff5e4127f8 Mon Sep 17 00:00:00 2001
-From: "Hebbar, Gururaja" <[email protected]>
-Date: Wed, 1 Aug 2012 12:04:22 +0530
-Subject: [PATCH 216/752] ASoC: davinci: Add support for AM33xx SoC Audio
-
-AM33xx uses same McASP IP as the Davinci Platform. This patch updates
-Kconfig and makefile to enable build for McASP, PCM & Codec drivers.
-
-Signed-off-by: Hebbar, Gururaja <[email protected]>
-Signed-off-by: Darren Etheridge <[email protected]>
-Signed-off-by: Jyri Sarha <[email protected]>
----
- sound/soc/davinci/Kconfig  |   18 +++++++++++++++---
- sound/soc/davinci/Makefile |    1 +
- 2 files changed, 16 insertions(+), 3 deletions(-)
-
---- a/sound/soc/davinci/Kconfig
-+++ b/sound/soc/davinci/Kconfig
-@@ -1,9 +1,10 @@
- config SND_DAVINCI_SOC
--	tristate "SoC Audio for the TI DAVINCI chip"
--	depends on ARCH_DAVINCI
-+	tristate "SoC Audio for the TI DAVINCI or AM33XX chip"
-+	depends on ARCH_DAVINCI || SOC_AM33XX
- 	help
-+	  Platform driver for daVinci or AM33xx
- 	  Say Y or M if you want to add support for codecs attached to
--	  the DAVINCI AC97 or I2S interface. You will also need
-+	  the DAVINCI AC97, I2S, or McASP interface. You will also need
- 	  to select the audio interfaces to support below.
- 
- config SND_DAVINCI_SOC_I2S
-@@ -15,6 +16,17 @@ config SND_DAVINCI_SOC_MCASP
- config SND_DAVINCI_SOC_VCIF
- 	tristate
- 
-+config SND_AM33XX_SOC_EVM
-+	tristate "SoC Audio for the AM33XX chip based boards"
-+	depends on SND_DAVINCI_SOC && SOC_AM33XX
-+	select SND_SOC_TLV320AIC3X
-+	select SND_DAVINCI_SOC_MCASP
-+	help
-+	  Say Y or M if you want to add support for SoC audio on AM33XX
-+	  boards using McASP and TLV320AIC3X codec. For example AM335X-EVM,
-+	  AM335X-EVMSK, and BeagelBone with AudioCape boards have this
-+	  setup.
-+
- config SND_DAVINCI_SOC_EVM
- 	tristate "SoC Audio support for DaVinci DM6446, DM355 or DM365 EVM"
- 	depends on SND_DAVINCI_SOC
---- a/sound/soc/davinci/Makefile
-+++ b/sound/soc/davinci/Makefile
-@@ -13,6 +13,7 @@ obj-$(CONFIG_SND_DAVINCI_SOC_VCIF) += sn
- snd-soc-evm-objs := davinci-evm.o
- 
- obj-$(CONFIG_SND_DAVINCI_SOC_EVM) += snd-soc-evm.o
-+obj-$(CONFIG_SND_AM33XX_SOC_EVM) += snd-soc-evm.o
- obj-$(CONFIG_SND_DM6467_SOC_EVM) += snd-soc-evm.o
- obj-$(CONFIG_SND_DA830_SOC_EVM) += snd-soc-evm.o
- obj-$(CONFIG_SND_DA850_SOC_EVM) += snd-soc-evm.o

+ 0 - 33
target/linux/omap/patches-3.12/406-ASoC-tlv320aic3x-Add-regulators-to-DT-bindings-docum.patch

@@ -1,33 +0,0 @@
-From 2e8f45c820bc025bac3a5257478f16f73b38d54c Mon Sep 17 00:00:00 2001
-From: Jyri Sarha <[email protected]>
-Date: Wed, 11 Sep 2013 15:04:56 +0300
-Subject: [PATCH 217/752] ASoC: tlv320aic3x: Add regulators to DT bindings
- document
-
-Add regulator properties to tlv320aic3x DT bindings document.
-
-Signed-off-by: Jyri Sarha <[email protected]>
----
- Documentation/devicetree/bindings/sound/tlv320aic3x.txt |    7 +++++++
- 1 file changed, 7 insertions(+)
-
---- a/Documentation/devicetree/bindings/sound/tlv320aic3x.txt
-+++ b/Documentation/devicetree/bindings/sound/tlv320aic3x.txt
-@@ -24,10 +24,17 @@ Optional properties:
- 	3 - MICBIAS output is connected to AVDD,
- 	If this node is not mentioned or if the value is incorrect, then MicBias
- 	is powered down.
-+- AVDD-supply, IOVDD-supply, DRVDD-supply, DVDD-supply : power supplies for the
-+  device as covered in Documentation/devicetree/bindings/regulator/regulator.txt
- 
- Example:
- 
- tlv320aic3x: tlv320aic3x@1b {
- 	compatible = "ti,tlv320aic3x";
- 	reg = <0x1b>;
-+
-+	AVDD-supply = <&regulator>;
-+	IOVDD-supply = <&regulator>;
-+	DRVDD-supply = <&regulator>;
-+	DVDD-supply = <&regulator>;
- };

+ 0 - 41
target/linux/omap/patches-3.12/407-ASoC-tlv320aic3x-Add-codec-pins-to-DT-bindings-docum.patch

@@ -1,41 +0,0 @@
-From 6afd5cb1f92a1965ffa3c0f304f95ab19b49fa84 Mon Sep 17 00:00:00 2001
-From: Jyri Sarha <[email protected]>
-Date: Thu, 12 Sep 2013 14:37:08 +0300
-Subject: [PATCH 218/752] ASoC: tlv320aic3x: Add codec pins to DT bindings
- document
-
-Add list of codec pins to tlv320aic3x DT bindings document.
-
-Signed-off-by: Jyri Sarha <[email protected]>
----
- .../devicetree/bindings/sound/tlv320aic3x.txt       |   19 +++++++++++++++++++
- 1 file changed, 19 insertions(+)
-
---- a/Documentation/devicetree/bindings/sound/tlv320aic3x.txt
-+++ b/Documentation/devicetree/bindings/sound/tlv320aic3x.txt
-@@ -27,6 +27,25 @@ Optional properties:
- - AVDD-supply, IOVDD-supply, DRVDD-supply, DVDD-supply : power supplies for the
-   device as covered in Documentation/devicetree/bindings/regulator/regulator.txt
- 
-+CODEC output pins:
-+  * LLOUT
-+  * RLOUT
-+  * MONO_LOUT
-+  * HPLOUT
-+  * HPROUT
-+  * HPLCOM
-+  * HPRCOM
-+
-+CODEC input pins:
-+  * MIC3L
-+  * MIC3R
-+  * LINE1L
-+  * LINE2L
-+  * LINE1R
-+  * LINE2R
-+
-+The pins can be used in referring sound node's audio-routing property.
-+
- Example:
- 
- tlv320aic3x: tlv320aic3x@1b {

+ 0 - 42
target/linux/omap/patches-3.12/408-ARM-dts-am33xx-Add-mcasp0-and-mcasp1-device-tree-ent.patch

@@ -1,42 +0,0 @@
-From a049ce751e60451b47fa744342db84db44883e57 Mon Sep 17 00:00:00 2001
-From: Pantelis Antoniou <[email protected]>
-Date: Thu, 10 Jan 2013 20:37:45 +0200
-Subject: [PATCH 219/752] ARM/dts: am33xx: Add mcasp0 and mcasp1 device tree
- entries
-
-Add missing mcasp entries in the am33xx.dtsi include file.
-
-Signed-off-by: Pantelis Antoniou <[email protected]>
-Signed-off-by: Darren Etheridge <[email protected]>
-Signed-off-by: Jyri Sarha <[email protected]>
----
- arch/arm/boot/dts/am33xx.dtsi |   19 +++++++++++++++++++
- 1 file changed, 19 insertions(+)
-
---- a/arch/arm/boot/dts/am33xx.dtsi
-+++ b/arch/arm/boot/dts/am33xx.dtsi
-@@ -726,5 +726,24 @@
- 			       <&edma 5>;
- 			dma-names = "tx", "rx";
- 		};
-+
-+		mcasp0: mcasp@48038000 {
-+			compatible = "ti,omap2-mcasp-audio";
-+			ti,hwmods = "mcasp0";
-+			reg = <0x48038000 0x2000>;
-+			interrupts = <80 81>;
-+			interrupts-names = "tx", "rx";
-+			status = "disabled";
-+		};
-+
-+		mcasp1: mcasp@4803C000 {
-+			compatible = "ti,omap2-mcasp-audio";
-+			ti,hwmods = "mcasp1";
-+			reg = <0x4803C000 0x2000>;
-+			interrupts = <82 83>;
-+			interrupts-names = "tx", "rx";
-+			status = "disabled";
-+		};
-+
- 	};
- };

+ 0 - 51
target/linux/omap/patches-3.12/409-ARM-dts-am33xx-mcasp-Add-new-dma-register-location-t.patch

@@ -1,51 +0,0 @@
-From 15ffa765da3f2427b506472baa72d0f3a90b6be5 Mon Sep 17 00:00:00 2001
-From: Jyri Sarha <[email protected]>
-Date: Thu, 5 Sep 2013 21:49:35 +0300
-Subject: [PATCH 220/752] ARM/dts: am33xx: mcasp: Add new dma register
- location to reg-property
-
-This patch adds an optional address range to reg property. The range
-describes the register location for DMA controller on am33xx. The both
-address ranges are named accordingly in the reg-names property.
-
-Signed-off-by: Hebbar, Gururaja <[email protected]>
-Signed-off-by: Darren Etheridge <[email protected]>
-Signed-off-by: Jyri Sarha <[email protected]>
----
- arch/arm/boot/dts/am33xx.dtsi |   14 ++++++++++++--
- 1 file changed, 12 insertions(+), 2 deletions(-)
-
---- a/arch/arm/boot/dts/am33xx.dtsi
-+++ b/arch/arm/boot/dts/am33xx.dtsi
-@@ -730,19 +730,29 @@
- 		mcasp0: mcasp@48038000 {
- 			compatible = "ti,omap2-mcasp-audio";
- 			ti,hwmods = "mcasp0";
--			reg = <0x48038000 0x2000>;
-+			reg = <0x48038000 0x2000>,
-+			      <0x46400000 0x400000>;
-+			reg-names = "mpu", "dma";
- 			interrupts = <80 81>;
- 			interrupts-names = "tx", "rx";
- 			status = "disabled";
-+			dmas = <&edma 8
-+				&edma 9>;
-+			dma-names = "tx", "rx";
- 		};
- 
- 		mcasp1: mcasp@4803C000 {
- 			compatible = "ti,omap2-mcasp-audio";
- 			ti,hwmods = "mcasp1";
--			reg = <0x4803C000 0x2000>;
-+			reg = <0x4803C000 0x2000>,
-+			      <0x46400000 0x400000>;
-+			reg-names = "mpu", "dma";
- 			interrupts = <82 83>;
- 			interrupts-names = "tx", "rx";
- 			status = "disabled";
-+			dmas = <&edma 10
-+				&edma 11>;
-+			dma-names = "tx", "rx";
- 		};
- 
- 	};

+ 0 - 101
target/linux/omap/patches-3.12/410-ARM-dts-am335x-evm-Add-audio-support-for-am335x-evm.patch

@@ -1,101 +0,0 @@
-From 2bf66a74b322deebc7c8bba11cab58c18b745608 Mon Sep 17 00:00:00 2001
-From: Darren Etheridge <[email protected]>
-Date: Wed, 31 Jul 2013 12:38:26 -0500
-Subject: [PATCH 221/752] ARM/dts: am335x-evm: Add audio support for
- am335x-evm.dts
-
-Adds sound, tlv320aic3x, mcasp1, and am335x_evm_audio_pin nodes.
-
-Signed-off-by: Darren Etheridge <[email protected]>
-Signed-off-by: Peter Ujfalusi <[email protected]>
-Signed-off-by: Jyri Sarha <[email protected]>
----
- arch/arm/boot/dts/am335x-evm.dts |   56 ++++++++++++++++++++++++++++++++++++++
- 1 file changed, 56 insertions(+)
-
---- a/arch/arm/boot/dts/am335x-evm.dts
-+++ b/arch/arm/boot/dts/am335x-evm.dts
-@@ -149,6 +149,16 @@
- 				0x14c (PIN_INPUT_PULLDOWN | MUX_MODE7)
- 			>;
- 		};
-+
-+		am335x_evm_audio_pins: am335x_evm_audio_pins {
-+			pinctrl-single,pins = <
-+				0x10c (PIN_INPUT_PULLDOWN | MUX_MODE4) /* mii1_rx_dv.mcasp1_aclkx */
-+				0x110 (PIN_INPUT_PULLDOWN | MUX_MODE4) /* mii1_txd3.mcasp1_fsx */
-+				0x108 (PIN_OUTPUT_PULLDOWN | MUX_MODE4) /* mii1_col.mcasp1_axr2 */
-+				0x144 (PIN_INPUT_PULLDOWN | MUX_MODE4) /* rmii1_ref_clk.mcasp1_axr3 */
-+			>;
-+		};
-+
- 	};
- 
- 	ocp {
-@@ -244,6 +254,19 @@
- 				compatible = "ti,tmp275";
- 				reg = <0x48>;
- 			};
-+
-+			tlv320aic3x: tlv320aic3x@1b {
-+				compatible = "ti,tlv320aic3x";
-+				reg = <0x1b>;
-+				status = "okay";
-+
-+				/* Regulators */
-+				AVDD-supply = <&vaux2_reg>;
-+				IOVDD-supply = <&vaux2_reg>;
-+				DRVDD-supply = <&vaux2_reg>;
-+				DVDD-supply = <&vbat>;
-+			};
-+
- 		};
- 
- 		elm: elm@48080000 {
-@@ -340,6 +363,20 @@
- 				};
- 			};
- 		};
-+
-+		sound {
-+			compatible = "ti,da830-evm-audio";
-+			ti,model = "DA830 EVM";
-+			ti,audio-codec = <&tlv320aic3x>;
-+			ti,mcasp-controller = <&mcasp1>;
-+			ti,codec-clock-rate = <12000000>;
-+			ti,audio-routing =
-+				"Headphone Jack",       "HPLOUT",
-+				"Headphone Jack",       "HPROUT",
-+				"LINE1L",               "Line In",
-+				"LINE1R",               "Line In";
-+		};
-+
- 	};
- 
- 	vbat: fixedregulator@0 {
-@@ -407,6 +444,25 @@
- 
- #include "tps65910.dtsi"
- 
-+&mcasp1 {
-+		pinctrl-names = "default";
-+		pinctrl-0 = <&am335x_evm_audio_pins>;
-+
-+		status = "okay";
-+
-+		op-mode = <0>;          /* MCASP_IIS_MODE */
-+		tdm-slots = <2>;
-+		num-serializer = <16>;
-+		serial-dir = <  /* 0: INACTIVE, 1: TX, 2: RX */
-+			0 0 1 2
-+			0 0 0 0
-+			0 0 0 0
-+			0 0 0 0
-+		>;
-+		tx-num-evt = <1>;
-+		rx-num-evt = <1>;
-+};
-+
- &tps {
- 	vcc1-supply = <&vbat>;
- 	vcc2-supply = <&vbat>;

+ 0 - 30
target/linux/omap/patches-3.12/411-ARM-dts-am335x-evm-Remove-blank-lines.patch

@@ -1,30 +0,0 @@
-From 76b54fecdd214b32f568b2f97102fc1ab5745fa1 Mon Sep 17 00:00:00 2001
-From: Peter Ujfalusi <[email protected]>
-Date: Mon, 23 Sep 2013 10:34:06 +0300
-Subject: [PATCH 222/752] ARM/dts: am335x-evm: Remove blank lines
-
-Clean up the blank lines where they are not needed.
-
-Signed-off-by: Peter Ujfalusi <[email protected]>
----
- arch/arm/boot/dts/am335x-evm.dts |    2 --
- 1 file changed, 2 deletions(-)
-
---- a/arch/arm/boot/dts/am335x-evm.dts
-+++ b/arch/arm/boot/dts/am335x-evm.dts
-@@ -266,7 +266,6 @@
- 				DRVDD-supply = <&vaux2_reg>;
- 				DVDD-supply = <&vbat>;
- 			};
--
- 		};
- 
- 		elm: elm@48080000 {
-@@ -376,7 +375,6 @@
- 				"LINE1L",               "Line In",
- 				"LINE1R",               "Line In";
- 		};
--
- 	};
- 
- 	vbat: fixedregulator@0 {

+ 0 - 35
target/linux/omap/patches-3.12/412-ARM-dts-am335x-evm-Clarify-the-audio-codec-node.patch

@@ -1,35 +0,0 @@
-From df3fbecdac2b46b7716c16c185cba357cc55d00a Mon Sep 17 00:00:00 2001
-From: Peter Ujfalusi <[email protected]>
-Date: Mon, 23 Sep 2013 10:34:07 +0300
-Subject: [PATCH 223/752] ARM/dts: am335x-evm: Clarify the audio codec node
-
-The board have tlv320aic3106 codec. Use this name in the dts file instead
-of the generic ltv320aic3x.
-
-Signed-off-by: Peter Ujfalusi <[email protected]>
----
- arch/arm/boot/dts/am335x-evm.dts |    6 +++---
- 1 file changed, 3 insertions(+), 3 deletions(-)
-
---- a/arch/arm/boot/dts/am335x-evm.dts
-+++ b/arch/arm/boot/dts/am335x-evm.dts
-@@ -255,8 +255,8 @@
- 				reg = <0x48>;
- 			};
- 
--			tlv320aic3x: tlv320aic3x@1b {
--				compatible = "ti,tlv320aic3x";
-+			tlv320aic3106: tlv320aic3106@1b {
-+				compatible = "ti,tlv320aic3106";
- 				reg = <0x1b>;
- 				status = "okay";
- 
-@@ -366,7 +366,7 @@
- 		sound {
- 			compatible = "ti,da830-evm-audio";
- 			ti,model = "DA830 EVM";
--			ti,audio-codec = <&tlv320aic3x>;
-+			ti,audio-codec = <&tlv320aic3106>;
- 			ti,mcasp-controller = <&mcasp1>;
- 			ti,codec-clock-rate = <12000000>;
- 			ti,audio-routing =

+ 0 - 27
target/linux/omap/patches-3.12/413-ARM-dts-am335x-evm-Add-unique-name-for-the-sound-car.patch

@@ -1,27 +0,0 @@
-From d4b7ebbadccb4632ad16f07a19cee57aa7b73cdb Mon Sep 17 00:00:00 2001
-From: Peter Ujfalusi <[email protected]>
-Date: Mon, 23 Sep 2013 10:34:08 +0300
-Subject: [PATCH 224/752] ARM/dts: am335x-evm: Add unique name for the sound
- card
-
-Change the name of the sound card to 'AM335x-EVM' from 'DA830 EVM'.
-User space might need to differentiate between the boards when it comes to
-audio setup (mixer config, PCM lookup, etc).
-It is better to use unique name for different boards.
-
-Signed-off-by: Peter Ujfalusi <[email protected]>
----
- arch/arm/boot/dts/am335x-evm.dts |    2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
---- a/arch/arm/boot/dts/am335x-evm.dts
-+++ b/arch/arm/boot/dts/am335x-evm.dts
-@@ -365,7 +365,7 @@
- 
- 		sound {
- 			compatible = "ti,da830-evm-audio";
--			ti,model = "DA830 EVM";
-+			ti,model = "AM335x-EVM";
- 			ti,audio-codec = <&tlv320aic3106>;
- 			ti,mcasp-controller = <&mcasp1>;
- 			ti,codec-clock-rate = <12000000>;

+ 0 - 95
target/linux/omap/patches-3.12/414-ARM-dts-am335x-evmsk-Audio-support.patch

@@ -1,95 +0,0 @@
-From d4c71e652f457077eac1ad83a9e32d3f11fc99b2 Mon Sep 17 00:00:00 2001
-From: Peter Ujfalusi <[email protected]>
-Date: Mon, 23 Sep 2013 10:34:09 +0300
-Subject: [PATCH 225/752] ARM/dts: am335x-evmsk: Audio support
-
-AM335x EVM-SK have only support for audio playback (stereo jack on the
-board) via tlv320aic3106 codec connected to McASP1.
-Enable the support for audio playback on the board:
-- McASP1 configuration
-- tlv320aic3106 configuration
-- Machine driver.
-
-Signed-off-by: Peter Ujfalusi <[email protected]>
----
- arch/arm/boot/dts/am335x-evmsk.dts |   51 ++++++++++++++++++++++++++++++++++++
- 1 file changed, 51 insertions(+)
-
---- a/arch/arm/boot/dts/am335x-evmsk.dts
-+++ b/arch/arm/boot/dts/am335x-evmsk.dts
-@@ -158,6 +158,15 @@
- 				0x14c (PIN_INPUT_PULLDOWN | MUX_MODE7)
- 			>;
- 		};
-+
-+		mcasp1_pins: mcasp1_pins {
-+			pinctrl-single,pins = <
-+				0x10c (PIN_INPUT_PULLDOWN | MUX_MODE4) /* mii1_crs.mcasp1_aclkx */
-+				0x110 (PIN_INPUT_PULLDOWN | MUX_MODE4) /* mii1_rxerr.mcasp1_fsx */
-+				0x108 (PIN_OUTPUT_PULLDOWN | MUX_MODE4) /* mii1_col.mcasp1_axr2 */
-+				0x144 (PIN_INPUT_PULLDOWN | MUX_MODE4) /* rmii1_ref_clk.mcasp1_axr3 */
-+			>;
-+		};
- 	};
- 
- 	ocp {
-@@ -206,6 +215,18 @@
- 				st,max-limit-y = <550>;
- 				st,max-limit-z = <750>;
- 			};
-+
-+			tlv320aic3106: tlv320aic3106@1b {
-+				compatible = "ti,tlv320aic3106";
-+				reg = <0x1b>;
-+				status = "okay";
-+
-+				/* Regulators */
-+				AVDD-supply = <&vaux2_reg>;
-+				IOVDD-supply = <&vaux2_reg>;
-+				DRVDD-supply = <&vaux2_reg>;
-+				DVDD-supply = <&vbat>;
-+			};
- 		};
- 
- 		musb: usb@47400000 {
-@@ -233,6 +254,17 @@
- 				pinctrl-0 = <&ecap2_pins>;
- 			};
- 		};
-+
-+		sound {
-+			compatible = "ti,da830-evm-audio";
-+			ti,model = "AM335x-EVMSK";
-+			ti,audio-codec = <&tlv320aic3106>;
-+			ti,mcasp-controller = <&mcasp1>;
-+			ti,codec-clock-rate = <24576000>;
-+			ti,audio-routing =
-+				"Headphone Jack",       "HPLOUT",
-+				"Headphone Jack",       "HPROUT";
-+		};
- 	};
- 
- 	vbat: fixedregulator@0 {
-@@ -438,3 +470,22 @@
- &aes {
- 	status = "okay";
- };
-+
-+&mcasp1 {
-+		pinctrl-names = "default";
-+		pinctrl-0 = <&mcasp1_pins>;
-+
-+		status = "okay";
-+
-+		op-mode = <0>;          /* MCASP_IIS_MODE */
-+		tdm-slots = <2>;
-+		num-serializer = <16>;
-+		serial-dir = <  /* 0: INACTIVE, 1: TX, 2: RX */
-+			0 0 1 2
-+			0 0 0 0
-+			0 0 0 0
-+			0 0 0 0
-+		>;
-+		tx-num-evt = <1>;
-+		rx-num-evt = <1>;
-+};

+ 0 - 90
target/linux/omap/patches-3.12/415-ASoC-davinci-mcasp-Remove-redundant-num-serializer-D.patch

@@ -1,90 +0,0 @@
-From fdb8d3521ecae71865df66a84a1cbe13f7daa6f5 Mon Sep 17 00:00:00 2001
-From: Peter Ujfalusi <[email protected]>
-Date: Mon, 23 Sep 2013 11:25:02 +0300
-Subject: [PATCH 226/752] ASoC: davinci: mcasp: Remove redundant
- num-serializer DT parameter
-
-The serial-dir array gives this information so there is no need to have the
-num-serializer property in DT description.
-Just ignore the property in the driver the DTS files can be updated
-separately without regression.
-Update the documentation at the same time for davinci-mcasp
-
-Signed-off-by: Peter Ujfalusi <[email protected]>
----
- .../bindings/sound/davinci-mcasp-audio.txt         |    8 +++----
- sound/soc/davinci/davinci-mcasp.c                  |   22 +++++---------------
- 2 files changed, 8 insertions(+), 22 deletions(-)
-
---- a/Documentation/devicetree/bindings/sound/davinci-mcasp-audio.txt
-+++ b/Documentation/devicetree/bindings/sound/davinci-mcasp-audio.txt
-@@ -13,10 +13,9 @@ Required properties:
- 	      good to keep "mpu" first in the list.
- - op-mode : I2S/DIT ops mode.
- - tdm-slots : Slots for TDM operation.
--- num-serializer : Serializers used by McASP.
--- serial-dir : A list of serializer pin mode. The list number should be equal
--		to "num-serializer" parameter. Each entry is a number indication
--		serializer pin direction. (0 - INACTIVE, 1 - TX, 2 - RX)
-+- serial-dir : A list of serializer configuration. Each entry is a number
-+               indication serializer pin direction.
-+               (0 - INACTIVE, 1 - TX, 2 - RX)
- - dmas: two element list of DMA controller phandles and DMA request line
-         ordered pairs.
- - dma-names: identifier string for each DMA request line in the dmas property.
-@@ -45,7 +44,6 @@ mcasp0: mcasp0@1d00000 {
- 	interrupts-names = "tx", "rx";
- 	op-mode = <0>;		/* MCASP_IIS_MODE */
- 	tdm-slots = <2>;
--	num-serializer = <16>;
- 	serial-dir = <
- 			0 0 0 0	/* 0: INACTIVE, 1: TX, 2: RX */
- 			0 0 0 0
---- a/sound/soc/davinci/davinci-mcasp.c
-+++ b/sound/soc/davinci/davinci-mcasp.c
-@@ -1050,7 +1050,6 @@ static struct snd_platform_data *davinci
- 	struct of_phandle_args dma_spec;
- 
- 	const u32 *of_serial_dir32;
--	u8 *of_serial_dir;
- 	u32 val;
- 	int i, ret = 0;
- 
-@@ -1081,32 +1080,21 @@ static struct snd_platform_data *davinci
- 		pdata->tdm_slots = val;
- 	}
- 
--	ret = of_property_read_u32(np, "num-serializer", &val);
--	if (ret >= 0)
--		pdata->num_serializer = val;
--
- 	of_serial_dir32 = of_get_property(np, "serial-dir", &val);
- 	val /= sizeof(u32);
--	if (val != pdata->num_serializer) {
--		dev_err(&pdev->dev,
--				"num-serializer(%d) != serial-dir size(%d)\n",
--				pdata->num_serializer, val);
--		ret = -EINVAL;
--		goto nodata;
--	}
--
- 	if (of_serial_dir32) {
--		of_serial_dir = devm_kzalloc(&pdev->dev,
--						(sizeof(*of_serial_dir) * val),
--						GFP_KERNEL);
-+		u8 *of_serial_dir = devm_kzalloc(&pdev->dev,
-+						 (sizeof(*of_serial_dir) * val),
-+						 GFP_KERNEL);
- 		if (!of_serial_dir) {
- 			ret = -ENOMEM;
- 			goto nodata;
- 		}
- 
--		for (i = 0; i < pdata->num_serializer; i++)
-+		for (i = 0; i < val; i++)
- 			of_serial_dir[i] = be32_to_cpup(&of_serial_dir32[i]);
- 
-+		pdata->num_serializer = val;
- 		pdata->serial_dir = of_serial_dir;
- 	}
- 

+ 0 - 24
target/linux/omap/patches-3.12/416-ARM-dts-am335x-evm-Remove-num-serializer-property-fo.patch

@@ -1,24 +0,0 @@
-From 7fd70076a17c2a5b1b4bac0175a25e5d04075e43 Mon Sep 17 00:00:00 2001
-From: Peter Ujfalusi <[email protected]>
-Date: Mon, 23 Sep 2013 11:25:03 +0300
-Subject: [PATCH 227/752] ARM/dts: am335x-evm: Remove num-serializer property
- for mcasp node
-
-The num-serializer property is redundant and the driver no longer needs it.
-
-Signed-off-by: Peter Ujfalusi <[email protected]>
----
- arch/arm/boot/dts/am335x-evm.dts |    2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
---- a/arch/arm/boot/dts/am335x-evm.dts
-+++ b/arch/arm/boot/dts/am335x-evm.dts
-@@ -450,7 +450,7 @@
- 
- 		op-mode = <0>;          /* MCASP_IIS_MODE */
- 		tdm-slots = <2>;
--		num-serializer = <16>;
-+		/* 16 serializer */
- 		serial-dir = <  /* 0: INACTIVE, 1: TX, 2: RX */
- 			0 0 1 2
- 			0 0 0 0

+ 0 - 24
target/linux/omap/patches-3.12/417-ARM-dts-am335x-evmsk-Remove-num-serializer-property.patch

@@ -1,24 +0,0 @@
-From 97977a1534ef27247acc9549f5433ef288f208eb Mon Sep 17 00:00:00 2001
-From: Peter Ujfalusi <[email protected]>
-Date: Mon, 23 Sep 2013 11:25:04 +0300
-Subject: [PATCH 228/752] ARM/dts: am335x-evmsk: Remove num-serializer
- property for mcasp node
-
-The num-serializer property is redundant and the driver no longer needs it.
-
-Signed-off-by: Peter Ujfalusi <[email protected]>
----
- arch/arm/boot/dts/am335x-evmsk.dts |    2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
---- a/arch/arm/boot/dts/am335x-evmsk.dts
-+++ b/arch/arm/boot/dts/am335x-evmsk.dts
-@@ -479,7 +479,7 @@
- 
- 		op-mode = <0>;          /* MCASP_IIS_MODE */
- 		tdm-slots = <2>;
--		num-serializer = <16>;
-+		/* 16 serializer */
- 		serial-dir = <  /* 0: INACTIVE, 1: TX, 2: RX */
- 			0 0 1 2
- 			0 0 0 0

+ 0 - 18
target/linux/omap/patches-3.12/500-ARM-dts-AM33XX-Add-LCDC-info-into-am335x-evm.patch

@@ -1,18 +0,0 @@
---- a/arch/arm/boot/dts/am33xx.dtsi
-+++ b/arch/arm/boot/dts/am33xx.dtsi
-@@ -678,6 +678,15 @@
- 			status = "disabled";
- 		};
- 
-+		lcdc: lcdc@4830e000 {
-+			compatible = "ti,am33xx-tilcdc";
-+			reg = <0x4830e000 0x1000>;
-+			interrupt-parent = <&intc>;
-+			interrupts = <36>;
-+			ti,hwmods = "lcdc";
-+			status = "disabled";
-+		};
-+
- 		tscadc: tscadc@44e0d000 {
- 			compatible = "ti,am3359-tscadc";
- 			reg = <0x44e0d000 0x1000>;

+ 0 - 1230
target/linux/omap/patches-3.12/600-crypto-omap-des-Add-omap-des-driver-for-OMAP4-AM43xx.patch

@@ -1,1230 +0,0 @@
-From patchwork Thu Aug 29 23:27:51 2013
-Content-Type: text/plain; charset="utf-8"
-MIME-Version: 1.0
-Content-Transfer-Encoding: 7bit
-Subject: [1/3] crypto: omap-des: Add omap-des driver for OMAP4/AM43xx
-From: Joel Fernandes <[email protected]>
-X-Patchwork-Id: 2851675
-Message-Id: <[email protected]>
-To: Herbert Xu <[email protected]>, "David S. Miller"
-	<[email protected]>, Mark Greer <[email protected]>, Tony Lindgren
-	<[email protected]>, Lokesh Vutla <[email protected]>
-Cc: Joel Fernandes <[email protected]>,
-	Linux OMAP List <[email protected]>, 
-	Linux Kernel Mailing List <[email protected]>,
-	Linux ARM Kernel List <[email protected]>,
-	Linux Crypto Mailing List <[email protected]>
-Date: Thu, 29 Aug 2013 18:27:51 -0500
-
-Add omap-des driver with platform data for OMAP4. Support added for DES
-ECB and CBC modes.
-
-Where possible, code is reused from omap-aes driver with changes made for
-adjusting key size, block size, removing non-existent encryption modes
-and adding support for OMAP4 platform data and offsets.
-
-Tests have been conducted with the CRYPTO test manager, and functionality
-is verified at different page length alignments.
-
-Signed-off-by: Joel Fernandes <[email protected]>
-
----
-drivers/crypto/omap-des.c | 1192 +++++++++++++++++++++++++++++++++++++++++++++
- 1 file changed, 1192 insertions(+)
- create mode 100644 drivers/crypto/omap-des.c
-
---- /dev/null
-+++ b/drivers/crypto/omap-des.c
-@@ -0,0 +1,1192 @@
-+/*
-+ * Cryptographic API.
-+ *
-+ * Support for OMAP DES and Triple DES HW acceleration.
-+ *
-+ * Copyright (c) 2012 Texas Instruments Incorporated
-+ * Author: Joel Fernandes <[email protected]>
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License version 2 as published
-+ * by the Free Software Foundation.
-+ *
-+ */
-+
-+#define pr_fmt(fmt) "%s: " fmt, __func__
-+
-+#ifdef DEBUG
-+#define prn(num) printk(#num "=%d\n", num)
-+#define prx(num) printk(#num "=%x\n", num)
-+#else
-+#define prn(num) do { } while (0)
-+#define prx(num)  do { } while (0)
-+#endif
-+
-+#include <linux/err.h>
-+#include <linux/module.h>
-+#include <linux/init.h>
-+#include <linux/errno.h>
-+#include <linux/kernel.h>
-+#include <linux/platform_device.h>
-+#include <linux/scatterlist.h>
-+#include <linux/dma-mapping.h>
-+#include <linux/dmaengine.h>
-+#include <linux/omap-dma.h>
-+#include <linux/pm_runtime.h>
-+#include <linux/of.h>
-+#include <linux/of_device.h>
-+#include <linux/of_address.h>
-+#include <linux/io.h>
-+#include <linux/crypto.h>
-+#include <linux/interrupt.h>
-+#include <crypto/scatterwalk.h>
-+#include <crypto/des.h>
-+
-+#define DST_MAXBURST			2
-+
-+#define DES_BLOCK_WORDS		(DES_BLOCK_SIZE >> 2)
-+
-+#define _calc_walked(inout) (dd->inout##_walk.offset - dd->inout##_sg->offset)
-+
-+#define DES_REG_KEY(dd, x)		((dd)->pdata->key_ofs - \
-+						((x ^ 0x01) * 0x04))
-+
-+#define DES_REG_IV(dd, x)		((dd)->pdata->iv_ofs + ((x) * 0x04))
-+
-+#define DES_REG_CTRL(dd)		((dd)->pdata->ctrl_ofs)
-+#define DES_REG_CTRL_CBC		(1 << 4)
-+#define DES_REG_CTRL_TDES		(1 << 3)
-+#define DES_REG_CTRL_DIRECTION		(1 << 2)
-+#define DES_REG_CTRL_INPUT_READY	(1 << 1)
-+#define DES_REG_CTRL_OUTPUT_READY	(1 << 0)
-+
-+#define DES_REG_DATA_N(dd, x)		((dd)->pdata->data_ofs + ((x) * 0x04))
-+
-+#define DES_REG_REV(dd)			((dd)->pdata->rev_ofs)
-+
-+#define DES_REG_MASK(dd)		((dd)->pdata->mask_ofs)
-+
-+#define DES_REG_LENGTH_N(x)		(0x24 + ((x) * 0x04))
-+
-+#define DES_REG_IRQ_STATUS(dd)         ((dd)->pdata->irq_status_ofs)
-+#define DES_REG_IRQ_ENABLE(dd)         ((dd)->pdata->irq_enable_ofs)
-+#define DES_REG_IRQ_DATA_IN            BIT(1)
-+#define DES_REG_IRQ_DATA_OUT           BIT(2)
-+
-+#define FLAGS_MODE_MASK		0x000f
-+#define FLAGS_ENCRYPT		BIT(0)
-+#define FLAGS_CBC		BIT(1)
-+#define FLAGS_INIT		BIT(4)
-+#define FLAGS_BUSY		BIT(6)
-+
-+struct omap_des_ctx {
-+	struct omap_des_dev *dd;
-+
-+	int		keylen;
-+	u32		key[DES_KEY_SIZE / sizeof(u32)];
-+	unsigned long	flags;
-+};
-+
-+struct omap_des_reqctx {
-+	unsigned long mode;
-+};
-+
-+#define OMAP_DES_QUEUE_LENGTH	1
-+#define OMAP_DES_CACHE_SIZE	0
-+
-+struct omap_des_algs_info {
-+	struct crypto_alg	*algs_list;
-+	unsigned int		size;
-+	unsigned int		registered;
-+};
-+
-+struct omap_des_pdata {
-+	struct omap_des_algs_info	*algs_info;
-+	unsigned int	algs_info_size;
-+
-+	void		(*trigger)(struct omap_des_dev *dd, int length);
-+
-+	u32		key_ofs;
-+	u32		iv_ofs;
-+	u32		ctrl_ofs;
-+	u32		data_ofs;
-+	u32		rev_ofs;
-+	u32		mask_ofs;
-+	u32             irq_enable_ofs;
-+	u32             irq_status_ofs;
-+
-+	u32		dma_enable_in;
-+	u32		dma_enable_out;
-+	u32		dma_start;
-+
-+	u32		major_mask;
-+	u32		major_shift;
-+	u32		minor_mask;
-+	u32		minor_shift;
-+};
-+
-+struct omap_des_dev {
-+	struct list_head	list;
-+	unsigned long		phys_base;
-+	void __iomem		*io_base;
-+	struct omap_des_ctx	*ctx;
-+	struct device		*dev;
-+	unsigned long		flags;
-+	int			err;
-+
-+	/* spinlock used for queues */
-+	spinlock_t		lock;
-+	struct crypto_queue	queue;
-+
-+	struct tasklet_struct	done_task;
-+	struct tasklet_struct	queue_task;
-+
-+	struct ablkcipher_request	*req;
-+	/*
-+	 * total is used by PIO mode for book keeping so introduce
-+	 * variable total_save as need it to calc page_order
-+	 */
-+	size_t                          total;
-+	size_t                          total_save;
-+
-+	struct scatterlist		*in_sg;
-+	struct scatterlist		*out_sg;
-+
-+	/* Buffers for copying for unaligned cases */
-+	struct scatterlist		in_sgl;
-+	struct scatterlist		out_sgl;
-+	struct scatterlist		*orig_out;
-+	int				sgs_copied;
-+
-+	struct scatter_walk		in_walk;
-+	struct scatter_walk		out_walk;
-+	int			dma_in;
-+	struct dma_chan		*dma_lch_in;
-+	int			dma_out;
-+	struct dma_chan		*dma_lch_out;
-+	int			in_sg_len;
-+	int			out_sg_len;
-+	int			pio_only;
-+	const struct omap_des_pdata	*pdata;
-+};
-+
-+/* keep registered devices data here */
-+static LIST_HEAD(dev_list);
-+static DEFINE_SPINLOCK(list_lock);
-+
-+#ifdef DEBUG
-+#define omap_des_read(dd, offset)                               \
-+	({                                                              \
-+	 int _read_ret;                                          \
-+	 _read_ret = __raw_readl(dd->io_base + offset);          \
-+	 pr_err("omap_des_read(" #offset "=%#x)= %#x\n",       \
-+		 offset, _read_ret);                            \
-+	 _read_ret;                                              \
-+	 })
-+#else
-+static inline u32 omap_des_read(struct omap_des_dev *dd, u32 offset)
-+{
-+	return __raw_readl(dd->io_base + offset);
-+}
-+#endif
-+
-+#ifdef DEBUG
-+#define omap_des_write(dd, offset, value)                               \
-+	do {                                                            \
-+		pr_err("omap_des_write(" #offset "=%#x) value=%#x\n", \
-+				offset, value);                                \
-+		__raw_writel(value, dd->io_base + offset);              \
-+	} while (0)
-+#else
-+static inline void omap_des_write(struct omap_des_dev *dd, u32 offset,
-+		u32 value)
-+{
-+	__raw_writel(value, dd->io_base + offset);
-+}
-+#endif
-+
-+static inline void omap_des_write_mask(struct omap_des_dev *dd, u32 offset,
-+					u32 value, u32 mask)
-+{
-+	u32 val;
-+
-+	val = omap_des_read(dd, offset);
-+	val &= ~mask;
-+	val |= value;
-+	omap_des_write(dd, offset, val);
-+}
-+
-+static void omap_des_write_n(struct omap_des_dev *dd, u32 offset,
-+					u32 *value, int count)
-+{
-+	for (; count--; value++, offset += 4)
-+		omap_des_write(dd, offset, *value);
-+}
-+
-+static int omap_des_hw_init(struct omap_des_dev *dd)
-+{
-+	/*
-+	 * clocks are enabled when request starts and disabled when finished.
-+	 * It may be long delays between requests.
-+	 * Device might go to off mode to save power.
-+	 */
-+	pm_runtime_get_sync(dd->dev);
-+
-+	if (!(dd->flags & FLAGS_INIT)) {
-+		dd->flags |= FLAGS_INIT;
-+		dd->err = 0;
-+	}
-+
-+	return 0;
-+}
-+
-+static int omap_des_write_ctrl(struct omap_des_dev *dd)
-+{
-+	unsigned int key32;
-+	int i, err;
-+	u32 val = 0, mask = 0;
-+
-+	err = omap_des_hw_init(dd);
-+	if (err)
-+		return err;
-+
-+	key32 = dd->ctx->keylen / sizeof(u32);
-+
-+	/* it seems a key should always be set even if it has not changed */
-+	for (i = 0; i < key32; i++) {
-+		omap_des_write(dd, DES_REG_KEY(dd, i),
-+			       __le32_to_cpu(dd->ctx->key[i]));
-+	}
-+
-+	if ((dd->flags & FLAGS_CBC) && dd->req->info)
-+		omap_des_write_n(dd, DES_REG_IV(dd, 0), dd->req->info, 2);
-+
-+	if (dd->flags & FLAGS_CBC)
-+		val |= DES_REG_CTRL_CBC;
-+	if (dd->flags & FLAGS_ENCRYPT)
-+		val |= DES_REG_CTRL_DIRECTION;
-+
-+	mask |= DES_REG_CTRL_CBC | DES_REG_CTRL_DIRECTION;
-+
-+	omap_des_write_mask(dd, DES_REG_CTRL(dd), val, mask);
-+
-+	return 0;
-+}
-+
-+static void omap_des_dma_trigger_omap4(struct omap_des_dev *dd, int length)
-+{
-+	u32 mask, val;
-+
-+	omap_des_write(dd, DES_REG_LENGTH_N(0), length);
-+
-+	val = dd->pdata->dma_start;
-+
-+	if (dd->dma_lch_out != NULL)
-+		val |= dd->pdata->dma_enable_out;
-+	if (dd->dma_lch_in != NULL)
-+		val |= dd->pdata->dma_enable_in;
-+
-+	mask = dd->pdata->dma_enable_out | dd->pdata->dma_enable_in |
-+	       dd->pdata->dma_start;
-+
-+	omap_des_write_mask(dd, DES_REG_MASK(dd), val, mask);
-+}
-+
-+static void omap_des_dma_stop(struct omap_des_dev *dd)
-+{
-+	u32 mask;
-+
-+	mask = dd->pdata->dma_enable_out | dd->pdata->dma_enable_in |
-+	       dd->pdata->dma_start;
-+
-+	omap_des_write_mask(dd, DES_REG_MASK(dd), 0, mask);
-+}
-+
-+static struct omap_des_dev *omap_des_find_dev(struct omap_des_ctx *ctx)
-+{
-+	struct omap_des_dev *dd = NULL, *tmp;
-+
-+	spin_lock_bh(&list_lock);
-+	if (!ctx->dd) {
-+		list_for_each_entry(tmp, &dev_list, list) {
-+			/* FIXME: take fist available des core */
-+			dd = tmp;
-+			break;
-+		}
-+		ctx->dd = dd;
-+	} else {
-+		/* already found before */
-+		dd = ctx->dd;
-+	}
-+	spin_unlock_bh(&list_lock);
-+
-+	return dd;
-+}
-+
-+static void omap_des_dma_out_callback(void *data)
-+{
-+	struct omap_des_dev *dd = data;
-+
-+	/* dma_lch_out - completed */
-+	tasklet_schedule(&dd->done_task);
-+}
-+
-+static int omap_des_dma_init(struct omap_des_dev *dd)
-+{
-+	int err = -ENOMEM;
-+	dma_cap_mask_t mask;
-+
-+	dd->dma_lch_out = NULL;
-+	dd->dma_lch_in = NULL;
-+
-+	dma_cap_zero(mask);
-+	dma_cap_set(DMA_SLAVE, mask);
-+
-+	dd->dma_lch_in = dma_request_slave_channel_compat(mask,
-+							  omap_dma_filter_fn,
-+							  &dd->dma_in,
-+							  dd->dev, "rx");
-+	if (!dd->dma_lch_in) {
-+		dev_err(dd->dev, "Unable to request in DMA channel\n");
-+		goto err_dma_in;
-+	}
-+
-+	dd->dma_lch_out = dma_request_slave_channel_compat(mask,
-+							   omap_dma_filter_fn,
-+							   &dd->dma_out,
-+							   dd->dev, "tx");
-+	if (!dd->dma_lch_out) {
-+		dev_err(dd->dev, "Unable to request out DMA channel\n");
-+		goto err_dma_out;
-+	}
-+
-+	return 0;
-+
-+err_dma_out:
-+	dma_release_channel(dd->dma_lch_in);
-+err_dma_in:
-+	if (err)
-+		pr_err("error: %d\n", err);
-+	return err;
-+}
-+
-+static void omap_des_dma_cleanup(struct omap_des_dev *dd)
-+{
-+	dma_release_channel(dd->dma_lch_out);
-+	dma_release_channel(dd->dma_lch_in);
-+}
-+
-+static void sg_copy_buf(void *buf, struct scatterlist *sg,
-+			      unsigned int start, unsigned int nbytes, int out)
-+{
-+	struct scatter_walk walk;
-+
-+	if (!nbytes)
-+		return;
-+
-+	scatterwalk_start(&walk, sg);
-+	scatterwalk_advance(&walk, start);
-+	scatterwalk_copychunks(buf, &walk, nbytes, out);
-+	scatterwalk_done(&walk, out, 0);
-+}
-+
-+static int omap_des_crypt_dma(struct crypto_tfm *tfm,
-+		struct scatterlist *in_sg, struct scatterlist *out_sg,
-+		int in_sg_len, int out_sg_len)
-+{
-+	struct omap_des_ctx *ctx = crypto_tfm_ctx(tfm);
-+	struct omap_des_dev *dd = ctx->dd;
-+	struct dma_async_tx_descriptor *tx_in, *tx_out;
-+	struct dma_slave_config cfg;
-+	int ret;
-+
-+	if (dd->pio_only) {
-+		scatterwalk_start(&dd->in_walk, dd->in_sg);
-+		scatterwalk_start(&dd->out_walk, dd->out_sg);
-+
-+		/* Enable DATAIN interrupt and let it take
-+		   care of the rest */
-+		omap_des_write(dd, DES_REG_IRQ_ENABLE(dd), 0x2);
-+		return 0;
-+	}
-+
-+	dma_sync_sg_for_device(dd->dev, dd->in_sg, in_sg_len, DMA_TO_DEVICE);
-+
-+	memset(&cfg, 0, sizeof(cfg));
-+
-+	cfg.src_addr = dd->phys_base + DES_REG_DATA_N(dd, 0);
-+	cfg.dst_addr = dd->phys_base + DES_REG_DATA_N(dd, 0);
-+	cfg.src_addr_width = DMA_SLAVE_BUSWIDTH_4_BYTES;
-+	cfg.dst_addr_width = DMA_SLAVE_BUSWIDTH_4_BYTES;
-+	cfg.src_maxburst = DST_MAXBURST;
-+	cfg.dst_maxburst = DST_MAXBURST;
-+
-+	/* IN */
-+	ret = dmaengine_slave_config(dd->dma_lch_in, &cfg);
-+	if (ret) {
-+		dev_err(dd->dev, "can't configure IN dmaengine slave: %d\n",
-+			ret);
-+		return ret;
-+	}
-+
-+	tx_in = dmaengine_prep_slave_sg(dd->dma_lch_in, in_sg, in_sg_len,
-+					DMA_MEM_TO_DEV,
-+					DMA_PREP_INTERRUPT | DMA_CTRL_ACK);
-+	if (!tx_in) {
-+		dev_err(dd->dev, "IN prep_slave_sg() failed\n");
-+		return -EINVAL;
-+	}
-+
-+	/* No callback necessary */
-+	tx_in->callback_param = dd;
-+
-+	/* OUT */
-+	ret = dmaengine_slave_config(dd->dma_lch_out, &cfg);
-+	if (ret) {
-+		dev_err(dd->dev, "can't configure OUT dmaengine slave: %d\n",
-+			ret);
-+		return ret;
-+	}
-+
-+	tx_out = dmaengine_prep_slave_sg(dd->dma_lch_out, out_sg, out_sg_len,
-+					DMA_DEV_TO_MEM,
-+					DMA_PREP_INTERRUPT | DMA_CTRL_ACK);
-+	if (!tx_out) {
-+		dev_err(dd->dev, "OUT prep_slave_sg() failed\n");
-+		return -EINVAL;
-+	}
-+
-+	tx_out->callback = omap_des_dma_out_callback;
-+	tx_out->callback_param = dd;
-+
-+	dmaengine_submit(tx_in);
-+	dmaengine_submit(tx_out);
-+
-+	dma_async_issue_pending(dd->dma_lch_in);
-+	dma_async_issue_pending(dd->dma_lch_out);
-+
-+	/* start DMA */
-+	dd->pdata->trigger(dd, dd->total);
-+
-+	return 0;
-+}
-+
-+static int omap_des_crypt_dma_start(struct omap_des_dev *dd)
-+{
-+	struct crypto_tfm *tfm = crypto_ablkcipher_tfm(
-+					crypto_ablkcipher_reqtfm(dd->req));
-+	int err;
-+
-+	pr_debug("total: %d\n", dd->total);
-+
-+	if (!dd->pio_only) {
-+		err = dma_map_sg(dd->dev, dd->in_sg, dd->in_sg_len,
-+				 DMA_TO_DEVICE);
-+		if (!err) {
-+			dev_err(dd->dev, "dma_map_sg() error\n");
-+			return -EINVAL;
-+		}
-+
-+		err = dma_map_sg(dd->dev, dd->out_sg, dd->out_sg_len,
-+				 DMA_FROM_DEVICE);
-+		if (!err) {
-+			dev_err(dd->dev, "dma_map_sg() error\n");
-+			return -EINVAL;
-+		}
-+	}
-+
-+	err = omap_des_crypt_dma(tfm, dd->in_sg, dd->out_sg, dd->in_sg_len,
-+				 dd->out_sg_len);
-+	if (err && !dd->pio_only) {
-+		dma_unmap_sg(dd->dev, dd->in_sg, dd->in_sg_len, DMA_TO_DEVICE);
-+		dma_unmap_sg(dd->dev, dd->out_sg, dd->out_sg_len,
-+			     DMA_FROM_DEVICE);
-+	}
-+
-+	return err;
-+}
-+
-+static void omap_des_finish_req(struct omap_des_dev *dd, int err)
-+{
-+	struct ablkcipher_request *req = dd->req;
-+
-+	pr_debug("err: %d\n", err);
-+
-+	pm_runtime_put(dd->dev);
-+	dd->flags &= ~FLAGS_BUSY;
-+
-+	req->base.complete(&req->base, err);
-+}
-+
-+static int omap_des_crypt_dma_stop(struct omap_des_dev *dd)
-+{
-+	int err = 0;
-+
-+	pr_debug("total: %d\n", dd->total);
-+
-+	omap_des_dma_stop(dd);
-+
-+	dmaengine_terminate_all(dd->dma_lch_in);
-+	dmaengine_terminate_all(dd->dma_lch_out);
-+
-+	dma_unmap_sg(dd->dev, dd->in_sg, dd->in_sg_len, DMA_TO_DEVICE);
-+	dma_unmap_sg(dd->dev, dd->out_sg, dd->out_sg_len, DMA_FROM_DEVICE);
-+
-+	return err;
-+}
-+
-+int omap_des_copy_needed(struct scatterlist *sg)
-+{
-+	while (sg) {
-+		if (!IS_ALIGNED(sg->offset, 4))
-+			return -1;
-+		if (!IS_ALIGNED(sg->length, DES_BLOCK_SIZE))
-+			return -1;
-+		sg = sg_next(sg);
-+	}
-+	return 0;
-+}
-+
-+int omap_des_copy_sgs(struct omap_des_dev *dd)
-+{
-+	void *buf_in, *buf_out;
-+	int pages;
-+
-+	pages = dd->total >> PAGE_SHIFT;
-+
-+	if (dd->total & (PAGE_SIZE-1))
-+		pages++;
-+
-+	BUG_ON(!pages);
-+
-+	buf_in = (void *)__get_free_pages(GFP_ATOMIC, pages);
-+	buf_out = (void *)__get_free_pages(GFP_ATOMIC, pages);
-+
-+	if (!buf_in || !buf_out) {
-+		pr_err("Couldn't allocated pages for unaligned cases.\n");
-+		return -1;
-+	}
-+
-+	dd->orig_out = dd->out_sg;
-+
-+	sg_copy_buf(buf_in, dd->in_sg, 0, dd->total, 0);
-+
-+	sg_init_table(&dd->in_sgl, 1);
-+	sg_set_buf(&dd->in_sgl, buf_in, dd->total);
-+	dd->in_sg = &dd->in_sgl;
-+
-+	sg_init_table(&dd->out_sgl, 1);
-+	sg_set_buf(&dd->out_sgl, buf_out, dd->total);
-+	dd->out_sg = &dd->out_sgl;
-+
-+	return 0;
-+}
-+
-+static int omap_des_handle_queue(struct omap_des_dev *dd,
-+			       struct ablkcipher_request *req)
-+{
-+	struct crypto_async_request *async_req, *backlog;
-+	struct omap_des_ctx *ctx;
-+	struct omap_des_reqctx *rctx;
-+	unsigned long flags;
-+	int err, ret = 0;
-+
-+	spin_lock_irqsave(&dd->lock, flags);
-+	if (req)
-+		ret = ablkcipher_enqueue_request(&dd->queue, req);
-+	if (dd->flags & FLAGS_BUSY) {
-+		spin_unlock_irqrestore(&dd->lock, flags);
-+		return ret;
-+	}
-+	backlog = crypto_get_backlog(&dd->queue);
-+	async_req = crypto_dequeue_request(&dd->queue);
-+	if (async_req)
-+		dd->flags |= FLAGS_BUSY;
-+	spin_unlock_irqrestore(&dd->lock, flags);
-+
-+	if (!async_req)
-+		return ret;
-+
-+	if (backlog)
-+		backlog->complete(backlog, -EINPROGRESS);
-+
-+	req = ablkcipher_request_cast(async_req);
-+
-+	/* assign new request to device */
-+	dd->req = req;
-+	dd->total = req->nbytes;
-+	dd->total_save = req->nbytes;
-+	dd->in_sg = req->src;
-+	dd->out_sg = req->dst;
-+
-+	if (omap_des_copy_needed(dd->in_sg) ||
-+	    omap_des_copy_needed(dd->out_sg)) {
-+		if (omap_des_copy_sgs(dd))
-+			pr_err("Failed to copy SGs for unaligned cases\n");
-+		dd->sgs_copied = 1;
-+	} else {
-+		dd->sgs_copied = 0;
-+	}
-+
-+	dd->in_sg_len = scatterwalk_bytes_sglen(dd->in_sg, dd->total);
-+	dd->out_sg_len = scatterwalk_bytes_sglen(dd->out_sg, dd->total);
-+	BUG_ON(dd->in_sg_len < 0 || dd->out_sg_len < 0);
-+
-+	rctx = ablkcipher_request_ctx(req);
-+	ctx = crypto_ablkcipher_ctx(crypto_ablkcipher_reqtfm(req));
-+	rctx->mode &= FLAGS_MODE_MASK;
-+	dd->flags = (dd->flags & ~FLAGS_MODE_MASK) | rctx->mode;
-+
-+	dd->ctx = ctx;
-+	ctx->dd = dd;
-+
-+	err = omap_des_write_ctrl(dd);
-+	if (!err)
-+		err = omap_des_crypt_dma_start(dd);
-+	if (err) {
-+		/* des_task will not finish it, so do it here */
-+		omap_des_finish_req(dd, err);
-+		tasklet_schedule(&dd->queue_task);
-+	}
-+
-+	return ret; /* return ret, which is enqueue return value */
-+}
-+
-+static void omap_des_done_task(unsigned long data)
-+{
-+	struct omap_des_dev *dd = (struct omap_des_dev *)data;
-+	void *buf_in, *buf_out;
-+	int pages;
-+
-+	pr_debug("enter done_task\n");
-+
-+	if (!dd->pio_only) {
-+		dma_sync_sg_for_device(dd->dev, dd->out_sg, dd->out_sg_len,
-+				       DMA_FROM_DEVICE);
-+		dma_unmap_sg(dd->dev, dd->in_sg, dd->in_sg_len, DMA_TO_DEVICE);
-+		dma_unmap_sg(dd->dev, dd->out_sg, dd->out_sg_len,
-+			     DMA_FROM_DEVICE);
-+		omap_des_crypt_dma_stop(dd);
-+	}
-+
-+	if (dd->sgs_copied) {
-+		buf_in = sg_virt(&dd->in_sgl);
-+		buf_out = sg_virt(&dd->out_sgl);
-+
-+		sg_copy_buf(buf_out, dd->orig_out, 0, dd->total_save, 1);
-+
-+		pages = get_order(dd->total_save);
-+		free_pages((unsigned long)buf_in, pages);
-+		free_pages((unsigned long)buf_out, pages);
-+	}
-+
-+	omap_des_finish_req(dd, 0);
-+	omap_des_handle_queue(dd, NULL);
-+
-+	pr_debug("exit\n");
-+}
-+
-+static void omap_des_queue_task(unsigned long data)
-+{
-+	struct omap_des_dev *dd = (struct omap_des_dev *)data;
-+
-+	omap_des_handle_queue(dd, NULL);
-+}
-+
-+static int omap_des_crypt(struct ablkcipher_request *req, unsigned long mode)
-+{
-+	struct omap_des_ctx *ctx = crypto_ablkcipher_ctx(
-+			crypto_ablkcipher_reqtfm(req));
-+	struct omap_des_reqctx *rctx = ablkcipher_request_ctx(req);
-+	struct omap_des_dev *dd;
-+
-+	pr_debug("nbytes: %d, enc: %d, cbc: %d\n", req->nbytes,
-+		 !!(mode & FLAGS_ENCRYPT),
-+		 !!(mode & FLAGS_CBC));
-+
-+	if (!IS_ALIGNED(req->nbytes, DES_BLOCK_SIZE)) {
-+		pr_err("request size is not exact amount of DES blocks\n");
-+		return -EINVAL;
-+	}
-+
-+	dd = omap_des_find_dev(ctx);
-+	if (!dd)
-+		return -ENODEV;
-+
-+	rctx->mode = mode;
-+
-+	return omap_des_handle_queue(dd, req);
-+}
-+
-+/* ********************** ALG API ************************************ */
-+
-+static int omap_des_setkey(struct crypto_ablkcipher *tfm, const u8 *key,
-+			   unsigned int keylen)
-+{
-+	struct omap_des_ctx *ctx = crypto_ablkcipher_ctx(tfm);
-+
-+	if (keylen != DES_KEY_SIZE)
-+		return -EINVAL;
-+
-+	pr_debug("enter, keylen: %d\n", keylen);
-+
-+	memcpy(ctx->key, key, keylen);
-+	ctx->keylen = keylen;
-+
-+	return 0;
-+}
-+
-+static int omap_des_ecb_encrypt(struct ablkcipher_request *req)
-+{
-+	return omap_des_crypt(req, FLAGS_ENCRYPT);
-+}
-+
-+static int omap_des_ecb_decrypt(struct ablkcipher_request *req)
-+{
-+	return omap_des_crypt(req, 0);
-+}
-+
-+static int omap_des_cbc_encrypt(struct ablkcipher_request *req)
-+{
-+	return omap_des_crypt(req, FLAGS_ENCRYPT | FLAGS_CBC);
-+}
-+
-+static int omap_des_cbc_decrypt(struct ablkcipher_request *req)
-+{
-+	return omap_des_crypt(req, FLAGS_CBC);
-+}
-+
-+static int omap_des_cra_init(struct crypto_tfm *tfm)
-+{
-+	pr_debug("enter\n");
-+
-+	tfm->crt_ablkcipher.reqsize = sizeof(struct omap_des_reqctx);
-+
-+	return 0;
-+}
-+
-+static void omap_des_cra_exit(struct crypto_tfm *tfm)
-+{
-+	pr_debug("enter\n");
-+}
-+
-+/* ********************** ALGS ************************************ */
-+
-+static struct crypto_alg algs_ecb_cbc[] = {
-+{
-+	.cra_name		= "ecb(des)",
-+	.cra_driver_name	= "ecb-des-omap",
-+	.cra_priority		= 100,
-+	.cra_flags		= CRYPTO_ALG_TYPE_ABLKCIPHER |
-+				  CRYPTO_ALG_KERN_DRIVER_ONLY |
-+				  CRYPTO_ALG_ASYNC,
-+	.cra_blocksize		= DES_BLOCK_SIZE,
-+	.cra_ctxsize		= sizeof(struct omap_des_ctx),
-+	.cra_alignmask		= 0,
-+	.cra_type		= &crypto_ablkcipher_type,
-+	.cra_module		= THIS_MODULE,
-+	.cra_init		= omap_des_cra_init,
-+	.cra_exit		= omap_des_cra_exit,
-+	.cra_u.ablkcipher = {
-+		.min_keysize	= DES_KEY_SIZE,
-+		.max_keysize	= DES_KEY_SIZE,
-+		.setkey		= omap_des_setkey,
-+		.encrypt	= omap_des_ecb_encrypt,
-+		.decrypt	= omap_des_ecb_decrypt,
-+	}
-+},
-+{
-+	.cra_name		= "cbc(des)",
-+	.cra_driver_name	= "cbc-des-omap",
-+	.cra_priority		= 100,
-+	.cra_flags		= CRYPTO_ALG_TYPE_ABLKCIPHER |
-+				  CRYPTO_ALG_KERN_DRIVER_ONLY |
-+				  CRYPTO_ALG_ASYNC,
-+	.cra_blocksize		= DES_BLOCK_SIZE,
-+	.cra_ctxsize		= sizeof(struct omap_des_ctx),
-+	.cra_alignmask		= 0,
-+	.cra_type		= &crypto_ablkcipher_type,
-+	.cra_module		= THIS_MODULE,
-+	.cra_init		= omap_des_cra_init,
-+	.cra_exit		= omap_des_cra_exit,
-+	.cra_u.ablkcipher = {
-+		.min_keysize	= DES_KEY_SIZE,
-+		.max_keysize	= DES_KEY_SIZE,
-+		.ivsize		= DES_BLOCK_SIZE,
-+		.setkey		= omap_des_setkey,
-+		.encrypt	= omap_des_cbc_encrypt,
-+		.decrypt	= omap_des_cbc_decrypt,
-+	}
-+}
-+};
-+
-+static struct omap_des_algs_info omap_des_algs_info_ecb_cbc[] = {
-+	{
-+		.algs_list	= algs_ecb_cbc,
-+		.size		= ARRAY_SIZE(algs_ecb_cbc),
-+	},
-+};
-+
-+#ifdef CONFIG_OF
-+static const struct omap_des_pdata omap_des_pdata_omap4 = {
-+	.algs_info	= omap_des_algs_info_ecb_cbc,
-+	.algs_info_size	= ARRAY_SIZE(omap_des_algs_info_ecb_cbc),
-+	.trigger	= omap_des_dma_trigger_omap4,
-+	.key_ofs	= 0x14,
-+	.iv_ofs		= 0x18,
-+	.ctrl_ofs	= 0x20,
-+	.data_ofs	= 0x28,
-+	.rev_ofs	= 0x30,
-+	.mask_ofs	= 0x34,
-+	.irq_status_ofs = 0x3c,
-+	.irq_enable_ofs = 0x40,
-+	.dma_enable_in	= BIT(5),
-+	.dma_enable_out	= BIT(6),
-+	.major_mask	= 0x0700,
-+	.major_shift	= 8,
-+	.minor_mask	= 0x003f,
-+	.minor_shift	= 0,
-+};
-+
-+static irqreturn_t omap_des_irq(int irq, void *dev_id)
-+{
-+	struct omap_des_dev *dd = dev_id;
-+	u32 status, i;
-+	u32 *src, *dst;
-+
-+	status = omap_des_read(dd, DES_REG_IRQ_STATUS(dd));
-+	if (status & DES_REG_IRQ_DATA_IN) {
-+		omap_des_write(dd, DES_REG_IRQ_ENABLE(dd), 0x0);
-+
-+		BUG_ON(!dd->in_sg);
-+
-+		BUG_ON(_calc_walked(in) > dd->in_sg->length);
-+
-+		src = sg_virt(dd->in_sg) + _calc_walked(in);
-+
-+		for (i = 0; i < DES_BLOCK_WORDS; i++) {
-+			omap_des_write(dd, DES_REG_DATA_N(dd, i), *src);
-+
-+			scatterwalk_advance(&dd->in_walk, 4);
-+			if (dd->in_sg->length == _calc_walked(in)) {
-+				dd->in_sg = scatterwalk_sg_next(dd->in_sg);
-+				if (dd->in_sg) {
-+					scatterwalk_start(&dd->in_walk,
-+							  dd->in_sg);
-+					src = sg_virt(dd->in_sg) +
-+					      _calc_walked(in);
-+				}
-+			} else {
-+				src++;
-+			}
-+		}
-+
-+		/* Clear IRQ status */
-+		status &= ~DES_REG_IRQ_DATA_IN;
-+		omap_des_write(dd, DES_REG_IRQ_STATUS(dd), status);
-+
-+		/* Enable DATA_OUT interrupt */
-+		omap_des_write(dd, DES_REG_IRQ_ENABLE(dd), 0x4);
-+
-+	} else if (status & DES_REG_IRQ_DATA_OUT) {
-+		omap_des_write(dd, DES_REG_IRQ_ENABLE(dd), 0x0);
-+
-+		BUG_ON(!dd->out_sg);
-+
-+		BUG_ON(_calc_walked(out) > dd->out_sg->length);
-+
-+		dst = sg_virt(dd->out_sg) + _calc_walked(out);
-+
-+		for (i = 0; i < DES_BLOCK_WORDS; i++) {
-+			*dst = omap_des_read(dd, DES_REG_DATA_N(dd, i));
-+			scatterwalk_advance(&dd->out_walk, 4);
-+			if (dd->out_sg->length == _calc_walked(out)) {
-+				dd->out_sg = scatterwalk_sg_next(dd->out_sg);
-+				if (dd->out_sg) {
-+					scatterwalk_start(&dd->out_walk,
-+							  dd->out_sg);
-+					dst = sg_virt(dd->out_sg) +
-+					      _calc_walked(out);
-+				}
-+			} else {
-+				dst++;
-+			}
-+		}
-+
-+		dd->total -= DES_BLOCK_SIZE;
-+
-+		BUG_ON(dd->total < 0);
-+
-+		/* Clear IRQ status */
-+		status &= ~DES_REG_IRQ_DATA_OUT;
-+		omap_des_write(dd, DES_REG_IRQ_STATUS(dd), status);
-+
-+		if (!dd->total)
-+			/* All bytes read! */
-+			tasklet_schedule(&dd->done_task);
-+		else
-+			/* Enable DATA_IN interrupt for next block */
-+			omap_des_write(dd, DES_REG_IRQ_ENABLE(dd), 0x2);
-+	}
-+
-+	return IRQ_HANDLED;
-+}
-+
-+static const struct of_device_id omap_des_of_match[] = {
-+	{
-+		.compatible	= "ti,omap4-des",
-+		.data		= &omap_des_pdata_omap4,
-+	},
-+	{},
-+};
-+MODULE_DEVICE_TABLE(of, omap_des_of_match);
-+
-+static int omap_des_get_res_of(struct omap_des_dev *dd,
-+		struct device *dev, struct resource *res)
-+{
-+	struct device_node *node = dev->of_node;
-+	const struct of_device_id *match;
-+	int err = 0;
-+
-+	match = of_match_device(of_match_ptr(omap_des_of_match), dev);
-+	if (!match) {
-+		dev_err(dev, "no compatible OF match\n");
-+		err = -EINVAL;
-+		goto err;
-+	}
-+
-+	err = of_address_to_resource(node, 0, res);
-+	if (err < 0) {
-+		dev_err(dev, "can't translate OF node address\n");
-+		err = -EINVAL;
-+		goto err;
-+	}
-+
-+	dd->dma_out = -1; /* Dummy value that's unused */
-+	dd->dma_in = -1; /* Dummy value that's unused */
-+
-+	dd->pdata = match->data;
-+
-+err:
-+	return err;
-+}
-+#else
-+static const struct of_device_id omap_des_of_match[] = {
-+	{},
-+};
-+
-+static int omap_des_get_res_of(struct omap_des_dev *dd,
-+		struct device *dev, struct resource *res)
-+{
-+	return -EINVAL;
-+}
-+#endif
-+
-+static int omap_des_get_res_pdev(struct omap_des_dev *dd,
-+		struct platform_device *pdev, struct resource *res)
-+{
-+	struct device *dev = &pdev->dev;
-+	struct resource *r;
-+	int err = 0;
-+
-+	/* Get the base address */
-+	r = platform_get_resource(pdev, IORESOURCE_MEM, 0);
-+	if (!r) {
-+		dev_err(dev, "no MEM resource info\n");
-+		err = -ENODEV;
-+		goto err;
-+	}
-+	memcpy(res, r, sizeof(*res));
-+
-+	/* Get the DMA out channel */
-+	r = platform_get_resource(pdev, IORESOURCE_DMA, 0);
-+	if (!r) {
-+		dev_err(dev, "no DMA out resource info\n");
-+		err = -ENODEV;
-+		goto err;
-+	}
-+	dd->dma_out = r->start;
-+
-+	/* Get the DMA in channel */
-+	r = platform_get_resource(pdev, IORESOURCE_DMA, 1);
-+	if (!r) {
-+		dev_err(dev, "no DMA in resource info\n");
-+		err = -ENODEV;
-+		goto err;
-+	}
-+	dd->dma_in = r->start;
-+
-+	/* non-DT devices get pdata from pdev */
-+	dd->pdata = pdev->dev.platform_data;
-+
-+err:
-+	return err;
-+}
-+
-+static int omap_des_probe(struct platform_device *pdev)
-+{
-+	struct device *dev = &pdev->dev;
-+	struct omap_des_dev *dd;
-+	struct crypto_alg *algp;
-+	struct resource res;
-+	int err = -ENOMEM, i, j, irq = -1;
-+	u32 reg;
-+
-+	dd = devm_kzalloc(dev, sizeof(struct omap_des_dev), GFP_KERNEL);
-+	if (dd == NULL) {
-+		dev_err(dev, "unable to alloc data struct.\n");
-+		goto err_data;
-+	}
-+	dd->dev = dev;
-+	platform_set_drvdata(pdev, dd);
-+
-+	spin_lock_init(&dd->lock);
-+	crypto_init_queue(&dd->queue, OMAP_DES_QUEUE_LENGTH);
-+
-+	err = (dev->of_node) ? omap_des_get_res_of(dd, dev, &res) :
-+			       omap_des_get_res_pdev(dd, pdev, &res);
-+	if (err)
-+		goto err_res;
-+
-+	dd->io_base = devm_request_and_ioremap(dev, &res);
-+	if (!dd->io_base) {
-+		dev_err(dev, "can't ioremap\n");
-+		err = -ENOMEM;
-+		goto err_res;
-+	}
-+	dd->phys_base = res.start;
-+
-+	pm_runtime_enable(dev);
-+	pm_runtime_get_sync(dev);
-+
-+	omap_des_dma_stop(dd);
-+
-+	reg = omap_des_read(dd, DES_REG_REV(dd));
-+
-+	pm_runtime_put_sync(dev);
-+
-+	dev_info(dev, "OMAP DES hw accel rev: %u.%u\n",
-+		 (reg & dd->pdata->major_mask) >> dd->pdata->major_shift,
-+		 (reg & dd->pdata->minor_mask) >> dd->pdata->minor_shift);
-+
-+	tasklet_init(&dd->done_task, omap_des_done_task, (unsigned long)dd);
-+	tasklet_init(&dd->queue_task, omap_des_queue_task, (unsigned long)dd);
-+
-+	err = omap_des_dma_init(dd);
-+	if (err && DES_REG_IRQ_STATUS(dd) && DES_REG_IRQ_ENABLE(dd)) {
-+		dd->pio_only = 1;
-+
-+		irq = platform_get_irq(pdev, 0);
-+		if (irq < 0) {
-+			dev_err(dev, "can't get IRQ resource\n");
-+			goto err_irq;
-+		}
-+
-+		err = devm_request_irq(dev, irq, omap_des_irq, 0,
-+				dev_name(dev), dd);
-+		if (err) {
-+			dev_err(dev, "Unable to grab omap-des IRQ\n");
-+			goto err_irq;
-+		}
-+	}
-+
-+
-+	INIT_LIST_HEAD(&dd->list);
-+	spin_lock(&list_lock);
-+	list_add_tail(&dd->list, &dev_list);
-+	spin_unlock(&list_lock);
-+
-+	for (i = 0; i < dd->pdata->algs_info_size; i++) {
-+		for (j = 0; j < dd->pdata->algs_info[i].size; j++) {
-+			algp = &dd->pdata->algs_info[i].algs_list[j];
-+
-+			pr_debug("reg alg: %s\n", algp->cra_name);
-+			INIT_LIST_HEAD(&algp->cra_list);
-+
-+			err = crypto_register_alg(algp);
-+			if (err)
-+				goto err_algs;
-+
-+			dd->pdata->algs_info[i].registered++;
-+		}
-+	}
-+
-+	return 0;
-+err_algs:
-+	for (i = dd->pdata->algs_info_size - 1; i >= 0; i--)
-+		for (j = dd->pdata->algs_info[i].registered - 1; j >= 0; j--)
-+			crypto_unregister_alg(
-+					&dd->pdata->algs_info[i].algs_list[j]);
-+	if (!dd->pio_only)
-+		omap_des_dma_cleanup(dd);
-+err_irq:
-+	tasklet_kill(&dd->done_task);
-+	tasklet_kill(&dd->queue_task);
-+	pm_runtime_disable(dev);
-+err_res:
-+	dd = NULL;
-+err_data:
-+	dev_err(dev, "initialization failed.\n");
-+	return err;
-+}
-+
-+static int omap_des_remove(struct platform_device *pdev)
-+{
-+	struct omap_des_dev *dd = platform_get_drvdata(pdev);
-+	int i, j;
-+
-+	if (!dd)
-+		return -ENODEV;
-+
-+	spin_lock(&list_lock);
-+	list_del(&dd->list);
-+	spin_unlock(&list_lock);
-+
-+	for (i = dd->pdata->algs_info_size - 1; i >= 0; i--)
-+		for (j = dd->pdata->algs_info[i].registered - 1; j >= 0; j--)
-+			crypto_unregister_alg(
-+					&dd->pdata->algs_info[i].algs_list[j]);
-+
-+	tasklet_kill(&dd->done_task);
-+	tasklet_kill(&dd->queue_task);
-+	omap_des_dma_cleanup(dd);
-+	pm_runtime_disable(dd->dev);
-+	dd = NULL;
-+
-+	return 0;
-+}
-+
-+#ifdef CONFIG_PM_SLEEP
-+static int omap_des_suspend(struct device *dev)
-+{
-+	pm_runtime_put_sync(dev);
-+	return 0;
-+}
-+
-+static int omap_des_resume(struct device *dev)
-+{
-+	pm_runtime_get_sync(dev);
-+	return 0;
-+}
-+#endif
-+
-+static const struct dev_pm_ops omap_des_pm_ops = {
-+	SET_SYSTEM_SLEEP_PM_OPS(omap_des_suspend, omap_des_resume)
-+};
-+
-+static struct platform_driver omap_des_driver = {
-+	.probe	= omap_des_probe,
-+	.remove	= omap_des_remove,
-+	.driver	= {
-+		.name	= "omap-des",
-+		.owner	= THIS_MODULE,
-+		.pm	= &omap_des_pm_ops,
-+		.of_match_table	= omap_des_of_match,
-+	},
-+};
-+
-+module_platform_driver(omap_des_driver);
-+
-+MODULE_DESCRIPTION("OMAP DES hw acceleration support.");
-+MODULE_LICENSE("GPL v2");
-+MODULE_AUTHOR("Joel Fernandes <[email protected]>");

+ 0 - 57
target/linux/omap/patches-3.12/601-crypto-omap-des-Add-config-and-build-options.patch

@@ -1,57 +0,0 @@
-From patchwork Thu Aug 29 23:27:52 2013
-Content-Type: text/plain; charset="utf-8"
-MIME-Version: 1.0
-Content-Transfer-Encoding: 7bit
-Subject: [2/3] crypto: omap-des: Add config and build options
-From: Joel Fernandes <[email protected]>
-X-Patchwork-Id: 2851671
-Message-Id: <[email protected]>
-To: Herbert Xu <[email protected]>, "David S. Miller"
-	<[email protected]>, Mark Greer <[email protected]>, Tony Lindgren
-	<[email protected]>, Lokesh Vutla <[email protected]>
-Cc: Joel Fernandes <[email protected]>,
-	Linux OMAP List <[email protected]>, 
-	Linux Kernel Mailing List <[email protected]>,
-	Linux ARM Kernel List <[email protected]>,
-	Linux Crypto Mailing List <[email protected]>
-Date: Thu, 29 Aug 2013 18:27:52 -0500
-
-Add config and build options for the newly added omap-des driver.
-
-Signed-off-by: Joel Fernandes <[email protected]>
-
----
-drivers/crypto/Kconfig  | 11 +++++++++++
- drivers/crypto/Makefile |  1 +
- 2 files changed, 12 insertions(+)
-
---- a/drivers/crypto/Kconfig
-+++ b/drivers/crypto/Kconfig
-@@ -263,6 +263,17 @@ config CRYPTO_DEV_OMAP_AES
- 	  OMAP processors have AES module accelerator. Select this if you
- 	  want to use the OMAP module for AES algorithms.
- 
-+config CRYPTO_DEV_OMAP_DES
-+	tristate "Support for OMAP DES3DES hw engine"
-+	depends on ARCH_OMAP2PLUS
-+	select CRYPTO_DES
-+	select CRYPTO_BLKCIPHER2
-+	help
-+	  OMAP processors have DES/3DES module accelerator. Select this if you
-+	  want to use the OMAP module for DES and 3DES algorithms. Currently
-+	  the ECB and CBC modes of operation supported by the driver. Also
-+	  accesses made on unaligned boundaries are also supported.
-+
- config CRYPTO_DEV_PICOXCELL
- 	tristate "Support for picoXcell IPSEC and Layer2 crypto engines"
- 	depends on ARCH_PICOXCELL && HAVE_CLK
---- a/drivers/crypto/Makefile
-+++ b/drivers/crypto/Makefile
-@@ -11,6 +11,7 @@ obj-$(CONFIG_CRYPTO_DEV_IXP4XX) += ixp4x
- obj-$(CONFIG_CRYPTO_DEV_PPC4XX) += amcc/
- obj-$(CONFIG_CRYPTO_DEV_OMAP_SHAM) += omap-sham.o
- obj-$(CONFIG_CRYPTO_DEV_OMAP_AES) += omap-aes.o
-+obj-$(CONFIG_CRYPTO_DEV_OMAP_DES) += omap-des.o
- obj-$(CONFIG_CRYPTO_DEV_PICOXCELL) += picoxcell_crypto.o
- obj-$(CONFIG_CRYPTO_DEV_SAHARA) += sahara.o
- obj-$(CONFIG_CRYPTO_DEV_DCP) += dcp.o

+ 0 - 111
target/linux/omap/patches-3.12/602-crypto-omap-des-Add-triple-DES-des3_ede-support-to-driver.patch

@@ -1,111 +0,0 @@
-From patchwork Thu Aug 29 23:27:53 2013
-Content-Type: text/plain; charset="utf-8"
-MIME-Version: 1.0
-Content-Transfer-Encoding: 7bit
-Subject: [3/3] crypto: omap-des: Add triple DES (des3_ede) support to driver
-From: Joel Fernandes <[email protected]>
-X-Patchwork-Id: 2851679
-Message-Id: <[email protected]>
-To: Herbert Xu <[email protected]>, "David S. Miller"
-	<[email protected]>, Mark Greer <[email protected]>, Tony Lindgren
-	<[email protected]>, Lokesh Vutla <[email protected]>
-Cc: Joel Fernandes <[email protected]>,
-	Linux OMAP List <[email protected]>, 
-	Linux Kernel Mailing List <[email protected]>,
-	Linux ARM Kernel List <[email protected]>,
-	Linux Crypto Mailing List <[email protected]>
-Date: Thu, 29 Aug 2013 18:27:53 -0500
-
-OMAP DES module supports 3DES operation where 3 64-bit keys are used to
-perform a DES encrypt-decrypt-encrypt (ede) operation on a buffer.
-
-Signed-off-by: Joel Fernandes <[email protected]>
-
----
-drivers/crypto/omap-des.c | 53 ++++++++++++++++++++++++++++++++++++++++++++---
- 1 file changed, 50 insertions(+), 3 deletions(-)
-
---- a/drivers/crypto/omap-des.c
-+++ b/drivers/crypto/omap-des.c
-@@ -83,7 +83,7 @@ struct omap_des_ctx {
- 	struct omap_des_dev *dd;
- 
- 	int		keylen;
--	u32		key[DES_KEY_SIZE / sizeof(u32)];
-+	u32		key[(3 * DES_KEY_SIZE) / sizeof(u32)];
- 	unsigned long	flags;
- };
- 
-@@ -265,8 +265,10 @@ static int omap_des_write_ctrl(struct om
- 		val |= DES_REG_CTRL_CBC;
- 	if (dd->flags & FLAGS_ENCRYPT)
- 		val |= DES_REG_CTRL_DIRECTION;
-+	if (key32 == 6)
-+		val |= DES_REG_CTRL_TDES;
- 
--	mask |= DES_REG_CTRL_CBC | DES_REG_CTRL_DIRECTION;
-+	mask |= DES_REG_CTRL_CBC | DES_REG_CTRL_DIRECTION | DES_REG_CTRL_TDES;
- 
- 	omap_des_write_mask(dd, DES_REG_CTRL(dd), val, mask);
- 
-@@ -725,7 +727,7 @@ static int omap_des_setkey(struct crypto
- {
- 	struct omap_des_ctx *ctx = crypto_ablkcipher_ctx(tfm);
- 
--	if (keylen != DES_KEY_SIZE)
-+	if (keylen != DES_KEY_SIZE && keylen != (3*DES_KEY_SIZE))
- 		return -EINVAL;
- 
- 	pr_debug("enter, keylen: %d\n", keylen);
-@@ -815,6 +817,51 @@ static struct crypto_alg algs_ecb_cbc[]
- 		.ivsize		= DES_BLOCK_SIZE,
- 		.setkey		= omap_des_setkey,
- 		.encrypt	= omap_des_cbc_encrypt,
-+		.decrypt	= omap_des_cbc_decrypt,
-+	}
-+},
-+{
-+	.cra_name		= "ecb(des3_ede)",
-+	.cra_driver_name	= "ecb-des3-omap",
-+	.cra_priority		= 100,
-+	.cra_flags		= CRYPTO_ALG_TYPE_ABLKCIPHER |
-+				  CRYPTO_ALG_KERN_DRIVER_ONLY |
-+				  CRYPTO_ALG_ASYNC,
-+	.cra_blocksize		= DES_BLOCK_SIZE,
-+	.cra_ctxsize		= sizeof(struct omap_des_ctx),
-+	.cra_alignmask		= 0,
-+	.cra_type		= &crypto_ablkcipher_type,
-+	.cra_module		= THIS_MODULE,
-+	.cra_init		= omap_des_cra_init,
-+	.cra_exit		= omap_des_cra_exit,
-+	.cra_u.ablkcipher = {
-+		.min_keysize	= 3*DES_KEY_SIZE,
-+		.max_keysize	= 3*DES_KEY_SIZE,
-+		.setkey		= omap_des_setkey,
-+		.encrypt	= omap_des_ecb_encrypt,
-+		.decrypt	= omap_des_ecb_decrypt,
-+	}
-+},
-+{
-+	.cra_name		= "cbc(des3_ede)",
-+	.cra_driver_name	= "cbc-des3-omap",
-+	.cra_priority		= 100,
-+	.cra_flags		= CRYPTO_ALG_TYPE_ABLKCIPHER |
-+				  CRYPTO_ALG_KERN_DRIVER_ONLY |
-+				  CRYPTO_ALG_ASYNC,
-+	.cra_blocksize		= DES_BLOCK_SIZE,
-+	.cra_ctxsize		= sizeof(struct omap_des_ctx),
-+	.cra_alignmask		= 0,
-+	.cra_type		= &crypto_ablkcipher_type,
-+	.cra_module		= THIS_MODULE,
-+	.cra_init		= omap_des_cra_init,
-+	.cra_exit		= omap_des_cra_exit,
-+	.cra_u.ablkcipher = {
-+		.min_keysize	= 3*DES_KEY_SIZE,
-+		.max_keysize	= 3*DES_KEY_SIZE,
-+		.ivsize		= DES_BLOCK_SIZE,
-+		.setkey		= omap_des_setkey,
-+		.encrypt	= omap_des_cbc_encrypt,
- 		.decrypt	= omap_des_cbc_decrypt,
- 	}
- }

+ 0 - 26
target/linux/omap/patches-3.12/797-ARM_dts_omap4-panda-es_Do_not_reset_gpio1.patch

@@ -1,26 +0,0 @@
-From c1bac171c4f203101611110869bd2511c8153974 Mon Sep 17 00:00:00 2001
-From: Nishanth Menon <[email protected]>
-Date: Thu, 10 Oct 2013 16:44:41 +0000
-Subject: ARM: dts: omap4-panda-es: Do not reset gpio1
-
-Do not reset GPIO1 at boot-up because GPIO 7 in GPIO1 block is used on
-OMAP4460 PandaBoard-ES to select voltage register in TPS62361 which
-supplies VDD_MPU.
-
-Without this, OMAP4460 PandaBoard-ES boards fail to boot-up because
-MPU voltage switches over to VSET0 voltage value (boot voltage) which
-is not sufficient to operate the device at OPP100.
-
-Signed-off-by: Nishanth Menon <[email protected]>
-Signed-off-by: Benoit Cousson <[email protected]>
----
---- a/arch/arm/boot/dts/omap4-panda-es.dts
-+++ b/arch/arm/boot/dts/omap4-panda-es.dts
-@@ -62,3 +62,7 @@
- 		gpios = <&gpio1 8 GPIO_ACTIVE_HIGH>;
- 	};
- };
-+
-+&gpio1 {
-+	 ti,no-reset-on-init;
-+};

+ 0 - 40
target/linux/omap/patches-3.12/801-ARM_dts_am33xx_change_usb_ctrl_module_label.patch

@@ -1,40 +0,0 @@
-From e7243b7673a20ac28cfdc78c8862587ea8173a39 Mon Sep 17 00:00:00 2001
-From: Markus Pargmann <[email protected]>
-Date: Mon, 14 Oct 2013 12:49:21 +0000
-Subject: ARM: dts: am33xx, change usb ctrl module label
-
-Control module is not usb specific.
-Changes the label to usb_ctrl_mod.
-
-Signed-off-by: Markus Pargmann <[email protected]>
-Signed-off-by: Benoit Cousson <[email protected]>
----
---- a/arch/arm/boot/dts/am33xx.dtsi
-+++ b/arch/arm/boot/dts/am33xx.dtsi
-@@ -406,7 +406,7 @@
- 			ti,hwmods = "usb_otg_hs";
- 			status = "disabled";
- 
--			ctrl_mod: control@44e10000 {
-+			usb_ctrl_mod: control@44e10000 {
- 				compatible = "ti,am335x-usb-ctrl-module";
- 				reg = <0x44e10620 0x10
- 					0x44e10648 0x4>;
-@@ -419,7 +419,7 @@
- 				reg = <0x47401300 0x100>;
- 				reg-names = "phy";
- 				status = "disabled";
--				ti,ctrl_mod = <&ctrl_mod>;
-+				ti,ctrl_mod = <&usb_ctrl_mod>;
- 			};
- 
- 			usb0: usb@47401000 {
-@@ -467,7 +467,7 @@
- 				reg = <0x47401b00 0x100>;
- 				reg-names = "phy";
- 				status = "disabled";
--				ti,ctrl_mod = <&ctrl_mod>;
-+				ti,ctrl_mod = <&usb_ctrl_mod>;
- 			};
- 
- 			usb1: usb@47401800 {

+ 0 - 36
target/linux/omap/patches-3.12/802-ARM_OMAP3plus_do_not_register_non-dt_OPP_tables_for_device_tree_boot.patch

@@ -1,36 +0,0 @@
-From 92d51856d7405fa55bcf3d6f20d7e97e0bf2656c Mon Sep 17 00:00:00 2001
-From: Nishanth Menon <[email protected]>
-Date: Wed, 16 Oct 2013 15:39:01 +0000
-Subject: ARM: OMAP3+: do not register non-dt OPP tables for device tree boot
-
-OMAP3+ supports both device tree and non-device tree boot.
-Device tree bindings for OMAP3+ is supposed to be added via dts following:
-Documentation/devicetree/bindings/power/opp.txt
-
-Since we now have device tree entries for OMAP3+ cpu OPPs,
-The current code wrongly adds duplicate OPPs. So, dont register OPPs
-when booting using device tree.
-
-Signed-off-by: Nishanth Menon <[email protected]>
-Signed-off-by: Tony Lindgren <[email protected]>
----
---- a/arch/arm/mach-omap2/opp.c
-+++ b/arch/arm/mach-omap2/opp.c
-@@ -17,6 +17,7 @@
-  * GNU General Public License for more details.
-  */
- #include <linux/module.h>
-+#include <linux/of.h>
- #include <linux/opp.h>
- #include <linux/cpu.h>
- 
-@@ -40,6 +41,9 @@ int __init omap_init_opp_table(struct om
- {
- 	int i, r;
- 
-+	if (of_have_populated_dt())
-+		return -EINVAL;
-+
- 	if (!opp_def || !opp_def_size) {
- 		pr_err("%s: invalid params!\n", __func__);
- 		return -EINVAL;

+ 0 - 127
target/linux/omap/patches-3.12/803-ARM_OMAP2plus_add_missing_lateinit_hook_for_calling_pm_late_init.patch

@@ -1,127 +0,0 @@
-From 765e7a067eebf372687048ba0242e27f43cf0d71 Mon Sep 17 00:00:00 2001
-From: Nishanth Menon <[email protected]>
-Date: Wed, 16 Oct 2013 15:39:02 +0000
-Subject: ARM: OMAP2+: add missing lateinit hook for calling pm late init
-
-AM335x, AM43xx, OMAP5 and DRA7 have missing late init hook. Introduce
-SoC specific hook with a call to OMAP2+ generic lateinit hook. This
-allows the generic late initializations such as cpufreq hooks to be
-active.
-
-Based on out-of-tree patches that need to be introduced in
-mainline, this introduction allows us to provide the foundation for
-further SoC specific features as they are developed.
-
-Cc: Benoit Cousson <[email protected]>
-Cc: Kevin Hilman <[email protected]>
-Cc: Paul Walmsley <[email protected]>
-Cc: Tony Lindgren <[email protected]>
-Signed-off-by: Nishanth Menon <[email protected]>
-Signed-off-by: Tony Lindgren <[email protected]>
----
---- a/arch/arm/mach-omap2/board-generic.c
-+++ b/arch/arm/mach-omap2/board-generic.c
-@@ -180,6 +180,7 @@ DT_MACHINE_START(AM33XX_DT, "Generic AM3
- 	.init_irq	= omap_intc_of_init,
- 	.handle_irq	= omap3_intc_handle_irq,
- 	.init_machine	= omap_generic_init,
-+	.init_late	= am33xx_init_late,
- 	.init_time	= omap3_gptimer_timer_init,
- 	.dt_compat	= am33xx_boards_compat,
- 	.restart	= am33xx_restart,
-@@ -219,6 +220,7 @@ DT_MACHINE_START(OMAP5_DT, "Generic OMAP
- 	.init_early	= omap5_init_early,
- 	.init_irq	= omap_gic_of_init,
- 	.init_machine	= omap_generic_init,
-+	.init_late	= omap5_init_late,
- 	.init_time	= omap5_realtime_timer_init,
- 	.dt_compat	= omap5_boards_compat,
- 	.restart	= omap44xx_restart,
-@@ -234,6 +236,7 @@ static const char *am43_boards_compat[]
- DT_MACHINE_START(AM43_DT, "Generic AM43 (Flattened Device Tree)")
- 	.map_io		= am33xx_map_io,
- 	.init_early	= am43xx_init_early,
-+	.init_late	= am43xx_init_late,
- 	.init_irq	= omap_gic_of_init,
- 	.init_machine	= omap_generic_init,
- 	.init_time	= omap3_sync32k_timer_init,
-@@ -252,6 +255,7 @@ DT_MACHINE_START(DRA7XX_DT, "Generic DRA
- 	.smp		= smp_ops(omap4_smp_ops),
- 	.map_io		= omap5_map_io,
- 	.init_early	= dra7xx_init_early,
-+	.init_late	= dra7xx_init_late,
- 	.init_irq	= omap_gic_of_init,
- 	.init_machine	= omap_generic_init,
- 	.init_time	= omap5_realtime_timer_init,
---- a/arch/arm/mach-omap2/common.h
-+++ b/arch/arm/mach-omap2/common.h
-@@ -98,6 +98,7 @@ void am35xx_init_early(void);
- void ti81xx_init_early(void);
- void am33xx_init_early(void);
- void am43xx_init_early(void);
-+void am43xx_init_late(void);
- void omap4430_init_early(void);
- void omap5_init_early(void);
- void omap3_init_late(void);	/* Do not use this one */
-@@ -109,8 +110,11 @@ void omap35xx_init_late(void);
- void omap3630_init_late(void);
- void am35xx_init_late(void);
- void ti81xx_init_late(void);
-+void am33xx_init_late(void);
-+void omap5_init_late(void);
- int omap2_common_pm_late_init(void);
- void dra7xx_init_early(void);
-+void dra7xx_init_late(void);
- 
- #ifdef CONFIG_SOC_BUS
- void omap_soc_device_init(void);
---- a/arch/arm/mach-omap2/io.c
-+++ b/arch/arm/mach-omap2/io.c
-@@ -583,6 +583,11 @@ void __init am33xx_init_early(void)
- 	omap_hwmod_init_postsetup();
- 	omap_clk_init = am33xx_clk_init;
- }
-+
-+void __init am33xx_init_late(void)
-+{
-+	omap_common_late_init();
-+}
- #endif
- 
- #ifdef CONFIG_SOC_AM43XX
-@@ -596,6 +601,11 @@ void __init am43xx_init_early(void)
- 	omap2_set_globals_cm(AM33XX_L4_WK_IO_ADDRESS(AM43XX_PRCM_BASE), NULL);
- 	omap3xxx_check_revision();
- }
-+
-+void __init am43xx_init_late(void)
-+{
-+	omap_common_late_init();
-+}
- #endif
- 
- #ifdef CONFIG_ARCH_OMAP4
-@@ -651,6 +661,11 @@ void __init omap5_init_early(void)
- 	omap54xx_hwmod_init();
- 	omap_hwmod_init_postsetup();
- }
-+
-+void __init omap5_init_late(void)
-+{
-+	omap_common_late_init();
-+}
- #endif
- 
- #ifdef CONFIG_SOC_DRA7XX
-@@ -671,6 +686,11 @@ void __init dra7xx_init_early(void)
- 	dra7xx_hwmod_init();
- 	omap_hwmod_init_postsetup();
- }
-+
-+void __init dra7xx_init_late(void)
-+{
-+	omap_common_late_init();
-+}
- #endif
- 
- 

+ 0 - 46
target/linux/omap/patches-3.12/804-ARM_OMAP3plus_use_cpu0-cpufreq_driver_in_device_tree_supported_boot.patch

@@ -1,46 +0,0 @@
-From 60c5fc86d01154e2a005bf701f495426ebc81f73 Mon Sep 17 00:00:00 2001
-From: Nishanth Menon <[email protected]>
-Date: Wed, 16 Oct 2013 15:39:03 +0000
-Subject: ARM: OMAP3+: use cpu0-cpufreq driver in device tree supported boot
-
-With OMAP3+ and AM33xx supported SoC having defined CPU device tree
-entries with operating-points and clock nodes defined, we can now use
-the SoC generic cpufreq-cpu0 driver by registering appropriate device.
-
-Cc: Benoit Cousson <[email protected]>
-Cc: Kevin Hilman <[email protected]>
-Cc: Paul Walmsley <[email protected]>
-Cc: Tony Lindgren <[email protected]>
-Signed-off-by: Nishanth Menon <[email protected]>
-Signed-off-by: Tony Lindgren <[email protected]>
----
---- a/arch/arm/mach-omap2/pm.c
-+++ b/arch/arm/mach-omap2/pm.c
-@@ -266,7 +266,12 @@ static void __init omap4_init_voltages(v
- 
- static inline void omap_init_cpufreq(void)
- {
--	struct platform_device_info devinfo = { .name = "omap-cpufreq", };
-+	struct platform_device_info devinfo = { };
-+
-+	if (!of_have_populated_dt())
-+		devinfo.name = "omap-cpufreq";
-+	else
-+		devinfo.name = "cpufreq-cpu0";
- 	platform_device_register_full(&devinfo);
- }
- 
-@@ -300,10 +305,11 @@ int __init omap2_common_pm_late_init(voi
- 		/* Smartreflex device init */
- 		omap_devinit_smartreflex();
- 
--		/* cpufreq dummy device instantiation */
--		omap_init_cpufreq();
- 	}
- 
-+	/* cpufreq dummy device instantiation */
-+	omap_init_cpufreq();
-+
- #ifdef CONFIG_SUSPEND
- 	suspend_set_ops(&omap_pm_ops);
- #endif

+ 0 - 78
target/linux/omap/patches-3.12/805-ARM_dts_TWL4030_Add_missing_regulators.patch

@@ -1,78 +0,0 @@
-From b86684d70f1e45cae4a85686e6f78d5db341fa85 Mon Sep 17 00:00:00 2001
-From: Sebastian Reichel <[email protected]>
-Date: Tue, 22 Oct 2013 22:49:37 +0000
-Subject: ARM: dts: TWL4030: Add missing regulators
-
-The twl4030.dtsi is missing some regulators. This patch adds
-the missing ones and orders the regulators alphabetically.
-
-Signed-off-by: Sebastian Reichel <[email protected]>
-Signed-off-by: Benoit Cousson <[email protected]>
----
---- a/arch/arm/boot/dts/twl4030.dtsi
-+++ b/arch/arm/boot/dts/twl4030.dtsi
-@@ -23,6 +23,22 @@
- 		compatible = "ti,twl4030-wdt";
- 	};
- 
-+	vaux1: regulator-vaux1 {
-+		compatible = "ti,twl4030-vaux1";
-+	};
-+
-+	vaux2: regulator-vaux2 {
-+		compatible = "ti,twl4030-vaux2";
-+	};
-+
-+	vaux3: regulator-vaux3 {
-+		compatible = "ti,twl4030-vaux3";
-+	};
-+
-+	vaux4: regulator-vaux4 {
-+		compatible = "ti,twl4030-vaux4";
-+	};
-+
- 	vcc: regulator-vdd1 {
- 		compatible = "ti,twl4030-vdd1";
- 		regulator-min-microvolt = <600000>;
-@@ -35,10 +51,20 @@
- 		regulator-max-microvolt = <1800000>;
- 	};
- 
--	vpll2: regulator-vpll2 {
--		compatible = "ti,twl4030-vpll2";
--		regulator-min-microvolt = <1800000>;
--		regulator-max-microvolt = <1800000>;
-+	vio: regulator-vio {
-+		compatible = "ti,twl4030-vio";
-+	};
-+
-+	vintana1: regulator-vintana1 {
-+		compatible = "ti,twl4030-vintana1";
-+	};
-+
-+	vintana2: regulator-vintana2 {
-+		compatible = "ti,twl4030-vintana2";
-+	};
-+
-+	vintdig: regulator-vintdig {
-+		compatible = "ti,twl4030-vintdig";
- 	};
- 
- 	vmmc1: regulator-vmmc1 {
-@@ -65,6 +91,16 @@
- 		compatible = "ti,twl4030-vusb3v1";
- 	};
- 
-+	vpll1: regulator-vpll1 {
-+		compatible = "ti,twl4030-vpll1";
-+	};
-+
-+	vpll2: regulator-vpll2 {
-+		compatible = "ti,twl4030-vpll2";
-+		regulator-min-microvolt = <1800000>;
-+		regulator-max-microvolt = <1800000>;
-+	};
-+
- 	vsim: regulator-vsim {
- 		compatible = "ti,twl4030-vsim";
- 		regulator-min-microvolt = <1800000>;

+ 0 - 22
target/linux/omap/patches-3.12/806-ARM_dts_TWL4030_Add_power_button_support.patch

@@ -1,22 +0,0 @@
-From a3317d4f2fcd064071bc188cbbc2769dda73e487 Mon Sep 17 00:00:00 2001
-From: Sebastian Reichel <[email protected]>
-Date: Tue, 22 Oct 2013 22:49:43 +0000
-Subject: ARM: dts: TWL4030: Add power button support
-
-Enable support for the power button.
-
-Signed-off-by: Sebastian Reichel <[email protected]>
-Signed-off-by: Benoit Cousson <[email protected]>
----
---- a/arch/arm/boot/dts/twl4030.dtsi
-+++ b/arch/arm/boot/dts/twl4030.dtsi
-@@ -133,4 +133,9 @@
- 		compatible = "ti,twl4030-pwmled";
- 		#pwm-cells = <2>;
- 	};
-+
-+	twl_pwrbutton: pwrbutton {
-+		compatible = "ti,twl4030-pwrbutton";
-+		interrupts = <8>;
-+	};
- };

+ 0 - 26
target/linux/omap/patches-3.12/807-ARM_dts_AM33XX_Add_hwspinlock_node.patch

@@ -1,26 +0,0 @@
-From d4cbe80db468dcfaa058f9f00a332784e5dff316 Mon Sep 17 00:00:00 2001
-From: Suman Anna <[email protected]>
-Date: Thu, 10 Oct 2013 21:15:35 +0000
-Subject: ARM: dts: AM33XX: Add hwspinlock node
-
-Add the hwspinlock device tree node for AM33xx family
-of SoCs.
-
-Signed-off-by: Suman Anna <[email protected]>
-Signed-off-by: Tony Lindgren <[email protected]>
----
---- a/arch/arm/boot/dts/am33xx.dtsi
-+++ b/arch/arm/boot/dts/am33xx.dtsi
-@@ -278,6 +278,12 @@
- 			status = "disabled";
- 		};
- 
-+		hwspinlock: spinlock@480ca000 {
-+			compatible = "ti,omap4-hwspinlock";
-+			reg = <0x480ca000 0x1000>;
-+			ti,hwmods = "spinlock";
-+		};
-+
- 		wdt2: wdt@44e35000 {
- 			compatible = "ti,omap3-wdt";
- 			ti,hwmods = "wd_timer2";

+ 0 - 52
target/linux/omap/patches-3.12/808-ARM_dts_AM33xx_Add_RNG_node.patch

@@ -1,52 +0,0 @@
-From ed845d6b78bf32b396f7f1278eed0b87446934b1 Mon Sep 17 00:00:00 2001
-From: Lokesh Vutla <[email protected]>
-Date: Thu, 29 Aug 2013 12:52:09 +0000
-Subject: ARM: dts: AM33xx: Add RNG node
-
-Add the AM33xx RNG module's device tree data.
-Also add Documentation file describing the data
-for the RNG module.
-
-Signed-off-by: Lokesh Vutla <[email protected]>
-Signed-off-by: Tony Lindgren <[email protected]>
----
---- /dev/null
-+++ b/Documentation/devicetree/bindings/hwrng/omap_rng.txt
-@@ -0,0 +1,22 @@
-+OMAP SoC HWRNG Module
-+
-+Required properties:
-+
-+- compatible : Should contain entries for this and backward compatible
-+  RNG versions:
-+  - "ti,omap2-rng" for OMAP2.
-+  - "ti,omap4-rng" for OMAP4, OMAP5 and AM33XX.
-+  Note that these two versions are incompatible.
-+- ti,hwmods: Name of the hwmod associated with the RNG module
-+- reg : Offset and length of the register set for the module
-+- interrupts : the interrupt number for the RNG module.
-+		Only used for "ti,omap4-rng".
-+
-+Example:
-+/* AM335x */
-+rng: rng@48310000 {
-+	compatible = "ti,omap4-rng";
-+	ti,hwmods = "rng";
-+	reg = <0x48310000 0x2000>;
-+	interrupts = <111>;
-+};
---- a/arch/arm/boot/dts/am33xx.dtsi
-+++ b/arch/arm/boot/dts/am33xx.dtsi
-@@ -770,5 +770,12 @@
- 			dma-names = "tx", "rx";
- 		};
- 
-+		rng: rng@48310000 {
-+			compatible = "ti,omap4-rng";
-+			ti,hwmods = "rng";
-+			reg = <0x48310000 0x2000>;
-+			interrupts = <111>;
-+		};
-+
- 	};
- };

+ 0 - 155
target/linux/omap/patches-3.12/900-wlcore-Add-support-for-DT-platform-data.patch

@@ -1,155 +0,0 @@
-When running with DT, we no longer have a board file that can set up the
-platform data for wlcore. Allow this data to be passed from DT.
-
-Since some platforms use a gpio-irq, add support for passing either the
-irq number or the gpio number. For the latter case, the driver will
-request the gpio and convert it to the irq number. If an irq is
-specified, it'll be used as is.
-
-[Arik - the pdev_data pointer does not belong to us and is freed when
-the device is released. Dereference to our private data first.]
-
-Signed-off-by: Ido Yariv <[email protected]>
-Signed-off-by: Arik Nemtsov <[email protected]>
----
- drivers/net/wireless/ti/wlcore/sdio.c | 71 ++++++++++++++++++++++++++++++++---
- include/linux/wl12xx.h                |  3 +-
- 2 files changed, 67 insertions(+), 7 deletions(-)
-
---- a/drivers/net/wireless/ti/wlcore/sdio.c
-+++ b/drivers/net/wireless/ti/wlcore/sdio.c
-@@ -34,6 +34,7 @@
- #include <linux/wl12xx.h>
- #include <linux/pm_runtime.h>
- #include <linux/printk.h>
-+#include <linux/of.h>
- 
- #include "wlcore.h"
- #include "wl12xx_80211.h"
-@@ -214,6 +215,61 @@ static struct wl1271_if_operations sdio_
- 	.set_block_size = wl1271_sdio_set_block_size,
- };
- 
-+static const struct of_device_id wlcore_of_match[] = {
-+	{
-+		.compatible = "wlcore",
-+	},
-+	{}
-+};
-+MODULE_DEVICE_TABLE(of, wlcore_of_match);
-+
-+static struct wl12xx_platform_data *get_platform_data(struct device *dev)
-+{
-+	struct wl12xx_platform_data *pdata;
-+	struct device_node *np;
-+	u32 gpio;
-+
-+	pdata = wl12xx_get_platform_data();
-+	if (!IS_ERR(pdata))
-+		return kmemdup(pdata, sizeof(*pdata), GFP_KERNEL);
-+
-+	np = of_find_matching_node(NULL, wlcore_of_match);
-+	if (!np) {
-+		dev_err(dev, "No platform data set\n");
-+		return NULL;
-+	}
-+
-+	pdata = kzalloc(sizeof(*pdata), GFP_KERNEL);
-+	if (!pdata) {
-+		dev_err(dev, "Can't allocate platform data\n");
-+		return NULL;
-+	}
-+
-+	if (of_property_read_u32(np, "irq", &pdata->irq)) {
-+		if (!of_property_read_u32(np, "gpio", &gpio) &&
-+		    !gpio_request_one(gpio, GPIOF_IN, "wlcore_irq")) {
-+			pdata->gpio = gpio;
-+			pdata->irq = gpio_to_irq(gpio);
-+		}
-+	}
-+
-+	/* Optional fields */
-+	pdata->use_eeprom = of_property_read_bool(np, "use-eeprom");
-+	of_property_read_u32(np, "board-ref-clock", &pdata->board_ref_clock);
-+	of_property_read_u32(np, "board-tcxo-clock", &pdata->board_tcxo_clock);
-+	of_property_read_u32(np, "platform-quirks", &pdata->platform_quirks);
-+
-+	return pdata;
-+}
-+
-+static void del_platform_data(struct wl12xx_platform_data *pdata)
-+{
-+	if (pdata->gpio)
-+		gpio_free(pdata->gpio);
-+
-+	kfree(pdata);
-+}
-+
- static int wl1271_probe(struct sdio_func *func,
- 				  const struct sdio_device_id *id)
- {
-@@ -248,12 +304,9 @@ static int wl1271_probe(struct sdio_func
- 	/* Use block mode for transferring over one block size of data */
- 	func->card->quirks |= MMC_QUIRK_BLKSZ_FOR_BYTE_MODE;
- 
--	pdev_data->pdata = wl12xx_get_platform_data();
--	if (IS_ERR(pdev_data->pdata)) {
--		ret = PTR_ERR(pdev_data->pdata);
--		dev_err(glue->dev, "missing wlan platform data: %d\n", ret);
-+	pdev_data->pdata = get_platform_data(&func->dev);
-+	if (!(pdev_data->pdata))
- 		goto out_free_glue;
--	}
- 
- 	/* if sdio can keep power while host is suspended, enable wow */
- 	mmcflags = sdio_get_host_pm_caps(func);
-@@ -282,7 +335,7 @@ static int wl1271_probe(struct sdio_func
- 	if (!glue->core) {
- 		dev_err(glue->dev, "can't allocate platform_device");
- 		ret = -ENOMEM;
--		goto out_free_glue;
-+		goto out_free_pdata;
- 	}
- 
- 	glue->core->dev.parent = &func->dev;
-@@ -316,6 +369,9 @@ static int wl1271_probe(struct sdio_func
- out_dev_put:
- 	platform_device_put(glue->core);
- 
-+out_free_pdata:
-+	del_platform_data(pdev_data->pdata);
-+
- out_free_glue:
- 	kfree(glue);
- 
-@@ -329,11 +385,14 @@ out:
- static void wl1271_remove(struct sdio_func *func)
- {
- 	struct wl12xx_sdio_glue *glue = sdio_get_drvdata(func);
-+	struct wlcore_platdev_data *pdev_data = glue->core->dev.platform_data;
-+	struct wl12xx_platform_data *pdata = pdev_data->pdata;
- 
- 	/* Undo decrement done above in wl1271_probe */
- 	pm_runtime_get_noresume(&func->dev);
- 
- 	platform_device_unregister(glue->core);
-+	del_platform_data(pdata);
- 	kfree(glue);
- }
- 
---- a/include/linux/wl12xx.h
-+++ b/include/linux/wl12xx.h
-@@ -51,11 +51,12 @@ enum {
- struct wl12xx_platform_data {
- 	void (*set_power)(bool enable);
- 	/* SDIO only: IRQ number if WLAN_IRQ line is used, 0 for SDIO IRQs */
-+	int gpio;
- 	int irq;
- 	bool use_eeprom;
- 	int board_ref_clock;
- 	int board_tcxo_clock;
--	unsigned long platform_quirks;
-+	u32 platform_quirks;
- 	bool pwr_in_suspend;
- };
- 

+ 0 - 81
target/linux/omap/patches-3.12/920-arm-dts-am335x-evmsk-add-support-for-lcd-panel.patch

@@ -1,81 +0,0 @@
-From 157c4071cb8a588c4e619b69447010a0ee68d844 Mon Sep 17 00:00:00 2001
-From: Darren Etheridge <[email protected]>
-Date: Thu, 17 Oct 2013 14:53:37 -0500
-Subject: [PATCH 568/752] arm: dts: am335x-evmsk: add support for lcd panel
-
-Add the necessary DT entries for probing the LCDC in fbdev and
-setting the correct timings for the NHD-4.3 LCD panel.
----
- arch/arm/boot/dts/am335x-evmsk.dts |   54 ++++++++++++++++++++++++++++++++++++
- 1 file changed, 54 insertions(+)
-
---- a/arch/arm/boot/dts/am335x-evmsk.dts
-+++ b/arch/arm/boot/dts/am335x-evmsk.dts
-@@ -35,6 +35,39 @@
- 		pinctrl-names = "default";
- 		pinctrl-0 = <&gpio_keys_s0 &clkout2_pin>;
- 
-+		lcd_pins_s0: lcd_pins_s0 {
-+			pinctrl-single,pins = <
-+				0x20 0x01	/* gpmc_ad8.lcd_data16, OUTPUT | MODE1 */
-+				0x24 0x01	/* gpmc_ad9.lcd_data17, OUTPUT | MODE1 */
-+				0x28 0x01	/* gpmc_ad10.lcd_data18, OUTPUT | MODE1 */
-+				0x2c 0x01	/* gpmc_ad11.lcd_data19, OUTPUT | MODE1 */
-+				0x30 0x01	/* gpmc_ad12.lcd_data20, OUTPUT | MODE1 */
-+				0x34 0x01	/* gpmc_ad13.lcd_data21, OUTPUT | MODE1 */
-+				0x38 0x01	/* gpmc_ad14.lcd_data22, OUTPUT | MODE1 */
-+				0x3c 0x01	/* gpmc_ad15.lcd_data23, OUTPUT | MODE1 */
-+				0xa0 0x00	/* lcd_data0.lcd_data0, OUTPUT | MODE0 */
-+				0xa4 0x00	/* lcd_data1.lcd_data1, OUTPUT | MODE0 */
-+				0xa8 0x00	/* lcd_data2.lcd_data2, OUTPUT | MODE0 */
-+				0xac 0x00	/* lcd_data3.lcd_data3, OUTPUT | MODE0 */
-+				0xb0 0x00	/* lcd_data4.lcd_data4, OUTPUT | MODE0 */
-+				0xb4 0x00	/* lcd_data5.lcd_data5, OUTPUT | MODE0 */
-+				0xb8 0x00	/* lcd_data6.lcd_data6, OUTPUT | MODE0 */
-+				0xbc 0x00	/* lcd_data7.lcd_data7, OUTPUT | MODE0 */
-+				0xc0 0x00	/* lcd_data8.lcd_data8, OUTPUT | MODE0 */
-+				0xc4 0x00	/* lcd_data9.lcd_data9, OUTPUT | MODE0 */
-+				0xc8 0x00	/* lcd_data10.lcd_data10, OUTPUT | MODE0 */
-+				0xcc 0x00	/* lcd_data11.lcd_data11, OUTPUT | MODE0 */
-+				0xd0 0x00	/* lcd_data12.lcd_data12, OUTPUT | MODE0 */
-+				0xd4 0x00	/* lcd_data13.lcd_data13, OUTPUT | MODE0 */
-+				0xd8 0x00	/* lcd_data14.lcd_data14, OUTPUT | MODE0 */
-+				0xdc 0x00	/* lcd_data15.lcd_data15, OUTPUT | MODE0 */
-+				0xe0 0x00	/* lcd_vsync.lcd_vsync, OUTPUT | MODE0 */
-+				0xe4 0x00	/* lcd_hsync.lcd_hsync, OUTPUT | MODE0 */
-+				0xe8 0x00	/* lcd_pclk.lcd_pclk, OUTPUT | MODE0 */
-+				0xec 0x00	/* lcd_ac_bias_en.lcd_ac_bias_en, OUTPUT | MODE0 */
-+			>;
-+		};
-+
- 		user_leds_s0: user_leds_s0 {
- 			pinctrl-single,pins = <
- 				0x10 (PIN_OUTPUT_PULLDOWN | MUX_MODE7)	/* gpmc_ad4.gpio1_4 */
-@@ -255,6 +288,27 @@
- 			};
- 		};
- 
-+		lcdc: lcdc@4830e000 {
-+			pinctrl-names = "default";
-+			pinctrl-0 = <&lcd_pins_s0>;
-+			status = "okay";
-+			display-timings {
-+				480x272 {
-+					hactive         = <480>;
-+					vactive         = <272>;
-+					hback-porch     = <43>;
-+					hfront-porch    = <8>;
-+					hsync-len       = <4>;
-+					vback-porch     = <12>;
-+					vfront-porch    = <4>;
-+					vsync-len       = <10>;
-+					clock-frequency = <9000000>;
-+					hsync-active    = <0>;
-+					vsync-active    = <0>;
-+				};
-+			};
-+		};
-+
- 		sound {
- 			compatible = "ti,da830-evm-audio";
- 			ti,model = "AM335x-EVMSK";

+ 0 - 32
target/linux/omap/patches-3.12/921-arm-dts-am335x-sk-add-touchscreen-support.patch

@@ -1,32 +0,0 @@
-From 588b7a5db74c02bcf0b3ac57b6391debffbff74c Mon Sep 17 00:00:00 2001
-From: Felipe Balbi <[email protected]>
-Date: Mon, 21 Oct 2013 15:06:54 -0500
-Subject: [PATCH 582/752] arm: dts: am335x sk: add touchscreen support
-
-Add missing nodes for the touchscreen available
-on AM335x EVM SK.
-
-Signed-off-by: Felipe Balbi <[email protected]>
----
- arch/arm/boot/dts/am335x-evmsk.dts |   10 ++++++++++
- 1 file changed, 10 insertions(+)
-
---- a/arch/arm/boot/dts/am335x-evmsk.dts
-+++ b/arch/arm/boot/dts/am335x-evmsk.dts
-@@ -513,6 +513,16 @@
- 	vmmc-supply = <&vmmc_reg>;
- };
- 
-+&tscadc {
-+	status = "okay";
-+	tsc {
-+		ti,wires = <4>;
-+		ti,x-plate-resistance = <200>;
-+		ti,coordinate-readouts = <5>;
-+		ti,wire-config = <0x00 0x11 0x22 0x33>;
-+	};
-+};
-+
- &gpio0 {
- 	ti,no-reset-on-init;
- };

+ 0 - 71
target/linux/omap/patches-3.12/950-am335x-evmsk-wilink-dts.patch

@@ -1,71 +0,0 @@
---- a/arch/arm/boot/dts/am335x-evmsk.dts
-+++ b/arch/arm/boot/dts/am335x-evmsk.dts
-@@ -14,6 +14,7 @@
- /dts-v1/;
- 
- #include "am33xx.dtsi"
-+#include <dt-bindings/interrupt-controller/irq.h>
- #include <dt-bindings/pwm/pwm.h>
- 
- / {
-@@ -200,6 +201,26 @@
- 				0x144 (PIN_INPUT_PULLDOWN | MUX_MODE4) /* rmii1_ref_clk.mcasp1_axr3 */
- 			>;
- 		};
-+
-+		wilink_pins: pinmux_wilink_pins {
-+			pinctrl-single,pins = <
-+				0x74 (PIN_INPUT_PULLUP | MUX_MODE7) /* gpmc_wpn.gpio0_31 */
-+				0x7c (PIN_OUTPUT_PULLUP | MUX_MODE7) /* gpmc_csn0.gpio1_29 */
-+				0x80 (PIN_INPUT_PULLUP | MUX_MODE2) /* gpmc_csn1.mmc1_clk */
-+				0x84 (PIN_INPUT_PULLUP | MUX_MODE2) /* gpmc_csn2.mmc1_cmd */
-+				0x00 (PIN_INPUT_PULLUP | MUX_MODE1) /* gpmc_ad0.mmc1_dat0 */
-+				0x04 (PIN_INPUT_PULLUP | MUX_MODE1) /* gpmc_ad1.mmc1_dat1 */
-+				0x08 (PIN_INPUT_PULLUP | MUX_MODE1) /* gpmc_ad2.mmc1_dat2 */
-+				0x0c (PIN_INPUT_PULLUP | MUX_MODE1) /* gpmc_ad3.mmc1_dat3 */
-+			>;
-+		};
-+	};
-+	
-+	wlan {
-+		compatible = "wlcore";
-+		gpio = <31>;
-+
-+		board-ref-clock = <4>;
- 	};
- 
- 	ocp {
-@@ -335,6 +356,16 @@
- 		regulator-boot-on;
- 	};
- 
-+	vmmc_wl: fixedregulator@2 {
-+		compatible = "regulator-fixed";
-+		regulator-name = "vmmc-wl";
-+		regulator-min-microvolt = <1800000>;
-+		regulator-max-microvolt = <1800000>;
-+		gpio = <&gpio1 29 0>;
-+		startup-delay-us = <70000>;
-+		enable-active-high;
-+	};
-+
- 	leds {
- 		pinctrl-names = "default";
- 		pinctrl-0 = <&user_leds_s0>;
-@@ -535,6 +566,16 @@
- 	status = "okay";
- };
- 
-+&mmc2 {
-+	status = "okay";
-+	vmmc-supply = <&vmmc_wl>;
-+	bus-width = <4>;
-+	pinctrl-names = "default";
-+	pinctrl-0 = <&wilink_pins>;
-+	ti,non-removable;
-+	keep-power-in-suspend;
-+};
-+
- &mcasp1 {
- 		pinctrl-names = "default";
- 		pinctrl-0 = <&mcasp1_pins>;