diff options
| author | Ingo Molnar <mingo@kernel.org> | 2013-01-24 06:47:48 -0500 |
|---|---|---|
| committer | Ingo Molnar <mingo@kernel.org> | 2013-01-24 06:47:48 -0500 |
| commit | befddb21c845f8fb49e637997891ef97c6a869dc (patch) | |
| tree | 0e7629123184f2dd50291ad6d477b894175f0f26 /drivers/pwm/core.c | |
| parent | e716efde75267eab919cdb2bef5b2cb77f305326 (diff) | |
| parent | 7d1f9aeff1ee4a20b1aeb377dd0f579fe9647619 (diff) | |
Merge tag 'v3.8-rc4' into irq/core
Merge Linux 3.8-rc4 before pulling in new commits - we were on an old v3.7 base.
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Diffstat (limited to 'drivers/pwm/core.c')
| -rw-r--r-- | drivers/pwm/core.c | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/drivers/pwm/core.c b/drivers/pwm/core.c index f5acdaa52707..903138b18842 100644 --- a/drivers/pwm/core.c +++ b/drivers/pwm/core.c | |||
| @@ -32,6 +32,9 @@ | |||
| 32 | 32 | ||
| 33 | #define MAX_PWMS 1024 | 33 | #define MAX_PWMS 1024 |
| 34 | 34 | ||
| 35 | /* flags in the third cell of the DT PWM specifier */ | ||
| 36 | #define PWM_SPEC_POLARITY (1 << 0) | ||
| 37 | |||
| 35 | static DEFINE_MUTEX(pwm_lookup_lock); | 38 | static DEFINE_MUTEX(pwm_lookup_lock); |
| 36 | static LIST_HEAD(pwm_lookup_list); | 39 | static LIST_HEAD(pwm_lookup_list); |
| 37 | static DEFINE_MUTEX(pwm_lock); | 40 | static DEFINE_MUTEX(pwm_lock); |
| @@ -129,6 +132,32 @@ static int pwm_device_request(struct pwm_device *pwm, const char *label) | |||
| 129 | return 0; | 132 | return 0; |
| 130 | } | 133 | } |
| 131 | 134 | ||
| 135 | struct pwm_device * | ||
| 136 | of_pwm_xlate_with_flags(struct pwm_chip *pc, const struct of_phandle_args *args) | ||
| 137 | { | ||
| 138 | struct pwm_device *pwm; | ||
| 139 | |||
| 140 | if (pc->of_pwm_n_cells < 3) | ||
| 141 | return ERR_PTR(-EINVAL); | ||
| 142 | |||
| 143 | if (args->args[0] >= pc->npwm) | ||
| 144 | return ERR_PTR(-EINVAL); | ||
| 145 | |||
| 146 | pwm = pwm_request_from_chip(pc, args->args[0], NULL); | ||
| 147 | if (IS_ERR(pwm)) | ||
| 148 | return pwm; | ||
| 149 | |||
| 150 | pwm_set_period(pwm, args->args[1]); | ||
| 151 | |||
| 152 | if (args->args[2] & PWM_SPEC_POLARITY) | ||
| 153 | pwm_set_polarity(pwm, PWM_POLARITY_INVERSED); | ||
| 154 | else | ||
| 155 | pwm_set_polarity(pwm, PWM_POLARITY_NORMAL); | ||
| 156 | |||
| 157 | return pwm; | ||
| 158 | } | ||
| 159 | EXPORT_SYMBOL_GPL(of_pwm_xlate_with_flags); | ||
| 160 | |||
| 132 | static struct pwm_device * | 161 | static struct pwm_device * |
| 133 | of_pwm_simple_xlate(struct pwm_chip *pc, const struct of_phandle_args *args) | 162 | of_pwm_simple_xlate(struct pwm_chip *pc, const struct of_phandle_args *args) |
| 134 | { | 163 | { |
