[Armadeus-commitlog] armadeus branch, master, updated. armadeus-5.2-70-gb4efab4
Brought to you by:
sszy
|
From: jorasse <jo...@us...> - 2012-12-08 11:06:51
|
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "armadeus".
The branch, master has been updated
via b4efab436aa1eef5e5b92b95e5166ed376af5e4e (commit)
from b788cfd2c6f3850f7ad2fa6187d5a2dd60aa207d (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
commit b4efab436aa1eef5e5b92b95e5166ed376af5e4e
Author: Eric Jarrige <eri...@ar...>
Date: Sat Dec 8 12:11:00 2012 +0100
[LINUX] apf28: fix capabilities to drive multiple PWM lines
-----------------------------------------------------------------------
Summary of changes:
target/linux/modules/pwm/mxs-pwm.c | 38 +++++++++++++++++++++--------------
1 files changed, 23 insertions(+), 15 deletions(-)
diff --git a/target/linux/modules/pwm/mxs-pwm.c b/target/linux/modules/pwm/mxs-pwm.c
index d705769..131f208 100644
--- a/target/linux/modules/pwm/mxs-pwm.c
+++ b/target/linux/modules/pwm/mxs-pwm.c
@@ -71,6 +71,7 @@ struct pwm_device {
};
int gMajor = 0;
+static void __iomem *pwm_membase = NULL;
static struct pwm_device *dev_table[CONFIG_MXS_PWM_CHANNELS];
static const int div_shift[8] = {0, 1, 2, 3, 4, 6, 8, 10};
static struct class *pwm_class; /* forward declaration only */
@@ -384,7 +385,7 @@ static DEVICE_ATTR(active, S_IWUSR | S_IRUGO, pwm_show_state, pwm_store_state);
static int imx_pwm_drv_probe(struct platform_device *pdev)
{
int err = -ENODEV;
- struct resource *res;
+ struct resource *res = NULL;
struct pwm_device *pwm;
if (pdev->id >= CONFIG_MXS_PWM_CHANNELS)
@@ -408,25 +409,32 @@ static int imx_pwm_drv_probe(struct platform_device *pdev)
platform_set_drvdata(pdev, pwm);
dev_table[pdev->id] = pwm;
- res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
- if (!res) {
- dev_err(&pdev->dev, "unable to get mem ressource\n");
- err = -ENOENT;
- goto error_malloc;
- }
+ if (!pwm_membase) {
+ res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
+ if (!res) {
+ dev_err(&pdev->dev, "unable to get mem ressource\n");
+ err = -ENOENT;
+ goto error_malloc;
+ }
- pwm->membase = (void __iomem *)IO_ADDRESS(res->start);
- if (!pwm->membase) {
- err = -ENOMEM;
+ pwm_membase = (void __iomem *)IO_ADDRESS(res->start);
+ if (!pwm_membase) {
+ err = -ENOMEM;
goto error_memreg;
+ }
}
+ pwm->membase = pwm_membase;
+
/* Register our char device */
- err = register_chrdev(gMajor, DRIVER_NAME, &pwm_fops);
- if (err < 0) {
- dev_err(&pdev->dev, "unable to register char driver\n");
- goto error_iounmap;
+ if (gMajor == 0) {
+ err = register_chrdev(gMajor, DRIVER_NAME, &pwm_fops);
+ if (err < 0) {
+ dev_err(&pdev->dev, "unable to register char driver\n");
+ goto error_iounmap;
+ }
}
+
/* Dynamic Major allocation */
if (gMajor == 0) {
gMajor = err;
@@ -487,7 +495,7 @@ error_platform_init:
error_iounmap:
iounmap(pwm->membase);
error_memreg:
- release_mem_region(res->start, resource_size(res));
+ if (res) release_mem_region(res->start, resource_size(res));
error_malloc:
kfree(pwm);
hooks/post-receive
--
armadeus
|