diff options
author | Arnd Bergmann <arnd@arndb.de> | 2018-03-09 15:12:18 -0500 |
---|---|---|
committer | Arnd Bergmann <arnd@arndb.de> | 2018-03-26 09:57:08 -0400 |
commit | 4dab216d1fc1ec6783df1b78de5a00df1a7d6991 (patch) | |
tree | af90311728f827aa6e108190407bf8cda48198f1 | |
parent | e58af24ccd8d235c7aaa0ef0fc63a18c5d2cb88e (diff) |
pwm: remove pwm-bfin driver
The blackfin architecture is getting removed, so this driver is now
obsolete as well.
Acked-by: Thierry Reding <thierry.reding@gmail.com>
Acked-by: Aaron Wu <aaron.wu@analog.com>
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
-rw-r--r-- | drivers/pwm/Kconfig | 9 | ||||
-rw-r--r-- | drivers/pwm/Makefile | 1 | ||||
-rw-r--r-- | drivers/pwm/pwm-bfin.c | 157 |
3 files changed, 0 insertions, 167 deletions
diff --git a/drivers/pwm/Kconfig b/drivers/pwm/Kconfig index f16aad3bf5d6..38d49dbbf9b7 100644 --- a/drivers/pwm/Kconfig +++ b/drivers/pwm/Kconfig | |||
@@ -113,15 +113,6 @@ config PWM_BERLIN | |||
113 | To compile this driver as a module, choose M here: the module | 113 | To compile this driver as a module, choose M here: the module |
114 | will be called pwm-berlin. | 114 | will be called pwm-berlin. |
115 | 115 | ||
116 | config PWM_BFIN | ||
117 | tristate "Blackfin PWM support" | ||
118 | depends on BFIN_GPTIMERS | ||
119 | help | ||
120 | Generic PWM framework driver for Blackfin. | ||
121 | |||
122 | To compile this driver as a module, choose M here: the module | ||
123 | will be called pwm-bfin. | ||
124 | |||
125 | config PWM_BRCMSTB | 116 | config PWM_BRCMSTB |
126 | tristate "Broadcom STB PWM support" | 117 | tristate "Broadcom STB PWM support" |
127 | depends on ARCH_BRCMSTB || BMIPS_GENERIC | 118 | depends on ARCH_BRCMSTB || BMIPS_GENERIC |
diff --git a/drivers/pwm/Makefile b/drivers/pwm/Makefile index 0258a745f30c..9c676a0dadf5 100644 --- a/drivers/pwm/Makefile +++ b/drivers/pwm/Makefile | |||
@@ -9,7 +9,6 @@ obj-$(CONFIG_PWM_BCM_IPROC) += pwm-bcm-iproc.o | |||
9 | obj-$(CONFIG_PWM_BCM_KONA) += pwm-bcm-kona.o | 9 | obj-$(CONFIG_PWM_BCM_KONA) += pwm-bcm-kona.o |
10 | obj-$(CONFIG_PWM_BCM2835) += pwm-bcm2835.o | 10 | obj-$(CONFIG_PWM_BCM2835) += pwm-bcm2835.o |
11 | obj-$(CONFIG_PWM_BERLIN) += pwm-berlin.o | 11 | obj-$(CONFIG_PWM_BERLIN) += pwm-berlin.o |
12 | obj-$(CONFIG_PWM_BFIN) += pwm-bfin.o | ||
13 | obj-$(CONFIG_PWM_BRCMSTB) += pwm-brcmstb.o | 12 | obj-$(CONFIG_PWM_BRCMSTB) += pwm-brcmstb.o |
14 | obj-$(CONFIG_PWM_CLPS711X) += pwm-clps711x.o | 13 | obj-$(CONFIG_PWM_CLPS711X) += pwm-clps711x.o |
15 | obj-$(CONFIG_PWM_CRC) += pwm-crc.o | 14 | obj-$(CONFIG_PWM_CRC) += pwm-crc.o |
diff --git a/drivers/pwm/pwm-bfin.c b/drivers/pwm/pwm-bfin.c deleted file mode 100644 index a9a88137f2cb..000000000000 --- a/drivers/pwm/pwm-bfin.c +++ /dev/null | |||
@@ -1,157 +0,0 @@ | |||
1 | /* | ||
2 | * Blackfin Pulse Width Modulation (PWM) core | ||
3 | * | ||
4 | * Copyright (c) 2011 Analog Devices Inc. | ||
5 | * | ||
6 | * Licensed under the GPL-2 or later. | ||
7 | */ | ||
8 | |||
9 | #include <linux/module.h> | ||
10 | #include <linux/platform_device.h> | ||
11 | #include <linux/pwm.h> | ||
12 | #include <linux/slab.h> | ||
13 | |||
14 | #include <asm/gptimers.h> | ||
15 | #include <asm/portmux.h> | ||
16 | |||
17 | struct bfin_pwm_chip { | ||
18 | struct pwm_chip chip; | ||
19 | }; | ||
20 | |||
21 | struct bfin_pwm { | ||
22 | unsigned short pin; | ||
23 | }; | ||
24 | |||
25 | static const unsigned short pwm_to_gptimer_per[] = { | ||
26 | P_TMR0, P_TMR1, P_TMR2, P_TMR3, P_TMR4, P_TMR5, | ||
27 | P_TMR6, P_TMR7, P_TMR8, P_TMR9, P_TMR10, P_TMR11, | ||
28 | }; | ||
29 | |||
30 | static int bfin_pwm_request(struct pwm_chip *chip, struct pwm_device *pwm) | ||
31 | { | ||
32 | struct bfin_pwm *priv; | ||
33 | int ret; | ||
34 | |||
35 | if (pwm->hwpwm >= ARRAY_SIZE(pwm_to_gptimer_per)) | ||
36 | return -EINVAL; | ||
37 | |||
38 | priv = kzalloc(sizeof(*priv), GFP_KERNEL); | ||
39 | if (!priv) | ||
40 | return -ENOMEM; | ||
41 | |||
42 | priv->pin = pwm_to_gptimer_per[pwm->hwpwm]; | ||
43 | |||
44 | ret = peripheral_request(priv->pin, NULL); | ||
45 | if (ret) { | ||
46 | kfree(priv); | ||
47 | return ret; | ||
48 | } | ||
49 | |||
50 | pwm_set_chip_data(pwm, priv); | ||
51 | |||
52 | return 0; | ||
53 | } | ||
54 | |||
55 | static void bfin_pwm_free(struct pwm_chip *chip, struct pwm_device *pwm) | ||
56 | { | ||
57 | struct bfin_pwm *priv = pwm_get_chip_data(pwm); | ||
58 | |||
59 | if (priv) { | ||
60 | peripheral_free(priv->pin); | ||
61 | kfree(priv); | ||
62 | } | ||
63 | } | ||
64 | |||
65 | static int bfin_pwm_config(struct pwm_chip *chip, struct pwm_device *pwm, | ||
66 | int duty_ns, int period_ns) | ||
67 | { | ||
68 | struct bfin_pwm *priv = pwm_get_chip_data(pwm); | ||
69 | unsigned long period, duty; | ||
70 | unsigned long long val; | ||
71 | |||
72 | val = (unsigned long long)get_sclk() * period_ns; | ||
73 | do_div(val, NSEC_PER_SEC); | ||
74 | period = val; | ||
75 | |||
76 | val = (unsigned long long)period * duty_ns; | ||
77 | do_div(val, period_ns); | ||
78 | duty = period - val; | ||
79 | |||
80 | if (duty >= period) | ||
81 | duty = period - 1; | ||
82 | |||
83 | set_gptimer_config(priv->pin, TIMER_MODE_PWM | TIMER_PERIOD_CNT); | ||
84 | set_gptimer_pwidth(priv->pin, duty); | ||
85 | set_gptimer_period(priv->pin, period); | ||
86 | |||
87 | return 0; | ||
88 | } | ||
89 | |||
90 | static int bfin_pwm_enable(struct pwm_chip *chip, struct pwm_device *pwm) | ||
91 | { | ||
92 | struct bfin_pwm *priv = pwm_get_chip_data(pwm); | ||
93 | |||
94 | enable_gptimer(priv->pin); | ||
95 | |||
96 | return 0; | ||
97 | } | ||
98 | |||
99 | static void bfin_pwm_disable(struct pwm_chip *chip, struct pwm_device *pwm) | ||
100 | { | ||
101 | struct bfin_pwm *priv = pwm_get_chip_data(pwm); | ||
102 | |||
103 | disable_gptimer(priv->pin); | ||
104 | } | ||
105 | |||
106 | static const struct pwm_ops bfin_pwm_ops = { | ||
107 | .request = bfin_pwm_request, | ||
108 | .free = bfin_pwm_free, | ||
109 | .config = bfin_pwm_config, | ||
110 | .enable = bfin_pwm_enable, | ||
111 | .disable = bfin_pwm_disable, | ||
112 | .owner = THIS_MODULE, | ||
113 | }; | ||
114 | |||
115 | static int bfin_pwm_probe(struct platform_device *pdev) | ||
116 | { | ||
117 | struct bfin_pwm_chip *pwm; | ||
118 | int ret; | ||
119 | |||
120 | pwm = devm_kzalloc(&pdev->dev, sizeof(*pwm), GFP_KERNEL); | ||
121 | if (!pwm) | ||
122 | return -ENOMEM; | ||
123 | |||
124 | platform_set_drvdata(pdev, pwm); | ||
125 | |||
126 | pwm->chip.dev = &pdev->dev; | ||
127 | pwm->chip.ops = &bfin_pwm_ops; | ||
128 | pwm->chip.base = -1; | ||
129 | pwm->chip.npwm = 12; | ||
130 | |||
131 | ret = pwmchip_add(&pwm->chip); | ||
132 | if (ret < 0) { | ||
133 | dev_err(&pdev->dev, "pwmchip_add() failed: %d\n", ret); | ||
134 | return ret; | ||
135 | } | ||
136 | |||
137 | return 0; | ||
138 | } | ||
139 | |||
140 | static int bfin_pwm_remove(struct platform_device *pdev) | ||
141 | { | ||
142 | struct bfin_pwm_chip *pwm = platform_get_drvdata(pdev); | ||
143 | |||
144 | return pwmchip_remove(&pwm->chip); | ||
145 | } | ||
146 | |||
147 | static struct platform_driver bfin_pwm_driver = { | ||
148 | .driver = { | ||
149 | .name = "bfin-pwm", | ||
150 | }, | ||
151 | .probe = bfin_pwm_probe, | ||
152 | .remove = bfin_pwm_remove, | ||
153 | }; | ||
154 | |||
155 | module_platform_driver(bfin_pwm_driver); | ||
156 | |||
157 | MODULE_LICENSE("GPL"); | ||