Skip to content

Commit 7de81cf

Browse files
ckkimtobetter
authored andcommitted
ODROID-C2: amlogic/pwm: PWM frequency divider error fix.
Change-Id: I5fef9661159ed32d43444f7b574c898d7a68c2b7
1 parent 9a0eee0 commit 7de81cf

File tree

3 files changed

+11
-3
lines changed

3 files changed

+11
-3
lines changed

drivers/amlogic/pwm/pwm-ctrl.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ struct pwm_ctrl {
2828
int duty0, duty1;
2929
};
3030

31-
#define FREQ_MIN 10 /* 10Hz */
31+
#define FREQ_MIN 46 /* 50Hz */
3232
#define FREQ_MAX 1000000 /* 1MHz */
3333
#define DUTY_MAX 1024 /* Duty cycle Max */
3434

@@ -136,7 +136,7 @@ static ssize_t set_freq0(struct device *dev,
136136
return -EINVAL;
137137

138138
if ((val < FREQ_MIN) || (val > FREQ_MAX)) {
139-
dev_err(dev, "PWM_0 : Invalid param. Frequency range is 10Hz to 1MHz\n");
139+
dev_err(dev, "PWM_0 : Invalid param. Frequency range is 46Hz to 1MHz\n");
140140
return count;
141141
}
142142
dev_dbg(dev, "PWM_0 : %s [%d]\n", __func__, val);
@@ -287,7 +287,7 @@ static ssize_t set_freq1(struct device *dev,
287287
return -EINVAL;
288288

289289
if ((val < FREQ_MIN) || (val > FREQ_MAX)) {
290-
dev_err(dev, "PWM_1 : Invalid param. Frequency range is 10Hz to 1MHz\n");
290+
dev_err(dev, "PWM_1 : Invalid param. Frequency range is 46Hz to 1MHz\n");
291291
return count;
292292
}
293293
dev_dbg(dev, "PWM_1 : %s [%d]\n", __func__, val);

drivers/amlogic/pwm/pwm-meson.c

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,8 @@ MODULE_PARM_DESC(npwm , "\n odroid-c1 The number of available pwm (max 2-port)\n
5050
#define PWM_A 0
5151
#define PWM_F 1
5252
#define FIN_FREQ (24 * 1000)
53+
#define FREQ_MIN 46 /* 50Hz */
54+
#define FREQ_MAX 1000000 /* 1MHz */
5355
#define DUTY_MAX 1024
5456

5557
struct meson_pwm_device {
@@ -139,6 +141,10 @@ static int meson_pwm_config(struct pwm_chip *chip, struct pwm_device *pwm,
139141
unsigned long temp = 0;
140142
int i = 0;
141143

144+
if ((pwm_freq < FREQ_MIN) || (pwm_freq > FREQ_MAX)) {
145+
dev_err(dev, "Can not available freq. (46Hz to 1MHz!!!\n");
146+
return -EINVAL;
147+
}
142148
if ((duty < 0) || (duty > DUTY_MAX)) {
143149
dev_err(dev, "Not available duty... error!!!\n");
144150
return -EINVAL;

drivers/pwm/core.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -409,8 +409,10 @@ int pwm_config(struct pwm_device *pwm, int duty_ns, int period_ns)
409409
{
410410
int err;
411411

412+
#if !defined(CONFIG_ARCH_MESON64_ODROIDC2)
412413
if (!pwm || duty_ns < 0 || period_ns <= 0 || duty_ns > period_ns)
413414
return -EINVAL;
415+
#endif
414416

415417
err = pwm->chip->ops->config(pwm->chip, pwm, duty_ns, period_ns);
416418
if (err)

0 commit comments

Comments
 (0)