aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorThierry Reding <thierry.reding@gmail.com>2017-02-10 09:15:54 -0500
committerThierry Reding <thierry.reding@gmail.com>2017-02-10 09:15:54 -0500
commit652f319667383f2b2c62dda7841265bedd89c5a3 (patch)
tree33bc36f29bee3acf277fded5b5d30513d16bfd53
parent0c744ea4f77d72b3dcebb7a8f2684633ec79be88 (diff)
parentb526a314263ea217b8fa9758dca5dc245fd49997 (diff)
Merge branch 'for-4.11/core' into for-next
-rw-r--r--drivers/leds/leds-pwm.c16
-rw-r--r--drivers/pwm/core.c70
-rw-r--r--drivers/pwm/pwm-atmel-hlcdc.c1
-rw-r--r--drivers/pwm/pwm-atmel.c1
-rw-r--r--drivers/pwm/pwm-bcm-kona.c1
-rw-r--r--drivers/pwm/pwm-berlin.c1
-rw-r--r--drivers/pwm/pwm-brcmstb.c1
-rw-r--r--drivers/pwm/pwm-fsl-ftm.c1
-rw-r--r--drivers/pwm/pwm-imx.c1
-rw-r--r--drivers/pwm/pwm-lp3943.c1
-rw-r--r--drivers/pwm/pwm-mxs.c2
-rw-r--r--drivers/pwm/pwm-pca9685.c1
-rw-r--r--drivers/pwm/pwm-sti.c1
-rw-r--r--drivers/pwm/pwm-sun4i.c1
-rw-r--r--drivers/pwm/pwm-twl-led.c1
-rw-r--r--drivers/pwm/pwm-twl.c1
-rw-r--r--drivers/staging/greybus/pwm.c1
-rw-r--r--include/linux/pwm.h33
18 files changed, 55 insertions, 80 deletions
diff --git a/drivers/leds/leds-pwm.c b/drivers/leds/leds-pwm.c
index a9145aa7f36a..8d456dc6c5bf 100644
--- a/drivers/leds/leds-pwm.c
+++ b/drivers/leds/leds-pwm.c
@@ -29,7 +29,6 @@ struct led_pwm_data {
29 unsigned int active_low; 29 unsigned int active_low;
30 unsigned int period; 30 unsigned int period;
31 int duty; 31 int duty;
32 bool can_sleep;
33}; 32};
34 33
35struct led_pwm_priv { 34struct led_pwm_priv {
@@ -49,8 +48,8 @@ static void __led_pwm_set(struct led_pwm_data *led_dat)
49 pwm_enable(led_dat->pwm); 48 pwm_enable(led_dat->pwm);
50} 49}
51 50
52static void led_pwm_set(struct led_classdev *led_cdev, 51static int led_pwm_set(struct led_classdev *led_cdev,
53 enum led_brightness brightness) 52 enum led_brightness brightness)
54{ 53{
55 struct led_pwm_data *led_dat = 54 struct led_pwm_data *led_dat =
56 container_of(led_cdev, struct led_pwm_data, cdev); 55 container_of(led_cdev, struct led_pwm_data, cdev);
@@ -66,12 +65,7 @@ static void led_pwm_set(struct led_classdev *led_cdev,
66 led_dat->duty = duty; 65 led_dat->duty = duty;
67 66
68 __led_pwm_set(led_dat); 67 __led_pwm_set(led_dat);
69}
70 68
71static int led_pwm_set_blocking(struct led_classdev *led_cdev,
72 enum led_brightness brightness)
73{
74 led_pwm_set(led_cdev, brightness);
75 return 0; 69 return 0;
76} 70}
77 71
@@ -112,11 +106,7 @@ static int led_pwm_add(struct device *dev, struct led_pwm_priv *priv,
112 return ret; 106 return ret;
113 } 107 }
114 108
115 led_data->can_sleep = pwm_can_sleep(led_data->pwm); 109 led_data->cdev.brightness_set_blocking = led_pwm_set;
116 if (!led_data->can_sleep)
117 led_data->cdev.brightness_set = led_pwm_set;
118 else
119 led_data->cdev.brightness_set_blocking = led_pwm_set_blocking;
120 110
121 /* 111 /*
122 * FIXME: pwm_apply_args() should be removed when switching to the 112 * FIXME: pwm_apply_args() should be removed when switching to the
diff --git a/drivers/pwm/core.c b/drivers/pwm/core.c
index 172ef8245811..a0860b30bd93 100644
--- a/drivers/pwm/core.c
+++ b/drivers/pwm/core.c
@@ -137,9 +137,14 @@ of_pwm_xlate_with_flags(struct pwm_chip *pc, const struct of_phandle_args *args)
137{ 137{
138 struct pwm_device *pwm; 138 struct pwm_device *pwm;
139 139
140 /* check, whether the driver supports a third cell for flags */
140 if (pc->of_pwm_n_cells < 3) 141 if (pc->of_pwm_n_cells < 3)
141 return ERR_PTR(-EINVAL); 142 return ERR_PTR(-EINVAL);
142 143
144 /* flags in the third cell are optional */
145 if (args->args_count < 2)
146 return ERR_PTR(-EINVAL);
147
143 if (args->args[0] >= pc->npwm) 148 if (args->args[0] >= pc->npwm)
144 return ERR_PTR(-EINVAL); 149 return ERR_PTR(-EINVAL);
145 150
@@ -148,11 +153,10 @@ of_pwm_xlate_with_flags(struct pwm_chip *pc, const struct of_phandle_args *args)
148 return pwm; 153 return pwm;
149 154
150 pwm->args.period = args->args[1]; 155 pwm->args.period = args->args[1];
156 pwm->args.polarity = PWM_POLARITY_NORMAL;
151 157
152 if (args->args[2] & PWM_POLARITY_INVERTED) 158 if (args->args_count > 2 && args->args[2] & PWM_POLARITY_INVERTED)
153 pwm->args.polarity = PWM_POLARITY_INVERSED; 159 pwm->args.polarity = PWM_POLARITY_INVERSED;
154 else
155 pwm->args.polarity = PWM_POLARITY_NORMAL;
156 160
157 return pwm; 161 return pwm;
158} 162}
@@ -163,9 +167,14 @@ of_pwm_simple_xlate(struct pwm_chip *pc, const struct of_phandle_args *args)
163{ 167{
164 struct pwm_device *pwm; 168 struct pwm_device *pwm;
165 169
170 /* sanity check driver support */
166 if (pc->of_pwm_n_cells < 2) 171 if (pc->of_pwm_n_cells < 2)
167 return ERR_PTR(-EINVAL); 172 return ERR_PTR(-EINVAL);
168 173
174 /* all cells are required */
175 if (args->args_count != pc->of_pwm_n_cells)
176 return ERR_PTR(-EINVAL);
177
169 if (args->args[0] >= pc->npwm) 178 if (args->args[0] >= pc->npwm)
170 return ERR_PTR(-EINVAL); 179 return ERR_PTR(-EINVAL);
171 180
@@ -663,24 +672,17 @@ struct pwm_device *of_pwm_get(struct device_node *np, const char *con_id)
663 err = of_parse_phandle_with_args(np, "pwms", "#pwm-cells", index, 672 err = of_parse_phandle_with_args(np, "pwms", "#pwm-cells", index,
664 &args); 673 &args);
665 if (err) { 674 if (err) {
666 pr_debug("%s(): can't parse \"pwms\" property\n", __func__); 675 pr_err("%s(): can't parse \"pwms\" property\n", __func__);
667 return ERR_PTR(err); 676 return ERR_PTR(err);
668 } 677 }
669 678
670 pc = of_node_to_pwmchip(args.np); 679 pc = of_node_to_pwmchip(args.np);
671 if (IS_ERR(pc)) { 680 if (IS_ERR(pc)) {
672 pr_debug("%s(): PWM chip not found\n", __func__); 681 pr_err("%s(): PWM chip not found\n", __func__);
673 pwm = ERR_CAST(pc); 682 pwm = ERR_CAST(pc);
674 goto put; 683 goto put;
675 } 684 }
676 685
677 if (args.args_count != pc->of_pwm_n_cells) {
678 pr_debug("%s: wrong #pwm-cells for %s\n", np->full_name,
679 args.np->full_name);
680 pwm = ERR_PTR(-EINVAL);
681 goto put;
682 }
683
684 pwm = pc->of_xlate(pc, &args); 686 pwm = pc->of_xlate(pc, &args);
685 if (IS_ERR(pwm)) 687 if (IS_ERR(pwm))
686 goto put; 688 goto put;
@@ -757,12 +759,13 @@ void pwm_remove_table(struct pwm_lookup *table, size_t num)
757 */ 759 */
758struct pwm_device *pwm_get(struct device *dev, const char *con_id) 760struct pwm_device *pwm_get(struct device *dev, const char *con_id)
759{ 761{
760 struct pwm_device *pwm = ERR_PTR(-EPROBE_DEFER);
761 const char *dev_id = dev ? dev_name(dev) : NULL; 762 const char *dev_id = dev ? dev_name(dev) : NULL;
762 struct pwm_chip *chip = NULL; 763 struct pwm_device *pwm;
764 struct pwm_chip *chip;
763 unsigned int best = 0; 765 unsigned int best = 0;
764 struct pwm_lookup *p, *chosen = NULL; 766 struct pwm_lookup *p, *chosen = NULL;
765 unsigned int match; 767 unsigned int match;
768 int err;
766 769
767 /* look up via DT first */ 770 /* look up via DT first */
768 if (IS_ENABLED(CONFIG_OF) && dev && dev->of_node) 771 if (IS_ENABLED(CONFIG_OF) && dev && dev->of_node)
@@ -817,24 +820,35 @@ struct pwm_device *pwm_get(struct device *dev, const char *con_id)
817 } 820 }
818 } 821 }
819 822
820 if (!chosen) { 823 mutex_unlock(&pwm_lookup_lock);
821 pwm = ERR_PTR(-ENODEV); 824
822 goto out; 825 if (!chosen)
823 } 826 return ERR_PTR(-ENODEV);
824 827
825 chip = pwmchip_find_by_name(chosen->provider); 828 chip = pwmchip_find_by_name(chosen->provider);
829
830 /*
831 * If the lookup entry specifies a module, load the module and retry
832 * the PWM chip lookup. This can be used to work around driver load
833 * ordering issues if driver's can't be made to properly support the
834 * deferred probe mechanism.
835 */
836 if (!chip && chosen->module) {
837 err = request_module(chosen->module);
838 if (err == 0)
839 chip = pwmchip_find_by_name(chosen->provider);
840 }
841
826 if (!chip) 842 if (!chip)
827 goto out; 843 return ERR_PTR(-EPROBE_DEFER);
828 844
829 pwm = pwm_request_from_chip(chip, chosen->index, con_id ?: dev_id); 845 pwm = pwm_request_from_chip(chip, chosen->index, con_id ?: dev_id);
830 if (IS_ERR(pwm)) 846 if (IS_ERR(pwm))
831 goto out; 847 return pwm;
832 848
833 pwm->args.period = chosen->period; 849 pwm->args.period = chosen->period;
834 pwm->args.polarity = chosen->polarity; 850 pwm->args.polarity = chosen->polarity;
835 851
836out:
837 mutex_unlock(&pwm_lookup_lock);
838 return pwm; 852 return pwm;
839} 853}
840EXPORT_SYMBOL_GPL(pwm_get); 854EXPORT_SYMBOL_GPL(pwm_get);
@@ -960,18 +974,6 @@ void devm_pwm_put(struct device *dev, struct pwm_device *pwm)
960} 974}
961EXPORT_SYMBOL_GPL(devm_pwm_put); 975EXPORT_SYMBOL_GPL(devm_pwm_put);
962 976
963/**
964 * pwm_can_sleep() - report whether PWM access will sleep
965 * @pwm: PWM device
966 *
967 * Returns: True if accessing the PWM can sleep, false otherwise.
968 */
969bool pwm_can_sleep(struct pwm_device *pwm)
970{
971 return true;
972}
973EXPORT_SYMBOL_GPL(pwm_can_sleep);
974
975#ifdef CONFIG_DEBUG_FS 977#ifdef CONFIG_DEBUG_FS
976static void pwm_dbg_show(struct pwm_chip *chip, struct seq_file *s) 978static void pwm_dbg_show(struct pwm_chip *chip, struct seq_file *s)
977{ 979{
diff --git a/drivers/pwm/pwm-atmel-hlcdc.c b/drivers/pwm/pwm-atmel-hlcdc.c
index 14fc011faa32..999187277ea5 100644
--- a/drivers/pwm/pwm-atmel-hlcdc.c
+++ b/drivers/pwm/pwm-atmel-hlcdc.c
@@ -270,7 +270,6 @@ static int atmel_hlcdc_pwm_probe(struct platform_device *pdev)
270 chip->chip.npwm = 1; 270 chip->chip.npwm = 1;
271 chip->chip.of_xlate = of_pwm_xlate_with_flags; 271 chip->chip.of_xlate = of_pwm_xlate_with_flags;
272 chip->chip.of_pwm_n_cells = 3; 272 chip->chip.of_pwm_n_cells = 3;
273 chip->chip.can_sleep = 1;
274 273
275 ret = pwmchip_add_with_polarity(&chip->chip, PWM_POLARITY_INVERSED); 274 ret = pwmchip_add_with_polarity(&chip->chip, PWM_POLARITY_INVERSED);
276 if (ret) { 275 if (ret) {
diff --git a/drivers/pwm/pwm-atmel.c b/drivers/pwm/pwm-atmel.c
index e6b8b1b7e6ba..67a7023be5c2 100644
--- a/drivers/pwm/pwm-atmel.c
+++ b/drivers/pwm/pwm-atmel.c
@@ -385,7 +385,6 @@ static int atmel_pwm_probe(struct platform_device *pdev)
385 385
386 atmel_pwm->chip.base = -1; 386 atmel_pwm->chip.base = -1;
387 atmel_pwm->chip.npwm = 4; 387 atmel_pwm->chip.npwm = 4;
388 atmel_pwm->chip.can_sleep = true;
389 atmel_pwm->config = data->config; 388 atmel_pwm->config = data->config;
390 atmel_pwm->updated_pwms = 0; 389 atmel_pwm->updated_pwms = 0;
391 mutex_init(&atmel_pwm->isr_lock); 390 mutex_init(&atmel_pwm->isr_lock);
diff --git a/drivers/pwm/pwm-bcm-kona.c b/drivers/pwm/pwm-bcm-kona.c
index c63418322023..09a95aeb3a70 100644
--- a/drivers/pwm/pwm-bcm-kona.c
+++ b/drivers/pwm/pwm-bcm-kona.c
@@ -276,7 +276,6 @@ static int kona_pwmc_probe(struct platform_device *pdev)
276 kp->chip.npwm = 6; 276 kp->chip.npwm = 6;
277 kp->chip.of_xlate = of_pwm_xlate_with_flags; 277 kp->chip.of_xlate = of_pwm_xlate_with_flags;
278 kp->chip.of_pwm_n_cells = 3; 278 kp->chip.of_pwm_n_cells = 3;
279 kp->chip.can_sleep = true;
280 279
281 res = platform_get_resource(pdev, IORESOURCE_MEM, 0); 280 res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
282 kp->base = devm_ioremap_resource(&pdev->dev, res); 281 kp->base = devm_ioremap_resource(&pdev->dev, res);
diff --git a/drivers/pwm/pwm-berlin.c b/drivers/pwm/pwm-berlin.c
index 01339c152ab0..771859aca4be 100644
--- a/drivers/pwm/pwm-berlin.c
+++ b/drivers/pwm/pwm-berlin.c
@@ -206,7 +206,6 @@ static int berlin_pwm_probe(struct platform_device *pdev)
206 pwm->chip.ops = &berlin_pwm_ops; 206 pwm->chip.ops = &berlin_pwm_ops;
207 pwm->chip.base = -1; 207 pwm->chip.base = -1;
208 pwm->chip.npwm = 4; 208 pwm->chip.npwm = 4;
209 pwm->chip.can_sleep = true;
210 pwm->chip.of_xlate = of_pwm_xlate_with_flags; 209 pwm->chip.of_xlate = of_pwm_xlate_with_flags;
211 pwm->chip.of_pwm_n_cells = 3; 210 pwm->chip.of_pwm_n_cells = 3;
212 211
diff --git a/drivers/pwm/pwm-brcmstb.c b/drivers/pwm/pwm-brcmstb.c
index 5d5adee16886..8063cffa1c96 100644
--- a/drivers/pwm/pwm-brcmstb.c
+++ b/drivers/pwm/pwm-brcmstb.c
@@ -270,7 +270,6 @@ static int brcmstb_pwm_probe(struct platform_device *pdev)
270 p->chip.ops = &brcmstb_pwm_ops; 270 p->chip.ops = &brcmstb_pwm_ops;
271 p->chip.base = -1; 271 p->chip.base = -1;
272 p->chip.npwm = 2; 272 p->chip.npwm = 2;
273 p->chip.can_sleep = true;
274 273
275 res = platform_get_resource(pdev, IORESOURCE_MEM, 0); 274 res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
276 p->base = devm_ioremap_resource(&pdev->dev, res); 275 p->base = devm_ioremap_resource(&pdev->dev, res);
diff --git a/drivers/pwm/pwm-fsl-ftm.c b/drivers/pwm/pwm-fsl-ftm.c
index fad968eb75f6..557b4ea16796 100644
--- a/drivers/pwm/pwm-fsl-ftm.c
+++ b/drivers/pwm/pwm-fsl-ftm.c
@@ -446,7 +446,6 @@ static int fsl_pwm_probe(struct platform_device *pdev)
446 fpc->chip.of_pwm_n_cells = 3; 446 fpc->chip.of_pwm_n_cells = 3;
447 fpc->chip.base = -1; 447 fpc->chip.base = -1;
448 fpc->chip.npwm = 8; 448 fpc->chip.npwm = 8;
449 fpc->chip.can_sleep = true;
450 449
451 ret = pwmchip_add(&fpc->chip); 450 ret = pwmchip_add(&fpc->chip);
452 if (ret < 0) { 451 if (ret < 0) {
diff --git a/drivers/pwm/pwm-imx.c b/drivers/pwm/pwm-imx.c
index d600fd5cd4ba..1223187ad354 100644
--- a/drivers/pwm/pwm-imx.c
+++ b/drivers/pwm/pwm-imx.c
@@ -304,7 +304,6 @@ static int imx_pwm_probe(struct platform_device *pdev)
304 imx->chip.dev = &pdev->dev; 304 imx->chip.dev = &pdev->dev;
305 imx->chip.base = -1; 305 imx->chip.base = -1;
306 imx->chip.npwm = 1; 306 imx->chip.npwm = 1;
307 imx->chip.can_sleep = true;
308 307
309 r = platform_get_resource(pdev, IORESOURCE_MEM, 0); 308 r = platform_get_resource(pdev, IORESOURCE_MEM, 0);
310 imx->mmio_base = devm_ioremap_resource(&pdev->dev, r); 309 imx->mmio_base = devm_ioremap_resource(&pdev->dev, r);
diff --git a/drivers/pwm/pwm-lp3943.c b/drivers/pwm/pwm-lp3943.c
index 872ea76a4f19..52584e9962ed 100644
--- a/drivers/pwm/pwm-lp3943.c
+++ b/drivers/pwm/pwm-lp3943.c
@@ -278,7 +278,6 @@ static int lp3943_pwm_probe(struct platform_device *pdev)
278 lp3943_pwm->chip.dev = &pdev->dev; 278 lp3943_pwm->chip.dev = &pdev->dev;
279 lp3943_pwm->chip.ops = &lp3943_pwm_ops; 279 lp3943_pwm->chip.ops = &lp3943_pwm_ops;
280 lp3943_pwm->chip.npwm = LP3943_NUM_PWMS; 280 lp3943_pwm->chip.npwm = LP3943_NUM_PWMS;
281 lp3943_pwm->chip.can_sleep = true;
282 281
283 platform_set_drvdata(pdev, lp3943_pwm); 282 platform_set_drvdata(pdev, lp3943_pwm);
284 283
diff --git a/drivers/pwm/pwm-mxs.c b/drivers/pwm/pwm-mxs.c
index 9a596324ebef..a6017ad9926c 100644
--- a/drivers/pwm/pwm-mxs.c
+++ b/drivers/pwm/pwm-mxs.c
@@ -151,7 +151,7 @@ static int mxs_pwm_probe(struct platform_device *pdev)
151 mxs->chip.dev = &pdev->dev; 151 mxs->chip.dev = &pdev->dev;
152 mxs->chip.ops = &mxs_pwm_ops; 152 mxs->chip.ops = &mxs_pwm_ops;
153 mxs->chip.base = -1; 153 mxs->chip.base = -1;
154 mxs->chip.can_sleep = true; 154
155 ret = of_property_read_u32(np, "fsl,pwm-number", &mxs->chip.npwm); 155 ret = of_property_read_u32(np, "fsl,pwm-number", &mxs->chip.npwm);
156 if (ret < 0) { 156 if (ret < 0) {
157 dev_err(&pdev->dev, "failed to get pwm number: %d\n", ret); 157 dev_err(&pdev->dev, "failed to get pwm number: %d\n", ret);
diff --git a/drivers/pwm/pwm-pca9685.c b/drivers/pwm/pwm-pca9685.c
index 117fccf7934a..c8282a2650be 100644
--- a/drivers/pwm/pwm-pca9685.c
+++ b/drivers/pwm/pwm-pca9685.c
@@ -343,7 +343,6 @@ static int pca9685_pwm_probe(struct i2c_client *client,
343 343
344 pca->chip.dev = &client->dev; 344 pca->chip.dev = &client->dev;
345 pca->chip.base = -1; 345 pca->chip.base = -1;
346 pca->chip.can_sleep = true;
347 346
348 return pwmchip_add(&pca->chip); 347 return pwmchip_add(&pca->chip);
349} 348}
diff --git a/drivers/pwm/pwm-sti.c b/drivers/pwm/pwm-sti.c
index dd82dc840af9..2b7c31c9d1ab 100644
--- a/drivers/pwm/pwm-sti.c
+++ b/drivers/pwm/pwm-sti.c
@@ -635,7 +635,6 @@ skip_cpt:
635 pc->chip.ops = &sti_pwm_ops; 635 pc->chip.ops = &sti_pwm_ops;
636 pc->chip.base = -1; 636 pc->chip.base = -1;
637 pc->chip.npwm = pc->cdata->pwm_num_devs; 637 pc->chip.npwm = pc->cdata->pwm_num_devs;
638 pc->chip.can_sleep = true;
639 638
640 ret = pwmchip_add(&pc->chip); 639 ret = pwmchip_add(&pc->chip);
641 if (ret < 0) { 640 if (ret < 0) {
diff --git a/drivers/pwm/pwm-sun4i.c b/drivers/pwm/pwm-sun4i.c
index b0803f6c64d9..1284ffa05921 100644
--- a/drivers/pwm/pwm-sun4i.c
+++ b/drivers/pwm/pwm-sun4i.c
@@ -340,7 +340,6 @@ static int sun4i_pwm_probe(struct platform_device *pdev)
340 pwm->chip.ops = &sun4i_pwm_ops; 340 pwm->chip.ops = &sun4i_pwm_ops;
341 pwm->chip.base = -1; 341 pwm->chip.base = -1;
342 pwm->chip.npwm = pwm->data->npwm; 342 pwm->chip.npwm = pwm->data->npwm;
343 pwm->chip.can_sleep = true;
344 pwm->chip.of_xlate = of_pwm_xlate_with_flags; 343 pwm->chip.of_xlate = of_pwm_xlate_with_flags;
345 pwm->chip.of_pwm_n_cells = 3; 344 pwm->chip.of_pwm_n_cells = 3;
346 345
diff --git a/drivers/pwm/pwm-twl-led.c b/drivers/pwm/pwm-twl-led.c
index b964470025c5..21eff991d0e3 100644
--- a/drivers/pwm/pwm-twl-led.c
+++ b/drivers/pwm/pwm-twl-led.c
@@ -303,7 +303,6 @@ static int twl_pwmled_probe(struct platform_device *pdev)
303 303
304 twl->chip.dev = &pdev->dev; 304 twl->chip.dev = &pdev->dev;
305 twl->chip.base = -1; 305 twl->chip.base = -1;
306 twl->chip.can_sleep = true;
307 306
308 mutex_init(&twl->mutex); 307 mutex_init(&twl->mutex);
309 308
diff --git a/drivers/pwm/pwm-twl.c b/drivers/pwm/pwm-twl.c
index 7a993b056638..9de617b76680 100644
--- a/drivers/pwm/pwm-twl.c
+++ b/drivers/pwm/pwm-twl.c
@@ -323,7 +323,6 @@ static int twl_pwm_probe(struct platform_device *pdev)
323 twl->chip.dev = &pdev->dev; 323 twl->chip.dev = &pdev->dev;
324 twl->chip.base = -1; 324 twl->chip.base = -1;
325 twl->chip.npwm = 2; 325 twl->chip.npwm = 2;
326 twl->chip.can_sleep = true;
327 326
328 mutex_init(&twl->mutex); 327 mutex_init(&twl->mutex);
329 328
diff --git a/drivers/staging/greybus/pwm.c b/drivers/staging/greybus/pwm.c
index c4bf3298ba07..f0404bc37123 100644
--- a/drivers/staging/greybus/pwm.c
+++ b/drivers/staging/greybus/pwm.c
@@ -284,7 +284,6 @@ static int gb_pwm_probe(struct gbphy_device *gbphy_dev,
284 pwm->ops = &gb_pwm_ops; 284 pwm->ops = &gb_pwm_ops;
285 pwm->base = -1; /* Allocate base dynamically */ 285 pwm->base = -1; /* Allocate base dynamically */
286 pwm->npwm = pwmc->pwm_max + 1; 286 pwm->npwm = pwmc->pwm_max + 1;
287 pwm->can_sleep = true; /* FIXME */
288 287
289 ret = pwmchip_add(pwm); 288 ret = pwmchip_add(pwm);
290 if (ret) { 289 if (ret) {
diff --git a/include/linux/pwm.h b/include/linux/pwm.h
index 2c6c5114c089..08fad7c6a471 100644
--- a/include/linux/pwm.h
+++ b/include/linux/pwm.h
@@ -287,8 +287,6 @@ struct pwm_ops {
287 * @pwms: array of PWM devices allocated by the framework 287 * @pwms: array of PWM devices allocated by the framework
288 * @of_xlate: request a PWM device given a device tree PWM specifier 288 * @of_xlate: request a PWM device given a device tree PWM specifier
289 * @of_pwm_n_cells: number of cells expected in the device tree PWM specifier 289 * @of_pwm_n_cells: number of cells expected in the device tree PWM specifier
290 * @can_sleep: must be true if the .config(), .enable() or .disable()
291 * operations may sleep
292 */ 290 */
293struct pwm_chip { 291struct pwm_chip {
294 struct device *dev; 292 struct device *dev;
@@ -302,7 +300,6 @@ struct pwm_chip {
302 struct pwm_device * (*of_xlate)(struct pwm_chip *pc, 300 struct pwm_device * (*of_xlate)(struct pwm_chip *pc,
303 const struct of_phandle_args *args); 301 const struct of_phandle_args *args);
304 unsigned int of_pwm_n_cells; 302 unsigned int of_pwm_n_cells;
305 bool can_sleep;
306}; 303};
307 304
308/** 305/**
@@ -451,8 +448,6 @@ struct pwm_device *devm_pwm_get(struct device *dev, const char *con_id);
451struct pwm_device *devm_of_pwm_get(struct device *dev, struct device_node *np, 448struct pwm_device *devm_of_pwm_get(struct device *dev, struct device_node *np,
452 const char *con_id); 449 const char *con_id);
453void devm_pwm_put(struct device *dev, struct pwm_device *pwm); 450void devm_pwm_put(struct device *dev, struct pwm_device *pwm);
454
455bool pwm_can_sleep(struct pwm_device *pwm);
456#else 451#else
457static inline struct pwm_device *pwm_request(int pwm_id, const char *label) 452static inline struct pwm_device *pwm_request(int pwm_id, const char *label)
458{ 453{
@@ -566,11 +561,6 @@ static inline struct pwm_device *devm_of_pwm_get(struct device *dev,
566static inline void devm_pwm_put(struct device *dev, struct pwm_device *pwm) 561static inline void devm_pwm_put(struct device *dev, struct pwm_device *pwm)
567{ 562{
568} 563}
569
570static inline bool pwm_can_sleep(struct pwm_device *pwm)
571{
572 return false;
573}
574#endif 564#endif
575 565
576static inline void pwm_apply_args(struct pwm_device *pwm) 566static inline void pwm_apply_args(struct pwm_device *pwm)
@@ -613,18 +603,25 @@ struct pwm_lookup {
613 const char *con_id; 603 const char *con_id;
614 unsigned int period; 604 unsigned int period;
615 enum pwm_polarity polarity; 605 enum pwm_polarity polarity;
606 const char *module; /* optional, may be NULL */
616}; 607};
617 608
618#define PWM_LOOKUP(_provider, _index, _dev_id, _con_id, _period, _polarity) \ 609#define PWM_LOOKUP_WITH_MODULE(_provider, _index, _dev_id, _con_id, \
619 { \ 610 _period, _polarity, _module) \
620 .provider = _provider, \ 611 { \
621 .index = _index, \ 612 .provider = _provider, \
622 .dev_id = _dev_id, \ 613 .index = _index, \
623 .con_id = _con_id, \ 614 .dev_id = _dev_id, \
624 .period = _period, \ 615 .con_id = _con_id, \
625 .polarity = _polarity \ 616 .period = _period, \
617 .polarity = _polarity, \
618 .module = _module, \
626 } 619 }
627 620
621#define PWM_LOOKUP(_provider, _index, _dev_id, _con_id, _period, _polarity) \
622 PWM_LOOKUP_WITH_MODULE(_provider, _index, _dev_id, _con_id, _period, \
623 _polarity, NULL)
624
628#if IS_ENABLED(CONFIG_PWM) 625#if IS_ENABLED(CONFIG_PWM)
629void pwm_add_table(struct pwm_lookup *table, size_t num); 626void pwm_add_table(struct pwm_lookup *table, size_t num);
630void pwm_remove_table(struct pwm_lookup *table, size_t num); 627void pwm_remove_table(struct pwm_lookup *table, size_t num);