11a189b97190d3f0f8cf0379a799d3555b2d648bbRussell King#ifndef __LINUX_PWM_H
21a189b97190d3f0f8cf0379a799d3555b2d648bbRussell King#define __LINUX_PWM_H
31a189b97190d3f0f8cf0379a799d3555b2d648bbRussell King
40bcf168b024871c64eb5df157739efd2ae9b0bdfTushar Behera#include <linux/err.h>
57299ab70e68e20e70cb45fe4ab4b6029fe964acdThierry Reding#include <linux/of.h>
67299ab70e68e20e70cb45fe4ab4b6029fe964acdThierry Reding
71a189b97190d3f0f8cf0379a799d3555b2d648bbRussell Kingstruct pwm_device;
862099abf67a20cfb98d4c031fb1925e10a78ee1bThierry Redingstruct seq_file;
91a189b97190d3f0f8cf0379a799d3555b2d648bbRussell King
10557fe99d9d490fe01c7aa87494313078c4ff939cSascha Hauer#if IS_ENABLED(CONFIG_PWM)
111a189b97190d3f0f8cf0379a799d3555b2d648bbRussell King/*
121a189b97190d3f0f8cf0379a799d3555b2d648bbRussell King * pwm_request - request a PWM device
131a189b97190d3f0f8cf0379a799d3555b2d648bbRussell King */
141a189b97190d3f0f8cf0379a799d3555b2d648bbRussell Kingstruct pwm_device *pwm_request(int pwm_id, const char *label);
151a189b97190d3f0f8cf0379a799d3555b2d648bbRussell King
161a189b97190d3f0f8cf0379a799d3555b2d648bbRussell King/*
171a189b97190d3f0f8cf0379a799d3555b2d648bbRussell King * pwm_free - free a PWM device
181a189b97190d3f0f8cf0379a799d3555b2d648bbRussell King */
191a189b97190d3f0f8cf0379a799d3555b2d648bbRussell Kingvoid pwm_free(struct pwm_device *pwm);
201a189b97190d3f0f8cf0379a799d3555b2d648bbRussell King
211a189b97190d3f0f8cf0379a799d3555b2d648bbRussell King/*
221a189b97190d3f0f8cf0379a799d3555b2d648bbRussell King * pwm_config - change a PWM device configuration
231a189b97190d3f0f8cf0379a799d3555b2d648bbRussell King */
241a189b97190d3f0f8cf0379a799d3555b2d648bbRussell Kingint pwm_config(struct pwm_device *pwm, int duty_ns, int period_ns);
251a189b97190d3f0f8cf0379a799d3555b2d648bbRussell King
261a189b97190d3f0f8cf0379a799d3555b2d648bbRussell King/*
271a189b97190d3f0f8cf0379a799d3555b2d648bbRussell King * pwm_enable - start a PWM output toggling
281a189b97190d3f0f8cf0379a799d3555b2d648bbRussell King */
291a189b97190d3f0f8cf0379a799d3555b2d648bbRussell Kingint pwm_enable(struct pwm_device *pwm);
301a189b97190d3f0f8cf0379a799d3555b2d648bbRussell King
311a189b97190d3f0f8cf0379a799d3555b2d648bbRussell King/*
321a189b97190d3f0f8cf0379a799d3555b2d648bbRussell King * pwm_disable - stop a PWM output toggling
331a189b97190d3f0f8cf0379a799d3555b2d648bbRussell King */
341a189b97190d3f0f8cf0379a799d3555b2d648bbRussell Kingvoid pwm_disable(struct pwm_device *pwm);
350bcf168b024871c64eb5df157739efd2ae9b0bdfTushar Behera#else
360bcf168b024871c64eb5df157739efd2ae9b0bdfTushar Beherastatic inline struct pwm_device *pwm_request(int pwm_id, const char *label)
370bcf168b024871c64eb5df157739efd2ae9b0bdfTushar Behera{
380bcf168b024871c64eb5df157739efd2ae9b0bdfTushar Behera	return ERR_PTR(-ENODEV);
390bcf168b024871c64eb5df157739efd2ae9b0bdfTushar Behera}
400bcf168b024871c64eb5df157739efd2ae9b0bdfTushar Behera
410bcf168b024871c64eb5df157739efd2ae9b0bdfTushar Beherastatic inline void pwm_free(struct pwm_device *pwm)
420bcf168b024871c64eb5df157739efd2ae9b0bdfTushar Behera{
430bcf168b024871c64eb5df157739efd2ae9b0bdfTushar Behera}
440bcf168b024871c64eb5df157739efd2ae9b0bdfTushar Behera
450bcf168b024871c64eb5df157739efd2ae9b0bdfTushar Beherastatic inline int pwm_config(struct pwm_device *pwm, int duty_ns, int period_ns)
460bcf168b024871c64eb5df157739efd2ae9b0bdfTushar Behera{
470bcf168b024871c64eb5df157739efd2ae9b0bdfTushar Behera	return -EINVAL;
480bcf168b024871c64eb5df157739efd2ae9b0bdfTushar Behera}
490bcf168b024871c64eb5df157739efd2ae9b0bdfTushar Behera
500bcf168b024871c64eb5df157739efd2ae9b0bdfTushar Beherastatic inline int pwm_enable(struct pwm_device *pwm)
510bcf168b024871c64eb5df157739efd2ae9b0bdfTushar Behera{
520bcf168b024871c64eb5df157739efd2ae9b0bdfTushar Behera	return -EINVAL;
530bcf168b024871c64eb5df157739efd2ae9b0bdfTushar Behera}
540bcf168b024871c64eb5df157739efd2ae9b0bdfTushar Behera
550bcf168b024871c64eb5df157739efd2ae9b0bdfTushar Beherastatic inline void pwm_disable(struct pwm_device *pwm)
560bcf168b024871c64eb5df157739efd2ae9b0bdfTushar Behera{
570bcf168b024871c64eb5df157739efd2ae9b0bdfTushar Behera}
580bcf168b024871c64eb5df157739efd2ae9b0bdfTushar Behera#endif
591a189b97190d3f0f8cf0379a799d3555b2d648bbRussell King
600c2498f1660878339350bea8d18550b1b87ca055Sascha Hauerstruct pwm_chip;
610c2498f1660878339350bea8d18550b1b87ca055Sascha Hauer
620aa0869c3c9b10338dd92a20fa4a9b6959f177b5Philip, Avinash/**
630aa0869c3c9b10338dd92a20fa4a9b6959f177b5Philip, Avinash * enum pwm_polarity - polarity of a PWM signal
640aa0869c3c9b10338dd92a20fa4a9b6959f177b5Philip, Avinash * @PWM_POLARITY_NORMAL: a high signal for the duration of the duty-
650aa0869c3c9b10338dd92a20fa4a9b6959f177b5Philip, Avinash * cycle, followed by a low signal for the remainder of the pulse
660aa0869c3c9b10338dd92a20fa4a9b6959f177b5Philip, Avinash * period
670aa0869c3c9b10338dd92a20fa4a9b6959f177b5Philip, Avinash * @PWM_POLARITY_INVERSED: a low signal for the duration of the duty-
680aa0869c3c9b10338dd92a20fa4a9b6959f177b5Philip, Avinash * cycle, followed by a high signal for the remainder of the pulse
690aa0869c3c9b10338dd92a20fa4a9b6959f177b5Philip, Avinash * period
700aa0869c3c9b10338dd92a20fa4a9b6959f177b5Philip, Avinash */
710aa0869c3c9b10338dd92a20fa4a9b6959f177b5Philip, Avinashenum pwm_polarity {
720aa0869c3c9b10338dd92a20fa4a9b6959f177b5Philip, Avinash	PWM_POLARITY_NORMAL,
730aa0869c3c9b10338dd92a20fa4a9b6959f177b5Philip, Avinash	PWM_POLARITY_INVERSED,
740aa0869c3c9b10338dd92a20fa4a9b6959f177b5Philip, Avinash};
750aa0869c3c9b10338dd92a20fa4a9b6959f177b5Philip, Avinash
76f051c466cf690ac661d713d3ceb56b4efcecc853Thierry Redingenum {
77f051c466cf690ac661d713d3ceb56b4efcecc853Thierry Reding	PWMF_REQUESTED = 1 << 0,
78f051c466cf690ac661d713d3ceb56b4efcecc853Thierry Reding	PWMF_ENABLED = 1 << 1,
7976abbdde2d95a3807d0dc6bf9f84d03d0dbd4f3dH Hartley Sweeten	PWMF_EXPORTED = 1 << 2,
80f051c466cf690ac661d713d3ceb56b4efcecc853Thierry Reding};
81f051c466cf690ac661d713d3ceb56b4efcecc853Thierry Reding
82f051c466cf690ac661d713d3ceb56b4efcecc853Thierry Redingstruct pwm_device {
83f051c466cf690ac661d713d3ceb56b4efcecc853Thierry Reding	const char		*label;
84f051c466cf690ac661d713d3ceb56b4efcecc853Thierry Reding	unsigned long		flags;
85f051c466cf690ac661d713d3ceb56b4efcecc853Thierry Reding	unsigned int		hwpwm;
86f051c466cf690ac661d713d3ceb56b4efcecc853Thierry Reding	unsigned int		pwm;
87f051c466cf690ac661d713d3ceb56b4efcecc853Thierry Reding	struct pwm_chip		*chip;
88f051c466cf690ac661d713d3ceb56b4efcecc853Thierry Reding	void			*chip_data;
89f051c466cf690ac661d713d3ceb56b4efcecc853Thierry Reding
9076abbdde2d95a3807d0dc6bf9f84d03d0dbd4f3dH Hartley Sweeten	unsigned int		period; 	/* in nanoseconds */
9176abbdde2d95a3807d0dc6bf9f84d03d0dbd4f3dH Hartley Sweeten	unsigned int		duty_cycle;	/* in nanoseconds */
9276abbdde2d95a3807d0dc6bf9f84d03d0dbd4f3dH Hartley Sweeten	enum pwm_polarity	polarity;
93f051c466cf690ac661d713d3ceb56b4efcecc853Thierry Reding};
94f051c466cf690ac661d713d3ceb56b4efcecc853Thierry Reding
95f051c466cf690ac661d713d3ceb56b4efcecc853Thierry Redingstatic inline void pwm_set_period(struct pwm_device *pwm, unsigned int period)
96f051c466cf690ac661d713d3ceb56b4efcecc853Thierry Reding{
97f051c466cf690ac661d713d3ceb56b4efcecc853Thierry Reding	if (pwm)
98f051c466cf690ac661d713d3ceb56b4efcecc853Thierry Reding		pwm->period = period;
99f051c466cf690ac661d713d3ceb56b4efcecc853Thierry Reding}
100f051c466cf690ac661d713d3ceb56b4efcecc853Thierry Reding
101f051c466cf690ac661d713d3ceb56b4efcecc853Thierry Redingstatic inline unsigned int pwm_get_period(struct pwm_device *pwm)
102f051c466cf690ac661d713d3ceb56b4efcecc853Thierry Reding{
103f051c466cf690ac661d713d3ceb56b4efcecc853Thierry Reding	return pwm ? pwm->period : 0;
104f051c466cf690ac661d713d3ceb56b4efcecc853Thierry Reding}
105f051c466cf690ac661d713d3ceb56b4efcecc853Thierry Reding
10676abbdde2d95a3807d0dc6bf9f84d03d0dbd4f3dH Hartley Sweetenstatic inline void pwm_set_duty_cycle(struct pwm_device *pwm, unsigned int duty)
10776abbdde2d95a3807d0dc6bf9f84d03d0dbd4f3dH Hartley Sweeten{
10876abbdde2d95a3807d0dc6bf9f84d03d0dbd4f3dH Hartley Sweeten	if (pwm)
10976abbdde2d95a3807d0dc6bf9f84d03d0dbd4f3dH Hartley Sweeten		pwm->duty_cycle = duty;
11076abbdde2d95a3807d0dc6bf9f84d03d0dbd4f3dH Hartley Sweeten}
11176abbdde2d95a3807d0dc6bf9f84d03d0dbd4f3dH Hartley Sweeten
11276abbdde2d95a3807d0dc6bf9f84d03d0dbd4f3dH Hartley Sweetenstatic inline unsigned int pwm_get_duty_cycle(struct pwm_device *pwm)
11376abbdde2d95a3807d0dc6bf9f84d03d0dbd4f3dH Hartley Sweeten{
11476abbdde2d95a3807d0dc6bf9f84d03d0dbd4f3dH Hartley Sweeten	return pwm ? pwm->duty_cycle : 0;
11576abbdde2d95a3807d0dc6bf9f84d03d0dbd4f3dH Hartley Sweeten}
11676abbdde2d95a3807d0dc6bf9f84d03d0dbd4f3dH Hartley Sweeten
1170aa0869c3c9b10338dd92a20fa4a9b6959f177b5Philip, Avinash/*
1180aa0869c3c9b10338dd92a20fa4a9b6959f177b5Philip, Avinash * pwm_set_polarity - configure the polarity of a PWM signal
1190aa0869c3c9b10338dd92a20fa4a9b6959f177b5Philip, Avinash */
1200aa0869c3c9b10338dd92a20fa4a9b6959f177b5Philip, Avinashint pwm_set_polarity(struct pwm_device *pwm, enum pwm_polarity polarity);
1210aa0869c3c9b10338dd92a20fa4a9b6959f177b5Philip, Avinash
1220c2498f1660878339350bea8d18550b1b87ca055Sascha Hauer/**
1230c2498f1660878339350bea8d18550b1b87ca055Sascha Hauer * struct pwm_ops - PWM controller operations
1240c2498f1660878339350bea8d18550b1b87ca055Sascha Hauer * @request: optional hook for requesting a PWM
1250c2498f1660878339350bea8d18550b1b87ca055Sascha Hauer * @free: optional hook for freeing a PWM
1260c2498f1660878339350bea8d18550b1b87ca055Sascha Hauer * @config: configure duty cycles and period length for this PWM
1270aa0869c3c9b10338dd92a20fa4a9b6959f177b5Philip, Avinash * @set_polarity: configure the polarity of this PWM
1280c2498f1660878339350bea8d18550b1b87ca055Sascha Hauer * @enable: enable PWM output toggling
1290c2498f1660878339350bea8d18550b1b87ca055Sascha Hauer * @disable: disable PWM output toggling
13062099abf67a20cfb98d4c031fb1925e10a78ee1bThierry Reding * @dbg_show: optional routine to show contents in debugfs
1310c2498f1660878339350bea8d18550b1b87ca055Sascha Hauer * @owner: helps prevent removal of modules exporting active PWMs
1320c2498f1660878339350bea8d18550b1b87ca055Sascha Hauer */
1330c2498f1660878339350bea8d18550b1b87ca055Sascha Hauerstruct pwm_ops {
134f051c466cf690ac661d713d3ceb56b4efcecc853Thierry Reding	int			(*request)(struct pwm_chip *chip,
135f051c466cf690ac661d713d3ceb56b4efcecc853Thierry Reding					   struct pwm_device *pwm);
136f051c466cf690ac661d713d3ceb56b4efcecc853Thierry Reding	void			(*free)(struct pwm_chip *chip,
137f051c466cf690ac661d713d3ceb56b4efcecc853Thierry Reding					struct pwm_device *pwm);
138f051c466cf690ac661d713d3ceb56b4efcecc853Thierry Reding	int			(*config)(struct pwm_chip *chip,
139f051c466cf690ac661d713d3ceb56b4efcecc853Thierry Reding					  struct pwm_device *pwm,
140f051c466cf690ac661d713d3ceb56b4efcecc853Thierry Reding					  int duty_ns, int period_ns);
1410aa0869c3c9b10338dd92a20fa4a9b6959f177b5Philip, Avinash	int			(*set_polarity)(struct pwm_chip *chip,
1420aa0869c3c9b10338dd92a20fa4a9b6959f177b5Philip, Avinash					  struct pwm_device *pwm,
1430aa0869c3c9b10338dd92a20fa4a9b6959f177b5Philip, Avinash					  enum pwm_polarity polarity);
144f051c466cf690ac661d713d3ceb56b4efcecc853Thierry Reding	int			(*enable)(struct pwm_chip *chip,
145f051c466cf690ac661d713d3ceb56b4efcecc853Thierry Reding					  struct pwm_device *pwm);
146f051c466cf690ac661d713d3ceb56b4efcecc853Thierry Reding	void			(*disable)(struct pwm_chip *chip,
147f051c466cf690ac661d713d3ceb56b4efcecc853Thierry Reding					   struct pwm_device *pwm);
14862099abf67a20cfb98d4c031fb1925e10a78ee1bThierry Reding#ifdef CONFIG_DEBUG_FS
14962099abf67a20cfb98d4c031fb1925e10a78ee1bThierry Reding	void			(*dbg_show)(struct pwm_chip *chip,
15062099abf67a20cfb98d4c031fb1925e10a78ee1bThierry Reding					    struct seq_file *s);
15162099abf67a20cfb98d4c031fb1925e10a78ee1bThierry Reding#endif
1520c2498f1660878339350bea8d18550b1b87ca055Sascha Hauer	struct module		*owner;
1530c2498f1660878339350bea8d18550b1b87ca055Sascha Hauer};
1540c2498f1660878339350bea8d18550b1b87ca055Sascha Hauer
1550c2498f1660878339350bea8d18550b1b87ca055Sascha Hauer/**
156f051c466cf690ac661d713d3ceb56b4efcecc853Thierry Reding * struct pwm_chip - abstract a PWM controller
157f051c466cf690ac661d713d3ceb56b4efcecc853Thierry Reding * @dev: device providing the PWMs
158f051c466cf690ac661d713d3ceb56b4efcecc853Thierry Reding * @list: list node for internal use
159f051c466cf690ac661d713d3ceb56b4efcecc853Thierry Reding * @ops: callbacks for this PWM controller
160f051c466cf690ac661d713d3ceb56b4efcecc853Thierry Reding * @base: number of first PWM controlled by this chip
161f051c466cf690ac661d713d3ceb56b4efcecc853Thierry Reding * @npwm: number of PWMs controlled by this chip
162f051c466cf690ac661d713d3ceb56b4efcecc853Thierry Reding * @pwms: array of PWM devices allocated by the framework
1636e69ab1361c44e3ee1398158b56d114b1aef8179Florian Vaussard * @can_sleep: must be true if the .config(), .enable() or .disable()
1646e69ab1361c44e3ee1398158b56d114b1aef8179Florian Vaussard *             operations may sleep
1650c2498f1660878339350bea8d18550b1b87ca055Sascha Hauer */
1660c2498f1660878339350bea8d18550b1b87ca055Sascha Hauerstruct pwm_chip {
167f051c466cf690ac661d713d3ceb56b4efcecc853Thierry Reding	struct device		*dev;
168f051c466cf690ac661d713d3ceb56b4efcecc853Thierry Reding	struct list_head	list;
169f051c466cf690ac661d713d3ceb56b4efcecc853Thierry Reding	const struct pwm_ops	*ops;
170f051c466cf690ac661d713d3ceb56b4efcecc853Thierry Reding	int			base;
171f051c466cf690ac661d713d3ceb56b4efcecc853Thierry Reding	unsigned int		npwm;
172f051c466cf690ac661d713d3ceb56b4efcecc853Thierry Reding
173f051c466cf690ac661d713d3ceb56b4efcecc853Thierry Reding	struct pwm_device	*pwms;
1747299ab70e68e20e70cb45fe4ab4b6029fe964acdThierry Reding
1757299ab70e68e20e70cb45fe4ab4b6029fe964acdThierry Reding	struct pwm_device *	(*of_xlate)(struct pwm_chip *pc,
1767299ab70e68e20e70cb45fe4ab4b6029fe964acdThierry Reding					    const struct of_phandle_args *args);
1777299ab70e68e20e70cb45fe4ab4b6029fe964acdThierry Reding	unsigned int		of_pwm_n_cells;
1786e69ab1361c44e3ee1398158b56d114b1aef8179Florian Vaussard	bool			can_sleep;
1790c2498f1660878339350bea8d18550b1b87ca055Sascha Hauer};
1800c2498f1660878339350bea8d18550b1b87ca055Sascha Hauer
1810bcf168b024871c64eb5df157739efd2ae9b0bdfTushar Behera#if IS_ENABLED(CONFIG_PWM)
182f051c466cf690ac661d713d3ceb56b4efcecc853Thierry Redingint pwm_set_chip_data(struct pwm_device *pwm, void *data);
183f051c466cf690ac661d713d3ceb56b4efcecc853Thierry Redingvoid *pwm_get_chip_data(struct pwm_device *pwm);
184f051c466cf690ac661d713d3ceb56b4efcecc853Thierry Reding
1850c2498f1660878339350bea8d18550b1b87ca055Sascha Hauerint pwmchip_add(struct pwm_chip *chip);
1860c2498f1660878339350bea8d18550b1b87ca055Sascha Hauerint pwmchip_remove(struct pwm_chip *chip);
187f051c466cf690ac661d713d3ceb56b4efcecc853Thierry Redingstruct pwm_device *pwm_request_from_chip(struct pwm_chip *chip,
188f051c466cf690ac661d713d3ceb56b4efcecc853Thierry Reding					 unsigned int index,
189f051c466cf690ac661d713d3ceb56b4efcecc853Thierry Reding					 const char *label);
1908138d2ddbcca2a100482dac390133f83c5a60f94Thierry Reding
19183af24027b3df1af5c5a9aa9adcdcfeb3429d3bePhilip, Avinashstruct pwm_device *of_pwm_xlate_with_flags(struct pwm_chip *pc,
19283af24027b3df1af5c5a9aa9adcdcfeb3429d3bePhilip, Avinash		const struct of_phandle_args *args);
19383af24027b3df1af5c5a9aa9adcdcfeb3429d3bePhilip, Avinash
194d4c0c4705bef1134339b038872ece3705a2783e0Peter Ujfalusistruct pwm_device *pwm_get(struct device *dev, const char *con_id);
1958eb9612799605a7988d1c97cdc5980a5b8f04c56Peter Ujfalusistruct pwm_device *of_pwm_get(struct device_node *np, const char *con_id);
1968138d2ddbcca2a100482dac390133f83c5a60f94Thierry Redingvoid pwm_put(struct pwm_device *pwm);
1978138d2ddbcca2a100482dac390133f83c5a60f94Thierry Reding
198d4c0c4705bef1134339b038872ece3705a2783e0Peter Ujfalusistruct pwm_device *devm_pwm_get(struct device *dev, const char *con_id);
199261a5edd3ac77ecb4b33310a1dd1ed8d656f0569Peter Ujfalusistruct pwm_device *devm_of_pwm_get(struct device *dev, struct device_node *np,
200261a5edd3ac77ecb4b33310a1dd1ed8d656f0569Peter Ujfalusi				   const char *con_id);
2016354316dbe5a13b25bea15d7ffc891be025eb267Alexandre Courbotvoid devm_pwm_put(struct device *dev, struct pwm_device *pwm);
2026e69ab1361c44e3ee1398158b56d114b1aef8179Florian Vaussard
2036e69ab1361c44e3ee1398158b56d114b1aef8179Florian Vaussardbool pwm_can_sleep(struct pwm_device *pwm);
2040bcf168b024871c64eb5df157739efd2ae9b0bdfTushar Behera#else
2050bcf168b024871c64eb5df157739efd2ae9b0bdfTushar Beherastatic inline int pwm_set_chip_data(struct pwm_device *pwm, void *data)
2060bcf168b024871c64eb5df157739efd2ae9b0bdfTushar Behera{
2070bcf168b024871c64eb5df157739efd2ae9b0bdfTushar Behera	return -EINVAL;
2080bcf168b024871c64eb5df157739efd2ae9b0bdfTushar Behera}
2090bcf168b024871c64eb5df157739efd2ae9b0bdfTushar Behera
2100bcf168b024871c64eb5df157739efd2ae9b0bdfTushar Beherastatic inline void *pwm_get_chip_data(struct pwm_device *pwm)
2110bcf168b024871c64eb5df157739efd2ae9b0bdfTushar Behera{
2120bcf168b024871c64eb5df157739efd2ae9b0bdfTushar Behera	return NULL;
2130bcf168b024871c64eb5df157739efd2ae9b0bdfTushar Behera}
2140bcf168b024871c64eb5df157739efd2ae9b0bdfTushar Behera
2150bcf168b024871c64eb5df157739efd2ae9b0bdfTushar Beherastatic inline int pwmchip_add(struct pwm_chip *chip)
2160bcf168b024871c64eb5df157739efd2ae9b0bdfTushar Behera{
2170bcf168b024871c64eb5df157739efd2ae9b0bdfTushar Behera	return -EINVAL;
2180bcf168b024871c64eb5df157739efd2ae9b0bdfTushar Behera}
2190bcf168b024871c64eb5df157739efd2ae9b0bdfTushar Behera
2200bcf168b024871c64eb5df157739efd2ae9b0bdfTushar Beherastatic inline int pwmchip_remove(struct pwm_chip *chip)
2210bcf168b024871c64eb5df157739efd2ae9b0bdfTushar Behera{
2220bcf168b024871c64eb5df157739efd2ae9b0bdfTushar Behera	return -EINVAL;
2230bcf168b024871c64eb5df157739efd2ae9b0bdfTushar Behera}
2240bcf168b024871c64eb5df157739efd2ae9b0bdfTushar Behera
2250bcf168b024871c64eb5df157739efd2ae9b0bdfTushar Beherastatic inline struct pwm_device *pwm_request_from_chip(struct pwm_chip *chip,
2260bcf168b024871c64eb5df157739efd2ae9b0bdfTushar Behera						       unsigned int index,
2270bcf168b024871c64eb5df157739efd2ae9b0bdfTushar Behera						       const char *label)
2280bcf168b024871c64eb5df157739efd2ae9b0bdfTushar Behera{
2290bcf168b024871c64eb5df157739efd2ae9b0bdfTushar Behera	return ERR_PTR(-ENODEV);
2300bcf168b024871c64eb5df157739efd2ae9b0bdfTushar Behera}
2310bcf168b024871c64eb5df157739efd2ae9b0bdfTushar Behera
2320bcf168b024871c64eb5df157739efd2ae9b0bdfTushar Beherastatic inline struct pwm_device *pwm_get(struct device *dev,
2330bcf168b024871c64eb5df157739efd2ae9b0bdfTushar Behera					 const char *consumer)
2340bcf168b024871c64eb5df157739efd2ae9b0bdfTushar Behera{
2350bcf168b024871c64eb5df157739efd2ae9b0bdfTushar Behera	return ERR_PTR(-ENODEV);
2360bcf168b024871c64eb5df157739efd2ae9b0bdfTushar Behera}
2370bcf168b024871c64eb5df157739efd2ae9b0bdfTushar Behera
2388eb9612799605a7988d1c97cdc5980a5b8f04c56Peter Ujfalusistatic inline struct pwm_device *of_pwm_get(struct device_node *np,
2398eb9612799605a7988d1c97cdc5980a5b8f04c56Peter Ujfalusi					    const char *con_id)
2408eb9612799605a7988d1c97cdc5980a5b8f04c56Peter Ujfalusi{
2418eb9612799605a7988d1c97cdc5980a5b8f04c56Peter Ujfalusi	return ERR_PTR(-ENODEV);
2428eb9612799605a7988d1c97cdc5980a5b8f04c56Peter Ujfalusi}
2438eb9612799605a7988d1c97cdc5980a5b8f04c56Peter Ujfalusi
2440bcf168b024871c64eb5df157739efd2ae9b0bdfTushar Beherastatic inline void pwm_put(struct pwm_device *pwm)
2450bcf168b024871c64eb5df157739efd2ae9b0bdfTushar Behera{
2460bcf168b024871c64eb5df157739efd2ae9b0bdfTushar Behera}
2470bcf168b024871c64eb5df157739efd2ae9b0bdfTushar Behera
2480bcf168b024871c64eb5df157739efd2ae9b0bdfTushar Beherastatic inline struct pwm_device *devm_pwm_get(struct device *dev,
2490bcf168b024871c64eb5df157739efd2ae9b0bdfTushar Behera					      const char *consumer)
2500bcf168b024871c64eb5df157739efd2ae9b0bdfTushar Behera{
2510bcf168b024871c64eb5df157739efd2ae9b0bdfTushar Behera	return ERR_PTR(-ENODEV);
2520bcf168b024871c64eb5df157739efd2ae9b0bdfTushar Behera}
2530bcf168b024871c64eb5df157739efd2ae9b0bdfTushar Behera
254261a5edd3ac77ecb4b33310a1dd1ed8d656f0569Peter Ujfalusistatic inline struct pwm_device *devm_of_pwm_get(struct device *dev,
255261a5edd3ac77ecb4b33310a1dd1ed8d656f0569Peter Ujfalusi						 struct device_node *np,
256261a5edd3ac77ecb4b33310a1dd1ed8d656f0569Peter Ujfalusi						 const char *con_id)
257261a5edd3ac77ecb4b33310a1dd1ed8d656f0569Peter Ujfalusi{
258261a5edd3ac77ecb4b33310a1dd1ed8d656f0569Peter Ujfalusi	return ERR_PTR(-ENODEV);
259261a5edd3ac77ecb4b33310a1dd1ed8d656f0569Peter Ujfalusi}
260261a5edd3ac77ecb4b33310a1dd1ed8d656f0569Peter Ujfalusi
2610bcf168b024871c64eb5df157739efd2ae9b0bdfTushar Beherastatic inline void devm_pwm_put(struct device *dev, struct pwm_device *pwm)
2620bcf168b024871c64eb5df157739efd2ae9b0bdfTushar Behera{
2630bcf168b024871c64eb5df157739efd2ae9b0bdfTushar Behera}
2646e69ab1361c44e3ee1398158b56d114b1aef8179Florian Vaussard
2656e69ab1361c44e3ee1398158b56d114b1aef8179Florian Vaussardstatic inline bool pwm_can_sleep(struct pwm_device *pwm)
2666e69ab1361c44e3ee1398158b56d114b1aef8179Florian Vaussard{
2676e69ab1361c44e3ee1398158b56d114b1aef8179Florian Vaussard	return false;
2686e69ab1361c44e3ee1398158b56d114b1aef8179Florian Vaussard}
2690bcf168b024871c64eb5df157739efd2ae9b0bdfTushar Behera#endif
2706354316dbe5a13b25bea15d7ffc891be025eb267Alexandre Courbot
2718138d2ddbcca2a100482dac390133f83c5a60f94Thierry Redingstruct pwm_lookup {
2728138d2ddbcca2a100482dac390133f83c5a60f94Thierry Reding	struct list_head list;
2738138d2ddbcca2a100482dac390133f83c5a60f94Thierry Reding	const char *provider;
2748138d2ddbcca2a100482dac390133f83c5a60f94Thierry Reding	unsigned int index;
2758138d2ddbcca2a100482dac390133f83c5a60f94Thierry Reding	const char *dev_id;
2768138d2ddbcca2a100482dac390133f83c5a60f94Thierry Reding	const char *con_id;
2773796ce1d4d4b330a75005c5eda105603ce9d4071Alexandre Belloni	unsigned int period;
2783796ce1d4d4b330a75005c5eda105603ce9d4071Alexandre Belloni	enum pwm_polarity polarity;
2798138d2ddbcca2a100482dac390133f83c5a60f94Thierry Reding};
2808138d2ddbcca2a100482dac390133f83c5a60f94Thierry Reding
2814284402924cc55e182008ca7e9d4fb1e891ff5aeAlexandre Belloni#define PWM_LOOKUP(_provider, _index, _dev_id, _con_id, _period, _polarity) \
2828138d2ddbcca2a100482dac390133f83c5a60f94Thierry Reding	{						\
2838138d2ddbcca2a100482dac390133f83c5a60f94Thierry Reding		.provider = _provider,			\
2848138d2ddbcca2a100482dac390133f83c5a60f94Thierry Reding		.index = _index,			\
2858138d2ddbcca2a100482dac390133f83c5a60f94Thierry Reding		.dev_id = _dev_id,			\
2868138d2ddbcca2a100482dac390133f83c5a60f94Thierry Reding		.con_id = _con_id,			\
2874284402924cc55e182008ca7e9d4fb1e891ff5aeAlexandre Belloni		.period = _period,			\
2884284402924cc55e182008ca7e9d4fb1e891ff5aeAlexandre Belloni		.polarity = _polarity			\
2898138d2ddbcca2a100482dac390133f83c5a60f94Thierry Reding	}
2908138d2ddbcca2a100482dac390133f83c5a60f94Thierry Reding
2910bcf168b024871c64eb5df157739efd2ae9b0bdfTushar Behera#if IS_ENABLED(CONFIG_PWM)
2928138d2ddbcca2a100482dac390133f83c5a60f94Thierry Redingvoid pwm_add_table(struct pwm_lookup *table, size_t num);
2930bcf168b024871c64eb5df157739efd2ae9b0bdfTushar Behera#else
2940bcf168b024871c64eb5df157739efd2ae9b0bdfTushar Beherastatic inline void pwm_add_table(struct pwm_lookup *table, size_t num)
2950bcf168b024871c64eb5df157739efd2ae9b0bdfTushar Behera{
2960bcf168b024871c64eb5df157739efd2ae9b0bdfTushar Behera}
2970c2498f1660878339350bea8d18550b1b87ca055Sascha Hauer#endif
2980c2498f1660878339350bea8d18550b1b87ca055Sascha Hauer
29976abbdde2d95a3807d0dc6bf9f84d03d0dbd4f3dH Hartley Sweeten#ifdef CONFIG_PWM_SYSFS
30076abbdde2d95a3807d0dc6bf9f84d03d0dbd4f3dH Hartley Sweetenvoid pwmchip_sysfs_export(struct pwm_chip *chip);
30176abbdde2d95a3807d0dc6bf9f84d03d0dbd4f3dH Hartley Sweetenvoid pwmchip_sysfs_unexport(struct pwm_chip *chip);
30276abbdde2d95a3807d0dc6bf9f84d03d0dbd4f3dH Hartley Sweeten#else
30376abbdde2d95a3807d0dc6bf9f84d03d0dbd4f3dH Hartley Sweetenstatic inline void pwmchip_sysfs_export(struct pwm_chip *chip)
30476abbdde2d95a3807d0dc6bf9f84d03d0dbd4f3dH Hartley Sweeten{
30576abbdde2d95a3807d0dc6bf9f84d03d0dbd4f3dH Hartley Sweeten}
30676abbdde2d95a3807d0dc6bf9f84d03d0dbd4f3dH Hartley Sweeten
30776abbdde2d95a3807d0dc6bf9f84d03d0dbd4f3dH Hartley Sweetenstatic inline void pwmchip_sysfs_unexport(struct pwm_chip *chip)
30876abbdde2d95a3807d0dc6bf9f84d03d0dbd4f3dH Hartley Sweeten{
30976abbdde2d95a3807d0dc6bf9f84d03d0dbd4f3dH Hartley Sweeten}
31076abbdde2d95a3807d0dc6bf9f84d03d0dbd4f3dH Hartley Sweeten#endif /* CONFIG_PWM_SYSFS */
31176abbdde2d95a3807d0dc6bf9f84d03d0dbd4f3dH Hartley Sweeten
3125243ef8b54a927cae23216253e4e3f03af6f1446Mark Vels#endif /* __LINUX_PWM_H */
313