summaryrefslogtreecommitdiffstats
path: root/include/pwm.h
blob: 911c760839fac22c5e0696b48a476c2d736f15f9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
#ifndef __PWM_H
#define __PWM_H

struct pwm_device;
struct device_d;

/*
 * pwm_request - request a PWM device
 */
struct pwm_device *pwm_request(const char *pwmname);

struct pwm_device *of_pwm_request(struct device_node *np, const char *con_id);

/*
 * pwm_free - free a PWM device
 */
void pwm_free(struct pwm_device *pwm);

/*
 * pwm_config - change a PWM device configuration
 */
int pwm_config(struct pwm_device *pwm, int duty_ns, int period_ns);

/*
 * pwm_enable - start a PWM output toggling
 */
int pwm_enable(struct pwm_device *pwm);

/*
 * pwm_disable - stop a PWM output toggling
 */
void pwm_disable(struct pwm_device *pwm);

void pwm_set_period(struct pwm_device *pwm, unsigned int period);
unsigned int pwm_get_period(struct pwm_device *pwm);
void pwm_set_duty_cycle(struct pwm_device *pwm, unsigned int duty);
unsigned int pwm_get_duty_cycle(struct pwm_device *pwm);

struct pwm_chip;

/**
 * struct pwm_ops - PWM operations
 * @request: optional hook for requesting a PWM
 * @free: optional hook for freeing a PWM
 * @config: configure duty cycles and period length for this PWM
 * @enable: enable PWM output toggling
 * @disable: disable PWM output toggling
 */
struct pwm_ops {
	int (*request)(struct pwm_chip *chip);
	void (*free)(struct pwm_chip *chip);
	int (*config)(struct pwm_chip *chip, int duty_ns,
						int period_ns);
	int (*enable)(struct pwm_chip *chip);
	void (*disable)(struct pwm_chip *chip);
};

/**
 * struct pwm_chip - abstract a PWM
 * @id: The id of this pwm
 * @devname: unique identifier for this pwm
 * @ops: The callbacks for this PWM
 * @duty_ns: The duty cycle of the PWM, in nano-seconds
 * @period_ns: The period of the PWM, in nano-seconds
 */
struct pwm_chip {
	int			id;
	const char		*devname;
	struct pwm_ops		*ops;
	int			duty_ns;
	int			period_ns;
};

int pwmchip_add(struct pwm_chip *chip, struct device_d *dev);
int pwmchip_remove(struct pwm_chip *chip);

#endif /* __PWM_H */