diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2013-01-08 21:53:56 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2013-01-08 21:53:56 -0500 |
commit | 974b33586b4bbbdab33c666417f9ba9ef50b62c3 (patch) | |
tree | 0ee18a21c5d9fba897903e8505b606793cb8fb27 /drivers | |
parent | ca5c8a4c2aba577b4cd2f4c3c72a768a80830294 (diff) | |
parent | 434fec16948cf5afa3cba31dcb00359bdbf24758 (diff) |
Merge tag 'fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/arm/arm-soc
Pull ARM SoC fixes from Olof Johansson:
"People are back from the holiday breaks, and it shows. Here are a
bunch of fixes for a number of platforms:
- A couple of small fixes for Nomadik
- A larger set of changes for kirkwood/mvebu
- uart driver selection, dt clocks, gpio-poweroff fixups, a few
__init annotation fixes and some error handling improvement in
their xor dma driver.
- i.MX had a couple of minor fixes (and a critical one for flexcan2
clock setup)
- MXS has a small board fix and a framebuffer bugfix
- A set of fixes for Samsung Exynos, fixing default bootargs and some
Exynos5440 clock issues
- A set of OMAP changes including PM fixes and a few sparse warning
fixups
All in all a bit more positive code delta than we'd ideally want to
see here, mostly from the OMAP PM changes, but nothing overly crazy."
* tag 'fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/arm/arm-soc: (44 commits)
ARM: clps711x: Fix bad merge of clockevents setup
ARM: highbank: save and restore L2 cache and GIC on suspend
ARM: highbank: add a power request clear
ARM: highbank: fix secondary boot and hotplug
ARM: highbank: fix typos with hignbank in power request functions
ARM: dts: fix highbank cpu mpidr values
ARM: dts: add device_type prop to cpu nodes on Calxeda platforms
ARM: mx5: Fix MX53 flexcan2 clock
ARM: OMAP2+: am33xx-hwmod: Fix wrongly terminated am33xx_usbss_mpu_irqs array
pinctrl: mvebu: make pdma clock on dove mandatory
ARM: Dove: Add pinctrl clock to DT
dma: mv_xor: fix error handling for clocks
dma: mv_xor: fix error handling of mv_xor_channel_add()
arm: mvebu: Add missing ; for cpu node.
arm: mvebu: Armada XP MV78230 has only three Ethernet interfaces
arm: mvebu: Armada XP MV78230 has two cores, not one
clk: mvebu: Remove inappropriate __init tagging
ARM: Kirkwood: Use fixed-regulator instead of board gpio call
ARM: Kirkwood: Fix missing sdio clock
ARM: Kirkwood: Switch TWSI1 of 88f6282 to DT clock providers
...
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/clk/mvebu/clk-gating-ctrl.c | 2 | ||||
-rw-r--r-- | drivers/dma/mv_xor.c | 9 | ||||
-rw-r--r-- | drivers/pinctrl/mvebu/pinctrl-dove.c | 7 | ||||
-rw-r--r-- | drivers/power/reset/gpio-poweroff.c | 33 | ||||
-rw-r--r-- | drivers/video/mxsfb.c | 3 |
5 files changed, 29 insertions, 25 deletions
diff --git a/drivers/clk/mvebu/clk-gating-ctrl.c b/drivers/clk/mvebu/clk-gating-ctrl.c index c6d3c263b070..8fa5408b6c7d 100644 --- a/drivers/clk/mvebu/clk-gating-ctrl.c +++ b/drivers/clk/mvebu/clk-gating-ctrl.c | |||
@@ -32,7 +32,7 @@ struct mvebu_soc_descr { | |||
32 | 32 | ||
33 | #define to_clk_gate(_hw) container_of(_hw, struct clk_gate, hw) | 33 | #define to_clk_gate(_hw) container_of(_hw, struct clk_gate, hw) |
34 | 34 | ||
35 | static struct clk __init *mvebu_clk_gating_get_src( | 35 | static struct clk *mvebu_clk_gating_get_src( |
36 | struct of_phandle_args *clkspec, void *data) | 36 | struct of_phandle_args *clkspec, void *data) |
37 | { | 37 | { |
38 | struct mvebu_gating_ctrl *ctrl = (struct mvebu_gating_ctrl *)data; | 38 | struct mvebu_gating_ctrl *ctrl = (struct mvebu_gating_ctrl *)data; |
diff --git a/drivers/dma/mv_xor.c b/drivers/dma/mv_xor.c index ac71f555dd72..e17fad03cb80 100644 --- a/drivers/dma/mv_xor.c +++ b/drivers/dma/mv_xor.c | |||
@@ -1361,13 +1361,16 @@ static int mv_xor_probe(struct platform_device *pdev) | |||
1361 | err_channel_add: | 1361 | err_channel_add: |
1362 | for (i = 0; i < MV_XOR_MAX_CHANNELS; i++) | 1362 | for (i = 0; i < MV_XOR_MAX_CHANNELS; i++) |
1363 | if (xordev->channels[i]) { | 1363 | if (xordev->channels[i]) { |
1364 | mv_xor_channel_remove(xordev->channels[i]); | ||
1364 | if (pdev->dev.of_node) | 1365 | if (pdev->dev.of_node) |
1365 | irq_dispose_mapping(xordev->channels[i]->irq); | 1366 | irq_dispose_mapping(xordev->channels[i]->irq); |
1366 | mv_xor_channel_remove(xordev->channels[i]); | ||
1367 | } | 1367 | } |
1368 | 1368 | ||
1369 | clk_disable_unprepare(xordev->clk); | 1369 | if (!IS_ERR(xordev->clk)) { |
1370 | clk_put(xordev->clk); | 1370 | clk_disable_unprepare(xordev->clk); |
1371 | clk_put(xordev->clk); | ||
1372 | } | ||
1373 | |||
1371 | return ret; | 1374 | return ret; |
1372 | } | 1375 | } |
1373 | 1376 | ||
diff --git a/drivers/pinctrl/mvebu/pinctrl-dove.c b/drivers/pinctrl/mvebu/pinctrl-dove.c index 750dea78f53a..69aba3697287 100644 --- a/drivers/pinctrl/mvebu/pinctrl-dove.c +++ b/drivers/pinctrl/mvebu/pinctrl-dove.c | |||
@@ -595,8 +595,11 @@ static int dove_pinctrl_probe(struct platform_device *pdev) | |||
595 | * grab clk to make sure it is ticking. | 595 | * grab clk to make sure it is ticking. |
596 | */ | 596 | */ |
597 | clk = devm_clk_get(&pdev->dev, NULL); | 597 | clk = devm_clk_get(&pdev->dev, NULL); |
598 | if (!IS_ERR(clk)) | 598 | if (IS_ERR(clk)) { |
599 | clk_prepare_enable(clk); | 599 | dev_err(&pdev->dev, "Unable to get pdma clock"); |
600 | return PTR_RET(clk); | ||
601 | } | ||
602 | clk_prepare_enable(clk); | ||
600 | 603 | ||
601 | return mvebu_pinctrl_probe(pdev); | 604 | return mvebu_pinctrl_probe(pdev); |
602 | } | 605 | } |
diff --git a/drivers/power/reset/gpio-poweroff.c b/drivers/power/reset/gpio-poweroff.c index 06074248ba7a..e290d48ddd99 100644 --- a/drivers/power/reset/gpio-poweroff.c +++ b/drivers/power/reset/gpio-poweroff.c | |||
@@ -29,15 +29,16 @@ static int gpio_active_low; | |||
29 | 29 | ||
30 | static void gpio_poweroff_do_poweroff(void) | 30 | static void gpio_poweroff_do_poweroff(void) |
31 | { | 31 | { |
32 | BUG_ON(gpio_num == -1); | 32 | BUG_ON(!gpio_is_valid(gpio_num)); |
33 | 33 | ||
34 | /* drive it active */ | 34 | /* drive it active, also inactive->active edge */ |
35 | gpio_direction_output(gpio_num, !gpio_active_low); | 35 | gpio_direction_output(gpio_num, !gpio_active_low); |
36 | mdelay(100); | 36 | mdelay(100); |
37 | /* rising edge or drive inactive */ | 37 | /* drive inactive, also active->inactive edge */ |
38 | gpio_set_value(gpio_num, gpio_active_low); | 38 | gpio_set_value(gpio_num, gpio_active_low); |
39 | mdelay(100); | 39 | mdelay(100); |
40 | /* falling edge */ | 40 | |
41 | /* drive it active, also inactive->active edge */ | ||
41 | gpio_set_value(gpio_num, !gpio_active_low); | 42 | gpio_set_value(gpio_num, !gpio_active_low); |
42 | 43 | ||
43 | /* give it some time */ | 44 | /* give it some time */ |
@@ -60,15 +61,12 @@ static int gpio_poweroff_probe(struct platform_device *pdev) | |||
60 | } | 61 | } |
61 | 62 | ||
62 | gpio_num = of_get_gpio_flags(pdev->dev.of_node, 0, &flags); | 63 | gpio_num = of_get_gpio_flags(pdev->dev.of_node, 0, &flags); |
63 | if (gpio_num < 0) { | 64 | if (!gpio_is_valid(gpio_num)) |
64 | pr_err("%s: Could not get GPIO configuration: %d", | 65 | return gpio_num; |
65 | __func__, gpio_num); | 66 | |
66 | return -ENODEV; | ||
67 | } | ||
68 | gpio_active_low = flags & OF_GPIO_ACTIVE_LOW; | 67 | gpio_active_low = flags & OF_GPIO_ACTIVE_LOW; |
69 | 68 | ||
70 | if (of_get_property(pdev->dev.of_node, "input", NULL)) | 69 | input = of_property_read_bool(pdev->dev.of_node, "input"); |
71 | input = true; | ||
72 | 70 | ||
73 | ret = gpio_request(gpio_num, "poweroff-gpio"); | 71 | ret = gpio_request(gpio_num, "poweroff-gpio"); |
74 | if (ret) { | 72 | if (ret) { |
@@ -98,8 +96,7 @@ err: | |||
98 | 96 | ||
99 | static int gpio_poweroff_remove(struct platform_device *pdev) | 97 | static int gpio_poweroff_remove(struct platform_device *pdev) |
100 | { | 98 | { |
101 | if (gpio_num != -1) | 99 | gpio_free(gpio_num); |
102 | gpio_free(gpio_num); | ||
103 | if (pm_power_off == &gpio_poweroff_do_poweroff) | 100 | if (pm_power_off == &gpio_poweroff_do_poweroff) |
104 | pm_power_off = NULL; | 101 | pm_power_off = NULL; |
105 | 102 | ||
@@ -115,15 +112,15 @@ static struct platform_driver gpio_poweroff_driver = { | |||
115 | .probe = gpio_poweroff_probe, | 112 | .probe = gpio_poweroff_probe, |
116 | .remove = gpio_poweroff_remove, | 113 | .remove = gpio_poweroff_remove, |
117 | .driver = { | 114 | .driver = { |
118 | .name = "poweroff-gpio", | 115 | .name = "poweroff-gpio", |
119 | .owner = THIS_MODULE, | 116 | .owner = THIS_MODULE, |
120 | .of_match_table = of_gpio_poweroff_match, | 117 | .of_match_table = of_gpio_poweroff_match, |
121 | }, | 118 | }, |
122 | }; | 119 | }; |
123 | 120 | ||
124 | module_platform_driver(gpio_poweroff_driver); | 121 | module_platform_driver(gpio_poweroff_driver); |
125 | 122 | ||
126 | MODULE_AUTHOR("Jamie Lentin <jm@lentin.co.uk>"); | 123 | MODULE_AUTHOR("Jamie Lentin <jm@lentin.co.uk>"); |
127 | MODULE_DESCRIPTION("GPIO poweroff driver"); | 124 | MODULE_DESCRIPTION("GPIO poweroff driver"); |
128 | MODULE_LICENSE("GPL"); | 125 | MODULE_LICENSE("GPL v2"); |
129 | MODULE_ALIAS("platform:poweroff-gpio"); | 126 | MODULE_ALIAS("platform:poweroff-gpio"); |
diff --git a/drivers/video/mxsfb.c b/drivers/video/mxsfb.c index a45b37c2e88e..755556ca5b2d 100644 --- a/drivers/video/mxsfb.c +++ b/drivers/video/mxsfb.c | |||
@@ -369,7 +369,8 @@ static void mxsfb_disable_controller(struct fb_info *fb_info) | |||
369 | loop--; | 369 | loop--; |
370 | } | 370 | } |
371 | 371 | ||
372 | writel(VDCTRL4_SYNC_SIGNALS_ON, host->base + LCDC_VDCTRL4 + REG_CLR); | 372 | reg = readl(host->base + LCDC_VDCTRL4); |
373 | writel(reg & ~VDCTRL4_SYNC_SIGNALS_ON, host->base + LCDC_VDCTRL4); | ||
373 | 374 | ||
374 | clk_disable_unprepare(host->clk); | 375 | clk_disable_unprepare(host->clk); |
375 | 376 | ||