uboot/include/pwm.h
<<
>>
Prefs
   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