diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2012-01-09 17:20:39 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2012-01-09 17:20:39 -0500 |
commit | 57e964e1ae9bd4f699ae1074430bcf81a9a11377 (patch) | |
tree | 8c1fc5199e18a55cece4aa72bbaf2ca909bd1453 | |
parent | 4dee6b64ee7cfef94b47733c6d9fef07f8051c7c (diff) | |
parent | 39fbc76272225fb991ffdfac1e08974506cfa3eb (diff) |
Merge tag 'fixes-non-critical' of git://git.kernel.org/pub/scm/linux/kernel/git/arm/arm-soc
Non-critical bug fixes
Simple bug fixes that were not considered important enough for inclusion
into 3.2.
* tag 'fixes-non-critical' of git://git.kernel.org/pub/scm/linux/kernel/git/arm/arm-soc:
MAINTAINERS: update pxa and mmp
ARM: pxa: Include linux/export.h in balloon3.c
ARM: OMAP4: clock: Add CPU local timer clock node
ARM: OMAP4: hwmod: Don't wait for the idle status if modulemode is not supported
ARM: OMAP: AM3517/3505: fix crash on boot due to incorrect voltagedomain data
ARM: OMAP: hwmod data: fix the panic on Nokia RM-680 during boot
ARM: OMAP2+: DMA: Workaround for invalid destination position
ARM: OMAP2+: DMA: Workaround for invalid source position
-rw-r--r-- | MAINTAINERS | 22 | ||||
-rw-r--r-- | arch/arm/mach-omap2/clock44xx_data.c | 9 | ||||
-rw-r--r-- | arch/arm/mach-omap2/omap_hwmod.c | 98 | ||||
-rw-r--r-- | arch/arm/mach-omap2/omap_hwmod_3xxx_data.c | 14 | ||||
-rw-r--r-- | arch/arm/mach-omap2/voltagedomains3xxx_data.c | 40 | ||||
-rw-r--r-- | arch/arm/mach-pxa/balloon3.c | 1 | ||||
-rw-r--r-- | arch/arm/plat-omap/dma.c | 22 |
7 files changed, 134 insertions, 72 deletions
diff --git a/MAINTAINERS b/MAINTAINERS index 78b078e8e0af..ba6bd97976b0 100644 --- a/MAINTAINERS +++ b/MAINTAINERS | |||
@@ -5297,7 +5297,10 @@ F: drivers/media/video/pvrusb2/ | |||
5297 | PXA2xx/PXA3xx SUPPORT | 5297 | PXA2xx/PXA3xx SUPPORT |
5298 | M: Eric Miao <eric.y.miao@gmail.com> | 5298 | M: Eric Miao <eric.y.miao@gmail.com> |
5299 | M: Russell King <linux@arm.linux.org.uk> | 5299 | M: Russell King <linux@arm.linux.org.uk> |
5300 | M: Haojian Zhuang <haojian.zhuang@marvell.com> | ||
5300 | L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) | 5301 | L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) |
5302 | T: git git://github.com/hzhuang1/linux.git | ||
5303 | T: git git://git.linaro.org/people/ycmiao/pxa-linux.git | ||
5301 | S: Maintained | 5304 | S: Maintained |
5302 | F: arch/arm/mach-pxa/ | 5305 | F: arch/arm/mach-pxa/ |
5303 | F: drivers/pcmcia/pxa2xx* | 5306 | F: drivers/pcmcia/pxa2xx* |
@@ -5307,25 +5310,14 @@ F: include/sound/pxa2xx-lib.h | |||
5307 | F: sound/arm/pxa* | 5310 | F: sound/arm/pxa* |
5308 | F: sound/soc/pxa | 5311 | F: sound/soc/pxa |
5309 | 5312 | ||
5310 | PXA168 SUPPORT | 5313 | MMP SUPPORT |
5311 | M: Eric Miao <eric.y.miao@gmail.com> | ||
5312 | M: Jason Chagas <jason.chagas@marvell.com> | ||
5313 | L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) | ||
5314 | T: git git://git.kernel.org/pub/scm/linux/kernel/git/ycmiao/pxa-linux-2.6.git | ||
5315 | S: Maintained | ||
5316 | |||
5317 | PXA910 SUPPORT | ||
5318 | M: Eric Miao <eric.y.miao@gmail.com> | 5314 | M: Eric Miao <eric.y.miao@gmail.com> |
5319 | L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) | ||
5320 | T: git git://git.kernel.org/pub/scm/linux/kernel/git/ycmiao/pxa-linux-2.6.git | ||
5321 | S: Maintained | ||
5322 | |||
5323 | MMP2 SUPPORT (aka ARMADA610) | ||
5324 | M: Haojian Zhuang <haojian.zhuang@marvell.com> | 5315 | M: Haojian Zhuang <haojian.zhuang@marvell.com> |
5325 | M: Eric Miao <eric.y.miao@gmail.com> | ||
5326 | L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) | 5316 | L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) |
5327 | T: git git://git.kernel.org/pub/scm/linux/kernel/git/ycmiao/pxa-linux-2.6.git | 5317 | T: git git://github.com/hzhuang1/linux.git |
5318 | T: git git://git.linaro.org/people/ycmiao/pxa-linux.git | ||
5328 | S: Maintained | 5319 | S: Maintained |
5320 | F: arch/arm/mach-mmp/ | ||
5329 | 5321 | ||
5330 | PXA MMCI DRIVER | 5322 | PXA MMCI DRIVER |
5331 | S: Orphan | 5323 | S: Orphan |
diff --git a/arch/arm/mach-omap2/clock44xx_data.c b/arch/arm/mach-omap2/clock44xx_data.c index 0798a802497a..730097ee0f23 100644 --- a/arch/arm/mach-omap2/clock44xx_data.c +++ b/arch/arm/mach-omap2/clock44xx_data.c | |||
@@ -1206,6 +1206,14 @@ static const struct clksel ocp_abe_iclk_div[] = { | |||
1206 | { .parent = NULL }, | 1206 | { .parent = NULL }, |
1207 | }; | 1207 | }; |
1208 | 1208 | ||
1209 | static struct clk mpu_periphclk = { | ||
1210 | .name = "mpu_periphclk", | ||
1211 | .parent = &dpll_mpu_ck, | ||
1212 | .ops = &clkops_null, | ||
1213 | .fixed_div = 2, | ||
1214 | .recalc = &omap_fixed_divisor_recalc, | ||
1215 | }; | ||
1216 | |||
1209 | static struct clk ocp_abe_iclk = { | 1217 | static struct clk ocp_abe_iclk = { |
1210 | .name = "ocp_abe_iclk", | 1218 | .name = "ocp_abe_iclk", |
1211 | .parent = &aess_fclk, | 1219 | .parent = &aess_fclk, |
@@ -3189,6 +3197,7 @@ static struct omap_clk omap44xx_clks[] = { | |||
3189 | CLK(NULL, "l4_div_ck", &l4_div_ck, CK_443X), | 3197 | CLK(NULL, "l4_div_ck", &l4_div_ck, CK_443X), |
3190 | CLK(NULL, "lp_clk_div_ck", &lp_clk_div_ck, CK_443X), | 3198 | CLK(NULL, "lp_clk_div_ck", &lp_clk_div_ck, CK_443X), |
3191 | CLK(NULL, "l4_wkup_clk_mux_ck", &l4_wkup_clk_mux_ck, CK_443X), | 3199 | CLK(NULL, "l4_wkup_clk_mux_ck", &l4_wkup_clk_mux_ck, CK_443X), |
3200 | CLK("smp_twd", NULL, &mpu_periphclk, CK_443X), | ||
3192 | CLK(NULL, "ocp_abe_iclk", &ocp_abe_iclk, CK_443X), | 3201 | CLK(NULL, "ocp_abe_iclk", &ocp_abe_iclk, CK_443X), |
3193 | CLK(NULL, "per_abe_24m_fclk", &per_abe_24m_fclk, CK_443X), | 3202 | CLK(NULL, "per_abe_24m_fclk", &per_abe_24m_fclk, CK_443X), |
3194 | CLK(NULL, "per_abe_nc_fclk", &per_abe_nc_fclk, CK_443X), | 3203 | CLK(NULL, "per_abe_nc_fclk", &per_abe_nc_fclk, CK_443X), |
diff --git a/arch/arm/mach-omap2/omap_hwmod.c b/arch/arm/mach-omap2/omap_hwmod.c index 529142aff766..373d1f15c4eb 100644 --- a/arch/arm/mach-omap2/omap_hwmod.c +++ b/arch/arm/mach-omap2/omap_hwmod.c | |||
@@ -706,27 +706,65 @@ static void _enable_module(struct omap_hwmod *oh) | |||
706 | } | 706 | } |
707 | 707 | ||
708 | /** | 708 | /** |
709 | * _disable_module - enable CLKCTRL modulemode on OMAP4 | 709 | * _omap4_wait_target_disable - wait for a module to be disabled on OMAP4 |
710 | * @oh: struct omap_hwmod * | ||
711 | * | ||
712 | * Wait for a module @oh to enter slave idle. Returns 0 if the module | ||
713 | * does not have an IDLEST bit or if the module successfully enters | ||
714 | * slave idle; otherwise, pass along the return value of the | ||
715 | * appropriate *_cm*_wait_module_idle() function. | ||
716 | */ | ||
717 | static int _omap4_wait_target_disable(struct omap_hwmod *oh) | ||
718 | { | ||
719 | if (!cpu_is_omap44xx()) | ||
720 | return 0; | ||
721 | |||
722 | if (!oh) | ||
723 | return -EINVAL; | ||
724 | |||
725 | if (oh->_int_flags & _HWMOD_NO_MPU_PORT) | ||
726 | return 0; | ||
727 | |||
728 | if (oh->flags & HWMOD_NO_IDLEST) | ||
729 | return 0; | ||
730 | |||
731 | return omap4_cminst_wait_module_idle(oh->clkdm->prcm_partition, | ||
732 | oh->clkdm->cm_inst, | ||
733 | oh->clkdm->clkdm_offs, | ||
734 | oh->prcm.omap4.clkctrl_offs); | ||
735 | } | ||
736 | |||
737 | /** | ||
738 | * _omap4_disable_module - enable CLKCTRL modulemode on OMAP4 | ||
710 | * @oh: struct omap_hwmod * | 739 | * @oh: struct omap_hwmod * |
711 | * | 740 | * |
712 | * Disable the PRCM module mode related to the hwmod @oh. | 741 | * Disable the PRCM module mode related to the hwmod @oh. |
713 | * No return value. | 742 | * Return EINVAL if the modulemode is not supported and 0 in case of success. |
714 | */ | 743 | */ |
715 | static void _disable_module(struct omap_hwmod *oh) | 744 | static int _omap4_disable_module(struct omap_hwmod *oh) |
716 | { | 745 | { |
746 | int v; | ||
747 | |||
717 | /* The module mode does not exist prior OMAP4 */ | 748 | /* The module mode does not exist prior OMAP4 */ |
718 | if (cpu_is_omap24xx() || cpu_is_omap34xx()) | 749 | if (!cpu_is_omap44xx()) |
719 | return; | 750 | return -EINVAL; |
720 | 751 | ||
721 | if (!oh->clkdm || !oh->prcm.omap4.modulemode) | 752 | if (!oh->clkdm || !oh->prcm.omap4.modulemode) |
722 | return; | 753 | return -EINVAL; |
723 | 754 | ||
724 | pr_debug("omap_hwmod: %s: _disable_module\n", oh->name); | 755 | pr_debug("omap_hwmod: %s: %s\n", oh->name, __func__); |
725 | 756 | ||
726 | omap4_cminst_module_disable(oh->clkdm->prcm_partition, | 757 | omap4_cminst_module_disable(oh->clkdm->prcm_partition, |
727 | oh->clkdm->cm_inst, | 758 | oh->clkdm->cm_inst, |
728 | oh->clkdm->clkdm_offs, | 759 | oh->clkdm->clkdm_offs, |
729 | oh->prcm.omap4.clkctrl_offs); | 760 | oh->prcm.omap4.clkctrl_offs); |
761 | |||
762 | v = _omap4_wait_target_disable(oh); | ||
763 | if (v) | ||
764 | pr_warn("omap_hwmod: %s: _wait_target_disable failed\n", | ||
765 | oh->name); | ||
766 | |||
767 | return 0; | ||
730 | } | 768 | } |
731 | 769 | ||
732 | /** | 770 | /** |
@@ -1153,36 +1191,6 @@ static int _wait_target_ready(struct omap_hwmod *oh) | |||
1153 | } | 1191 | } |
1154 | 1192 | ||
1155 | /** | 1193 | /** |
1156 | * _wait_target_disable - wait for a module to be disabled | ||
1157 | * @oh: struct omap_hwmod * | ||
1158 | * | ||
1159 | * Wait for a module @oh to enter slave idle. Returns 0 if the module | ||
1160 | * does not have an IDLEST bit or if the module successfully enters | ||
1161 | * slave idle; otherwise, pass along the return value of the | ||
1162 | * appropriate *_cm*_wait_module_idle() function. | ||
1163 | */ | ||
1164 | static int _wait_target_disable(struct omap_hwmod *oh) | ||
1165 | { | ||
1166 | /* TODO: For now just handle OMAP4+ */ | ||
1167 | if (cpu_is_omap24xx() || cpu_is_omap34xx()) | ||
1168 | return 0; | ||
1169 | |||
1170 | if (!oh) | ||
1171 | return -EINVAL; | ||
1172 | |||
1173 | if (oh->_int_flags & _HWMOD_NO_MPU_PORT) | ||
1174 | return 0; | ||
1175 | |||
1176 | if (oh->flags & HWMOD_NO_IDLEST) | ||
1177 | return 0; | ||
1178 | |||
1179 | return omap4_cminst_wait_module_idle(oh->clkdm->prcm_partition, | ||
1180 | oh->clkdm->cm_inst, | ||
1181 | oh->clkdm->clkdm_offs, | ||
1182 | oh->prcm.omap4.clkctrl_offs); | ||
1183 | } | ||
1184 | |||
1185 | /** | ||
1186 | * _lookup_hardreset - fill register bit info for this hwmod/reset line | 1194 | * _lookup_hardreset - fill register bit info for this hwmod/reset line |
1187 | * @oh: struct omap_hwmod * | 1195 | * @oh: struct omap_hwmod * |
1188 | * @name: name of the reset line in the context of this hwmod | 1196 | * @name: name of the reset line in the context of this hwmod |
@@ -1524,8 +1532,6 @@ static int _enable(struct omap_hwmod *oh) | |||
1524 | */ | 1532 | */ |
1525 | static int _idle(struct omap_hwmod *oh) | 1533 | static int _idle(struct omap_hwmod *oh) |
1526 | { | 1534 | { |
1527 | int ret; | ||
1528 | |||
1529 | pr_debug("omap_hwmod: %s: idling\n", oh->name); | 1535 | pr_debug("omap_hwmod: %s: idling\n", oh->name); |
1530 | 1536 | ||
1531 | if (oh->_state != _HWMOD_STATE_ENABLED) { | 1537 | if (oh->_state != _HWMOD_STATE_ENABLED) { |
@@ -1537,11 +1543,9 @@ static int _idle(struct omap_hwmod *oh) | |||
1537 | if (oh->class->sysc) | 1543 | if (oh->class->sysc) |
1538 | _idle_sysc(oh); | 1544 | _idle_sysc(oh); |
1539 | _del_initiator_dep(oh, mpu_oh); | 1545 | _del_initiator_dep(oh, mpu_oh); |
1540 | _disable_module(oh); | 1546 | |
1541 | ret = _wait_target_disable(oh); | 1547 | _omap4_disable_module(oh); |
1542 | if (ret) | 1548 | |
1543 | pr_warn("omap_hwmod: %s: _wait_target_disable failed\n", | ||
1544 | oh->name); | ||
1545 | /* | 1549 | /* |
1546 | * The module must be in idle mode before disabling any parents | 1550 | * The module must be in idle mode before disabling any parents |
1547 | * clocks. Otherwise, the parent clock might be disabled before | 1551 | * clocks. Otherwise, the parent clock might be disabled before |
@@ -1642,11 +1646,7 @@ static int _shutdown(struct omap_hwmod *oh) | |||
1642 | if (oh->_state == _HWMOD_STATE_ENABLED) { | 1646 | if (oh->_state == _HWMOD_STATE_ENABLED) { |
1643 | _del_initiator_dep(oh, mpu_oh); | 1647 | _del_initiator_dep(oh, mpu_oh); |
1644 | /* XXX what about the other system initiators here? dma, dsp */ | 1648 | /* XXX what about the other system initiators here? dma, dsp */ |
1645 | _disable_module(oh); | 1649 | _omap4_disable_module(oh); |
1646 | ret = _wait_target_disable(oh); | ||
1647 | if (ret) | ||
1648 | pr_warn("omap_hwmod: %s: _wait_target_disable failed\n", | ||
1649 | oh->name); | ||
1650 | _disable_clocks(oh); | 1650 | _disable_clocks(oh); |
1651 | if (oh->clkdm) | 1651 | if (oh->clkdm) |
1652 | clkdm_hwmod_disable(oh->clkdm, oh); | 1652 | clkdm_hwmod_disable(oh->clkdm, oh); |
diff --git a/arch/arm/mach-omap2/omap_hwmod_3xxx_data.c b/arch/arm/mach-omap2/omap_hwmod_3xxx_data.c index eef43e2e163e..126cb49c0de7 100644 --- a/arch/arm/mach-omap2/omap_hwmod_3xxx_data.c +++ b/arch/arm/mach-omap2/omap_hwmod_3xxx_data.c | |||
@@ -3198,7 +3198,6 @@ static __initdata struct omap_hwmod *omap3xxx_hwmods[] = { | |||
3198 | &omap3xxx_timer9_hwmod, | 3198 | &omap3xxx_timer9_hwmod, |
3199 | &omap3xxx_timer10_hwmod, | 3199 | &omap3xxx_timer10_hwmod, |
3200 | &omap3xxx_timer11_hwmod, | 3200 | &omap3xxx_timer11_hwmod, |
3201 | &omap3xxx_timer12_hwmod, | ||
3202 | 3201 | ||
3203 | &omap3xxx_wd_timer2_hwmod, | 3202 | &omap3xxx_wd_timer2_hwmod, |
3204 | &omap3xxx_uart1_hwmod, | 3203 | &omap3xxx_uart1_hwmod, |
@@ -3245,6 +3244,12 @@ static __initdata struct omap_hwmod *omap3xxx_hwmods[] = { | |||
3245 | NULL, | 3244 | NULL, |
3246 | }; | 3245 | }; |
3247 | 3246 | ||
3247 | /* GP-only hwmods */ | ||
3248 | static __initdata struct omap_hwmod *omap3xxx_gp_hwmods[] = { | ||
3249 | &omap3xxx_timer12_hwmod, | ||
3250 | NULL | ||
3251 | }; | ||
3252 | |||
3248 | /* 3430ES1-only hwmods */ | 3253 | /* 3430ES1-only hwmods */ |
3249 | static __initdata struct omap_hwmod *omap3430es1_hwmods[] = { | 3254 | static __initdata struct omap_hwmod *omap3430es1_hwmods[] = { |
3250 | &omap3430es1_dss_core_hwmod, | 3255 | &omap3430es1_dss_core_hwmod, |
@@ -3296,6 +3301,13 @@ int __init omap3xxx_hwmod_init(void) | |||
3296 | if (r < 0) | 3301 | if (r < 0) |
3297 | return r; | 3302 | return r; |
3298 | 3303 | ||
3304 | /* Register GP-only hwmods. */ | ||
3305 | if (omap_type() == OMAP2_DEVICE_TYPE_GP) { | ||
3306 | r = omap_hwmod_register(omap3xxx_gp_hwmods); | ||
3307 | if (r < 0) | ||
3308 | return r; | ||
3309 | } | ||
3310 | |||
3299 | rev = omap_rev(); | 3311 | rev = omap_rev(); |
3300 | 3312 | ||
3301 | /* | 3313 | /* |
diff --git a/arch/arm/mach-omap2/voltagedomains3xxx_data.c b/arch/arm/mach-omap2/voltagedomains3xxx_data.c index 474559d5b072..c005e2f5e383 100644 --- a/arch/arm/mach-omap2/voltagedomains3xxx_data.c +++ b/arch/arm/mach-omap2/voltagedomains3xxx_data.c | |||
@@ -31,6 +31,14 @@ | |||
31 | * VDD data | 31 | * VDD data |
32 | */ | 32 | */ |
33 | 33 | ||
34 | /* OMAP3-common voltagedomain data */ | ||
35 | |||
36 | static struct voltagedomain omap3_voltdm_wkup = { | ||
37 | .name = "wakeup", | ||
38 | }; | ||
39 | |||
40 | /* 34xx/36xx voltagedomain data */ | ||
41 | |||
34 | static const struct omap_vfsm_instance omap3_vdd1_vfsm = { | 42 | static const struct omap_vfsm_instance omap3_vdd1_vfsm = { |
35 | .voltsetup_reg = OMAP3_PRM_VOLTSETUP1_OFFSET, | 43 | .voltsetup_reg = OMAP3_PRM_VOLTSETUP1_OFFSET, |
36 | .voltsetup_mask = OMAP3430_SETUP_TIME1_MASK, | 44 | .voltsetup_mask = OMAP3430_SETUP_TIME1_MASK, |
@@ -63,10 +71,6 @@ static struct voltagedomain omap3_voltdm_core = { | |||
63 | .vp = &omap3_vp_core, | 71 | .vp = &omap3_vp_core, |
64 | }; | 72 | }; |
65 | 73 | ||
66 | static struct voltagedomain omap3_voltdm_wkup = { | ||
67 | .name = "wakeup", | ||
68 | }; | ||
69 | |||
70 | static struct voltagedomain *voltagedomains_omap3[] __initdata = { | 74 | static struct voltagedomain *voltagedomains_omap3[] __initdata = { |
71 | &omap3_voltdm_mpu, | 75 | &omap3_voltdm_mpu, |
72 | &omap3_voltdm_core, | 76 | &omap3_voltdm_core, |
@@ -74,11 +78,30 @@ static struct voltagedomain *voltagedomains_omap3[] __initdata = { | |||
74 | NULL, | 78 | NULL, |
75 | }; | 79 | }; |
76 | 80 | ||
81 | /* AM35xx voltagedomain data */ | ||
82 | |||
83 | static struct voltagedomain am35xx_voltdm_mpu = { | ||
84 | .name = "mpu_iva", | ||
85 | }; | ||
86 | |||
87 | static struct voltagedomain am35xx_voltdm_core = { | ||
88 | .name = "core", | ||
89 | }; | ||
90 | |||
91 | static struct voltagedomain *voltagedomains_am35xx[] __initdata = { | ||
92 | &am35xx_voltdm_mpu, | ||
93 | &am35xx_voltdm_core, | ||
94 | &omap3_voltdm_wkup, | ||
95 | NULL, | ||
96 | }; | ||
97 | |||
98 | |||
77 | static const char *sys_clk_name __initdata = "sys_ck"; | 99 | static const char *sys_clk_name __initdata = "sys_ck"; |
78 | 100 | ||
79 | void __init omap3xxx_voltagedomains_init(void) | 101 | void __init omap3xxx_voltagedomains_init(void) |
80 | { | 102 | { |
81 | struct voltagedomain *voltdm; | 103 | struct voltagedomain *voltdm; |
104 | struct voltagedomain **voltdms; | ||
82 | int i; | 105 | int i; |
83 | 106 | ||
84 | /* | 107 | /* |
@@ -93,8 +116,13 @@ void __init omap3xxx_voltagedomains_init(void) | |||
93 | omap3_voltdm_core.volt_data = omap34xx_vddcore_volt_data; | 116 | omap3_voltdm_core.volt_data = omap34xx_vddcore_volt_data; |
94 | } | 117 | } |
95 | 118 | ||
96 | for (i = 0; voltdm = voltagedomains_omap3[i], voltdm; i++) | 119 | if (cpu_is_omap3517() || cpu_is_omap3505()) |
120 | voltdms = voltagedomains_am35xx; | ||
121 | else | ||
122 | voltdms = voltagedomains_omap3; | ||
123 | |||
124 | for (i = 0; voltdm = voltdms[i], voltdm; i++) | ||
97 | voltdm->sys_clk.name = sys_clk_name; | 125 | voltdm->sys_clk.name = sys_clk_name; |
98 | 126 | ||
99 | voltdm_init(voltagedomains_omap3); | 127 | voltdm_init(voltdms); |
100 | }; | 128 | }; |
diff --git a/arch/arm/mach-pxa/balloon3.c b/arch/arm/mach-pxa/balloon3.c index 82514f5c38f1..a34de9a0d5e5 100644 --- a/arch/arm/mach-pxa/balloon3.c +++ b/arch/arm/mach-pxa/balloon3.c | |||
@@ -13,6 +13,7 @@ | |||
13 | * published by the Free Software Foundation. | 13 | * published by the Free Software Foundation. |
14 | */ | 14 | */ |
15 | 15 | ||
16 | #include <linux/export.h> | ||
16 | #include <linux/init.h> | 17 | #include <linux/init.h> |
17 | #include <linux/platform_device.h> | 18 | #include <linux/platform_device.h> |
18 | #include <linux/interrupt.h> | 19 | #include <linux/interrupt.h> |
diff --git a/arch/arm/plat-omap/dma.c b/arch/arm/plat-omap/dma.c index c22217c2ee5f..002fb4d96bbc 100644 --- a/arch/arm/plat-omap/dma.c +++ b/arch/arm/plat-omap/dma.c | |||
@@ -1034,6 +1034,18 @@ dma_addr_t omap_get_dma_src_pos(int lch) | |||
1034 | if (IS_DMA_ERRATA(DMA_ERRATA_3_3) && offset == 0) | 1034 | if (IS_DMA_ERRATA(DMA_ERRATA_3_3) && offset == 0) |
1035 | offset = p->dma_read(CSAC, lch); | 1035 | offset = p->dma_read(CSAC, lch); |
1036 | 1036 | ||
1037 | if (!cpu_is_omap15xx()) { | ||
1038 | /* | ||
1039 | * CDAC == 0 indicates that the DMA transfer on the channel has | ||
1040 | * not been started (no data has been transferred so far). | ||
1041 | * Return the programmed source start address in this case. | ||
1042 | */ | ||
1043 | if (likely(p->dma_read(CDAC, lch))) | ||
1044 | offset = p->dma_read(CSAC, lch); | ||
1045 | else | ||
1046 | offset = p->dma_read(CSSA, lch); | ||
1047 | } | ||
1048 | |||
1037 | if (cpu_class_is_omap1()) | 1049 | if (cpu_class_is_omap1()) |
1038 | offset |= (p->dma_read(CSSA, lch) & 0xFFFF0000); | 1050 | offset |= (p->dma_read(CSSA, lch) & 0xFFFF0000); |
1039 | 1051 | ||
@@ -1062,8 +1074,16 @@ dma_addr_t omap_get_dma_dst_pos(int lch) | |||
1062 | * omap 3.2/3.3 erratum: sometimes 0 is returned if CSAC/CDAC is | 1074 | * omap 3.2/3.3 erratum: sometimes 0 is returned if CSAC/CDAC is |
1063 | * read before the DMA controller finished disabling the channel. | 1075 | * read before the DMA controller finished disabling the channel. |
1064 | */ | 1076 | */ |
1065 | if (!cpu_is_omap15xx() && offset == 0) | 1077 | if (!cpu_is_omap15xx() && offset == 0) { |
1066 | offset = p->dma_read(CDAC, lch); | 1078 | offset = p->dma_read(CDAC, lch); |
1079 | /* | ||
1080 | * CDAC == 0 indicates that the DMA transfer on the channel has | ||
1081 | * not been started (no data has been transferred so far). | ||
1082 | * Return the programmed destination start address in this case. | ||
1083 | */ | ||
1084 | if (unlikely(!offset)) | ||
1085 | offset = p->dma_read(CDSA, lch); | ||
1086 | } | ||
1067 | 1087 | ||
1068 | if (cpu_class_is_omap1()) | 1088 | if (cpu_class_is_omap1()) |
1069 | offset |= (p->dma_read(CDSA, lch) & 0xFFFF0000); | 1089 | offset |= (p->dma_read(CDSA, lch) & 0xFFFF0000); |