diff options
author | Felix Fietkau <nbd@openwrt.org> | 2014-09-02 17:00:46 +0000 |
---|---|---|
committer | Felix Fietkau <nbd@openwrt.org> | 2014-09-02 17:00:46 +0000 |
commit | 98af9706175242ad0a39db12777b59c24a01994f (patch) | |
tree | 6bb45bf9fa512cb09260abe9c2227299bdd441b1 /target/linux/omap | |
parent | d032df6d9e5eb8b1b722aa23222f8577e178b95a (diff) | |
download | upstream-98af9706175242ad0a39db12777b59c24a01994f.tar.gz upstream-98af9706175242ad0a39db12777b59c24a01994f.tar.bz2 upstream-98af9706175242ad0a39db12777b59c24a01994f.zip |
omap: remove 3.12 kernel patches
Signed-off-by: Felix Fietkau <nbd@openwrt.org>
git-svn-id: svn://svn.openwrt.org/openwrt/trunk@42401 3c298f89-4303-0410-b956-a3cf2f4a3e73
Diffstat (limited to 'target/linux/omap')
51 files changed, 0 insertions, 4956 deletions
diff --git a/target/linux/omap/patches-3.12/002-ARM-dts-AM33xx-Correct-gpio-interrupt-cells-property.patch b/target/linux/omap/patches-3.12/002-ARM-dts-AM33xx-Correct-gpio-interrupt-cells-property.patch deleted file mode 100644 index 600f16a30f..0000000000 --- a/target/linux/omap/patches-3.12/002-ARM-dts-AM33xx-Correct-gpio-interrupt-cells-property.patch +++ /dev/null @@ -1,57 +0,0 @@ -From 29f3723bf62d46c238dcc5436787a8ad6b25a385 Mon Sep 17 00:00:00 2001 -From: Lars Poeschel <poeschel@lemonage.de> -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 <poeschel@lemonage.de> -Reviewed-by: Javier Martinez Canillas <javier@dowhile0.org> -Acked-by: Mark Rutland <mark.rutland@arm.com> -Signed-off-by: Benoit Cousson <bcousson@baylibre.com> ---- - 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>; - }; diff --git a/target/linux/omap/patches-3.12/0334-video-da8xx-fb-adding-dt-support.patch b/target/linux/omap/patches-3.12/0334-video-da8xx-fb-adding-dt-support.patch deleted file mode 100644 index d54f4d2ce8..0000000000 --- a/target/linux/omap/patches-3.12/0334-video-da8xx-fb-adding-dt-support.patch +++ /dev/null @@ -1,203 +0,0 @@ -From 884d3962ef4787c8cf0b8a7a673531c623d1dff8 Mon Sep 17 00:00:00 2001 -From: Darren Etheridge <detheridge@ti.com> -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 (afzal@ti.com) -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 <prabhakar.csengg@gmail.com> -Signed-off-by: Darren Etheridge <detheridge@ti.com> ---- - .../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), - }, - }; - diff --git a/target/linux/omap/patches-3.12/0343-video-da8xx-fb-Add-API-to-register-wait-for-vsync-ca.patch b/target/linux/omap/patches-3.12/0343-video-da8xx-fb-Add-API-to-register-wait-for-vsync-ca.patch deleted file mode 100644 index 1d3e0f5a24..0000000000 --- a/target/linux/omap/patches-3.12/0343-video-da8xx-fb-Add-API-to-register-wait-for-vsync-ca.patch +++ /dev/null @@ -1,91 +0,0 @@ -From 9a1a810516ae9cb3259b898b6879901c5b44fa90 Mon Sep 17 00:00:00 2001 -From: Prathap M S <msprathap@ti.com> -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 <msprathap@ti.com> ---- - 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 */ - diff --git a/target/linux/omap/patches-3.12/0752-video-da8xx-fb-fix-defect-with-vsync-callback-invoca.patch b/target/linux/omap/patches-3.12/0752-video-da8xx-fb-fix-defect-with-vsync-callback-invoca.patch deleted file mode 100644 index d22c7e0bea..0000000000 --- a/target/linux/omap/patches-3.12/0752-video-da8xx-fb-fix-defect-with-vsync-callback-invoca.patch +++ /dev/null @@ -1,38 +0,0 @@ -From c99bd415829ef29adf71bb1e1b577650f10e93f5 Mon Sep 17 00:00:00 2001 -From: Darren Etheridge <detheridge@ti.com> -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 <detheridge@ti.com> ---- - 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); - } - } - diff --git a/target/linux/omap/patches-3.12/100-ARM-dts-add-AM33XX-EDMA-support.patch b/target/linux/omap/patches-3.12/100-ARM-dts-add-AM33XX-EDMA-support.patch deleted file mode 100644 index 2f2bd31b28..0000000000 --- a/target/linux/omap/patches-3.12/100-ARM-dts-add-AM33XX-EDMA-support.patch +++ /dev/null @@ -1,36 +0,0 @@ -Adds AM33XX EDMA support to the am33xx.dtsi as documented in -Documentation/devicetree/bindings/dma/ti-edma.txt - -[Joel Fernandes <joelf@ti.com>] -Drop DT entries that are non-hardware-description as discussed in [1] - -[1] https://patchwork.kernel.org/patch/2226761/ - -Signed-off-by: Matt Porter <mporter@ti.com> -Signed-off-by: Joel A Fernandes <joelagnel@ti.com> - ---- -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"; diff --git a/target/linux/omap/patches-3.12/101-ARM-dts-add-AM33XX-SPI-DMA-support.patch b/target/linux/omap/patches-3.12/101-ARM-dts-add-AM33XX-SPI-DMA-support.patch deleted file mode 100644 index 693cf5d34b..0000000000 --- a/target/linux/omap/patches-3.12/101-ARM-dts-add-AM33XX-SPI-DMA-support.patch +++ /dev/null @@ -1,35 +0,0 @@ -Adds DMA resources to the AM33XX SPI nodes. - -Signed-off-by: Matt Porter <mporter@ti.com> -Signed-off-by: Joel A Fernandes <joelagnel@ti.com> - ---- -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"; - }; - diff --git a/target/linux/omap/patches-3.12/103-ARM-dts-add-AM33XX-MMC-support-and-documentation.patch b/target/linux/omap/patches-3.12/103-ARM-dts-add-AM33XX-MMC-support-and-documentation.patch deleted file mode 100644 index e0a85b2f4b..0000000000 --- a/target/linux/omap/patches-3.12/103-ARM-dts-add-AM33XX-MMC-support-and-documentation.patch +++ /dev/null @@ -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 <mporter@ti.com> -Acked-by: Tony Lindgren <tony@atomide.com> -Signed-off-by: Joel Fernandes <joelf@ti.com> - ---- -.../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"; diff --git a/target/linux/omap/patches-3.12/200-ARM-OMAP2-hwmod-cleanup-HWMOD_INIT_NO_RESET-usage.patch b/target/linux/omap/patches-3.12/200-ARM-OMAP2-hwmod-cleanup-HWMOD_INIT_NO_RESET-usage.patch deleted file mode 100644 index fa03b76096..0000000000 --- a/target/linux/omap/patches-3.12/200-ARM-OMAP2-hwmod-cleanup-HWMOD_INIT_NO_RESET-usage.patch +++ /dev/null @@ -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 <rnayak@ti.com> - ---- -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 = { diff --git a/target/linux/omap/patches-3.12/201-ARM-dts-omap-Add-new-bindings-for-OMAP.patch b/target/linux/omap/patches-3.12/201-ARM-dts-omap-Add-new-bindings-for-OMAP.patch deleted file mode 100644 index a07b4079f2..0000000000 --- a/target/linux/omap/patches-3.12/201-ARM-dts-omap-Add-new-bindings-for-OMAP.patch +++ /dev/null @@ -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 <rnayak@ti.com> - ---- -.../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>; diff --git a/target/linux/omap/patches-3.12/202-ARM-OMAP2-hwmod-Extract-no-idle-and-no-reset-info-from-DT.patch b/target/linux/omap/patches-3.12/202-ARM-OMAP2-hwmod-Extract-no-idle-and-no-reset-info-from-DT.patch deleted file mode 100644 index f17e18af21..0000000000 --- a/target/linux/omap/patches-3.12/202-ARM-OMAP2-hwmod-Extract-no-idle-and-no-reset-info-from-DT.patch +++ /dev/null @@ -1,85 +0,0 @@ -From f92d9597f781f6a5a39c73dc71604bd8a21c5299 Mon Sep 17 00:00:00 2001 -From: Rajendra Nayak <rnayak@ti.com> -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 <rnayak@ti.com> -[paul@pwsan.com: updated to apply] -Signed-off-by: Paul Walmsley <paul@pwsan.com> - ---- ---- 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; diff --git a/target/linux/omap/patches-3.12/203-ARM-OMAP2-hwmod-Cleanup-usag~RESET-and-HWMOD_INIT_NO_IDLE.patch b/target/linux/omap/patches-3.12/203-ARM-OMAP2-hwmod-Cleanup-usag~RESET-and-HWMOD_INIT_NO_IDLE.patch deleted file mode 100644 index 5158ee2d94..0000000000 --- a/target/linux/omap/patches-3.12/203-ARM-OMAP2-hwmod-Cleanup-usag~RESET-and-HWMOD_INIT_NO_IDLE.patch +++ /dev/null @@ -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 <rnayak@ti.com> - ---- -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 = { diff --git a/target/linux/omap/patches-3.12/204-ARM-dts-AM335x-evmsk-Do-not-reset-gpio0.patch b/target/linux/omap/patches-3.12/204-ARM-dts-AM335x-evmsk-Do-not-reset-gpio0.patch deleted file mode 100644 index 9577a70b6a..0000000000 --- a/target/linux/omap/patches-3.12/204-ARM-dts-AM335x-evmsk-Do-not-reset-gpio0.patch +++ /dev/null @@ -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 <rnayak@ti.com> - ---- -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; -+}; diff --git a/target/linux/omap/patches-3.12/300-ARM-dts-AM33XX-Add-SHAM-data-and-documentation.patch b/target/linux/omap/patches-3.12/300-ARM-dts-AM33XX-Add-SHAM-data-and-documentation.patch deleted file mode 100644 index 0be31813cb..0000000000 --- a/target/linux/omap/patches-3.12/300-ARM-dts-AM33XX-Add-SHAM-data-and-documentation.patch +++ /dev/null @@ -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. - -[joelf@ti.com: Dropped interrupt-parrent property, documentation fixups] -CC: Paul Walmsley <paul@pwsan.com> -Signed-off-by: Mark A. Greer <mgreer@animalcreek.com> -Acked-by: Mark Rutland <mark.rutland@arm.com> - ---- -.../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"; -+ }; - }; - }; diff --git a/target/linux/omap/patches-3.12/301-ARM-dts-AM33XX-Add-AES-data-and-documentation.patch b/target/linux/omap/patches-3.12/301-ARM-dts-AM33XX-Add-AES-data-and-documentation.patch deleted file mode 100644 index d464d31fc6..0000000000 --- a/target/linux/omap/patches-3.12/301-ARM-dts-AM33XX-Add-AES-data-and-documentation.patch +++ /dev/null @@ -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. - -[joelf@ti.com: Dropped interrupt-parent propert, documentation fixups] - -CC: Paul Walmsley <paul@pwsan.com> -Signed-off-by: Mark A. Greer <mgreer@animalcreek.com> - ---- -.../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"; -+ }; - }; - }; diff --git a/target/linux/omap/patches-3.12/302-ARM-dts-AM33XX-Fix-AES-interrupt-number.patch b/target/linux/omap/patches-3.12/302-ARM-dts-AM33XX-Fix-AES-interrupt-number.patch deleted file mode 100644 index bb93954484..0000000000 --- a/target/linux/omap/patches-3.12/302-ARM-dts-AM33XX-Fix-AES-interrupt-number.patch +++ /dev/null @@ -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 <joelf@ti.com> - ---- -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"; diff --git a/target/linux/omap/patches-3.12/350-ARM-AM33xx-hwmod-Add-RNG-module-data.patch b/target/linux/omap/patches-3.12/350-ARM-AM33xx-hwmod-Add-RNG-module-data.patch deleted file mode 100644 index 065a781473..0000000000 --- a/target/linux/omap/patches-3.12/350-ARM-AM33xx-hwmod-Add-RNG-module-data.patch +++ /dev/null @@ -1,62 +0,0 @@ -Add RNG hwmod data for AM33xx SoC. - -Signed-off-by: Lokesh Vutla <lokeshvutla@ti.com> - ---- -* 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, - }; - diff --git a/target/linux/omap/patches-3.12/400-ASoC-davinci-evm-Move-sysclk-logic-away-from-evm_hw_.patch b/target/linux/omap/patches-3.12/400-ASoC-davinci-evm-Move-sysclk-logic-away-from-evm_hw_.patch deleted file mode 100644 index af3e939db3..0000000000 --- a/target/linux/omap/patches-3.12/400-ASoC-davinci-evm-Move-sysclk-logic-away-from-evm_hw_.patch +++ /dev/null @@ -1,145 +0,0 @@ -From 13254d51149ce1a0fdbb38fa229c6cc91bcbe6ec Mon Sep 17 00:00:00 2001 -From: Jyri Sarha <jsarha@ti.com> -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 <jsarha@ti.com> ---- - 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; diff --git a/target/linux/omap/patches-3.12/401-ASoC-davinci-evm-Add-device-tree-binding.patch b/target/linux/omap/patches-3.12/401-ASoC-davinci-evm-Add-device-tree-binding.patch deleted file mode 100644 index b90fdb8b22..0000000000 --- a/target/linux/omap/patches-3.12/401-ASoC-davinci-evm-Add-device-tree-binding.patch +++ /dev/null @@ -1,253 +0,0 @@ -From af9ef849e8700327b807361344427a43c38e823a Mon Sep 17 00:00:00 2001 -From: "Hebbar, Gururaja" <gururaja.hebbar@ti.com> -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 <gururaja.hebbar@ti.com> -Signed-off-by: Darren Etheridge <detheridge@ti.com> -Signed-off-by: Jyri Sarha <jsarha@ti.com> ---- - .../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); - } - diff --git a/target/linux/omap/patches-3.12/402-ASoC-davinci-mcasp-Add-DMA-register-locations-to-DT.patch b/target/linux/omap/patches-3.12/402-ASoC-davinci-mcasp-Add-DMA-register-locations-to-DT.patch deleted file mode 100644 index ef7b436f68..0000000000 --- a/target/linux/omap/patches-3.12/402-ASoC-davinci-mcasp-Add-DMA-register-locations-to-DT.patch +++ /dev/null @@ -1,171 +0,0 @@ -From fb2002dbc326d2e408698038b668b19741567a48 Mon Sep 17 00:00:00 2001 -From: Jyri Sarha <jsarha@ti.com> -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 <gururaja.hebbar@ti.com> -Signed-off-by: Darren Etheridge <detheridge@ti.com> -Signed-off-by: Jyri Sarha <jsarha@ti.com> ---- - .../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"); -- diff --git a/target/linux/omap/patches-3.12/403-ASoC-davinci-mcasp-Extract-DMA-channels-directly-fro.patch b/target/linux/omap/patches-3.12/403-ASoC-davinci-mcasp-Extract-DMA-channels-directly-fro.patch deleted file mode 100644 index c3b042edc4..0000000000 --- a/target/linux/omap/patches-3.12/403-ASoC-davinci-mcasp-Extract-DMA-channels-directly-fro.patch +++ /dev/null @@ -1,128 +0,0 @@ -From ad5d3e5a1218a599ec02c81a3bd599acedeea00f Mon Sep 17 00:00:00 2001 -From: Jyri Sarha <jsarha@ti.com> -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 <jsarha@ti.com> ---- - .../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); diff --git a/target/linux/omap/patches-3.12/404-ASoC-davinci-mcasp-Interrupts-property-to-optional-a.patch b/target/linux/omap/patches-3.12/404-ASoC-davinci-mcasp-Interrupts-property-to-optional-a.patch deleted file mode 100644 index 9105822d8f..0000000000 --- a/target/linux/omap/patches-3.12/404-ASoC-davinci-mcasp-Interrupts-property-to-optional-a.patch +++ /dev/null @@ -1,42 +0,0 @@ -From 0ecb275625447180dd615256d0c324a0c0c6e76a Mon Sep 17 00:00:00 2001 -From: Jyri Sarha <jsarha@ti.com> -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 <jsarha@ti.com> ---- - 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>; diff --git a/target/linux/omap/patches-3.12/405-ASoC-davinci-Add-support-for-AM33xx-SoC-Audio.patch b/target/linux/omap/patches-3.12/405-ASoC-davinci-Add-support-for-AM33xx-SoC-Audio.patch deleted file mode 100644 index ddc2b82f22..0000000000 --- a/target/linux/omap/patches-3.12/405-ASoC-davinci-Add-support-for-AM33xx-SoC-Audio.patch +++ /dev/null @@ -1,60 +0,0 @@ -From 8f3e1fa024017a6b3d7fd8c2a75ee6ff5e4127f8 Mon Sep 17 00:00:00 2001 -From: "Hebbar, Gururaja" <gururaja.hebbar@ti.com> -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 <gururaja.hebbar@ti.com> -Signed-off-by: Darren Etheridge <detheridge@ti.com> -Signed-off-by: Jyri Sarha <jsarha@ti.com> ---- - 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 diff --git a/target/linux/omap/patches-3.12/406-ASoC-tlv320aic3x-Add-regulators-to-DT-bindings-docum.patch b/target/linux/omap/patches-3.12/406-ASoC-tlv320aic3x-Add-regulators-to-DT-bindings-docum.patch deleted file mode 100644 index 3372ae4946..0000000000 --- a/target/linux/omap/patches-3.12/406-ASoC-tlv320aic3x-Add-regulators-to-DT-bindings-docum.patch +++ /dev/null @@ -1,33 +0,0 @@ -From 2e8f45c820bc025bac3a5257478f16f73b38d54c Mon Sep 17 00:00:00 2001 -From: Jyri Sarha <jsarha@ti.com> -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 <jsarha@ti.com> ---- - 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 = <®ulator>; -+ IOVDD-supply = <®ulator>; -+ DRVDD-supply = <®ulator>; -+ DVDD-supply = <®ulator>; - }; diff --git a/target/linux/omap/patches-3.12/407-ASoC-tlv320aic3x-Add-codec-pins-to-DT-bindings-docum.patch b/target/linux/omap/patches-3.12/407-ASoC-tlv320aic3x-Add-codec-pins-to-DT-bindings-docum.patch deleted file mode 100644 index 1cadcc5de0..0000000000 --- a/target/linux/omap/patches-3.12/407-ASoC-tlv320aic3x-Add-codec-pins-to-DT-bindings-docum.patch +++ /dev/null @@ -1,41 +0,0 @@ -From 6afd5cb1f92a1965ffa3c0f304f95ab19b49fa84 Mon Sep 17 00:00:00 2001 -From: Jyri Sarha <jsarha@ti.com> -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 <jsarha@ti.com> ---- - .../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 { diff --git a/target/linux/omap/patches-3.12/408-ARM-dts-am33xx-Add-mcasp0-and-mcasp1-device-tree-ent.patch b/target/linux/omap/patches-3.12/408-ARM-dts-am33xx-Add-mcasp0-and-mcasp1-device-tree-ent.patch deleted file mode 100644 index 1dda13af62..0000000000 --- a/target/linux/omap/patches-3.12/408-ARM-dts-am33xx-Add-mcasp0-and-mcasp1-device-tree-ent.patch +++ /dev/null @@ -1,42 +0,0 @@ -From a049ce751e60451b47fa744342db84db44883e57 Mon Sep 17 00:00:00 2001 -From: Pantelis Antoniou <panto@antoniou-consulting.com> -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 <panto@antoniou-consulting.com> -Signed-off-by: Darren Etheridge <detheridge@ti.com> -Signed-off-by: Jyri Sarha <jsarha@ti.com> ---- - 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"; -+ }; -+ - }; - }; diff --git a/target/linux/omap/patches-3.12/409-ARM-dts-am33xx-mcasp-Add-new-dma-register-location-t.patch b/target/linux/omap/patches-3.12/409-ARM-dts-am33xx-mcasp-Add-new-dma-register-location-t.patch deleted file mode 100644 index a555378866..0000000000 --- a/target/linux/omap/patches-3.12/409-ARM-dts-am33xx-mcasp-Add-new-dma-register-location-t.patch +++ /dev/null @@ -1,51 +0,0 @@ -From 15ffa765da3f2427b506472baa72d0f3a90b6be5 Mon Sep 17 00:00:00 2001 -From: Jyri Sarha <jsarha@ti.com> -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 <gururaja.hebbar@ti.com> -Signed-off-by: Darren Etheridge <detheridge@ti.com> -Signed-off-by: Jyri Sarha <jsarha@ti.com> ---- - 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"; - }; - - }; diff --git a/target/linux/omap/patches-3.12/410-ARM-dts-am335x-evm-Add-audio-support-for-am335x-evm.patch b/target/linux/omap/patches-3.12/410-ARM-dts-am335x-evm-Add-audio-support-for-am335x-evm.patch deleted file mode 100644 index e75d0b0c6f..0000000000 --- a/target/linux/omap/patches-3.12/410-ARM-dts-am335x-evm-Add-audio-support-for-am335x-evm.patch +++ /dev/null @@ -1,101 +0,0 @@ -From 2bf66a74b322deebc7c8bba11cab58c18b745608 Mon Sep 17 00:00:00 2001 -From: Darren Etheridge <detheridge@ti.com> -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 <detheridge@ti.com> -Signed-off-by: Peter Ujfalusi <peter.ujfalusi@ti.com> -Signed-off-by: Jyri Sarha <jsarha@ti.com> ---- - 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>; diff --git a/target/linux/omap/patches-3.12/411-ARM-dts-am335x-evm-Remove-blank-lines.patch b/target/linux/omap/patches-3.12/411-ARM-dts-am335x-evm-Remove-blank-lines.patch deleted file mode 100644 index 0c005e4833..0000000000 --- a/target/linux/omap/patches-3.12/411-ARM-dts-am335x-evm-Remove-blank-lines.patch +++ /dev/null @@ -1,30 +0,0 @@ -From 76b54fecdd214b32f568b2f97102fc1ab5745fa1 Mon Sep 17 00:00:00 2001 -From: Peter Ujfalusi <peter.ujfalusi@ti.com> -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 <peter.ujfalusi@ti.com> ---- - 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 { diff --git a/target/linux/omap/patches-3.12/412-ARM-dts-am335x-evm-Clarify-the-audio-codec-node.patch b/target/linux/omap/patches-3.12/412-ARM-dts-am335x-evm-Clarify-the-audio-codec-node.patch deleted file mode 100644 index 23e39ce0d5..0000000000 --- a/target/linux/omap/patches-3.12/412-ARM-dts-am335x-evm-Clarify-the-audio-codec-node.patch +++ /dev/null @@ -1,35 +0,0 @@ -From df3fbecdac2b46b7716c16c185cba357cc55d00a Mon Sep 17 00:00:00 2001 -From: Peter Ujfalusi <peter.ujfalusi@ti.com> -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 <peter.ujfalusi@ti.com> ---- - 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 = diff --git a/target/linux/omap/patches-3.12/413-ARM-dts-am335x-evm-Add-unique-name-for-the-sound-car.patch b/target/linux/omap/patches-3.12/413-ARM-dts-am335x-evm-Add-unique-name-for-the-sound-car.patch deleted file mode 100644 index 6ecbd5fdb8..0000000000 --- a/target/linux/omap/patches-3.12/413-ARM-dts-am335x-evm-Add-unique-name-for-the-sound-car.patch +++ /dev/null @@ -1,27 +0,0 @@ -From d4b7ebbadccb4632ad16f07a19cee57aa7b73cdb Mon Sep 17 00:00:00 2001 -From: Peter Ujfalusi <peter.ujfalusi@ti.com> -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 <peter.ujfalusi@ti.com> ---- - 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>; diff --git a/target/linux/omap/patches-3.12/414-ARM-dts-am335x-evmsk-Audio-support.patch b/target/linux/omap/patches-3.12/414-ARM-dts-am335x-evmsk-Audio-support.patch deleted file mode 100644 index d562731c22..0000000000 --- a/target/linux/omap/patches-3.12/414-ARM-dts-am335x-evmsk-Audio-support.patch +++ /dev/null @@ -1,95 +0,0 @@ -From d4c71e652f457077eac1ad83a9e32d3f11fc99b2 Mon Sep 17 00:00:00 2001 -From: Peter Ujfalusi <peter.ujfalusi@ti.com> -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 <peter.ujfalusi@ti.com> ---- - 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>; -+}; diff --git a/target/linux/omap/patches-3.12/415-ASoC-davinci-mcasp-Remove-redundant-num-serializer-D.patch b/target/linux/omap/patches-3.12/415-ASoC-davinci-mcasp-Remove-redundant-num-serializer-D.patch deleted file mode 100644 index 0421b9008a..0000000000 --- a/target/linux/omap/patches-3.12/415-ASoC-davinci-mcasp-Remove-redundant-num-serializer-D.patch +++ /dev/null @@ -1,90 +0,0 @@ -From fdb8d3521ecae71865df66a84a1cbe13f7daa6f5 Mon Sep 17 00:00:00 2001 -From: Peter Ujfalusi <peter.ujfalusi@ti.com> -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 <peter.ujfalusi@ti.com> ---- - .../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; - } - diff --git a/target/linux/omap/patches-3.12/416-ARM-dts-am335x-evm-Remove-num-serializer-property-fo.patch b/target/linux/omap/patches-3.12/416-ARM-dts-am335x-evm-Remove-num-serializer-property-fo.patch deleted file mode 100644 index 45fb24a1d4..0000000000 --- a/target/linux/omap/patches-3.12/416-ARM-dts-am335x-evm-Remove-num-serializer-property-fo.patch +++ /dev/null @@ -1,24 +0,0 @@ -From 7fd70076a17c2a5b1b4bac0175a25e5d04075e43 Mon Sep 17 00:00:00 2001 -From: Peter Ujfalusi <peter.ujfalusi@ti.com> -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 <peter.ujfalusi@ti.com> ---- - 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 diff --git a/target/linux/omap/patches-3.12/417-ARM-dts-am335x-evmsk-Remove-num-serializer-property.patch b/target/linux/omap/patches-3.12/417-ARM-dts-am335x-evmsk-Remove-num-serializer-property.patch deleted file mode 100644 index 144a55fb87..0000000000 --- a/target/linux/omap/patches-3.12/417-ARM-dts-am335x-evmsk-Remove-num-serializer-property.patch +++ /dev/null @@ -1,24 +0,0 @@ -From 97977a1534ef27247acc9549f5433ef288f208eb Mon Sep 17 00:00:00 2001 -From: Peter Ujfalusi <peter.ujfalusi@ti.com> -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 <peter.ujfalusi@ti.com> ---- - 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 diff --git a/target/linux/omap/patches-3.12/500-ARM-dts-AM33XX-Add-LCDC-info-into-am335x-evm.patch b/target/linux/omap/patches-3.12/500-ARM-dts-AM33XX-Add-LCDC-info-into-am335x-evm.patch deleted file mode 100644 index 1eb8d2e8af..0000000000 --- a/target/linux/omap/patches-3.12/500-ARM-dts-AM33XX-Add-LCDC-info-into-am335x-evm.patch +++ /dev/null @@ -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>; diff --git a/target/linux/omap/patches-3.12/600-crypto-omap-des-Add-omap-des-driver-for-OMAP4-AM43xx.patch b/target/linux/omap/patches-3.12/600-crypto-omap-des-Add-omap-des-driver-for-OMAP4-AM43xx.patch deleted file mode 100644 index e78b215574..0000000000 --- a/target/linux/omap/patches-3.12/600-crypto-omap-des-Add-omap-des-driver-for-OMAP4-AM43xx.patch +++ /dev/null @@ -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 <joelf@ti.com> -X-Patchwork-Id: 2851675 -Message-Id: <1377818873-21174-2-git-send-email-joelf@ti.com> -To: Herbert Xu <herbert@gondor.hengli.com.au>, "David S. Miller" - <davem@davemloft.net>, Mark Greer <mgreer@animalcreek.com>, Tony Lindgren - <tony@atomide.com>, Lokesh Vutla <lokeshvutla@ti.com> -Cc: Joel Fernandes <joelf@ti.com>, - Linux OMAP List <linux-omap@vger.kernel.org>, - Linux Kernel Mailing List <linux-kernel@vger.kernel.org>, - Linux ARM Kernel List <linux-arm-kernel@lists.infradead.org>, - Linux Crypto Mailing List <linux-crypto@vger.kernel.org> -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 <joelf@ti.com> - ---- -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 <joelf@ti.com> -+ * -+ * 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 <joelf@ti.com>"); diff --git a/target/linux/omap/patches-3.12/601-crypto-omap-des-Add-config-and-build-options.patch b/target/linux/omap/patches-3.12/601-crypto-omap-des-Add-config-and-build-options.patch deleted file mode 100644 index 8ce6ec8feb..0000000000 --- a/target/linux/omap/patches-3.12/601-crypto-omap-des-Add-config-and-build-options.patch +++ /dev/null @@ -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 <joelf@ti.com> -X-Patchwork-Id: 2851671 -Message-Id: <1377818873-21174-3-git-send-email-joelf@ti.com> -To: Herbert Xu <herbert@gondor.hengli.com.au>, "David S. Miller" - <davem@davemloft.net>, Mark Greer <mgreer@animalcreek.com>, Tony Lindgren - <tony@atomide.com>, Lokesh Vutla <lokeshvutla@ti.com> -Cc: Joel Fernandes <joelf@ti.com>, - Linux OMAP List <linux-omap@vger.kernel.org>, - Linux Kernel Mailing List <linux-kernel@vger.kernel.org>, - Linux ARM Kernel List <linux-arm-kernel@lists.infradead.org>, - Linux Crypto Mailing List <linux-crypto@vger.kernel.org> -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 <joelf@ti.com> - ---- -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 diff --git a/target/linux/omap/patches-3.12/602-crypto-omap-des-Add-triple-DES-des3_ede-support-to-driver.patch b/target/linux/omap/patches-3.12/602-crypto-omap-des-Add-triple-DES-des3_ede-support-to-driver.patch deleted file mode 100644 index 06d96b1dbc..0000000000 --- a/target/linux/omap/patches-3.12/602-crypto-omap-des-Add-triple-DES-des3_ede-support-to-driver.patch +++ /dev/null @@ -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 <joelf@ti.com> -X-Patchwork-Id: 2851679 -Message-Id: <1377818873-21174-4-git-send-email-joelf@ti.com> -To: Herbert Xu <herbert@gondor.hengli.com.au>, "David S. Miller" - <davem@davemloft.net>, Mark Greer <mgreer@animalcreek.com>, Tony Lindgren - <tony@atomide.com>, Lokesh Vutla <lokeshvutla@ti.com> -Cc: Joel Fernandes <joelf@ti.com>, - Linux OMAP List <linux-omap@vger.kernel.org>, - Linux Kernel Mailing List <linux-kernel@vger.kernel.org>, - Linux ARM Kernel List <linux-arm-kernel@lists.infradead.org>, - Linux Crypto Mailing List <linux-crypto@vger.kernel.org> -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 <joelf@ti.com> - ---- -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, - } - } diff --git a/target/linux/omap/patches-3.12/797-ARM_dts_omap4-panda-es_Do_not_reset_gpio1.patch b/target/linux/omap/patches-3.12/797-ARM_dts_omap4-panda-es_Do_not_reset_gpio1.patch deleted file mode 100644 index 0bd80e243a..0000000000 --- a/target/linux/omap/patches-3.12/797-ARM_dts_omap4-panda-es_Do_not_reset_gpio1.patch +++ /dev/null @@ -1,26 +0,0 @@ -From c1bac171c4f203101611110869bd2511c8153974 Mon Sep 17 00:00:00 2001 -From: Nishanth Menon <nm@ti.com> -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 <nm@ti.com> -Signed-off-by: Benoit Cousson <bcousson@baylibre.com> ---- ---- 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; -+}; diff --git a/target/linux/omap/patches-3.12/801-ARM_dts_am33xx_change_usb_ctrl_module_label.patch b/target/linux/omap/patches-3.12/801-ARM_dts_am33xx_change_usb_ctrl_module_label.patch deleted file mode 100644 index 83ecdf96ea..0000000000 --- a/target/linux/omap/patches-3.12/801-ARM_dts_am33xx_change_usb_ctrl_module_label.patch +++ /dev/null @@ -1,40 +0,0 @@ -From e7243b7673a20ac28cfdc78c8862587ea8173a39 Mon Sep 17 00:00:00 2001 -From: Markus Pargmann <mpa@pengutronix.de> -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 <mpa@pengutronix.de> -Signed-off-by: Benoit Cousson <bcousson@baylibre.com> ---- ---- 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 { diff --git a/target/linux/omap/patches-3.12/802-ARM_OMAP3plus_do_not_register_non-dt_OPP_tables_for_device_tree_boot.patch b/target/linux/omap/patches-3.12/802-ARM_OMAP3plus_do_not_register_non-dt_OPP_tables_for_device_tree_boot.patch deleted file mode 100644 index 4dc5f00bab..0000000000 --- a/target/linux/omap/patches-3.12/802-ARM_OMAP3plus_do_not_register_non-dt_OPP_tables_for_device_tree_boot.patch +++ /dev/null @@ -1,36 +0,0 @@ -From 92d51856d7405fa55bcf3d6f20d7e97e0bf2656c Mon Sep 17 00:00:00 2001 -From: Nishanth Menon <nm@ti.com> -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 <nm@ti.com> -Signed-off-by: Tony Lindgren <tony@atomide.com> ---- ---- 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; diff --git a/target/linux/omap/patches-3.12/803-ARM_OMAP2plus_add_missing_lateinit_hook_for_calling_pm_late_init.patch b/target/linux/omap/patches-3.12/803-ARM_OMAP2plus_add_missing_lateinit_hook_for_calling_pm_late_init.patch deleted file mode 100644 index 6db20da93c..0000000000 --- a/target/linux/omap/patches-3.12/803-ARM_OMAP2plus_add_missing_lateinit_hook_for_calling_pm_late_init.patch +++ /dev/null @@ -1,127 +0,0 @@ -From 765e7a067eebf372687048ba0242e27f43cf0d71 Mon Sep 17 00:00:00 2001 -From: Nishanth Menon <nm@ti.com> -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 <bcousson@baylibre.com> -Cc: Kevin Hilman <khilman@deeprootsystems.com> -Cc: Paul Walmsley <paul@pwsan.com> -Cc: Tony Lindgren <tony@atomide.com> -Signed-off-by: Nishanth Menon <nm@ti.com> -Signed-off-by: Tony Lindgren <tony@atomide.com> ---- ---- 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 - - diff --git a/target/linux/omap/patches-3.12/804-ARM_OMAP3plus_use_cpu0-cpufreq_driver_in_device_tree_supported_boot.patch b/target/linux/omap/patches-3.12/804-ARM_OMAP3plus_use_cpu0-cpufreq_driver_in_device_tree_supported_boot.patch deleted file mode 100644 index 27b7854207..0000000000 --- a/target/linux/omap/patches-3.12/804-ARM_OMAP3plus_use_cpu0-cpufreq_driver_in_device_tree_supported_boot.patch +++ /dev/null @@ -1,46 +0,0 @@ -From 60c5fc86d01154e2a005bf701f495426ebc81f73 Mon Sep 17 00:00:00 2001 -From: Nishanth Menon <nm@ti.com> -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 <bcousson@baylibre.com> -Cc: Kevin Hilman <khilman@deeprootsystems.com> -Cc: Paul Walmsley <paul@pwsan.com> -Cc: Tony Lindgren <tony@atomide.com> -Signed-off-by: Nishanth Menon <nm@ti.com> -Signed-off-by: Tony Lindgren <tony@atomide.com> ---- ---- 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 diff --git a/target/linux/omap/patches-3.12/805-ARM_dts_TWL4030_Add_missing_regulators.patch b/target/linux/omap/patches-3.12/805-ARM_dts_TWL4030_Add_missing_regulators.patch deleted file mode 100644 index 5d3736340e..0000000000 --- a/target/linux/omap/patches-3.12/805-ARM_dts_TWL4030_Add_missing_regulators.patch +++ /dev/null @@ -1,78 +0,0 @@ -From b86684d70f1e45cae4a85686e6f78d5db341fa85 Mon Sep 17 00:00:00 2001 -From: Sebastian Reichel <sre@debian.org> -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 <sre@debian.org> -Signed-off-by: Benoit Cousson <bcousson@baylibre.com> ---- ---- 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>; diff --git a/target/linux/omap/patches-3.12/806-ARM_dts_TWL4030_Add_power_button_support.patch b/target/linux/omap/patches-3.12/806-ARM_dts_TWL4030_Add_power_button_support.patch deleted file mode 100644 index d89e4bfe21..0000000000 --- a/target/linux/omap/patches-3.12/806-ARM_dts_TWL4030_Add_power_button_support.patch +++ /dev/null @@ -1,22 +0,0 @@ -From a3317d4f2fcd064071bc188cbbc2769dda73e487 Mon Sep 17 00:00:00 2001 -From: Sebastian Reichel <sre@debian.org> -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 <sre@debian.org> -Signed-off-by: Benoit Cousson <bcousson@baylibre.com> ---- ---- 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>; -+ }; - }; diff --git a/target/linux/omap/patches-3.12/807-ARM_dts_AM33XX_Add_hwspinlock_node.patch b/target/linux/omap/patches-3.12/807-ARM_dts_AM33XX_Add_hwspinlock_node.patch deleted file mode 100644 index 20a660f231..0000000000 --- a/target/linux/omap/patches-3.12/807-ARM_dts_AM33XX_Add_hwspinlock_node.patch +++ /dev/null @@ -1,26 +0,0 @@ -From d4cbe80db468dcfaa058f9f00a332784e5dff316 Mon Sep 17 00:00:00 2001 -From: Suman Anna <s-anna@ti.com> -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 <s-anna@ti.com> -Signed-off-by: Tony Lindgren <tony@atomide.com> ---- ---- 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"; diff --git a/target/linux/omap/patches-3.12/808-ARM_dts_AM33xx_Add_RNG_node.patch b/target/linux/omap/patches-3.12/808-ARM_dts_AM33xx_Add_RNG_node.patch deleted file mode 100644 index a84185b9b7..0000000000 --- a/target/linux/omap/patches-3.12/808-ARM_dts_AM33xx_Add_RNG_node.patch +++ /dev/null @@ -1,52 +0,0 @@ -From ed845d6b78bf32b396f7f1278eed0b87446934b1 Mon Sep 17 00:00:00 2001 -From: Lokesh Vutla <lokeshvutla@ti.com> -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 <lokeshvutla@ti.com> -Signed-off-by: Tony Lindgren <tony@atomide.com> ---- ---- /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>; -+ }; -+ - }; - }; diff --git a/target/linux/omap/patches-3.12/900-wlcore-Add-support-for-DT-platform-data.patch b/target/linux/omap/patches-3.12/900-wlcore-Add-support-for-DT-platform-data.patch deleted file mode 100644 index 750d9e3d68..0000000000 --- a/target/linux/omap/patches-3.12/900-wlcore-Add-support-for-DT-platform-data.patch +++ /dev/null @@ -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 <ido@wizery.com> -Signed-off-by: Arik Nemtsov <arik@wizery.com> ---- - 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; - }; - diff --git a/target/linux/omap/patches-3.12/920-arm-dts-am335x-evmsk-add-support-for-lcd-panel.patch b/target/linux/omap/patches-3.12/920-arm-dts-am335x-evmsk-add-support-for-lcd-panel.patch deleted file mode 100644 index 3ec48a59b4..0000000000 --- a/target/linux/omap/patches-3.12/920-arm-dts-am335x-evmsk-add-support-for-lcd-panel.patch +++ /dev/null @@ -1,81 +0,0 @@ -From 157c4071cb8a588c4e619b69447010a0ee68d844 Mon Sep 17 00:00:00 2001 -From: Darren Etheridge <detheridge@ti.com> -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"; diff --git a/target/linux/omap/patches-3.12/921-arm-dts-am335x-sk-add-touchscreen-support.patch b/target/linux/omap/patches-3.12/921-arm-dts-am335x-sk-add-touchscreen-support.patch deleted file mode 100644 index 225d272bb7..0000000000 --- a/target/linux/omap/patches-3.12/921-arm-dts-am335x-sk-add-touchscreen-support.patch +++ /dev/null @@ -1,32 +0,0 @@ -From 588b7a5db74c02bcf0b3ac57b6391debffbff74c Mon Sep 17 00:00:00 2001 -From: Felipe Balbi <balbi@ti.com> -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 <balbi@ti.com> ---- - 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; - }; diff --git a/target/linux/omap/patches-3.12/950-am335x-evmsk-wilink-dts.patch b/target/linux/omap/patches-3.12/950-am335x-evmsk-wilink-dts.patch deleted file mode 100644 index 933c059281..0000000000 --- a/target/linux/omap/patches-3.12/950-am335x-evmsk-wilink-dts.patch +++ /dev/null @@ -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>; |