#include <linux/clk.h>
#include <linux/err.h>
#include <linux/io.h>
#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/mutex.h>
#include <linux/of.h>
#include <linux/platform_device.h>
#include <linux/pm.h>
#include <linux/pwm.h>
#include <linux/regmap.h>
#include <linux/slab.h>
#include <linux/fsl/ftm.h>
#define FTM_SC_CLK(c) …
enum fsl_pwm_clk { … };
struct fsl_ftm_soc { … };
struct fsl_pwm_periodcfg { … };
struct fsl_pwm_chip { … };
static inline struct fsl_pwm_chip *to_fsl_chip(struct pwm_chip *chip)
{ … }
static void ftm_clear_write_protection(struct fsl_pwm_chip *fpc)
{ … }
static void ftm_set_write_protection(struct fsl_pwm_chip *fpc)
{ … }
static bool fsl_pwm_periodcfg_are_equal(const struct fsl_pwm_periodcfg *a,
const struct fsl_pwm_periodcfg *b)
{ … }
static int fsl_pwm_request(struct pwm_chip *chip, struct pwm_device *pwm)
{ … }
static void fsl_pwm_free(struct pwm_chip *chip, struct pwm_device *pwm)
{ … }
static unsigned int fsl_pwm_ticks_to_ns(struct fsl_pwm_chip *fpc,
unsigned int ticks)
{ … }
static bool fsl_pwm_calculate_period_clk(struct fsl_pwm_chip *fpc,
unsigned int period_ns,
enum fsl_pwm_clk index,
struct fsl_pwm_periodcfg *periodcfg
)
{ … }
static bool fsl_pwm_calculate_period(struct fsl_pwm_chip *fpc,
unsigned int period_ns,
struct fsl_pwm_periodcfg *periodcfg)
{ … }
static unsigned int fsl_pwm_calculate_duty(struct fsl_pwm_chip *fpc,
unsigned int duty_ns)
{ … }
static bool fsl_pwm_is_any_pwm_enabled(struct fsl_pwm_chip *fpc,
struct pwm_device *pwm)
{ … }
static bool fsl_pwm_is_other_pwm_enabled(struct fsl_pwm_chip *fpc,
struct pwm_device *pwm)
{ … }
static int fsl_pwm_apply_config(struct pwm_chip *chip,
struct pwm_device *pwm,
const struct pwm_state *newstate)
{ … }
static int fsl_pwm_apply(struct pwm_chip *chip, struct pwm_device *pwm,
const struct pwm_state *newstate)
{ … }
static const struct pwm_ops fsl_pwm_ops = …;
static int fsl_pwm_init(struct fsl_pwm_chip *fpc)
{ … }
static bool fsl_pwm_volatile_reg(struct device *dev, unsigned int reg)
{ … }
static const struct regmap_config fsl_pwm_regmap_config = …;
static int fsl_pwm_probe(struct platform_device *pdev)
{ … }
#ifdef CONFIG_PM_SLEEP
static int fsl_pwm_suspend(struct device *dev)
{ … }
static int fsl_pwm_resume(struct device *dev)
{ … }
#endif
static const struct dev_pm_ops fsl_pwm_pm_ops = …;
static const struct fsl_ftm_soc vf610_ftm_pwm = …;
static const struct fsl_ftm_soc imx8qm_ftm_pwm = …;
static const struct of_device_id fsl_pwm_dt_ids[] = …;
MODULE_DEVICE_TABLE(of, fsl_pwm_dt_ids);
static struct platform_driver fsl_pwm_driver = …;
module_platform_driver(…) …;
MODULE_DESCRIPTION(…) …;
MODULE_AUTHOR(…) …;
MODULE_ALIAS(…) …;
MODULE_LICENSE(…) …;