diff options
Diffstat (limited to 'drivers/pwm')
-rw-r--r-- | drivers/pwm/Kconfig | 31 | ||||
-rw-r--r-- | drivers/pwm/core.c | 12 | ||||
-rw-r--r-- | drivers/pwm/pwm-samsung.c | 1 | ||||
-rw-r--r-- | drivers/pwm/pwm-tegra.c | 4 | ||||
-rw-r--r-- | drivers/pwm/pwm-tiecap.c | 4 | ||||
-rw-r--r-- | drivers/pwm/pwm-tiehrpwm.c | 4 | ||||
-rw-r--r-- | drivers/pwm/pwm-vt8500.c | 2 |
7 files changed, 36 insertions, 22 deletions
diff --git a/drivers/pwm/Kconfig b/drivers/pwm/Kconfig index 8fc3808d7a3e..90c5c7357a50 100644 --- a/drivers/pwm/Kconfig +++ b/drivers/pwm/Kconfig | |||
@@ -1,12 +1,31 @@ | |||
1 | menuconfig PWM | 1 | menuconfig PWM |
2 | bool "PWM Support" | 2 | bool "Pulse-Width Modulation (PWM) Support" |
3 | depends on !MACH_JZ4740 && !PUV3_PWM | 3 | depends on !MACH_JZ4740 && !PUV3_PWM |
4 | help | 4 | help |
5 | This enables PWM support through the generic PWM framework. | 5 | Generic Pulse-Width Modulation (PWM) support. |
6 | You only need to enable this, if you also want to enable | 6 | |
7 | one or more of the PWM drivers below. | 7 | In Pulse-Width Modulation, a variation of the width of pulses |
8 | 8 | in a rectangular pulse signal is used as a means to alter the | |
9 | If unsure, say N. | 9 | average power of the signal. Applications include efficient |
10 | power delivery and voltage regulation. In computer systems, | ||
11 | PWMs are commonly used to control fans or the brightness of | ||
12 | display backlights. | ||
13 | |||
14 | This framework provides a generic interface to PWM devices | ||
15 | within the Linux kernel. On the driver side it provides an API | ||
16 | to register and unregister a PWM chip, an abstraction of a PWM | ||
17 | controller, that supports one or more PWM devices. Client | ||
18 | drivers can request PWM devices and use the generic framework | ||
19 | to configure as well as enable and disable them. | ||
20 | |||
21 | This generic framework replaces the legacy PWM framework which | ||
22 | allows only a single driver implementing the required API. Not | ||
23 | all legacy implementations have been ported to the framework | ||
24 | yet. The framework provides an API that is backward compatible | ||
25 | with the legacy framework so that existing client drivers | ||
26 | continue to work as expected. | ||
27 | |||
28 | If unsure, say no. | ||
10 | 29 | ||
11 | if PWM | 30 | if PWM |
12 | 31 | ||
diff --git a/drivers/pwm/core.c b/drivers/pwm/core.c index ecb76909e946..c6e05078d3ad 100644 --- a/drivers/pwm/core.c +++ b/drivers/pwm/core.c | |||
@@ -129,8 +129,8 @@ static int pwm_device_request(struct pwm_device *pwm, const char *label) | |||
129 | return 0; | 129 | return 0; |
130 | } | 130 | } |
131 | 131 | ||
132 | static struct pwm_device *of_pwm_simple_xlate(struct pwm_chip *pc, | 132 | static struct pwm_device * |
133 | const struct of_phandle_args *args) | 133 | of_pwm_simple_xlate(struct pwm_chip *pc, const struct of_phandle_args *args) |
134 | { | 134 | { |
135 | struct pwm_device *pwm; | 135 | struct pwm_device *pwm; |
136 | 136 | ||
@@ -149,7 +149,7 @@ static struct pwm_device *of_pwm_simple_xlate(struct pwm_chip *pc, | |||
149 | return pwm; | 149 | return pwm; |
150 | } | 150 | } |
151 | 151 | ||
152 | void of_pwmchip_add(struct pwm_chip *chip) | 152 | static void of_pwmchip_add(struct pwm_chip *chip) |
153 | { | 153 | { |
154 | if (!chip->dev || !chip->dev->of_node) | 154 | if (!chip->dev || !chip->dev->of_node) |
155 | return; | 155 | return; |
@@ -162,7 +162,7 @@ void of_pwmchip_add(struct pwm_chip *chip) | |||
162 | of_node_get(chip->dev->of_node); | 162 | of_node_get(chip->dev->of_node); |
163 | } | 163 | } |
164 | 164 | ||
165 | void of_pwmchip_remove(struct pwm_chip *chip) | 165 | static void of_pwmchip_remove(struct pwm_chip *chip) |
166 | { | 166 | { |
167 | if (chip->dev && chip->dev->of_node) | 167 | if (chip->dev && chip->dev->of_node) |
168 | of_node_put(chip->dev->of_node); | 168 | of_node_put(chip->dev->of_node); |
@@ -527,7 +527,7 @@ void __init pwm_add_table(struct pwm_lookup *table, size_t num) | |||
527 | struct pwm_device *pwm_get(struct device *dev, const char *con_id) | 527 | struct pwm_device *pwm_get(struct device *dev, const char *con_id) |
528 | { | 528 | { |
529 | struct pwm_device *pwm = ERR_PTR(-EPROBE_DEFER); | 529 | struct pwm_device *pwm = ERR_PTR(-EPROBE_DEFER); |
530 | const char *dev_id = dev ? dev_name(dev): NULL; | 530 | const char *dev_id = dev ? dev_name(dev) : NULL; |
531 | struct pwm_chip *chip = NULL; | 531 | struct pwm_chip *chip = NULL; |
532 | unsigned int index = 0; | 532 | unsigned int index = 0; |
533 | unsigned int best = 0; | 533 | unsigned int best = 0; |
@@ -609,7 +609,7 @@ void pwm_put(struct pwm_device *pwm) | |||
609 | mutex_lock(&pwm_lock); | 609 | mutex_lock(&pwm_lock); |
610 | 610 | ||
611 | if (!test_and_clear_bit(PWMF_REQUESTED, &pwm->flags)) { | 611 | if (!test_and_clear_bit(PWMF_REQUESTED, &pwm->flags)) { |
612 | pr_warning("PWM device already freed\n"); | 612 | pr_warn("PWM device already freed\n"); |
613 | goto out; | 613 | goto out; |
614 | } | 614 | } |
615 | 615 | ||
diff --git a/drivers/pwm/pwm-samsung.c b/drivers/pwm/pwm-samsung.c index d10386528c9c..e5187c0ade9f 100644 --- a/drivers/pwm/pwm-samsung.c +++ b/drivers/pwm/pwm-samsung.c | |||
@@ -225,6 +225,7 @@ static int s3c_pwm_probe(struct platform_device *pdev) | |||
225 | 225 | ||
226 | /* calculate base of control bits in TCON */ | 226 | /* calculate base of control bits in TCON */ |
227 | s3c->tcon_base = id == 0 ? 0 : (id * 4) + 4; | 227 | s3c->tcon_base = id == 0 ? 0 : (id * 4) + 4; |
228 | s3c->chip.dev = &pdev->dev; | ||
228 | s3c->chip.ops = &s3c_pwm_ops; | 229 | s3c->chip.ops = &s3c_pwm_ops; |
229 | s3c->chip.base = -1; | 230 | s3c->chip.base = -1; |
230 | s3c->chip.npwm = 1; | 231 | s3c->chip.npwm = 1; |
diff --git a/drivers/pwm/pwm-tegra.c b/drivers/pwm/pwm-tegra.c index 02ce18d5e49a..057465e0553c 100644 --- a/drivers/pwm/pwm-tegra.c +++ b/drivers/pwm/pwm-tegra.c | |||
@@ -187,10 +187,8 @@ static int tegra_pwm_probe(struct platform_device *pdev) | |||
187 | } | 187 | } |
188 | 188 | ||
189 | pwm->mmio_base = devm_request_and_ioremap(&pdev->dev, r); | 189 | pwm->mmio_base = devm_request_and_ioremap(&pdev->dev, r); |
190 | if (!pwm->mmio_base) { | 190 | if (!pwm->mmio_base) |
191 | dev_err(&pdev->dev, "failed to ioremap() region\n"); | ||
192 | return -EADDRNOTAVAIL; | 191 | return -EADDRNOTAVAIL; |
193 | } | ||
194 | 192 | ||
195 | platform_set_drvdata(pdev, pwm); | 193 | platform_set_drvdata(pdev, pwm); |
196 | 194 | ||
diff --git a/drivers/pwm/pwm-tiecap.c b/drivers/pwm/pwm-tiecap.c index 3c2ad284ee3e..0b66d0f25922 100644 --- a/drivers/pwm/pwm-tiecap.c +++ b/drivers/pwm/pwm-tiecap.c | |||
@@ -192,10 +192,8 @@ static int __devinit ecap_pwm_probe(struct platform_device *pdev) | |||
192 | } | 192 | } |
193 | 193 | ||
194 | pc->mmio_base = devm_request_and_ioremap(&pdev->dev, r); | 194 | pc->mmio_base = devm_request_and_ioremap(&pdev->dev, r); |
195 | if (!pc->mmio_base) { | 195 | if (!pc->mmio_base) |
196 | dev_err(&pdev->dev, "failed to ioremap() registers\n"); | ||
197 | return -EADDRNOTAVAIL; | 196 | return -EADDRNOTAVAIL; |
198 | } | ||
199 | 197 | ||
200 | ret = pwmchip_add(&pc->chip); | 198 | ret = pwmchip_add(&pc->chip); |
201 | if (ret < 0) { | 199 | if (ret < 0) { |
diff --git a/drivers/pwm/pwm-tiehrpwm.c b/drivers/pwm/pwm-tiehrpwm.c index 010d232cb0c8..c3756d1be194 100644 --- a/drivers/pwm/pwm-tiehrpwm.c +++ b/drivers/pwm/pwm-tiehrpwm.c | |||
@@ -371,10 +371,8 @@ static int __devinit ehrpwm_pwm_probe(struct platform_device *pdev) | |||
371 | } | 371 | } |
372 | 372 | ||
373 | pc->mmio_base = devm_request_and_ioremap(&pdev->dev, r); | 373 | pc->mmio_base = devm_request_and_ioremap(&pdev->dev, r); |
374 | if (!pc->mmio_base) { | 374 | if (!pc->mmio_base) |
375 | dev_err(&pdev->dev, "failed to ioremap() registers\n"); | ||
376 | return -EADDRNOTAVAIL; | 375 | return -EADDRNOTAVAIL; |
377 | } | ||
378 | 376 | ||
379 | ret = pwmchip_add(&pc->chip); | 377 | ret = pwmchip_add(&pc->chip); |
380 | if (ret < 0) { | 378 | if (ret < 0) { |
diff --git a/drivers/pwm/pwm-vt8500.c b/drivers/pwm/pwm-vt8500.c index 548021439f0c..ad14389b7144 100644 --- a/drivers/pwm/pwm-vt8500.c +++ b/drivers/pwm/pwm-vt8500.c | |||
@@ -41,7 +41,7 @@ static inline void pwm_busy_wait(void __iomem *reg, u8 bitmask) | |||
41 | cpu_relax(); | 41 | cpu_relax(); |
42 | 42 | ||
43 | if (unlikely(!loops)) | 43 | if (unlikely(!loops)) |
44 | pr_warning("Waiting for status bits 0x%x to clear timed out\n", | 44 | pr_warn("Waiting for status bits 0x%x to clear timed out\n", |
45 | bitmask); | 45 | bitmask); |
46 | } | 46 | } |
47 | 47 | ||