1/* SPDX-License-Identifier: GPL-2.0+ */ 2/* 3 * header file for pwm driver. 4 * 5 * Copyright 2016 Google Inc. 6 * Copyright (c) 2011 samsung electronics 7 * Donghwa Lee <dh09.lee@samsung.com> 8 */ 9 10#ifndef _pwm_h_ 11#define _pwm_h_ 12 13struct udevice; 14 15/* struct pwm_ops: Operations for the PWM uclass */ 16struct pwm_ops { 17 /** 18 * set_config() - Set the PWM configuration 19 * 20 * Change both the PWM device's period and it's duty period if 21 * possible. Otherwise, set an appropriate duty period that best 22 * matches the given period_ns / duty_ns ratio for the device. 23 * 24 * @dev: PWM device to update 25 * @channel: PWM channel to update 26 * @period_ns: PWM period in nanoseconds 27 * @duty_ns: PWM duty period in nanoseconds 28 * @return 0 if OK, -ve on error 29 */ 30 int (*set_config)(struct udevice *dev, uint channel, uint period_ns, 31 uint duty_ns); 32 33 /** 34 * set_enable() - Enable or disable the PWM 35 * 36 * @dev: PWM device to update 37 * @channel: PWM channel to update 38 * @enable: true to enable, false to disable 39 * @return 0 if OK, -ve on error 40 */ 41 int (*set_enable)(struct udevice *dev, uint channel, bool enable); 42 /** 43 * set_invert() - Set the PWM invert 44 * 45 * @dev: PWM device to update 46 * @channel: PWM channel to update 47 * @polarity: true to invert, false to keep normal polarity 48 * @return 0 if OK, -ve on error 49 */ 50 int (*set_invert)(struct udevice *dev, uint channel, bool polarity); 51}; 52 53#define pwm_get_ops(dev) ((struct pwm_ops *)(dev)->driver->ops) 54 55/** 56 * pwm_set_config() - Set the PWM configuration 57 * 58 * Change both the PWM device's period and it's duty period if 59 * possible. Otherwise, set an appropriate duty period that best 60 * matches the given period_ns / duty_ns ratio for the device. 61 * 62 * @dev: PWM device to update 63 * @channel: PWM channel to update 64 * @period_ns: PWM period in nanoseconds 65 * @duty_ns: PWM duty period in nanoseconds 66 * @return 0 if OK, -ve on error 67 */ 68int pwm_set_config(struct udevice *dev, uint channel, uint period_ns, 69 uint duty_ns); 70 71/** 72 * pwm_set_enable() - Enable or disable the PWM 73 * 74 * @dev: PWM device to update 75 * @channel: PWM channel to update 76 * @enable: true to enable, false to disable 77 * @return 0 if OK, -ve on error 78 */ 79int pwm_set_enable(struct udevice *dev, uint channel, bool enable); 80 81/** 82 * pwm_set_invert() - Set pwm default polarity 83 * 84 * @dev: PWM device to update 85 * @channel: PWM channel to update 86 * @polarity: true to invert, false to keep normal polarity 87 * @return 0 if OK, -ve on error 88 */ 89int pwm_set_invert(struct udevice *dev, uint channel, bool polarity); 90 91/* Legacy interface */ 92#ifndef CONFIG_DM_PWM 93int pwm_init (int pwm_id, int div, int invert); 94int pwm_config (int pwm_id, int duty_ns, int period_ns); 95int pwm_enable (int pwm_id); 96void pwm_disable (int pwm_id); 97#endif 98 99#endif /* _pwm_h_ */ 100