Source
11
11
* with this program; if not, write to the Free Software Foundation, Inc.,
12
12
* 675 Mass Ave, Cambridge, MA 02139, USA.
13
13
*
14
14
*/
15
15
16
16
#include <linux/clk.h>
17
17
#include <linux/err.h>
18
18
#include <linux/gpio.h>
19
19
#include <linux/kernel.h>
20
20
#include <linux/module.h>
21
+
#include <linux/of_device.h>
21
22
#include <linux/platform_device.h>
22
23
#include <linux/pwm.h>
23
24
24
25
#include <asm/mach-jz4740/timer.h>
25
26
26
27
#define NUM_PWM 8
27
28
28
29
struct jz4740_pwm_chip {
29
30
struct pwm_chip chip;
30
31
struct clk *clk;
167
168
return -ENOMEM;
168
169
169
170
jz4740->clk = devm_clk_get(&pdev->dev, "ext");
170
171
if (IS_ERR(jz4740->clk))
171
172
return PTR_ERR(jz4740->clk);
172
173
173
174
jz4740->chip.dev = &pdev->dev;
174
175
jz4740->chip.ops = &jz4740_pwm_ops;
175
176
jz4740->chip.npwm = NUM_PWM;
176
177
jz4740->chip.base = -1;
178
+
jz4740->chip.of_xlate = of_pwm_xlate_with_flags;
179
+
jz4740->chip.of_pwm_n_cells = 3;
177
180
178
181
platform_set_drvdata(pdev, jz4740);
179
182
180
183
return pwmchip_add(&jz4740->chip);
181
184
}
182
185
183
186
static int jz4740_pwm_remove(struct platform_device *pdev)
184
187
{
185
188
struct jz4740_pwm_chip *jz4740 = platform_get_drvdata(pdev);
186
189
187
190
return pwmchip_remove(&jz4740->chip);
188
191
}
189
192
193
+
#ifdef CONFIG_OF
194
+
static const struct of_device_id jz4740_pwm_dt_ids[] = {
195
+
{ .compatible = "ingenic,jz4740-pwm", },
196
+
{ .compatible = "ingenic,jz4770-pwm", },
197
+
{ .compatible = "ingenic,jz4780-pwm", },
198
+
{},
199
+
};
200
+
MODULE_DEVICE_TABLE(of, jz4740_pwm_dt_ids);
201
+
#endif
202
+
190
203
static struct platform_driver jz4740_pwm_driver = {
191
204
.driver = {
192
205
.name = "jz4740-pwm",
206
+
.of_match_table = of_match_ptr(jz4740_pwm_dt_ids),
193
207
},
194
208
.probe = jz4740_pwm_probe,
195
209
.remove = jz4740_pwm_remove,
196
210
};
197
211
module_platform_driver(jz4740_pwm_driver);
198
212
199
213
MODULE_AUTHOR("Lars-Peter Clausen <lars@metafoo.de>");
200
214
MODULE_DESCRIPTION("Ingenic JZ4740 PWM driver");
201
215
MODULE_ALIAS("platform:jz4740-pwm");
202
216
MODULE_LICENSE("GPL");