1 /* 2 * header file for pwm driver. 3 * 4 * Copyright 2016 Google Inc. 5 * Copyright (c) 2011 samsung electronics 6 * Donghwa Lee <dh09.lee@samsung.com> 7 * 8 * SPDX-License-Identifier: GPL-2.0+ 9 */ 10 11 #ifndef _pwm_h_ 12 #define _pwm_h_ 13 14 /* struct pwm_ops: Operations for the PWM uclass */ 15 struct pwm_ops { 16 /** 17 * set_config() - Set the PWM configuration 18 * 19 * @dev: PWM device to update 20 * @channel: PWM channel to update 21 * @period_ns: PWM period in nanoseconds 22 * @duty_ns: PWM duty period in nanoseconds 23 * @return 0 if OK, -ve on error 24 */ 25 int (*set_config)(struct udevice *dev, uint channel, uint period_ns, 26 uint duty_ns); 27 28 /** 29 * set_enable() - Enable or disable the PWM 30 * 31 * @dev: PWM device to update 32 * @channel: PWM channel to update 33 * @enable: true to enable, false to disable 34 * @return 0 if OK, -ve on error 35 */ 36 int (*set_enable)(struct udevice *dev, uint channel, bool enable); 37 }; 38 39 #define pwm_get_ops(dev) ((struct pwm_ops *)(dev)->driver->ops) 40 41 /** 42 * pwm_set_config() - Set the PWM configuration 43 * 44 * @dev: PWM device to update 45 * @channel: PWM channel to update 46 * @period_ns: PWM period in nanoseconds 47 * @duty_ns: PWM duty period in nanoseconds 48 * @return 0 if OK, -ve on error 49 */ 50 int pwm_set_config(struct udevice *dev, uint channel, uint period_ns, 51 uint duty_ns); 52 53 /** 54 * pwm_set_enable() - Enable or disable the PWM 55 * 56 * @dev: PWM device to update 57 * @channel: PWM channel to update 58 * @enable: true to enable, false to disable 59 * @return 0 if OK, -ve on error 60 */ 61 int pwm_set_enable(struct udevice *dev, uint channel, bool enable); 62 63 /* Legacy interface */ 64 #ifndef CONFIG_DM_PWM 65 int pwm_init (int pwm_id, int div, int invert); 66 int pwm_config (int pwm_id, int duty_ns, int period_ns); 67 int pwm_enable (int pwm_id); 68 void pwm_disable (int pwm_id); 69 #endif 70 71 #endif /* _pwm_h_ */ 72