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