xref: /linux-6.15/include/linux/pwm.h (revision 09a7e4a3)
11a189b97SRussell King #ifndef __LINUX_PWM_H
21a189b97SRussell King #define __LINUX_PWM_H
31a189b97SRussell King 
40bcf168bSTushar Behera #include <linux/err.h>
5d1cd2142SJonathan Richardson #include <linux/mutex.h>
67299ab70SThierry Reding #include <linux/of.h>
77299ab70SThierry Reding 
81a189b97SRussell King struct pwm_device;
962099abfSThierry Reding struct seq_file;
101a189b97SRussell King 
11557fe99dSSascha Hauer #if IS_ENABLED(CONFIG_PWM)
121a189b97SRussell King /*
131a189b97SRussell King  * pwm_request - request a PWM device
141a189b97SRussell King  */
151a189b97SRussell King struct pwm_device *pwm_request(int pwm_id, const char *label);
161a189b97SRussell King 
171a189b97SRussell King /*
181a189b97SRussell King  * pwm_free - free a PWM device
191a189b97SRussell King  */
201a189b97SRussell King void pwm_free(struct pwm_device *pwm);
211a189b97SRussell King 
221a189b97SRussell King /*
231a189b97SRussell King  * pwm_config - change a PWM device configuration
241a189b97SRussell King  */
251a189b97SRussell King int pwm_config(struct pwm_device *pwm, int duty_ns, int period_ns);
261a189b97SRussell King 
271a189b97SRussell King /*
281a189b97SRussell King  * pwm_enable - start a PWM output toggling
291a189b97SRussell King  */
301a189b97SRussell King int pwm_enable(struct pwm_device *pwm);
311a189b97SRussell King 
321a189b97SRussell King /*
331a189b97SRussell King  * pwm_disable - stop a PWM output toggling
341a189b97SRussell King  */
351a189b97SRussell King void pwm_disable(struct pwm_device *pwm);
360bcf168bSTushar Behera #else
370bcf168bSTushar Behera static inline struct pwm_device *pwm_request(int pwm_id, const char *label)
380bcf168bSTushar Behera {
390bcf168bSTushar Behera 	return ERR_PTR(-ENODEV);
400bcf168bSTushar Behera }
411a189b97SRussell King 
420bcf168bSTushar Behera static inline void pwm_free(struct pwm_device *pwm)
430bcf168bSTushar Behera {
440bcf168bSTushar Behera }
450bcf168bSTushar Behera 
460bcf168bSTushar Behera static inline int pwm_config(struct pwm_device *pwm, int duty_ns, int period_ns)
470bcf168bSTushar Behera {
480bcf168bSTushar Behera 	return -EINVAL;
490bcf168bSTushar Behera }
500bcf168bSTushar Behera 
510bcf168bSTushar Behera static inline int pwm_enable(struct pwm_device *pwm)
520bcf168bSTushar Behera {
530bcf168bSTushar Behera 	return -EINVAL;
540bcf168bSTushar Behera }
550bcf168bSTushar Behera 
560bcf168bSTushar Behera static inline void pwm_disable(struct pwm_device *pwm)
570bcf168bSTushar Behera {
580bcf168bSTushar Behera }
590bcf168bSTushar Behera #endif
600bcf168bSTushar Behera 
610c2498f1SSascha Hauer struct pwm_chip;
620c2498f1SSascha Hauer 
630aa0869cSPhilip, Avinash /**
640aa0869cSPhilip, Avinash  * enum pwm_polarity - polarity of a PWM signal
650aa0869cSPhilip, Avinash  * @PWM_POLARITY_NORMAL: a high signal for the duration of the duty-
660aa0869cSPhilip, Avinash  * cycle, followed by a low signal for the remainder of the pulse
670aa0869cSPhilip, Avinash  * period
680aa0869cSPhilip, Avinash  * @PWM_POLARITY_INVERSED: a low signal for the duration of the duty-
690aa0869cSPhilip, Avinash  * cycle, followed by a high signal for the remainder of the pulse
700aa0869cSPhilip, Avinash  * period
710aa0869cSPhilip, Avinash  */
720aa0869cSPhilip, Avinash enum pwm_polarity {
730aa0869cSPhilip, Avinash 	PWM_POLARITY_NORMAL,
740aa0869cSPhilip, Avinash 	PWM_POLARITY_INVERSED,
750aa0869cSPhilip, Avinash };
760aa0869cSPhilip, Avinash 
77e39c0df1SBoris Brezillon /**
78e39c0df1SBoris Brezillon  * struct pwm_args - board-dependent PWM arguments
79e39c0df1SBoris Brezillon  * @period: reference period
80e39c0df1SBoris Brezillon  * @polarity: reference polarity
81e39c0df1SBoris Brezillon  *
82e39c0df1SBoris Brezillon  * This structure describes board-dependent arguments attached to a PWM
83e39c0df1SBoris Brezillon  * device. These arguments are usually retrieved from the PWM lookup table or
84e39c0df1SBoris Brezillon  * device tree.
85e39c0df1SBoris Brezillon  *
86e39c0df1SBoris Brezillon  * Do not confuse this with the PWM state: PWM arguments represent the initial
87e39c0df1SBoris Brezillon  * configuration that users want to use on this PWM device rather than the
88e39c0df1SBoris Brezillon  * current PWM hardware state.
89e39c0df1SBoris Brezillon  */
90e39c0df1SBoris Brezillon struct pwm_args {
91e39c0df1SBoris Brezillon 	unsigned int period;
92e39c0df1SBoris Brezillon 	enum pwm_polarity polarity;
93e39c0df1SBoris Brezillon };
94e39c0df1SBoris Brezillon 
95f051c466SThierry Reding enum {
96f051c466SThierry Reding 	PWMF_REQUESTED = 1 << 0,
97*09a7e4a3SBoris Brezillon 	PWMF_EXPORTED = 1 << 1,
98f051c466SThierry Reding };
99f051c466SThierry Reding 
10043a276b0SBoris Brezillon /*
10143a276b0SBoris Brezillon  * struct pwm_state - state of a PWM channel
10243a276b0SBoris Brezillon  * @period: PWM period (in nanoseconds)
10343a276b0SBoris Brezillon  * @duty_cycle: PWM duty cycle (in nanoseconds)
10443a276b0SBoris Brezillon  * @polarity: PWM polarity
105*09a7e4a3SBoris Brezillon  * @enabled: PWM enabled status
10643a276b0SBoris Brezillon  */
10743a276b0SBoris Brezillon struct pwm_state {
10843a276b0SBoris Brezillon 	unsigned int period;
10943a276b0SBoris Brezillon 	unsigned int duty_cycle;
11043a276b0SBoris Brezillon 	enum pwm_polarity polarity;
111*09a7e4a3SBoris Brezillon 	bool enabled;
11243a276b0SBoris Brezillon };
11343a276b0SBoris Brezillon 
11404883802SThierry Reding /**
11504883802SThierry Reding  * struct pwm_device - PWM channel object
11604883802SThierry Reding  * @label: name of the PWM device
11704883802SThierry Reding  * @flags: flags associated with the PWM device
11804883802SThierry Reding  * @hwpwm: per-chip relative index of the PWM device
11904883802SThierry Reding  * @pwm: global index of the PWM device
12004883802SThierry Reding  * @chip: PWM chip providing this PWM device
12104883802SThierry Reding  * @chip_data: chip-private data associated with the PWM device
122e39c0df1SBoris Brezillon  * @args: PWM arguments
12343a276b0SBoris Brezillon  * @state: curent PWM channel state
12404883802SThierry Reding  */
125f051c466SThierry Reding struct pwm_device {
126f051c466SThierry Reding 	const char *label;
127f051c466SThierry Reding 	unsigned long flags;
128f051c466SThierry Reding 	unsigned int hwpwm;
129f051c466SThierry Reding 	unsigned int pwm;
130f051c466SThierry Reding 	struct pwm_chip *chip;
131f051c466SThierry Reding 	void *chip_data;
132f051c466SThierry Reding 
133e39c0df1SBoris Brezillon 	struct pwm_args args;
13443a276b0SBoris Brezillon 	struct pwm_state state;
135f051c466SThierry Reding };
136f051c466SThierry Reding 
13743a276b0SBoris Brezillon /**
13843a276b0SBoris Brezillon  * pwm_get_state() - retrieve the current PWM state
13943a276b0SBoris Brezillon  * @pwm: PWM device
14043a276b0SBoris Brezillon  * @state: state to fill with the current PWM state
14143a276b0SBoris Brezillon  */
14243a276b0SBoris Brezillon static inline void pwm_get_state(const struct pwm_device *pwm,
14343a276b0SBoris Brezillon 				 struct pwm_state *state)
14443a276b0SBoris Brezillon {
14543a276b0SBoris Brezillon 	*state = pwm->state;
14643a276b0SBoris Brezillon }
14743a276b0SBoris Brezillon 
1485c31252cSBoris Brezillon static inline bool pwm_is_enabled(const struct pwm_device *pwm)
1495c31252cSBoris Brezillon {
150*09a7e4a3SBoris Brezillon 	struct pwm_state state;
151*09a7e4a3SBoris Brezillon 
152*09a7e4a3SBoris Brezillon 	pwm_get_state(pwm, &state);
153*09a7e4a3SBoris Brezillon 
154*09a7e4a3SBoris Brezillon 	return state.enabled;
1555c31252cSBoris Brezillon }
1565c31252cSBoris Brezillon 
157f051c466SThierry Reding static inline void pwm_set_period(struct pwm_device *pwm, unsigned int period)
158f051c466SThierry Reding {
159f051c466SThierry Reding 	if (pwm)
16043a276b0SBoris Brezillon 		pwm->state.period = period;
161f051c466SThierry Reding }
162f051c466SThierry Reding 
163a1cf4217SBoris Brezillon static inline unsigned int pwm_get_period(const struct pwm_device *pwm)
164f051c466SThierry Reding {
16543a276b0SBoris Brezillon 	struct pwm_state state;
16643a276b0SBoris Brezillon 
16743a276b0SBoris Brezillon 	pwm_get_state(pwm, &state);
16843a276b0SBoris Brezillon 
16943a276b0SBoris Brezillon 	return state.period;
170f051c466SThierry Reding }
171f051c466SThierry Reding 
17276abbddeSH Hartley Sweeten static inline void pwm_set_duty_cycle(struct pwm_device *pwm, unsigned int duty)
17376abbddeSH Hartley Sweeten {
17476abbddeSH Hartley Sweeten 	if (pwm)
17543a276b0SBoris Brezillon 		pwm->state.duty_cycle = duty;
17676abbddeSH Hartley Sweeten }
17776abbddeSH Hartley Sweeten 
178a1cf4217SBoris Brezillon static inline unsigned int pwm_get_duty_cycle(const struct pwm_device *pwm)
17976abbddeSH Hartley Sweeten {
18043a276b0SBoris Brezillon 	struct pwm_state state;
18143a276b0SBoris Brezillon 
18243a276b0SBoris Brezillon 	pwm_get_state(pwm, &state);
18343a276b0SBoris Brezillon 
18443a276b0SBoris Brezillon 	return state.duty_cycle;
18576abbddeSH Hartley Sweeten }
18676abbddeSH Hartley Sweeten 
1870aa0869cSPhilip, Avinash /*
1880aa0869cSPhilip, Avinash  * pwm_set_polarity - configure the polarity of a PWM signal
1890aa0869cSPhilip, Avinash  */
1900aa0869cSPhilip, Avinash int pwm_set_polarity(struct pwm_device *pwm, enum pwm_polarity polarity);
1910aa0869cSPhilip, Avinash 
192011e7631SBoris Brezillon static inline enum pwm_polarity pwm_get_polarity(const struct pwm_device *pwm)
193011e7631SBoris Brezillon {
19443a276b0SBoris Brezillon 	struct pwm_state state;
19543a276b0SBoris Brezillon 
19643a276b0SBoris Brezillon 	pwm_get_state(pwm, &state);
19743a276b0SBoris Brezillon 
19843a276b0SBoris Brezillon 	return state.polarity;
199011e7631SBoris Brezillon }
200011e7631SBoris Brezillon 
201e39c0df1SBoris Brezillon static inline void pwm_get_args(const struct pwm_device *pwm,
202e39c0df1SBoris Brezillon 				struct pwm_args *args)
203e39c0df1SBoris Brezillon {
204e39c0df1SBoris Brezillon 	*args = pwm->args;
205e39c0df1SBoris Brezillon }
206e39c0df1SBoris Brezillon 
207e39c0df1SBoris Brezillon static inline void pwm_apply_args(struct pwm_device *pwm)
208e39c0df1SBoris Brezillon {
209e39c0df1SBoris Brezillon 	pwm_set_polarity(pwm, pwm->args.polarity);
210e39c0df1SBoris Brezillon }
211e39c0df1SBoris Brezillon 
2120c2498f1SSascha Hauer /**
2130c2498f1SSascha Hauer  * struct pwm_ops - PWM controller operations
2140c2498f1SSascha Hauer  * @request: optional hook for requesting a PWM
2150c2498f1SSascha Hauer  * @free: optional hook for freeing a PWM
2160c2498f1SSascha Hauer  * @config: configure duty cycles and period length for this PWM
2170aa0869cSPhilip, Avinash  * @set_polarity: configure the polarity of this PWM
2180c2498f1SSascha Hauer  * @enable: enable PWM output toggling
2190c2498f1SSascha Hauer  * @disable: disable PWM output toggling
22062099abfSThierry Reding  * @dbg_show: optional routine to show contents in debugfs
2210c2498f1SSascha Hauer  * @owner: helps prevent removal of modules exporting active PWMs
2220c2498f1SSascha Hauer  */
2230c2498f1SSascha Hauer struct pwm_ops {
2246bc7064aSThierry Reding 	int (*request)(struct pwm_chip *chip, struct pwm_device *pwm);
2256bc7064aSThierry Reding 	void (*free)(struct pwm_chip *chip, struct pwm_device *pwm);
2266bc7064aSThierry Reding 	int (*config)(struct pwm_chip *chip, struct pwm_device *pwm,
227f051c466SThierry Reding 		      int duty_ns, int period_ns);
2286bc7064aSThierry Reding 	int (*set_polarity)(struct pwm_chip *chip, struct pwm_device *pwm,
2290aa0869cSPhilip, Avinash 			    enum pwm_polarity polarity);
2306bc7064aSThierry Reding 	int (*enable)(struct pwm_chip *chip, struct pwm_device *pwm);
2316bc7064aSThierry Reding 	void (*disable)(struct pwm_chip *chip, struct pwm_device *pwm);
23262099abfSThierry Reding #ifdef CONFIG_DEBUG_FS
2336bc7064aSThierry Reding 	void (*dbg_show)(struct pwm_chip *chip, struct seq_file *s);
23462099abfSThierry Reding #endif
2350c2498f1SSascha Hauer 	struct module *owner;
2360c2498f1SSascha Hauer };
2370c2498f1SSascha Hauer 
2380c2498f1SSascha Hauer /**
239f051c466SThierry Reding  * struct pwm_chip - abstract a PWM controller
240f051c466SThierry Reding  * @dev: device providing the PWMs
241f051c466SThierry Reding  * @list: list node for internal use
242f051c466SThierry Reding  * @ops: callbacks for this PWM controller
243f051c466SThierry Reding  * @base: number of first PWM controlled by this chip
244f051c466SThierry Reding  * @npwm: number of PWMs controlled by this chip
245f051c466SThierry Reding  * @pwms: array of PWM devices allocated by the framework
24604883802SThierry Reding  * @of_xlate: request a PWM device given a device tree PWM specifier
24704883802SThierry Reding  * @of_pwm_n_cells: number of cells expected in the device tree PWM specifier
2486e69ab13SFlorian Vaussard  * @can_sleep: must be true if the .config(), .enable() or .disable()
2496e69ab13SFlorian Vaussard  *             operations may sleep
2500c2498f1SSascha Hauer  */
2510c2498f1SSascha Hauer struct pwm_chip {
252f051c466SThierry Reding 	struct device *dev;
253f051c466SThierry Reding 	struct list_head list;
254f051c466SThierry Reding 	const struct pwm_ops *ops;
255f051c466SThierry Reding 	int base;
256f051c466SThierry Reding 	unsigned int npwm;
257f051c466SThierry Reding 
258f051c466SThierry Reding 	struct pwm_device *pwms;
2597299ab70SThierry Reding 
2607299ab70SThierry Reding 	struct pwm_device * (*of_xlate)(struct pwm_chip *pc,
2617299ab70SThierry Reding 					const struct of_phandle_args *args);
2627299ab70SThierry Reding 	unsigned int of_pwm_n_cells;
2636e69ab13SFlorian Vaussard 	bool can_sleep;
2640c2498f1SSascha Hauer };
2650c2498f1SSascha Hauer 
2660bcf168bSTushar Behera #if IS_ENABLED(CONFIG_PWM)
267f051c466SThierry Reding int pwm_set_chip_data(struct pwm_device *pwm, void *data);
268f051c466SThierry Reding void *pwm_get_chip_data(struct pwm_device *pwm);
269f051c466SThierry Reding 
270b6a00faeSTim Kryger int pwmchip_add_with_polarity(struct pwm_chip *chip,
271b6a00faeSTim Kryger 			      enum pwm_polarity polarity);
2720c2498f1SSascha Hauer int pwmchip_add(struct pwm_chip *chip);
2730c2498f1SSascha Hauer int pwmchip_remove(struct pwm_chip *chip);
274f051c466SThierry Reding struct pwm_device *pwm_request_from_chip(struct pwm_chip *chip,
275f051c466SThierry Reding 					 unsigned int index,
276f051c466SThierry Reding 					 const char *label);
2778138d2ddSThierry Reding 
27883af2402SPhilip, Avinash struct pwm_device *of_pwm_xlate_with_flags(struct pwm_chip *pc,
27983af2402SPhilip, Avinash 		const struct of_phandle_args *args);
28083af2402SPhilip, Avinash 
281d4c0c470SPeter Ujfalusi struct pwm_device *pwm_get(struct device *dev, const char *con_id);
2828eb96127SPeter Ujfalusi struct pwm_device *of_pwm_get(struct device_node *np, const char *con_id);
2838138d2ddSThierry Reding void pwm_put(struct pwm_device *pwm);
2848138d2ddSThierry Reding 
285d4c0c470SPeter Ujfalusi struct pwm_device *devm_pwm_get(struct device *dev, const char *con_id);
286261a5eddSPeter Ujfalusi struct pwm_device *devm_of_pwm_get(struct device *dev, struct device_node *np,
287261a5eddSPeter Ujfalusi 				   const char *con_id);
2886354316dSAlexandre Courbot void devm_pwm_put(struct device *dev, struct pwm_device *pwm);
2896e69ab13SFlorian Vaussard 
2906e69ab13SFlorian Vaussard bool pwm_can_sleep(struct pwm_device *pwm);
2910bcf168bSTushar Behera #else
2920bcf168bSTushar Behera static inline int pwm_set_chip_data(struct pwm_device *pwm, void *data)
2930bcf168bSTushar Behera {
2940bcf168bSTushar Behera 	return -EINVAL;
2950bcf168bSTushar Behera }
2960bcf168bSTushar Behera 
2970bcf168bSTushar Behera static inline void *pwm_get_chip_data(struct pwm_device *pwm)
2980bcf168bSTushar Behera {
2990bcf168bSTushar Behera 	return NULL;
3000bcf168bSTushar Behera }
3010bcf168bSTushar Behera 
3020bcf168bSTushar Behera static inline int pwmchip_add(struct pwm_chip *chip)
3030bcf168bSTushar Behera {
3040bcf168bSTushar Behera 	return -EINVAL;
3050bcf168bSTushar Behera }
3060bcf168bSTushar Behera 
307b6a00faeSTim Kryger static inline int pwmchip_add_inversed(struct pwm_chip *chip)
308b6a00faeSTim Kryger {
309b6a00faeSTim Kryger 	return -EINVAL;
310b6a00faeSTim Kryger }
311b6a00faeSTim Kryger 
3120bcf168bSTushar Behera static inline int pwmchip_remove(struct pwm_chip *chip)
3130bcf168bSTushar Behera {
3140bcf168bSTushar Behera 	return -EINVAL;
3150bcf168bSTushar Behera }
3160bcf168bSTushar Behera 
3170bcf168bSTushar Behera static inline struct pwm_device *pwm_request_from_chip(struct pwm_chip *chip,
3180bcf168bSTushar Behera 						       unsigned int index,
3190bcf168bSTushar Behera 						       const char *label)
3200bcf168bSTushar Behera {
3210bcf168bSTushar Behera 	return ERR_PTR(-ENODEV);
3220bcf168bSTushar Behera }
3230bcf168bSTushar Behera 
3240bcf168bSTushar Behera static inline struct pwm_device *pwm_get(struct device *dev,
3250bcf168bSTushar Behera 					 const char *consumer)
3260bcf168bSTushar Behera {
3270bcf168bSTushar Behera 	return ERR_PTR(-ENODEV);
3280bcf168bSTushar Behera }
3290bcf168bSTushar Behera 
3308eb96127SPeter Ujfalusi static inline struct pwm_device *of_pwm_get(struct device_node *np,
3318eb96127SPeter Ujfalusi 					    const char *con_id)
3328eb96127SPeter Ujfalusi {
3338eb96127SPeter Ujfalusi 	return ERR_PTR(-ENODEV);
3348eb96127SPeter Ujfalusi }
3358eb96127SPeter Ujfalusi 
3360bcf168bSTushar Behera static inline void pwm_put(struct pwm_device *pwm)
3370bcf168bSTushar Behera {
3380bcf168bSTushar Behera }
3390bcf168bSTushar Behera 
3400bcf168bSTushar Behera static inline struct pwm_device *devm_pwm_get(struct device *dev,
3410bcf168bSTushar Behera 					      const char *consumer)
3420bcf168bSTushar Behera {
3430bcf168bSTushar Behera 	return ERR_PTR(-ENODEV);
3440bcf168bSTushar Behera }
3450bcf168bSTushar Behera 
346261a5eddSPeter Ujfalusi static inline struct pwm_device *devm_of_pwm_get(struct device *dev,
347261a5eddSPeter Ujfalusi 						 struct device_node *np,
348261a5eddSPeter Ujfalusi 						 const char *con_id)
349261a5eddSPeter Ujfalusi {
350261a5eddSPeter Ujfalusi 	return ERR_PTR(-ENODEV);
351261a5eddSPeter Ujfalusi }
352261a5eddSPeter Ujfalusi 
3530bcf168bSTushar Behera static inline void devm_pwm_put(struct device *dev, struct pwm_device *pwm)
3540bcf168bSTushar Behera {
3550bcf168bSTushar Behera }
3566e69ab13SFlorian Vaussard 
3576e69ab13SFlorian Vaussard static inline bool pwm_can_sleep(struct pwm_device *pwm)
3586e69ab13SFlorian Vaussard {
3596e69ab13SFlorian Vaussard 	return false;
3606e69ab13SFlorian Vaussard }
3610bcf168bSTushar Behera #endif
3626354316dSAlexandre Courbot 
3638138d2ddSThierry Reding struct pwm_lookup {
3648138d2ddSThierry Reding 	struct list_head list;
3658138d2ddSThierry Reding 	const char *provider;
3668138d2ddSThierry Reding 	unsigned int index;
3678138d2ddSThierry Reding 	const char *dev_id;
3688138d2ddSThierry Reding 	const char *con_id;
3693796ce1dSAlexandre Belloni 	unsigned int period;
3703796ce1dSAlexandre Belloni 	enum pwm_polarity polarity;
3718138d2ddSThierry Reding };
3728138d2ddSThierry Reding 
37342844029SAlexandre Belloni #define PWM_LOOKUP(_provider, _index, _dev_id, _con_id, _period, _polarity) \
3748138d2ddSThierry Reding 	{						\
3758138d2ddSThierry Reding 		.provider = _provider,			\
3768138d2ddSThierry Reding 		.index = _index,			\
3778138d2ddSThierry Reding 		.dev_id = _dev_id,			\
3788138d2ddSThierry Reding 		.con_id = _con_id,			\
37942844029SAlexandre Belloni 		.period = _period,			\
38042844029SAlexandre Belloni 		.polarity = _polarity			\
3818138d2ddSThierry Reding 	}
3828138d2ddSThierry Reding 
3830bcf168bSTushar Behera #if IS_ENABLED(CONFIG_PWM)
3848138d2ddSThierry Reding void pwm_add_table(struct pwm_lookup *table, size_t num);
385efb0de55SShobhit Kumar void pwm_remove_table(struct pwm_lookup *table, size_t num);
3860bcf168bSTushar Behera #else
3870bcf168bSTushar Behera static inline void pwm_add_table(struct pwm_lookup *table, size_t num)
3880bcf168bSTushar Behera {
3890bcf168bSTushar Behera }
390efb0de55SShobhit Kumar 
391efb0de55SShobhit Kumar static inline void pwm_remove_table(struct pwm_lookup *table, size_t num)
392efb0de55SShobhit Kumar {
393efb0de55SShobhit Kumar }
3940c2498f1SSascha Hauer #endif
3950c2498f1SSascha Hauer 
39676abbddeSH Hartley Sweeten #ifdef CONFIG_PWM_SYSFS
39776abbddeSH Hartley Sweeten void pwmchip_sysfs_export(struct pwm_chip *chip);
39876abbddeSH Hartley Sweeten void pwmchip_sysfs_unexport(struct pwm_chip *chip);
39976abbddeSH Hartley Sweeten #else
40076abbddeSH Hartley Sweeten static inline void pwmchip_sysfs_export(struct pwm_chip *chip)
40176abbddeSH Hartley Sweeten {
40276abbddeSH Hartley Sweeten }
40376abbddeSH Hartley Sweeten 
40476abbddeSH Hartley Sweeten static inline void pwmchip_sysfs_unexport(struct pwm_chip *chip)
40576abbddeSH Hartley Sweeten {
40676abbddeSH Hartley Sweeten }
40776abbddeSH Hartley Sweeten #endif /* CONFIG_PWM_SYSFS */
40876abbddeSH Hartley Sweeten 
4095243ef8bSMark Vels #endif /* __LINUX_PWM_H */
410